git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sparc32: Move sun4d show_leds() out of asm/obio.h
[safe/jmp/linux-2.6]
/
arch
/
sparc
/
kernel
/
of_device.c
diff --git
a/arch/sparc/kernel/of_device.c
b/arch/sparc/kernel/of_device.c
index
4ef1607
..
c88af7e
100644
(file)
--- a/
arch/sparc/kernel/of_device.c
+++ b/
arch/sparc/kernel/of_device.c
@@
-93,7
+93,7
@@
struct of_bus {
int *addrc, int *sizec);
int (*map)(u32 *addr, const u32 *range,
int na, int ns, int pna);
int *addrc, int *sizec);
int (*map)(u32 *addr, const u32 *range,
int na, int ns, int pna);
- unsigned
int (*get_flags)(const u32 *addr
);
+ unsigned
long (*get_flags)(const u32 *addr, unsigned long
);
};
/*
};
/*
@@
-153,8
+153,10
@@
static int of_bus_default_map(u32 *addr, const u32 *range,
return 0;
}
return 0;
}
-static unsigned
int of_bus_default_get_flags(const u32 *addr
)
+static unsigned
long of_bus_default_get_flags(const u32 *addr, unsigned long flags
)
{
{
+ if (flags)
+ return flags;
return IORESOURCE_MEM;
}
return IORESOURCE_MEM;
}
@@
-217,17
+219,21
@@
static int of_bus_pci_map(u32 *addr, const u32 *range,
return 0;
}
return 0;
}
-static unsigned
int of_bus_pci_get_flags(const u32 *addr
)
+static unsigned
long of_bus_pci_get_flags(const u32 *addr, unsigned long flags
)
{
{
- unsigned int flags = 0;
u32 w = addr[0];
u32 w = addr[0];
+ /* For PCI, we override whatever child busses may have used. */
+ flags = 0;
switch((w >> 24) & 0x03) {
case 0x01:
flags |= IORESOURCE_IO;
switch((w >> 24) & 0x03) {
case 0x01:
flags |= IORESOURCE_IO;
+ break;
+
case 0x02: /* 32 bits */
case 0x03: /* 64 bits */
flags |= IORESOURCE_MEM;
case 0x02: /* 32 bits */
case 0x03: /* 64 bits */
flags |= IORESOURCE_MEM;
+ break;
}
if (w & 0x40000000)
flags |= IORESOURCE_PREFETCH;
}
if (w & 0x40000000)
flags |= IORESOURCE_PREFETCH;
@@
-406,10
+412,11
@@
static void __init build_device_resources(struct of_device *op,
int pna, pns;
size = of_read_addr(reg + na, ns);
int pna, pns;
size = of_read_addr(reg + na, ns);
- flags = bus->get_flags(reg);
memcpy(addr, reg, na * 4);
memcpy(addr, reg, na * 4);
+ flags = bus->get_flags(reg, 0);
+
if (use_1to1_mapping(pp)) {
result = of_read_addr(addr, na);
goto build_res;
if (use_1to1_mapping(pp)) {
result = of_read_addr(addr, na);
goto build_res;
@@
-434,6
+441,8
@@
static void __init build_device_resources(struct of_device *op,
dna, dns, pna))
break;
dna, dns, pna))
break;
+ flags = pbus->get_flags(addr, flags);
+
dna = pna;
dns = pns;
dbus = pbus;
dna = pna;
dns = pns;
dbus = pbus;