Re: [PATCH v5 00/25] Add perf support to the rockchip-dfi driver
From: Sebastian Reichel <hidden>
Date: 2023-06-14 13:40:43
Also in:
linux-devicetree, linux-pm, linux-rockchip, lkml
Hi, On Wed, May 24, 2023 at 10:31:28AM +0200, Sascha Hauer wrote:
This is v5 of the series adding perf support to the rockchip DFI driver. A lot has changed in the perf driver since v4. First of all the review feedback from Robin and Jonathan has been integrated. The perf driver now not only supports monitoring the total DDR utilization, but also the individual channels. I also reworked the way the raw 32bit counter values are summed up to 64bit perf values, so hopefully the code is easier to follow now. lockdep found out that that locking in the perf driver was broken, so I reworked that as well. None of the perf hooks allows locking with mutexes or spinlocks, so in perf it's not possible to enable the DFI controller when needed. Instead I now unconditionally enable the DFI controller during probe when perf is enabled. Furthermore the hrtimer I use for reading out the hardware counter values before they overflow race with perf. Now a seqlock is used to prevent that. The RK3588 device tree changes for the DFI were not part of v4. As Vincent Legoll showed interest in testing this series the necessary device tree changes are now part of this series.
I tested the series on RK3588 EVB1. The read/write byts looks
sensible. Sometimes cycles reads unrealistic values, though:
Performance counter stats for 'system wide':
18446744070475110400 rockchip_ddr/cycles/
828.63 MB rockchip_ddr/read-bytes/
207.19 MB rockchip_ddr/read-bytes0/
207.15 MB rockchip_ddr/read-bytes1/
207.14 MB rockchip_ddr/read-bytes2/
207.15 MB rockchip_ddr/read-bytes3/
1.48 MB rockchip_ddr/write-bytes/
0.37 MB rockchip_ddr/write-bytes0/
0.37 MB rockchip_ddr/write-bytes1/
0.37 MB rockchip_ddr/write-bytes2/
0.38 MB rockchip_ddr/write-bytes3/
830.12 MB rockchip_ddr/bytes/
1.004239766 seconds time elapsed
(This is with memdump running in parallel)
Otherwise the series is
Tested-by: Sebastian Reichel <redacted>
-- Sebastian
Changes since v4:
- Add device tree changes for RK3588
- Use seqlock to protect perf counter values from hrtimer
- Unconditionally enable DFI when perf is enabled
- Bring back changes to dts/binding patches that were lost in v4
Changes since v3:
- Add RK3588 support
Changes since v2:
- Fix broken reference to binding
- Add Reviewed-by from Rob
Changes since v1:
- Fix example to actually match the binding and fix the warnings resulted thereof
- Make addition of rockchip,rk3568-dfi an extra patch
Sascha Hauer (25):
PM / devfreq: rockchip-dfi: Make pmu regmap mandatory
PM / devfreq: rockchip-dfi: Embed desc into private data struct
PM / devfreq: rockchip-dfi: use consistent name for private data
struct
PM / devfreq: rockchip-dfi: Add SoC specific init function
PM / devfreq: rockchip-dfi: dfi store raw values in counter struct
PM / devfreq: rockchip-dfi: Use free running counter
PM / devfreq: rockchip-dfi: introduce channel mask
PM / devfreq: rk3399_dmc,dfi: generalize DDRTYPE defines
PM / devfreq: rockchip-dfi: Clean up DDR type register defines
PM / devfreq: rockchip-dfi: Add RK3568 support
PM / devfreq: rockchip-dfi: Handle LPDDR2 correctly
PM / devfreq: rockchip-dfi: Handle LPDDR4X
PM / devfreq: rockchip-dfi: Pass private data struct to internal
functions
PM / devfreq: rockchip-dfi: Prepare for multiple users
PM / devfreq: rockchip-dfi: give variable a better name
PM / devfreq: rockchip-dfi: Add perf support
PM / devfreq: rockchip-dfi: make register stride SoC specific
PM / devfreq: rockchip-dfi: account for multiple DDRMON_CTRL registers
PM / devfreq: rockchip-dfi: add support for RK3588
dt-bindings: devfreq: event: convert Rockchip DFI binding to yaml
dt-bindings: devfreq: event: rockchip,dfi: Add rk3568 support
dt-bindings: devfreq: event: rockchip,dfi: Add rk3588 support
arm64: dts: rockchip: rk3399: Enable DFI
arm64: dts: rockchip: rk356x: Add DFI
arm64: dts: rockchip: rk3588s: Add DFI
.../bindings/devfreq/event/rockchip,dfi.yaml | 84 ++
.../bindings/devfreq/event/rockchip-dfi.txt | 18 -
.../rockchip,rk3399-dmc.yaml | 2 +-
arch/arm64/boot/dts/rockchip/rk3399.dtsi | 1 -
arch/arm64/boot/dts/rockchip/rk356x.dtsi | 7 +
arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 16 +
drivers/devfreq/event/rockchip-dfi.c | 796 +++++++++++++++---
drivers/devfreq/rk3399_dmc.c | 10 +-
include/soc/rockchip/rk3399_grf.h | 9 +-
include/soc/rockchip/rk3568_grf.h | 13 +
include/soc/rockchip/rk3588_grf.h | 18 +
include/soc/rockchip/rockchip_grf.h | 18 +
12 files changed, 854 insertions(+), 138 deletions(-)
create mode 100644 Documentation/devicetree/bindings/devfreq/event/rockchip,dfi.yaml
delete mode 100644 Documentation/devicetree/bindings/devfreq/event/rockchip-dfi.txt
create mode 100644 include/soc/rockchip/rk3568_grf.h
create mode 100644 include/soc/rockchip/rk3588_grf.h
create mode 100644 include/soc/rockchip/rockchip_grf.h
--
2.39.2