Previously, reading from the `pp_od_clk_voltage` sysfs file would include lots of null bytes between the sections, e.g.:
$ cat -v /sys/class/drm/card0/device/pp_od_clk_voltage OD_SCLK: 0: 500Mhz 1: 2514Mhz OD_MCLK: 0: 97Mhz 1: 1000MHz ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@OD_VDDGFX_OFFSET: 0mV ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@OD_RANGE: SCLK: 500Mhz 3000Mhz MCLK: 674Mhz 1075Mhz The reason for this is that calling `smu_cmn_get_sysfs_buf` aligns the offset used for `sysfs_emit_at` to the current page boundary, and then gets returned from the various `print_clk_levels` implementations to be directly added to the buffer position. Instead, only the relative offset showing how much was written to the buffer should be returned, regardless of how it was changed for alignment purposes. Now, the file is clean without any garbage data: $ cat -v /sys/class/drm/card0/device/pp_od_clk_voltage OD_SCLK: 0: 500Mhz 1: 2519Mhz OD_MCLK: 0: 97Mhz 1: 1000MHz OD_VDDGFX_OFFSET: 0mV OD_RANGE: SCLK: 500Mhz 3000Mhz MCLK: 674Mhz 1075Mhz Note that I am only able to test this on a 6900XT (SMU11), so the rest of the changes are untested. Changes in V2: - As per the original patch review, I've added the fix to the rest of the devices that use `smu_cmn_get_sysfs_buf` (Navi10, Renior and VanGogh and some others were not covered). - Also, I've previously missed some early returns were still returning the incorrect size, they are now fixed as well. Ilya Zlobintsev (1): drm/amd/pm: Avoid writing nulls into `pp_od_clk_voltage` .../drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c | 5 +++-- drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 15 ++++++++------- .../drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 5 +++-- drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c | 10 ++++++---- drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c | 7 ++++--- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 7 ++++--- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c | 5 +++-- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c | 5 +++-- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 7 ++++--- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 7 ++++--- .../gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c | 5 +++-- .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c | 5 +++-- .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 7 ++++--- 13 files changed, 52 insertions(+), 38 deletions(-) -- 2.51.0
