Re: [PATCH V3.1 02/20] OPP: Make dev_pm_opp_set_regulators() accept NULL terminated list

From: Steven Price
Date: Wed Jul 06 2022 - 05:50:35 EST


On 06/07/2022 09:18, Viresh Kumar wrote:
> Make dev_pm_opp_set_regulators() accept a NULL terminated list of names
> instead of making the callers keep the two parameters in sync, which
> creates an opportunity for bugs to get in.
>
> Suggested-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx>
> ---
> V3->V3.1:
> - Update panfrost_drv.c to include the NULL element.
>
> drivers/cpufreq/cpufreq-dt.c | 9 ++++-----
> drivers/cpufreq/ti-cpufreq.c | 7 +++----
> drivers/devfreq/exynos-bus.c | 4 ++--
> drivers/gpu/drm/lima/lima_devfreq.c | 3 ++-
> drivers/gpu/drm/panfrost/panfrost_devfreq.c | 3 +--
> drivers/gpu/drm/panfrost/panfrost_drv.c | 15 ++++++++++-----
> drivers/opp/core.c | 18 ++++++++++++------
> drivers/soc/tegra/pmc.c | 4 ++--
> include/linux/pm_opp.h | 9 ++++-----
> 9 files changed, 40 insertions(+), 32 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
> index 194af7f607a6..5110cd9b2425 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
> @@ -101,8 +101,7 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
> return 0;
> }
>
> - ret = devm_pm_opp_set_regulators(dev, pfdev->comp->supply_names,
> - pfdev->comp->num_supplies);
> + ret = devm_pm_opp_set_regulators(dev, pfdev->comp->supply_names);
> if (ret) {
> /* Continue if the optional regulator is missing */
> if (ret != -ENODEV) {
> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> index 7fcbc2a5b6cd..8a4bef65d38c 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> @@ -625,24 +625,29 @@ static int panfrost_remove(struct platform_device *pdev)
> return 0;
> }
>
> -static const char * const default_supplies[] = { "mali" };
> +/*
> + * The OPP core wants the supply names to be NULL terminated, but we need the
> + * correct num_supplies value for regulator core. Hence, we NULL terminate here
> + * and then initialize num_supplies with ARRAY_SIZE - 1.
> + */
> +static const char * const default_supplies[] = { "mali", NULL };
> static const struct panfrost_compatible default_data = {
> - .num_supplies = ARRAY_SIZE(default_supplies),
> + .num_supplies = ARRAY_SIZE(default_supplies) - 1,
> .supply_names = default_supplies,
> .num_pm_domains = 1, /* optional */
> .pm_domain_names = NULL,
> };
>
> static const struct panfrost_compatible amlogic_data = {
> - .num_supplies = ARRAY_SIZE(default_supplies),
> + .num_supplies = ARRAY_SIZE(default_supplies) - 1,
> .supply_names = default_supplies,
> .vendor_quirk = panfrost_gpu_amlogic_quirk,
> };
>
> -static const char * const mediatek_mt8183_supplies[] = { "mali", "sram" };
> +static const char * const mediatek_mt8183_supplies[] = { "mali", "sram", NULL };
> static const char * const mediatek_mt8183_pm_domains[] = { "core0", "core1", "core2" };
> static const struct panfrost_compatible mediatek_mt8183_data = {
> - .num_supplies = ARRAY_SIZE(mediatek_mt8183_supplies),
> + .num_supplies = ARRAY_SIZE(mediatek_mt8183_supplies) - 1,
> .supply_names = mediatek_mt8183_supplies,
> .num_pm_domains = ARRAY_SIZE(mediatek_mt8183_pm_domains),
> .pm_domain_names = mediatek_mt8183_pm_domains,

Reviewed-by: Steven Price <steven.price@xxxxxxx>

Thanks for the rework, much cleaner.

Steve