Module Name:    src
Committed By:   hkenken
Date:           Wed Jul 24 11:20:55 UTC 2019

Modified Files:
        src/sys/arch/arm/imx: imx23_usb.c imx51_usb.c imx6_reg.h imx6_usb.c
            imx6_usbreg.h imx7_usb.c imx7_usbreg.h imxusb.c imxusbvar.h
        src/sys/arch/evbarm/kobo: kobo_usb.c
        src/sys/arch/evbarm/netwalker: netwalker_usb.c
        src/sys/arch/evbarm/nitrogen6: nitrogen6_usb.c

Log Message:
i.MX USB host code re-arrangement.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/imx/imx23_usb.c \
    src/sys/arch/arm/imx/imx6_usbreg.h src/sys/arch/arm/imx/imx7_usbreg.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/imx/imx51_usb.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/imx/imx6_reg.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/imx/imx6_usb.c \
    src/sys/arch/arm/imx/imxusbvar.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/imx/imx7_usb.c
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/imx/imxusb.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/evbarm/kobo/kobo_usb.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/evbarm/netwalker/netwalker_usb.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/evbarm/nitrogen6/nitrogen6_usb.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/imx/imx23_usb.c
diff -u src/sys/arch/arm/imx/imx23_usb.c:1.1 src/sys/arch/arm/imx/imx23_usb.c:1.2
--- src/sys/arch/arm/imx/imx23_usb.c:1.1	Mon Oct  7 17:36:40 2013
+++ src/sys/arch/arm/imx/imx23_usb.c	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/* $Id: imx23_usb.c,v 1.1 2013/10/07 17:36:40 matt Exp $ */
+/* $Id: imx23_usb.c,v 1.2 2019/07/24 11:20:55 hkenken Exp $ */
 
 /*
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -43,6 +43,7 @@
 #include <dev/usb/ehcireg.h>
 #include <dev/usb/ehcivar.h>
 #include <arm/imx/imxusbvar.h>
+#include <arm/imx/imxusbreg.h>
 
 #include <arm/mainbus/mainbus.h>
 
@@ -54,7 +55,7 @@
 #include "locators.h"
 
 struct imx23_usb_softc {
-	struct imxusbc_softc  sc_imxusbc;
+	struct imxusbc_softc  sc_imxusbc; /* Must be first */
 };
 
 static int	imx23_usb_match(device_t, cfdata_t, void *);
@@ -94,9 +95,14 @@ imx23_usb_attach(device_t parent, device
 {
 	struct imxusbc_softc *sc = device_private(self);
 
+	sc->sc_dev = self;
+	sc->sc_iot = &imx23_bus_space;
+	sc->sc_ehci_size = IMXUSB_EHCI_SIZE;
+	sc->sc_ehci_offset = IMXUSB_EHCI_SIZE;
+
 	sc->sc_init_md_hook = imx23_usb_init;
+	sc->sc_intr_establish_md_hook = NULL;
 	sc->sc_setup_md_hook = NULL;
-	sc->sc_iot = &imx23_bus_space;
 
 	if (bus_space_map(sc->sc_iot, AHB_USB, AHB_USB_SIZE, 0, &sc->sc_ioh)) {
 		aprint_error_dev(sc->sc_dev, "Unable to map bus space");
Index: src/sys/arch/arm/imx/imx6_usbreg.h
diff -u src/sys/arch/arm/imx/imx6_usbreg.h:1.1 src/sys/arch/arm/imx/imx6_usbreg.h:1.2
--- src/sys/arch/arm/imx/imx6_usbreg.h:1.1	Thu Sep 25 05:05:28 2014
+++ src/sys/arch/arm/imx/imx6_usbreg.h	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imx6_usbreg.h,v 1.1 2014/09/25 05:05:28 ryo Exp $	*/
+/*	$NetBSD: imx6_usbreg.h,v 1.2 2019/07/24 11:20:55 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org>
@@ -63,8 +63,9 @@
 #define USBC_UH3_PORTSC1			0x00000784
 #define USBC_UH3_USBMODE			0x000007a8
 
-
-#define USBNC_USB_OTG_CTRL			0x00000800
+#define USBNC_BASE				0x00000800
+#define USBNC_SIZE				0x00000020
+#define USBNC_USB_OTG_CTRL			0x00000000
 #define  USBNC_USB_OTG_CTRL_WIR			__BIT(31)
 #define  USBNC_USB_OTG_CTRL_WKUP_VBUS_EN	__BIT(17)
 #define  USBNC_USB_OTG_CTRL_WKUP_ID_EN		__BIT(16)
@@ -75,7 +76,7 @@
 #define  USBNC_USB_OTG_CTRL_PWR_POL		__BIT(9)
 #define  USBNC_USB_OTG_CTRL_OVER_CUR_POL	__BIT(8)
 #define  USBNC_USB_OTG_CTRL_OVER_CUR_DIS	__BIT(7)
-#define USBNC_USB_UH1_CTRL			0x00000804
+#define USBNC_USB_UH1_CTRL			0x00000004
 #define  USBNC_USB_UH1_CTRL_WIR			__BIT(31)
 #define  USBNC_USB_UH1_CTRL_WKUP_VBUS_EN	__BIT(17)
 #define  USBNC_USB_UH1_CTRL_WKUP_ID_EN		__BIT(16)
@@ -86,27 +87,27 @@
 #define  USBNC_USB_UH1_CTRL_PWR_POL		__BIT(9)
 #define  USBNC_USB_UH1_CTRL_OVER_CUR_POL	__BIT(8)
 #define  USBNC_USB_UH1_CTRL_OVER_CUR_DIS	__BIT(7)
-#define USBNC_USB_UH2_CTRL			0x00000808
+#define USBNC_USB_UH2_CTRL			0x00000008
 #define  USBNC_USB_UH2_CTRL_WKUP_SW		__BIT(15)
 #define  USBNC_USB_UH2_CTRL_WKUP_SW_EN		__BIT(14)
 #define  USBNC_USB_UH2_CTRL_UTMI_ON_CLOCK	__BIT(13)
 #define  USBNC_USB_UH2_CTRL_WIE			__BIT(10)
-#define USBNC_USB_UH3_CTRL			0x0000080c
+#define USBNC_USB_UH3_CTRL			0x0000000c
 #define  USBNC_USB_UH3_CTRL_WKUP_SW		__BIT(15)
 #define  USBNC_USB_UH3_CTRL_WKUP_SW_EN		__BIT(14)
 #define  USBNC_USB_UH3_CTRL_UTMI_ON_CLOCK	__BIT(13)
 #define  USBNC_USB_UH3_CTRL_WIE			__BIT(10)
-#define USBNC_USB_UH2_HSIC_CTRL			0x00000810
+#define USBNC_USB_UH2_HSIC_CTRL			0x00000010
 #define  USBNC_USB_UH2_HSIC_CTRL_CLK_VLK	__BIT(31)
 #define  USBNC_USB_UH2_HSIC_CTRL_HSIC_EN	__BIT(12)
 #define  USBNC_USB_UH2_HSIC_CTRL_HSIC_CLK_ON	__BIT(11)
-#define USBNC_USB_UH3_HSIC_CTRL			0x00000814
+#define USBNC_USB_UH3_HSIC_CTRL			0x00000014
 #define  USBNC_USB_UH3_HSIC_CTRL_CLK_VLK	__BIT(31)
 #define  USBNC_USB_UH3_HSIC_CTRL_HSIC_EN	__BIT(12)
 #define  USBNC_USB_UH3_HSIC_CTRL_HSIC_CLK_ON	__BIT(11)
-#define USBNC_USB_OTG_PHY_CTRL_0		0x00000818
+#define USBNC_USB_OTG_PHY_CTRL_0		0x00000018
 #define  USBNC_USB_OTG_PHY_CTRL_0_UTMI_CLK_VLD	__BIT(31)
-#define USBNC_USB_UH1_PHY_CTRL_0		0x0000081c
+#define USBNC_USB_UH1_PHY_CTRL_0		0x0000001c
 #define  USBNC_USB_UH1_PHY_CTRL_0_UTMI_CLK_VLD	__BIT(31)
 
 #endif /* _IMX6_USBREG_H_ */
Index: src/sys/arch/arm/imx/imx7_usbreg.h
diff -u src/sys/arch/arm/imx/imx7_usbreg.h:1.1 src/sys/arch/arm/imx/imx7_usbreg.h:1.2
--- src/sys/arch/arm/imx/imx7_usbreg.h:1.1	Tue May 17 06:44:45 2016
+++ src/sys/arch/arm/imx/imx7_usbreg.h	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imx7_usbreg.h,v 1.1 2016/05/17 06:44:45 ryo Exp $	*/
+/*	$NetBSD: imx7_usbreg.h,v 1.2 2019/07/24 11:20:55 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2016 Ryo Shimizu <r...@nerv.org>
@@ -83,7 +83,9 @@
 #define  USB_X_USBMODE_CM			__BITS(1,0)
 
 /* USB Non-Core */
-#define USBNC_N_CTRL1				0x00000200
+#define USBNC_BASE				0x00000200
+#define USBNC_SIZE				0x00000060
+#define USBNC_N_CTRL1				0x00000000
 #define  USBNC_N_CTRL1_WIR			__BIT(31)
 #define  USBNC_N_CTRL1_WKUP_DPDM_EN		__BIT(29)
 #define  USBNC_N_CTRL1_WKUP_VBUS_EN		__BIT(17)
@@ -94,13 +96,13 @@
 #define  USBNC_N_CTRL1_PWR_POL			__BIT(9)
 #define  USBNC_N_CTRL1_OVER_CUR_POL		__BIT(8)
 #define  USBNC_N_CTRL1_OVER_CUR_DIS		__BIT(7)
-#define USBNC_N_CTRL2				0x00000204
-#define USBNC_N_PHY_CFG1			0x00000230
-#define USBNC_N_PHY_CFG2			0x00000234
-#define USBNC_N_PHY_STATUS			0x0000023c
-
-#define USBNC_ADP_CFG1				0x00000250
-#define USBNC_ADP_CFG2				0x00000254
-#define USBNC_ADP_STATUS			0x00000258
+#define USBNC_N_CTRL2				0x00000004
+#define USBNC_N_PHY_CFG1			0x00000030
+#define USBNC_N_PHY_CFG2			0x00000034
+#define USBNC_N_PHY_STATUS			0x0000003c
+
+#define USBNC_ADP_CFG1				0x00000050
+#define USBNC_ADP_CFG2				0x00000054
+#define USBNC_ADP_STATUS			0x00000058
 
 #endif /* _ARM_IMX_IMX7_USBREG_H_ */

Index: src/sys/arch/arm/imx/imx51_usb.c
diff -u src/sys/arch/arm/imx/imx51_usb.c:1.4 src/sys/arch/arm/imx/imx51_usb.c:1.5
--- src/sys/arch/arm/imx/imx51_usb.c:1.4	Sat Mar 17 18:34:09 2018
+++ src/sys/arch/arm/imx/imx51_usb.c	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imx51_usb.c,v 1.4 2018/03/17 18:34:09 ryo Exp $	*/
+/*	$NetBSD: imx51_usb.c,v 1.5 2019/07/24 11:20:55 hkenken Exp $	*/
 /*
  * Copyright (c) 2010  Genetec Corporation.  All rights reserved.
  * Written by Hiroyuki Bessho for Genetec Corporation.
@@ -25,8 +25,9 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imx51_usb.c,v 1.4 2018/03/17 18:34:09 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imx51_usb.c,v 1.5 2019/07/24 11:20:55 hkenken Exp $");
 
+#include "locators.h"
 #include "opt_imx.h"
 
 #include <sys/param.h>
@@ -48,22 +49,25 @@ __KERNEL_RCSID(0, "$NetBSD: imx51_usb.c,
 #include <arm/imx/imx51reg.h>
 #include <arm/imx/imx51var.h>
 #include <arm/imx/imxusbvar.h>
-#include "locators.h"
-
-static int 	imxusbc_search(device_t, cfdata_t, const int *, void *);
-static int	imxusbc_print(void *, const char *);
+#include <arm/imx/imxusbreg.h>
 
+static int imxusbc_search(device_t, cfdata_t, const int *, void *);
+static int imxusbc_print(void *, const char *);
 
 int
-imxusbc_attach_common(device_t parent, device_t self, bus_space_tag_t iot)
+imxusbc_attach_common(device_t parent, device_t self, bus_space_tag_t iot,
+    bus_addr_t addr, bus_size_t size)
 {
 	struct imxusbc_softc *sc = device_private(self);
 
+	sc->sc_dev = self;
 	sc->sc_iot = iot;
+	sc->sc_ehci_size = IMXUSB_EHCI_SIZE;
+	sc->sc_ehci_offset = IMXUSB_EHCI_SIZE;
 
 	/* Map entire USBOH3 registers.  Host controller drivers
 	 * re-use subregions of this. */
-	if (bus_space_map(iot, USBOH3_BASE, USBOH3_SIZE, 0, &sc->sc_ioh))
+	if (bus_space_map(iot, addr, size, 0, &sc->sc_ioh))
 		return -1;
 
 	/* attach OTG/EHCI host controllers */
@@ -78,16 +82,16 @@ imxusbc_search(device_t parent, cfdata_t
 	struct imxusbc_softc *sc = device_private(parent);
 	struct imxusbc_attach_args aa;
 
-        aa.aa_iot = sc->sc_iot;
+	aa.aa_iot = sc->sc_iot;
 	aa.aa_ioh = sc->sc_ioh;
 	aa.aa_dmat = &arm_generic_dma_tag;
-        aa.aa_unit = cf->cf_loc[IMXUSBCCF_UNIT];
+	aa.aa_unit = cf->cf_loc[IMXUSBCCF_UNIT];
 	aa.aa_irq = cf->cf_loc[IMXUSBCCF_IRQ];
 
-        if (config_match(parent, cf, &aa) > 0)
-                config_attach(parent, cf, &aa, imxusbc_print);
+	if (config_match(parent, cf, &aa) > 0)
+		config_attach(parent, cf, &aa, imxusbc_print);
 
-        return 0;
+	return 0;
 }
 
 /* ARGSUSED */

Index: src/sys/arch/arm/imx/imx6_reg.h
diff -u src/sys/arch/arm/imx/imx6_reg.h:1.8 src/sys/arch/arm/imx/imx6_reg.h:1.9
--- src/sys/arch/arm/imx/imx6_reg.h:1.8	Wed Jun 20 07:05:37 2018
+++ src/sys/arch/arm/imx/imx6_reg.h	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imx6_reg.h,v 1.8 2018/06/20 07:05:37 hkenken Exp $	*/
+/*	$NetBSD: imx6_reg.h,v 1.9 2019/07/24 11:20:55 hkenken Exp $	*/
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -220,7 +220,7 @@
 #define	AIPS2_MLB150_BASE	0x0008c000
 #define	AIPS2_ENET_BASE		0x00088000
 #define	AIPS2_USBOH_BASE	0x00084000
-#define	AIPS2_USBOH_SIZE	0x00000820
+#define	AIPS2_USBOH_SIZE	0x00000800
 #define	AIPS2_CONFIG_BASE	0x0007c000
 #define	AIPS2_DAP_BASE		0x00040000
 #define	AIPS2_CAAM_BASE		0x00000000

Index: src/sys/arch/arm/imx/imx6_usb.c
diff -u src/sys/arch/arm/imx/imx6_usb.c:1.5 src/sys/arch/arm/imx/imx6_usb.c:1.6
--- src/sys/arch/arm/imx/imx6_usb.c:1.5	Thu Jun 20 08:16:19 2019
+++ src/sys/arch/arm/imx/imx6_usb.c	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imx6_usb.c,v 1.5 2019/06/20 08:16:19 hkenken Exp $	*/
+/*	$NetBSD: imx6_usb.c,v 1.6 2019/07/24 11:20:55 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2012  Genetec Corporation.  All rights reserved.
@@ -26,7 +26,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imx6_usb.c,v 1.5 2019/06/20 08:16:19 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imx6_usb.c,v 1.6 2019/07/24 11:20:55 hkenken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -50,6 +50,7 @@ __KERNEL_RCSID(0, "$NetBSD: imx6_usb.c,v
 #include <arm/imx/imx6_ccmvar.h>
 #include <arm/imx/imx6_usbreg.h>
 #include <arm/imx/imxusbvar.h>
+#include <arm/imx/imxusbreg.h>
 
 #include "locators.h"
 
@@ -58,17 +59,21 @@ static int imxusbc_print(void *, const c
 static int imxusbc_init_clocks(struct imxusbc_softc *);
 
 int
-imxusbc_attach_common(device_t parent, device_t self, bus_space_tag_t iot)
+imxusbc_attach_common(device_t parent, device_t self, bus_space_tag_t iot,
+    bus_addr_t addr, bus_size_t size)
 {
-	struct imxusbc_softc *sc;
+	struct imxusbc_softc *sc = device_private(self);
 
-	sc = device_private(self);
+	sc->sc_dev = self;
 	sc->sc_iot = iot;
+	sc->sc_ehci_size = IMXUSB_EHCI_SIZE;
+	sc->sc_ehci_offset = IMXUSB_EHCI_SIZE;
 
 	/* Map entire USBOH registers.  Host controller drivers
 	 * re-use subregions of this. */
-	if (bus_space_map(iot, IMX6_AIPS2_BASE + AIPS2_USBOH_BASE,
-	    AIPS2_USBOH_SIZE, 0, &sc->sc_ioh))
+	if (bus_space_map(iot, addr, size, 0, &sc->sc_ioh))
+		return -1;
+	if (bus_space_subregion(iot, sc->sc_ioh, USBNC_BASE, USBNC_SIZE, &sc->sc_ioh_usbnc))
 		return -1;
 
 	sc->sc_clk = imx6_get_clock("usboh3");
Index: src/sys/arch/arm/imx/imxusbvar.h
diff -u src/sys/arch/arm/imx/imxusbvar.h:1.5 src/sys/arch/arm/imx/imxusbvar.h:1.6
--- src/sys/arch/arm/imx/imxusbvar.h:1.5	Thu Jun 20 08:16:19 2019
+++ src/sys/arch/arm/imx/imxusbvar.h	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imxusbvar.h,v 1.5 2019/06/20 08:16:19 hkenken Exp $	*/
+/*	$NetBSD: imxusbvar.h,v 1.6 2019/07/24 11:20:55 hkenken Exp $	*/
 /*
  * Copyright (c) 2019  Genetec Corporation.  All rights reserved.
  * Written by Hashimoto Kenichi for Genetec Corporation.
@@ -37,14 +37,19 @@ enum imx_usb_role {
 
 struct imxusbc_softc {
 	device_t sc_dev;
+
 	bus_space_tag_t sc_iot;
 	bus_space_handle_t sc_ioh;
+	bus_space_handle_t sc_ioh_usbnc;
 
 	struct clk *sc_clk;
 
 	/* filled in by platform dependent param & routine */
+	bus_addr_t sc_ehci_offset;
 	bus_size_t sc_ehci_size;
+
 	void (* sc_init_md_hook)(struct imxehci_softc *);
+	void *(* sc_intr_establish_md_hook)(struct imxehci_softc *);
 	void (* sc_setup_md_hook)(struct imxehci_softc *, enum imx_usb_role);
 };
 
@@ -68,14 +73,18 @@ enum imx_usb_if {
 struct imxehci_softc {
 	ehci_softc_t sc_hsc;
 
+	device_t sc_dev;
 	bus_space_tag_t sc_iot;
 	bus_space_handle_t sc_ioh;
+	void *sc_ih;
+
 	struct imxusbc_softc *sc_usbc;
+
 	uint sc_unit;
 	enum imx_usb_if sc_iftype;
 };
 
-int imxusbc_attach_common(device_t, device_t, bus_space_tag_t);
+int imxusbc_attach_common(device_t, device_t, bus_space_tag_t, bus_addr_t, bus_size_t);
 void imxehci_reset(struct imxehci_softc *);
 
 #endif	/* _ARM_IMX_IMXUSBVAR_H */

Index: src/sys/arch/arm/imx/imx7_usb.c
diff -u src/sys/arch/arm/imx/imx7_usb.c:1.3 src/sys/arch/arm/imx/imx7_usb.c:1.4
--- src/sys/arch/arm/imx/imx7_usb.c:1.3	Sat Mar 17 18:34:09 2018
+++ src/sys/arch/arm/imx/imx7_usb.c	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imx7_usb.c,v 1.3 2018/03/17 18:34:09 ryo Exp $	*/
+/*	$NetBSD: imx7_usb.c,v 1.4 2019/07/24 11:20:55 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2013  Genetec Corporation.  All rights reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imx7_usb.c,v 1.3 2018/03/17 18:34:09 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imx7_usb.c,v 1.4 2019/07/24 11:20:55 hkenken Exp $");
 
 #include "locators.h"
 
@@ -56,7 +56,6 @@ __KERNEL_RCSID(0, "$NetBSD: imx7_usb.c,v
 #include <arm/imx/imx7_srcreg.h>
 #include <arm/imx/imxusbreg.h>
 #include <arm/imx/imxusbvar.h>
-#include <arm/imx/imxgpiovar.h>
 
 static int imx7_usbc_match(device_t, cfdata_t, void *);
 static void imx7_usbc_attach(device_t, device_t, void *);
@@ -127,6 +126,7 @@ imx7_usbc_attach(device_t parent __unuse
 	sc->sc_init_md_hook = imx7_usb_init;
 	sc->sc_setup_md_hook = NULL;
 	sc->sc_ehci_size = IMX7_USBC_EHCISIZE;	/* ehci register stride */
+	sc->sc_ehci_offset = IMX7_USBC_EHCISIZE;
 
 	if (aa->aa_size == AXICF_SIZE_DEFAULT)
 		aa->aa_size = IMX7_USBC_SIZE;
@@ -141,12 +141,17 @@ imx7_usbc_attach(device_t parent __unuse
 		aprint_error_dev(self, "cannot map registers\n");
 		return;
 	}
+	if (bus_space_map(sc->sc_iot, aa->aa_addr + USBNC_BASE, aa->aa_size, 0,
+	    &sc->sc_ioh_usbnc)) {
+		aprint_error_dev(self, "cannot map registers\n");
+		return;
+	}
 
 	/* disable clock */
 	imx7_ccm_write(CCM_CCGR_USB_HSIC_CLR, CCM_CCGR_MASK);
 
 	/* set freq */
-	imx7_ccm_write(CCM_CLKROOT_USB_HSIC_CLK_ROOT, 
+	imx7_ccm_write(CCM_CLKROOT_USB_HSIC_CLK_ROOT,
 	    CCM_TARGET_ROOT_ENABLE |
 	    __SHIFTIN(1, CCM_TARGET_ROOT_MUX) |
 	    __SHIFTIN(0, CCM_TARGET_ROOT_PRE_PODF) |
@@ -170,6 +175,10 @@ imx7_usbc_attach(device_t parent __unuse
 	bus_space_read_4((sc)->sc_iot, (sc)->sc_ioh, reg)
 #define EHCIREG_WRITE(sc, reg, value)	\
 	bus_space_write_4((sc)->sc_iot, (sc)->sc_ioh, reg, value)
+#define USBNC_READ(sc, reg)	\
+	bus_space_read_4((sc)->sc_iot, (sc)->sc_ioh_usbnc, reg)
+#define USBNC_WRITE(sc, reg, value)	\
+	bus_space_write_4((sc)->sc_iot, (sc)->sc_ioh_usbnc, reg, value)
 
 static void
 imx7_usb_init(struct imxehci_softc *sc)
@@ -182,13 +191,13 @@ imx7_usb_init(struct imxehci_softc *sc)
 	usbc = sc->sc_usbc;
 
 	/* setup overcurrent */
-	v = EHCIREG_READ(sc, USBNC_N_CTRL1);
+	v = USBNC_READ(usbc, USBNC_N_CTRL1);
 	v |= USBNC_N_CTRL1_OVER_CUR_POL;
-	EHCIREG_WRITE(sc, USBNC_N_CTRL1, v);
+	USBNC_WRITE(usbc, USBNC_N_CTRL1, v);
 
-	v = EHCIREG_READ(sc, USBNC_N_CTRL1);
+	v = USBNC_READ(usbc, USBNC_N_CTRL1);
 	v |= USBNC_N_CTRL1_OVER_CUR_DIS | USBNC_N_CTRL1_PWR_POL;
-	EHCIREG_WRITE(sc, USBNC_N_CTRL1, v);
+	USBNC_WRITE(usbc, USBNC_N_CTRL1, v);
 
 	/* set host mode */
 	v = EHCIREG_READ(sc, USB_X_USBMODE);

Index: src/sys/arch/arm/imx/imxusb.c
diff -u src/sys/arch/arm/imx/imxusb.c:1.13 src/sys/arch/arm/imx/imxusb.c:1.14
--- src/sys/arch/arm/imx/imxusb.c:1.13	Mon Apr  9 16:21:09 2018
+++ src/sys/arch/arm/imx/imxusb.c	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: imxusb.c,v 1.13 2018/04/09 16:21:09 jakllsch Exp $	*/
+/*	$NetBSD: imxusb.c,v 1.14 2019/07/24 11:20:55 hkenken Exp $	*/
 /*
  * Copyright (c) 2009, 2010  Genetec Corporation.  All rights reserved.
  * Written by Hashimoto Kenichi and Hiroyuki Bessho for Genetec Corporation.
@@ -25,8 +25,9 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imxusb.c,v 1.13 2018/04/09 16:21:09 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imxusb.c,v 1.14 2019/07/24 11:20:55 hkenken Exp $");
 
+#include "locators.h"
 #include "opt_imx.h"
 
 #include <sys/param.h>
@@ -49,8 +50,6 @@ __KERNEL_RCSID(0, "$NetBSD: imxusb.c,v 1
 
 #include <arm/imx/imxusbreg.h>
 #include <arm/imx/imxusbvar.h>
-#include <arm/imx/imxgpiovar.h>
-#include "locators.h"
 
 #include <dev/usb/ulpireg.h>	/* for test */
 
@@ -73,9 +72,8 @@ imxehci_match(device_t parent, cfdata_t 
 {
 	struct imxusbc_attach_args *aa = aux;
 
-	if (aa->aa_unit < 0 || 3 < aa->aa_unit) {
+	if (aa->aa_unit < 0 || 3 < aa->aa_unit)
 		return 0;
-	}
 
 	return 1;
 }
@@ -92,11 +90,17 @@ imxehci_attach(device_t parent, device_t
 	uint32_t id, hwhost, hwdevice;
 	const char *comma;
 
-	sc->sc_hsc.sc_dev = self;
-	iot = sc->sc_iot = sc->sc_hsc.iot = aa->aa_iot;
+	iot = aa->aa_iot;
+
+	sc->sc_dev = self;
 	sc->sc_unit = aa->aa_unit;
 	sc->sc_usbc = usbc;
+	sc->sc_iot = iot;
+
+	hsc->sc_dev = self;
+	hsc->iot = iot;
 	hsc->sc_bus.ub_hcpriv = sc;
+	hsc->sc_bus.ub_dmatag = aa->aa_dmat;
 	hsc->sc_flags |= EHCIF_ETTF;
 	hsc->sc_vendor_init = imxehci_init;
 
@@ -108,19 +112,19 @@ imxehci_attach(device_t parent, device_t
 
 	/* per unit registers */
 	if (bus_space_subregion(iot, aa->aa_ioh,
-		aa->aa_unit * usbc->sc_ehci_size, usbc->sc_ehci_size,
+		sc->sc_unit * usbc->sc_ehci_offset, usbc->sc_ehci_size,
 		&sc->sc_ioh) ||
 	    bus_space_subregion(iot, aa->aa_ioh,
-		aa->aa_unit * usbc->sc_ehci_size + IMXUSB_EHCIREGS,
+		sc->sc_unit * usbc->sc_ehci_offset + IMXUSB_EHCIREGS,
 		usbc->sc_ehci_size - IMXUSB_EHCIREGS,
-		&sc->sc_hsc.ioh)) {
+		&hsc->ioh)) {
 
 		aprint_error_dev(self, "can't subregion\n");
 		return;
 	}
 
 	id = bus_space_read_4(iot, sc->sc_ioh, IMXUSB_ID);
-	hcirev = bus_space_read_2(iot, sc->sc_hsc.ioh, EHCI_HCIVERSION);
+	hcirev = bus_space_read_2(iot, hsc->ioh, EHCI_HCIVERSION);
 
 	aprint_normal_dev(self,
 	    "id=%d revision=%d HCI revision=0x%x\n",
@@ -149,9 +153,7 @@ imxehci_attach(device_t parent, device_t
 	}
 	aprint_normal("\n");
 
-	sc->sc_hsc.sc_bus.ub_dmatag = aa->aa_dmat;
-
-	sc->sc_hsc.sc_offs = bus_space_read_1(iot, sc->sc_hsc.ioh,
+	hsc->sc_offs = bus_space_read_1(iot, hsc->ioh,
 	    EHCI_CAPLENGTH);
 
 	/* Platform dependent setup */
@@ -193,14 +195,17 @@ imxehci_attach(device_t parent, device_t
 		    OTG_CONTROL_USEEXTVBUSIND |
 		    OTG_CONTROL_DRVVBUSEXT |
 		    OTG_CONTROL_DRVVBUS |
-		    OTG_CONTROL_CHRGVBUS
-		    );
+		    OTG_CONTROL_CHRGVBUS);
 	}
 
 	/* Disable interrupts, so we don't get any spurious ones. */
 	EOWRITE4(hsc, EHCI_USBINTR, 0);
 
-	intr_establish(aa->aa_irq, IPL_USB, IST_LEVEL, ehci_intr, hsc);
+	if (usbc->sc_intr_establish_md_hook)
+		sc->sc_ih = usbc->sc_intr_establish_md_hook(sc);
+	else if (aa->aa_irq > 0)
+		sc->sc_ih = intr_establish(aa->aa_irq, IPL_USB, IST_LEVEL, ehci_intr, hsc);
+	KASSERT(sc->sc_ih != NULL);
 
 	int err = ehci_init(hsc);
 	if (err) {
@@ -245,25 +250,25 @@ imxehci_select_interface(struct imxehci_
 static uint32_t
 ulpi_wakeup(struct imxehci_softc *sc, int tout)
 {
+	struct ehci_softc *hsc = &sc->sc_hsc;
 	uint32_t ulpi_view;
-	int i = 0;
+
 	ulpi_view = bus_space_read_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW);
 
-	if ( !(ulpi_view & ULPI_SS) ) {
+	if (!(ulpi_view & ULPI_SS)) {
 		bus_space_write_4(sc->sc_iot, sc->sc_ioh,
 		    IMXUSB_ULPIVIEW, ULPI_WU);
-		for (i = 0; (tout < 0) || (i < tout); i++) {
+		while (tout-- > 0) {
 			ulpi_view = bus_space_read_4(sc->sc_iot,
 			    sc->sc_ioh, IMXUSB_ULPIVIEW);
-			if ( !(ulpi_view & ULPI_WU) )
+			if (!(ulpi_view & ULPI_WU))
 				break;
 			delay(1);
 		};
 	}
 
-	if ((tout > 0) && (i >= tout)) {
-		aprint_error_dev(sc->sc_hsc.sc_dev, "%s: timeout\n", __func__);
-	}
+	if (tout == 0)
+		aprint_error_dev(hsc->sc_dev, "%s: timeout\n", __func__);
 
 	return ulpi_view;
 }
@@ -271,11 +276,12 @@ ulpi_wakeup(struct imxehci_softc *sc, in
 static uint32_t
 ulpi_wait(struct imxehci_softc *sc, int tout)
 {
+	struct ehci_softc *hsc = &sc->sc_hsc;
 	uint32_t ulpi_view;
-	int i;
+
 	ulpi_view = bus_space_read_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW);
 
-	for (i = 0; (tout < 0) | (i < tout); i++) {
+	while (tout-- > 0) {
 		ulpi_view = bus_space_read_4(sc->sc_iot, sc->sc_ioh,
 		    IMXUSB_ULPIVIEW);
 		if (!(ulpi_view & ULPI_RUN))
@@ -283,9 +289,8 @@ ulpi_wait(struct imxehci_softc *sc, int 
 		delay(1);
 	}
 
-	if ((tout > 0) && (i >= tout)) {
-		aprint_error_dev(sc->sc_hsc.sc_dev, "%s: timeout\n", __func__);
-	}
+	if (tout == 0)
+		aprint_error_dev(hsc->sc_dev, "%s: timeout\n", __func__);
 
 	return ulpi_view;
 }
@@ -295,16 +300,16 @@ ulpi_wait(struct imxehci_softc *sc, int 
 uint8_t
 imxusb_ulpi_read(struct imxehci_softc *sc, int addr)
 {
-	uint32_t data;
+	uint32_t reg;
 
 	ulpi_wakeup(sc, TIMEOUT);
 
-	data = ULPI_RUN | __SHIFTIN(addr, ULPI_ADDR);
-	bus_space_write_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW, data);
+	reg = ULPI_RUN | __SHIFTIN(addr, ULPI_ADDR);
+	bus_space_write_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW, reg);
 
-	data = ulpi_wait(sc, TIMEOUT);
+	reg = ulpi_wait(sc, TIMEOUT);
 
-	return __SHIFTOUT(data, ULPI_DATRD);
+	return __SHIFTOUT(reg, ULPI_DATRD);
 }
 
 void
@@ -322,34 +327,10 @@ imxusb_ulpi_write(struct imxehci_softc *
 	return;
 }
 
-#if 0
-static int
-ulpi_scratch_test(struct imxehci_softc *sc)
-{
-	uint32_t ulpi_view;
-
-	ulpi_view = ulpi_wakeup(sc, 1000);
-	if (ulpi_view & ULPI_WU) {
-		return -1;
-	}
-
-	bus_space_write_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW,
-		(ULPI_RUN | ULPI_RW |
-		 (ULPI_SCRATCH << ULPI_ADDR_SHIFT) | 0xAA));
-
-	ulpi_view = ulpi_wait(sc, 1000);
-
-	if (ulpi_view & ULPI_RUN) {
-		return -1;
-	}
-
-	return 0;
-}
-#endif
-
 static void
 ulpi_reset(struct imxehci_softc *sc)
 {
+	struct ehci_softc *hsc = &sc->sc_hsc;
 	uint8_t data;
 	int timo = 1000 * 1000;	/* XXXX: 1sec */
 
@@ -362,8 +343,9 @@ ulpi_reset(struct imxehci_softc *sc)
 		delay(100);
 		timo -= 100;
 	} while (timo > 0);
+
 	if (timo <= 0) {
-		aprint_error_dev(sc->sc_hsc.sc_dev, "%s: reset failed!!\n",
+		aprint_error_dev(hsc->sc_dev, "%s: reset failed!!\n",
 		    __func__);
 		return;
 	}
@@ -375,15 +357,15 @@ void
 imxehci_reset(struct imxehci_softc *sc)
 {
 	uint32_t reg;
-	int i;
 	struct ehci_softc *hsc = &sc->sc_hsc;
+	int tout;
 #define	RESET_TIMEOUT 100
 
 	reg = EOREAD4(hsc, EHCI_USBCMD);
 	reg &= ~EHCI_CMD_RS;
 	EOWRITE4(hsc, EHCI_USBCMD, reg);
 
-	for (i=0; i < RESET_TIMEOUT; ++i) {
+	for (tout = RESET_TIMEOUT; tout > 0; tout--) {
 		reg = EOREAD4(hsc, EHCI_USBCMD);
 		if ((reg & EHCI_CMD_RS) == 0)
 			break;
@@ -391,15 +373,16 @@ imxehci_reset(struct imxehci_softc *sc)
 	}
 
 	EOWRITE4(hsc, EHCI_USBCMD, reg | EHCI_CMD_HCRESET);
-	for (i = 0; i < RESET_TIMEOUT; i++) {
+
+	for (tout = RESET_TIMEOUT; tout > 0; tout--) {
 		reg = EOREAD4(hsc, EHCI_USBCMD);
 		if ((reg &  EHCI_CMD_HCRESET) == 0)
 			break;
 		usb_delay_ms(&hsc->sc_bus, 1);
 	}
-	if (i >= RESET_TIMEOUT) {
+
+	if (tout == 0)
 		aprint_error_dev(hsc->sc_dev, "reset timeout (%x)\n", reg);
-	}
 
 	usb_delay_ms(&hsc->sc_bus, 100);
 }

Index: src/sys/arch/evbarm/kobo/kobo_usb.c
diff -u src/sys/arch/evbarm/kobo/kobo_usb.c:1.2 src/sys/arch/evbarm/kobo/kobo_usb.c:1.3
--- src/sys/arch/evbarm/kobo/kobo_usb.c:1.2	Fri Sep 22 15:37:13 2017
+++ src/sys/arch/evbarm/kobo/kobo_usb.c	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kobo_usb.c,v 1.2 2017/09/22 15:37:13 khorben Exp $	*/
+/*	$NetBSD: kobo_usb.c,v 1.3 2019/07/24 11:20:55 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2012  Genetec Corporation.  All rights reserved.
@@ -27,7 +27,7 @@
  *
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobo_usb.c,v 1.2 2017/09/22 15:37:13 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobo_usb.c,v 1.3 2019/07/24 11:20:55 hkenken Exp $");
 
 #include "opt_imx.h"
 
@@ -39,7 +39,6 @@ __KERNEL_RCSID(0, "$NetBSD: kobo_usb.c,v
 #include <sys/device.h>
 #include <sys/intr.h>
 #include <sys/bus.h>
-#include <sys/gpio.h>
 
 #include <dev/usb/usb.h>
 #include <dev/usb/usbdi.h>
@@ -54,14 +53,13 @@ __KERNEL_RCSID(0, "$NetBSD: kobo_usb.c,v
 #include <arm/imx/imxusbreg.h>
 #include <arm/imx/imxusbvar.h>
 #include <arm/imx/imx50_iomuxreg.h>
-#include <arm/imx/imxgpiovar.h>
 #include <arm/imx/imx51_ccmreg.h>
 #include <arm/imx/imx51_ccmvar.h>
 
 #include "locators.h"
 
 struct kobo_usbc_softc {
-	struct imxusbc_softc sc_imxusbc;
+	struct imxusbc_softc sc_imxusbc; /* Must be first */
 };
 
 static int	imxusbc_match(device_t, cfdata_t, void *);
@@ -90,16 +88,20 @@ imxusbc_match(device_t parent, cfdata_t 
 static void
 imxusbc_attach(device_t parent, device_t self, void *aux)
 {
+	struct imxusbc_softc *sc = device_private(self);
 	struct axi_attach_args *aa = aux;
-	struct kobo_usbc_softc *sc = device_private(self);
 
 	aprint_normal("\n");
-	aprint_naive("\n");
+	aprint_normal(": Universal Serial Bus Controller\n");
 
-	sc->sc_imxusbc.sc_init_md_hook = kobo_usb_init;
-	sc->sc_imxusbc.sc_setup_md_hook = NULL;
+	if (aa->aa_size == AXICF_SIZE_DEFAULT)
+		aa->aa_size = USBOH3_SIZE;
 
-	imxusbc_attach_common(parent, self, aa->aa_iot);
+	sc->sc_init_md_hook = kobo_usb_init;
+	sc->sc_intr_establish_md_hook = NULL;
+	sc->sc_setup_md_hook = NULL;
+
+	imxusbc_attach_common(parent, self, aa->aa_iot, aa->aa_addr, aa->aa_size);
 }
 
 static void

Index: src/sys/arch/evbarm/netwalker/netwalker_usb.c
diff -u src/sys/arch/evbarm/netwalker/netwalker_usb.c:1.4 src/sys/arch/evbarm/netwalker/netwalker_usb.c:1.5
--- src/sys/arch/evbarm/netwalker/netwalker_usb.c:1.4	Fri Sep 22 15:37:13 2017
+++ src/sys/arch/evbarm/netwalker/netwalker_usb.c	Wed Jul 24 11:20:55 2019
@@ -25,7 +25,7 @@
  *
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netwalker_usb.c,v 1.4 2017/09/22 15:37:13 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netwalker_usb.c,v 1.5 2019/07/24 11:20:55 hkenken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -51,12 +51,10 @@ __KERNEL_RCSID(0, "$NetBSD: netwalker_us
 #include <arm/imx/imxgpiovar.h>
 #include "locators.h"
 
-
 struct netwalker_usbc_softc {
-	struct imxusbc_softc  sc_imxusbc;
+	struct imxusbc_softc sc_imxusbc; /* Must be first */
 };
 
-
 static int	imxusbc_match(device_t, cfdata_t, void *);
 static void	imxusbc_attach(device_t, device_t, void *);
 static void	netwalker_usb_init(struct imxehci_softc *);
@@ -85,14 +83,20 @@ imxusbc_match(device_t parent, cfdata_t 
 static void
 imxusbc_attach(device_t parent, device_t self, void *aux)
 {
-	struct axi_attach_args *aa = aux;
 	struct imxusbc_softc *sc = device_private(self);
+	struct axi_attach_args *aa = aux;
+
+	aprint_normal("\n");
+	aprint_normal(": Universal Serial Bus Controller\n");
+
+	if (aa->aa_size == AXICF_SIZE_DEFAULT)
+		aa->aa_size = USBOH3_SIZE;
 
 	sc->sc_init_md_hook = netwalker_usb_init;
+	sc->sc_intr_establish_md_hook = NULL;
 	sc->sc_setup_md_hook = NULL;
 
-	imxusbc_attach_common(parent, self, aa->aa_iot);
-
+	imxusbc_attach_common(parent, self, aa->aa_iot, aa->aa_addr, aa->aa_size);
 }
 
 static void
@@ -134,9 +138,6 @@ init_otg(struct imxehci_softc *sc)
 	bus_space_write_4(usbc->sc_iot, usbc->sc_ioh, USBOH3_PHYCTRL1, reg);
 }
 
-
-
-
 static void
 init_h1(struct imxehci_softc *sc)
 {

Index: src/sys/arch/evbarm/nitrogen6/nitrogen6_usb.c
diff -u src/sys/arch/evbarm/nitrogen6/nitrogen6_usb.c:1.5 src/sys/arch/evbarm/nitrogen6/nitrogen6_usb.c:1.6
--- src/sys/arch/evbarm/nitrogen6/nitrogen6_usb.c:1.5	Thu Jun 20 08:16:19 2019
+++ src/sys/arch/evbarm/nitrogen6/nitrogen6_usb.c	Wed Jul 24 11:20:55 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nitrogen6_usb.c,v 1.5 2019/06/20 08:16:19 hkenken Exp $	*/
+/*	$NetBSD: nitrogen6_usb.c,v 1.6 2019/07/24 11:20:55 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2013  Genetec Corporation.  All rights reserved.
@@ -27,7 +27,9 @@
  *
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nitrogen6_usb.c,v 1.5 2019/06/20 08:16:19 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nitrogen6_usb.c,v 1.6 2019/07/24 11:20:55 hkenken Exp $");
+
+#include "locators.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -53,11 +55,9 @@ __KERNEL_RCSID(0, "$NetBSD: nitrogen6_us
 #include <arm/imx/imx6_iomuxreg.h>
 #include <arm/imx/imxusbreg.h>
 #include <arm/imx/imxusbvar.h>
-#include <arm/imx/imxgpiovar.h>
-#include "locators.h"
 
 struct nitrogen6_usbc_softc {
-	struct imxusbc_softc sc_imxusbc;
+	struct imxusbc_softc sc_imxusbc; /* Must be first */
 };
 
 static int nitrogen6_usbc_match(device_t, cfdata_t, void *);
@@ -85,16 +85,20 @@ nitrogen6_usbc_match(device_t parent, cf
 static void
 nitrogen6_usbc_attach(device_t parent, device_t self, void *aux)
 {
-	struct axi_attach_args *aa = aux;
 	struct imxusbc_softc *sc = device_private(self);
-
-	sc->sc_init_md_hook = nitrogen6_usb_init;
-	sc->sc_setup_md_hook = NULL;
+	struct axi_attach_args *aa = aux;
 
 	aprint_naive("\n");
 	aprint_normal(": Universal Serial Bus Controller\n");
 
-	imxusbc_attach_common(parent, self, aa->aa_iot);
+	if (aa->aa_size == AXICF_SIZE_DEFAULT)
+		aa->aa_size = AIPS2_USBOH_SIZE + USBNC_SIZE;
+
+	sc->sc_init_md_hook = nitrogen6_usb_init;
+	sc->sc_intr_establish_md_hook = NULL;
+	sc->sc_setup_md_hook = NULL;
+
+	imxusbc_attach_common(parent, self, aa->aa_iot, aa->aa_addr, aa->aa_size);
 }
 
 static void
@@ -125,12 +129,12 @@ init_otg(struct imxehci_softc *sc)
 
 	imxehci_reset(sc);
 
-	v = bus_space_read_4(usbc->sc_iot, usbc->sc_ioh, USBNC_USB_OTG_CTRL);
+	v = bus_space_read_4(usbc->sc_iot, usbc->sc_ioh_usbnc, USBNC_USB_OTG_CTRL);
 	v |= USBNC_USB_OTG_CTRL_WKUP_VBUS_EN;
 	v |= USBNC_USB_OTG_CTRL_OVER_CUR_DIS;
 	v |= USBNC_USB_OTG_CTRL_PWR_POL;
 	v &= ~USBNC_USB_OTG_CTRL_UTMI_ON_CLOCK;
-	bus_space_write_4(usbc->sc_iot, usbc->sc_ioh, USBNC_USB_OTG_CTRL, v);
+	bus_space_write_4(usbc->sc_iot, usbc->sc_ioh_usbnc, USBNC_USB_OTG_CTRL, v);
 }
 
 static void
@@ -141,17 +145,17 @@ init_h1(struct imxehci_softc *sc)
 
 	sc->sc_iftype = IMXUSBC_IF_UTMI_WIDE;
 
-	v = bus_space_read_4(usbc->sc_iot, usbc->sc_ioh, USBNC_USB_UH1_CTRL);
+	v = bus_space_read_4(usbc->sc_iot, usbc->sc_ioh_usbnc, USBNC_USB_UH1_CTRL);
 	v |= USBNC_USB_UH1_CTRL_OVER_CUR_POL;
 	v |= USBNC_USB_UH1_CTRL_OVER_CUR_DIS;
-	bus_space_write_4(usbc->sc_iot, usbc->sc_ioh, USBNC_USB_UH1_CTRL, v);
+	bus_space_write_4(usbc->sc_iot, usbc->sc_ioh_usbnc, USBNC_USB_UH1_CTRL, v);
 
 	/* do reset */
 	imxehci_reset(sc);
 
 	/* set mode */
 	v = bus_space_read_4(usbc->sc_iot, usbc->sc_ioh, USBC_UH1_USBMODE);
-	v &= ~__SHIFTIN(USBC_UH_USBMODE_CM, 3);
-	v |= __SHIFTIN(USBC_UH_USBMODE_CM, USBC_UH_USBMODE_CM_HOST_CONTROLLER);
+	v &= ~USBC_UH_USBMODE_CM;
+	v |= __SHIFTIN(USBC_UH_USBMODE_CM_HOST_CONTROLLER, USBC_UH_USBMODE_CM);
 	bus_space_write_4(usbc->sc_iot, usbc->sc_ioh, USBC_UH1_USBMODE, v);
 }

Reply via email to