Lines Matching refs:blk_num
532 static bool mlxbf_pmc_valid_range(int blk_num, uint32_t offset)
535 (offset + MLXBF_PMC_REG_SIZE <= pmc->block[blk_num].blk_size))
634 static int mlxbf_pmc_config_l3_counters(int blk_num, bool enable, bool reset)
643 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
649 static int mlxbf_pmc_program_l3_counter(int blk_num, uint32_t cnt_num,
659 if (mlxbf_pmc_config_l3_counters(blk_num, false, false))
665 pmcaddr = pmc->block[blk_num].mmio_base +
670 pmcaddr = pmc->block[blk_num].mmio_base +
716 static int mlxbf_pmc_program_counter(int blk_num, uint32_t cnt_num,
721 if (cnt_num >= pmc->block[blk_num].counters)
725 return mlxbf_pmc_program_l3_counter(blk_num, cnt_num, evt);
742 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
756 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
767 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base +
776 static int mlxbf_pmc_read_l3_counter(int blk_num, uint32_t cnt_num,
783 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
791 status = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
808 static int mlxbf_pmc_read_counter(int blk_num, uint32_t cnt_num, bool is_l3,
815 if (cnt_num >= pmc->block[blk_num].counters)
819 return mlxbf_pmc_read_l3_counter(blk_num, cnt_num, result);
823 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE;
831 status = mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset,
838 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset,
843 static int mlxbf_pmc_read_l3_event(int blk_num, uint32_t cnt_num,
854 pmcaddr = pmc->block[blk_num].mmio_base +
859 pmcaddr = pmc->block[blk_num].mmio_base +
897 static int mlxbf_pmc_read_event(int blk_num, uint32_t cnt_num, bool is_l3,
903 if (cnt_num >= pmc->block[blk_num].counters)
907 return mlxbf_pmc_read_l3_event(blk_num, cnt_num, result);
911 pmc->block[blk_num].counters * MLXBF_PMC_REG_SIZE;
919 if (mlxbf_pmc_write(pmc->block[blk_num].mmio_base + perfcfg_offset,
924 if (mlxbf_pmc_read(pmc->block[blk_num].mmio_base + perfval_offset,
934 static int mlxbf_pmc_read_reg(int blk_num, uint32_t offset, uint64_t *result)
938 if (strstr(pmc->block_name[blk_num], "ecc")) {
939 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + offset,
947 if (mlxbf_pmc_valid_range(blk_num, offset))
948 return mlxbf_pmc_read(pmc->block[blk_num].mmio_base + offset,
955 static int mlxbf_pmc_write_reg(int blk_num, uint32_t offset, uint64_t data)
957 if (strstr(pmc->block_name[blk_num], "ecc")) {
958 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset,
962 if (mlxbf_pmc_valid_range(blk_num, offset))
963 return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset,
975 int blk_num, cnt_num, offset;
979 blk_num = attr_counter->nr;
982 if (strstr(pmc->block_name[blk_num], "l3cache"))
985 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) {
986 if (mlxbf_pmc_read_counter(blk_num, cnt_num, is_l3, &value))
988 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) {
989 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num],
993 if (mlxbf_pmc_read_reg(blk_num, offset, &value))
1008 int blk_num, cnt_num, offset, err, data;
1012 blk_num = attr_counter->nr;
1020 if (!(strstr(pmc->block_name[blk_num], "ecc")) && data)
1024 if (strstr(pmc->block_name[blk_num], "l3cache"))
1027 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER) {
1028 err = mlxbf_pmc_read_event(blk_num, cnt_num, is_l3, &evt_num);
1031 err = mlxbf_pmc_program_counter(blk_num, cnt_num, evt_num,
1035 } else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER) {
1036 offset = mlxbf_pmc_get_event_num(pmc->block_name[blk_num],
1040 err = mlxbf_pmc_write_reg(blk_num, offset, data);
1055 int blk_num, cnt_num, err;
1060 blk_num = attr_event->nr;
1063 if (strstr(pmc->block_name[blk_num], "l3cache"))
1066 err = mlxbf_pmc_read_event(blk_num, cnt_num, is_l3, &evt_num);
1070 evt_name = mlxbf_pmc_get_event_name(pmc->block_name[blk_num], evt_num);
1084 int blk_num, cnt_num, evt_num, err;
1087 blk_num = attr_event->nr;
1091 evt_num = mlxbf_pmc_get_event_num(pmc->block_name[blk_num],
1101 if (strstr(pmc->block_name[blk_num], "l3cache"))
1104 err = mlxbf_pmc_program_counter(blk_num, cnt_num, evt_num, is_l3);
1118 int blk_num, i, size, len = 0, ret = 0;
1122 blk_num = attr_event_list->nr;
1124 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &size);
1147 int blk_num, value;
1149 blk_num = attr_enable->nr;
1151 if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base +
1168 int err, en, blk_num;
1170 blk_num = attr_enable->nr;
1177 err = mlxbf_pmc_config_l3_counters(blk_num, false, false);
1181 err = mlxbf_pmc_config_l3_counters(blk_num, false, true);
1184 err = mlxbf_pmc_config_l3_counters(blk_num, true, false);
1194 static int mlxbf_pmc_init_perftype_counter(struct device *dev, int blk_num)
1200 attr = &pmc->block[blk_num].attr_event_list;
1203 attr->nr = blk_num;
1207 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr;
1211 if (strstr(pmc->block_name[blk_num], "l3cache")) {
1212 attr = &pmc->block[blk_num].attr_enable;
1216 attr->nr = blk_num;
1221 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr;
1225 pmc->block[blk_num].attr_counter = devm_kcalloc(
1226 dev, pmc->block[blk_num].counters,
1228 if (!pmc->block[blk_num].attr_counter)
1231 pmc->block[blk_num].attr_event = devm_kcalloc(
1232 dev, pmc->block[blk_num].counters,
1234 if (!pmc->block[blk_num].attr_event)
1238 for (j = 0; j < pmc->block[blk_num].counters; ++j) {
1239 attr = &pmc->block[blk_num].attr_counter[j];
1244 attr->nr = blk_num;
1249 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr;
1252 attr = &pmc->block[blk_num].attr_event[j];
1257 attr->nr = blk_num;
1262 pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr;
1270 static int mlxbf_pmc_init_perftype_reg(struct device *dev, int blk_num)
1276 events = mlxbf_pmc_event_list(pmc->block_name[blk_num], &j);
1280 pmc->block[blk_num].attr_event = devm_kcalloc(
1282 if (!pmc->block[blk_num].attr_event)
1287 attr = &pmc->block[blk_num].attr_event[j];
1291 attr->nr = blk_num;
1296 pmc->block[blk_num].block_attr[i] = &attr->dev_attr.attr;
1305 static int mlxbf_pmc_create_groups(struct device *dev, int blk_num)
1310 if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_COUNTER)
1311 err = mlxbf_pmc_init_perftype_counter(dev, blk_num);
1312 else if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_REGISTER)
1313 err = mlxbf_pmc_init_perftype_reg(dev, blk_num);
1321 pmc->block[blk_num].block_attr_grp.attrs = pmc->block[blk_num].block_attr;
1322 pmc->block[blk_num].block_attr_grp.name = devm_kasprintf(
1323 dev, GFP_KERNEL, pmc->block_name[blk_num]);
1324 if (!pmc->block[blk_num].block_attr_grp.name)
1326 pmc->groups[blk_num] = &pmc->block[blk_num].block_attr_grp;