Re: [PATCH 2/2] drm/panfrost: add devfreq regulator support

From: Steven Price
Date: Thu May 07 2020 - 10:31:00 EST


On 02/05/2020 23:07, ClÃment PÃron wrote:
Hi Steven,

On Tue, 14 Apr 2020 at 15:10, Steven Price <steven.price@xxxxxxx> wrote:

Hi ClÃment,

On 13/04/2020 18:28, ClÃment PÃron wrote:
Hi Steven,


<snip>

Getting a backtrace from the two occurrences, I see one added from:

(debugfs_create_dir) from [<c04633f8>] (create_regulator+0xe0/0x220)
(create_regulator) from [<c04681d8>] (_regulator_get+0x168/0x204)
(_regulator_get) from [<c04682e0>] (regulator_bulk_get+0x64/0xf4)
(regulator_bulk_get) from [<c04696f0>]
(devm_regulator_bulk_get+0x40/0x74)
(devm_regulator_bulk_get) from [<bf00af44>]
(panfrost_device_init+0x1b4/0x48c [panfrost])
(panfrost_device_init [panfrost]) from [<bf00a4d4>]
(panfrost_probe+0x94/0x184 [panfrost])
(panfrost_probe [panfrost]) from [<c04ee694>]
(platform_drv_probe+0x48/0x94)

And the other:

(debugfs_create_dir) from [<c04633f8>] (create_regulator+0xe0/0x220)
(create_regulator) from [<c04681d8>] (_regulator_get+0x168/0x204)
(_regulator_get) from [<c05c1280>] (dev_pm_opp_set_regulators+0x6c/0x184)
(dev_pm_opp_set_regulators) from [<bf00b4ac>]
(panfrost_devfreq_init+0x38/0x1ac [panfrost])
(panfrost_devfreq_init [panfrost]) from [<bf00a508>]
(panfrost_probe+0xc8/0x184 [panfrost])
(panfrost_probe [panfrost]) from [<c04ee694>]
(platform_drv_probe+0x48/0x94)

Both are created at /regulator/vdd_gpu

I'm preparing a new version with some clean from lima devfreq.
My working branch :
https://github.com/clementperon/linux/commits/panfrost_devfreq

I had a look at that branch and gave it a quick spin on my Firefly RK3288 and didn't notice any issues.

Two strange things I observe:
- After 30sec the regulator is released by OPP ???
[ 33.757627] vdd-gpu: disabling
Introduce the regulator support in this commit:
https://github.com/clementperon/linux/commit/be310c37b82010e293b7f129ccdcb711a2abb2ce

I can't see anything wrong with this commit, but equally in my DTS I have a "regulator-always-on" for vdd_gpu. My initial thought was that this could be runtime PM of the GPU - but I can't see how panfrost_device_suspend() would end up turning off the regulator. So unless there's some way that the regulator itself suspends (but it should know it's in use) I've no clue why this would be happening.

Since you've got a reproduction - can you get a backtrace where the regulator is getting disabled?

- The Cooling map is not probe correctly :
[ 2.545756] panfrost 1800000.gpu: [drm:panfrost_devfreq_init
[panfrost]] Failed to register cooling device
Introduce in this commit :
https://github.com/clementperon/linux/commit/0252c38fd55ad78366ac4b1714e285c88db34557

Do you have an hint about what I'm missing ?

Sorry, my knowledge of the cooling framework is very limited. What you've got looks plausible, but I'm afraid I can't really help beyond that! As before - can you try adding some printk()s in e.g. of_devfreq_cooling_register_power() and find out where it is bailing out?

Steve