Index: sys/arch/arm/marvell/armadaxpreg.h =================================================================== RCS file: /cvsroot/src/sys/arch/arm/marvell/armadaxpreg.h,v retrieving revision 1.7 diff -u -p -r1.7 armadaxpreg.h --- sys/arch/arm/marvell/armadaxpreg.h 7 Jan 2017 15:47:33 -0000 1.7 +++ sys/arch/arm/marvell/armadaxpreg.h 28 Feb 2017 16:40:26 -0000 @@ -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: sys/arch/arm/marvell/mvsoc.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/marvell/mvsoc.c,v retrieving revision 1.28 diff -u -p -r1.28 mvsoc.c --- sys/arch/arm/marvell/mvsoc.c 24 Feb 2017 17:07:13 -0000 1.28 +++ sys/arch/arm/marvell/mvsoc.c 28 Feb 2017 16:40:28 -0000 @@ -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: sys/arch/arm/marvell/mvsoc_space.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/marvell/mvsoc_space.c,v retrieving revision 1.8 diff -u -p -r1.8 mvsoc_space.c --- sys/arch/arm/marvell/mvsoc_space.c 7 Jan 2017 16:19:28 -0000 1.8 +++ sys/arch/arm/marvell/mvsoc_space.c 28 Feb 2017 16:40:30 -0000 @@ -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: sys/arch/arm/marvell/mvsocvar.h =================================================================== RCS file: /cvsroot/src/sys/arch/arm/marvell/mvsocvar.h,v retrieving revision 1.11 diff -u -p -r1.11 mvsocvar.h --- sys/arch/arm/marvell/mvsocvar.h 7 Jan 2017 16:19:28 -0000 1.11 +++ sys/arch/arm/marvell/mvsocvar.h 28 Feb 2017 16:40:30 -0000 @@ -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: sys/arch/arm/marvell/pci_machdep.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/marvell/pci_machdep.c,v retrieving revision 1.10 diff -u -p -r1.10 pci_machdep.c --- sys/arch/arm/marvell/pci_machdep.c 12 Jul 2016 13:43:18 -0000 1.10 +++ sys/arch/arm/marvell/pci_machdep.c 28 Feb 2017 16:40:30 -0000 @@ -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: sys/arch/evbarm/armadaxp/armadaxp_machdep.c =================================================================== RCS file: /cvsroot/src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c,v retrieving revision 1.12 diff -u -p -r1.12 armadaxp_machdep.c --- sys/arch/evbarm/armadaxp/armadaxp_machdep.c 7 Jan 2017 16:19:29 -0000 1.12 +++ sys/arch/evbarm/armadaxp/armadaxp_machdep.c 28 Feb 2017 16:40:32 -0000 @@ -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; }