summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-orion
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-03-12 17:56:37 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-03-12 17:56:37 -0700
commit93d74463d018ddf05c169ad399e62e90e0f82fc0 (patch)
tree887f61c90a9aab75060a3adbc20bcb8debd98e20 /arch/arm/mach-orion
parentc463be3520065ef8c05e3cbdf946c69604e91ceb (diff)
parent4c91363dc01310dc34f1621ef00d680b4404f71c (diff)
downloadlinux-93d74463d018ddf05c169ad399e62e90e0f82fc0.tar.gz
linux-93d74463d018ddf05c169ad399e62e90e0f82fc0.tar.bz2
linux-93d74463d018ddf05c169ad399e62e90e0f82fc0.zip
Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: (26 commits) [ARM] 4856/1: Orion: initialise the sixth PCIe MBUS mapping window as well [ARM] 4855/1: Orion: use correct ethernet unit address range [ARM] 4853/1: include uImage target in make help [ARM] 4851/1: ns9xxx: fix size of gpiores [ARM] AT91: correct at91sam9263ek LCD power gpio pin [ARM] replace remaining __FUNCTION__ occurrences [ARM] 4850/1: include generic pgtable.h for !CONFIG_MMU case [ARM] 4849/1: move ATAGS asm definitions [ARM] 4848/1: at91: remove false lockdep warnings [ARM] 4847/1: kprobes: fix compilation with CONFIG_DEBUG_FS=y [ARM] include/asm-arm - use angle brackets for includes [ARM] 4845/1: Orion: Ignore memory tags with invalid data ARM: OMAP2: Register the L4 io bus to boot OMAP2 ARM: OMAP1: Compile in other 16xx boards to OSK defconfig ARM: OMAP1: Refresh H2 defconfig ARM: OMAP1: Refresh OSK defconfig ARM: OMAP: gpio lockdep updates ARM: OMAP1: omap1/pm.c build fix ARM: OMAP1: omap h2 regression fix ARM: OMAP1: Fix compile for boards depending on old gpio expander ...
Diffstat (limited to 'arch/arm/mach-orion')
-rw-r--r--arch/arm/mach-orion/addr-map.c14
-rw-r--r--arch/arm/mach-orion/common.c24
-rw-r--r--arch/arm/mach-orion/common.h6
-rw-r--r--arch/arm/mach-orion/dns323-setup.c1
-rw-r--r--arch/arm/mach-orion/gpio.c12
-rw-r--r--arch/arm/mach-orion/kurobox_pro-setup.c1
-rw-r--r--arch/arm/mach-orion/ts209-setup.c1
7 files changed, 47 insertions, 12 deletions
diff --git a/arch/arm/mach-orion/addr-map.c b/arch/arm/mach-orion/addr-map.c
index 2e2fd63643c3..58cc3c0333b6 100644
--- a/arch/arm/mach-orion/addr-map.c
+++ b/arch/arm/mach-orion/addr-map.c
@@ -97,14 +97,20 @@
#define PCIE_BAR_CTRL(n) ORION_PCIE_REG(0x1804 + ((n - 1) * 4))
#define PCIE_BAR_LO(n) ORION_PCIE_REG(0x0010 + ((n) * 8))
#define PCIE_BAR_HI(n) ORION_PCIE_REG(0x0014 + ((n) * 8))
-#define PCIE_WIN_CTRL(n) ORION_PCIE_REG(0x1820 + ((n) << 4))
-#define PCIE_WIN_BASE(n) ORION_PCIE_REG(0x1824 + ((n) << 4))
-#define PCIE_WIN_REMAP(n) ORION_PCIE_REG(0x182c + ((n) << 4))
+#define PCIE_WIN_CTRL(n) (((n) < 5) ? \
+ ORION_PCIE_REG(0x1820 + ((n) << 4)) : \
+ ORION_PCIE_REG(0x1880))
+#define PCIE_WIN_BASE(n) (((n) < 5) ? \
+ ORION_PCIE_REG(0x1824 + ((n) << 4)) : \
+ ORION_PCIE_REG(0x1884))
+#define PCIE_WIN_REMAP(n) (((n) < 5) ? \
+ ORION_PCIE_REG(0x182c + ((n) << 4)) : \
+ ORION_PCIE_REG(0x188c))
#define PCIE_DEFWIN_CTRL ORION_PCIE_REG(0x18b0)
#define PCIE_EXPROM_WIN_CTRL ORION_PCIE_REG(0x18c0)
#define PCIE_EXPROM_WIN_REMP ORION_PCIE_REG(0x18c4)
#define PCIE_MAX_BARS 3
-#define PCIE_MAX_WINS 5
+#define PCIE_MAX_WINS 6
/*
* Use PCIE BAR '1' for all DDR banks
diff --git a/arch/arm/mach-orion/common.c b/arch/arm/mach-orion/common.c
index 5f0ee4b8a9b7..bbc2b4ec932c 100644
--- a/arch/arm/mach-orion/common.c
+++ b/arch/arm/mach-orion/common.c
@@ -17,7 +17,9 @@
#include <linux/mv643xx_eth.h>
#include <linux/mv643xx_i2c.h>
#include <asm/page.h>
+#include <asm/setup.h>
#include <asm/timex.h>
+#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/arch/hardware.h>
#include "common.h"
@@ -177,8 +179,8 @@ static struct platform_device orion_ehci1 = {
static struct resource orion_eth_shared_resources[] = {
{
- .start = ORION_ETH_PHYS_BASE,
- .end = ORION_ETH_PHYS_BASE + 0xffff,
+ .start = ORION_ETH_PHYS_BASE + 0x2000,
+ .end = ORION_ETH_PHYS_BASE + 0x3fff,
.flags = IORESOURCE_MEM,
},
};
@@ -347,3 +349,21 @@ void __init orion_init(void)
platform_device_register(&orion_ehci1);
platform_device_register(&orion_i2c);
}
+
+/*
+ * Many orion-based systems have buggy bootloader implementations.
+ * This is a common fixup for bogus memory tags.
+ */
+void __init tag_fixup_mem32(struct machine_desc *mdesc, struct tag *t,
+ char **from, struct meminfo *meminfo)
+{
+ for (; t->hdr.size; t = tag_next(t))
+ if (t->hdr.tag == ATAG_MEM &&
+ (!t->u.mem.size || t->u.mem.size & ~PAGE_MASK ||
+ t->u.mem.start & ~PAGE_MASK)) {
+ printk(KERN_WARNING
+ "Clearing invalid memory bank %dKB@0x%08x\n",
+ t->u.mem.size / 1024, t->u.mem.start);
+ t->hdr.tag = 0;
+ }
+}
diff --git a/arch/arm/mach-orion/common.h b/arch/arm/mach-orion/common.h
index 10154ec885df..501497cc2c4d 100644
--- a/arch/arm/mach-orion/common.h
+++ b/arch/arm/mach-orion/common.h
@@ -83,4 +83,10 @@ struct mv_sata_platform_data;
void __init orion_sata_init(struct mv_sata_platform_data *sata_data);
+struct machine_desc;
+struct meminfo;
+struct tag;
+extern void __init tag_fixup_mem32(struct machine_desc *, struct tag *,
+ char **, struct meminfo *);
+
#endif /* __ARCH_ORION_COMMON_H__ */
diff --git a/arch/arm/mach-orion/dns323-setup.c b/arch/arm/mach-orion/dns323-setup.c
index 02b280c24820..076e155ad510 100644
--- a/arch/arm/mach-orion/dns323-setup.c
+++ b/arch/arm/mach-orion/dns323-setup.c
@@ -319,4 +319,5 @@ MACHINE_START(DNS323, "D-Link DNS-323")
.map_io = orion_map_io,
.init_irq = orion_init_irq,
.timer = &orion_timer,
+ .fixup = tag_fixup_mem32,
MACHINE_END
diff --git a/arch/arm/mach-orion/gpio.c b/arch/arm/mach-orion/gpio.c
index d5f00c86d616..f713818c66a3 100644
--- a/arch/arm/mach-orion/gpio.c
+++ b/arch/arm/mach-orion/gpio.c
@@ -36,7 +36,7 @@ int gpio_direction_input(unsigned pin)
unsigned long flags;
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
- pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
+ pr_debug("%s: invalid GPIO %d\n", __func__, pin);
return -EINVAL;
}
@@ -62,7 +62,7 @@ int gpio_direction_output(unsigned pin, int value)
int mask;
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
- pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
+ pr_debug("%s: invalid GPIO %d\n", __func__, pin);
return -EINVAL;
}
@@ -141,7 +141,7 @@ int gpio_request(unsigned pin, const char *label)
unsigned long flags;
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
- pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
+ pr_debug("%s: invalid GPIO %d\n", __func__, pin);
return -EINVAL;
}
@@ -149,7 +149,7 @@ int gpio_request(unsigned pin, const char *label)
if (gpio_label[pin]) {
pr_debug("%s: GPIO %d already used as %s\n",
- __FUNCTION__, pin, gpio_label[pin]);
+ __func__, pin, gpio_label[pin]);
ret = -EBUSY;
} else
gpio_label[pin] = label ? label : "?";
@@ -162,12 +162,12 @@ EXPORT_SYMBOL(gpio_request);
void gpio_free(unsigned pin)
{
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
- pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
+ pr_debug("%s: invalid GPIO %d\n", __func__, pin);
return;
}
if (!gpio_label[pin])
- pr_warning("%s: GPIO %d already freed\n", __FUNCTION__, pin);
+ pr_warning("%s: GPIO %d already freed\n", __func__, pin);
else
gpio_label[pin] = NULL;
}
diff --git a/arch/arm/mach-orion/kurobox_pro-setup.c b/arch/arm/mach-orion/kurobox_pro-setup.c
index 6817aca4aa26..785a07bdf1e2 100644
--- a/arch/arm/mach-orion/kurobox_pro-setup.c
+++ b/arch/arm/mach-orion/kurobox_pro-setup.c
@@ -240,4 +240,5 @@ MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro")
.map_io = orion_map_io,
.init_irq = orion_init_irq,
.timer = &orion_timer,
+ .fixup = tag_fixup_mem32,
MACHINE_END
diff --git a/arch/arm/mach-orion/ts209-setup.c b/arch/arm/mach-orion/ts209-setup.c
index b8cfe6813e9d..45764dad16d0 100644
--- a/arch/arm/mach-orion/ts209-setup.c
+++ b/arch/arm/mach-orion/ts209-setup.c
@@ -357,4 +357,5 @@ MACHINE_START(TS209, "QNAP TS-109/TS-209")
.map_io = orion_map_io,
.init_irq = orion_init_irq,
.timer = &orion_timer,
+ .fixup = tag_fixup_mem32,
MACHINE_END