* [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 @ 2026-08-23 15:40 Lucas Tanure 2026-08-24 15:29 ` Brian Masney 2026-08-26 9:02 ` Neil Armstrong 0 siblings, 2 replies; 8+ messages in thread From: Lucas Tanure @ 2026-08-23 15:40 UTC (permalink / raw) To: Neil Armstrong, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu Cc: Brian Masney, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel Hi, While testing mainline Linux on the Khadas VIM4 (Amlogic A311D2 / T7), I am hitting intermittent system instability, storage loss, and memory corruption during boot, unless I append clk_ignore_unused to the kernel command line. Because the failure is intermittent, I am running 100-reboot test campaigns to bisect the remaining clocks and isolate which clocks are critical and cannot be safely disabled. As testing takes significant time over serial console, I wanted to check if Amlogic or the maintainers could shed light on this: Are there specific T7 clocks or hardware domains that must remain critical/protected even without an explicit in-kernel consumer? Current clocks being disabled that don't kill the board on a test run: [ 0.380313] clk: Disabling unused clocks [ 0.380413] clk: Disabled unused clock: rtc_dualdiv [ 0.380718] clk: Disabled unused clock: rtc_duandiv_in [ 0.381377] clk: Unprepared unused clock: a73_div16 [ 0.381972] clk: Unprepared unused clock: cpu_div16 [ 0.382605] clk: Unprepared unused clock: f50m [ 0.383174] clk: Unprepared unused clock: fixed_pll_dco [ 0.383786] clk: Unprepared unused clock: hdmi_pll_osc [ 0.384416] clk: Unprepared unused clock: sys1_pll_osc [ 0.385056] clk: Unprepared unused clock: earc_osc [ 0.385652] clk: Unprepared unused clock: pcie_refclk_osc [ 0.386323] clk: Unprepared unused clock: eth_pll_osc [ 0.386961] clk: Unprepared unused clock: pcie_osc [ 0.387548] clk: Unprepared unused clock: mclk_pll_osc [ 0.388187] clk: Unprepared unused clock: usb_pll1_osc [ 0.388826] clk: Unprepared unused clock: usb_pll0_osc [ 0.389465] clk: Unprepared unused clock: tcon_pll_osc [ 0.390105] clk: Unprepared unused clock: top_pll_osc [ 0.390738] clk: Unprepared unused clock: aud_pll_osc [ 0.391361] clk: Unprepared unused clock: ddr_pll_osc I am not forcing any clock to be disabled; I am forcing all clocks to stay on and letting them be disabled if unused one by one. Any guidance or hints on required platform clocks would be greatly appreciated. Thanks, Lucas Tanure ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 2026-08-23 15:40 [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 Lucas Tanure @ 2026-08-24 15:29 ` Brian Masney 2026-08-26 9:55 ` Lucas Tanure 2026-08-26 9:02 ` Neil Armstrong 1 sibling, 1 reply; 8+ messages in thread From: Brian Masney @ 2026-08-24 15:29 UTC (permalink / raw) To: Lucas Tanure Cc: Neil Armstrong, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel Hi Lucas, On Sun, Aug 23, 2026 at 04:40:42PM +0100, Lucas Tanure wrote: > While testing mainline Linux on the Khadas VIM4 (Amlogic A311D2 / T7), I am > hitting intermittent system instability, storage loss, and memory corruption > during boot, unless I append clk_ignore_unused to the kernel command line. > > Because the failure is intermittent, I am running 100-reboot test campaigns > to bisect the remaining clocks and isolate which clocks are critical and > cannot be safely disabled. > > As testing takes significant time over serial console, I wanted to check if > Amlogic or the maintainers could shed light on this: > > Are there specific T7 clocks or hardware domains that must remain > critical/protected even without an explicit in-kernel consumer? > > Current clocks being disabled that don't kill the board on a test run: > > [ 0.380313] clk: Disabling unused clocks > [ 0.380413] clk: Disabled unused clock: rtc_dualdiv > [ 0.380718] clk: Disabled unused clock: rtc_duandiv_in > [ 0.381377] clk: Unprepared unused clock: a73_div16 > [ 0.381972] clk: Unprepared unused clock: cpu_div16 > [ 0.382605] clk: Unprepared unused clock: f50m > [ 0.383174] clk: Unprepared unused clock: fixed_pll_dco > [ 0.383786] clk: Unprepared unused clock: hdmi_pll_osc > [ 0.384416] clk: Unprepared unused clock: sys1_pll_osc > [ 0.385056] clk: Unprepared unused clock: earc_osc > [ 0.385652] clk: Unprepared unused clock: pcie_refclk_osc > [ 0.386323] clk: Unprepared unused clock: eth_pll_osc > [ 0.386961] clk: Unprepared unused clock: pcie_osc > [ 0.387548] clk: Unprepared unused clock: mclk_pll_osc > [ 0.388187] clk: Unprepared unused clock: usb_pll1_osc > [ 0.388826] clk: Unprepared unused clock: usb_pll0_osc > [ 0.389465] clk: Unprepared unused clock: tcon_pll_osc > [ 0.390105] clk: Unprepared unused clock: top_pll_osc > [ 0.390738] clk: Unprepared unused clock: aud_pll_osc > [ 0.391361] clk: Unprepared unused clock: ddr_pll_osc > > I am not forcing any clock to be disabled; I am forcing all clocks to stay > on and letting them be disabled if unused one by one. > > Any guidance or hints on required platform clocks would be greatly > appreciated. I have an outstanding series that disables unused clocks via the sync_state callback: https://lore.kernel.org/linux-clk/20260626-clk-sync-state-v1-0-4156d8196dc8@redhat.com/ Be sure to not have clk_ignore_unused in your kernel command line. I suggest comparing the list of which clocks are disabled with that series against your list of clocks above. Brian ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 2026-08-24 15:29 ` Brian Masney @ 2026-08-26 9:55 ` Lucas Tanure 2026-08-26 16:42 ` Lucas Tanure 0 siblings, 1 reply; 8+ messages in thread From: Lucas Tanure @ 2026-08-26 9:55 UTC (permalink / raw) To: Brian Masney Cc: Neil Armstrong, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel On 24/08/2026 16:29, Brian Masney wrote: > Hi Lucas, > > On Sun, Aug 23, 2026 at 04:40:42PM +0100, Lucas Tanure wrote: >> While testing mainline Linux on the Khadas VIM4 (Amlogic A311D2 / T7), I am >> hitting intermittent system instability, storage loss, and memory corruption >> during boot, unless I append clk_ignore_unused to the kernel command line. >> >> Because the failure is intermittent, I am running 100-reboot test campaigns >> to bisect the remaining clocks and isolate which clocks are critical and >> cannot be safely disabled. >> >> As testing takes significant time over serial console, I wanted to check if >> Amlogic or the maintainers could shed light on this: >> >> Are there specific T7 clocks or hardware domains that must remain >> critical/protected even without an explicit in-kernel consumer? >> >> Current clocks being disabled that don't kill the board on a test run: >> >> [ 0.380313] clk: Disabling unused clocks >> [ 0.380413] clk: Disabled unused clock: rtc_dualdiv >> [ 0.380718] clk: Disabled unused clock: rtc_duandiv_in >> [ 0.381377] clk: Unprepared unused clock: a73_div16 >> [ 0.381972] clk: Unprepared unused clock: cpu_div16 >> [ 0.382605] clk: Unprepared unused clock: f50m >> [ 0.383174] clk: Unprepared unused clock: fixed_pll_dco >> [ 0.383786] clk: Unprepared unused clock: hdmi_pll_osc >> [ 0.384416] clk: Unprepared unused clock: sys1_pll_osc >> [ 0.385056] clk: Unprepared unused clock: earc_osc >> [ 0.385652] clk: Unprepared unused clock: pcie_refclk_osc >> [ 0.386323] clk: Unprepared unused clock: eth_pll_osc >> [ 0.386961] clk: Unprepared unused clock: pcie_osc >> [ 0.387548] clk: Unprepared unused clock: mclk_pll_osc >> [ 0.388187] clk: Unprepared unused clock: usb_pll1_osc >> [ 0.388826] clk: Unprepared unused clock: usb_pll0_osc >> [ 0.389465] clk: Unprepared unused clock: tcon_pll_osc >> [ 0.390105] clk: Unprepared unused clock: top_pll_osc >> [ 0.390738] clk: Unprepared unused clock: aud_pll_osc >> [ 0.391361] clk: Unprepared unused clock: ddr_pll_osc >> >> I am not forcing any clock to be disabled; I am forcing all clocks to stay >> on and letting them be disabled if unused one by one. >> >> Any guidance or hints on required platform clocks would be greatly >> appreciated. > > I have an outstanding series that disables unused clocks via the > sync_state callback: > > https://lore.kernel.org/linux-clk/20260626-clk-sync-state-v1-0-4156d8196dc8@redhat.com/ > > Be sure to not have clk_ignore_unused in your kernel command line. > > I suggest comparing the list of which clocks are disabled with that > series against your list of clocks above. Thanks for the input, it did not solve the issue. I am going to produce the list with a diff in disabled clocks with and without our change, but it did not solve the issue. > > Brian > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 2026-08-26 9:55 ` Lucas Tanure @ 2026-08-26 16:42 ` Lucas Tanure 2026-08-26 17:17 ` Brian Masney 0 siblings, 1 reply; 8+ messages in thread From: Lucas Tanure @ 2026-08-26 16:42 UTC (permalink / raw) To: Brian Masney Cc: Neil Armstrong, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel On 26/08/2026 10:55, Lucas Tanure wrote: > On 24/08/2026 16:29, Brian Masney wrote: >> Hi Lucas, >> >> On Sun, Aug 23, 2026 at 04:40:42PM +0100, Lucas Tanure wrote: >>> While testing mainline Linux on the Khadas VIM4 (Amlogic A311D2 / >>> T7), I am >>> hitting intermittent system instability, storage loss, and memory >>> corruption >>> during boot, unless I append clk_ignore_unused to the kernel command >>> line. >>> >>> Because the failure is intermittent, I am running 100-reboot test >>> campaigns >>> to bisect the remaining clocks and isolate which clocks are critical and >>> cannot be safely disabled. >>> >>> As testing takes significant time over serial console, I wanted to >>> check if >>> Amlogic or the maintainers could shed light on this: >>> >>> Are there specific T7 clocks or hardware domains that must remain >>> critical/protected even without an explicit in-kernel consumer? >>> >>> Current clocks being disabled that don't kill the board on a test run: >>> >>> [ 0.380313] clk: Disabling unused clocks >>> [ 0.380413] clk: Disabled unused clock: rtc_dualdiv >>> [ 0.380718] clk: Disabled unused clock: rtc_duandiv_in >>> [ 0.381377] clk: Unprepared unused clock: a73_div16 >>> [ 0.381972] clk: Unprepared unused clock: cpu_div16 >>> [ 0.382605] clk: Unprepared unused clock: f50m >>> [ 0.383174] clk: Unprepared unused clock: fixed_pll_dco >>> [ 0.383786] clk: Unprepared unused clock: hdmi_pll_osc >>> [ 0.384416] clk: Unprepared unused clock: sys1_pll_osc >>> [ 0.385056] clk: Unprepared unused clock: earc_osc >>> [ 0.385652] clk: Unprepared unused clock: pcie_refclk_osc >>> [ 0.386323] clk: Unprepared unused clock: eth_pll_osc >>> [ 0.386961] clk: Unprepared unused clock: pcie_osc >>> [ 0.387548] clk: Unprepared unused clock: mclk_pll_osc >>> [ 0.388187] clk: Unprepared unused clock: usb_pll1_osc >>> [ 0.388826] clk: Unprepared unused clock: usb_pll0_osc >>> [ 0.389465] clk: Unprepared unused clock: tcon_pll_osc >>> [ 0.390105] clk: Unprepared unused clock: top_pll_osc >>> [ 0.390738] clk: Unprepared unused clock: aud_pll_osc >>> [ 0.391361] clk: Unprepared unused clock: ddr_pll_osc >>> >>> I am not forcing any clock to be disabled; I am forcing all clocks to >>> stay >>> on and letting them be disabled if unused one by one. >>> >>> Any guidance or hints on required platform clocks would be greatly >>> appreciated. >> >> I have an outstanding series that disables unused clocks via the >> sync_state callback: >> >> https://lore.kernel.org/linux-clk/20260626-clk-sync-state- >> v1-0-4156d8196dc8@redhat.com/ >> >> Be sure to not have clk_ignore_unused in your kernel command line. >> >> I suggest comparing the list of which clocks are disabled with that >> series against your list of clocks above. > Thanks for the input, it did not solve the issue. I am going to produce > the list with a diff in disabled clocks with and without our change, but > it did not solve the issue. >> >> Brian >> > With Brian's patches, VIM4 does not turn off 4 clocks: t7_sys_sd_emmc_b t7_sys_sd_emmc_c sd_emmc_b sd_emmc_c This is expected since I'm trying to run from an SD card. However, even with these four clocks kept enabled, the board still hangs. Complete list with all clocks being disabled after Brians patches: [ 1.002247] clk: Disabled unused clock: t7_sys_pwm_ao_gh [ 1.002898] clk: Disabled unused clock: t7_sys_pwm_ao_ef [ 1.003560] clk: Disabled unused clock: t7_sys_pwm_ao_cd [ 1.004220] clk: Disabled unused clock: t7_sys_pwm_ao_ab [ 1.004972] clk: Disabled unused clock: t7_sys_pwm_ef [ 1.005509] clk: Disabled unused clock: t7_sys_pwm_cd [ 1.006211] clk: Disabled unused clock: t7_sys_pwm_ab [ 1.006766] clk: Disabled unused clock: t7_sys_ts_hevc [ 1.007434] clk: Disabled unused clock: t7_sys_ts_vpu [ 1.008033] clk: Disabled unused clock: t7_sys_ts_nna [ 1.008741] clk: Disabled unused clock: t7_sys_ts_gpu [ 1.009294] clk: Disabled unused clock: t7_sys_sar_adc [ 1.009929] clk: Disabled unused clock: t7_sys_vpu_intr [ 1.010609] clk: Disabled unused clock: t7_sys_dspb [ 1.011186] clk: Disabled unused clock: t7_sys_dspa [ 1.011792] clk: Disabled unused clock: t7_sys_a73pclk_apb [ 1.012554] clk: Disabled unused clock: t7_sys_pclk_sys_apb [ 1.013213] clk: Disabled unused clock: t7_sys_rsa [ 1.013811] clk: Disabled unused clock: t7_sys_mipi_isp_pclk [ 1.014529] clk: Disabled unused clock: t7_sys_mmc_apb [ 1.015107] clk: Disabled unused clock: t7_sys_hdmirx_pclk [ 1.015819] clk: Disabled unused clock: t7_sys_i2c_s_a [ 1.016429] clk: Disabled unused clock: t7_sys_hdmitx_apb [ 1.017109] clk: Disabled unused clock: t7_sys_i2c_m_f [ 1.017740] clk: Disabled unused clock: t7_sys_i2c_m_e [ 1.018379] clk: Disabled unused clock: t7_sys_i2c_m_d [ 1.019018] clk: Disabled unused clock: t7_sys_i2c_m_c [ 1.019657] clk: Disabled unused clock: t7_sys_i2c_m_b [ 1.020296] clk: Disabled unused clock: t7_sys_i2c_m_a [ 1.020940] clk: Disabled unused clock: t7_sys_i2c_ao_b [ 1.021585] clk: Disabled unused clock: t7_sys_i2c_ao_a [ 1.022236] clk: Disabled unused clock: t7_sys_pcie_phy [ 1.022885] clk: Disabled unused clock: t7_sys_usb [ 1.023482] clk: Disabled unused clock: t7_sys_pcie [ 1.024088] clk: Disabled unused clock: t7_sys_spicc1 [ 1.024723] clk: Disabled unused clock: t7_sys_spicc0 [ 1.025345] clk: Disabled unused clock: t7_sys_g2d [ 1.025940] clk: Disabled unused clock: t7_sys_spicc5 [ 1.026569] clk: Disabled unused clock: t7_sys_ts_a53 [ 1.027197] clk: Disabled unused clock: t7_sys_ts_a73 [ 1.027825] clk: Disabled unused clock: t7_sys_spicc4 [ 1.028454] clk: Disabled unused clock: t7_sys_spicc3 [ 1.029085] clk: Disabled unused clock: t7_sys_spicc2 [ 1.029710] clk: Disabled unused clock: t7_sys_aififo [ 1.030339] clk: Disabled unused clock: t7_sys_uart_f [ 1.030967] clk: Disabled unused clock: t7_sys_uart_e [ 1.031595] clk: Disabled unused clock: t7_sys_uart_d [ 1.032224] clk: Disabled unused clock: t7_sys_uart_c [ 1.032857] clk: Disabled unused clock: t7_sys_uart_b [ 1.033482] clk: Disabled unused clock: t7_sys_eth [ 1.034077] clk: Disabled unused clock: t7_sys_audio [ 1.034694] clk: Disabled unused clock: t7_sys_ir_ctrl [ 1.035333] clk: Disabled unused clock: t7_sys_msr_clk [ 1.035972] clk: Disabled unused clock: t7_sys_spifc [ 1.036596] clk: Disabled unused clock: t7_sys_acodec [ 1.037218] clk: Disabled unused clock: t7_sys_smartcard [ 1.037880] clk: Disabled unused clock: t7_sys_am2axi2 [ 1.038518] clk: Disabled unused clock: t7_sys_am2axi1 [ 1.039157] clk: Disabled unused clock: t7_sys_am2axi0 [ 1.039796] clk: Disabled unused clock: t7_sys_ampipe_eth [ 1.040468] clk: Disabled unused clock: t7_sys_ampipe_nand [ 1.041155] clk: Disabled unused clock: t7_sys_deswarp [ 1.041790] clk: Disabled unused clock: t7_sys_gdc [ 1.042385] clk: Disabled unused clock: t7_sys_cec [ 1.042981] clk: Disabled unused clock: t7_sys_aucpu [ 1.043600] clk: Disabled unused clock: t7_sys_aocpu [ 1.044217] clk: Disabled unused clock: t7_sys_mali [ 1.044830] clk: Disabled unused clock: t7_sys_ethphy [ 1.045451] clk: Disabled unused clock: t7_sys_mipi_dsi_b [ 1.046123] clk: Disabled unused clock: t7_sys_mipi_dsi_a [ 1.046795] clk: Disabled unused clock: t7_sys_dos [ 1.047390] clk: Disabled unused clock: t7_sys_ddr [ 1.047991] clk: Disabled unused clock: pwm_ao_g [ 1.048565] clk: Disabled unused clock: pwm_ao_f [ 1.049135] clk: Disabled unused clock: pwm_ao_e [ 1.049709] clk: Disabled unused clock: pwm_ao_d [ 1.050283] clk: Disabled unused clock: pwm_ao_b [ 1.050857] clk: Disabled unused clock: pwm_ao_a [ 1.051454] clk: Disabled unused clock: rtc_dualdiv [ 1.052038] clk: Disabled unused clock: rtc_duandiv_in Also with the patches the disable happens 0.5 second later, from 0.5 seconds after the boot to 1 second after the boot. I am still investigating what is missing a consumer or what should be labeled critical. thanks Lucas Tanure ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 2026-08-26 16:42 ` Lucas Tanure @ 2026-08-26 17:17 ` Brian Masney 2026-08-26 20:04 ` Lucas Tanure 0 siblings, 1 reply; 8+ messages in thread From: Brian Masney @ 2026-08-26 17:17 UTC (permalink / raw) To: Lucas Tanure Cc: Neil Armstrong, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel Hi Lucas, On Wed, Aug 26, 2026 at 05:42:01PM +0100, Lucas Tanure wrote: > With Brian's patches, VIM4 does not turn off 4 clocks: > > t7_sys_sd_emmc_b > t7_sys_sd_emmc_c > sd_emmc_b > sd_emmc_c > > This is expected since I'm trying to run from an SD card. However, even with > these four clocks kept enabled, the board still hangs. > > Complete list with all clocks being disabled after Brians patches: > [ 1.002247] clk: Disabled unused clock: t7_sys_pwm_ao_gh > [ 1.002898] clk: Disabled unused clock: t7_sys_pwm_ao_ef > [ 1.003560] clk: Disabled unused clock: t7_sys_pwm_ao_cd > [ 1.004220] clk: Disabled unused clock: t7_sys_pwm_ao_ab > [ 1.004972] clk: Disabled unused clock: t7_sys_pwm_ef > [ 1.005509] clk: Disabled unused clock: t7_sys_pwm_cd > [ 1.006211] clk: Disabled unused clock: t7_sys_pwm_ab > [ 1.006766] clk: Disabled unused clock: t7_sys_ts_hevc > [ 1.007434] clk: Disabled unused clock: t7_sys_ts_vpu > [ 1.008033] clk: Disabled unused clock: t7_sys_ts_nna > [ 1.008741] clk: Disabled unused clock: t7_sys_ts_gpu > [ 1.009294] clk: Disabled unused clock: t7_sys_sar_adc > [ 1.009929] clk: Disabled unused clock: t7_sys_vpu_intr > [ 1.010609] clk: Disabled unused clock: t7_sys_dspb > [ 1.011186] clk: Disabled unused clock: t7_sys_dspa > [ 1.011792] clk: Disabled unused clock: t7_sys_a73pclk_apb > [ 1.012554] clk: Disabled unused clock: t7_sys_pclk_sys_apb > [ 1.013213] clk: Disabled unused clock: t7_sys_rsa > [ 1.013811] clk: Disabled unused clock: t7_sys_mipi_isp_pclk > [ 1.014529] clk: Disabled unused clock: t7_sys_mmc_apb > [ 1.015107] clk: Disabled unused clock: t7_sys_hdmirx_pclk > [ 1.015819] clk: Disabled unused clock: t7_sys_i2c_s_a > [ 1.016429] clk: Disabled unused clock: t7_sys_hdmitx_apb > [ 1.017109] clk: Disabled unused clock: t7_sys_i2c_m_f > [ 1.017740] clk: Disabled unused clock: t7_sys_i2c_m_e > [ 1.018379] clk: Disabled unused clock: t7_sys_i2c_m_d > [ 1.019018] clk: Disabled unused clock: t7_sys_i2c_m_c > [ 1.019657] clk: Disabled unused clock: t7_sys_i2c_m_b > [ 1.020296] clk: Disabled unused clock: t7_sys_i2c_m_a > [ 1.020940] clk: Disabled unused clock: t7_sys_i2c_ao_b > [ 1.021585] clk: Disabled unused clock: t7_sys_i2c_ao_a > [ 1.022236] clk: Disabled unused clock: t7_sys_pcie_phy > [ 1.022885] clk: Disabled unused clock: t7_sys_usb > [ 1.023482] clk: Disabled unused clock: t7_sys_pcie > [ 1.024088] clk: Disabled unused clock: t7_sys_spicc1 > [ 1.024723] clk: Disabled unused clock: t7_sys_spicc0 > [ 1.025345] clk: Disabled unused clock: t7_sys_g2d > [ 1.025940] clk: Disabled unused clock: t7_sys_spicc5 > [ 1.026569] clk: Disabled unused clock: t7_sys_ts_a53 > [ 1.027197] clk: Disabled unused clock: t7_sys_ts_a73 > [ 1.027825] clk: Disabled unused clock: t7_sys_spicc4 > [ 1.028454] clk: Disabled unused clock: t7_sys_spicc3 > [ 1.029085] clk: Disabled unused clock: t7_sys_spicc2 > [ 1.029710] clk: Disabled unused clock: t7_sys_aififo > [ 1.030339] clk: Disabled unused clock: t7_sys_uart_f > [ 1.030967] clk: Disabled unused clock: t7_sys_uart_e > [ 1.031595] clk: Disabled unused clock: t7_sys_uart_d > [ 1.032224] clk: Disabled unused clock: t7_sys_uart_c > [ 1.032857] clk: Disabled unused clock: t7_sys_uart_b > [ 1.033482] clk: Disabled unused clock: t7_sys_eth > [ 1.034077] clk: Disabled unused clock: t7_sys_audio > [ 1.034694] clk: Disabled unused clock: t7_sys_ir_ctrl > [ 1.035333] clk: Disabled unused clock: t7_sys_msr_clk > [ 1.035972] clk: Disabled unused clock: t7_sys_spifc > [ 1.036596] clk: Disabled unused clock: t7_sys_acodec > [ 1.037218] clk: Disabled unused clock: t7_sys_smartcard > [ 1.037880] clk: Disabled unused clock: t7_sys_am2axi2 > [ 1.038518] clk: Disabled unused clock: t7_sys_am2axi1 > [ 1.039157] clk: Disabled unused clock: t7_sys_am2axi0 > [ 1.039796] clk: Disabled unused clock: t7_sys_ampipe_eth > [ 1.040468] clk: Disabled unused clock: t7_sys_ampipe_nand > [ 1.041155] clk: Disabled unused clock: t7_sys_deswarp > [ 1.041790] clk: Disabled unused clock: t7_sys_gdc > [ 1.042385] clk: Disabled unused clock: t7_sys_cec > [ 1.042981] clk: Disabled unused clock: t7_sys_aucpu > [ 1.043600] clk: Disabled unused clock: t7_sys_aocpu > [ 1.044217] clk: Disabled unused clock: t7_sys_mali > [ 1.044830] clk: Disabled unused clock: t7_sys_ethphy > [ 1.045451] clk: Disabled unused clock: t7_sys_mipi_dsi_b > [ 1.046123] clk: Disabled unused clock: t7_sys_mipi_dsi_a > [ 1.046795] clk: Disabled unused clock: t7_sys_dos > [ 1.047390] clk: Disabled unused clock: t7_sys_ddr > [ 1.047991] clk: Disabled unused clock: pwm_ao_g > [ 1.048565] clk: Disabled unused clock: pwm_ao_f > [ 1.049135] clk: Disabled unused clock: pwm_ao_e > [ 1.049709] clk: Disabled unused clock: pwm_ao_d > [ 1.050283] clk: Disabled unused clock: pwm_ao_b > [ 1.050857] clk: Disabled unused clock: pwm_ao_a > [ 1.051454] clk: Disabled unused clock: rtc_dualdiv > [ 1.052038] clk: Disabled unused clock: rtc_duandiv_in > > Also with the patches the disable happens 0.5 second later, from 0.5 seconds > after the boot to 1 second after the boot. > > I am still investigating what is missing a consumer or what should be > labeled critical. I've seen cases where a clock is modeled in Linux, but isn't actually used by Linux, so it gets caught in the disable unused clocks sweep. Does the board immediately crash after the disable unused clock sweep? If so, you could add a log statement, then 1 second sleep in clk_disable_unused_subtree() and wait for the board to crash. If you can't get timely help from the vendor, then you can add CLK_IGNORE_UNUSED to all of those clocks, and slowly start taking them off in batches and wait for the crash. Brian ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 2026-08-26 17:17 ` Brian Masney @ 2026-08-26 20:04 ` Lucas Tanure 0 siblings, 0 replies; 8+ messages in thread From: Lucas Tanure @ 2026-08-26 20:04 UTC (permalink / raw) To: Brian Masney Cc: Neil Armstrong, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel On 26/08/2026 18:17, Brian Masney wrote: > Hi Lucas, > > On Wed, Aug 26, 2026 at 05:42:01PM +0100, Lucas Tanure wrote: >> With Brian's patches, VIM4 does not turn off 4 clocks: >> >> t7_sys_sd_emmc_b >> t7_sys_sd_emmc_c >> sd_emmc_b >> sd_emmc_c >> >> This is expected since I'm trying to run from an SD card. However, even with >> these four clocks kept enabled, the board still hangs. >> >> Complete list with all clocks being disabled after Brians patches: >> [ 1.002247] clk: Disabled unused clock: t7_sys_pwm_ao_gh >> [ 1.002898] clk: Disabled unused clock: t7_sys_pwm_ao_ef >> [ 1.003560] clk: Disabled unused clock: t7_sys_pwm_ao_cd >> [ 1.004220] clk: Disabled unused clock: t7_sys_pwm_ao_ab >> [ 1.004972] clk: Disabled unused clock: t7_sys_pwm_ef >> [ 1.005509] clk: Disabled unused clock: t7_sys_pwm_cd >> [ 1.006211] clk: Disabled unused clock: t7_sys_pwm_ab >> [ 1.006766] clk: Disabled unused clock: t7_sys_ts_hevc >> [ 1.007434] clk: Disabled unused clock: t7_sys_ts_vpu >> [ 1.008033] clk: Disabled unused clock: t7_sys_ts_nna >> [ 1.008741] clk: Disabled unused clock: t7_sys_ts_gpu >> [ 1.009294] clk: Disabled unused clock: t7_sys_sar_adc >> [ 1.009929] clk: Disabled unused clock: t7_sys_vpu_intr >> [ 1.010609] clk: Disabled unused clock: t7_sys_dspb >> [ 1.011186] clk: Disabled unused clock: t7_sys_dspa >> [ 1.011792] clk: Disabled unused clock: t7_sys_a73pclk_apb >> [ 1.012554] clk: Disabled unused clock: t7_sys_pclk_sys_apb >> [ 1.013213] clk: Disabled unused clock: t7_sys_rsa >> [ 1.013811] clk: Disabled unused clock: t7_sys_mipi_isp_pclk >> [ 1.014529] clk: Disabled unused clock: t7_sys_mmc_apb >> [ 1.015107] clk: Disabled unused clock: t7_sys_hdmirx_pclk >> [ 1.015819] clk: Disabled unused clock: t7_sys_i2c_s_a >> [ 1.016429] clk: Disabled unused clock: t7_sys_hdmitx_apb >> [ 1.017109] clk: Disabled unused clock: t7_sys_i2c_m_f >> [ 1.017740] clk: Disabled unused clock: t7_sys_i2c_m_e >> [ 1.018379] clk: Disabled unused clock: t7_sys_i2c_m_d >> [ 1.019018] clk: Disabled unused clock: t7_sys_i2c_m_c >> [ 1.019657] clk: Disabled unused clock: t7_sys_i2c_m_b >> [ 1.020296] clk: Disabled unused clock: t7_sys_i2c_m_a >> [ 1.020940] clk: Disabled unused clock: t7_sys_i2c_ao_b >> [ 1.021585] clk: Disabled unused clock: t7_sys_i2c_ao_a >> [ 1.022236] clk: Disabled unused clock: t7_sys_pcie_phy >> [ 1.022885] clk: Disabled unused clock: t7_sys_usb >> [ 1.023482] clk: Disabled unused clock: t7_sys_pcie >> [ 1.024088] clk: Disabled unused clock: t7_sys_spicc1 >> [ 1.024723] clk: Disabled unused clock: t7_sys_spicc0 >> [ 1.025345] clk: Disabled unused clock: t7_sys_g2d >> [ 1.025940] clk: Disabled unused clock: t7_sys_spicc5 >> [ 1.026569] clk: Disabled unused clock: t7_sys_ts_a53 >> [ 1.027197] clk: Disabled unused clock: t7_sys_ts_a73 >> [ 1.027825] clk: Disabled unused clock: t7_sys_spicc4 >> [ 1.028454] clk: Disabled unused clock: t7_sys_spicc3 >> [ 1.029085] clk: Disabled unused clock: t7_sys_spicc2 >> [ 1.029710] clk: Disabled unused clock: t7_sys_aififo >> [ 1.030339] clk: Disabled unused clock: t7_sys_uart_f >> [ 1.030967] clk: Disabled unused clock: t7_sys_uart_e >> [ 1.031595] clk: Disabled unused clock: t7_sys_uart_d >> [ 1.032224] clk: Disabled unused clock: t7_sys_uart_c >> [ 1.032857] clk: Disabled unused clock: t7_sys_uart_b >> [ 1.033482] clk: Disabled unused clock: t7_sys_eth >> [ 1.034077] clk: Disabled unused clock: t7_sys_audio >> [ 1.034694] clk: Disabled unused clock: t7_sys_ir_ctrl >> [ 1.035333] clk: Disabled unused clock: t7_sys_msr_clk >> [ 1.035972] clk: Disabled unused clock: t7_sys_spifc >> [ 1.036596] clk: Disabled unused clock: t7_sys_acodec >> [ 1.037218] clk: Disabled unused clock: t7_sys_smartcard >> [ 1.037880] clk: Disabled unused clock: t7_sys_am2axi2 >> [ 1.038518] clk: Disabled unused clock: t7_sys_am2axi1 >> [ 1.039157] clk: Disabled unused clock: t7_sys_am2axi0 >> [ 1.039796] clk: Disabled unused clock: t7_sys_ampipe_eth >> [ 1.040468] clk: Disabled unused clock: t7_sys_ampipe_nand >> [ 1.041155] clk: Disabled unused clock: t7_sys_deswarp >> [ 1.041790] clk: Disabled unused clock: t7_sys_gdc >> [ 1.042385] clk: Disabled unused clock: t7_sys_cec >> [ 1.042981] clk: Disabled unused clock: t7_sys_aucpu >> [ 1.043600] clk: Disabled unused clock: t7_sys_aocpu >> [ 1.044217] clk: Disabled unused clock: t7_sys_mali >> [ 1.044830] clk: Disabled unused clock: t7_sys_ethphy >> [ 1.045451] clk: Disabled unused clock: t7_sys_mipi_dsi_b >> [ 1.046123] clk: Disabled unused clock: t7_sys_mipi_dsi_a >> [ 1.046795] clk: Disabled unused clock: t7_sys_dos >> [ 1.047390] clk: Disabled unused clock: t7_sys_ddr >> [ 1.047991] clk: Disabled unused clock: pwm_ao_g >> [ 1.048565] clk: Disabled unused clock: pwm_ao_f >> [ 1.049135] clk: Disabled unused clock: pwm_ao_e >> [ 1.049709] clk: Disabled unused clock: pwm_ao_d >> [ 1.050283] clk: Disabled unused clock: pwm_ao_b >> [ 1.050857] clk: Disabled unused clock: pwm_ao_a >> [ 1.051454] clk: Disabled unused clock: rtc_dualdiv >> [ 1.052038] clk: Disabled unused clock: rtc_duandiv_in >> >> Also with the patches the disable happens 0.5 second later, from 0.5 seconds >> after the boot to 1 second after the boot. >> >> I am still investigating what is missing a consumer or what should be >> labeled critical. > > I've seen cases where a clock is modeled in Linux, but isn't actually > used by Linux, so it gets caught in the disable unused clocks sweep. > > Does the board immediately crash after the disable unused clock sweep? yes> If so, you could add a log statement, then 1 second sleep in > clk_disable_unused_subtree() and wait for the board to crash. good idea , thanks > > If you can't get timely help from the vendor, then you can add > CLK_IGNORE_UNUSED to all of those clocks, and slowly start taking them > off in batches and wait for the crash. That's what I've been doing for the past few weeks, but I'm probably hunting down a set of clock issues, as support for this board is still in its early stages. It's a combination of clocks, which makes it way more time-consuming. I went with a more localized approach: diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 2b6fae54702a..3358f4dc871f 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1489,14 +1489,95 @@ static void clk_unprepare_unused_subtree(struct clk_core *core, else if (core->ops->unprepare) core->ops->unprepare(core->hw); trace_clk_unprepare_complete(core); + pr_info("clk: V Unprepared unused clock: %s\n", core->name); } } +static const char * const disable_clocks[] = { + "t7_sys_pwm_ao_gh", + "t7_sys_pwm_ao_ef", + "t7_sys_pwm_ef", + "t7_sys_pwm_cd", + "t7_sys_pwm_ab", + "t7_sys_ts_hevc", + "t7_sys_ts_vpu", + "t7_sys_ts_nna", + "t7_sys_ts_gpu", + "t7_sys_sar_adc", + "t7_sys_vpu_intr", + "t7_sys_dspb", + "t7_sys_dspa", + "t7_sys_a73pclk_apb", + "t7_sys_pclk_sys_apb", + "t7_sys_rsa", + "t7_sys_mipi_isp_pclk", + "t7_sys_mmc_apb", + "t7_sys_hdmirx_pclk", + "t7_sys_i2c_s_a", + "t7_sys_hdmitx_apb", + "t7_sys_i2c_m_f", + "t7_sys_i2c_m_e", + "t7_sys_i2c_m_d", + "t7_sys_i2c_m_c", + "t7_sys_i2c_m_b", + "t7_sys_i2c_m_a", + "t7_sys_i2c_ao_b", + "t7_sys_i2c_ao_a", + "t7_sys_pcie_phy", + "t7_sys_usb", + "t7_sys_pcie", + "t7_sys_spicc1", + "t7_sys_spicc0", + "t7_sys_g2d", + "t7_sys_spicc5", + "t7_sys_ts_a53", + "t7_sys_ts_a73", + "t7_sys_spicc4", + "t7_sys_spicc3", + "t7_sys_spicc2", + "t7_sys_aififo", + "t7_sys_uart_f", + "t7_sys_uart_e", + "t7_sys_uart_d", + "t7_sys_uart_c", + "t7_sys_uart_b", + "t7_sys_eth", + "t7_sys_audio", + "t7_sys_ir_ctrl", + "t7_sys_msr_clk", + "t7_sys_spifc", + "t7_sys_acodec", + "t7_sys_smartcard", + "t7_sys_am2axi2", + "t7_sys_am2axi1", + "t7_sys_am2axi0", + "t7_sys_ampipe_eth", + "t7_sys_ampipe_nand", + "t7_sys_deswarp", + "t7_sys_gdc", + "t7_sys_cec", + "t7_sys_aucpu", + "t7_sys_aocpu", + "t7_sys_mali", + "t7_sys_ethphy", + "t7_sys_mipi_dsi_b", + "t7_sys_mipi_dsi_a", + "t7_sys_dos", + "t7_sys_ddr", + "pwm_ao_g", + "pwm_ao_e", + "pwm_ao_a", + "rtc_dualdiv", + "rtc_duandiv_in", +}; + + static void clk_disable_unused_subtree(struct clk_core *core, struct device *dev) { struct clk_core *child; unsigned long flags; + int i; lockdep_assert_held(&prepare_lock); @@ -1517,6 +1598,11 @@ static void clk_disable_unused_subtree(struct clk_core *core, if (core->flags & CLK_IGNORE_UNUSED) goto unlock_out; + for (i = 0; i < ARRAY_SIZE(disable_clocks); i++) { + if (strcmp(core->name, disable_clocks[i]) == 0) + goto unlock_out; + } + /* * some gate clocks have special needs during the disable-unused * sequence. call .disable_unused if available, otherwise fall @@ -1529,6 +1615,7 @@ static void clk_disable_unused_subtree(struct clk_core *core, else if (core->ops->disable) core->ops->disable(core->hw); trace_clk_disable_complete(core); + pr_info("clk: V Disabled unused clock: %s\n", core->name); } This makes it easier to let the sweep disable clocks for testing. > > Brian > Thanks Lucas ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 2026-08-23 15:40 [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 Lucas Tanure 2026-08-24 15:29 ` Brian Masney @ 2026-08-26 9:02 ` Neil Armstrong 2026-08-26 9:57 ` Lucas Tanure 1 sibling, 1 reply; 8+ messages in thread From: Neil Armstrong @ 2026-08-26 9:02 UTC (permalink / raw) To: Lucas Tanure, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu Cc: Brian Masney, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel On 8/23/26 17:40, Lucas Tanure wrote: > Hi, > > While testing mainline Linux on the Khadas VIM4 (Amlogic A311D2 / T7), I am hitting intermittent system instability, storage loss, and memory corruption during boot, unless I append clk_ignore_unused to the kernel command line. > > Because the failure is intermittent, I am running 100-reboot test campaigns to bisect the remaining clocks and isolate which clocks are critical and cannot be safely disabled. > > As testing takes significant time over serial console, I wanted to check if Amlogic or the maintainers could shed light on this: > > Are there specific T7 clocks or hardware domains that must remain critical/protected even without an explicit in-kernel consumer? > > Current clocks being disabled that don't kill the board on a test run: > > [ 0.380313] clk: Disabling unused clocks > [ 0.380413] clk: Disabled unused clock: rtc_dualdiv > [ 0.380718] clk: Disabled unused clock: rtc_duandiv_in Those could be used by low power stuff aswell, not only RTC > [ 0.381377] clk: Unprepared unused clock: a73_div16 > [ 0.381972] clk: Unprepared unused clock: cpu_div16 Those should probably be left enabled if they're used by the DVFS code > [ 0.382605] clk: Unprepared unused clock: f50m > [ 0.383174] clk: Unprepared unused clock: fixed_pll_dco > [ 0.383786] clk: Unprepared unused clock: hdmi_pll_osc > [ 0.384416] clk: Unprepared unused clock: sys1_pll_osc > [ 0.385056] clk: Unprepared unused clock: earc_osc > [ 0.385652] clk: Unprepared unused clock: pcie_refclk_osc > [ 0.386323] clk: Unprepared unused clock: eth_pll_osc > [ 0.386961] clk: Unprepared unused clock: pcie_osc > [ 0.387548] clk: Unprepared unused clock: mclk_pll_osc > [ 0.388187] clk: Unprepared unused clock: usb_pll1_osc > [ 0.388826] clk: Unprepared unused clock: usb_pll0_osc > [ 0.389465] clk: Unprepared unused clock: tcon_pll_osc > [ 0.390105] clk: Unprepared unused clock: top_pll_osc > [ 0.390738] clk: Unprepared unused clock: aud_pll_osc > [ 0.391361] clk: Unprepared unused clock: ddr_pll_osc > > I am not forcing any clock to be disabled; I am forcing all clocks to stay on and letting them be disabled if unused one by one. > > Any guidance or hints on required platform clocks would be greatly appreciated. It's hard to say, this is dependent on each family, Amlogic should be able to help here. You list some clocks, but I don't understand you say that it's stable only if you have clk_ignore_unused, so how did you get this clock list ? Neil > > Thanks, > Lucas Tanure ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 2026-08-26 9:02 ` Neil Armstrong @ 2026-08-26 9:57 ` Lucas Tanure 0 siblings, 0 replies; 8+ messages in thread From: Lucas Tanure @ 2026-08-26 9:57 UTC (permalink / raw) To: Neil Armstrong, Jerome Brunet, Michael Turquette, Stephen Boyd, Kevin Hilman, Jian Hu Cc: Brian Masney, Martin Blumenstingl, linux-amlogic, linux-clk, linux-arm-kernel, linux-kernel On 26/08/2026 10:02, Neil Armstrong wrote: > On 8/23/26 17:40, Lucas Tanure wrote: >> Hi, >> >> While testing mainline Linux on the Khadas VIM4 (Amlogic A311D2 / T7), >> I am hitting intermittent system instability, storage loss, and memory >> corruption during boot, unless I append clk_ignore_unused to the >> kernel command line. >> >> Because the failure is intermittent, I am running 100-reboot test >> campaigns to bisect the remaining clocks and isolate which clocks are >> critical and cannot be safely disabled. >> >> As testing takes significant time over serial console, I wanted to >> check if Amlogic or the maintainers could shed light on this: >> >> Are there specific T7 clocks or hardware domains that must remain >> critical/protected even without an explicit in-kernel consumer? >> >> Current clocks being disabled that don't kill the board on a test run: >> >> [ 0.380313] clk: Disabling unused clocks >> [ 0.380413] clk: Disabled unused clock: rtc_dualdiv >> [ 0.380718] clk: Disabled unused clock: rtc_duandiv_in > > Those could be used by low power stuff aswell, not only RTC > >> [ 0.381377] clk: Unprepared unused clock: a73_div16 >> [ 0.381972] clk: Unprepared unused clock: cpu_div16 > > Those should probably be left enabled if they're used by the DVFS code > >> [ 0.382605] clk: Unprepared unused clock: f50m >> [ 0.383174] clk: Unprepared unused clock: fixed_pll_dco >> [ 0.383786] clk: Unprepared unused clock: hdmi_pll_osc >> [ 0.384416] clk: Unprepared unused clock: sys1_pll_osc >> [ 0.385056] clk: Unprepared unused clock: earc_osc >> [ 0.385652] clk: Unprepared unused clock: pcie_refclk_osc >> [ 0.386323] clk: Unprepared unused clock: eth_pll_osc >> [ 0.386961] clk: Unprepared unused clock: pcie_osc >> [ 0.387548] clk: Unprepared unused clock: mclk_pll_osc >> [ 0.388187] clk: Unprepared unused clock: usb_pll1_osc >> [ 0.388826] clk: Unprepared unused clock: usb_pll0_osc >> [ 0.389465] clk: Unprepared unused clock: tcon_pll_osc >> [ 0.390105] clk: Unprepared unused clock: top_pll_osc >> [ 0.390738] clk: Unprepared unused clock: aud_pll_osc >> [ 0.391361] clk: Unprepared unused clock: ddr_pll_osc >> >> I am not forcing any clock to be disabled; I am forcing all clocks to >> stay on and letting them be disabled if unused one by one. >> >> Any guidance or hints on required platform clocks would be greatly >> appreciated. > > It's hard to say, this is dependent on each family, Amlogic should be > able to help here. Yes, Amlogic, please help.> > You list some clocks, but I don't understand you say that it's stable > only if you have clk_ignore_unused, so how did you get this clock list ? I got this list when I add logs to the clock framework and run without clk_ignore_unused. > > Neil > >> >> Thanks, >> Lucas Tanure > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-08-26 20:04 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-23 15:40 [RFC] clk: meson: t7: Intermittent boot instability and memory corruption on VIM4 Lucas Tanure 2026-08-24 15:29 ` Brian Masney 2026-08-26 9:55 ` Lucas Tanure 2026-08-26 16:42 ` Lucas Tanure 2026-08-26 17:17 ` Brian Masney 2026-08-26 20:04 ` Lucas Tanure 2026-08-26 9:02 ` Neil Armstrong 2026-08-26 9:57 ` Lucas Tanure
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox