1 /* 2 * Copyright 2024 NXP 3 * SPDX-License-Identifier: Apache-2.0 4 */ 5 6 #include <zephyr/devicetree.h> 7 #include <zephyr/platform/hooks.h> 8 #include <soc.h> 9 10 #if CONFIG_BOARD_EARLY_INIT_HOOK board_early_init_hook(void)11void board_early_init_hook(void) 12 { 13 #if defined(CONFIG_ETH_NXP_IMX_NETC) && (DT_CHILD_NUM_STATUS_OKAY(DT_NODELABEL(netc)) != 0) 14 /* RMII mode */ 15 BLK_CTRL_WAKEUPMIX->NETC_LINK_CFG[0] = BLK_CTRL_WAKEUPMIX_NETC_LINK_CFG_MII_PROT(1); 16 BLK_CTRL_WAKEUPMIX->NETC_LINK_CFG[4] = BLK_CTRL_WAKEUPMIX_NETC_LINK_CFG_MII_PROT(1); 17 /* RGMII mode */ 18 BLK_CTRL_WAKEUPMIX->NETC_LINK_CFG[1] = BLK_CTRL_WAKEUPMIX_NETC_LINK_CFG_MII_PROT(2); 19 BLK_CTRL_WAKEUPMIX->NETC_LINK_CFG[2] = BLK_CTRL_WAKEUPMIX_NETC_LINK_CFG_MII_PROT(2); 20 BLK_CTRL_WAKEUPMIX->NETC_LINK_CFG[3] = BLK_CTRL_WAKEUPMIX_NETC_LINK_CFG_MII_PROT(2); 21 22 /* Output reference clock for RMII */ 23 BLK_CTRL_WAKEUPMIX->NETC_PORT_MISC_CFG |= 24 BLK_CTRL_WAKEUPMIX_NETC_PORT_MISC_CFG_PORT4_RMII_REF_CLK_DIR_MASK | 25 BLK_CTRL_WAKEUPMIX_NETC_PORT_MISC_CFG_PORT0_RMII_REF_CLK_DIR_MASK; 26 27 /* Unlock the IERB. It will warm reset whole NETC. */ 28 NETC_PRIV->NETCRR &= ~NETC_PRIV_NETCRR_LOCK_MASK; 29 30 while ((NETC_PRIV->NETCRR & NETC_PRIV_NETCRR_LOCK_MASK) != 0U) { 31 } 32 33 /* Set the access attribute, otherwise MSIX access will be blocked. */ 34 NETC_IERB->ARRAY_NUM_RC[0].RCMSIAMQR &= ~(7U << 27); 35 NETC_IERB->ARRAY_NUM_RC[0].RCMSIAMQR |= (1U << 27); 36 37 /* Lock the IERB. */ 38 NETC_PRIV->NETCRR |= NETC_PRIV_NETCRR_LOCK_MASK; 39 while ((NETC_PRIV->NETCSR & NETC_PRIV_NETCSR_STATE_MASK) != 0U) { 40 } 41 #endif 42 } 43 #endif 44