Lines Matching refs:blk_num
962 static bool mlxbf_pmc_valid_range(int blk_num, uint32_t offset) in mlxbf_pmc_valid_range() argument
965 (offset + MLXBF_PMC_REG_SIZE <= pmc->block[blk_num].blk_size)) in mlxbf_pmc_valid_range()
1083 static int mlxbf_pmc_config_l3_counters(int blk_num, bool enable, bool reset) in mlxbf_pmc_config_l3_counters() argument
1092 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_config_l3_counters()
1098 static int mlxbf_pmc_program_l3_counter(int blk_num, uint32_t cnt_num, in mlxbf_pmc_program_l3_counter() argument
1108 if (mlxbf_pmc_config_l3_counters(blk_num, false, false)) in mlxbf_pmc_program_l3_counter()
1114 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_l3_counter()
1119 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_l3_counter()
1165 static int mlxbf_pmc_program_crspace_counter(int blk_num, uint32_t cnt_num, in mlxbf_pmc_program_crspace_counter() argument
1172 addr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_crspace_counter()
1190 static int mlxbf_pmc_clear_crspace_counter(int blk_num, uint32_t cnt_num) in mlxbf_pmc_clear_crspace_counter() argument
1194 addr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_clear_crspace_counter()
1195 MLXBF_PMC_CRSPACE_PERFMON_VAL0(pmc->block[blk_num].counters) + in mlxbf_pmc_clear_crspace_counter()
1202 static int mlxbf_pmc_program_counter(int blk_num, uint32_t cnt_num, in mlxbf_pmc_program_counter() argument
1207 if (cnt_num >= pmc->block[blk_num].counters) in mlxbf_pmc_program_counter()
1211 return mlxbf_pmc_program_l3_counter(blk_num, cnt_num, evt); in mlxbf_pmc_program_counter()
1213 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) in mlxbf_pmc_program_counter()
1214 return mlxbf_pmc_program_crspace_counter(blk_num, cnt_num, in mlxbf_pmc_program_counter()
1232 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_counter()
1246 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_counter()
1257 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_counter()
1266 static int mlxbf_pmc_read_l3_counter(int blk_num, uint32_t cnt_num, in mlxbf_pmc_read_l3_counter() argument
1273 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_counter()
1281 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_counter()
1298 static int mlxbf_pmc_read_crspace_counter(int blk_num, uint32_t cnt_num, in mlxbf_pmc_read_crspace_counter() argument
1304 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_crspace_counter()
1305 MLXBF_PMC_CRSPACE_PERFMON_VAL0(pmc->block[blk_num].counters) + in mlxbf_pmc_read_crspace_counter()
1316 static int mlxbf_pmc_read_counter(int blk_num, uint32_t cnt_num, bool is_l3, in mlxbf_pmc_read_counter() argument
1323 if (cnt_num >= pmc->block[blk_num].counters) in mlxbf_pmc_read_counter()
1327 return mlxbf_pmc_read_l3_counter(blk_num, cnt_num, result); in mlxbf_pmc_read_counter()
1329 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) in mlxbf_pmc_read_counter()
1330 return mlxbf_pmc_read_crspace_counter(blk_num, cnt_num, result); in mlxbf_pmc_read_counter()
1334 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE; in mlxbf_pmc_read_counter()
1342 status = mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset, in mlxbf_pmc_read_counter()
1349 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset, in mlxbf_pmc_read_counter()
1354 static int mlxbf_pmc_read_l3_event(int blk_num, uint32_t cnt_num, in mlxbf_pmc_read_l3_event() argument
1365 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_event()
1370 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_event()
1408 static int mlxbf_pmc_read_crspace_event(int blk_num, uint32_t cnt_num, in mlxbf_pmc_read_crspace_event() argument
1415 addr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_crspace_event()
1432 static int mlxbf_pmc_read_event(int blk_num, uint32_t cnt_num, bool is_l3, in mlxbf_pmc_read_event() argument
1438 if (cnt_num >= pmc->block[blk_num].counters) in mlxbf_pmc_read_event()
1442 return mlxbf_pmc_read_l3_event(blk_num, cnt_num, result); in mlxbf_pmc_read_event()
1444 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) in mlxbf_pmc_read_event()
1445 return mlxbf_pmc_read_crspace_event(blk_num, cnt_num, result); in mlxbf_pmc_read_event()
1449 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE; in mlxbf_pmc_read_event()
1457 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset, in mlxbf_pmc_read_event()
1462 if (mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset, in mlxbf_pmc_read_event()
1472 static int mlxbf_pmc_read_reg(int blk_num, uint32_t offset, uint64_t *result) in mlxbf_pmc_read_reg() argument
1476 if (strstr(pmc->block_name[blk_num], "ecc")) { in mlxbf_pmc_read_reg()
1477 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_read_reg()
1485 if (mlxbf_pmc_valid_range(blk_num, offset)) in mlxbf_pmc_read_reg()
1486 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_read_reg()
1493 static int mlxbf_pmc_write_reg(int blk_num, uint32_t offset, uint64_t data) in mlxbf_pmc_write_reg() argument
1495 if (strstr(pmc->block_name[blk_num], "ecc")) { in mlxbf_pmc_write_reg()
1496 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_write_reg()
1500 if (mlxbf_pmc_valid_range(blk_num, offset)) in mlxbf_pmc_write_reg()
1501 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_write_reg()
1513 int blk_num, cnt_num, offset; in mlxbf_pmc_counter_show() local
1517 blk_num = attr_counter->nr; in mlxbf_pmc_counter_show()
1520 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_counter_show()
1523 if ((pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) || in mlxbf_pmc_counter_show()
1524 (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE)) { in mlxbf_pmc_counter_show()
1525 if (mlxbf_pmc_read_counter(blk_num, cnt_num, is_l3, &value)) in mlxbf_pmc_counter_show()
1527 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) { in mlxbf_pmc_counter_show()
1528 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num], in mlxbf_pmc_counter_show()
1532 if (mlxbf_pmc_read_reg(blk_num, offset, &value)) in mlxbf_pmc_counter_show()
1547 int blk_num, cnt_num, offset, err, data; in mlxbf_pmc_counter_store() local
1551 blk_num = attr_counter->nr; in mlxbf_pmc_counter_store()
1559 if (!(strstr(pmc->block_name[blk_num], "ecc")) && data) in mlxbf_pmc_counter_store()
1563 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_counter_store()
1566 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) { in mlxbf_pmc_counter_store()
1567 err = mlxbf_pmc_read_event(blk_num, cnt_num, is_l3, &evt_num); in mlxbf_pmc_counter_store()
1570 err = mlxbf_pmc_program_counter(blk_num, cnt_num, evt_num, in mlxbf_pmc_counter_store()
1574 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) { in mlxbf_pmc_counter_store()
1575 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num], in mlxbf_pmc_counter_store()
1579 err = mlxbf_pmc_write_reg(blk_num, offset, data); in mlxbf_pmc_counter_store()
1582 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) { in mlxbf_pmc_counter_store()
1585 err = mlxbf_pmc_clear_crspace_counter(blk_num, cnt_num); in mlxbf_pmc_counter_store()
1598 int blk_num, cnt_num, err; in mlxbf_pmc_event_show() local
1603 blk_num = attr_event->nr; in mlxbf_pmc_event_show()
1606 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_event_show()
1609 err = mlxbf_pmc_read_event(blk_num, cnt_num, is_l3, &evt_num); in mlxbf_pmc_event_show()
1613 evt_name = mlxbf_pmc_get_event_name(pmc->block_name[blk_num], evt_num); in mlxbf_pmc_event_show()
1627 int blk_num, cnt_num, evt_num, err; in mlxbf_pmc_event_store() local
1630 blk_num = attr_event->nr; in mlxbf_pmc_event_store()
1634 evt_num = mlxbf_pmc_get_event_num(pmc->block_name[blk_num], in mlxbf_pmc_event_store()
1644 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_event_store()
1647 err = mlxbf_pmc_program_counter(blk_num, cnt_num, evt_num, is_l3); in mlxbf_pmc_event_store()
1661 int blk_num, i, size, len = 0, ret = 0; in mlxbf_pmc_event_list_show() local
1665 blk_num = attr_event_list->nr; in mlxbf_pmc_event_list_show()
1667 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &size); in mlxbf_pmc_event_list_show()
1690 int blk_num, value; in mlxbf_pmc_enable_show() local
1692 blk_num = attr_enable->nr; in mlxbf_pmc_enable_show()
1694 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) { in mlxbf_pmc_enable_show()
1695 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_enable_show()
1696 MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters), in mlxbf_pmc_enable_show()
1702 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_enable_show()
1720 int err, en, blk_num; in mlxbf_pmc_enable_store() local
1723 blk_num = attr_enable->nr; in mlxbf_pmc_enable_store()
1729 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) { in mlxbf_pmc_enable_store()
1730 err = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_enable_store()
1731 MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters), in mlxbf_pmc_enable_store()
1741 mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_enable_store()
1742 MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters), in mlxbf_pmc_enable_store()
1748 err = mlxbf_pmc_config_l3_counters(blk_num, false, !!en); in mlxbf_pmc_enable_store()
1753 err = mlxbf_pmc_config_l3_counters(blk_num, true, false); in mlxbf_pmc_enable_store()
1763 static int mlxbf_pmc_init_perftype_counter(struct device *dev, int blk_num) in mlxbf_pmc_init_perftype_counter() argument
1769 attr = &pmc->block[blk_num].attr_event_list; in mlxbf_pmc_init_perftype_counter()
1772 attr->nr = blk_num; in mlxbf_pmc_init_perftype_counter()
1776 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1780 if (strstr(pmc->block_name[blk_num], "l3cache") || in mlxbf_pmc_init_perftype_counter()
1781 ((pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE))) { in mlxbf_pmc_init_perftype_counter()
1782 attr = &pmc->block[blk_num].attr_enable; in mlxbf_pmc_init_perftype_counter()
1786 attr->nr = blk_num; in mlxbf_pmc_init_perftype_counter()
1791 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1795 pmc->block[blk_num].attr_counter = devm_kcalloc( in mlxbf_pmc_init_perftype_counter()
1796 dev, pmc->block[blk_num].counters, in mlxbf_pmc_init_perftype_counter()
1798 if (!pmc->block[blk_num].attr_counter) in mlxbf_pmc_init_perftype_counter()
1801 pmc->block[blk_num].attr_event = devm_kcalloc( in mlxbf_pmc_init_perftype_counter()
1802 dev, pmc->block[blk_num].counters, in mlxbf_pmc_init_perftype_counter()
1804 if (!pmc->block[blk_num].attr_event) in mlxbf_pmc_init_perftype_counter()
1808 for (j = 0; j < pmc->block[blk_num].counters; ++j) { in mlxbf_pmc_init_perftype_counter()
1809 attr = &pmc->block[blk_num].attr_counter[j]; in mlxbf_pmc_init_perftype_counter()
1814 attr->nr = blk_num; in mlxbf_pmc_init_perftype_counter()
1819 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1822 attr = &pmc->block[blk_num].attr_event[j]; in mlxbf_pmc_init_perftype_counter()
1827 attr->nr = blk_num; in mlxbf_pmc_init_perftype_counter()
1832 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1840 static int mlxbf_pmc_init_perftype_reg(struct device *dev, int blk_num) in mlxbf_pmc_init_perftype_reg() argument
1846 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &j); in mlxbf_pmc_init_perftype_reg()
1850 pmc->block[blk_num].attr_event = devm_kcalloc( in mlxbf_pmc_init_perftype_reg()
1852 if (!pmc->block[blk_num].attr_event) in mlxbf_pmc_init_perftype_reg()
1857 attr = &pmc->block[blk_num].attr_event[j]; in mlxbf_pmc_init_perftype_reg()
1861 attr->nr = blk_num; in mlxbf_pmc_init_perftype_reg()
1866 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_reg()
1875 static int mlxbf_pmc_create_groups(struct device *dev, int blk_num) in mlxbf_pmc_create_groups() argument
1880 if ((pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) || in mlxbf_pmc_create_groups()
1881 (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE)) in mlxbf_pmc_create_groups()
1882 err = mlxbf_pmc_init_perftype_counter(dev, blk_num); in mlxbf_pmc_create_groups()
1883 else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) in mlxbf_pmc_create_groups()
1884 err = mlxbf_pmc_init_perftype_reg(dev, blk_num); in mlxbf_pmc_create_groups()
1892 pmc->block[blk_num].block_attr_grp.attrs = pmc->block[blk_num].block_attr; in mlxbf_pmc_create_groups()
1893 pmc->block[blk_num].block_attr_grp.name = devm_kasprintf( in mlxbf_pmc_create_groups()
1894 dev, GFP_KERNEL, pmc->block_name[blk_num]); in mlxbf_pmc_create_groups()
1895 if (!pmc->block[blk_num].block_attr_grp.name) in mlxbf_pmc_create_groups()
1897 pmc->groups[pmc->group_num] = &pmc->block[blk_num].block_attr_grp; in mlxbf_pmc_create_groups()