Hi Jonas,

On 10/28/26 5:57 PM, Jonas Karlman wrote:
Hi Quentin,

On 10/28/2026 1:41 PM, Quentin Schulz wrote:
Hi Jonas,

On 10/16/26 12:42 AM, Jonas Karlman wrote:
The CLK_PCIE30PHY_REF_M and CLK_PCIE30PHY_REF_N clocks are by default
gated coming out from system reset. The probe() ops of the PMUCRU driver

Are they? I don't have an RK3568 board so cannot test this, but the TRM
says the bitfields are 0 at reset with "When high, disable clock", so I
am not sure what exactly this is for (except after a reboot where the
Linux kernel has disabled the PCIe clocks maybe?).

I guess the TRM is incorrect, because as I mention in my commit message
these clocks comes gated out from system reset, or I would never have
phrased the commit message as such.


Well, it could also be inferred from the fact Rockchip enabled it in the CRU driver unconditionally. So I wanted to make sure it was indeed checked rather than simply inferred. Thank you for the confirmation.

See below runtime log on a Radxa ROCK 3B (from power off state):

   DDR 5c7dbc4d49 kwin.chen 26/05/21-10:58:25,fwver: v1.26
   [...]
   out
   PRE: pmu_clkgate_con[2]=6000
   POST: pmu_clkgate_con[2]=6000
U-Boot SPL 2027.01-rc1-00097-gec7e6bacaadc-dirty (Oct 28 2026 - 16:35:51 +0000)
   Trying to boot from RAM
   [...]
   U-Boot 2027.01-rc1-00097-gec7e6bacaadc-dirty (Oct 28 2026 - 16:35:51 +0000)
Model: Radxa ROCK 3B
   SoC:   RK3568
   DRAM:  8 GiB (total 7.7 GiB)
   PRE: pmu_clkgate_con[2]=6000
   POST: pmu_clkgate_con[2]=0

Using following code in probe() ops:

        printf("PRE: pmu_clkgate_con[2]=%x\n", 
readl(&priv->pmucru->pmu_clkgate_con[2]));

        /* Ungate PCIe30phy refclk_m and refclk_n */
        if (CONFIG_IS_ENABLED(PCI))
                rk_clrreg(&priv->pmucru->pmu_clkgate_con[2], 0x3 << 13);

        printf("POST: pmu_clkgate_con[2]=%x\n", 
readl(&priv->pmucru->pmu_clkgate_con[2]));

I guess theoretically it could be the DDR init blob that gates the
refclks, however running bare minimal TPL on same board show same:

   U-Boot TPL 2026.10-01297-g83bfcb8d6e91-dirty (Oct 28 2026 - 16:45:25)
   x0: 00000000 fdcc0098
   x1: 00000000 00000008
   x2: 00000000 fdcc1000
   x3: 00000000 00000006
   x4: 00000000 00000050
   x5: 00000000 00000000
   x6: 00000000 00020002
   sp: 00000000 fdcc0f30
   BOOTSOURCE_ID fdcc0010: 0000000a
   PMU_CRU fdd00000: 00004064
   PMU_CRU fdd00004: 000014c1
   PMU_CRU fdd0000c: 00000007
   PMU_CRU fdd00010: 00007f00
   PMU_CRU fdd00040: 00002063
   PMU_CRU fdd00044: 00001481
   PMU_CRU fdd0004c: 00000007
   PMU_CRU fdd00050: 00007f00
   PMU_CRU fdd00100: 00000080
   PMU_CRU fdd00108: 00000001
   PMU_CRU fdd0010c: 00000001
   PMU_CRU fdd00110: 00000800
   PMU_CRU fdd00118: 00000001
   PMU_CRU fdd0011c: 00000009
   PMU_CRU fdd00120: 0000050f
   PMU_CRU fdd00124: 00008bbb
   PMU_CRU fdd00188: 00006000  (pmu_clkgate_con[2])
   PMU_CRU fdd00240: 00040020
   DRAM init failed

Above should hopefully make it clear that the reset value in TRM is
likely incorrect ;-)


Wouldn't be the first nor the last time this happens :)


unconditionally ungate these clocks to help ensure PCIe works in U-Boot
proper.

Change to only ungate these clocks when the PCI Kconfig option is
enabled for current boot phase to delay the ungate as late as possible.

Signed-off-by: Jonas Karlman <[email protected]>
---
Changes in v3:
- New optional patch to help delay the ungate of PCIe ref clocks until
    U-Boot proper

This patch is strictly not needed, however it seems very unnecessary to
ungate PCIe ref clocks in SPL when PCIe typically only is used in proper.


Considering the kernel seems (I had a cursory look) to be able to
control those clocks and have them handled via the pcie node, it seems
fine to me to possibly not have the clock enabled by U-Boot (e.g. with
U-Boot proper or xPL not enabling PCI).

So, I'm fine with the content of the patch, not the commit log. Can you
please confirm that they are indeed not at 0 when reset (and/or that we
do this to be safe when doing reboots) and rework the commit log?

As mentioned above, the commit message has been correct from start, so
please be explicit about what you think is unclear and needs to change.


You could have just said that it doesn't match the TRM, that would have told me that it was checked IRL.

I can reword the first sentence to

The CLK_PCIE30PHY_REF_M and CLK_PCIE30PHY_REF_N clocks are by default
gated coming out from system reset unlike stated in the TRM.

when applying, does that work for you?

Reviewed-by: Quentin Schulz <[email protected]>

Thanks!
Quentin

Reply via email to