On 2025/6/17 16:42, Jakob Unterwurzacher wrote:
GPIO0_B7 is routed to TXI of the on-board CAN transceiver. The
line has a pull-down per SoC default.

This means the CAN transceiver transmits a dominant zero
and blocks the CAN bus until Linux boots and reconfigures the pin.

Let's switch to pull-up as soon as we can (i.e. in SPL).
This cuts down the "bus is blocked" time from 10 seconds to < 1 second.

Of course, to this needs CONFIG_SPL_BOARD_INIT, so enable it
the Jaguar defconfig.

Signed-off-by: Jakob Unterwurzacher <jakob.unterwurzac...@cherry.de>
Reviewed-by: Kever Yang <kever.y...@rock-chips.com>

Thanks,
- Kever
---
  .../jaguar_rk3588/jaguar_rk3588.c             | 19 +++++++++++++++++++
  configs/jaguar-rk3588_defconfig               |  1 +
  2 files changed, 20 insertions(+)

diff --git a/board/theobroma-systems/jaguar_rk3588/jaguar_rk3588.c 
b/board/theobroma-systems/jaguar_rk3588/jaguar_rk3588.c
index a6d44f10db3..3f484646701 100644
--- a/board/theobroma-systems/jaguar_rk3588/jaguar_rk3588.c
+++ b/board/theobroma-systems/jaguar_rk3588/jaguar_rk3588.c
@@ -51,3 +51,22 @@ int rockchip_early_misc_init_r(void)
return 0;
  }
+
+#define GPIO0B7_PU_EN BIT(15)
+
+void spl_board_init(void)
+{
+       /*
+        * GPIO0_B7 is routed to CAN TX. This SoC pin has a pull-down per 
default.
+        * So on power-up, we block the CAN bus with a dominant zero. We want 
to keep
+        * this blocking time to a minimum, so we want to get this pin high in 
SPL.
+        *
+        * The CAN driver in Linux disables the pull-down and sets the pin to
+        * output high. We don't have a CAN driver in U-Boot and don't need one,
+        * so we just use the easiest way to get the pin high, which is setting 
a
+        * pull-up.
+        */
+       struct rk3588_pmu2_ioc * const ioc = (void *)PMU2_IOC_BASE;
+
+       rk_setreg(&ioc->gpio0b_p, GPIO0B7_PU_EN);
+}
diff --git a/configs/jaguar-rk3588_defconfig b/configs/jaguar-rk3588_defconfig
index 03d38274b15..272f1ca8ded 100644
--- a/configs/jaguar-rk3588_defconfig
+++ b/configs/jaguar-rk3588_defconfig
@@ -27,6 +27,7 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588-jaguar.dtb"
  CONFIG_DISPLAY_BOARDINFO_LATE=y
  CONFIG_CYCLIC=y
  CONFIG_SPL_MAX_SIZE=0x40000
+CONFIG_SPL_BOARD_INIT=y
  # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
  CONFIG_SPL_ATF=y
  # CONFIG_BOOTM_NETBSD is not set

Reply via email to