Module Name:    src
Committed By:   skrll
Date:           Fri Mar 10 15:44:24 UTC 2017

Modified Files:
        src/sys/arch/arm/marvell: armadaxpreg.h mvsoc.c mvsoc_space.c
            mvsocvar.h pci_machdep.c
        src/sys/arch/evbarm/armadaxp: armadaxp_machdep.c

Log Message:
Initialise the windows and allow access to PCI Express port 1 first lane.

Allows xhci(4) to attach in the MV78230 based Lenovo ix4-300d

mvpex1 at mvsoc0 unit 4 offset 0x80000-0x81fff irq 62: Marvell PCI Express 
Interface
pci1 at mvpex1
xhci0 at pci1 dev 1 function 0: vendor 1033 product 0194 (rev. 0x04)
xhci0: interrupting at interrupt pin INTA#
usb3 at xhci0: USB revision 3.0
usb4 at xhci0: USB revision 2.0


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/marvell/armadaxpreg.h
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/marvell/mvsoc.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/marvell/mvsoc_space.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/marvell/mvsocvar.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/marvell/pci_machdep.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/evbarm/armadaxp/armadaxp_machdep.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/marvell/armadaxpreg.h
diff -u src/sys/arch/arm/marvell/armadaxpreg.h:1.7 src/sys/arch/arm/marvell/armadaxpreg.h:1.8
--- src/sys/arch/arm/marvell/armadaxpreg.h:1.7	Sat Jan  7 15:47:33 2017
+++ src/sys/arch/arm/marvell/armadaxpreg.h	Fri Mar 10 15:44:24 2017
@@ -98,7 +98,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
 #define ARMADAXP_ATTR_NAND_RESERVED	0x20
 
 /* PCIe Attributes */
-/* port 0, 1 has 4 lanes */
+/* port 0 has 4 lanes. port 1 has either 4 or 1 lanes. */
 #define ARMADAXP_ATTR_PEXx0_MEM		0xe8
 #define ARMADAXP_ATTR_PEXx0_IO		0xe0
 #define ARMADAXP_ATTR_PEXx1_MEM		0xd8

Index: src/sys/arch/arm/marvell/mvsoc.c
diff -u src/sys/arch/arm/marvell/mvsoc.c:1.28 src/sys/arch/arm/marvell/mvsoc.c:1.29
--- src/sys/arch/arm/marvell/mvsoc.c:1.28	Fri Feb 24 17:07:13 2017
+++ src/sys/arch/arm/marvell/mvsoc.c	Fri Mar 10 15:44:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsoc.c,v 1.28 2017/02/24 17:07:13 skrll Exp $	*/
+/*	$NetBSD: mvsoc.c,v 1.29 2017/03/10 15:44:24 skrll Exp $	*/
 /*
  * Copyright (c) 2007, 2008, 2013, 2014, 2016 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.28 2017/02/24 17:07:13 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.29 2017/03/10 15:44:24 skrll Exp $");
 
 #include "opt_cputypes.h"
 #include "opt_mvsoc.h"
@@ -285,26 +285,52 @@ static struct {
 	  ARMADAXP_ATTR_PEXx0_MEM,	ARMADAXP_UNITID_PEX0 },
 	{ ARMADAXP_TAG_PEX00_IO,
 	  ARMADAXP_ATTR_PEXx0_IO,	ARMADAXP_UNITID_PEX0 },
+
 	{ ARMADAXP_TAG_PEX01_MEM,
 	  ARMADAXP_ATTR_PEXx1_MEM,	ARMADAXP_UNITID_PEX0 },
 	{ ARMADAXP_TAG_PEX01_IO,
 	  ARMADAXP_ATTR_PEXx1_IO,	ARMADAXP_UNITID_PEX0 },
+
 	{ ARMADAXP_TAG_PEX02_MEM,
 	  ARMADAXP_ATTR_PEXx2_MEM,	ARMADAXP_UNITID_PEX0 },
 	{ ARMADAXP_TAG_PEX02_IO,
 	  ARMADAXP_ATTR_PEXx2_IO,	ARMADAXP_UNITID_PEX0 },
+
 	{ ARMADAXP_TAG_PEX03_MEM,
 	  ARMADAXP_ATTR_PEXx3_MEM,	ARMADAXP_UNITID_PEX0 },
 	{ ARMADAXP_TAG_PEX03_IO,
 	  ARMADAXP_ATTR_PEXx3_IO,	ARMADAXP_UNITID_PEX0 },
+
+	{ ARMADAXP_TAG_PEX10_MEM,
+	  ARMADAXP_ATTR_PEXx0_MEM,	ARMADAXP_UNITID_PEX1 },
+	{ ARMADAXP_TAG_PEX10_IO,
+	  ARMADAXP_ATTR_PEXx0_IO,	ARMADAXP_UNITID_PEX1 },
+
+	{ ARMADAXP_TAG_PEX11_MEM,
+	  ARMADAXP_ATTR_PEXx1_MEM,	ARMADAXP_UNITID_PEX1 },
+	{ ARMADAXP_TAG_PEX11_IO,
+	  ARMADAXP_ATTR_PEXx1_IO,	ARMADAXP_UNITID_PEX1 },
+
+	{ ARMADAXP_TAG_PEX12_MEM,
+	  ARMADAXP_ATTR_PEXx2_MEM,	ARMADAXP_UNITID_PEX1 },
+	{ ARMADAXP_TAG_PEX12_IO,
+	  ARMADAXP_ATTR_PEXx2_IO,	ARMADAXP_UNITID_PEX1 },
+
+	{ ARMADAXP_TAG_PEX13_MEM,
+	  ARMADAXP_ATTR_PEXx3_MEM,	ARMADAXP_UNITID_PEX1 },
+	{ ARMADAXP_TAG_PEX13_IO,
+	  ARMADAXP_ATTR_PEXx3_IO,	ARMADAXP_UNITID_PEX1 },
+
 	{ ARMADAXP_TAG_PEX2_MEM,
 	  ARMADAXP_ATTR_PEX2_MEM,	ARMADAXP_UNITID_PEX2 },
 	{ ARMADAXP_TAG_PEX2_IO,
 	  ARMADAXP_ATTR_PEX2_IO,	ARMADAXP_UNITID_PEX2 },
+
 	{ ARMADAXP_TAG_PEX3_MEM,
 	  ARMADAXP_ATTR_PEX3_MEM,	ARMADAXP_UNITID_PEX3 },
 	{ ARMADAXP_TAG_PEX3_IO,
 	  ARMADAXP_ATTR_PEX3_IO,	ARMADAXP_UNITID_PEX3 },
+
 	{ ARMADAXP_TAG_CRYPT0,
 	  ARMADAXP_ATTR_CRYPT0_NOSWAP,	ARMADAXP_UNITID_CRYPT },
 	{ ARMADAXP_TAG_CRYPT1,
@@ -853,7 +879,9 @@ static const struct mvsoc_periph {
     { ARMADAXP(MV78230), "mvpex",  1, ARMADAXP_PEX01_BASE,ARMADAXP_IRQ_PEX01 },
     { ARMADAXP(MV78230), "mvpex",  2, ARMADAXP_PEX02_BASE,ARMADAXP_IRQ_PEX02 },
     { ARMADAXP(MV78230), "mvpex",  3, ARMADAXP_PEX03_BASE,ARMADAXP_IRQ_PEX03 },
-    { ARMADAXP(MV78230), "mvpex",  4, ARMADAXP_PEX2_BASE,ARMADAXP_IRQ_PEX2 },
+    { ARMADAXP(MV78230), "mvpex",  4, ARMADAXP_PEX10_BASE,ARMADAXP_IRQ_PEX10 },
+    { ARMADAXP(MV78230), "mvpex",  5, ARMADAXP_PEX2_BASE,ARMADAXP_IRQ_PEX2 },
+    { ARMADAXP(MV78230), "mvpex",  6, ARMADAXP_PEX3_BASE,ARMADAXP_IRQ_PEX3 },
     { ARMADAXP(MV78230), "mvsata", 0, ARMADAXP_SATAHC_BASE,ARMADAXP_IRQ_SATA0 },
     { ARMADAXP(MV78230), "mvspi",  0, ARMADAXP_SPI_BASE,ARMADAXP_IRQ_SPI },
     { ARMADAXP(MV78230), "mvsdio", 0, ARMADAXP_SDIO_BASE,ARMADAXP_IRQ_SDIO },

Index: src/sys/arch/arm/marvell/mvsoc_space.c
diff -u src/sys/arch/arm/marvell/mvsoc_space.c:1.8 src/sys/arch/arm/marvell/mvsoc_space.c:1.9
--- src/sys/arch/arm/marvell/mvsoc_space.c:1.8	Sat Jan  7 16:19:28 2017
+++ src/sys/arch/arm/marvell/mvsoc_space.c	Fri Mar 10 15:44:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsoc_space.c,v 1.8 2017/01/07 16:19:28 kiyohara Exp $	*/
+/*	$NetBSD: mvsoc_space.c,v 1.9 2017/03/10 15:44:24 skrll Exp $	*/
 /*
  * Copyright (c) 2007 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsoc_space.c,v 1.8 2017/01/07 16:19:28 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsoc_space.c,v 1.9 2017/03/10 15:44:24 skrll Exp $");
 
 #include "opt_mvsoc.h"
 #include "mvpex.h"
@@ -303,6 +303,18 @@ struct bus_space armadaxp_pex03_io_bs_ta
 
 	MVSOC_BUS_SPACE_DEFAULT_FUNCS
 };
+struct bus_space armadaxp_pex10_mem_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX10_MEM,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
+struct bus_space armadaxp_pex10_io_bs_tag = {
+	/* cookie */
+	(void *)ARMADAXP_TAG_PEX10_IO,
+
+	MVSOC_BUS_SPACE_DEFAULT_FUNCS
+};
 struct bus_space armadaxp_pex2_mem_bs_tag = {
 	/* cookie */
 	(void *)ARMADAXP_TAG_PEX2_MEM,

Index: src/sys/arch/arm/marvell/mvsocvar.h
diff -u src/sys/arch/arm/marvell/mvsocvar.h:1.11 src/sys/arch/arm/marvell/mvsocvar.h:1.12
--- src/sys/arch/arm/marvell/mvsocvar.h:1.11	Sat Jan  7 16:19:28 2017
+++ src/sys/arch/arm/marvell/mvsocvar.h	Fri Mar 10 15:44:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsocvar.h,v 1.11 2017/01/07 16:19:28 kiyohara Exp $	*/
+/*	$NetBSD: mvsocvar.h,v 1.12 2017/03/10 15:44:24 skrll Exp $	*/
 /*
  * Copyright (c) 2007, 2010 KIYOHARA Takashi
  * All rights reserved.
@@ -126,6 +126,14 @@ enum mvsoc_tags {
 	ARMADAXP_TAG_PEX02_IO,
 	ARMADAXP_TAG_PEX03_MEM,
 	ARMADAXP_TAG_PEX03_IO,
+	ARMADAXP_TAG_PEX10_MEM,
+	ARMADAXP_TAG_PEX10_IO,
+	ARMADAXP_TAG_PEX11_MEM,
+	ARMADAXP_TAG_PEX11_IO,
+	ARMADAXP_TAG_PEX12_MEM,
+	ARMADAXP_TAG_PEX12_IO,
+	ARMADAXP_TAG_PEX13_MEM,
+	ARMADAXP_TAG_PEX13_IO,
 	ARMADAXP_TAG_PEX2_MEM,
 	ARMADAXP_TAG_PEX2_IO,
 	ARMADAXP_TAG_PEX3_MEM,

Index: src/sys/arch/arm/marvell/pci_machdep.c
diff -u src/sys/arch/arm/marvell/pci_machdep.c:1.10 src/sys/arch/arm/marvell/pci_machdep.c:1.11
--- src/sys/arch/arm/marvell/pci_machdep.c:1.10	Tue Jul 12 13:43:18 2016
+++ src/sys/arch/arm/marvell/pci_machdep.c	Fri Mar 10 15:44:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci_machdep.c,v 1.10 2016/07/12 13:43:18 kiyohara Exp $	*/
+/*	$NetBSD: pci_machdep.c,v 1.11 2017/03/10 15:44:24 skrll Exp $	*/
 /*
  * Copyright (c) 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.10 2016/07/12 13:43:18 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.11 2017/03/10 15:44:24 skrll Exp $");
 
 #include "opt_mvsoc.h"
 #include "gtpci.h"
@@ -245,6 +245,29 @@ struct arm32_pci_chipset arm32_mvpex5_ch
 #endif
 	mvpex_conf_interrupt,
 };
+struct arm32_pci_chipset arm32_mvpex6_chipset = {
+	NULL,	/* conf_v */
+	mvpex_attach_hook,
+	mvpex_bus_maxdevs,
+	mvpex_make_tag,
+	mvpex_decompose_tag,
+#if NMVPEX_MBUS > 0
+	mvpex_mbus_conf_read,		/* XXXX: always this functions */
+#else
+	mvpex_conf_read,
+#endif
+	mvpex_conf_write,
+	NULL,	/* intr_v */
+	mvpex_intr_map,
+	mvpex_intr_string,
+	mvpex_intr_evcnt,
+	mvpex_intr_establish,
+	mvpex_intr_disestablish,
+#ifdef __HAVE_PCI_CONF_HOOK
+	mvpex_conf_hook,
+#endif
+	mvpex_conf_interrupt,
+};
 #endif /* NMVPEX > 0 */
 
 #if NGTPCI > 0

Index: src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c
diff -u src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c:1.12 src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c:1.13
--- src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c:1.12	Sat Jan  7 16:19:29 2017
+++ src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c	Fri Mar 10 15:44:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: armadaxp_machdep.c,v 1.12 2017/01/07 16:19:29 kiyohara Exp $	*/
+/*	$NetBSD: armadaxp_machdep.c,v 1.13 2017/03/10 15:44:24 skrll Exp $	*/
 /*******************************************************************************
 Copyright (C) Marvell International Ltd. and its affiliates
 
@@ -37,7 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
 *******************************************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: armadaxp_machdep.c,v 1.12 2017/01/07 16:19:29 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: armadaxp_machdep.c,v 1.13 2017/03/10 15:44:24 skrll Exp $");
 
 #include "opt_machdep.h"
 #include "opt_mvsoc.h"
@@ -235,8 +235,13 @@ reset_axp_pcie_win(void)
 			    ARMADAXP_TAG_PEX01_MEM, ARMADAXP_TAG_PEX01_IO,
 			    ARMADAXP_TAG_PEX02_MEM, ARMADAXP_TAG_PEX02_IO,
 			    ARMADAXP_TAG_PEX03_MEM, ARMADAXP_TAG_PEX03_IO,
+			    ARMADAXP_TAG_PEX10_MEM, ARMADAXP_TAG_PEX10_IO,
+			    ARMADAXP_TAG_PEX11_MEM, ARMADAXP_TAG_PEX11_IO,
+			    ARMADAXP_TAG_PEX12_MEM, ARMADAXP_TAG_PEX12_IO,
+			    ARMADAXP_TAG_PEX13_MEM, ARMADAXP_TAG_PEX13_IO,
 			    ARMADAXP_TAG_PEX2_MEM, ARMADAXP_TAG_PEX2_IO,
-			    ARMADAXP_TAG_PEX3_MEM, ARMADAXP_TAG_PEX3_IO};
+			    ARMADAXP_TAG_PEX3_MEM, ARMADAXP_TAG_PEX3_IO
+			};
 
 	nwindow = ARMADAXP_MLMB_NWINDOW;
 	nremap = ARMADAXP_MLMB_NREMAP;
@@ -501,12 +506,13 @@ axp_device_register(device_t dev, void *
 	    armadaxp_pex01_io_bs_tag, armadaxp_pex01_mem_bs_tag,
 	    armadaxp_pex02_io_bs_tag, armadaxp_pex02_mem_bs_tag,
 	    armadaxp_pex03_io_bs_tag, armadaxp_pex03_mem_bs_tag,
+	    armadaxp_pex10_io_bs_tag, armadaxp_pex10_mem_bs_tag,
 	    armadaxp_pex2_io_bs_tag, armadaxp_pex2_mem_bs_tag,
 	    armadaxp_pex3_io_bs_tag, armadaxp_pex3_mem_bs_tag;
 	extern struct arm32_pci_chipset arm32_mvpex0_chipset,
 	    arm32_mvpex1_chipset, arm32_mvpex2_chipset,
 	    arm32_mvpex3_chipset, arm32_mvpex4_chipset,
-	    arm32_mvpex5_chipset;
+	    arm32_mvpex5_chipset, arm32_mvpex6_chipset;
 
 	struct marvell_attach_args *mva = aux;
 
@@ -523,34 +529,40 @@ axp_device_register(device_t dev, void *
 			arm32_mvpex_chipset = &arm32_mvpex0_chipset;
 			iotag = ARMADAXP_TAG_PEX00_IO;
 			memtag = ARMADAXP_TAG_PEX00_MEM;
-		} else if (mva->mva_offset == MVSOC_PEX_BASE + 0x4000) {
+		} else if (mva->mva_offset == ARMADAXP_PEX01_BASE) {
 			mvpex_io_bs_tag = &armadaxp_pex01_io_bs_tag;
 			mvpex_mem_bs_tag = &armadaxp_pex01_mem_bs_tag;
 			arm32_mvpex_chipset = &arm32_mvpex1_chipset;
 			iotag = ARMADAXP_TAG_PEX01_IO;
 			memtag = ARMADAXP_TAG_PEX01_MEM;
-		} else if (mva->mva_offset == MVSOC_PEX_BASE + 0x8000) {
+		} else if (mva->mva_offset == ARMADAXP_PEX02_BASE) {
 			mvpex_io_bs_tag = &armadaxp_pex02_io_bs_tag;
 			mvpex_mem_bs_tag = &armadaxp_pex02_mem_bs_tag;
 			arm32_mvpex_chipset = &arm32_mvpex2_chipset;
 			iotag = ARMADAXP_TAG_PEX02_IO;
 			memtag = ARMADAXP_TAG_PEX02_MEM;
-		} else if (mva->mva_offset == MVSOC_PEX_BASE + 0xc000) {
+		} else if (mva->mva_offset == ARMADAXP_PEX03_BASE) {
 			mvpex_io_bs_tag = &armadaxp_pex03_io_bs_tag;
 			mvpex_mem_bs_tag = &armadaxp_pex03_mem_bs_tag;
 			arm32_mvpex_chipset = &arm32_mvpex3_chipset;
 			iotag = ARMADAXP_TAG_PEX03_IO;
 			memtag = ARMADAXP_TAG_PEX03_MEM;
-		} else if (mva->mva_offset == MVSOC_PEX_BASE + 0x2000) {
+		} else if (mva->mva_offset == ARMADAXP_PEX10_BASE) {
+			mvpex_io_bs_tag = &armadaxp_pex10_io_bs_tag;
+			mvpex_mem_bs_tag = &armadaxp_pex10_mem_bs_tag;
+			arm32_mvpex_chipset = &arm32_mvpex4_chipset;
+			iotag = ARMADAXP_TAG_PEX10_IO;
+			memtag = ARMADAXP_TAG_PEX10_MEM;
+		} else if (mva->mva_offset == ARMADAXP_PEX2_BASE) {
 			mvpex_io_bs_tag = &armadaxp_pex2_io_bs_tag;
 			mvpex_mem_bs_tag = &armadaxp_pex2_mem_bs_tag;
-			arm32_mvpex_chipset = &arm32_mvpex4_chipset;
+			arm32_mvpex_chipset = &arm32_mvpex5_chipset;
 			iotag = ARMADAXP_TAG_PEX2_IO;
 			memtag = ARMADAXP_TAG_PEX2_MEM;
 		} else {
 			mvpex_io_bs_tag = &armadaxp_pex3_io_bs_tag;
 			mvpex_mem_bs_tag = &armadaxp_pex3_mem_bs_tag;
-			arm32_mvpex_chipset = &arm32_mvpex5_chipset;
+			arm32_mvpex_chipset = &arm32_mvpex6_chipset;
 			iotag = ARMADAXP_TAG_PEX3_IO;
 			memtag = ARMADAXP_TAG_PEX3_MEM;
 		}

Reply via email to