board: rockchip: unblock CAN bus in spl_board_init on Jaguar
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.unterwurzacher@cherry.de> Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
committed by
Kever Yang
parent
a979380123
commit
de0c91e7a7
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user