Re: [PATCH] clk: qcom: enable ALWAYS_ON for titan_top_gdsc

From: Brian Masney

Date: Mon Jun 29 2026 - 07:07:55 EST


Hi Vladimir,

On Fri, Jun 26, 2026 at 07:59:53PM +0300, Vladimir Zapolskiy wrote:
> On 6/26/26 19:26, Brian Masney wrote:
> > With the introduction of sync_state support in the clk and pmdomain
> > subsystems, the following warning happens when the unused clocks are
> > shutdown in camcc-sc8280xp:
> >
> > [ 15.408367] titan_top_gdsc status stuck at 'on'
> > [ 15.408429] WARNING: drivers/clk/qcom/gdsc.c:178 at gdsc_toggle_logic+0x14c/0x160, CPU#2: kworker/u32:1/14
> > [ 15.408462] Modules linked in: bnep vfat fat ath11k_pci(+) ath11k mac80211 cfg80211 mhi libarc4 snd_soc_wcd938x snd_soc_wcd938x_sdw snd_soc_wcd_classh hci_uart snd_soc_wcd_common
> > snd_soc_sc8280xp soundwire_qcom snd_soc_wcd_mbhc snd_soc_qcom_sdw slimbus snd_soc_qcom_common regmap_sdw btqca btrtl qcom_camss soundwire_bus btbcm btintel snd_soc_sdca snd_soc_lpass_wsa_macro
> > bluetooth snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_rx_macro snd_soc_hdmi_codec snd_soc_lpass_macro_common videobuf2_dma_sg ov5675 v4l2_fwnode videobuf2_memops
> > qcom_spmi_adc5 snd_soc_core qcom_spmi_adc_tm5 videobuf2_v4l2 snd_seq snd_seq_device videobuf2_common v4l2_async qcom_vadc_common qcom_spmi_temp_alarm pm8941_pwrkey industrialio videodev
> > snd_compress rfkill ac97_bus snd_pcm_dmaengine qcom_tsens mc qcom_edac snd_pcm pci_pwrctrl_pwrseq qcom_cpufreq_hw snd_timer snd qcomtee soundcore tee leds_gpio joydev binfmt_misc zram
> > lz4hc_compress governor_simpleondemand panel_edp msm xhci_plat_hcd nvme nvme_core dwc3 qcom_pm8008_regulator
> > [ 15.408688] ucsi_glink nvme_keyring nvme_auth pmic_glink_altmode udc_core typec_ucsi aux_hpd_bridge qcom_battmgr ulpi ubwc_config socinfo ocmem drm_gpuvm qcom_q6v5_pas drm_exec
> > qcom_pil_info leds_qcom_lpg gpu_sched led_class_multicolor rtc_pm8xxx qcom_pbs qcom_common drm_display_helper qcom_pon qcom_glink_smem qcom_glink ghash_ce pwrseq_qcom_wcn gpio_sbu_mux
> > qcom_stats phy_qcom_qmp_combo qcom_q6v5 gf128mul cec dispcc_sc8280xp phy_qcom_edp camcc_sc8280xp i2c_qcom_cci qcom_sysmon drm_dp_aux_bus mdt_loader aux_bridge qcom_pm8008 i2c_hid_of_elan
> > dwc3_qcom_legacy llcc_qcom icc_bwmon gpi typec qcom_refgen_regulator phy_qcom_qmp_usb nvmem_qfprom qcom_ipcc phy_qcom_snps_femto_v2 gpucc_sc8280xp pinctrl_sc8280xp_lpass_lpi qcom_hwspinlock
> > pinctrl_lpass_lpi lpasscc_sc8280xp qrtr qcom_aoss pmic_glink pdr_interface phy_qcom_qmp_pcie qcom_smd qcom_pdr_msg icc_osm_l3 qcom_wdt qmi_helpers qcom_rng smp2p rpmsg_core gpio_keys pwm_bl
> > smem hid_multitouch fuse i2c_dev
> > [ 15.408928] CPU: 2 UID: 0 PID: 14 Comm: kworker/u32:1 Not tainted 7.1.0+ #2 PREEMPT(lazy)
> > [ 15.408937] Hardware name: LENOVO 21BX0016US/21BX0016US, BIOS N3HET88W (1.60 ) 03/14/2024
> > [ 15.408942] Workqueue: pm pm_runtime_work
> > [ 15.408959] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> > [ 15.408967] pc : gdsc_toggle_logic+0x14c/0x160
> > [ 15.408978] lr : gdsc_toggle_logic+0x14c/0x160
> > [ 15.408987] sp : ffff8000800f3b40
> > [ 15.408991] x29: ffff8000800f3b40 x28: 0000000000000000 x27: 0000000000000000
> > [ 15.409003] x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
> > [ 15.409014] x23: 0000000000000000 x22: 0000000000000001 x21: ffffa33f298fca88
> > [ 15.409024] x20: 0000000000000000 x19: ffffa33f298fc5b0 x18: 00cd15db75dacefd
> > [ 15.409035] x17: 000000040044ffff x16: ffffa33f3b1a3d88 x15: 726f776b80000002
> > [ 15.409045] x14: ffffffffffffffff x13: 0000000000000028 x12: 0101010101010101
> > [ 15.409056] x11: 7f7f7f7f7f7f7f7f x10: fefeff3039313274 x9 : ffffa33f3a5edafc
> > [ 15.409067] x8 : ffff8000800f3780 x7 : 0000000000000001 x6 : 0000000000000001
> > [ 15.409078] x5 : ffff000bf3ca1288 x4 : 0000000000000000 x3 : ffff5cccb6a3f000
> > [ 15.409088] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff000080ae0000
> > [ 15.409098] Call trace:
> > [ 15.409103] gdsc_toggle_logic+0x14c/0x160 (P)
> > [ 15.409115] gdsc_disable+0x4c/0x190
> > [ 15.409126] _genpd_power_off+0xa0/0x1a8
> > [ 15.409137] genpd_power_off.part.0+0x180/0x2a0
> > [ 15.409149] genpd_runtime_suspend+0x218/0x310
> > [ 15.409155] __rpm_callback+0x50/0x1f8
> > [ 15.409166] rpm_callback+0x7c/0x90
> > [ 15.409175] rpm_suspend+0xe8/0x690
> > [ 15.409185] pm_runtime_work+0xd0/0xe0
> > [ 15.409195] process_one_work+0x18c/0x518
> > [ 15.409208] worker_thread+0x190/0x320
> > [ 15.409218] kthread+0x110/0x130
> > [ 15.409227] ret_from_fork+0x10/0x20
> >
> > Let's go ahead and add the flag ALWAYS_ON to titan_top_gdsc so that it
> > is not disabled in the unused clock sweep.
> >
> > Fixes: ff93872a9c616 ("clk: qcom: camcc-sc8280xp: Add sc8280xp CAMCC")
>
> I don't think that the given backtrace (or the analysis) point to some
> problem in the clock controller driver definitely.
>
> If the problem is caused by "the introduction of sync_state support in
> the clk and pmdomain subsystems", then it would make sense to fix it
> instead, it's unclear that the problem exists beyond this applied series.

This is a separate issue outside of this series. With the current tree,
sc8280xp (Thinpad x13s) needs to be booted with clk_ignore_unused. With
the clk sync_state support, the x13s can be booted without
clk_ignore_used and without pd_ignore_unused.

Brian