
Hi Simon,
On 05/20/2017 10:29 AM, Simon Glass wrote:
Hi Kever,
On 16 May 2017 at 21:44, Kever Yang kever.yang@rock-chips.com wrote:
In rk3328, some function pin may have more than one choice, and muxed with more than one IO, for example, the UART2 controller IO, TX and RX, have 3 choice(setting in com_iomux):
- M0 which mux with GPIO1A0/GPIO1A1
- M1 which mux with GPIO2A0/GPIO2A1
- usb2phy which mux with USB2.0 DP/DM pin.
We should set these IO routing in board file.
Signed-off-by: Kever Yang kever.yang@rock-chips.com
board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c b/board/rockchip/evb_rk3328/evb-rk3328.c index a7895cb..d9dc782 100644 --- a/board/rockchip/evb_rk3328/evb-rk3328.c +++ b/board/rockchip/evb_rk3328/evb-rk3328.c @@ -5,7 +5,10 @@ */
#include <common.h> +#include <asm/arch/hardware.h> +#include <asm/arch/grf_rk3328.h> #include <asm/armv8/mmu.h> +#include <asm/io.h> #include <dwc3-uboot.h> #include <usb.h>
@@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
int board_init(void) { +#define GRF_BASE 0xff100000
struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
/* uart2 select m1, sdcard select m1*/
rk_clrsetreg(&grf->com_iomux,
IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
}return 0;
This needs to be done via a call to some sort of driver. The above hack is OK in SPL but not in U-Boot proper.
Yes, SPL also needs this. I thinks here should be the right place before there is a SPL for rk3328.
See my comments elsewhere about using a misc driver with an IOCTL interface to do this sort of thing. Although here I wonder why you cannot use pinctrl?
This is different from traditional pinctrl, kernel also still not have final solution on this, see [0], and some people think it should be done in boot loader.
Thanks, - Kever [0] http://lists.infradead.org/pipermail/linux-rockchip/2016-August/011209.html
Regards, Simon