svn commit: r233508 - in user/jchandra/xlp-merge/sys/mips: conf nlm
Jayachandran C.
jchandra at FreeBSD.org
Mon Mar 26 13:02:32 UTC 2012
Author: jchandra
Date: Mon Mar 26 13:02:31 2012
New Revision: 233508
URL: http://svn.freebsd.org/changeset/base/233508
Log:
Resource allocation for XLP SoC SDHCI slots
The on-chip SD slots do not have PCI BARs corresponding to them, so
this has to be handled in the custom SoC memory allocation.
Provide memory resource for rids corresponding to BAR 0 and 1 in
the custom allocation code.
Modified:
user/jchandra/xlp-merge/sys/mips/conf/std.XLP
user/jchandra/xlp-merge/sys/mips/nlm/xlp_pci.c
Modified: user/jchandra/xlp-merge/sys/mips/conf/std.XLP
==============================================================================
--- user/jchandra/xlp-merge/sys/mips/conf/std.XLP Mon Mar 26 12:18:15 2012 (r233507)
+++ user/jchandra/xlp-merge/sys/mips/conf/std.XLP Mon Mar 26 13:02:31 2012 (r233508)
@@ -110,3 +110,8 @@ options GEOM_ELI
# NOR
device cfi
device cfid
+
+# MMC/SD
+device mmc # MMC/SD bus
+device mmcsd # MMC/SD memory card
+device sdhci # Generic PCI SD Host Controller
Modified: user/jchandra/xlp-merge/sys/mips/nlm/xlp_pci.c
==============================================================================
--- user/jchandra/xlp-merge/sys/mips/nlm/xlp_pci.c Mon Mar 26 12:18:15 2012 (r233507)
+++ user/jchandra/xlp-merge/sys/mips/nlm/xlp_pci.c Mon Mar 26 13:02:31 2012 (r233508)
@@ -167,8 +167,22 @@ xlp_pci_alloc_resource(device_t bus, dev
/* no emulation for IO ports */
if (type == SYS_RES_IOPORT)
return (NULL);
+
start = xlp_devinfo->mem_res_start;
count = XLP_PCIE_CFG_SIZE - XLP_IO_PCI_HDRSZ;
+
+ /* MMC needs to 2 slots with rids 16 and 20 and a
+ * fixup for size */
+ if (pci_get_device(child) == PCI_DEVICE_ID_NLM_MMC) {
+ count = 0x100;
+ if (*rid == 16)
+ ; /* first slot already setup */
+ else if (*rid == 20)
+ start += 0x100; /* second slot */
+ else
+ return (NULL);
+ }
+
end = start + count - 1;
r = BUS_ALLOC_RESOURCE(device_get_parent(bus), child,
type, rid, start, end, count, flags);
@@ -256,9 +270,12 @@ xlp_add_soc_child(device_t pcib, device_
xlp_dinfo = (struct xlp_devinfo *)dinfo;
xlp_dinfo->irq = irq;
xlp_dinfo->flags = flags;
+
+ /* memory resource from ecfg space, if MEM_RES_EMUL is set */
if ((flags & MEM_RES_EMUL) != 0)
xlp_dinfo->mem_res_start = XLP_DEFAULT_IO_BASE + devoffset +
XLP_IO_PCI_HDRSZ;
+
pci_add_child(dev, dinfo);
}
More information about the svn-src-user
mailing list