svn commit: r258427 - head/sys/powerpc/pseries
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Thu Nov 21 15:41:53 UTC 2013
Author: nwhitehorn
Date: Thu Nov 21 15:41:52 2013
New Revision: 258427
URL: http://svnweb.freebsd.org/changeset/base/258427
Log:
For PCI<->PCI bridges, #address-cells may be 3. Allow this when parsing the
ibm,dma-window properties. This is especially a concern when
#ibm,dma-address-cells is not specified and we have to use the regular
#address-cells property.
MFC after: 1 week
Modified:
head/sys/powerpc/pseries/plpar_iommu.c
Modified: head/sys/powerpc/pseries/plpar_iommu.c
==============================================================================
--- head/sys/powerpc/pseries/plpar_iommu.c Thu Nov 21 14:12:36 2013 (r258426)
+++ head/sys/powerpc/pseries/plpar_iommu.c Thu Nov 21 15:41:52 2013 (r258427)
@@ -73,8 +73,9 @@ phyp_iommu_set_dma_tag(device_t bus, dev
{
device_t p;
phandle_t node;
- cell_t dma_acells, dma_scells, dmawindow[5];
+ cell_t dma_acells, dma_scells, dmawindow[6];
struct iommu_map *i;
+ int cell;
for (p = dev; device_get_parent(p) != NULL; p = device_get_parent(p)) {
if (ofw_bus_has_prop(p, "ibm,my-dma-window"))
@@ -104,16 +105,17 @@ phyp_iommu_set_dma_tag(device_t bus, dev
struct dma_window *window = malloc(sizeof(struct dma_window),
M_PHYPIOMMU, M_WAITOK);
- if (dma_acells == 1)
- window->start = dmawindow[1];
- else
- window->start = ((uint64_t)(dmawindow[1]) << 32) | dmawindow[2];
- if (dma_scells == 1)
- window->end = window->start + dmawindow[dma_acells + 1];
- else
- window->end = window->start +
- (((uint64_t)(dmawindow[dma_acells + 1]) << 32) |
- dmawindow[dma_acells + 2]);
+ window->start = 0;
+ for (cell = 1; cell < 1 + dma_acells; cell++) {
+ window->start <<= 32;
+ window->start |= dmawindow[cell];
+ }
+ window->end = 0;
+ for (; cell < 1 + dma_acells + dma_scells; cell++) {
+ window->end <<= 32;
+ window->end |= dmawindow[cell];
+ }
+ window->end += window->start;
if (bootverbose)
device_printf(dev, "Mapping IOMMU domain %#x\n", dmawindow[0]);
More information about the svn-src-head
mailing list