Module Name: src
Committed By: matt
Date: Wed Dec 28 05:36:11 UTC 2011
Modified Files:
src/sys/arch/mips/conf [matt-nb5-mips64]: files.rmixl
src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_cfi_xlnor.c
rmixl_nor_pci.c rmixlreg.h rmixlvar.h
Added Files:
src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_flash_eb_space.c
rmixl_flash_el_space.c
Log Message:
Add NOR support for XLP.
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.15 -r1.1.2.16 src/sys/arch/mips/conf/files.rmixl
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/arch/mips/rmi/rmixl_cfi_xlnor.c \
src/sys/arch/mips/rmi/rmixl_nor_pci.c
cvs rdiff -u -r0 -r1.1.2.1 src/sys/arch/mips/rmi/rmixl_flash_eb_space.c \
src/sys/arch/mips/rmi/rmixl_flash_el_space.c
cvs rdiff -u -r1.1.2.14 -r1.1.2.15 src/sys/arch/mips/rmi/rmixlreg.h
cvs rdiff -u -r1.1.2.22 -r1.1.2.23 src/sys/arch/mips/rmi/rmixlvar.h
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/mips/conf/files.rmixl
diff -u src/sys/arch/mips/conf/files.rmixl:1.1.2.15 src/sys/arch/mips/conf/files.rmixl:1.1.2.16
--- src/sys/arch/mips/conf/files.rmixl:1.1.2.15 Tue Dec 27 19:58:18 2011
+++ src/sys/arch/mips/conf/files.rmixl Wed Dec 28 05:36:10 2011
@@ -1,4 +1,4 @@
-# $NetBSD: files.rmixl,v 1.1.2.15 2011/12/27 19:58:18 matt Exp $
+# $NetBSD: files.rmixl,v 1.1.2.16 2011/12/28 05:36:10 matt Exp $
#
# Configuration info for RMI XLP, XLR, XLS
#
@@ -77,6 +77,8 @@ file arch/mips/rmi/rmixl_nand_pci.c
device xlnor { [cs=-1] }
attach xlnor at pci with xlnor_pci
file arch/mips/rmi/rmixl_nor_pci.c xlnor_pci
+file arch/mips/rmi/rmixl_flash_eb_space.c xlnor_pci
+file arch/mips/rmi/rmixl_flash_el_space.c xlnor_pci
device cfi: norbus
attach cfi at xliobus with cfi_iobus
Index: src/sys/arch/mips/rmi/rmixl_cfi_xlnor.c
diff -u src/sys/arch/mips/rmi/rmixl_cfi_xlnor.c:1.1.2.1 src/sys/arch/mips/rmi/rmixl_cfi_xlnor.c:1.1.2.2
--- src/sys/arch/mips/rmi/rmixl_cfi_xlnor.c:1.1.2.1 Tue Dec 27 19:58:19 2011
+++ src/sys/arch/mips/rmi/rmixl_cfi_xlnor.c Wed Dec 28 05:36:11 2011
@@ -27,9 +27,12 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "opt_flash.h"
+#include "locators.h"
+
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: rmixl_cfi_xlnor.c,v 1.1.2.1 2011/12/27 19:58:19 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rmixl_cfi_xlnor.c,v 1.1.2.2 2011/12/28 05:36:11 matt Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -38,10 +41,11 @@ __KERNEL_RCSID(1, "$NetBSD: rmixl_cfi_xl
#include <dev/nor/nor.h>
#include <dev/nor/cfi.h>
-#include "locators.h"
+#include <mips/rmi/rmixl_iobusvar.h>
-static int cfi_xlnor_match(device_t, cfdata_t, void *);
+static int cfi_xlnor_match(device_t, cfdata_t, void *);
static void cfi_xlnor_attach(device_t, device_t, void *);
+static int cfi_xlnor_detach(device_t, int);
struct cfi_xlnor_softc {
device_t sc_dev;
@@ -53,16 +57,117 @@ struct cfi_xlnor_softc {
};
CFATTACH_DECL_NEW(cfi_xlnor, sizeof(struct cfi_xlnor_softc),
- cfi_xlnor_match, cfi_xlnor_attach, 0, 0);
+ cfi_xlnor_match, cfi_xlnor_attach, cfi_xlnor_detach, 0);
static int
cfi_xlnor_match(device_t parent, cfdata_t cf, void *aux)
{
- return 0;
+ struct rmixl_iobus_attach_args *ia = aux;
+ bus_size_t tmpsize = CFI_QRY_MIN_MAP_SIZE;
+ bus_addr_t addr = ia->ia_iobus_addr;
+ struct cfi cfi;
+ int rv;
+
+ KASSERT(ia->ia_iobus_bst != NULL);
+ KASSERT(ia->ia_iobus_addr == 0);
+ KASSERT(ia->ia_iobus_size >= tmpsize);
+ KASSERT(ia->ia_obio_bst == NULL);
+
+ if (cf->cf_loc[XLIOBUSCF_CS] != ia->ia_cs
+ && cf->cf_loc[XLIOBUSCF_CS] != XLIOBUSCF_CS_DEFAULT)
+ return 0;
+
+ cfi.cfi_bst = ia->ia_iobus_bst;
+ int error = bus_space_map(cfi.cfi_bst, addr, tmpsize, 0, &cfi.cfi_bsh);
+ if (error != 0) {
+ aprint_error("%s: cannot map %#"PRIxBUSSIZE" at offset %#"
+ PRIxBUSADDR": error %d\n", __func__, tmpsize, addr, error);
+ return 0;
+ }
+
+ if (!cfi_probe(&cfi)) {
+ aprint_debug("%s: probe addr %#"PRIxBUSADDR", CFI not found\n",
+ __func__, addr);
+ rv = 0;
+ } else {
+ rv = 1;
+ }
+
+ bus_space_unmap(cfi.cfi_bst, cfi.cfi_bsh, tmpsize);
+
+ return rv;
}
static void
cfi_xlnor_attach(device_t parent, device_t self, void *aux)
{
+ struct cfi_xlnor_softc *sc = device_private(self);
+ struct rmixl_iobus_attach_args *ia = aux;
+ struct cfi_query_data * const qryp = &sc->sc_cfi.cfi_qry_data;
+ const bus_size_t tmpsize = CFI_QRY_MIN_MAP_SIZE;
+ bool found;
+ int error;
+
aprint_normal("\n");
+
+ sc->sc_dev = self;
+ sc->sc_cfi.cfi_bst = ia->ia_iobus_bst;
+ sc->sc_addr = ia->ia_iobus_addr;
+
+ KASSERT(ia->ia_iobus_addr == 0);
+
+ /* map enough to identify, remap later when size is known */
+ error = bus_space_map(sc->sc_cfi.cfi_bst, sc->sc_addr, tmpsize,
+ 0, &sc->sc_cfi.cfi_bsh);
+ if (error != 0) {
+ aprint_error_dev(self, "could not map error %d\n", error);
+ return;
+ }
+
+ found = cfi_identify(&sc->sc_cfi);
+
+ bus_space_unmap(sc->sc_cfi.cfi_bst, sc->sc_cfi.cfi_bsh, tmpsize);
+
+ if (! found) {
+ /* should not happen, we already probed OK in match */
+ aprint_error_dev(self, "could not map error %d\n", error);
+ return;
+ }
+
+ sc->sc_size = 1 << qryp->device_size;
+
+ sc->sc_nor_if = nor_interface_cfi;
+ sc->sc_nor_if.private = &sc->sc_cfi;
+ sc->sc_nor_if.access_width = (1 << sc->sc_cfi.cfi_portwidth);
+
+ cfi_print(self, &sc->sc_cfi);
+
+ error = bus_space_map(sc->sc_cfi.cfi_bst, sc->sc_addr, sc->sc_size,
+ 0, &sc->sc_cfi.cfi_bsh);
+ if (error != 0) {
+ aprint_error_dev(self, "could not map error %d\n", error);
+ return;
+ }
+
+ if (! pmf_device_register1(self, NULL, NULL, NULL))
+ aprint_error_dev(self, "couldn't establish power handler\n");
+
+ sc->sc_nordev = nor_attach_mi(&sc->sc_nor_if, self);
+
+}
+
+static int
+cfi_xlnor_detach(device_t self, int flags)
+{
+ struct cfi_xlnor_softc *sc = device_private(self);
+ int rv = 0;
+
+ pmf_device_deregister(self);
+
+ if (sc->sc_nordev != NULL)
+ rv = config_detach(sc->sc_nordev, flags);
+
+ bus_space_unmap(sc->sc_cfi.cfi_bst, sc->sc_cfi.cfi_bsh, sc->sc_size);
+
+ return rv;
}
Index: src/sys/arch/mips/rmi/rmixl_nor_pci.c
diff -u src/sys/arch/mips/rmi/rmixl_nor_pci.c:1.1.2.1 src/sys/arch/mips/rmi/rmixl_nor_pci.c:1.1.2.2
--- src/sys/arch/mips/rmi/rmixl_nor_pci.c:1.1.2.1 Tue Dec 27 19:58:19 2011
+++ src/sys/arch/mips/rmi/rmixl_nor_pci.c Wed Dec 28 05:36:11 2011
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: rmixl_nor_pci.c,v 1.1.2.1 2011/12/27 19:58:19 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rmixl_nor_pci.c,v 1.1.2.2 2011/12/28 05:36:11 matt Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -47,15 +47,34 @@ __KERNEL_RCSID(1, "$NetBSD: rmixl_nor_pc
#include <mips/rmi/rmixlreg.h>
#include <mips/rmi/rmixlvar.h>
+#include <mips/rmi/rmixl_iobusvar.h>
+
#include "locators.h"
static int xlnor_pci_match(device_t, cfdata_t, void *);
static void xlnor_pci_attach(device_t, device_t, void *);
+static int xlnor_print(void *, const char *);
+static int xlnor_intr(void *);
+
+struct xlnor_cs {
+ struct mips_bus_space cs_bst;
+ struct rmixl_region cs_region;
+ uint32_t cs_devparm;
+ uint32_t cs_devtime0;
+ uint32_t cs_devtime1;
+ u_int cs_number;
+};
+
-struct xlnor_softc {
+struct xlnor_softc {
device_t sc_dev;
bus_space_tag_t sc_bst;
bus_space_handle_t sc_bsh;
+ size_t sc_ndevices;
+
+ kmutex_t sc_buslock;
+
+ struct xlnor_cs sc_cs[RMIXLP_NOR_NCS];
};
CFATTACH_DECL_NEW(xlnor_pci, sizeof(struct xlnor_softc),
@@ -87,10 +106,112 @@ xlnor_pci_attach(device_t parent, device
* Why isn't this accessible via a BAR?
*/
if (bus_space_subregion(sc->sc_bst, rcp->rc_pci_ecfg_eb_memh,
- pa->pa_tag | 0x100, 0, &sc->sc_bsh)) {
+ pa->pa_tag, 0, &sc->sc_bsh)) {
aprint_error(": can't map registers\n");
return;
}
- aprint_normal(": XLP NOR Controller\n");
+ mutex_init(&sc->sc_buslock, IPL_NONE, MUTEX_DEFAULT);
+
+ /*
+ * Let's see what devices we have attached.
+ */
+ for (size_t i = 0; i < RMIXLP_NOR_NCS; i++) {
+ struct rmixl_region * const rp = &rcp->rc_norflash[i];
+ if (rp->r_pbase == (bus_addr_t)-1 || rp->r_size == 0)
+ continue;
+
+ struct xlnor_cs * const cs = &sc->sc_cs[sc->sc_ndevices++];
+ cs->cs_region = *rp;
+ cs->cs_devparm = bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+ RMIXLP_NOR_CS_DEVPARMn(i));
+ cs->cs_devtime0 = bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+ RMIXLP_NOR_CS_DEVTIME0n(i));
+ cs->cs_devtime1 = bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+ RMIXLP_NOR_CS_DEVTIME1n(i));
+ cs->cs_number = i;
+
+ /*
+ * Each chip gets it's own bus space.
+ */
+ if (cs->cs_devparm & RMIXLP_NOR_CS_DEVPARM_LE) {
+ rmixl_flash_el_bus_mem_init(&cs->cs_bst,
+ &cs->cs_region);
+ } else {
+ rmixl_flash_eb_bus_mem_init(&cs->cs_bst,
+ &cs->cs_region);
+ }
+ }
+
+ aprint_normal(": XLP NOR Controller (%zu device%s)\n",
+ sc->sc_ndevices, (sc->sc_ndevices == 1 ? "" : "s"));
+
+ pci_intr_handle_t pcih;
+
+ pci_intr_map(pa, &pcih);
+
+ if (pci_intr_establish(pa->pa_pc, pcih, IPL_VM, xlnor_intr, sc) == NULL) {
+ aprint_error_dev(self, "failed to establish interrupt\n");
+ } else {
+ const char * const intrstr = pci_intr_string(pa->pa_pc, pcih);
+ aprint_normal_dev(self, "interrupting at %s\n", intrstr);
+ }
+
+
+ for (size_t i = 0; i < sc->sc_ndevices; i++) {
+ struct xlnor_cs * const cs = &sc->sc_cs[i];
+ KASSERT(cs->cs_region.r_size >= 1024);
+ size_t size = cs->cs_region.r_size >> 10;
+ const char units[] = "KMGTPE";
+ u_int j = 0;
+ for (; size >= 1024; size >>= 10) {
+ j++;
+ }
+ KASSERT(j < sizeof(units));
+ aprint_normal_dev(sc->sc_dev, "cs %u: %zu%cB "
+ "%u-bit %s endian with %smuxed lines\n",
+ cs->cs_number, size, units[j],
+ 8 << __SHIFTOUT(cs->cs_devparm, RMIXLP_NOR_CS_DEVPARM_DW),
+ cs->cs_devparm & RMIXLP_NOR_CS_DEVPARM_LE
+ ? "little" : "big",
+ cs->cs_devparm & RMIXLP_NOR_CS_DEVPARM_MUX
+ ? "" : "non-");
+
+ aprint_debug_dev(sc->sc_dev,
+ "cs %u: devparm=%#x, devtime0=%#x, devtime1=%#x\n",
+ cs->cs_number, cs->cs_devparm,
+ cs->cs_devtime0, cs->cs_devtime1);
+
+ struct rmixl_iobus_attach_args iaa = {
+ .ia_obio_bst = NULL,
+ .ia_obio_bsh = 0,
+ .ia_iobus_bst = &cs->cs_bst,
+ .ia_iobus_addr = 0,
+ .ia_iobus_size = cs->cs_region.r_size,
+ .ia_dev_parm = cs->cs_devparm,
+ .ia_cs = cs->cs_number,
+ };
+
+ config_found(self, &iaa, xlnor_print);
+ }
+}
+
+static int
+xlnor_print(void *aux, const char *pnp)
+{
+ struct rmixl_iobus_attach_args *ia = aux;
+
+ if (pnp != NULL)
+ aprint_normal("%s:", pnp);
+ aprint_normal(" cs %d", ia->ia_cs);
+
+ return UNCONF;
+}
+
+static int
+xlnor_intr(void *v)
+{
+
+ panic("%s(%p)", __func__, v);
+ return 0;
}
Index: src/sys/arch/mips/rmi/rmixlreg.h
diff -u src/sys/arch/mips/rmi/rmixlreg.h:1.1.2.14 src/sys/arch/mips/rmi/rmixlreg.h:1.1.2.15
--- src/sys/arch/mips/rmi/rmixlreg.h:1.1.2.14 Tue Dec 27 19:58:19 2011
+++ src/sys/arch/mips/rmi/rmixlreg.h Wed Dec 28 05:36:11 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: rmixlreg.h,v 1.1.2.14 2011/12/27 19:58:19 matt Exp $ */
+/* $NetBSD: rmixlreg.h,v 1.1.2.15 2011/12/28 05:36:11 matt Exp $ */
/*-
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -1462,7 +1462,7 @@
#define RMIXLP_NOR_NCS 8
#define RMIXLP_NOR_CS_BASEADDRESSn(n) _RMIXL_OFFSET(0x40+(n))
#define RMIXLP_NOR_CS_BASELIMITn(n) _RMIXL_OFFSET(0x48+(n))
-#define RMIXLP_NOR_CS_DEVPARAMn(n) _RMIXL_OFFSET(0x50+(n))
+#define RMIXLP_NOR_CS_DEVPARMn(n) _RMIXL_OFFSET(0x50+(n))
#define RMIXLP_NOR_CS_DEVTIME0n(n) _RMIXL_OFFSET(0x58+2*(n))
#define RMIXLP_NOR_CS_DEVTIME1n(n) _RMIXL_OFFSET(0x59+2*(n))
#define RMIXLP_NOR_SYSCTRL _RMIXL_OFFSET(0x68)
@@ -1482,46 +1482,46 @@
// Interface Byte signal Enable.
// 0: Disables programmable data width selection
// 1: Enables programmable data width selection
-#define RMIXLP_NOR_DEVPARAM_BE __BIT(16)
+#define RMIXLP_NOR_CS_DEVPARM_BE __BIT(16)
// Little Endian.
// 0:Big Endian
// 1:Little Endian
-#define RMIXLP_NOR_DEVPARAM_LE __BIT(13)
-#define RMIXLP_NOR_DEVPARAM_DW __BITS(12:11) // Device Data Width
-#define RMIXLP_NOR_DEVPARAM_DW_8_BITS 0
-#define RMIXLP_NOR_DEVPARAM_DW_16_BITS 1
-#define RMIXLP_NOR_DEVPARAM_DW_32_BITS 2
+#define RMIXLP_NOR_CS_DEVPARM_LE __BIT(13)
+#define RMIXLP_NOR_CS_DEVPARM_DW __BITS(12,11) // Device Data Width
+#define RMIXLP_NOR_CS_DEVPARM_DW_8_BITS 0
+#define RMIXLP_NOR_CS_DEVPARM_DW_16_BITS 1
+#define RMIXLP_NOR_CS_DEVPARM_DW_32_BITS 2
// Multiplexed/non-multiplexed device data/address mode
// 0:Non-multiplexed (only valid if field DW is set to 0)
// 1:Multiplexed data and address bus
-#define RMIXLP_NOR_DEVPARAM_MUX __BIT(10)
+#define RMIXLP_NOR_CS_DEVPARM_MUX __BIT(10)
// Wait/Ready signal Polarity
// 0:Wait active high
// 1:Wait active low
-#define RMIXLP_NOR_DEVPARAM_WRP __BIT(9)
+#define RMIXLP_NOR_CS_DEVPARM_WRP __BIT(9)
// Wait/ready signal Write interface Enable.
// Enables/disables wait-acknowledge mode during write cycles.
// 0: Enable device Wait mode. External IO_WAIT_L signal is used.
// 1: Disable Wait mode; external IO_WAIT_L signal is not used.
-#define RMIXLP_NOR_DEVPARAM_WWE __BIT(8)
+#define RMIXLP_NOR_CS_DEVPARM_WWE __BIT(8)
// Wait/Ready signal Read interface Enable.
// Enables/disables wait-acknowledge mode during read cycles.
// 0: Enable device Wait mode. External IO_WAIT_L signal is used.
// 1: Disable Wait mode; external IO_WAIT_L signal is not used.
// This signal is distinct from the RYBY (Ready/Busy) signal,
// which is shared by all Flash devices.
-#define RMIXLP_NOR_DEVPARAM_WRE __BIT(7)
+#define RMIXLP_NOR_CS_DEVPARM_WRE __BIT(7)
// Synchronous Read Data Burst Enabled (when set to 1).
-#define RMIXLP_NOR_DEVPARAM_SRDBE __BIT(5)
+#define RMIXLP_NOR_CS_DEVPARM_SRDBE __BIT(5)
// Word-align Address.
// If set to 1, address bits are word-aligned.
// This allows address bits of a 16-bit Flash device to connect to XLP
// address bits [24:1] instead of [23:0] or the address bits of a 32-bit
// Flash device to connect to XLP address bits [25:2] instead of [23:0].
-#define RMIXLP_NOR_DEVPARAM_WA __BIT(2)
-#define RMIXLP_NOR_DEVPARAM_FLASH_TYPE __BITS(1:0) // Flash Type
-#define RMIXLP_NOR_DEVPARAM_FLASH_TYPE_NOR 0 // NOR Flash
-#define RMIXLP_NOR_DEVPARAM_FLASH_TYPE_ONCHIP 1 // On-chip ROM
+#define RMIXLP_NOR_CS_DEVPARM_WA __BIT(2)
+#define RMIXLP_NOR_CS_DEVPARM_FLASH_TYPE __BITS(1,0) // Flash Type
+#define RMIXLP_NOR_CS_DEVPARM_FLASH_TYPE_NOR 0 // NOR Flash
+#define RMIXLP_NOR_CS_DEVPARM_FLASH_TYPE_ONCHIP 1 // On-chip ROM
// CS to CS timing.
// This field indicates the number of clock cycles from the falling
Index: src/sys/arch/mips/rmi/rmixlvar.h
diff -u src/sys/arch/mips/rmi/rmixlvar.h:1.1.2.22 src/sys/arch/mips/rmi/rmixlvar.h:1.1.2.23
--- src/sys/arch/mips/rmi/rmixlvar.h:1.1.2.22 Tue Dec 27 19:58:19 2011
+++ src/sys/arch/mips/rmi/rmixlvar.h Wed Dec 28 05:36:11 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: rmixlvar.h,v 1.1.2.22 2011/12/27 19:58:19 matt Exp $ */
+/* $NetBSD: rmixlvar.h,v 1.1.2.23 2011/12/28 05:36:11 matt Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -120,15 +120,15 @@ struct rmixl_region {
struct rmixl_config {
struct rmixl_region rc_io;
- struct rmixl_region rc_flash[4]; /* FLASH_BAR */
+ struct rmixl_region rc_flash[RMIXLP_SBC_NFLASH]; /* FLASH_BAR */
struct rmixl_region rc_pci_cfg;
struct rmixl_region rc_pci_ecfg;
struct rmixl_region rc_pci_mem;
struct rmixl_region rc_pci_io;
- struct rmixl_region rc_pci_link_mem[4];
- struct rmixl_region rc_pci_link_io[4];
+ struct rmixl_region rc_pci_link_mem[RMIXLP_SBC_NPCIE_MEM];
+ struct rmixl_region rc_pci_link_io[RMIXLP_SBC_NPCIE_IO];
struct rmixl_region rc_srio_mem;
- struct rmixl_region rc_norflash[8]; /* XLP 8 CS for NOR */
+ struct rmixl_region rc_norflash[RMIXLP_NOR_NCS]; /* XLP */
struct mips_bus_space rc_obio_eb_memt; /* DEVIO -eb */
struct mips_bus_space rc_obio_el_memt; /* DEVIO -el */
struct mips_bus_space rc_iobus_memt; /* Peripherals IO Bus */
@@ -164,9 +164,11 @@ struct rmixl_config {
extern struct rmixl_config rmixl_configuration;
extern const char *rmixl_cpuname;
+extern void rmixl_flash_eb_bus_mem_init(bus_space_tag_t, void *);
+extern void rmixl_flash_el_bus_mem_init(bus_space_tag_t, void *);
+extern void rmixl_iobus_bus_mem_init(bus_space_tag_t, void *);
extern void rmixl_obio_eb_bus_mem_init(bus_space_tag_t, void *);
extern void rmixl_obio_el_bus_mem_init(bus_space_tag_t, void *);
-extern void rmixl_iobus_bus_mem_init(bus_space_tag_t, void *);
extern void rmixl_pci_cfg_el_bus_mem_init(bus_space_tag_t, void *);
extern void rmixl_pci_cfg_eb_bus_mem_init(bus_space_tag_t, void *);
extern void rmixl_pci_ecfg_el_bus_mem_init(bus_space_tag_t, void *);
Added files:
Index: src/sys/arch/mips/rmi/rmixl_flash_eb_space.c
diff -u /dev/null src/sys/arch/mips/rmi/rmixl_flash_eb_space.c:1.1.2.1
--- /dev/null Wed Dec 28 05:36:11 2011
+++ src/sys/arch/mips/rmi/rmixl_flash_eb_space.c Wed Dec 28 05:36:11 2011
@@ -0,0 +1,60 @@
+/* $NetBSD: rmixl_flash_eb_space.c,v 1.1.2.1 2011/12/28 05:36:11 matt Exp $ */
+
+/*-
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * bus_space(9) support for Peripherals IO Bus on RMI {XLP,XLR,XLS} chips
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: rmixl_flash_eb_space.c,v 1.1.2.1 2011/12/28 05:36:11 matt Exp $");
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/bus.h>
+
+#include <mips/rmi/rmixlreg.h>
+#include <mips/rmi/rmixlvar.h>
+
+#define CHIP rmixl_flash_eb
+#define CHIP_MEM /* defined */
+#define CHIP_ACCESS_SIZE 1
+#define CHIP_BIG_ENDIAN
+
+#define CHIP_V(v) ((struct rmixl_region *)(v))
+#define CHIP_EX_MALLOC_SAFE(v) true
+
+/* MEM region 1 */
+#define CHIP_W1_BUS_START(v) 0
+#define CHIP_W1_BUS_END(v) (CHIP_V(v)->r_size - 1)
+#define CHIP_W1_SYS_START(v) (CHIP_V(v)->r_pbase)
+#define CHIP_W1_SYS_END(v) (CHIP_W1_SYS_START(v) + CHIP_W1_BUS_END(v))
+
+#include <mips/mips/bus_space_alignstride_chipdep.c>
Index: src/sys/arch/mips/rmi/rmixl_flash_el_space.c
diff -u /dev/null src/sys/arch/mips/rmi/rmixl_flash_el_space.c:1.1.2.1
--- /dev/null Wed Dec 28 05:36:11 2011
+++ src/sys/arch/mips/rmi/rmixl_flash_el_space.c Wed Dec 28 05:36:11 2011
@@ -0,0 +1,60 @@
+/* $NetBSD: rmixl_flash_el_space.c,v 1.1.2.1 2011/12/28 05:36:11 matt Exp $ */
+
+/*-
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * bus_space(9) support for Peripherals IO Bus on RMI {XLP,XLR,XLS} chips
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: rmixl_flash_el_space.c,v 1.1.2.1 2011/12/28 05:36:11 matt Exp $");
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/bus.h>
+
+#include <mips/rmi/rmixlreg.h>
+#include <mips/rmi/rmixlvar.h>
+
+#define CHIP rmixl_flash_el
+#define CHIP_MEM /* defined */
+#define CHIP_ACCESS_SIZE 1
+#define CHIP_LITTLE_ENDIAN
+
+#define CHIP_V(v) ((struct rmixl_region *)(v))
+#define CHIP_EX_MALLOC_SAFE(v) true
+
+/* MEM region 1 */
+#define CHIP_W1_BUS_START(v) 0
+#define CHIP_W1_BUS_END(v) (CHIP_V(v)->r_size - 1)
+#define CHIP_W1_SYS_START(v) (CHIP_V(v)->r_pbase)
+#define CHIP_W1_SYS_END(v) (CHIP_W1_SYS_START(v) + CHIP_W1_BUS_END(v))
+
+#include <mips/mips/bus_space_alignstride_chipdep.c>