Lines Matching refs:pmc

432 static struct mlxbf_pmc_context *pmc;  variable
444 arm_smccc_smc(command, pmc->sreg_tbl_perf, (uintptr_t)addr, 0, 0, 0, 0, in mlxbf_pmc_secure_read()
468 if (pmc->svc_sreg_support) in mlxbf_pmc_read()
500 arm_smccc_smc(command, pmc->sreg_tbl_perf, value, (uintptr_t)addr, 0, 0, in mlxbf_pmc_secure_write()
520 if (pmc->svc_sreg_support) in mlxbf_pmc_write()
535 (offset + MLXBF_PMC_REG_SIZE <= pmc->block[blk_num].blk_size)) in mlxbf_pmc_valid_range()
557 switch (pmc->event_set) { in mlxbf_pmc_event_list()
643 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_config_l3_counters()
665 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_l3_counter()
670 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_l3_counter()
721 if (cnt_num >= pmc->block[blk_num].counters) in mlxbf_pmc_program_counter()
742 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_counter()
756 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_counter()
767 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + in mlxbf_pmc_program_counter()
783 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_counter()
791 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_counter()
815 if (cnt_num >= pmc->block[blk_num].counters) in mlxbf_pmc_read_counter()
823 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE; in mlxbf_pmc_read_counter()
831 status = mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset, in mlxbf_pmc_read_counter()
838 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset, in mlxbf_pmc_read_counter()
854 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_event()
859 pmcaddr = pmc->block[blk_num].mmio_base + in mlxbf_pmc_read_l3_event()
903 if (cnt_num >= pmc->block[blk_num].counters) in mlxbf_pmc_read_event()
911 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE; in mlxbf_pmc_read_event()
919 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset, in mlxbf_pmc_read_event()
924 if (mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset, in mlxbf_pmc_read_event()
938 if (strstr(pmc->block_name[blk_num], "ecc")) { in mlxbf_pmc_read_reg()
939 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_read_reg()
948 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_read_reg()
957 if (strstr(pmc->block_name[blk_num], "ecc")) { in mlxbf_pmc_write_reg()
958 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_write_reg()
963 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset, in mlxbf_pmc_write_reg()
982 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_counter_show()
985 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) { in mlxbf_pmc_counter_show()
988 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) { in mlxbf_pmc_counter_show()
989 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num], in mlxbf_pmc_counter_show()
1020 if (!(strstr(pmc->block_name[blk_num], "ecc")) && data) in mlxbf_pmc_counter_store()
1024 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_counter_store()
1027 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) { in mlxbf_pmc_counter_store()
1035 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) { in mlxbf_pmc_counter_store()
1036 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num], in mlxbf_pmc_counter_store()
1063 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_event_show()
1070 evt_name = mlxbf_pmc_get_event_name(pmc->block_name[blk_num], evt_num); in mlxbf_pmc_event_show()
1091 evt_num = mlxbf_pmc_get_event_num(pmc->block_name[blk_num], in mlxbf_pmc_event_store()
1101 if (strstr(pmc->block_name[blk_num], "l3cache")) in mlxbf_pmc_event_store()
1124 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &size); in mlxbf_pmc_event_list_show()
1151 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + in mlxbf_pmc_enable_show()
1200 attr = &pmc->block[blk_num].attr_event_list; in mlxbf_pmc_init_perftype_counter()
1207 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1211 if (strstr(pmc->block_name[blk_num], "l3cache")) { in mlxbf_pmc_init_perftype_counter()
1212 attr = &pmc->block[blk_num].attr_enable; in mlxbf_pmc_init_perftype_counter()
1221 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1225 pmc->block[blk_num].attr_counter = devm_kcalloc( in mlxbf_pmc_init_perftype_counter()
1226 dev, pmc->block[blk_num].counters, in mlxbf_pmc_init_perftype_counter()
1228 if (!pmc->block[blk_num].attr_counter) in mlxbf_pmc_init_perftype_counter()
1231 pmc->block[blk_num].attr_event = devm_kcalloc( in mlxbf_pmc_init_perftype_counter()
1232 dev, pmc->block[blk_num].counters, in mlxbf_pmc_init_perftype_counter()
1234 if (!pmc->block[blk_num].attr_event) in mlxbf_pmc_init_perftype_counter()
1238 for (j = 0; j < pmc->block[blk_num].counters; ++j) { in mlxbf_pmc_init_perftype_counter()
1239 attr = &pmc->block[blk_num].attr_counter[j]; in mlxbf_pmc_init_perftype_counter()
1249 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1252 attr = &pmc->block[blk_num].attr_event[j]; in mlxbf_pmc_init_perftype_counter()
1262 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_counter()
1276 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &j); in mlxbf_pmc_init_perftype_reg()
1280 pmc->block[blk_num].attr_event = devm_kcalloc( in mlxbf_pmc_init_perftype_reg()
1282 if (!pmc->block[blk_num].attr_event) in mlxbf_pmc_init_perftype_reg()
1287 attr = &pmc->block[blk_num].attr_event[j]; in mlxbf_pmc_init_perftype_reg()
1296 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr; in mlxbf_pmc_init_perftype_reg()
1310 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) in mlxbf_pmc_create_groups()
1312 else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) in mlxbf_pmc_create_groups()
1321 pmc->block[blk_num].block_attr_grp.attrs = pmc->block[blk_num].block_attr; in mlxbf_pmc_create_groups()
1322 pmc->block[blk_num].block_attr_grp.name = devm_kasprintf( in mlxbf_pmc_create_groups()
1323 dev, GFP_KERNEL, pmc->block_name[blk_num]); in mlxbf_pmc_create_groups()
1324 if (!pmc->block[blk_num].block_attr_grp.name) in mlxbf_pmc_create_groups()
1326 pmc->groups[blk_num] = &pmc->block[blk_num].block_attr_grp; in mlxbf_pmc_create_groups()
1348 for (i = 0; i < pmc->total_blocks; ++i) { in mlxbf_pmc_map_counters()
1349 if (strstr(pmc->block_name[i], "tile")) { in mlxbf_pmc_map_counters()
1350 if (sscanf(pmc->block_name[i], "tile%d", &tile_num) != 1) in mlxbf_pmc_map_counters()
1353 if (tile_num >= pmc->tile_count) in mlxbf_pmc_map_counters()
1356 ret = device_property_read_u64_array(dev, pmc->block_name[i], in mlxbf_pmc_map_counters()
1365 if (pmc->svc_sreg_support) in mlxbf_pmc_map_counters()
1366 pmc->block[i].mmio_base = (void __iomem *)info[0]; in mlxbf_pmc_map_counters()
1368 pmc->block[i].mmio_base = in mlxbf_pmc_map_counters()
1371 pmc->block[i].blk_size = info[1]; in mlxbf_pmc_map_counters()
1372 pmc->block[i].counters = info[2]; in mlxbf_pmc_map_counters()
1373 pmc->block[i].type = info[3]; in mlxbf_pmc_map_counters()
1375 if (!pmc->block[i].mmio_base) in mlxbf_pmc_map_counters()
1401 pmc = devm_kzalloc(dev, sizeof(struct mlxbf_pmc_context), GFP_KERNEL); in mlxbf_pmc_probe()
1402 if (!pmc) in mlxbf_pmc_probe()
1410 &pmc->sreg_tbl_perf); in mlxbf_pmc_probe()
1412 pmc->svc_sreg_support = false; in mlxbf_pmc_probe()
1423 pmc->svc_sreg_support = true; in mlxbf_pmc_probe()
1429 pmc->event_set = MLXBF_PMC_EVENT_SET_BF1; in mlxbf_pmc_probe()
1431 pmc->event_set = MLXBF_PMC_EVENT_SET_BF2; in mlxbf_pmc_probe()
1435 ret = device_property_read_u32(dev, "block_num", &pmc->total_blocks); in mlxbf_pmc_probe()
1440 pmc->block_name, in mlxbf_pmc_probe()
1441 pmc->total_blocks); in mlxbf_pmc_probe()
1442 if (ret != pmc->total_blocks) in mlxbf_pmc_probe()
1445 ret = device_property_read_u32(dev, "tile_num", &pmc->tile_count); in mlxbf_pmc_probe()
1449 pmc->pdev = pdev; in mlxbf_pmc_probe()
1455 pmc->hwmon_dev = devm_hwmon_device_register_with_groups( in mlxbf_pmc_probe()
1456 dev, "bfperf", pmc, pmc->groups); in mlxbf_pmc_probe()
1457 if (IS_ERR(pmc->hwmon_dev)) in mlxbf_pmc_probe()
1458 return PTR_ERR(pmc->hwmon_dev); in mlxbf_pmc_probe()
1459 platform_set_drvdata(pdev, pmc); in mlxbf_pmc_probe()