From 0e7a6ec9ab021379078a5dff62355b2daac5093d Mon Sep 17 00:00:00 2001 From: Aurelien Jarno Date: Sun, 20 Jan 2019 21:14:08 +0100 Subject: [PATCH] boards: mimxrt1020_evk: Enable mcux ethernet driver and pins Enables the mcux ethernet driver and pin muxes on the mimxrt1020_evk board, the same way it is done on the mimxrt1050_evk board. Updates the board documentation and yaml supported list accordingly. Signed-off-by: Aurelien Jarno --- boards/arm/mimxrt1020_evk/Kconfig.defconfig | 10 +++ .../arm/mimxrt1020_evk/doc/mimxrt1020_evk.rst | 26 ++++++++ boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts | 8 +++ boards/arm/mimxrt1020_evk/pinmux.c | 61 +++++++++++++++++++ .../nxp_imx/rt/Kconfig.defconfig.mimxrt1021 | 7 +++ 5 files changed, 112 insertions(+) diff --git a/boards/arm/mimxrt1020_evk/Kconfig.defconfig b/boards/arm/mimxrt1020_evk/Kconfig.defconfig index 6038e1de905..fa3be6ed136 100644 --- a/boards/arm/mimxrt1020_evk/Kconfig.defconfig +++ b/boards/arm/mimxrt1020_evk/Kconfig.defconfig @@ -30,4 +30,14 @@ config UART_MCUX_LPUART_2 endif # UART_MCUX_LPUART +if NETWORKING + +config NET_L2_ETHERNET + def_bool y + +config ETH_MCUX_0 + def_bool y if NET_L2_ETHERNET + +endif # NETWORKING + endif # BOARD_MIMXRT1020_EVK diff --git a/boards/arm/mimxrt1020_evk/doc/mimxrt1020_evk.rst b/boards/arm/mimxrt1020_evk/doc/mimxrt1020_evk.rst index de84b20c5a4..103aa50a082 100644 --- a/boards/arm/mimxrt1020_evk/doc/mimxrt1020_evk.rst +++ b/boards/arm/mimxrt1020_evk/doc/mimxrt1020_evk.rst @@ -78,6 +78,8 @@ features: | UART | on-chip | serial port-polling; | | | | serial port-interrupt | +-----------+------------+-------------------------------------+ +| ENET | on-chip | ethernet | ++-----------+------------+-------------------------------------+ The default configuration can be found in the defconfig file: ``boards/arm/mimxrt1020_evk/mimxrt1020_evk_defconfig`` @@ -104,6 +106,30 @@ The MIMXRT1020 SoC has five pairs of pinmux/gpio controllers. +---------------+-----------------+---------------------------+ | WAKEUP | GPIO | SW0 | +---------------+-----------------+---------------------------+ +| GPIO_AD_B0_04 | ENET_RST | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_08 | ENET_REF_CLK | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_09 | ENET_RX_DATA01 | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_10 | ENET_RX_DATA00 | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_11 | ENET_RX_EN | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_12 | ENET_RX_ER | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_13 | ENET_TX_EN | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_14 | ENET_TX_DATA00 | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B0_15 | ENET_TX_DATA01 | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_AD_B1_06 | ENET_INT | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_EMC_41 | ENET_MDC | Ethernet | ++---------------+-----------------+---------------------------+ +| GPIO_EMC_40 | ENET_MDIO | Ethernet | ++---------------+-----------------+---------------------------+ System Clock ============ diff --git a/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts b/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts index 0181951e814..0dad88a0eed 100644 --- a/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts +++ b/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts @@ -21,6 +21,7 @@ uart-1 = &uart1; led0 = &green_led; sw0 = &user_button; + eth = ð }; chosen { @@ -72,3 +73,10 @@ arduino_serial: &uart2 {}; status = "ok"; current-speed = <115200>; }; + +ð { + status = "ok"; + ptp { + status = "ok"; + }; +}; diff --git a/boards/arm/mimxrt1020_evk/pinmux.c b/boards/arm/mimxrt1020_evk/pinmux.c index b743ef5b514..1afd3c4e4d5 100644 --- a/boards/arm/mimxrt1020_evk/pinmux.c +++ b/boards/arm/mimxrt1020_evk/pinmux.c @@ -6,6 +6,15 @@ #include #include +#include + +#ifdef CONFIG_ETH_MCUX_0 +static gpio_pin_config_t enet_gpio_config = { + .direction = kGPIO_DigitalOutput, + .outputLogic = 0, + .interruptMode = kGPIO_NoIntmode +}; +#endif static int mimxrt1020_evk_init(struct device *dev) { @@ -57,7 +66,59 @@ static int mimxrt1020_evk_init(struct device *dev) IOMUXC_SW_PAD_CTL_PAD_DSE(6)); #endif +#ifdef CONFIG_ETH_MCUX_0 + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_04_GPIO1_IO04, 0U); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_06_GPIO1_IO22, 0U); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_10_ENET_RDATA00, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_09_ENET_RDATA01, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_11_ENET_RX_EN, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_14_ENET_TDATA00, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_15_ENET_TDATA01, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_13_ENET_TX_EN, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_08_ENET_REF_CLK1, 1); + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_12_ENET_RX_ER, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_41_ENET_MDC, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_40_ENET_MDIO, 0); + + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_04_GPIO1_IO04, 0xB0A9u); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_06_GPIO1_IO22, 0xB0A9u); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_10_ENET_RDATA00, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_09_ENET_RDATA01, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_11_ENET_RX_EN, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_14_ENET_TDATA00, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_15_ENET_TDATA01, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_13_ENET_TX_EN, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_08_ENET_REF_CLK1, 0x31); + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_12_ENET_RX_ER, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_41_ENET_MDC, 0xB0E9); + IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_40_ENET_MDIO, 0xB829); + + IOMUXC_EnableMode(IOMUXC_GPR, kIOMUXC_GPR_ENET1TxClkOutputDir, true); + + /* Initialize ENET_INT GPIO */ + GPIO_PinInit(GPIO1, 4, &enet_gpio_config); + GPIO_PinInit(GPIO1, 22, &enet_gpio_config); + + /* pull up the ENET_INT before RESET. */ + GPIO_WritePinOutput(GPIO1, 22, 1); + GPIO_WritePinOutput(GPIO1, 4, 0); +#endif + return 0; } +#ifdef CONFIG_ETH_MCUX_0 +static int mimxrt1020_evk_phy_reset(struct device *dev) +{ + /* RESET PHY chip. */ + k_busy_wait(10*USEC_PER_MSEC); + GPIO_WritePinOutput(GPIO1, 4, 1); + + return 0; +} +#endif + SYS_INIT(mimxrt1020_evk_init, PRE_KERNEL_1, 0); +#ifdef CONFIG_ETH_MCUX_0 +SYS_INIT(mimxrt1020_evk_phy_reset, PRE_KERNEL_2, 0); +#endif diff --git a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 index e5875ccf1cc..60b62e763a8 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 +++ b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 @@ -58,4 +58,11 @@ config ENTROPY_MCUX_TRNG endif # ENTROPY_GENERATOR +if NET_L2_ETHERNET + +config ETH_MCUX + def_bool y + +endif # NET_L2_ETHERNET + endif # SOC_MIMXRT1021