Lines Matching refs:blk_num

1097 static bool mlxbf_pmc_valid_range(unsigned int blk_num, u32 offset)
1100 (offset + MLXBF_PMC_REG_SIZE <= pmc->block[blk_num].blk_size))
1246 static int mlxbf_pmc_config_l3_counters(unsigned int blk_num, bool enable, bool reset)
1255 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
1261 static int mlxbf_pmc_program_l3_counter(unsigned int blk_num, u32 cnt_num, u32 evt)
1268 if (mlxbf_pmc_config_l3_counters(blk_num, false, false))
1274 pmcaddr = pmc->block[blk_num].mmio_base +
1279 pmcaddr = pmc->block[blk_num].mmio_base +
1325 static int mlxbf_pmc_program_crspace_counter(unsigned int blk_num, u32 cnt_num, u32 evt)
1331 addr = pmc->block[blk_num].mmio_base +
1349 static int mlxbf_pmc_clear_crspace_counter(unsigned int blk_num, u32 cnt_num)
1353 addr = pmc->block[blk_num].mmio_base +
1354 MLXBF_PMC_CRSPACE_PERFMON_VAL0(pmc->block[blk_num].counters) +
1361 static int mlxbf_pmc_program_counter(unsigned int blk_num, u32 cnt_num, u32 evt, bool is_l3)
1365 if (cnt_num >= pmc->block[blk_num].counters)
1369 return mlxbf_pmc_program_l3_counter(blk_num, cnt_num, evt);
1371 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE)
1372 return mlxbf_pmc_program_crspace_counter(blk_num, cnt_num,
1390 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
1404 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
1415 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
1424 static int mlxbf_pmc_read_l3_counter(unsigned int blk_num, u32 cnt_num, u64 *result)
1430 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1438 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1455 static int mlxbf_pmc_read_crspace_counter(unsigned int blk_num, u32 cnt_num, u64 *result)
1460 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1461 MLXBF_PMC_CRSPACE_PERFMON_VAL0(pmc->block[blk_num].counters) +
1472 static int mlxbf_pmc_read_counter(unsigned int blk_num, u32 cnt_num, bool is_l3, u64 *result)
1478 if (cnt_num >= pmc->block[blk_num].counters)
1482 return mlxbf_pmc_read_l3_counter(blk_num, cnt_num, result);
1484 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE)
1485 return mlxbf_pmc_read_crspace_counter(blk_num, cnt_num, result);
1489 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE;
1497 status = mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset,
1504 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset,
1509 static int mlxbf_pmc_read_l3_event(unsigned int blk_num, u32 cnt_num, u64 *result)
1518 pmcaddr = pmc->block[blk_num].mmio_base +
1523 pmcaddr = pmc->block[blk_num].mmio_base +
1561 static int mlxbf_pmc_read_crspace_event(unsigned int blk_num, u32 cnt_num, u64 *result)
1567 addr = pmc->block[blk_num].mmio_base +
1584 static int mlxbf_pmc_read_event(unsigned int blk_num, u32 cnt_num, bool is_l3, u64 *result)
1589 if (cnt_num >= pmc->block[blk_num].counters)
1593 return mlxbf_pmc_read_l3_event(blk_num, cnt_num, result);
1595 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE)
1596 return mlxbf_pmc_read_crspace_event(blk_num, cnt_num, result);
1600 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE;
1608 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset,
1613 if (mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset,
1623 static int mlxbf_pmc_read_reg(unsigned int blk_num, u32 offset, u64 *result)
1627 if ((strstr(pmc->block_name[blk_num], "ecc")) ||
1628 (strstr(pmc->block_name[blk_num], "clock_measure"))) {
1629 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + offset,
1637 if (mlxbf_pmc_valid_range(blk_num, offset))
1638 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + offset,
1645 static int mlxbf_pmc_write_reg(unsigned int blk_num, u32 offset, u64 data)
1647 if (strstr(pmc->block_name[blk_num], "clock_measure"))
1650 if (strstr(pmc->block_name[blk_num], "ecc")) {
1651 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset,
1655 if (mlxbf_pmc_valid_range(blk_num, offset))
1656 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset,
1668 unsigned int blk_num, cnt_num;
1673 blk_num = attr_counter->nr;
1676 if (strstr(pmc->block_name[blk_num], "l3cache"))
1679 if ((pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) ||
1680 (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE)) {
1681 if (mlxbf_pmc_read_counter(blk_num, cnt_num, is_l3, &value))
1683 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) {
1684 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num],
1688 if (mlxbf_pmc_read_reg(blk_num, offset, &value))
1703 unsigned int blk_num, cnt_num, data;
1709 blk_num = attr_counter->nr;
1717 if (!(strstr(pmc->block_name[blk_num], "ecc")) && data)
1721 if (strstr(pmc->block_name[blk_num], "l3cache"))
1724 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) {
1725 err = mlxbf_pmc_read_event(blk_num, cnt_num, is_l3, &evt_num);
1728 err = mlxbf_pmc_program_counter(blk_num, cnt_num, evt_num,
1732 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) {
1733 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num],
1737 err = mlxbf_pmc_write_reg(blk_num, offset, data);
1740 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) {
1743 err = mlxbf_pmc_clear_crspace_counter(blk_num, cnt_num);
1756 unsigned int blk_num, cnt_num;
1762 blk_num = attr_event->nr;
1765 if (strstr(pmc->block_name[blk_num], "l3cache"))
1768 err = mlxbf_pmc_read_event(blk_num, cnt_num, is_l3, &evt_num);
1772 evt_name = mlxbf_pmc_get_event_name(pmc->block_name[blk_num], evt_num);
1786 unsigned int blk_num, cnt_num;
1792 blk_num = attr_event->nr;
1801 evt_num = mlxbf_pmc_get_event_num(pmc->block_name[blk_num],
1811 if (!mlxbf_pmc_get_event_name(pmc->block_name[blk_num], evt_num))
1815 if (strstr(pmc->block_name[blk_num], "l3cache"))
1818 err = mlxbf_pmc_program_counter(blk_num, cnt_num, evt_num, is_l3);
1834 unsigned int blk_num, i, len = 0;
1838 blk_num = attr_event_list->nr;
1840 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &size);
1862 unsigned int blk_num, value;
1865 blk_num = attr_enable->nr;
1867 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) {
1868 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1869 MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters),
1875 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1893 unsigned int blk_num;
1898 blk_num = attr_enable->nr;
1904 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) {
1905 err = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1906 MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters),
1916 mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
1917 MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters),
1920 err = mlxbf_pmc_config_l3_counters(blk_num, false, !!en);
1925 err = mlxbf_pmc_config_l3_counters(blk_num, true, false);
1940 unsigned int blk_num;
1943 blk_num = attr_count_clock->nr;
1945 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1946 MLXBF_PMC_CRSPACE_PERFMON_COUNT_CLOCK(pmc->block[blk_num].counters),
1960 unsigned int blk_num;
1964 blk_num = attr_count_clock->nr;
1970 mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
1971 MLXBF_PMC_CRSPACE_PERFMON_COUNT_CLOCK(pmc->block[blk_num].counters),
1978 static int mlxbf_pmc_init_perftype_counter(struct device *dev, unsigned int blk_num)
1983 if (!mlxbf_pmc_event_supported(pmc->block_name[blk_num]))
1987 attr = &pmc->block[blk_num].attr_event_list;
1991 attr->nr = blk_num;
1995 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr;
1999 if (strstr(pmc->block_name[blk_num], "l3cache") ||
2000 ((pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE))) {
2001 attr = &pmc->block[blk_num].attr_enable;
2006 attr->nr = blk_num;
2011 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr;
2015 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) {
2017 attr = &pmc->block[blk_num].attr_count_clock;
2021 attr->nr = blk_num;
2026 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr;
2030 pmc->block[blk_num].attr_counter = devm_kcalloc(
2031 dev, pmc->block[blk_num].counters,
2033 if (!pmc->block[blk_num].attr_counter)
2036 pmc->block[blk_num].attr_event = devm_kcalloc(
2037 dev, pmc->block[blk_num].counters,
2039 if (!pmc->block[blk_num].attr_event)
2043 for (j = 0; j < pmc->block[blk_num].counters; ++j) {
2044 attr = &pmc->block[blk_num].attr_counter[j];
2050 attr->nr = blk_num;
2054 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr;
2057 attr = &pmc->block[blk_num].attr_event[j];
2063 attr->nr = blk_num;
2067 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr;
2075 static int mlxbf_pmc_init_perftype_reg(struct device *dev, unsigned int blk_num)
2082 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &count);
2086 pmc->block[blk_num].attr_event = devm_kcalloc(
2088 if (!pmc->block[blk_num].attr_event)
2093 attr = &pmc->block[blk_num].attr_event[count];
2098 attr->nr = blk_num;
2103 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr;
2112 static int mlxbf_pmc_create_groups(struct device *dev, unsigned int blk_num)
2117 if ((pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) ||
2118 (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE))
2119 err = mlxbf_pmc_init_perftype_counter(dev, blk_num);
2120 else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER)
2121 err = mlxbf_pmc_init_perftype_reg(dev, blk_num);
2129 pmc->block[blk_num].block_attr_grp.attrs = pmc->block[blk_num].block_attr;
2130 pmc->block[blk_num].block_attr_grp.name = devm_kasprintf(
2131 dev, GFP_KERNEL, pmc->block_name[blk_num]);
2132 if (!pmc->block[blk_num].block_attr_grp.name)
2134 pmc->groups[pmc->group_num] = &pmc->block[blk_num].block_attr_grp;