mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Gabor Juhos <j4g8y7@gmail.com>
To: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>,
	Bjorn Andersson <andersson@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>,
	Brian Masney <bmasney+clk@redhat.com>,
	Jerome Brunet <jbrunet+clk@baylibre.com>,
	Konrad Dybcio <konradybcio@kernel.org>,
	Abel Vesa <abel.vesa@oss.qualcomm.com>,
	Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>,
	Gokul Sriram Palanisamy <quic_gokulsri@quicinc.com>,
	Sricharan Ramabadhran <quic_srichara@quicinc.com>
Cc: Stanislaw Pal <kuncy7@gmail.com>,
	Mieczyslaw Nalewaj <namiltd@yahoo.com>,
	Jie Luo <jie.luo@oss.qualcomm.com>,
	Georg Seema <georgseema@gmail.com>,
	linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org,
	linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH] clk: qcom: gcc-ipq5018: mark 'gpll0_main' clock as critical
Date: Sat, 3 Oct 2026 21:50:57 +0200	[thread overview]
Message-ID: <4ae83db6-768d-447e-b177-3ef5206267f9@gmail.com> (raw)
In-Reply-To: <66d48e1f-7bab-42f3-84db-ce794f2a2a89@oss.qualcomm.com>

2026. 10. 01. 18:15 keltezéssel, Konrad Dybcio írta:
> On 9/24/26 1:33 PM, Gabor Juhos wrote:
>> Hi Konrad,
>>
>> 2026. 09. 23. 15:32 keltezéssel, Konrad Dybcio írta:
>>> On 9/18/26 11:27 AM, Gabor Juhos wrote:
>>>> On IPQ5018, the APCS core clock feeds the CPUs. It can use
>>>> different clocks as its parent, but during system boot it
>>>> utilizes GPLL0.
> 
> [...]
> 
>>> At a glance, we have the CPUs consuming
>>> &apcs_glb APCS_ALIAS0_CORE_CLK
>>>
>>> which takes XO/GPLL0/A53PLL as parents.
>>>
>>> GPLL0 is a child of GPLL0_MAIN, so this should never be gated in
>>> practice. devlink and probe deferrals should make sure you always
>>> get a valid clock handle for the cpufreq driver..
>>
>> Yes, the cpufreq driver gets a valid clock handle. However the hang happens
>> early, when the 'apcs_alias0_core' clock is not registered yet. So CCF does not
>> know that the clock (hence the CPU) is a consumer of GPLL0.
> 
> So is that the late_initcall kicking in early, disabling unused
> clocks,

No, disabling unused clocks happens much later.

> or is there some other logic that ends up disabling the
> GPLL?

In the actual case, it is being disabled by runtime PM, which happens due to the
pm_runtime_put() call in the 'ipq_cmn_pll' driver's probe function.

Adding a WARN() into the clk_alpha_pll_disable() function results in this message:

  WARNING: disabling 'gpll0_main', expect a system hang!!!
  WARNING: at clk_alpha_pll_disable+0xd8/0x108, CPU#0: kworker/u8:0/11
  Modules linked in:
  CPU: 0 UID: 0 PID: 11 Comm: kworker/u8:0 Not tainted 7.3.0-rc1 #0 PREEMPT
  Hardware name: TP-Link Archer AX55 v1 (DT)
  Workqueue: pm pm_runtime_work
  ...
  Call trace:
   clk_alpha_pll_disable+0xd8/0x108 (P)
   clk_core_disable+0xec/0x278                 # gpll0_main
   clk_core_disable+0x110/0x278                # gpll0
   clk_core_disable+0x110/0x278                # pcnoc_bfdcd_clk_src
   clk_core_disable+0x110/0x278                # pcnoc_clk_src
   clk_core_disable+0x110/0x278                # gcc_cmn_blk_ahb_clk
   clk_disable+0x38/0x60
   pm_clk_suspend+0x120/0x170
   pm_generic_runtime_suspend+0x34/0x58
   __rpm_callback+0x50/0x200
   rpm_callback+0x60/0x78
   rpm_suspend+0xf4/0x5e8
   pm_runtime_work+0xd4/0xe0
   process_one_work+0x258/0x860
   worker_thread+0x1c8/0x378
   kthread+0x140/0x158
   ret_from_fork+0x10/0x20

However the problem is not specific to the ipq_cmn_pll driver. It is a race
between probing different devices.

For example, consider a simplified probe function of a driver:

  static int ipq5018_gpll0_consumer_probe(struct platform_device *pdev)
  {
          struct clk *clk;

          clk = devm_clk_get_enabled(&pdev->dev, "foo");
          if (IS_ERR(clk))
                  return PTR_ERR(clk);

          return some_function();
  }

Then assume the followings:
  - "foo" is a descendant clock of GPLL0
  - the probe function runs before probing other devices, so the probed device
    will be the first consumer of GPLL0
  - some_function() returns with an error code

The result will be the same hang. Due to the probe failure, devres disables the
clock, but since the the device is the only consumer of GPLL0, it is getting
disabled as well.

Here is the repective WARN result:

  WARNING: disabling 'gpll0_main', expect a system hang!!!
  WARNING: at clk_alpha_pll_disable+0xd8/0xf8, CPU#1: swapper/0/1
  Modules linked in:
  CPU: 1 UID: 0 PID: 1 Comm: swapper/0 Not tainted 7.3.0-rc1 #0 PREEMPT
  Hardware name: TP-Link Archer AX55 v1 (DT)
  ..
  Call trace:
   clk_alpha_pll_disable+0xd8/0xf8 (P)
   clk_core_disable+0xdc/0x268
   clk_disable+0x38/0x60
   clk_disable_unprepare+0x18/0x38
   devm_clk_release+0x2c/0x50
   dr_node_release+0x24/0x38
   release_nodes+0x78/0x118
   devres_release_all+0x84/0xf0
   device_unbind_cleanup+0x34/0x98
   really_probe+0x190/0x3f0
   __driver_probe_device+0x174/0x1e0
   driver_probe_device+0xc4/0x130
   __driver_attach+0x108/0x258
   bus_for_each_dev+0x6c/0xb8
   driver_attach+0x2c/0x40
   bus_add_driver+0x128/0x258
   driver_register+0x68/0x138
   __platform_driver_register+0x30/0x48
   ipq5018_gpll0_consumer_driver_init+0x2c/0x40
   do_one_initcall+0x6c/0x548
   kernel_init_freeable+0x264/0x388
   kernel_init+0x34/0x1f0
   ret_from_fork+0x10/0x20

Maybe this helps to understand the problem.

Regards,
Gabor

  reply	other threads:[~2026-10-03 19:51 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-18  9:27 Gabor Juhos
2026-09-18 12:05 ` Stanislaw Pal
2026-09-19  5:21 ` Mieczyslaw Nalewaj
2026-09-23 13:32 ` Konrad Dybcio
2026-09-24 11:33   ` Gabor Juhos
2026-10-01 16:15     ` Konrad Dybcio
2026-10-03 19:50       ` Gabor Juhos [this message]
2026-09-23 22:19 ` Bjorn Andersson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ae83db6-768d-447e-b177-3ef5206267f9@gmail.com \
    --to=j4g8y7@gmail.com \
    --cc=abel.vesa@oss.qualcomm.com \
    --cc=andersson@kernel.org \
    --cc=bmasney+clk@redhat.com \
    --cc=georgseema@gmail.com \
    --cc=jbrunet+clk@baylibre.com \
    --cc=jie.luo@oss.qualcomm.com \
    --cc=konrad.dybcio@oss.qualcomm.com \
    --cc=konradybcio@kernel.org \
    --cc=kuncy7@gmail.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namiltd@yahoo.com \
    --cc=quic_gokulsri@quicinc.com \
    --cc=quic_srichara@quicinc.com \
    --cc=sboyd@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=varadarajan.narayanan@oss.qualcomm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®