static void mon_init(void) { set_l2_indirect_reg(L2PMRESR2, 0x8B0B0000); set_l2_indirect_reg(L2PMnEVCNTCR(RD_MON), 0x0); set_l2_indirect_reg(L2PMnEVCNTCR(WR_MON), 0x0); set_l2_indirect_reg(L2PMnEVCNTR(RD_MON), 0xFFFFFFFF); set_l2_indirect_reg(L2PMnEVCNTR(WR_MON), 0xFFFFFFFF); set_l2_indirect_reg(L2PMnEVFILTER(RD_MON), 0xF003F); set_l2_indirect_reg(L2PMnEVFILTER(WR_MON), 0xF003F); set_l2_indirect_reg(L2PMnEVTYPER(RD_MON), 0xA); set_l2_indirect_reg(L2PMnEVTYPER(WR_MON), 0xB); }
static void mon_init(void) { /* Set up counters 0/1 to count write/read beats */ set_l2_indirect_reg(L2PMRESR2, 0x8B0B0000); set_l2_indirect_reg(L2PMnEVCNTCR(0), 0x0); set_l2_indirect_reg(L2PMnEVCNTCR(1), 0x0); set_l2_indirect_reg(L2PMnEVCNTR(0), 0xFFFFFFFF); set_l2_indirect_reg(L2PMnEVCNTR(1), 0xFFFFFFFF); set_l2_indirect_reg(L2PMnEVFILTER(0), 0xF003F); set_l2_indirect_reg(L2PMnEVFILTER(1), 0xF003F); set_l2_indirect_reg(L2PMnEVTYPER(0), 0xA); set_l2_indirect_reg(L2PMnEVTYPER(1), 0xB); }
static u32 mon_set_limit_mbyte(int n, unsigned int mbytes) { u32 regval, beats; beats = mult_frac(mbytes, SZ_1M, bytes_per_beat); regval = 0xFFFFFFFF - beats; set_l2_indirect_reg(L2PMnEVCNTR(n), regval); pr_debug("EV%d MB: %d, start val: %x\n", n, mbytes, regval); return regval; }
long mon_get_count(int n, u32 start_val) { u32 overflow, count; count = get_l2_indirect_reg(L2PMnEVCNTR(n)); overflow = get_l2_indirect_reg(L2PMOVSR); pr_debug("EV%d ov: %x, cnt: %x\n", n, overflow, count); if (overflow & BIT(n)) return 0xFFFFFFFF - start_val + count; else return count - start_val; }
/* Returns MBps of read/writes for the sampling window. */ static int mon_get_mbps(int n, u32 start_val, unsigned int us) { u32 overflow, count; long long beats; count = get_l2_indirect_reg(L2PMnEVCNTR(n)); overflow = get_l2_indirect_reg(L2PMOVSR); if (overflow & BIT(n)) beats = 0xFFFFFFFF - start_val + count; else beats = count - start_val; beats *= USEC_PER_SEC; beats *= bytes_per_beat; do_div(beats, us); beats = DIV_ROUND_UP_ULL(beats, MBYTE); pr_debug("EV%d ov: %x, cnt: %x\n", n, overflow, count); return beats; }