summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/pseries
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2015-11-17 16:07:43 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2015-11-17 16:07:43 +0000
commit96deb1fcf016ebf1a213f16b40eab69071df14d8 (patch)
tree6d417c9671a399bd6cf1419ea651fd518ddbaf98 /sys/powerpc/pseries
parent5bb5d55de914d628b9b9284b85c9043cf9785abe (diff)
downloadFreeBSD-src-96deb1fcf016ebf1a213f16b40eab69071df14d8.zip
FreeBSD-src-96deb1fcf016ebf1a213f16b40eab69071df14d8.tar.gz
Where appropriate, use the endian-flipping OF_getencprop() instead of
OF_getprop() to get encode-int encoded values from the OF tree. This is a no-op at present, since all existing PowerPC ports are big-endian, but it is a correctness improvement and will be required if we have a little-endian kernel at some future point. Where it is totally impossible for the code ever to be used on a little-endian system (much of powerpc/powermac, for instance), I have not necessarily made the appropriate changes. MFC after: 1 month
Diffstat (limited to 'sys/powerpc/pseries')
-rw-r--r--sys/powerpc/pseries/mmu_phyp.c4
-rw-r--r--sys/powerpc/pseries/phyp_console.c4
-rw-r--r--sys/powerpc/pseries/phyp_llan.c2
-rw-r--r--sys/powerpc/pseries/phyp_vscsi.c3
-rw-r--r--sys/powerpc/pseries/platform_chrp.c37
-rw-r--r--sys/powerpc/pseries/plpar_iommu.c13
-rw-r--r--sys/powerpc/pseries/rtas_pci.c2
7 files changed, 34 insertions, 31 deletions
diff --git a/sys/powerpc/pseries/mmu_phyp.c b/sys/powerpc/pseries/mmu_phyp.c
index da9ea22..513dc8e 100644
--- a/sys/powerpc/pseries/mmu_phyp.c
+++ b/sys/powerpc/pseries/mmu_phyp.c
@@ -142,11 +142,11 @@ mphyp_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend)
node = OF_peer(node);
}
- res = OF_getprop(node, "ibm,pft-size", prop, sizeof(prop));
+ res = OF_getencprop(node, "ibm,pft-size", prop, sizeof(prop));
if (res <= 0)
panic("mmu_phyp: unknown PFT size");
final_pteg_count = 1 << prop[1];
- res = OF_getprop(node, "ibm,slb-size", prop, sizeof(prop[0]));
+ res = OF_getencprop(node, "ibm,slb-size", prop, sizeof(prop[0]));
if (res > 0)
n_slbs = prop[0];
diff --git a/sys/powerpc/pseries/phyp_console.c b/sys/powerpc/pseries/phyp_console.c
index 261f92b..ede2387 100644
--- a/sys/powerpc/pseries/phyp_console.c
+++ b/sys/powerpc/pseries/phyp_console.c
@@ -147,7 +147,7 @@ uart_phyp_probe_node(struct uart_phyp_softc *sc)
return (ENXIO);
reg = -1;
- OF_getprop(node, "reg", &reg, sizeof(reg));
+ OF_getencprop(node, "reg", &reg, sizeof(reg));
if (reg == -1)
return (ENXIO);
sc->vtermid = reg;
@@ -200,7 +200,7 @@ uart_phyp_cnprobe(struct consdev *cp)
/* Check if OF has an active stdin/stdout */
input = -1;
- if (OF_getprop(chosen, "stdout", &stdout,
+ if (OF_getencprop(chosen, "stdout", &stdout,
sizeof(stdout)) == sizeof(stdout) && stdout != 0)
input = OF_instance_to_package(stdout);
if (input == -1)
diff --git a/sys/powerpc/pseries/phyp_llan.c b/sys/powerpc/pseries/phyp_llan.c
index 26dbcc0..04e359d 100644
--- a/sys/powerpc/pseries/phyp_llan.c
+++ b/sys/powerpc/pseries/phyp_llan.c
@@ -159,7 +159,7 @@ llan_attach(device_t dev)
node = ofw_bus_get_node(dev);
OF_getprop(node, "local-mac-address", sc->mac_address,
sizeof(sc->mac_address));
- OF_getprop(node, "reg", &sc->unit, sizeof(sc->unit));
+ OF_getencprop(node, "reg", &sc->unit, sizeof(sc->unit));
mtx_init(&sc->io_lock, "llan", NULL, MTX_DEF);
diff --git a/sys/powerpc/pseries/phyp_vscsi.c b/sys/powerpc/pseries/phyp_vscsi.c
index 9b638ef..0623aef 100644
--- a/sys/powerpc/pseries/phyp_vscsi.c
+++ b/sys/powerpc/pseries/phyp_vscsi.c
@@ -290,7 +290,8 @@ vscsi_attach(device_t dev)
mtx_init(&sc->io_lock, "vscsi", NULL, MTX_DEF);
/* Get properties */
- OF_getprop(ofw_bus_get_node(dev), "reg", &sc->unit, sizeof(sc->unit));
+ OF_getencprop(ofw_bus_get_node(dev), "reg", &sc->unit,
+ sizeof(sc->unit));
/* Setup interrupt */
sc->irqid = 0;
diff --git a/sys/powerpc/pseries/platform_chrp.c b/sys/powerpc/pseries/platform_chrp.c
index b1fc948..ba43783 100644
--- a/sys/powerpc/pseries/platform_chrp.c
+++ b/sys/powerpc/pseries/platform_chrp.c
@@ -172,7 +172,7 @@ parse_drconf_memory(struct mem_region *ofmem, int *msz,
vm_offset_t base;
int i, idx, len, lasz, lmsz, res;
uint32_t flags, lmb_size[2];
- uint64_t *dmem;
+ uint32_t *dmem;
lmsz = *msz;
lasz = *asz;
@@ -182,7 +182,8 @@ parse_drconf_memory(struct mem_region *ofmem, int *msz,
/* No drconf node, return. */
return (0);
- res = OF_getprop(phandle, "ibm,lmb-size", lmb_size, sizeof(lmb_size));
+ res = OF_getencprop(phandle, "ibm,lmb-size", lmb_size,
+ sizeof(lmb_size));
if (res == -1)
return (0);
printf("Logical Memory Block size: %d MB\n", lmb_size[1] >> 20);
@@ -207,8 +208,8 @@ parse_drconf_memory(struct mem_region *ofmem, int *msz,
*/
cell_t arr[len/sizeof(cell_t)];
- res = OF_getprop(phandle, "ibm,dynamic-memory", &arr,
- sizeof(arr));
+ res = OF_getencprop(phandle, "ibm,dynamic-memory", arr,
+ sizeof(arr));
if (res == -1)
return (0);
@@ -216,12 +217,12 @@ parse_drconf_memory(struct mem_region *ofmem, int *msz,
idx = arr[0];
/* First address, in arr[1], arr[2]*/
- dmem = (uint64_t*)&arr[1];
+ dmem = &arr[1];
for (i = 0; i < idx; i++) {
- base = *dmem;
- dmem += 2;
- flags = *dmem;
+ base = ((uint64_t)dmem[0] << 32) + dmem[1];
+ dmem += 4;
+ flags = dmem[1];
/* Use region only if available and not reserved. */
if ((flags & 0x8) && !(flags & 0x80)) {
ofmem[lmsz].mr_start = base;
@@ -231,7 +232,7 @@ parse_drconf_memory(struct mem_region *ofmem, int *msz,
lmsz++;
lasz++;
}
- dmem++;
+ dmem += 2;
}
}
@@ -281,7 +282,7 @@ chrp_timebase_freq(platform_t plat, struct cpuref *cpuref)
phandle = cpuref->cr_hwref;
- OF_getprop(phandle, "timebase-frequency", &ticks, sizeof(ticks));
+ OF_getencprop(phandle, "timebase-frequency", &ticks, sizeof(ticks));
if (ticks <= 0)
panic("Unable to determine timebase frequency!");
@@ -327,10 +328,10 @@ chrp_smp_first_cpu(platform_t plat, struct cpuref *cpuref)
return (ENOENT);
cpuref->cr_hwref = cpu;
- res = OF_getprop(cpu, "ibm,ppc-interrupt-server#s", &cpuid,
+ res = OF_getencprop(cpu, "ibm,ppc-interrupt-server#s", &cpuid,
sizeof(cpuid));
if (res <= 0)
- res = OF_getprop(cpu, "reg", &cpuid, sizeof(cpuid));
+ res = OF_getencprop(cpu, "reg", &cpuid, sizeof(cpuid));
if (res <= 0)
cpuid = 0;
cpuref->cr_cpuid = cpuid;
@@ -349,7 +350,7 @@ chrp_smp_next_cpu(platform_t plat, struct cpuref *cpuref)
res = OF_getproplen(cpuref->cr_hwref, "ibm,ppc-interrupt-server#s");
if (res > 0) {
cell_t interrupt_servers[res/sizeof(cell_t)];
- OF_getprop(cpuref->cr_hwref, "ibm,ppc-interrupt-server#s",
+ OF_getencprop(cpuref->cr_hwref, "ibm,ppc-interrupt-server#s",
interrupt_servers, res);
for (i = 0; i < res/sizeof(cell_t) - 1; i++) {
if (interrupt_servers[i] == cpuref->cr_cpuid) {
@@ -371,10 +372,10 @@ chrp_smp_next_cpu(platform_t plat, struct cpuref *cpuref)
return (ENOENT);
cpuref->cr_hwref = cpu;
- res = OF_getprop(cpu, "ibm,ppc-interrupt-server#s", &cpuid,
+ res = OF_getencprop(cpu, "ibm,ppc-interrupt-server#s", &cpuid,
sizeof(cpuid));
if (res <= 0)
- res = OF_getprop(cpu, "reg", &cpuid, sizeof(cpuid));
+ res = OF_getencprop(cpu, "reg", &cpuid, sizeof(cpuid));
if (res <= 0)
cpuid = 0;
cpuref->cr_cpuid = cpuid;
@@ -393,7 +394,7 @@ chrp_smp_get_bsp(platform_t plat, struct cpuref *cpuref)
if (chosen == 0)
return (ENXIO);
- res = OF_getprop(chosen, "cpu", &inst, sizeof(inst));
+ res = OF_getencprop(chosen, "cpu", &inst, sizeof(inst));
if (res < 0)
return (ENXIO);
@@ -401,10 +402,10 @@ chrp_smp_get_bsp(platform_t plat, struct cpuref *cpuref)
/* Pick the primary thread. Can it be any other? */
cpuref->cr_hwref = bsp;
- res = OF_getprop(bsp, "ibm,ppc-interrupt-server#s", &cpuid,
+ res = OF_getencprop(bsp, "ibm,ppc-interrupt-server#s", &cpuid,
sizeof(cpuid));
if (res <= 0)
- res = OF_getprop(bsp, "reg", &cpuid, sizeof(cpuid));
+ res = OF_getencprop(bsp, "reg", &cpuid, sizeof(cpuid));
if (res <= 0)
cpuid = 0;
cpuref->cr_cpuid = cpuid;
diff --git a/sys/powerpc/pseries/plpar_iommu.c b/sys/powerpc/pseries/plpar_iommu.c
index 5edbf6d..eab2ce2 100644
--- a/sys/powerpc/pseries/plpar_iommu.c
+++ b/sys/powerpc/pseries/plpar_iommu.c
@@ -88,19 +88,20 @@ phyp_iommu_set_dma_tag(device_t bus, device_t dev, bus_dma_tag_t tag)
return (ENXIO);
node = ofw_bus_get_node(p);
- if (OF_getprop(node, "ibm,#dma-size-cells", &dma_scells,
+ if (OF_getencprop(node, "ibm,#dma-size-cells", &dma_scells,
sizeof(cell_t)) <= 0)
- OF_searchprop(node, "#size-cells", &dma_scells, sizeof(cell_t));
- if (OF_getprop(node, "ibm,#dma-address-cells", &dma_acells,
+ OF_searchencprop(node, "#size-cells", &dma_scells,
+ sizeof(cell_t));
+ if (OF_getencprop(node, "ibm,#dma-address-cells", &dma_acells,
sizeof(cell_t)) <= 0)
- OF_searchprop(node, "#address-cells", &dma_acells,
+ OF_searchencprop(node, "#address-cells", &dma_acells,
sizeof(cell_t));
if (ofw_bus_has_prop(p, "ibm,my-dma-window"))
- OF_getprop(node, "ibm,my-dma-window", dmawindow,
+ OF_getencprop(node, "ibm,my-dma-window", dmawindow,
sizeof(cell_t)*(dma_scells + dma_acells + 1));
else
- OF_getprop(node, "ibm,dma-window", dmawindow,
+ OF_getencprop(node, "ibm,dma-window", dmawindow,
sizeof(cell_t)*(dma_scells + dma_acells + 1));
struct dma_window *window = malloc(sizeof(struct dma_window),
diff --git a/sys/powerpc/pseries/rtas_pci.c b/sys/powerpc/pseries/rtas_pci.c
index 90a7e6b..9d8460c 100644
--- a/sys/powerpc/pseries/rtas_pci.c
+++ b/sys/powerpc/pseries/rtas_pci.c
@@ -133,7 +133,7 @@ rtaspci_attach(device_t dev)
sc->ex_write_pci_config = rtas_token_lookup("ibm,write-pci-config");
sc->sc_extended_config = 0;
- OF_getprop(ofw_bus_get_node(dev), "ibm,pci-config-space-type",
+ OF_getencprop(ofw_bus_get_node(dev), "ibm,pci-config-space-type",
&sc->sc_extended_config, sizeof(sc->sc_extended_config));
return (ofw_pci_attach(dev));
OpenPOWER on IntegriCloud