* [PATCH v1 0/3] Updates to mlxbf-pmc
@ 2024-04-17 7:30 Shravan Kumar Ramani
2024-04-17 7:30 ` [PATCH v1 1/3] Documentation/ABI: Add document for Mellanox PMC driver Shravan Kumar Ramani
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Shravan Kumar Ramani @ 2024-04-17 7:30 UTC (permalink / raw)
To: Hans de Goede, Ilpo Jarvinen, Vadim Pasternak, David Thompson
Cc: Shravan Kumar Ramani, platform-driver-x86, linux-kernel
This submission contains 3 patches relating to mlxbf-pmc.
Patch 1 adds documentation for the sysfs files created by the driver.
Patches 2 and 3 add specific functionality to the driver for supporting
64-bit ocunters, cycle count and clock_measure performance block.
Shravan Kumar Ramani (3):
Documentation/ABI: Add document for Mellanox PMC driver
platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and
cycle count
platform/mellanox: mlxbf-pmc: Add support for clock_measure
performance block
.../ABI/testing/sysfs-platform-mellanox-pmc | 49 +++++
drivers/platform/mellanox/mlxbf-pmc.c | 180 +++++++++++++++++-
2 files changed, 225 insertions(+), 4 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-platform-mellanox-pmc
--
2.30.1
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v1 1/3] Documentation/ABI: Add document for Mellanox PMC driver 2024-04-17 7:30 [PATCH v1 0/3] Updates to mlxbf-pmc Shravan Kumar Ramani @ 2024-04-17 7:30 ` Shravan Kumar Ramani 2024-04-17 13:13 ` Ilpo Järvinen 2024-04-17 7:30 ` [PATCH v1 2/3] platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and cycle count Shravan Kumar Ramani 2024-04-17 7:30 ` [PATCH v1 3/3] platform/mellanox: mlxbf-pmc: Add support for clock_measure performance block Shravan Kumar Ramani 2 siblings, 1 reply; 7+ messages in thread From: Shravan Kumar Ramani @ 2024-04-17 7:30 UTC (permalink / raw) To: Hans de Goede, Ilpo Jarvinen, Vadim Pasternak, David Thompson Cc: Shravan Kumar Ramani, platform-driver-x86, linux-kernel The sysfs interface is created for programming and monitoring the performance counters in various HW blocks of Mellanox BlueField-1, BlueField-2 and BlueField-3. Signed-off-by: Shravan Kumar Ramani <shravankr@nvidia.com> Reviewed-by: David Thompson <davthompson@nvidia.com> --- .../ABI/testing/sysfs-platform-mellanox-pmc | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-platform-mellanox-pmc diff --git a/Documentation/ABI/testing/sysfs-platform-mellanox-pmc b/Documentation/ABI/testing/sysfs-platform-mellanox-pmc new file mode 100644 index 000000000000..47094024dbeb --- /dev/null +++ b/Documentation/ABI/testing/sysfs-platform-mellanox-pmc @@ -0,0 +1,49 @@ +HID Driver Description +MLNXBFD0 mlxbf-pmc Performance counters (BlueField-1) +MLNXBFD1 mlxbf-pmc Performance counters (BlueField-2) +MLNXBFD2 mlxbf-pmc Performance counters (BlueField-3) + +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/event_list +Date: Dec 2020 +KernelVersion: 5.10 +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" +Description: + List of events supported by the counters in the specific block. + It is used to extract the event number or ID associated with + each event. + +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/event<N> +Date: Dec 2020 +KernelVersion: 5.10 +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" +Description: + Event monitored by corresponding counter. This is used to + program or read back the event that should be or is currently + being monitored by counter<N>. + +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/counter<N> +Date: Dec 2020 +KernelVersion: 5.10 +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" +Description: + Counter value of the event being monitored. This is used to + read the counter value of the event which was programmed using + event<N>. This is also used to clear or reset the counter value. + +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/enable +Date: Dec 2020 +KernelVersion: 5.10 +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" +Description: + Start or stop counters. This is used to start the counters + for monitoring the programmed events and also to stop the + counters after the desired duration. + +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/<reg> +Date: Dec 2020 +KernelVersion: 5.10 +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" +Description: + Value of register. This is used to read or reset the registers + where various performance statistics are counted for each block. + -- 2.30.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/3] Documentation/ABI: Add document for Mellanox PMC driver 2024-04-17 7:30 ` [PATCH v1 1/3] Documentation/ABI: Add document for Mellanox PMC driver Shravan Kumar Ramani @ 2024-04-17 13:13 ` Ilpo Järvinen 0 siblings, 0 replies; 7+ messages in thread From: Ilpo Järvinen @ 2024-04-17 13:13 UTC (permalink / raw) To: Shravan Kumar Ramani Cc: Hans de Goede, Vadim Pasternak, David Thompson, platform-driver-x86, LKML On Wed, 17 Apr 2024, Shravan Kumar Ramani wrote: > The sysfs interface is created for programming and monitoring the > performance counters in various HW blocks of Mellanox BlueField-1, > BlueField-2 and BlueField-3. > > Signed-off-by: Shravan Kumar Ramani <shravankr@nvidia.com> > Reviewed-by: David Thompson <davthompson@nvidia.com> > --- This documents the existing sysfs files? Which is good, thank you! However, there's still no PATCH 4/ which would document the new interface added by this series, namely use_odd_counter and count_clock, am I correct? -- i. > .../ABI/testing/sysfs-platform-mellanox-pmc | 49 +++++++++++++++++++ > 1 file changed, 49 insertions(+) > create mode 100644 Documentation/ABI/testing/sysfs-platform-mellanox-pmc > > diff --git a/Documentation/ABI/testing/sysfs-platform-mellanox-pmc b/Documentation/ABI/testing/sysfs-platform-mellanox-pmc > new file mode 100644 > index 000000000000..47094024dbeb > --- /dev/null > +++ b/Documentation/ABI/testing/sysfs-platform-mellanox-pmc > @@ -0,0 +1,49 @@ > +HID Driver Description > +MLNXBFD0 mlxbf-pmc Performance counters (BlueField-1) > +MLNXBFD1 mlxbf-pmc Performance counters (BlueField-2) > +MLNXBFD2 mlxbf-pmc Performance counters (BlueField-3) > + > +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/event_list > +Date: Dec 2020 > +KernelVersion: 5.10 > +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" > +Description: > + List of events supported by the counters in the specific block. > + It is used to extract the event number or ID associated with > + each event. > + > +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/event<N> > +Date: Dec 2020 > +KernelVersion: 5.10 > +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" > +Description: > + Event monitored by corresponding counter. This is used to > + program or read back the event that should be or is currently > + being monitored by counter<N>. > + > +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/counter<N> > +Date: Dec 2020 > +KernelVersion: 5.10 > +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" > +Description: > + Counter value of the event being monitored. This is used to > + read the counter value of the event which was programmed using > + event<N>. This is also used to clear or reset the counter value. > + > +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/enable > +Date: Dec 2020 > +KernelVersion: 5.10 > +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" > +Description: > + Start or stop counters. This is used to start the counters > + for monitoring the programmed events and also to stop the > + counters after the desired duration. > + > +What: /sys/bus/platform/devices/<HID>/hwmon/hwmonX/<block>/<reg> > +Date: Dec 2020 > +KernelVersion: 5.10 > +Contact: "Shravan Kumar Ramani <shravankr@nvidia.com>" > +Description: > + Value of register. This is used to read or reset the registers > + where various performance statistics are counted for each block. > + > ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 2/3] platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and cycle count 2024-04-17 7:30 [PATCH v1 0/3] Updates to mlxbf-pmc Shravan Kumar Ramani 2024-04-17 7:30 ` [PATCH v1 1/3] Documentation/ABI: Add document for Mellanox PMC driver Shravan Kumar Ramani @ 2024-04-17 7:30 ` Shravan Kumar Ramani 2024-04-17 13:18 ` Ilpo Järvinen 2024-04-17 7:30 ` [PATCH v1 3/3] platform/mellanox: mlxbf-pmc: Add support for clock_measure performance block Shravan Kumar Ramani 2 siblings, 1 reply; 7+ messages in thread From: Shravan Kumar Ramani @ 2024-04-17 7:30 UTC (permalink / raw) To: Hans de Goede, Ilpo Jarvinen, Vadim Pasternak, David Thompson Cc: Shravan Kumar Ramani, platform-driver-x86, linux-kernel Add support for programming any counter to monitor the cycle count. Since counting of cycles using 32-bit ocunters would result in frequent wraparounds, add the ability to combine 2 adjacent 32-bit counters to form 1 64-bit counter. Both these features are supported by BlueField-3 PMC hardware, hence the required bit-fields are exposed by the driver via sysfs to allow the user to configure as needed. Signed-off-by: Shravan Kumar Ramani <shravankr@nvidia.com> Reviewed-by: David Thompson <davthompson@nvidia.com> Reviewed-by: Vadim Pasternak <vadimp@nvidia.com> --- drivers/platform/mellanox/mlxbf-pmc.c | 134 ++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/drivers/platform/mellanox/mlxbf-pmc.c b/drivers/platform/mellanox/mlxbf-pmc.c index 4ed9c7fd2b62..635ecc3b3845 100644 --- a/drivers/platform/mellanox/mlxbf-pmc.c +++ b/drivers/platform/mellanox/mlxbf-pmc.c @@ -88,6 +88,8 @@ #define MLXBF_PMC_CRSPACE_PERFMON_CTL(n) (n * MLXBF_PMC_CRSPACE_PERFMON_REG0_SZ) #define MLXBF_PMC_CRSPACE_PERFMON_EN BIT(30) #define MLXBF_PMC_CRSPACE_PERFMON_CLR BIT(28) +#define MLXBF_PMC_CRSPACE_PERFMON_UOC GENMASK(15, 0) +#define MLXBF_PMC_CRSPACE_PERFMON_COUNT_CLOCK(n) (MLXBF_PMC_CRSPACE_PERFMON_CTL(n) + 0x4) #define MLXBF_PMC_CRSPACE_PERFMON_VAL0(n) (MLXBF_PMC_CRSPACE_PERFMON_CTL(n) + 0xc) /** @@ -114,6 +116,8 @@ struct mlxbf_pmc_attribute { * @attr_event: Attributes for "event" sysfs files * @attr_event_list: Attributes for "event_list" sysfs files * @attr_enable: Attributes for "enable" sysfs files + * @attr_use_odd_counter: Attributes for "use_odd_counter" sysfs files + * @attr_count_clock: Attributes for "count_clock" sysfs files * @block_attr: All attributes needed for the block * @block_attr_grp: Attribute group for the block */ @@ -126,6 +130,8 @@ struct mlxbf_pmc_block_info { struct mlxbf_pmc_attribute *attr_event; struct mlxbf_pmc_attribute attr_event_list; struct mlxbf_pmc_attribute attr_enable; + struct mlxbf_pmc_attribute attr_use_odd_counter; + struct mlxbf_pmc_attribute attr_count_clock; struct attribute *block_attr[MLXBF_PMC_MAX_ATTRS]; struct attribute_group block_attr_grp; }; @@ -1763,6 +1769,103 @@ static ssize_t mlxbf_pmc_enable_store(struct device *dev, return count; } +/* Show function for "use_odd_counter" sysfs files - only for crspace */ +static ssize_t mlxbf_pmc_use_odd_counter_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct mlxbf_pmc_attribute *attr_use_odd_counter = container_of( + attr, struct mlxbf_pmc_attribute, dev_attr); + unsigned int blk_num; + u32 value, reg; + + blk_num = attr_use_odd_counter->nr; + + if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + + MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters), + ®)) + return -EINVAL; + + value = FIELD_GET(MLXBF_PMC_CRSPACE_PERFMON_UOC, reg); + + return sysfs_emit(buf, "%u\n", value); +} + +/* Store function for "use_odd_counter" sysfs files - only for crspace */ +static ssize_t mlxbf_pmc_use_odd_counter_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct mlxbf_pmc_attribute *attr_use_odd_counter = container_of( + attr, struct mlxbf_pmc_attribute, dev_attr); + unsigned int blk_num; + u32 uoc, reg; + int err; + + blk_num = attr_use_odd_counter->nr; + + err = kstrtouint(buf, 0, &uoc); + if (err < 0) + return err; + + err = mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + + MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters), + ®); + if (err) + return -EINVAL; + + reg &= ~MLXBF_PMC_CRSPACE_PERFMON_UOC; + reg |= FIELD_PREP(MLXBF_PMC_CRSPACE_PERFMON_UOC, uoc); + + mlxbf_pmc_write(pmc->block[blk_num].mmio_base + + MLXBF_PMC_CRSPACE_PERFMON_CTL(pmc->block[blk_num].counters), + MLXBF_PMC_WRITE_REG_32, reg); + + return count; +} + +/* Show function for "count_clock" sysfs files - only for crspace */ +static ssize_t mlxbf_pmc_count_clock_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct mlxbf_pmc_attribute *attr_count_clock = container_of( + attr, struct mlxbf_pmc_attribute, dev_attr); + unsigned int blk_num; + u32 reg; + + blk_num = attr_count_clock->nr; + + if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + + MLXBF_PMC_CRSPACE_PERFMON_COUNT_CLOCK(pmc->block[blk_num].counters), + ®)) + return -EINVAL; + + return sysfs_emit(buf, "%u\n", reg); +} + +/* Store function for "count_clock" sysfs files - only for crspace */ +static ssize_t mlxbf_pmc_count_clock_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct mlxbf_pmc_attribute *attr_count_clock = container_of( + attr, struct mlxbf_pmc_attribute, dev_attr); + unsigned int blk_num; + u32 reg; + int err; + + blk_num = attr_count_clock->nr; + + err = kstrtouint(buf, 0, ®); + if (err < 0) + return err; + + mlxbf_pmc_write(pmc->block[blk_num].mmio_base + + MLXBF_PMC_CRSPACE_PERFMON_COUNT_CLOCK(pmc->block[blk_num].counters), + MLXBF_PMC_WRITE_REG_32, reg); + + return count; +} + /* Populate attributes for blocks with counters to monitor performance */ static int mlxbf_pmc_init_perftype_counter(struct device *dev, unsigned int blk_num) { @@ -1799,6 +1902,37 @@ static int mlxbf_pmc_init_perftype_counter(struct device *dev, unsigned int blk_ attr = NULL; } + if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) { + /* + * Couple adjacent odd and even 32-bit counters to form 64-bit counters + * using "use_odd_counter" sysfs which has one bit per even counter. + */ + attr = &pmc->block[blk_num].attr_use_odd_counter; + attr->dev_attr.attr.mode = 0644; + attr->dev_attr.show = mlxbf_pmc_use_odd_counter_show; + attr->dev_attr.store = mlxbf_pmc_use_odd_counter_store; + attr->nr = blk_num; + attr->dev_attr.attr.name = devm_kasprintf(dev, GFP_KERNEL, + "use_odd_counter"); + if (!attr->dev_attr.attr.name) + return -ENOMEM; + pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; + attr = NULL; + + /* Program crspace counters to count clock cycles using "count_clock" sysfs */ + attr = &pmc->block[blk_num].attr_count_clock; + attr->dev_attr.attr.mode = 0644; + attr->dev_attr.show = mlxbf_pmc_count_clock_show; + attr->dev_attr.store = mlxbf_pmc_count_clock_store; + attr->nr = blk_num; + attr->dev_attr.attr.name = devm_kasprintf(dev, GFP_KERNEL, + "count_clock"); + if (!attr->dev_attr.attr.name) + return -ENOMEM; + pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; + attr = NULL; + } + pmc->block[blk_num].attr_counter = devm_kcalloc( dev, pmc->block[blk_num].counters, sizeof(struct mlxbf_pmc_attribute), GFP_KERNEL); -- 2.30.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/3] platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and cycle count 2024-04-17 7:30 ` [PATCH v1 2/3] platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and cycle count Shravan Kumar Ramani @ 2024-04-17 13:18 ` Ilpo Järvinen 2024-04-18 12:06 ` Shravan Ramani 0 siblings, 1 reply; 7+ messages in thread From: Ilpo Järvinen @ 2024-04-17 13:18 UTC (permalink / raw) To: Shravan Kumar Ramani Cc: Hans de Goede, Vadim Pasternak, David Thompson, platform-driver-x86, LKML On Wed, 17 Apr 2024, Shravan Kumar Ramani wrote: > Add support for programming any counter to monitor the cycle count. > Since counting of cycles using 32-bit ocunters would result in frequent > wraparounds, add the ability to combine 2 adjacent 32-bit counters to > form 1 64-bit counter. > Both these features are supported by BlueField-3 PMC hardware, hence > the required bit-fields are exposed by the driver via sysfs to allow > the user to configure as needed. > > Signed-off-by: Shravan Kumar Ramani <shravankr@nvidia.com> > Reviewed-by: David Thompson <davthompson@nvidia.com> > Reviewed-by: Vadim Pasternak <vadimp@nvidia.com> > --- > @@ -1799,6 +1902,37 @@ static int mlxbf_pmc_init_perftype_counter(struct device *dev, unsigned int blk_ > attr = NULL; > } > > + if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) { > + /* > + * Couple adjacent odd and even 32-bit counters to form 64-bit counters > + * using "use_odd_counter" sysfs which has one bit per even counter. > + */ > + attr = &pmc->block[blk_num].attr_use_odd_counter; > + attr->dev_attr.attr.mode = 0644; > + attr->dev_attr.show = mlxbf_pmc_use_odd_counter_show; > + attr->dev_attr.store = mlxbf_pmc_use_odd_counter_store; > + attr->nr = blk_num; > + attr->dev_attr.attr.name = devm_kasprintf(dev, GFP_KERNEL, > + "use_odd_counter"); > + if (!attr->dev_attr.attr.name) > + return -ENOMEM; > + pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; > + attr = NULL; > + > + /* Program crspace counters to count clock cycles using "count_clock" sysfs */ > + attr = &pmc->block[blk_num].attr_count_clock; > + attr->dev_attr.attr.mode = 0644; > + attr->dev_attr.show = mlxbf_pmc_count_clock_show; > + attr->dev_attr.store = mlxbf_pmc_count_clock_store; > + attr->nr = blk_num; > + attr->dev_attr.attr.name = devm_kasprintf(dev, GFP_KERNEL, > + "count_clock"); > + if (!attr->dev_attr.attr.name) > + return -ENOMEM; > + pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; > + attr = NULL; > + } Hi, What was the reason why this driver could not use .dev_groups to setup sysfs (filtering can be done with .is_visible)? -- i. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/3] platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and cycle count 2024-04-17 13:18 ` Ilpo Järvinen @ 2024-04-18 12:06 ` Shravan Ramani 0 siblings, 0 replies; 7+ messages in thread From: Shravan Ramani @ 2024-04-18 12:06 UTC (permalink / raw) To: Ilpo Järvinen Cc: Hans de Goede, Vadim Pasternak, David Thompson, platform-driver-x86@vger.kernel.org, LKML > On Wed, 17 Apr 2024, Shravan Kumar Ramani wrote: > > > Add support for programming any counter to monitor the cycle count. > > Since counting of cycles using 32-bit ocunters would result in frequent > > wraparounds, add the ability to combine 2 adjacent 32-bit counters to > > form 1 64-bit counter. > > Both these features are supported by BlueField-3 PMC hardware, hence > > the required bit-fields are exposed by the driver via sysfs to allow > > the user to configure as needed. > > > > Signed-off-by: Shravan Kumar Ramani <shravankr@nvidia.com> > > Reviewed-by: David Thompson <davthompson@nvidia.com> > > Reviewed-by: Vadim Pasternak <vadimp@nvidia.com> > > --- > > > @@ -1799,6 +1902,37 @@ static int mlxbf_pmc_init_perftype_counter(struct device *dev, unsigned int blk_ > > attr = NULL; > > } > > > > + if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) { > > + /* > > + * Couple adjacent odd and even 32-bit counters to form 64-bit counters > > + * using "use_odd_counter" sysfs which has one bit per even counter. > > + */ > > + attr = &pmc->block[blk_num].attr_use_odd_counter; > > + attr->dev_attr.attr.mode = 0644; > > + attr->dev_attr.show = mlxbf_pmc_use_odd_counter_show; > > + attr->dev_attr.store = mlxbf_pmc_use_odd_counter_store; > > + attr->nr = blk_num; > > + attr->dev_attr.attr.name = devm_kasprintf(dev, GFP_KERNEL, > > + "use_odd_counter"); > > + if (!attr->dev_attr.attr.name) > > + return -ENOMEM; > > + pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; > > + attr = NULL; > > + > > + /* Program crspace counters to count clock cycles using "count_clock" sysfs */ > > + attr = &pmc->block[blk_num].attr_count_clock; > > + attr->dev_attr.attr.mode = 0644; > > + attr->dev_attr.show = mlxbf_pmc_count_clock_show; > > + attr->dev_attr.store = mlxbf_pmc_count_clock_store; > > + attr->nr = blk_num; > > + attr->dev_attr.attr.name = devm_kasprintf(dev, GFP_KERNEL, > > + "count_clock"); > > + if (!attr->dev_attr.attr.name) > > + return -ENOMEM; > > + pmc->block[blk_num].block_attr[++i] = &attr->dev_attr.attr; > > + attr = NULL; > > + } > > Hi, > > What was the reason why this driver could not use .dev_groups to setup > sysfs (filtering can be done with .is_visible)? > The current approach was suggested during the initial submission of the driver and the same has been followed since. Do you mean to add a is_visible routine for each of the sysfs types like count_clock, use_odd_counter, etc and check the conditions for their inclusion in this routine? Thanks, Shravan ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 3/3] platform/mellanox: mlxbf-pmc: Add support for clock_measure performance block 2024-04-17 7:30 [PATCH v1 0/3] Updates to mlxbf-pmc Shravan Kumar Ramani 2024-04-17 7:30 ` [PATCH v1 1/3] Documentation/ABI: Add document for Mellanox PMC driver Shravan Kumar Ramani 2024-04-17 7:30 ` [PATCH v1 2/3] platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and cycle count Shravan Kumar Ramani @ 2024-04-17 7:30 ` Shravan Kumar Ramani 2 siblings, 0 replies; 7+ messages in thread From: Shravan Kumar Ramani @ 2024-04-17 7:30 UTC (permalink / raw) To: Hans de Goede, Ilpo Jarvinen, Vadim Pasternak, David Thompson Cc: Shravan Kumar Ramani, platform-driver-x86, linux-kernel The HW clock_measure counter info is passed to the driver from ACPI. Create a new sub-directory for clock_measure events and provide read access to the user. Writes are blocked since the fields are RO. Signed-off-by: Shravan Kumar Ramani <shravankr@nvidia.com> Reviewed-by: David Thompson <davthompson@nvidia.com> Reviewed-by: Vadim Pasternak <vadimp@nvidia.com> --- drivers/platform/mellanox/mlxbf-pmc.c | 46 ++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/drivers/platform/mellanox/mlxbf-pmc.c b/drivers/platform/mellanox/mlxbf-pmc.c index 635ecc3b3845..1212a96fb3eb 100644 --- a/drivers/platform/mellanox/mlxbf-pmc.c +++ b/drivers/platform/mellanox/mlxbf-pmc.c @@ -865,6 +865,37 @@ static const struct mlxbf_pmc_events mlxbf_pmc_llt_miss_events[] = { {75, "HISTOGRAM_HISTOGRAM_BIN9"}, }; +static const struct mlxbf_pmc_events mlxbf_pmc_clock_events[] = { + { 0x0, "FMON_CLK_LAST_COUNT_PLL_D1_INST0" }, + { 0x4, "REFERENCE_WINDOW_WIDTH_PLL_D1_INST0" }, + { 0x8, "FMON_CLK_LAST_COUNT_PLL_D1_INST1" }, + { 0xc, "REFERENCE_WINDOW_WIDTH_PLL_D1_INST1" }, + { 0x10, "FMON_CLK_LAST_COUNT_PLL_G1" }, + { 0x14, "REFERENCE_WINDOW_WIDTH_PLL_G1" }, + { 0x18, "FMON_CLK_LAST_COUNT_PLL_W1" }, + { 0x1c, "REFERENCE_WINDOW_WIDTH_PLL_W1" }, + { 0x20, "FMON_CLK_LAST_COUNT_PLL_T1" }, + { 0x24, "REFERENCE_WINDOW_WIDTH_PLL_T1" }, + { 0x28, "FMON_CLK_LAST_COUNT_PLL_A0" }, + { 0x2c, "REFERENCE_WINDOW_WIDTH_PLL_A0" }, + { 0x30, "FMON_CLK_LAST_COUNT_PLL_C0" }, + { 0x34, "REFERENCE_WINDOW_WIDTH_PLL_C0" }, + { 0x38, "FMON_CLK_LAST_COUNT_PLL_N1" }, + { 0x3c, "REFERENCE_WINDOW_WIDTH_PLL_N1" }, + { 0x40, "FMON_CLK_LAST_COUNT_PLL_I1" }, + { 0x44, "REFERENCE_WINDOW_WIDTH_PLL_I1" }, + { 0x48, "FMON_CLK_LAST_COUNT_PLL_R1" }, + { 0x4c, "REFERENCE_WINDOW_WIDTH_PLL_R1" }, + { 0x50, "FMON_CLK_LAST_COUNT_PLL_P1" }, + { 0x54, "REFERENCE_WINDOW_WIDTH_PLL_P1" }, + { 0x58, "FMON_CLK_LAST_COUNT_REF_100_INST0" }, + { 0x5c, "REFERENCE_WINDOW_WIDTH_REF_100_INST0" }, + { 0x60, "FMON_CLK_LAST_COUNT_REF_100_INST1" }, + { 0x64, "REFERENCE_WINDOW_WIDTH_REF_100_INST1" }, + { 0x68, "FMON_CLK_LAST_COUNT_REF_156" }, + { 0x6c, "REFERENCE_WINDOW_WIDTH_REF_156" }, +}; + static struct mlxbf_pmc_context *pmc; /* UUID used to probe ATF service. */ @@ -1038,6 +1069,9 @@ static const struct mlxbf_pmc_events *mlxbf_pmc_event_list(const char *blk, size } else if (strstr(blk, "llt")) { events = mlxbf_pmc_llt_events; size = ARRAY_SIZE(mlxbf_pmc_llt_events); + } else if (strstr(blk, "clock_measure")) { + events = mlxbf_pmc_clock_events; + size = ARRAY_SIZE(mlxbf_pmc_clock_events); } else { events = NULL; size = 0; @@ -1472,14 +1506,15 @@ static int mlxbf_pmc_read_event(unsigned int blk_num, u32 cnt_num, bool is_l3, u /* Method to read a register */ static int mlxbf_pmc_read_reg(unsigned int blk_num, u32 offset, u64 *result) { - u32 ecc_out; + u32 reg; - if (strstr(pmc->block_name[blk_num], "ecc")) { + if ((strstr(pmc->block_name[blk_num], "ecc")) || + (strstr(pmc->block_name[blk_num], "clock_measure"))) { if (mlxbf_pmc_readl(pmc->block[blk_num].mmio_base + offset, - &ecc_out)) + ®)) return -EFAULT; - *result = ecc_out; + *result = reg; return 0; } @@ -1493,6 +1528,9 @@ static int mlxbf_pmc_read_reg(unsigned int blk_num, u32 offset, u64 *result) /* Method to write to a register */ static int mlxbf_pmc_write_reg(unsigned int blk_num, u32 offset, u64 data) { + if (strstr(pmc->block_name[blk_num], "clock_measure")) + return -EINVAL; + if (strstr(pmc->block_name[blk_num], "ecc")) { return mlxbf_pmc_write(pmc->block[blk_num].mmio_base + offset, MLXBF_PMC_WRITE_REG_32, data); -- 2.30.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-04-18 12:06 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-04-17 7:30 [PATCH v1 0/3] Updates to mlxbf-pmc Shravan Kumar Ramani 2024-04-17 7:30 ` [PATCH v1 1/3] Documentation/ABI: Add document for Mellanox PMC driver Shravan Kumar Ramani 2024-04-17 13:13 ` Ilpo Järvinen 2024-04-17 7:30 ` [PATCH v1 2/3] platform/mellanox: mlxbf-pmc: Add support for 64-bit counters and cycle count Shravan Kumar Ramani 2024-04-17 13:18 ` Ilpo Järvinen 2024-04-18 12:06 ` Shravan Ramani 2024-04-17 7:30 ` [PATCH v1 3/3] platform/mellanox: mlxbf-pmc: Add support for clock_measure performance block Shravan Kumar Ramani
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox