Module Name: src Committed By: ryo Date: Fri Jun 9 18:14:59 UTC 2017
Modified Files: src/etc/etc.evbarm: Makefile.inc src/sys/arch/arm/imx: if_enet.c if_enet_imx6.c if_enet_imx7.c if_enetreg.h if_enetvar.h imx6_ahcisata.c imx6_board.c imx6_ccm.c imx6_ccmreg.h imx6_gpio.c imx6_intr.h imx6_iomuxreg.h imx6_pcie.c imx6_reg.h imx6_uart.c imx6_usdhc.c imx6_wdog.c imx6var.h src/sys/arch/evbarm/nitrogen6: nitrogen6_iomux.c nitrogen6_start.S Added Files: src/sys/arch/evbarm/conf: IMX6UL-STARTER IMX6UL-STARTER_INSTALL mk.imx6ul std.imx6ul Log Message: add support for i.MX6UltraLite, and ConnectCore for iMX6UL Starter Board. To generate a diff of this commit: cvs rdiff -u -r1.81 -r1.82 src/etc/etc.evbarm/Makefile.inc cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/imx/if_enet.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/imx/if_enet_imx6.c \ src/sys/arch/arm/imx/if_enetreg.h src/sys/arch/arm/imx/imx6_pcie.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/imx/if_enet_imx7.c \ src/sys/arch/arm/imx/if_enetvar.h src/sys/arch/arm/imx/imx6_gpio.c \ src/sys/arch/arm/imx/imx6_uart.c src/sys/arch/arm/imx/imx6_wdog.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/imx/imx6_ahcisata.c \ src/sys/arch/arm/imx/imx6_ccmreg.h cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/imx/imx6_board.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/imx/imx6_ccm.c \ src/sys/arch/arm/imx/imx6_reg.h src/sys/arch/arm/imx/imx6var.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/imx/imx6_intr.h \ src/sys/arch/arm/imx/imx6_iomuxreg.h src/sys/arch/arm/imx/imx6_usdhc.c cvs rdiff -u -r0 -r1.1 src/sys/arch/evbarm/conf/IMX6UL-STARTER \ src/sys/arch/evbarm/conf/IMX6UL-STARTER_INSTALL \ src/sys/arch/evbarm/conf/mk.imx6ul src/sys/arch/evbarm/conf/std.imx6ul cvs rdiff -u -r1.3 -r1.4 src/sys/arch/evbarm/nitrogen6/nitrogen6_iomux.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/evbarm/nitrogen6/nitrogen6_start.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/etc/etc.evbarm/Makefile.inc diff -u src/etc/etc.evbarm/Makefile.inc:1.81 src/etc/etc.evbarm/Makefile.inc:1.82 --- src/etc/etc.evbarm/Makefile.inc:1.81 Sat Jan 7 16:29:04 2017 +++ src/etc/etc.evbarm/Makefile.inc Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.81 2017/01/07 16:29:04 kiyohara Exp $ +# $NetBSD: Makefile.inc,v 1.82 2017/06/09 18:14:59 ryo Exp $ # # etc.evbarm/Makefile.inc -- evbarm-specific etc Makefile targets # @@ -105,6 +105,8 @@ EVBARM_BOARDS.armv7hf+= CUBOX-I EVBARM_BOARDS.armv7+= HUMMINGBIRD_A31 EVBARM_BOARDS.armv7hf+= HUMMINGBIRD_A31 #EVBARM_BOARDS.armv7+= IGEPV2 +EVBARM_BOARDS.armv7+= IMX6UL-STARTER +EVBARM_BOARDS.armv7hf+= IMX6UL-STARTER EVBARM_BOARDS.armv7+= TEGRA EVBARM_BOARDS.armv7hf+= TEGRA EVBARM_BOARDS.armv7+= ARMADILLO-IOT-G3 Index: src/sys/arch/arm/imx/if_enet.c diff -u src/sys/arch/arm/imx/if_enet.c:1.10 src/sys/arch/arm/imx/if_enet.c:1.11 --- src/sys/arch/arm/imx/if_enet.c:1.10 Thu Dec 15 09:28:02 2016 +++ src/sys/arch/arm/imx/if_enet.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_enet.c,v 1.10 2016/12/15 09:28:02 ozaki-r Exp $ */ +/* $NetBSD: if_enet.c,v 1.11 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_enet.c,v 1.10 2016/12/15 09:28:02 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_enet.c,v 1.11 2017/06/09 18:14:59 ryo Exp $"); #include "vlan.h" @@ -92,8 +92,10 @@ int enet_debug = 0; #define ENET_MAX_PKT_NSEGS 64 -#define ENET_TX_NEXTIDX(idx) (((idx) >= (ENET_TX_RING_CNT - 1)) ? 0 : ((idx) + 1)) -#define ENET_RX_NEXTIDX(idx) (((idx) >= (ENET_RX_RING_CNT - 1)) ? 0 : ((idx) + 1)) +#define ENET_TX_NEXTIDX(idx) \ + (((idx) >= (ENET_TX_RING_CNT - 1)) ? 0 : ((idx) + 1)) +#define ENET_RX_NEXTIDX(idx) \ + (((idx) >= (ENET_RX_RING_CNT - 1)) ? 0 : ((idx) + 1)) #define TXDESC_WRITEOUT(idx) \ bus_dmamap_sync(sc->sc_dmat, sc->sc_txdesc_dmamap, \ @@ -234,13 +236,15 @@ enet_attach_common(device_t self, bus_sp /* i.MX7 use 3 interrupts */ if ((sc->sc_ih2 = intr_establish(irq + 1, IPL_NET, IST_LEVEL, enet_intr, sc)) == NULL) { - aprint_error_dev(self, "unable to establish 2nd interrupt\n"); + aprint_error_dev(self, + "unable to establish 2nd interrupt\n"); intr_disestablish(sc->sc_ih); goto failure; } if ((sc->sc_ih3 = intr_establish(irq + 2, IPL_NET, IST_LEVEL, enet_intr, sc)) == NULL) { - aprint_error_dev(self, "unable to establish 3rd interrupt\n"); + aprint_error_dev(self, + "unable to establish 3rd interrupt\n"); intr_disestablish(sc->sc_ih2); intr_disestablish(sc->sc_ih); goto failure; @@ -1030,8 +1034,8 @@ enet_ioctl(struct ifnet *ifp, u_long com ENET_REG_WRITE(sc, ENET_FTRL, v); v = ENET_REG_READ(sc, ENET_RCR); v &= ~ENET_RCR_MAX_FL(0x3fff); - v |= ENET_RCR_MAX_FL(ifp->if_mtu + - ETHER_HDR_LEN + ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN); + v |= ENET_RCR_MAX_FL(ifp->if_mtu + ETHER_HDR_LEN + + ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN); ENET_REG_WRITE(sc, ENET_RCR, v); } break; @@ -1187,6 +1191,7 @@ enet_miibus_statchg(struct ifnet *ifp) case IFM_AUTO: case IFM_1000_T: ecr |= ENET_ECR_SPEED; /* 1000Mbps mode */ + rcr &= ~ENET_RCR_RMII_10T; break; case IFM_100_TX: ecr &= ~ENET_ECR_SPEED; /* 100Mbps mode */ @@ -1203,6 +1208,9 @@ enet_miibus_statchg(struct ifnet *ifp) break; } + if (sc->sc_rgmii == 0) + ecr &= ~ENET_ECR_SPEED; + if (sc->sc_flowflags & IFM_FLOW) rcr |= ENET_RCR_FCE; else @@ -1227,7 +1235,7 @@ enet_init_txring(struct enet_softc *sc) /* build TX ring */ for (i = 0; i < ENET_TX_RING_CNT; i++) { - sc->sc_txdesc_ring[i].tx_flags1_len = + sc->sc_txdesc_ring[i].tx_flags1_len = ((i == (ENET_TX_RING_CNT - 1)) ? TXFLAGS1_W : 0); sc->sc_txdesc_ring[i].tx_databuf = 0; sc->sc_txdesc_ring[i].tx_flags2 = TXFLAGS2_INT; @@ -1298,7 +1306,7 @@ enet_alloc_rxbuf(struct enet_softc *sc, } bus_dmamap_sync(sc->sc_dmat, sc->sc_rxsoft[idx].rxs_dmamap, 0, - sc->sc_rxsoft[idx].rxs_dmamap->dm_mapsize, + sc->sc_rxsoft[idx].rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); sc->sc_rxsoft[idx].rxs_mbuf = m; @@ -1578,7 +1586,8 @@ enet_encap_mbufalign(struct mbuf **mp) ap = mt->m_dat; } ap = ALIGN_PTR(ap, ALIGNBYTE); - memcpy(ap, mt->m_data, mt->m_len); + memcpy(ap, mt->m_data, + mt->m_len); mt->m_data = ap; } @@ -1765,7 +1774,7 @@ enet_init_regs(struct enet_softc *sc, in struct ifmedia_entry *ife; paddr_t paddr; uint32_t val; - int fulldup, ecr_speed, rcr_speed, flowctrl; + int miimode, fulldup, ecr_speed, rcr_speed, flowctrl; if (init) { fulldup = 1; @@ -1799,6 +1808,9 @@ enet_init_regs(struct enet_softc *sc, in flowctrl = sc->sc_flowflags & IFM_FLOW; } + if (sc->sc_rgmii == 0) + ecr_speed = 0; + /* reset */ ENET_REG_WRITE(sc, ENET_ECR, ecr_speed | ENET_ECR_RESET); @@ -1846,9 +1858,14 @@ enet_init_regs(struct enet_softc *sc, in /* maximum frame size */ val = ENET_DEFAULT_PKT_LEN; ENET_REG_WRITE(sc, ENET_FTRL, val); /* Frame Truncation Length */ + + if (sc->sc_rgmii == 0) + miimode = ENET_RCR_RMII_MODE | ENET_RCR_MII_MODE; + else + miimode = ENET_RCR_RGMII_EN; ENET_REG_WRITE(sc, ENET_RCR, ENET_RCR_PADEN | /* RX frame padding remove */ - ENET_RCR_RGMII_EN | /* use RGMII */ + miimode | (flowctrl ? ENET_RCR_FCE : 0) | /* flow control enable */ rcr_speed | (fulldup ? 0 : ENET_RCR_DRT) | @@ -1880,7 +1897,7 @@ enet_init_regs(struct enet_softc *sc, in #if _BYTE_ORDER == _LITTLE_ENDIAN ENET_ECR_DBSWP | #endif - ENET_ECR_SPEED | /* default 1000Mbps mode */ + ecr_speed | ENET_ECR_EN1588 | /* use enhanced TX/RX descriptor */ ENET_ECR_ETHEREN); /* Ethernet Enable */ Index: src/sys/arch/arm/imx/if_enet_imx6.c diff -u src/sys/arch/arm/imx/if_enet_imx6.c:1.2 src/sys/arch/arm/imx/if_enet_imx6.c:1.3 --- src/sys/arch/arm/imx/if_enet_imx6.c:1.2 Thu Nov 24 03:59:36 2016 +++ src/sys/arch/arm/imx/if_enet_imx6.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_enet_imx6.c,v 1.2 2016/11/24 03:59:36 hkenken Exp $ */ +/* $NetBSD: if_enet_imx6.c,v 1.3 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_enet_imx6.c,v 1.2 2016/11/24 03:59:36 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_enet_imx6.c,v 1.3 2017/06/09 18:14:59 ryo Exp $"); #include "locators.h" #include "imxccm.h" @@ -41,6 +41,7 @@ __KERNEL_RCSID(0, "$NetBSD: if_enet_imx6 #include <arm/imx/imx6_reg.h> #include <arm/imx/imx6_ccmreg.h> #include <arm/imx/imx6_ccmvar.h> +#include <arm/imx/imx6_iomuxreg.h> #include <arm/imx/imx6_ocotpreg.h> #include <arm/imx/imx6_ocotpvar.h> #include <arm/imx/if_enetreg.h> @@ -56,6 +57,10 @@ enet_match(device_t parent __unused, str switch (aa->aa_addr) { case (IMX6_AIPS2_BASE + AIPS2_ENET_BASE): return 1; + case (IMX6_AIPS1_BASE + AIPS1_ENET2_BASE): + if (IMX6_CHIPID_MAJOR(imx6_chip_id()) == CHIPID_MAJOR_IMX6UL) + return 1; + break; } return 0; @@ -77,7 +82,19 @@ enet_attach(device_t parent, device_t se aa->aa_size = AIPS_ENET_SIZE; sc->sc_imxtype = 6; /* i.MX6 */ - sc->sc_unit = 0; + if (IMX6_CHIPID_MAJOR(imx6_chip_id()) == CHIPID_MAJOR_IMX6UL) + sc->sc_rgmii = 0; + else + sc->sc_rgmii = 1; + + switch (aa->aa_addr) { + case (IMX6_AIPS2_BASE + AIPS2_ENET_BASE): + sc->sc_unit = 0; + break; + case (IMX6_AIPS1_BASE + AIPS1_ENET2_BASE): + sc->sc_unit = 1; + break; + } #if NIMXOCOTP > 0 /* get mac-address from OCOTP */ @@ -88,18 +105,45 @@ enet_attach(device_t parent, device_t se sc->sc_enaddr[2] = eaddr >> 24; sc->sc_enaddr[3] = eaddr >> 16; sc->sc_enaddr[4] = eaddr >> 8; - sc->sc_enaddr[5] = eaddr; + sc->sc_enaddr[5] = eaddr + sc->sc_unit; #endif #if NIMXCCM > 0 /* PLL power up */ if (imx6_pll_power(CCM_ANALOG_PLL_ENET, 1, - CCM_ANALOG_PLL_ENET_ENABLE) != 0) { + CCM_ANALOG_PLL_ENET_ENABLE) != 0) { aprint_error_dev(sc->sc_dev, "couldn't enable CCM_ANALOG_PLL_ENET\n"); return; } + if (IMX6_CHIPID_MAJOR(imx6_chip_id()) == CHIPID_MAJOR_IMX6UL) { + uint32_t v; + + /* iMX6UL */ + if ((imx6_pll_power(CCM_ANALOG_PLL_ENET, 1, + CCM_ANALOG_PLL_ENET_ENET_25M_REF_EN) != 0) || + (imx6_pll_power(CCM_ANALOG_PLL_ENET, 1, + CCM_ANALOG_PLL_ENET_ENET2_125M_EN) != 0)) { + aprint_error_dev(sc->sc_dev, + "couldn't enable CCM_ANALOG_PLL_ENET\n"); + return; + } + + v = iomux_read(IMX6UL_IOMUX_GPR1); + switch (sc->sc_unit) { + case 0: + v |= IMX6UL_IOMUX_GPR1_ENET1_TX_CLK_DIR; + v &= ~IMX6UL_IOMUX_GPR1_ENET1_CLK_SEL; + break; + case 1: + v |= IMX6UL_IOMUX_GPR1_ENET2_TX_CLK_DIR; + v &= ~IMX6UL_IOMUX_GPR1_ENET2_CLK_SEL; + break; + } + iomux_write(IMX6UL_IOMUX_GPR1, v); + } + sc->sc_pllclock = imx6_get_clock(IMX6CLK_PLL6); #else sc->sc_pllclock = 50000000; Index: src/sys/arch/arm/imx/if_enetreg.h diff -u src/sys/arch/arm/imx/if_enetreg.h:1.2 src/sys/arch/arm/imx/if_enetreg.h:1.3 --- src/sys/arch/arm/imx/if_enetreg.h:1.2 Tue May 17 06:44:45 2016 +++ src/sys/arch/arm/imx/if_enetreg.h Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_enetreg.h,v 1.2 2016/05/17 06:44:45 ryo Exp $ */ +/* $NetBSD: if_enetreg.h,v 1.3 2017/06/09 18:14:59 ryo Exp $ */ /*- * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -118,10 +118,14 @@ # define ENET_RCR_PAUFWD __BIT(13) # define ENET_RCR_PADEN __BIT(12) # define ENET_RCR_RMII_10T __BIT(9) +# define ENET_RCR_RMII_MODE __BIT(8) # define ENET_RCR_RGMII_EN __BIT(6) # define ENET_RCR_FCE __BIT(5) +# define ENET_RCR_BC_REJ __BIT(4) # define ENET_RCR_PROM __BIT(3) +# define ENET_RCR_MII_MODE __BIT(2) # define ENET_RCR_DRT __BIT(1) +# define ENET_RCR_LOOP __BIT(0) #define ENET_TCR 0x000000c4 # define ENET_TCR_FDEN __BIT(2) Index: src/sys/arch/arm/imx/imx6_pcie.c diff -u src/sys/arch/arm/imx/imx6_pcie.c:1.2 src/sys/arch/arm/imx/imx6_pcie.c:1.3 --- src/sys/arch/arm/imx/imx6_pcie.c:1.2 Fri Nov 25 05:03:36 2016 +++ src/sys/arch/arm/imx/imx6_pcie.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_pcie.c,v 1.2 2016/11/25 05:03:36 hkenken Exp $ */ +/* $NetBSD: imx6_pcie.c,v 1.3 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2016 Genetec Corporation. All rights reserved. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx6_pcie.c,v 1.2 2016/11/25 05:03:36 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx6_pcie.c,v 1.3 2017/06/09 18:14:59 ryo Exp $"); #include "opt_pci.h" @@ -519,9 +519,10 @@ imx6pcie_match(device_t parent, cfdata_t { struct axi_attach_args * const aa = aux; - /* i.MX6 SoloLite has no PCIe controller */ + /* i.MX6 SoloLite/UltraLight has no PCIe controller */ switch (IMX6_CHIPID_MAJOR(imx6_chip_id())) { case CHIPID_MAJOR_IMX6SL: + case CHIPID_MAJOR_IMX6UL: return 0; default: break; Index: src/sys/arch/arm/imx/if_enet_imx7.c diff -u src/sys/arch/arm/imx/if_enet_imx7.c:1.1 src/sys/arch/arm/imx/if_enet_imx7.c:1.2 --- src/sys/arch/arm/imx/if_enet_imx7.c:1.1 Tue May 17 06:44:45 2016 +++ src/sys/arch/arm/imx/if_enet_imx7.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_enet_imx7.c,v 1.1 2016/05/17 06:44:45 ryo Exp $ */ +/* $NetBSD: if_enet_imx7.c,v 1.2 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_enet_imx7.c,v 1.1 2016/05/17 06:44:45 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_enet_imx7.c,v 1.2 2017/06/09 18:14:59 ryo Exp $"); #include "locators.h" #include "imxccm.h" @@ -79,6 +79,7 @@ enet_attach(device_t parent, device_t se aa->aa_size = AIPS_ENET_SIZE; sc->sc_imxtype = 7; /* i.MX7 */ + sc->sc_rgmii = 1; #if NIMXCCM > 0 /* PLL power up */ Index: src/sys/arch/arm/imx/if_enetvar.h diff -u src/sys/arch/arm/imx/if_enetvar.h:1.1 src/sys/arch/arm/imx/if_enetvar.h:1.2 --- src/sys/arch/arm/imx/if_enetvar.h:1.1 Tue May 17 06:44:45 2016 +++ src/sys/arch/arm/imx/if_enetvar.h Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_enetvar.h,v 1.1 2016/05/17 06:44:45 ryo Exp $ */ +/* $NetBSD: if_enetvar.h,v 1.2 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -58,6 +58,7 @@ struct enet_softc { int sc_unit; int sc_imxtype; + int sc_rgmii; unsigned int sc_pllclock; /* interrupts */ Index: src/sys/arch/arm/imx/imx6_gpio.c diff -u src/sys/arch/arm/imx/imx6_gpio.c:1.1 src/sys/arch/arm/imx/imx6_gpio.c:1.2 --- src/sys/arch/arm/imx/imx6_gpio.c:1.1 Thu Sep 25 05:05:28 2014 +++ src/sys/arch/arm/imx/imx6_gpio.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_gpio.c,v 1.1 2014/09/25 05:05:28 ryo Exp $ */ +/* $NetBSD: imx6_gpio.c,v 1.2 2017/06/09 18:14:59 ryo Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx6_gpio.c,v 1.1 2014/09/25 05:05:28 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx6_gpio.c,v 1.2 2017/06/09 18:14:59 ryo Exp $"); #include "opt_imx.h" @@ -73,9 +73,13 @@ imxgpio_match(device_t parent, cfdata_t case IMX6_AIPS1_BASE + AIPS1_GPIO3_BASE: case IMX6_AIPS1_BASE + AIPS1_GPIO4_BASE: case IMX6_AIPS1_BASE + AIPS1_GPIO5_BASE: + return 1; case IMX6_AIPS1_BASE + AIPS1_GPIO6_BASE: case IMX6_AIPS1_BASE + AIPS1_GPIO7_BASE: - return 1; + /* iMX6UL does not have GPIO7 */ + if (IMX6_CHIPID_MAJOR(imx6_chip_id()) != CHIPID_MAJOR_IMX6UL) + return 1; + break; } return 0; Index: src/sys/arch/arm/imx/imx6_uart.c diff -u src/sys/arch/arm/imx/imx6_uart.c:1.1 src/sys/arch/arm/imx/imx6_uart.c:1.2 --- src/sys/arch/arm/imx/imx6_uart.c:1.1 Thu Sep 25 05:05:28 2014 +++ src/sys/arch/arm/imx/imx6_uart.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_uart.c,v 1.1 2014/09/25 05:05:28 ryo Exp $ */ +/* $NetBSD: imx6_uart.c,v 1.2 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2013 Genetec Corporation. All rights reserved. @@ -47,6 +47,11 @@ imxuart_match(device_t parent, struct cf case (IMX6_AIPS2_BASE + AIPS2_UART4_BASE): case (IMX6_AIPS2_BASE + AIPS2_UART5_BASE): return 1; + case (IMX6_AIPS2_BASE + AIPS2_UART6_BASE): + case (IMX6_AIPS1_BASE + AIPS1_UART7_BASE): + if (IMX6_CHIPID_MAJOR(imx6_chip_id()) == CHIPID_MAJOR_IMX6UL) + return 1; + break; } return 0; Index: src/sys/arch/arm/imx/imx6_wdog.c diff -u src/sys/arch/arm/imx/imx6_wdog.c:1.1 src/sys/arch/arm/imx/imx6_wdog.c:1.2 --- src/sys/arch/arm/imx/imx6_wdog.c:1.1 Thu Sep 25 05:05:28 2014 +++ src/sys/arch/arm/imx/imx6_wdog.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_wdog.c,v 1.1 2014/09/25 05:05:28 ryo Exp $ */ +/* $NetBSD: imx6_wdog.c,v 1.2 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2010 Genetec Corporation. All rights reserved. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx6_wdog.c,v 1.1 2014/09/25 05:05:28 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx6_wdog.c,v 1.2 2017/06/09 18:14:59 ryo Exp $"); #include "opt_imx.h" @@ -48,9 +48,13 @@ wdog_match(device_t parent, struct cfdat case IMX6_AIPS1_BASE + AIPS1_WDOG1_BASE: case IMX6_AIPS1_BASE + AIPS1_WDOG2_BASE: return 1; + case IMX6_AIPS2_BASE + AIPS2_WDOG3_BASE: + if (IMX6_CHIPID_MAJOR(imx6_chip_id()) == CHIPID_MAJOR_IMX6UL) + return 1; + break; } - return (0); + return 0; } void Index: src/sys/arch/arm/imx/imx6_ahcisata.c diff -u src/sys/arch/arm/imx/imx6_ahcisata.c:1.4 src/sys/arch/arm/imx/imx6_ahcisata.c:1.5 --- src/sys/arch/arm/imx/imx6_ahcisata.c:1.4 Thu Nov 24 03:59:36 2016 +++ src/sys/arch/arm/imx/imx6_ahcisata.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_ahcisata.c,v 1.4 2016/11/24 03:59:36 hkenken Exp $ */ +/* $NetBSD: imx6_ahcisata.c,v 1.5 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx6_ahcisata.c,v 1.4 2016/11/24 03:59:36 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx6_ahcisata.c,v 1.5 2017/06/09 18:14:59 ryo Exp $"); #include "locators.h" #include "opt_imx.h" @@ -81,6 +81,7 @@ imx6_ahcisata_match(device_t parent, cfd case CHIPID_MAJOR_IMX6SL: case CHIPID_MAJOR_IMX6DL: case CHIPID_MAJOR_IMX6SOLO: + case CHIPID_MAJOR_IMX6UL: return 0; default: break; Index: src/sys/arch/arm/imx/imx6_ccmreg.h diff -u src/sys/arch/arm/imx/imx6_ccmreg.h:1.4 src/sys/arch/arm/imx/imx6_ccmreg.h:1.5 --- src/sys/arch/arm/imx/imx6_ccmreg.h:1.4 Thu Nov 24 03:59:36 2016 +++ src/sys/arch/arm/imx/imx6_ccmreg.h Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_ccmreg.h,v 1.4 2016/11/24 03:59:36 hkenken Exp $ */ +/* $NetBSD: imx6_ccmreg.h,v 1.5 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -247,15 +247,20 @@ #define CCM_ANALOG_PLL_ENET_CLR 0x000040e8 #define CCM_ANALOG_PLL_ENET_TOG 0x000040ec #define CCM_ANALOG_PLL_ENET_LOCK __BIT(31) +#define CCM_ANALOG_PLL_ENET_ENET_25M_REF_EN __BIT(21) /* iMX6UL */ +#define CCM_ANALOG_PLL_ENET_ENET2_125M_EN __BIT(20) /* iMX6UL */ #define CCM_ANALOG_PLL_ENET_ENABLE_100M __BIT(20) /* SATA */ #define CCM_ANALOG_PLL_ENET_ENABLE_125M __BIT(19) /* PCIe */ #define CCM_ANALOG_PLL_ENET_PFD_OFFSET_EN __BIT(18) #define CCM_ANALOG_PLL_ENET_BYPASS __BIT(16) #define CCM_ANALOG_PLL_ENET_BYPASS_CLK_SRC(s) __SHIFTIN(s, __BITS(15, 14)) +#define CCM_ANALOG_PLL_ENET_ENET1_125M_EN __BIT(13) /* iMX6UL */ #define CCM_ANALOG_PLL_ENET_ENABLE __BIT(13) /* Ether */ #define CCM_ANALOG_PLL_ENET_POWERDOWN __BIT(12) +#define CCM_ANALOG_PLL_ENET1_DIV_SELECT(d) __SHIFTIN(d, __BITS(2, 1)) +#define CCM_ANALOG_PLL_ENET1_DIV_SELECT_MASK __BITS(3, 2) #define CCM_ANALOG_PLL_ENET_DIV_SELECT(d) __SHIFTIN(d, __BITS(1, 0)) -#define CCM_ANALOG_PLL_ENET_DIV_SELECT_MASK __SHIFTIN(3, __BITS(1, 0)) +#define CCM_ANALOG_PLL_ENET_DIV_SELECT_MASK __BITS(1, 0) #define CCM_ANALOG_PFD_480 0x000040f0 #define CCM_ANALOG_PFD_480_SET 0x000040f4 #define CCM_ANALOG_PFD_480_CLR 0x000040f8 Index: src/sys/arch/arm/imx/imx6_board.c diff -u src/sys/arch/arm/imx/imx6_board.c:1.7 src/sys/arch/arm/imx/imx6_board.c:1.8 --- src/sys/arch/arm/imx/imx6_board.c:1.7 Thu Nov 24 08:41:20 2016 +++ src/sys/arch/arm/imx/imx6_board.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_board.c,v 1.7 2016/11/24 08:41:20 hkenken Exp $ */ +/* $NetBSD: imx6_board.c,v 1.8 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2012 Genetec Corporation. All rights reserved. @@ -27,10 +27,11 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: imx6_board.c,v 1.7 2016/11/24 08:41:20 hkenken Exp $"); +__KERNEL_RCSID(1, "$NetBSD: imx6_board.c,v 1.8 2017/06/09 18:14:59 ryo Exp $"); #include "opt_imx.h" #include "arml2cc.h" +#include "opt_cputypes.h" #include <sys/param.h> #include <sys/bus.h> @@ -223,6 +224,14 @@ imx6_device_register(device_t self, void imx6_armrootclk() / IMX6_PERIPHCLK_N); return; } +#ifdef CPU_CORTEXA7 + /* also for A7 */ + if (device_is_a(self, "armgtmr")) { + prop_dictionary_set_uint32(dict, "frequency", + armreg_cnt_frq_read()); + return; + } +#endif } #ifdef MULTIPROCESSOR Index: src/sys/arch/arm/imx/imx6_ccm.c diff -u src/sys/arch/arm/imx/imx6_ccm.c:1.5 src/sys/arch/arm/imx/imx6_ccm.c:1.6 --- src/sys/arch/arm/imx/imx6_ccm.c:1.5 Thu Nov 24 03:59:36 2016 +++ src/sys/arch/arm/imx/imx6_ccm.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_ccm.c,v 1.5 2016/11/24 03:59:36 hkenken Exp $ */ +/* $NetBSD: imx6_ccm.c,v 1.6 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2010-2012, 2014 Genetec Corporation. All rights reserved. @@ -31,10 +31,11 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx6_ccm.c,v 1.5 2016/11/24 03:59:36 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx6_ccm.c,v 1.6 2017/06/09 18:14:59 ryo Exp $"); #include "opt_imx.h" #include "opt_imx6clk.h" +#include "opt_cputypes.h" #include "locators.h" @@ -48,7 +49,9 @@ __KERNEL_RCSID(0, "$NetBSD: imx6_ccm.c,v #include <sys/param.h> #include <machine/cpu.h> +#ifdef CPU_CORTEXA9 #include <arm/cortex/a9tmr_var.h> +#endif #include <arm/imx/imx6_ccmvar.h> #include <arm/imx/imx6_ccmreg.h> @@ -439,7 +442,9 @@ imx6_set_clock(enum imx6_clock clk, uint v = imx6_get_clock(IMX6CLK_ARM_ROOT); cpufreq_set_all(v); +#ifdef CPU_CORTEXA9 a9tmr_update_freq(v / IMX6_PERIPHCLK_N); +#endif return 0; } } @@ -501,6 +506,7 @@ imx6_get_clock(enum imx6_clock clk) break; case IMX6CLK_PLL6: + /* XXX: iMX6UL has 2 div. which? */ v = imx6_ccm_read(CCM_ANALOG_PLL_ENET); switch (v & CCM_ANALOG_PLL_ENET_DIV_SELECT_MASK) { case 0: Index: src/sys/arch/arm/imx/imx6_reg.h diff -u src/sys/arch/arm/imx/imx6_reg.h:1.5 src/sys/arch/arm/imx/imx6_reg.h:1.6 --- src/sys/arch/arm/imx/imx6_reg.h:1.5 Tue May 17 06:44:45 2016 +++ src/sys/arch/arm/imx/imx6_reg.h Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_reg.h,v 1.5 2016/05/17 06:44:45 ryo Exp $ */ +/* $NetBSD: imx6_reg.h,v 1.6 2017/06/09 18:14:59 ryo Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. * All rights reserved. @@ -48,11 +48,9 @@ #define IMX6_CS0_BASE 0x08000000 #define IMX6_CS0_SIZE 0x08000000 -#define IMX6_IPU2_BASE 0x02c00000 -#define IMX6_IPU2_SIZE 0x00400000 - -#define IMX6_IPU1_BASE 0x02800000 -#define IMX6_IPU1_SIZE 0x00400000 +#define IMX6_IPU2_BASE 0x02a00000 +#define IMX6_IPU1_BASE 0x02600000 +#define IMX6_IPU_SIZE 0x00400000 #define IMX6_HSI_BASE 0x02208000 #define IMX6_HSI_SIZE 0x00004000 @@ -133,7 +131,7 @@ #define AIPS1_DCIC2_BASE 0x000e8000 #define AIPS1_DCIC1_BASE 0x000e4000 #define AIPS1_IOMUXC_BASE 0x000e0000 -#define AIPS1_IOMUXC_SIZE 0x00001000 +#define AIPS1_IOMUXC_SIZE 0x00005000 #define AIPS1_GPC_BASE 0x000dc000 #define AIPS1_SRC_BASE 0x000d8000 #define AIPS1_EPIT2_BASE 0x000d4000 @@ -149,6 +147,7 @@ #define AIPS1_WDOG1_BASE 0x000bc000 #define AIPS1_WDOG_SIZE 0x00000010 #define AIPS1_KPP_BASE 0x000b8000 +#define AIPS1_ENET2_BASE 0x000b4000 /* iMX6UL */ #define AIPS1_GPIO7_BASE 0x000b4000 #define AIPS1_GPIO6_BASE 0x000b0000 #define AIPS1_GPIO5_BASE 0x000ac000 @@ -173,6 +172,7 @@ #define AIPS1_SSI1_BASE 0x00028000 #define AIPS1_ESAI_BASE 0x00024000 #define AIPS1_UART1_BASE 0x00020000 +#define AIPS1_UART7_BASE 0x00018000 /* iMX6UL */ #define AIPS1_ECSPI5_BASE 0x00018000 #define AIPS1_ECSPI4_BASE 0x00014000 #define AIPS1_ECSPI3_BASE 0x00010000 @@ -180,10 +180,12 @@ #define AIPS1_ECSPI1_BASE 0x00008000 #define AIPS1_SPDIF_BASE 0x00004000 +#define AIPS2_UART6_BASE 0x000fc000 /* iMX6UL */ #define AIPS2_UART5_BASE 0x000f4000 #define AIPS2_UART4_BASE 0x000f0000 #define AIPS2_UART3_BASE 0x000ec000 #define AIPS2_UART2_BASE 0x000e8000 +#define AIPS2_WDOG3_BASE 0x000e4000 /* iMX6UL */ #define AIPS2_VDOA_BASE 0x000e3000 #define AIPS2_MIPIDSI_BASE 0x000e0000 #define AIPS2_MIPICSI_BASE 0x000dc000 Index: src/sys/arch/arm/imx/imx6var.h diff -u src/sys/arch/arm/imx/imx6var.h:1.5 src/sys/arch/arm/imx/imx6var.h:1.6 --- src/sys/arch/arm/imx/imx6var.h:1.5 Thu Nov 24 08:41:20 2016 +++ src/sys/arch/arm/imx/imx6var.h Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6var.h,v 1.5 2016/11/24 08:41:20 hkenken Exp $ */ +/* $NetBSD: imx6var.h,v 1.6 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -50,8 +50,8 @@ extern bus_space_handle_t imx6_armcore_b struct iomux_conf { uint32_t pin; /* ((MUXADDR<<16)|PADADDR) */ #define IOMUX_CONF_EOT ((uint32_t)(-1)) - uint32_t mux:8, - pad:24; + uint32_t mux; + uint32_t pad; }; uint32_t iomux_read(uint32_t); @@ -76,6 +76,7 @@ uint32_t imx6_chip_id(void); #define CHIPID_MAJOR_IMX6DL 0x00610000 #define CHIPID_MAJOR_IMX6SOLO 0x00620000 #define CHIPID_MAJOR_IMX6Q 0x00630000 +#define CHIPID_MAJOR_IMX6UL 0x00640000 #define IMX6_CHIPID_MAJOR(v) ((v) & CHIPID_MAJOR_MASK) #define IMX6_CHIPID_MINOR(v) ((v) & CHIPID_MINOR_MASK) Index: src/sys/arch/arm/imx/imx6_intr.h diff -u src/sys/arch/arm/imx/imx6_intr.h:1.3 src/sys/arch/arm/imx/imx6_intr.h:1.4 --- src/sys/arch/arm/imx/imx6_intr.h:1.3 Mon Jun 1 09:49:36 2015 +++ src/sys/arch/arm/imx/imx6_intr.h Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_intr.h,v 1.3 2015/06/01 09:49:36 ryo Exp $ */ +/* $NetBSD: imx6_intr.h,v 1.4 2017/06/09 18:14:59 ryo Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. * All rights reserved. @@ -45,20 +45,29 @@ #define IRQ_DAP 33 #define IRQ_SDMA 34 #define IRQ_VPU_JPEG 35 +#define IRQ_TSC 35 /* iMX6UL */ #define IRQ_SNVS_PMIC 36 #define IRQ_IPU1_ERROR 37 +#define IRQ_LCDIF_SYNC 37 /* iMX6UL */ #define IRQ_IPU1_SYNC 38 +#define IRQ_BEE 38 /* iMX6UL */ #define IRQ_IPU2_ERROR 39 +#define IRQ_CSI 39 /* iMX6UL */ #define IRQ_IPU2_SYNC 40 +#define IRQ_PXP 40 /* iMX6UL */ #define IRQ_GPU3D 41 #define IRQ_GPU2D_IDLE 42 +#define IRQ_SCTR_A 41 /* iMX6UL */ +#define IRQ_SCTR_B 42 /* iMX6UL */ #define IRQ_GPU2D 43 +#define IRQ_WDOG3 43 /* iMX6UL */ #define IRQ_VPU 44 #define IRQ_APBH 45 #define IRQ_EIM 46 #define IRQ_BCH 47 #define IRQ_GPMI 48 #define IRQ_DTCP 49 +#define IRQ_UART6 49 /* iMX6UL */ #define IRQ_VDOA 50 #define IRQ_SNVS 51 #define IRQ_SNVS_SEC 52 @@ -67,6 +76,8 @@ #define IRQ_USDHC2 55 #define IRQ_USDHC3 56 #define IRQ_USDHC4 57 +#define IRQ_SAI3_A 56 /* iMX6UL */ +#define IRQ_SAI3_B 57 /* iMX6UL */ #define IRQ_UART1 58 #define IRQ_UART2 59 #define IRQ_UART3 60 @@ -77,26 +88,35 @@ #define IRQ_ECSPI3 65 #define IRQ_ECSPI4 66 #define IRQ_ECSPI5 67 +#define IRQ_I2C4 67 /* iMX6UL */ #define IRQ_I2C1 68 #define IRQ_I2C2 69 #define IRQ_I2C3 70 #define IRQ_SATA 71 +#define IRQ_UART7 71 /* iMX6UL */ #define IRQ_USB1 72 +#define IRQ_UART8 72 /* iMX6UL */ #define IRQ_USB2 73 +#define IRQ__RSVD73 73 /* iMX6UL */ #define IRQ_USB3 74 +#define IRQ_USBOTG2 74 /* iMX6UL */ #define IRQ_USBOTG 75 +#define IRQ_USBOTG1 75 /* iMX6UL */ #define IRQ_USBPHY0 76 #define IRQ_USBPHY1 77 #define IRQ_SSI1 78 +#define IRQ_CAAM_JQ2 78 /* iMX6UL */ #define IRQ_SSI2 79 +#define IRQ_CAAM_ERR 79 /* iMX6UL */ #define IRQ_SSI3 80 +#define IRQ_CAAM_RTIC 80 /* iMX6UL */ #define IRQ_TEMP 81 #define IRQ_ASRC 82 #define IRQ_ESAI 83 #define IRQ_SPDIF 84 #define IRQ_MLB 85 #define IRQ_PMU 86 -#define IRQ_GPT 87 +#define IRQ_GPT1 87 #define IRQ_EPIT1 88 #define IRQ_EPIT2 89 #define IRQ_GPIO7 90 @@ -139,28 +159,41 @@ #define IRQ_CPU_CTI 127 #define IRQ_CPU_WDOG 128 #define IRQ__RSVD129 129 +#define IRQ_SAI1 129 /* iMX6UL */ #define IRQ__RSVD130 130 +#define IRQ_SAI2 130 /* iMX6UL */ #define IRQ__RSVD131 131 #define IRQ_MIPI_CSI1 132 +#define IRQ_ADC1 132 /* iMX6UL */ #define IRQ_MIPI_CSI2 133 +#define IRQ_ADC2 133 /* iMX6UL */ #define IRQ_MIPI_DSI 134 +#define IRQ__RSVD134 134 /* iMX6UL */ #define IRQ_MIPI_HSI 135 +#define IRQ__RSVD135 135 /* iMX6UL */ #define IRQ_SJC 136 #define IRQ_CAAM0 137 #define IRQ_CAAM1 138 #define IRQ__RSVD139 139 +#define IRQ_QSPI 139 /* iMX6UL */ #define IRQ_ASC1 140 #define IRQ_ASC2 141 +#define IRQ_GPT2 141 /* iMX6UL */ #define IRQ_FLEXCAN1 142 #define IRQ_FLEXCAN2 143 -#define IRQ__RSVD144 144 -#define IRQ__RSVD145 145 -#define IRQ__RSVD146 146 +#define IRQ_SIM1 144 /* iMX6UL */ +#define IRQ_SIM2 145 /* iMX6UL */ +#define IRQ_PWM5 146 /* iMX6UL */ #define IRQ_HDMI_MASTER 147 +#define IRQ_PWM6 147 /* iMX6UL */ #define IRQ_HDMI_CEC 148 +#define IRQ_PWM7 148 /* iMX6UL */ #define IRQ_MLB150L 149 -#define IRQ_ENET 150 -#define IRQ_ENET_1588 151 +#define IRQ_PWM8 149 /* iMX6UL */ +#define IRQ_ENET1 150 +#define IRQ_ENET1_1588 151 +#define IRQ_ENET2 152 /* iMX6UL */ +#define IRQ_ENET2_1588 153 /* iMX6UL */ #define IRQ_PCIE1 152 #define IRQ_PCIE2 153 #define IRQ_PCIE3 154 Index: src/sys/arch/arm/imx/imx6_iomuxreg.h diff -u src/sys/arch/arm/imx/imx6_iomuxreg.h:1.3 src/sys/arch/arm/imx/imx6_iomuxreg.h:1.4 --- src/sys/arch/arm/imx/imx6_iomuxreg.h:1.3 Thu Dec 31 11:53:18 2015 +++ src/sys/arch/arm/imx/imx6_iomuxreg.h Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_iomuxreg.h,v 1.3 2015/12/31 11:53:18 ryo Exp $ */ +/* $NetBSD: imx6_iomuxreg.h,v 1.4 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -38,7 +38,6 @@ #define IOMUX_GPR1_APP_REQ_ENTR_L1 __BIT(26) #define IOMUX_GPR1_MIPI_COLOR_SW __BIT(25) #define IOMUX_GPR1_MIPI_DPI_OFF __BIT(24) -#define IOMUX_GPR1_Reserved __BIT(23 #define IOMUX_GPR1_EXC_MON __BIT(22) #define IOMUX_GPR1_ENET_CLK_SEL __BIT(21) #define IOMUX_GPR1_MIPI_IPU2_MUX __BIT(20) @@ -1777,6 +1776,452 @@ #define IMX6SL_IOMUXC_EIM_DTACK_B_SELECT_INPUT 0x00000880 #define IMX6SL_IOMUXC_EIM_WAIT_B_SELECT_INPUT 0x00000884 +/* for iMX6UltraLight */ +#define IMX6UL_IOMUX_GPR0 0x00004000 +#define IMX6UL_IOMUX_GPR1 0x00004004 +#define IMX6UL_IOMUX_GPR1_ARMA7_CLK_AHB_EN __BIT(26) +#define IMX6UL_IOMUX_GPR1_ARMA7_CLK_ATB_EN __BIT(25) +#define IMX6UL_IOMUX_GPR1_ARMA7_CLK_APB_DBG_EN __BIT(24) +#define IMX6UL_IOMUX_GPR1_TZASC1_BOOT_LOCK __BIT(23) +#define IMX6UL_IOMUX_GPR1_EXC_MON __BIT(22) +#define IMX6UL_IOMUX_GPR1_SAI3_MCLK_DIR __BIT(21) +#define IMX6UL_IOMUX_GPR1_SAI2_MCLK_DIR __BIT(20) +#define IMX6UL_IOMUX_GPR1_SAI1_MCLK_DIR __BIT(19) +#define IMX6UL_IOMUX_GPR1_ENET2_TX_CLK_DIR __BIT(18) +#define IMX6UL_IOMUX_GPR1_ENET1_TX_CLK_DIR __BIT(17) +#define IMX6UL_IOMUX_GPR1_ADD_DS __BIT(16) +#define IMX6UL_IOMUX_GPR1_USB_EXP_MODE __BIT(15) +#define IMX6UL_IOMUX_GPR1_ENET2_CLK_SEL __BIT(14) +#define IMX6UL_IOMUX_GPR1_ENET1_CLK_SEL __BIT(13) +#define IMX6UL_IOMUX_GPR1_GINT __BIT(12) +#define IMX6UL_IOMUX_GPR2 0x00004008 +#define IMX6UL_IOMUX_GPR3 0x0000400c +#define IMX6UL_IOMUX_GPR4 0x00004010 +#define IMX6UL_IOMUX_GPR5 0x00004014 +#define IMX6UL_IOMUX_GPR9 0x00004024 +#define IMX6UL_IOMUX_GPR10 0x00004028 +#define IMX6UL_IOMUX_GPR14 0x00004038 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_BOOT_MODE0 0x00000014 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_BOOT_MODE1 0x00000018 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER0 0x0000001c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER1 0x00000020 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER2 0x00000024 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER3 0x00000028 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER4 0x0000002c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER5 0x00000030 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER6 0x00000034 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER7 0x00000038 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER8 0x0000003c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER9 0x00000040 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_JTAG_MOD 0x00000044 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_JTAG_TMS 0x00000048 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_JTAG_TDO 0x0000004c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_JTAG_TDI 0x00000050 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_JTAG_TCK 0x00000054 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_JTAG_TRST_B 0x00000058 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00 0x0000005c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO01 0x00000060 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO02 0x00000064 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 0x00000068 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO04 0x0000006c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO05 0x00000070 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO06 0x00000074 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO07 0x00000078 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO08 0x0000007c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO09 0x00000080 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART1_TX_DATA 0x00000084 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART1_RX_DATA 0x00000088 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B 0x0000008c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART1_RTS_B 0x00000090 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART2_TX_DATA 0x00000094 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART2_RX_DATA 0x00000098 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART2_CTS_B 0x0000009c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART2_RTS_B 0x000000a0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART3_TX_DATA 0x000000a4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART3_RX_DATA 0x000000a8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART3_CTS_B 0x000000ac +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART3_RTS_B 0x000000b0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART4_TX_DATA 0x000000b4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART4_RX_DATA 0x000000b8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART5_TX_DATA 0x000000bc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_UART5_RX_DATA 0x000000c0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_RX_DATA0 0x000000c4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_RX_DATA1 0x000000c8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_RX_EN 0x000000cc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_TX_DATA0 0x000000d0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_TX_DATA1 0x000000d4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_TX_EN 0x000000d8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_TX_CLK 0x000000dc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET1_RX_ER 0x000000e0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_DATA0 0x000000e4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_DATA1 0x000000e8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_EN 0x000000ec +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_DATA0 0x000000f0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_DATA1 0x000000f4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_EN 0x000000f8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_CLK 0x000000fc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_ER 0x00000100 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_CLK 0x00000104 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_ENABLE 0x00000108 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_HSYNC 0x0000010c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_VSYNC 0x00000110 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_RESET 0x00000114 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA00 0x00000118 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA01 0x0000011c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA02 0x00000120 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA03 0x00000124 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA04 0x00000128 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA05 0x0000012c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA06 0x00000130 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA07 0x00000134 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA08 0x00000138 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA09 0x0000013c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA10 0x00000140 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA11 0x00000144 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA12 0x00000148 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA13 0x0000014c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA14 0x00000150 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA15 0x00000154 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA16 0x00000158 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA17 0x0000015c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA18 0x00000160 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA19 0x00000164 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA20 0x00000168 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA21 0x0000016c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA22 0x00000170 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_LCD_DATA23 0x00000174 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_RE_B 0x00000178 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_WE_B 0x0000017c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA00 0x00000180 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA01 0x00000184 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA02 0x00000188 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA03 0x0000018c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA04 0x00000190 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA05 0x00000194 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA06 0x00000198 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA07 0x0000019c +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_ALE 0x000001a0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_WP_B 0x000001a4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_READY_B 0x000001a8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_CE0_B 0x000001ac +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_CE1_B 0x000001b0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_CLE 0x000001b4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_NAND_DQS 0x000001b8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SD1_CMD 0x000001bc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SD1_CLK 0x000001c0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA0 0x000001c4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA1 0x000001c8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA2 0x000001cc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA3 0x000001d0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_MCLK 0x000001d4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_PIXCLK 0x000001d8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_VSYNC 0x000001dc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_HSYNC 0x000001e0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA00 0x000001e4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA01 0x000001e8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA02 0x000001ec +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA03 0x000001f0 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA04 0x000001f4 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA05 0x000001f8 +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA06 0x000001fc +#define IMX6UL_IOMUXC_SW_MUX_CTL_PAD_CSI_DATA07 0x00000200 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR00 0x00000204 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR01 0x00000208 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR02 0x0000020c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR03 0x00000210 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR04 0x00000214 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR05 0x00000218 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR06 0x0000021c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR07 0x00000220 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR08 0x00000224 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR09 0x00000228 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR10 0x0000022c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR11 0x00000230 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR12 0x00000234 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR13 0x00000238 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR14 0x0000023c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ADDR15 0x00000240 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 0x00000244 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 0x00000248 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS_B 0x0000024c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS_B 0x00000250 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_CS0_B 0x00000254 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_CS1_B 0x00000258 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDWE_B 0x0000025c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT0 0x00000260 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT1 0x00000264 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA0 0x00000268 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA1 0x0000026c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 0x00000270 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCKE0 0x00000274 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCKE1 0x00000278 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK0_P 0x0000027c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0_P 0x00000280 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1_P 0x00000284 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET 0x00000288 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_TEST_MODE 0x0000028c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_POR_B 0x00000290 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ONOFF 0x00000294 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_PMIC_ON_REQ 0x00000298 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CCM_PMIC_STBY_REQ 0x0000029c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_BOOT_MODE0 0x000002a0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_BOOT_MODE1 0x000002a4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER0 0x000002a8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER1 0x000002ac +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER2 0x000002b0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER3 0x000002b4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER4 0x000002b8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER5 0x000002bc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER6 0x000002c0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER7 0x000002c4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER8 0x000002c8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER9 0x000002cc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_JTAG_MOD 0x000002d0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_JTAG_TMS 0x000002d4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_JTAG_TDO 0x000002d8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_JTAG_TDI 0x000002dc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_JTAG_TCK 0x000002e0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_JTAG_TRST_B 0x000002e4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00 0x000002e8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO01 0x000002ec +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO02 0x000002f0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 0x000002f4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO04 0x000002f8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO05 0x000002fc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO06 0x00000300 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO07 0x00000304 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO08 0x00000308 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO09 0x0000030c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART1_TX_DATA 0x00000310 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART1_RX_DATA 0x00000314 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B 0x00000318 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B 0x0000031c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART2_TX_DATA 0x00000320 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART2_RX_DATA 0x00000324 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART2_CTS_B 0x00000328 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART2_RTS_B 0x0000032c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART3_TX_DATA 0x00000330 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART3_RX_DATA 0x00000334 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART3_CTS_B 0x00000338 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART3_RTS_B 0x0000033c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART4_TX_DATA 0x00000340 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART4_RX_DATA 0x00000344 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART5_TX_DATA 0x00000348 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_UART5_RX_DATA 0x0000034c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_RX_DATA0 0x00000350 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_RX_DATA1 0x00000354 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_RX_EN 0x00000358 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_TX_DATA0 0x0000035c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_TX_DATA1 0x00000360 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_TX_EN 0x00000364 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_TX_CLK 0x00000368 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET1_RX_ER 0x0000036c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_RX_DATA0 0x00000370 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_RX_DATA1 0x00000374 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_RX_EN 0x00000378 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_TX_DATA0 0x0000037c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_TX_DATA1 0x00000380 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_TX_EN 0x00000384 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_TX_CLK 0x00000388 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_ENET2_RX_ER 0x0000038c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_CLK 0x00000390 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_ENABLE 0x00000394 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_HSYNC 0x00000398 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_VSYNC 0x0000039c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_RESET 0x000003a0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA00 0x000003a4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA01 0x000003a8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA02 0x000003ac +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA03 0x000003b0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA04 0x000003b4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA05 0x000003b8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA06 0x000003bc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA07 0x000003c0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA08 0x000003c4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA09 0x000003c8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA10 0x000003cc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA11 0x000003d0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA12 0x000003d4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA13 0x000003d8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA14 0x000003dc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA15 0x000003e0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA16 0x000003e4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA17 0x000003e8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA18 0x000003ec +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA19 0x000003f0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA20 0x000003f4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA21 0x000003f8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA22 0x000003fc +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_LCD_DATA23 0x00000400 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_RE_B 0x00000404 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_WE_B 0x00000408 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00 0x0000040c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA01 0x00000410 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA02 0x00000414 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA03 0x00000418 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA04 0x0000041c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA05 0x00000420 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA06 0x00000424 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA07 0x00000428 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_ALE 0x0000042c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B 0x00000430 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_B 0x00000434 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_CE0_B 0x00000438 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_CE1_B 0x0000043c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_CLE 0x00000440 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_NAND_DQS 0x00000444 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SD1_CMD 0x00000448 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SD1_CLK 0x0000044c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SD1_DATA0 0x00000450 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SD1_DATA1 0x00000454 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SD1_DATA2 0x00000458 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_SD1_DATA3 0x0000045c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_MCLK 0x00000460 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_PIXCLK 0x00000464 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_VSYNC 0x00000468 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_HSYNC 0x0000046c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA00 0x00000470 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA01 0x00000474 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA02 0x00000478 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA03 0x0000047c +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA04 0x00000480 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA05 0x00000484 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA06 0x00000488 +#define IMX6UL_IOMUXC_SW_PAD_CTL_PAD_CSI_DATA07 0x0000048c +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_ADDDS 0x00000490 +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL 0x00000494 +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_B0DS 0x00000498 +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_DDRPK 0x0000049c +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_CTLDS 0x000004a0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_B1DS 0x000004a4 +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_DDRHYS 0x000004a8 +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_DDRPKE 0x000004ac +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_DDRMODE 0x000004b0 +#define IMX6UL_IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE 0x000004b4 +#define IMX6UL_IOMUXC_USB_OTG1_ID_SELECT_INPUT 0x000004b8 +#define IMX6UL_IOMUXC_USB_OTG2_ID_SELECT_INPUT 0x000004bc +#define IMX6UL_IOMUXC_CCM_PMIC_READY_SELECT_INPUT 0x000004c0 +#define IMX6UL_IOMUXC_CSI_DATA02_SELECT_INPUT 0x000004c4 +#define IMX6UL_IOMUXC_CSI_DATA03_SELECT_INPUT 0x000004c8 +#define IMX6UL_IOMUXC_CSI_DATA05_SELECT_INPUT 0x000004cc +#define IMX6UL_IOMUXC_CSI_DATA00_SELECT_INPUT 0x000004d0 +#define IMX6UL_IOMUXC_CSI_DATA01_SELECT_INPUT 0x000004d4 +#define IMX6UL_IOMUXC_CSI_DATA04_SELECT_INPUT 0x000004d8 +#define IMX6UL_IOMUXC_CSI_DATA06_SELECT_INPUT 0x000004dc +#define IMX6UL_IOMUXC_CSI_DATA07_SELECT_INPUT 0x000004e0 +#define IMX6UL_IOMUXC_CSI_DATA08_SELECT_INPUT 0x000004e4 +#define IMX6UL_IOMUXC_CSI_DATA09_SELECT_INPUT 0x000004e8 +#define IMX6UL_IOMUXC_CSI_DATA10_SELECT_INPUT 0x000004ec +#define IMX6UL_IOMUXC_CSI_DATA11_SELECT_INPUT 0x000004f0 +#define IMX6UL_IOMUXC_CSI_DATA12_SELECT_INPUT 0x000004f4 +#define IMX6UL_IOMUXC_CSI_DATA13_SELECT_INPUT 0x000004f8 +#define IMX6UL_IOMUXC_CSI_DATA14_SELECT_INPUT 0x000004fc +#define IMX6UL_IOMUXC_CSI_DATA15_SELECT_INPUT 0x00000500 +#define IMX6UL_IOMUXC_CSI_DATA16_SELECT_INPUT 0x00000504 +#define IMX6UL_IOMUXC_CSI_DATA17_SELECT_INPUT 0x00000508 +#define IMX6UL_IOMUXC_CSI_DATA18_SELECT_INPUT 0x0000050c +#define IMX6UL_IOMUXC_CSI_DATA19_SELECT_INPUT 0x00000510 +#define IMX6UL_IOMUXC_CSI_DATA20_SELECT_INPUT 0x00000514 +#define IMX6UL_IOMUXC_CSI_DATA21_SELECT_INPUT 0x00000518 +#define IMX6UL_IOMUXC_CSI_DATA22_SELECT_INPUT 0x0000051c +#define IMX6UL_IOMUXC_CSI_DATA23_SELECT_INPUT 0x00000520 +#define IMX6UL_IOMUXC_CSI_HSYNC_SELECT_INPUT 0x00000524 +#define IMX6UL_IOMUXC_CSI_PIXCLK_SELECT_INPUT 0x00000528 +#define IMX6UL_IOMUXC_CSI_VSYNC_SELECT_INPUT 0x0000052c +#define IMX6UL_IOMUXC_CSI_FIELD_SELECT_INPUT 0x00000530 +#define IMX6UL_IOMUXC_ECSPI1_SCLK_SELECT_INPUT 0x00000534 +#define IMX6UL_IOMUXC_ECSPI1_MISO_SELECT_INPUT 0x00000538 +#define IMX6UL_IOMUXC_ECSPI1_MOSI_SELECT_INPUT 0x0000053c +#define IMX6UL_IOMUXC_ECSPI1_SS0_B_SELECT_INPUT 0x00000540 +#define IMX6UL_IOMUXC_ECSPI2_SCLK_SELECT_INPUT 0x00000544 +#define IMX6UL_IOMUXC_ECSPI2_MISO_SELECT_INPUT 0x00000548 +#define IMX6UL_IOMUXC_ECSPI2_MOSI_SELECT_INPUT 0x0000054c +#define IMX6UL_IOMUXC_ECSPI2_SS0_B_SELECT_INPUT 0x00000550 +#define IMX6UL_IOMUXC_ECSPI3_SCLK_SELECT_INPUT 0x00000554 +#define IMX6UL_IOMUXC_ECSPI3_MISO_SELECT_INPUT 0x00000558 +#define IMX6UL_IOMUXC_ECSPI3_MOSI_SELECT_INPUT 0x0000055c +#define IMX6UL_IOMUXC_ECSPI3_SS0_B_SELECT_INPUT 0x00000560 +#define IMX6UL_IOMUXC_ECSPI4_SCLK_SELECT_INPUT 0x00000564 +#define IMX6UL_IOMUXC_ECSPI4_MISO_SELECT_INPUT 0x00000568 +#define IMX6UL_IOMUXC_ECSPI4_MOSI_SELECT_INPUT 0x0000056c +#define IMX6UL_IOMUXC_ECSPI4_SS0_B_SELECT_INPUT 0x00000570 +#define IMX6UL_IOMUXC_ENET1_REF_CLK1_SELECT_INPUT 0x00000574 +#define IMX6UL_IOMUXC_ENET1_MAC0_MDIO_SELECT_INPUT 0x00000578 +#define IMX6UL_IOMUXC_ENET2_REF_CLK2_SELECT_INPUT 0x0000057c +#define IMX6UL_IOMUXC_ENET2_MAC0_MDIO_SELECT_INPUT 0x00000580 +#define IMX6UL_IOMUXC_FLEXCAN1_RX_SELECT_INPUT 0x00000584 +#define IMX6UL_IOMUXC_FLEXCAN2_RX_SELECT_INPUT 0x00000588 +#define IMX6UL_IOMUXC_GPT1_CAPTURE1_SELECT_INPUT 0x0000058c +#define IMX6UL_IOMUXC_GPT1_CAPTURE2_SELECT_INPUT 0x00000590 +#define IMX6UL_IOMUXC_GPT1_CLK_SELECT_INPUT 0x00000594 +#define IMX6UL_IOMUXC_GPT2_CAPTURE1_SELECT_INPUT 0x00000598 +#define IMX6UL_IOMUXC_GPT2_CAPTURE2_SELECT_INPUT 0x0000059c +#define IMX6UL_IOMUXC_GPT2_CLK_SELECT_INPUT 0x000005a0 +#define IMX6UL_IOMUXC_I2C1_SCL_SELECT_INPUT 0x000005a4 +#define IMX6UL_IOMUXC_I2C1_SDA_SELECT_INPUT 0x000005a8 +#define IMX6UL_IOMUXC_I2C2_SCL_SELECT_INPUT 0x000005ac +#define IMX6UL_IOMUXC_I2C2_SDA_SELECT_INPUT 0x000005b0 +#define IMX6UL_IOMUXC_I2C3_SCL_SELECT_INPUT 0x000005b4 +#define IMX6UL_IOMUXC_I2C3_SDA_SELECT_INPUT 0x000005b8 +#define IMX6UL_IOMUXC_I2C4_SCL_SELECT_INPUT 0x000005bc +#define IMX6UL_IOMUXC_I2C4_SDA_SELECT_INPUT 0x000005c0 +#define IMX6UL_IOMUXC_KPP_COL0_SELECT_INPUT 0x000005c4 +#define IMX6UL_IOMUXC_KPP_COL1_SELECT_INPUT 0x000005c8 +#define IMX6UL_IOMUXC_KPP_COL2_SELECT_INPUT 0x000005cc +#define IMX6UL_IOMUXC_KPP_ROW0_SELECT_INPUT 0x000005d0 +#define IMX6UL_IOMUXC_KPP_ROW1_SELECT_INPUT 0x000005d4 +#define IMX6UL_IOMUXC_KPP_ROW2_SELECT_INPUT 0x000005d8 +#define IMX6UL_IOMUXC_LCD_BUSY_SELECT_INPUT 0x000005dc +#define IMX6UL_IOMUXC_SAI1_MCLK_SELECT_INPUT 0x000005e0 +#define IMX6UL_IOMUXC_SAI1_RX_DATA_SELECT_INPUT 0x000005e4 +#define IMX6UL_IOMUXC_SAI1_TX_BCLK_SELECT_INPUT 0x000005e8 +#define IMX6UL_IOMUXC_SAI1_TX_SYNC_SELECT_INPUT 0x000005ec +#define IMX6UL_IOMUXC_SAI2_MCLK_SELECT_INPUT 0x000005f0 +#define IMX6UL_IOMUXC_SAI2_RX_DATA_SELECT_INPUT 0x000005f4 +#define IMX6UL_IOMUXC_SAI2_TX_BCLK_SELECT_INPUT 0x000005f8 +#define IMX6UL_IOMUXC_SAI2_TX_SYNC_SELECT_INPUT 0x000005fc +#define IMX6UL_IOMUXC_SAI3_MCLK_SELECT_INPUT 0x00000600 +#define IMX6UL_IOMUXC_SAI3_RX_DATA_SELECT_INPUT 0x00000604 +#define IMX6UL_IOMUXC_SAI3_TX_BCLK_SELECT_INPUT 0x00000608 +#define IMX6UL_IOMUXC_SAI3_TX_SYNC_SELECT_INPUT 0x0000060c +#define IMX6UL_IOMUXC_SDMA_EVENTS0_SELECT_INPUT 0x00000610 +#define IMX6UL_IOMUXC_SDMA_EVENTS1_SELECT_INPUT 0x00000614 +#define IMX6UL_IOMUXC_SPDIF_IN_SELECT_INPUT 0x00000618 +#define IMX6UL_IOMUXC_SPDIF_EXT_CLK_SELECT_INPUT 0x0000061c +#define IMX6UL_IOMUXC_UART1_RTS_B_SELECT_INPUT 0x00000620 +#define IMX6UL_IOMUXC_UART1_RX_DATA_SELECT_INPUT 0x00000624 +#define IMX6UL_IOMUXC_UART2_RTS_B_SELECT_INPUT 0x00000628 +#define IMX6UL_IOMUXC_UART2_RX_DATA_SELECT_INPUT 0x0000062c +#define IMX6UL_IOMUXC_UART3_RTS_B_SELECT_INPUT 0x00000630 +#define IMX6UL_IOMUXC_UART3_RX_DATA_SELECT_INPUT 0x00000634 +#define IMX6UL_IOMUXC_UART4_RTS_B_SELECT_INPUT 0x00000638 +#define IMX6UL_IOMUXC_UART4_RX_DATA_SELECT_INPUT 0x0000063c +#define IMX6UL_IOMUXC_UART5_RTS_B_SELECT_INPUT 0x00000640 +#define IMX6UL_IOMUXC_UART5_RX_DATA_SELECT_INPUT 0x00000644 +#define IMX6UL_IOMUXC_UART6_RTS_B_SELECT_INPUT 0x00000648 +#define IMX6UL_IOMUXC_UART6_RX_DATA_SELECT_INPUT 0x0000064c +#define IMX6UL_IOMUXC_UART7_RTS_B_SELECT_INPUT 0x00000650 +#define IMX6UL_IOMUXC_UART7_RX_DATA_SELECT_INPUT 0x00000654 +#define IMX6UL_IOMUXC_UART8_RTS_B_SELECT_INPUT 0x00000658 +#define IMX6UL_IOMUXC_UART8_RX_DATA_SELECT_INPUT 0x0000065c +#define IMX6UL_IOMUXC_USB_OTG2_OC_SELECT_INPUT 0x00000660 +#define IMX6UL_IOMUXC_USB_OTG_OC_SELECT_INPUT 0x00000664 +#define IMX6UL_IOMUXC_USDHC1_CD_B_SELECT_INPUT 0x00000668 +#define IMX6UL_IOMUXC_USDHC1_WP_SELECT_INPUT 0x0000066c +#define IMX6UL_IOMUXC_USDHC2_CLK_SELECT_INPUT 0x00000670 +#define IMX6UL_IOMUXC_USDHC2_CD_B_SELECT_INPUT 0x00000674 +#define IMX6UL_IOMUXC_USDHC2_CMD_SELECT_INPUT 0x00000678 +#define IMX6UL_IOMUXC_USDHC2_DATA0_SELECT_INPUT 0x0000067c +#define IMX6UL_IOMUXC_USDHC2_DATA1_SELECT_INPUT 0x00000680 +#define IMX6UL_IOMUXC_USDHC2_DATA2_SELECT_INPUT 0x00000684 +#define IMX6UL_IOMUXC_USDHC2_DATA3_SELECT_INPUT 0x00000688 +#define IMX6UL_IOMUXC_USDHC2_DATA4_SELECT_INPUT 0x0000068c +#define IMX6UL_IOMUXC_USDHC2_DATA5_SELECT_INPUT 0x00000690 +#define IMX6UL_IOMUXC_USDHC2_DATA6_SELECT_INPUT 0x00000694 +#define IMX6UL_IOMUXC_USDHC2_DATA7_SELECT_INPUT 0x00000698 +#define IMX6UL_IOMUXC_USDHC2_WP_SELECT_INPUT 0x0000069c + + /* IOMUXC_SW_MUX_CTL_PAD_xxx */ #define IOMUX_CONFIG_SION __BIT(4) #define IOMUX_CONFIG_ALT0 0 @@ -1806,7 +2251,7 @@ #define PAD_CTL_ODE __BIT(11) #define PAD_CTL_ODT __BITS(10, 8) #define PAD_CTL_SPEED_MASK __BITS(7, 6) -#define PAD_CTL_SPEED_RESERVED0 __SHIFTIN(0, PAD_CTL_SPEED_MASK) +#define PAD_CTL_SPEED_LOW50MHZ __SHIFTIN(0, PAD_CTL_SPEED_MASK) #define PAD_CTL_SPEED_50MHZ __SHIFTIN(1, PAD_CTL_SPEED_MASK) #define PAD_CTL_SPEED_100MHZ __SHIFTIN(2, PAD_CTL_SPEED_MASK) #define PAD_CTL_SPEED_200MHZ __SHIFTIN(3, PAD_CTL_SPEED_MASK) Index: src/sys/arch/arm/imx/imx6_usdhc.c diff -u src/sys/arch/arm/imx/imx6_usdhc.c:1.3 src/sys/arch/arm/imx/imx6_usdhc.c:1.4 --- src/sys/arch/arm/imx/imx6_usdhc.c:1.3 Thu Nov 24 08:41:20 2016 +++ src/sys/arch/arm/imx/imx6_usdhc.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_usdhc.c,v 1.3 2016/11/24 08:41:20 hkenken Exp $ */ +/* $NetBSD: imx6_usdhc.c,v 1.4 2017/06/09 18:14:59 ryo Exp $ */ /*- * Copyright (c) 2012 Genetec Corporation. All rights reserved. @@ -30,7 +30,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx6_usdhc.c,v 1.3 2016/11/24 08:41:20 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx6_usdhc.c,v 1.4 2017/06/09 18:14:59 ryo Exp $"); #include "imxgpio.h" @@ -78,8 +78,11 @@ sdhc_match(device_t parent, cfdata_t cf, switch (aa->aa_addr) { case IMX6_AIPS2_BASE + AIPS2_USDHC1_BASE: case IMX6_AIPS2_BASE + AIPS2_USDHC2_BASE: + return 1; case IMX6_AIPS2_BASE + AIPS2_USDHC3_BASE: case IMX6_AIPS2_BASE + AIPS2_USDHC4_BASE: + if (IMX6_CHIPID_MAJOR(imx6_chip_id()) == CHIPID_MAJOR_IMX6UL) + break; return 1; } @@ -89,11 +92,11 @@ sdhc_match(device_t parent, cfdata_t cf, static int imx6_sdhc_card_detect(struct sdhc_softc *ssc) { - struct sdhc_axi_softc *sc; int detect; +#if NIMXGPIO > 0 + struct sdhc_axi_softc *sc; sc = device_private(ssc->sc_dev); -#if NIMXGPIO > 0 if (sc->sc_gpio_cd >= 0) { detect = gpio_data_read(sc->sc_gpio_cd); if (sc->sc_gpio_cd_active == GPIO_PIN_LOW) Index: src/sys/arch/evbarm/nitrogen6/nitrogen6_iomux.c diff -u src/sys/arch/evbarm/nitrogen6/nitrogen6_iomux.c:1.3 src/sys/arch/evbarm/nitrogen6/nitrogen6_iomux.c:1.4 --- src/sys/arch/evbarm/nitrogen6/nitrogen6_iomux.c:1.3 Thu Nov 24 12:06:44 2016 +++ src/sys/arch/evbarm/nitrogen6/nitrogen6_iomux.c Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: nitrogen6_iomux.c,v 1.3 2016/11/24 12:06:44 hkenken Exp $ */ +/* $NetBSD: nitrogen6_iomux.c,v 1.4 2017/06/09 18:14:59 ryo Exp $ */ /* * Copyright (c) 2015 Ryo Shimizu <r...@nerv.org> @@ -26,7 +26,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nitrogen6_iomux.c,v 1.3 2016/11/24 12:06:44 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nitrogen6_iomux.c,v 1.4 2017/06/09 18:14:59 ryo Exp $"); #include "opt_evbarm_boardtype.h" #include <sys/bus.h> @@ -57,6 +57,7 @@ static void nitrogen6_gpio_config(const #define cubox_i 3 #define hummingboard 4 #define hummingboard_edge 5 +#define ccimx6ulstarter 6 #define PAD_UART \ (PAD_CTL_HYS | PAD_CTL_PUS_100K_PU | PAD_CTL_PULL | \ @@ -112,6 +113,17 @@ static void nitrogen6_gpio_config(const PAD_CTL_SPEED_100MHZ | PAD_CTL_DSE_40OHM | PAD_CTL_SRE_SLOW) #define PAD_OUTPUT_40OHM (PAD_CTL_SPEED_100MHZ | PAD_CTL_DSE_40OHM) +#define PAD_ENET6UL \ + (PAD_CTL_PUS_100K_PU | PAD_CTL_PULL | \ + PAD_CTL_SPEED_200MHZ | PAD_CTL_DSE_45OHM | PAD_CTL_SRE_FAST) +#define PAD_ENET6UL_REFCLK \ + (PAD_CTL_PUS_100K_PD | \ + PAD_CTL_SPEED_LOW50MHZ | PAD_CTL_DSE_40OHM | PAD_CTL_SRE_FAST) + +#define PAD_LCD_HSYNC \ + (PAD_CTL_PUS_100K_PD | PAD_CTL_KEEPER | \ + PAD_CTL_SPEED_100MHZ | PAD_CTL_DSE_40OHM | PAD_CTL_SRE_SLOW) + #define PAD_PCIE_GPIO \ (PAD_CTL_HYS | PAD_CTL_PUS_22K_PU | PAD_CTL_PULL | \ PAD_CTL_SPEED_50MHZ | PAD_CTL_DSE_40OHM | PAD_CTL_SRE_FAST) @@ -457,6 +469,71 @@ static const struct iomux_conf iomux_dat {.pin = IOMUX_CONF_EOT} }; +/* iMX6 UltraLight */ +static const struct iomux_conf iomux_data_6ul[] = { + /* Digi-Key i.MX6UL Starter Kit */ +#if (EVBARM_BOARDTYPE == ccimx6ulstarter) + { + .pin = MUX_PIN(IMX6UL, GPIO1_IO07), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_MDC */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, GPIO1_IO06), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_MDIO */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_RX_EN), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_RX_EN */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_RX_ER), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_RX_ER */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_RX_DATA0), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_RDATA00 */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_RX_DATA1), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_RDATA01 */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_TX_EN), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_TX_EN */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_TX_DATA0), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_TDATA00 */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_TX_DATA1), + .mux = IOMUX_CONFIG_ALT0, /* ENET1_TDATA01 */ + .pad = PAD_ENET6UL + }, + { + .pin = MUX_PIN(IMX6UL, ENET1_TX_CLK), + .mux = IOMUX_CONFIG_ALT4 | /* ENET1_REF_CLK */ + IOMUX_CONFIG_SION, /* Force input ENET1_TX_CLK */ + .pad = PAD_ENET6UL_REFCLK + }, + { + .pin = MUX_PIN(IMX6UL, LCD_HSYNC), + .mux = IOMUX_CONFIG_ALT5, /* GPIO3_IO02 */ + .pad = PAD_LCD_HSYNC + }, +#endif + /* end of table */ + {.pin = IOMUX_CONF_EOT} +}; + static const struct gpio_conf gpio_data[] = { /* GPIOn, PIN, dir, value */ #if (EVBARM_BOARDTYPE == nitrogen6x) @@ -489,6 +566,9 @@ static const struct gpio_conf gpio_data[ { 1, 4, GPIO_DIR_IN, 0 }, /* USDHC2 */ { 2, 11, GPIO_DIR_OUT, 0 }, /* PCIe */ #endif +#if (EVBARM_BOARDTYPE == ccimx6ulstarter) + { 3, 2, GPIO_DIR_OUT, 1 }, /* ENET1 phy */ +#endif /* end of table */ { 0, 0, 0, 0 }, @@ -497,6 +577,8 @@ static const struct gpio_conf gpio_data[ #define AIPS1_ADDR(addr) \ ((volatile uint32_t *)(KERNEL_IO_IOREG_VBASE + (addr))) +#define IOMUX_READ(reg) \ + (*AIPS1_ADDR(AIPS1_IOMUXC_BASE + (reg))) #define IOMUX_WRITE(reg, val) \ (*AIPS1_ADDR(AIPS1_IOMUXC_BASE + (reg)) = (val)) #define GPIO_ADDR(group, reg) \ @@ -510,12 +592,20 @@ nitrogen6_mux_config(const struct iomux_ for (i = 0; conflist[i].pin != IOMUX_CONF_EOT; i++) { reg = IOMUX_PIN_TO_PAD_ADDRESS(conflist[i].pin); - if (reg != IOMUX_PAD_NONE) + if (reg != IOMUX_PAD_NONE) { +#ifdef IOMUX_DEBUG + printf("IOMUX PAD[%08x] = %08x -> %08x\n", reg, IOMUX_READ(reg), conflist[i].pad); +#endif IOMUX_WRITE(reg, conflist[i].pad); + } reg = IOMUX_PIN_TO_MUX_ADDRESS(conflist[i].pin); - if (reg != IOMUX_MUX_NONE) + if (reg != IOMUX_MUX_NONE) { +#ifdef IOMUX_DEBUG + printf("IOMUX MUX[%08x] = %08x -> %08x\n", reg, IOMUX_READ(reg), conflist[i].mux); +#endif IOMUX_WRITE(reg, conflist[i].mux); + } } } @@ -556,8 +646,10 @@ nitrogen6_setup_iomux(void) case CHIPID_MAJOR_IMX6Q: nitrogen6_mux_config(iomux_data_6dq); break; + case CHIPID_MAJOR_IMX6UL: + nitrogen6_mux_config(iomux_data_6ul); + break; default: - panic("unknown IMX6_CHIPID %08x\n", imx6_chip_id()); break; } nitrogen6_gpio_config(gpio_data); @@ -568,6 +660,8 @@ nitrogen6_device_register(device_t self, { prop_dictionary_t dict = device_properties(self); + (void)&dict; + imx6_device_register(self, aux); if (device_is_a(self, "sdhc") && @@ -592,6 +686,9 @@ nitrogen6_device_register(device_t self, } if (device_is_a(self, "imxpcie") && device_is_a(device_parent(self), "axi")) { +#if (EVBARM_BOARDTYPE == nitrogen6max) + prop_dictionary_set_cstring(dict, "imx6pcie-reset-gpio", "!6,31"); +#endif #if (EVBARM_BOARDTYPE == hummingboard) prop_dictionary_set_cstring(dict, "imx6pcie-reset-gpio", "!3,4"); #endif Index: src/sys/arch/evbarm/nitrogen6/nitrogen6_start.S diff -u src/sys/arch/evbarm/nitrogen6/nitrogen6_start.S:1.1 src/sys/arch/evbarm/nitrogen6/nitrogen6_start.S:1.2 --- src/sys/arch/evbarm/nitrogen6/nitrogen6_start.S:1.1 Thu Sep 25 05:05:28 2014 +++ src/sys/arch/evbarm/nitrogen6/nitrogen6_start.S Fri Jun 9 18:14:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: nitrogen6_start.S,v 1.1 2014/09/25 05:05:28 ryo Exp $ */ +/* $NetBSD: nitrogen6_start.S,v 1.2 2017/06/09 18:14:59 ryo Exp $ */ /*- * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org> @@ -37,7 +37,7 @@ #include <arm/cortex/scu_reg.h> #include "assym.h" -RCSID("$NetBSD: nitrogen6_start.S,v 1.1 2014/09/25 05:05:28 ryo Exp $") +RCSID("$NetBSD: nitrogen6_start.S,v 1.2 2017/06/09 18:14:59 ryo Exp $") #ifndef CONADDR #define CONADDR 0x021e8000 @@ -155,7 +155,7 @@ _C_LABEL(nitrogen6_start): mov r3, #0 /* flags for arm_cpu_hatched */ cmp r0, #0 - ble 9f + ble .hatch_done #ifdef VERBOSE_INIT_ARM /* wait to prevent the mixing of console output */ @@ -221,10 +221,10 @@ _C_LABEL(nitrogen6_start): .not_hatched: PRINT("\r\nnot hatched. arm_cpu_hatched=") PRINT_R0 - b 9f + b .hatch_done .hatched: PRINT("\r\nMULTIPROCESSOR hatched!\r\n") -9: +.hatch_done: #endif PRINT("jump to start()\r\n") @@ -256,6 +256,9 @@ mmu_init_table: (BOOT_MEMSIZE * L1_S_SIZE + L1_S_SIZE - 1) / L1_S_SIZE, L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_CACHEABLE) #endif + MMU_INIT(KERNEL_BASE, KERNEL_BASE - KERNEL_BASE_VOFFSET, + (BOOT_MEMSIZE * L1_S_SIZE + L1_S_SIZE - 1) / L1_S_SIZE, + L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_CACHEABLE) /* Map the 2MB of primary peripherals (AIPS1 + AIPS2) */ MMU_INIT(KERNEL_IO_IOREG_VBASE, IMX6_IOREG_PBASE, Added files: Index: src/sys/arch/evbarm/conf/IMX6UL-STARTER diff -u /dev/null src/sys/arch/evbarm/conf/IMX6UL-STARTER:1.1 --- /dev/null Fri Jun 9 18:14:59 2017 +++ src/sys/arch/evbarm/conf/IMX6UL-STARTER Fri Jun 9 18:14:59 2017 @@ -0,0 +1,434 @@ +# $NetBSD: IMX6UL-STARTER,v 1.1 2017/06/09 18:14:59 ryo Exp $ +# +# IMX6UL-STARTER - Freescale i.MX6UL Evaluation Board +# +# ConnectCore i.MX6UL Starter Kit +# - https://www.digikey.com/en/product-highlight/d/digi-intl/i-mx6ul-starter-kit +# + +include "arch/evbarm/conf/std.imx6ul" + +#options INCLUDE_CONFIG_FILE # embed config file in kernel binary + +# estimated number of users + +maxusers 32 + +# Board Type +options EVBARM_BOARDTYPE=ccimx6ulstarter + +# CPU options +options CPU_CORTEX +options CPU_CORTEXA7 +options IMX6 +options PMAPCOUNTERS + +# Standard system options + +options INSECURE # disable kernel security levels - X needs this + +options RTC_OFFSET=0 # hardware clock is this many mins. west of GMT +#options NTP # NTP phase/frequency locked loop + +options KTRACE # system call tracing via ktrace(1) + +# Note: SysV IPC parameters can be changed dynamically; see sysctl(8). +options SYSVMSG # System V-like message queues +options SYSVSEM # System V-like semaphores +options SYSVSHM # System V-like memory sharing + +#options USERCONF # userconf(4) support +#options PIPE_SOCKETPAIR # smaller, but slower pipe(2) +options SYSCTL_INCLUDE_DESCR # Include sysctl descriptions in kernel + +# Alternate buffer queue strategies for better responsiveness under high +# disk I/O load. +#options BUFQ_READPRIO +options BUFQ_PRIOCSCAN + +# Diagnostic/debugging support options +options VERBOSE_INIT_ARM # verbose bootstraping messages +#options PERFCTRS # performance counters +options DIAGNOSTIC # internally consistency checks + +#options DEBUG +#options PMAP_DEBUG # Enable pmap_debug_level code +options LOCKDEBUG # expensive locking checks/support +options IRQSTATS # manage IRQ statistics +#options NO_POWERSAVE # uncomment this to run under ICE + +#makeoptions COPTS="-O2" +options DDB # in-kernel debugger +#options DDB_KEYCODE=0x1d # ^] +#options DDB_COMMANDONENTER="bt" # execute command when ddb is entered +options DDB_ONPANIC=1 # see also sysctl(7): `ddb.onpanic' +options DDB_HISTORY_SIZE=100 # Enable history editing in DDB +options DDB_VERBOSE_HELP +#options IPKDB # remote kernel debugging +#options KGDB +#options KGDB_DEVNAME="\"imxuart\"" +#options KGDB_DEVADDR=0x021f4000 +#options KGDB_DEVRATE=115200 +makeoptions DEBUG="-g" # compile full symbol table +makeoptions COPY_SYMTAB=1 +#options SYSCALL_STATS # per syscall counts +#options SYSCALL_TIMES # per syscall times +#options SYSCALL_TIMES_HASCOUNTER # use 'broken' rdtsc (soekris) + + +# Compatibility options +#options COMPAT_43 # 4.3BSD compatibility. +#options COMPAT_09 # NetBSD 0.9, +#options COMPAT_10 # NetBSD 1.0, +#options COMPAT_11 # NetBSD 1.1, +#options COMPAT_12 # NetBSD 1.2, +#options COMPAT_13 # NetBSD 1.3, +#options COMPAT_14 # NetBSD 1.4, +#options COMPAT_15 # NetBSD 1.5, +#options COMPAT_16 # NetBSD 1.6, +#options COMPAT_20 # NetBSD 2.0, +#options COMPAT_30 # NetBSD 3.0, +#options COMPAT_40 # NetBSD 4.0, +#options COMPAT_50 # NetBSD 5.0, +options COMPAT_60 # NetBSD 6.0, and +options COMPAT_70 # NetBSD 7.0 binary compatibility. +#options TCP_COMPAT_42 # 4.2BSD TCP/IP bug compat. Not recommended. + +options COMPAT_OSSAUDIO # OSS (Voxware) audio driver compatibility +options COMPAT_NETBSD32 # allow running arm (e.g. non-earm) binaries +options COMPAT_BSDPTY # /dev/[pt]ty?? ptys. + +# Wedge support +options DKWEDGE_AUTODISCOVER # Automatically add dk(4) instances +options DKWEDGE_METHOD_GPT # Supports GPT partitions as wedges +#options DKWEDGE_METHOD_BSDLABEL # Support disklabel entries as wedges +#options DKWEDGE_METHOD_MBR # Support MBR partitions as wedges + +# File systems +file-system FFS # UFS +file-system MFS # memory file system +file-system NFS # Network File System client +file-system TMPFS # Efficient memory file-system +file-system EXT2FS # second extended file system (linux) +file-system LFS # log-structured file system +file-system NTFS # Windows/NT file system (experimental) +file-system CD9660 # ISO 9660 + Rock Ridge file system +file-system MSDOSFS # MS-DOS file system +file-system FDESC # /dev/fd +file-system KERNFS # /kern +file-system NULLFS # loopback file system +file-system OVERLAY # overlay file system +file-system PROCFS # /proc +file-system PUFFS # Userspace file systems (e.g. ntfs-3g & sshfs) +file-system SMBFS # experimental - CIFS; also needs nsmb (below) +file-system UMAPFS # NULLFS + uid and gid remapping +file-system UNION # union file system +file-system CODA # Coda File System; also needs vcoda (below) +file-system PTYFS # /dev/ptm support +#file-system UDF # experimental - OSTA UDF CD/DVD file-system +#file-system HFS # experimental - Apple HFS+ (read-only) +#file-system NILFS # experimental - NTT's NiLFS(2) + +# File system options +options QUOTA # legacy UFS quotas +options QUOTA2 # new, in-filesystem UFS quotas +options FFS_EI # FFS Endian Independent support +options WAPBL # File system journaling support +# Note that UFS_DIRHASH is suspected of causing kernel memory corruption. +# It is not recommended for general use. +#options UFS_DIRHASH # UFS Large Directory Hashing - Experimental +options NFSSERVER # Network File System server +#options EXT2FS_SYSTEM_FLAGS # makes ext2fs file flags (append and + # immutable) behave as system flags. +#options FFS_NO_SNAPSHOT # No FFS snapshot support +options UFS_EXTATTR # Extended attribute support for UFS1 + +# Networking options +#options GATEWAY # packet forwarding +options INET # IP + ICMP + TCP + UDP +options INET6 # IPv6 +options IPSEC # IP security +#options IPSEC_DEBUG # debug for IP security +#options MPLS # MultiProtocol Label Switching (needs mpls) +#options MROUTING # IP multicast routing +#options PIM # Protocol Independent Multicast +options NETATALK # AppleTalk networking protocols +#options CAN # Controller Area Network protocol +options PPP_BSDCOMP # BSD-Compress compression support for PPP +options PPP_DEFLATE # Deflate compression support for PPP +options PPP_FILTER # Active filter support for PPP (requires bpf) +options IPFILTER_LOG # ipmon(8) log support +options IPFILTER_LOOKUP # ippool(8) support +options IPFILTER_COMPAT # Compat for IP-Filter +#options IPFILTER_DEFAULT_BLOCK # block all packets by default +#options TCP_DEBUG # Record last TCP_NDEBUG packets with SO_DEBUG +#options TCP_SIGNATURE # Enable RFC-2385 TCP md5 signatures + +#options ALTQ # Manipulate network interfaces' output queues +#options ALTQ_BLUE # Stochastic Fair Blue +#options ALTQ_CBQ # Class-Based Queueing +#options ALTQ_CDNR # Diffserv Traffic Conditioner +#options ALTQ_FIFOQ # First-In First-Out Queue +#options ALTQ_FLOWVALVE # RED/flow-valve (red-penalty-box) +#options ALTQ_HFSC # Hierarchical Fair Service Curve +#options ALTQ_LOCALQ # Local queueing discipline +#options ALTQ_PRIQ # Priority Queueing +#options ALTQ_RED # Random Early Detection +#options ALTQ_RIO # RED with IN/OUT +#options ALTQ_WFQ # Weighted Fair Queueing + +# Device options + +# Console options. also need IMXUARTCONSOLE +options CONSDEVNAME="\"imxuart\"",CONADDR=0x021f4000,CONSPEED=115200 +options CONS_OVERRIDE + +# These options enable verbose messages for several subsystems. +# Warning, these may compile large string tables into the kernel! +options MIIVERBOSE # verbose PHY autoconfig messages +#options PCIVERBOSE # verbose PCI device autoconfig messages +#options PCI_CONFIG_DUMP # verbosely dump PCI config space +#options PCMCIAVERBOSE # verbose PCMCIA configuration messages +#options SCSIVERBOSE # Verbose SCSI errors +#options USBVERBOSE # verbose USB device autoconfig messages + +# Kernel root file system and dump configuration. +config netbsd root on ? type ? + +options NFS_BOOT_BOOTP +options NFS_BOOT_DHCP +#options NFS_BOOT_BOOTPARAM +#options NFS_BOOT_BOOTSTATIC +#options NFS_BOOTSTATIC_MYIP="\"192.168.0.2\"" +#options NFS_BOOTSTATIC_GWIP="\"192.168.0.1\"" +#options NFS_BOOTSTATIC_MASK="\"255.255.255.0\"" +#options NFS_BOOTSTATIC_SERVADDR="\"192.168.0.3\"" +#options NFS_BOOTSTATIC_SERVER="\"192.168.0.3:/nfs/imx6ul\"" + +# +# Device configuration +# + +mainbus0 at root + +cpu* at mainbus? + +# A7 core devices +armperiph0 at mainbus? # A7 On-Chip Peripherals +armgic0 at armperiph? # ARM Generic Interrupt Controller +armgtmr0 at armperiph? # ARM Generic Timer + +axi0 at mainbus? + +# Enhanced Periodic Interrupt Timer +#imxclock0 at axi? addr 0x020d0000 irq 88 +#imxclock1 at axi? addr 0x020d4000 irq 89 + +# GPIO +imxgpio0 at axi? addr 0x0209c000 irqbase 256 irq 98 +imxgpio1 at axi? addr 0x020a0000 irqbase 288 irq 100 +imxgpio2 at axi? addr 0x020a4000 irqbase 320 irq 102 +imxgpio3 at axi? addr 0x020a8000 irqbase 352 irq 104 +imxgpio4 at axi? addr 0x020ac000 irqbase 384 irq 106 +gpio* at imxgpio? +options IMX_GPIO_INTR_SPLIT + +# Clock Control +imxccm0 at axi? addr 0x020c4000 + +# On-Chip OTP Controller +imxocotp0 at axi? addr 0x021bc000 + +# Secure Non-Volatile Storage +imxsnvs0 at axi? addr 0x020cc000 + +# IOMUX +imxiomux0 at axi? addr 0x020e0000 + +# WatchDog +imxwdog0 at axi? addr 0x020bc000 irq 112 flags 0 +#imxwdog1 at axi? addr 0x020c0000 irq 113 flags 0 +#imxwdog2 at axi? addr 0x021e4000 irq 43 flags 0 + +# Serial +#imxuart0 at axi? addr 0x02020000 irq 58 # UART1 +#imxuart1 at axi? addr 0x021e8000 irq 59 # UART2 +#imxuart2 at axi? addr 0x021ec000 irq 60 # UART3 +#imxuart3 at axi? addr 0x021f0000 irq 61 # UART4 +imxuart4 at axi? addr 0x021f4000 irq 62 # UART5 +#imxuart5 at axi? addr 0x021fc000 irq 49 # UART6 +#imxuart6 at axi? addr 0x02018000 irq 71 # UART7 + +options IMXUARTCONSOLE + +# Network Interfaces +enet0 at axi? addr 0x02188000 irq 150 # iMX6 SoC Ethernet +#enet1 at axi? addr 0x020b4000 irq 152 # iMX6 SoC Ethernet + +# MII/PHY support +acphy* at mii? phy ? # DAltima AC101 and AMD Am79c874 PHYs +amhphy* at mii? phy ? # AMD 79c901 Ethernet PHYs +atphy* at mii? phy ? # Attansic/Atheros PHYs +bmtphy* at mii? phy ? # Broadcom BCM5201 and BCM5202 PHYs +brgphy* at mii? phy ? # Broadcom BCM5400-family PHYs +ciphy* at mii? phy ? # Cicada CS8201 Gig-E PHYs +dmphy* at mii? phy ? # Davicom DM9101 PHYs +etphy* at mii? phy ? # Agere/LSI ET1011 TruePHY Gig-E PHYs +exphy* at mii? phy ? # 3Com internal PHYs +gentbi* at mii? phy ? # Generic Ten-Bit 1000BASE-[CLS]X PHYs +glxtphy* at mii? phy ? # Level One LXT-1000 PHYs +gphyter* at mii? phy ? # NS83861 Gig-E PHY +icsphy* at mii? phy ? # Integrated Circuit Systems ICS189x +igphy* at mii? phy ? # Intel IGP01E1000 +ihphy* at mii? phy ? # Intel 82577 PHYs +ikphy* at mii? phy ? # Intel 82563 PHYs +inphy* at mii? phy ? # Intel 82555 PHYs +iophy* at mii? phy ? # Intel 82553 PHYs +lxtphy* at mii? phy ? # Level One LXT-970 PHYs +makphy* at mii? phy ? # Marvell Semiconductor 88E1000 PHYs +micphy* at mii? phy ? # Micrel KSZ9021RNI PHYs +nsphy* at mii? phy ? # NS83840 PHYs +nsphyter* at mii? phy ? # NS83843 PHYs +pnaphy* at mii? phy ? # generic HomePNA PHYs +qsphy* at mii? phy ? # Quality Semiconductor QS6612 PHYs +rgephy* at mii? phy ? # Realtek 8169S/8110 internal PHYs +rlphy* at mii? phy ? # Realtek 8139/8201L PHYs +sqphy* at mii? phy ? # Seeq 80220/80221/80223 PHYs +tlphy* at mii? phy ? # ThunderLAN PHYs +tqphy* at mii? phy ? # TDK Semiconductor PHYs +ukphy* at mii? phy ? # generic unknown PHYs +urlphy* at mii? phy ? # Realtek RTL8150L internal PHYs + +# USB Controller and Devices +imxusbc0 at axi? addr 0x02184000 +ehci0 at imxusbc0 unit 0 irq 75 # USBOTG1 +ehci1 at imxusbc0 unit 1 irq 74 # USBOTG2 + +usb* at ehci? + +# USB device drivers +include "dev/usb/usbdevices.config" + +midi* at midibus? + +# SD/MMC controller +#sdhc0 at axi? addr 0x02190000 irq 54 # uSDHC1 +#sdhc1 at axi? addr 0x02194000 irq 55 # uSDHC2 +#sdmmc* at sdhc? +#options SDHC_DEBUG +#options SDMMC_DEBUG +# +#ld* at sdmmc? # MMC/SD card + + +# Pseudo-Devices + +pseudo-device crypto # /dev/crypto device +pseudo-device swcrypto # software crypto implementation + +# disk/mass storage pseudo-devices +pseudo-device bio # RAID control device driver +pseudo-device ccd # concatenated/striped disk devices +pseudo-device cgd # cryptographic disk devices +pseudo-device raid # RAIDframe disk driver +#options RAID_AUTOCONFIG # auto-configuration of RAID components +#Options to enable various other RAIDframe RAID types. +#options RF_INCLUDE_EVENODD=1 +#options RF_INCLUDE_RAID5_RS=1 +#options RF_INCLUDE_PARITYLOGGING=1 +#options RF_INCLUDE_CHAINDECLUSTER=1 +#options RF_INCLUDE_INTERDECLUSTER=1 +#options RF_INCLUDE_PARITY_DECLUSTERING=1 +#options RF_INCLUDE_PARITY_DECLUSTERING_DS=1 +pseudo-device fss # file system snapshot device +pseudo-device putter # for puffs and pud + +pseudo-device vnd # disk-like interface to files +options VND_COMPRESSION # compressed vnd(4) + + +# network pseudo-devices +pseudo-device bpfilter # Berkeley packet filter +#pseudo-device carp # Common Address Redundancy Protocol +#pseudo-device ipfilter # IP filter (firewall) and NAT +pseudo-device loop # network loopback +#pseudo-device mpls # MPLS pseudo-interface +pseudo-device ppp # Point-to-Point Protocol +pseudo-device pppoe # PPP over Ethernet (RFC 2516) +pseudo-device sl # Serial Line IP +pseudo-device strip # Starmode Radio IP (Metricom) +pseudo-device irframetty # IrDA frame line discipline +pseudo-device tun # network tunneling over tty +pseudo-device tap # virtual Ethernet +pseudo-device gre # generic L3 over IP tunnel +pseudo-device gif # IPv[46] over IPv[46] tunnel (RFC1933) +#pseudo-device faith # IPv[46] tcp relay translation i/f +pseudo-device stf # 6to4 IPv6 over IPv4 encapsulation +pseudo-device vlan # IEEE 802.1q encapsulation +pseudo-device bridge # simple inter-network bridging +#options BRIDGE_IPF # bridge uses IP/IPv6 pfil hooks too +pseudo-device agr # IEEE 802.3ad link aggregation +pseudo-device l2tp # L2TPv3 interface +#pseudo-device pf # PF packet filter +#pseudo-device pflog # PF log if +#pseudo-device pfsync # PF sync if +#pseudo-device npf # NPF packet filter + +#pseudo-device canloop # CAN loopback interface + +# +# accept filters +pseudo-device accf_data # "dataready" accept filter +pseudo-device accf_http # "httpready" accept filter + +# miscellaneous pseudo-devices +pseudo-device pty # pseudo-terminals +pseudo-device sequencer # MIDI sequencer +# rnd works; RND_COM does not on port i386 yet. +#options RND_COM # use "com" randomness as well (BROKEN) +pseudo-device clockctl # user control of clock subsystem +pseudo-device ksyms # /dev/ksyms +pseudo-device lockstat # lock profiling +pseudo-device bcsp # BlueCore Serial Protocol +pseudo-device btuart # Bluetooth HCI UART (H4) + +# a pseudo device needed for Coda # also needs CODA (above) +pseudo-device vcoda # coda minicache <-> venus comm. + +# a pseudo device needed for SMBFS +pseudo-device nsmb # experimental - SMB requester + +# wscons pseudo-devices +pseudo-device wsmux # mouse & keyboard multiplexor +pseudo-device wsfont + +# pseudo audio device driver +#pseudo-device pad + +# userland interface to drivers, including autoconf and properties retrieval +pseudo-device drvctl + +options FILEASSOC # fileassoc(9) - required for Veriexec + # and PAX_SEGVGUARD + +# Veriexec +# +# a pseudo device needed for veriexec +pseudo-device veriexec +# +# Uncomment the fingerprint methods below that are desired. Note that +# removing fingerprint methods will have almost no impact on the kernel +# code size. +# +options VERIFIED_EXEC_FP_RMD160 +options VERIFIED_EXEC_FP_SHA256 +options VERIFIED_EXEC_FP_SHA384 +options VERIFIED_EXEC_FP_SHA512 +options VERIFIED_EXEC_FP_SHA1 +options VERIFIED_EXEC_FP_MD5 + +options PAX_SEGVGUARD=0 # PaX Segmentation fault guard +options PAX_MPROTECT=1 # PaX mprotect(2) restrictions +options PAX_MPROTECT_DEBUG=1 # PaX mprotect debug +options PAX_ASLR=1 # PaX Address Space Layout Randomization +options PAX_ASLR_DEBUG=1 # PaX ASLR debug Index: src/sys/arch/evbarm/conf/IMX6UL-STARTER_INSTALL diff -u /dev/null src/sys/arch/evbarm/conf/IMX6UL-STARTER_INSTALL:1.1 --- /dev/null Fri Jun 9 18:14:59 2017 +++ src/sys/arch/evbarm/conf/IMX6UL-STARTER_INSTALL Fri Jun 9 18:14:59 2017 @@ -0,0 +1,10 @@ +# $NetBSD: IMX6UL-STARTER_INSTALL,v 1.1 2017/06/09 18:14:59 ryo Exp $ +# +# IMX6UL-STARTER_INSTALL -- IMX6UL-STARTER kernel with installation-sized +# ramdisk +# + +include "arch/evbarm/conf/IMX6UL-STARTER" +include "arch/evbarm/conf/INSTALL" +no makeoptions DEBUG +options BOOTHOWTO=RB_SINGLE Index: src/sys/arch/evbarm/conf/mk.imx6ul diff -u /dev/null src/sys/arch/evbarm/conf/mk.imx6ul:1.1 --- /dev/null Fri Jun 9 18:14:59 2017 +++ src/sys/arch/evbarm/conf/mk.imx6ul Fri Jun 9 18:14:59 2017 @@ -0,0 +1,33 @@ +# $NetBSD: mk.imx6ul,v 1.1 2017/06/09 18:14:59 ryo Exp $ + +SYSTEM_FIRST_OBJ= nitrogen6_start.o +SYSTEM_FIRST_SFILE= ${THISARM}/nitrogen6/nitrogen6_start.S + +GENASSYM_EXTRAS+= ${THISARM}/nitrogen6/genassym.cf + +_OSRELEASE!= ${HOST_SH} $S/conf/osrelease.sh + +KERNEL_BASE_PHYS?=$(LOADADDRESS) +KERNEL_BASE_VIRT?=$(LOADADDRESS) + +MKUBOOTIMAGEARGS= -A arm -T kernel +MKUBOOTIMAGEARGS+= -a $(KERNEL_BASE_PHYS) -e $(KERNEL_BASE_PHYS) +MKUBOOTIMAGEARGS+= -n "NetBSD/$(BOARDTYPE) ${_OSRELEASE}" +MKUBOOTIMAGEARGS_NONE= ${MKUBOOTIMAGEARGS} -C none +MKUBOOTIMAGEARGS_GZ= ${MKUBOOTIMAGEARGS} -C gz + +SYSTEM_LD_TAIL_EXTRA+=; \ + echo ${OBJCOPY} -S -O binary $@ $@.bin; \ + ${OBJCOPY} -S -O binary $@ $@.bin; \ + echo ${TOOL_GZIP} -9c $@.bin > $@.bin.gz; \ + ${TOOL_GZIP} -9c $@.bin > $@.bin.gz; \ + echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_GZ} $@.bin.gz $@.gz.ub; \ + ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_GZ} $@.bin.gz $@.gz.ub; \ + echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_NONE} $@.bin $@.ub; \ + ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_NONE} $@.bin $@.ub; \ + echo + +EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.bin@} +EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.ub@} +EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.bin.gz@} +EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.gz.ub@} Index: src/sys/arch/evbarm/conf/std.imx6ul diff -u /dev/null src/sys/arch/evbarm/conf/std.imx6ul:1.1 --- /dev/null Fri Jun 9 18:14:59 2017 +++ src/sys/arch/evbarm/conf/std.imx6ul Fri Jun 9 18:14:59 2017 @@ -0,0 +1,35 @@ +# $NetBSD: std.imx6ul,v 1.1 2017/06/09 18:14:59 ryo Exp $ +# +# standard NetBSD/evbarm options for i.MX6UL + +machine evbarm arm +include "arch/evbarm/conf/std.evbarm" + +# Pull in nitrogen6 config definitions. +include "arch/evbarm/conf/files.nitrogen6" + +options NITROGEN6 + +options ARM_HAS_VBAR +options __HAVE_CPU_COUNTER +options __HAVE_FAST_SOFTINTS # should be in types.h +options TPIDRPRW_IS_CURCPU +#options __HAVE_MM_MD_DIRECT_MAPPED_PHYS +#options PMAP_NEED_ALLOC_POOLPAGE + +makeoptions CPUFLAGS="-mcpu=cortex-a7 -mfpu=neon" + +# To support easy transit to ../arch/arm/arm32 +options FPU_VFP +options CORTEX_PMC +options CORTEX_PMC_CCNT_HZ=792000000 + +options KERNEL_BASE_EXT=0x80000000 +makeoptions KERNEL_BASE_PHYS="0x80800000" +makeoptions KERNEL_BASE_VIRT="0x80800000" + +makeoptions BOARDMKFRAG="${THISARM}/conf/mk.imx6ul" +makeoptions CPPFLAGS+="-I$S/../../../include" + +options ARM_INTR_IMPL="<arch/arm/imx/imx6_intr.h>" +options ARM_GENERIC_TODR