Commit 11b897cf authored by Manuel Lauss's avatar Manuel Lauss Committed by Ralf Baechle

MIPS: Alchemy: use 36bit addresses for PCMCIA resources.

On Alchemy the PCMCIA area lies at the end of the chips 36bit system bus
area.  Currently, addresses at the far end of the 32bit area are assumed
to belong to the PCMCIA area and fixed up to the real 36bit address before
being passed to ioremap().

A previous commit enabled 64 bit physical size for the resource datatype on
Alchemy and this allows to use the correct 36bit addresses when registering
the PCMCIA sockets.

This patch removes the 32-to-36bit address fixup and registers the Alchemy
demo board pcmcia socket with the correct 36bit physical addresses.

Tested on DB1200, with a CF card (ide-cs driver) and a 3c589 PCMCIA ethernet
card.
Signed-off-by: default avatarManuel Lauss <manuel.lauss@gmail.com>
To: Linux-MIPS <linux-mips@linux-mips.org>
Cc: Manuel Lauss <manuel.lauss@gmail.com>
Patchwork: http://patchwork.linux-mips.org/patch/994/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent b9b37787
...@@ -69,38 +69,20 @@ void __init plat_mem_setup(void) ...@@ -69,38 +69,20 @@ void __init plat_mem_setup(void)
iomem_resource.end = IOMEM_RESOURCE_END; iomem_resource.end = IOMEM_RESOURCE_END;
} }
#if defined(CONFIG_64BIT_PHYS_ADDR) #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_PCI)
/* This routine should be valid for all Au1x based boards */ /* This routine should be valid for all Au1x based boards */
phys_t __fixup_bigphys_addr(phys_t phys_addr, phys_t size) phys_t __fixup_bigphys_addr(phys_t phys_addr, phys_t size)
{ {
u32 start = (u32)Au1500_PCI_MEM_START;
u32 end = (u32)Au1500_PCI_MEM_END;
/* Don't fixup 36-bit addresses */ /* Don't fixup 36-bit addresses */
if ((phys_addr >> 32) != 0) if ((phys_addr >> 32) != 0)
return phys_addr; return phys_addr;
#ifdef CONFIG_PCI /* Check for PCI memory window */
{ if (phys_addr >= start && (phys_addr + size - 1) <= end)
u32 start = (u32)Au1500_PCI_MEM_START; return (phys_t)((phys_addr - start) + Au1500_PCI_MEM_START);
u32 end = (u32)Au1500_PCI_MEM_END;
/* Check for PCI memory window */
if (phys_addr >= start && (phys_addr + size - 1) <= end)
return (phys_t)
((phys_addr - start) + Au1500_PCI_MEM_START);
}
#endif
/*
* All Au1xx0 SOCs have a PCMCIA controller.
* We setup our 32-bit pseudo addresses to be equal to the
* 36-bit addr >> 4, to make it easier to check the address
* and fix it.
* The PCMCIA socket 0 physical attribute address is 0xF 4000 0000.
* The pseudo address we use is 0xF400 0000. Any address over
* 0xF400 0000 is a PCMCIA pseudo address.
*/
if ((phys_addr >= PCMCIA_ATTR_PSEUDO_PHYS) &&
(phys_addr < PCMCIA_PSEUDO_END))
return (phys_t)(phys_addr << 4);
/* default nop */ /* default nop */
return phys_addr; return phys_addr;
......
...@@ -507,24 +507,24 @@ static int __init db1200_dev_init(void) ...@@ -507,24 +507,24 @@ static int __init db1200_dev_init(void)
(void __iomem *)KSEG1ADDR(PSC1_PHYS_ADDR) + PSC_SEL_OFFSET); (void __iomem *)KSEG1ADDR(PSC1_PHYS_ADDR) + PSC_SEL_OFFSET);
wmb(); wmb();
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS, PCMCIA_MEM_PHYS_ADDR,
PCMCIA_MEM_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_IO_PSEUDO_PHYS, PCMCIA_IO_PHYS_ADDR,
PCMCIA_IO_PSEUDO_PHYS + 0x00001000 - 1, PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
DB1200_PC0_INT, DB1200_PC0_INT,
DB1200_PC0_INSERT_INT, DB1200_PC0_INSERT_INT,
/*DB1200_PC0_STSCHG_INT*/0, /*DB1200_PC0_STSCHG_INT*/0,
DB1200_PC0_EJECT_INT, DB1200_PC0_EJECT_INT,
0); 0);
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00400000, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x004000000,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00440000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x004400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS + 0x00400000, PCMCIA_MEM_PHYS_ADDR + 0x004000000,
PCMCIA_MEM_PSEUDO_PHYS + 0x00440000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x004400000 - 1,
PCMCIA_IO_PSEUDO_PHYS + 0x00400000, PCMCIA_IO_PHYS_ADDR + 0x004000000,
PCMCIA_IO_PSEUDO_PHYS + 0x00401000 - 1, PCMCIA_IO_PHYS_ADDR + 0x004010000 - 1,
DB1200_PC1_INT, DB1200_PC1_INT,
DB1200_PC1_INSERT_INT, DB1200_PC1_INSERT_INT,
/*DB1200_PC1_STSCHG_INT*/0, /*DB1200_PC1_STSCHG_INT*/0,
......
...@@ -88,24 +88,24 @@ ...@@ -88,24 +88,24 @@
static int __init db1xxx_dev_init(void) static int __init db1xxx_dev_init(void)
{ {
#ifdef DB1XXX_HAS_PCMCIA #ifdef DB1XXX_HAS_PCMCIA
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS, PCMCIA_MEM_PHYS_ADDR,
PCMCIA_MEM_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_IO_PSEUDO_PHYS, PCMCIA_IO_PHYS_ADDR,
PCMCIA_IO_PSEUDO_PHYS + 0x00001000 - 1, PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
DB1XXX_PCMCIA_CARD0, DB1XXX_PCMCIA_CARD0,
DB1XXX_PCMCIA_CD0, DB1XXX_PCMCIA_CD0,
/*DB1XXX_PCMCIA_STSCHG0*/0, /*DB1XXX_PCMCIA_STSCHG0*/0,
0, 0,
0); 0);
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00400000, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x004000000,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00440000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x004400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS + 0x00400000, PCMCIA_MEM_PHYS_ADDR + 0x004000000,
PCMCIA_MEM_PSEUDO_PHYS + 0x00440000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x004400000 - 1,
PCMCIA_IO_PSEUDO_PHYS + 0x00400000, PCMCIA_IO_PHYS_ADDR + 0x004000000,
PCMCIA_IO_PSEUDO_PHYS + 0x00401000 - 1, PCMCIA_IO_PHYS_ADDR + 0x004010000 - 1,
DB1XXX_PCMCIA_CARD1, DB1XXX_PCMCIA_CARD1,
DB1XXX_PCMCIA_CD1, DB1XXX_PCMCIA_CD1,
/*DB1XXX_PCMCIA_STSCHG1*/0, /*DB1XXX_PCMCIA_STSCHG1*/0,
......
...@@ -30,12 +30,12 @@ static int __init pb1100_dev_init(void) ...@@ -30,12 +30,12 @@ static int __init pb1100_dev_init(void)
int swapped; int swapped;
/* PCMCIA. single socket, identical to Pb1500 */ /* PCMCIA. single socket, identical to Pb1500 */
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS, PCMCIA_MEM_PHYS_ADDR,
PCMCIA_MEM_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_IO_PSEUDO_PHYS, PCMCIA_IO_PHYS_ADDR,
PCMCIA_IO_PSEUDO_PHYS + 0x00001000 - 1, PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
AU1100_GPIO11_INT, /* card */ AU1100_GPIO11_INT, /* card */
AU1100_GPIO9_INT, /* insert */ AU1100_GPIO9_INT, /* insert */
/*AU1100_GPIO10_INT*/0, /* stschg */ /*AU1100_GPIO10_INT*/0, /* stschg */
......
...@@ -170,24 +170,24 @@ static int __init board_register_devices(void) ...@@ -170,24 +170,24 @@ static int __init board_register_devices(void)
{ {
int swapped; int swapped;
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS, PCMCIA_MEM_PHYS_ADDR,
PCMCIA_MEM_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_IO_PSEUDO_PHYS, PCMCIA_IO_PHYS_ADDR,
PCMCIA_IO_PSEUDO_PHYS + 0x00001000 - 1, PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
PB1200_PC0_INT, PB1200_PC0_INT,
PB1200_PC0_INSERT_INT, PB1200_PC0_INSERT_INT,
/*PB1200_PC0_STSCHG_INT*/0, /*PB1200_PC0_STSCHG_INT*/0,
PB1200_PC0_EJECT_INT, PB1200_PC0_EJECT_INT,
0); 0);
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00800000, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x008000000,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00840000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x008400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS + 0x00800000, PCMCIA_MEM_PHYS_ADDR + 0x008000000,
PCMCIA_MEM_PSEUDO_PHYS + 0x00840000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x008400000 - 1,
PCMCIA_IO_PSEUDO_PHYS + 0x00800000, PCMCIA_IO_PHYS_ADDR + 0x008000000,
PCMCIA_IO_PSEUDO_PHYS + 0x00801000 - 1, PCMCIA_IO_PHYS_ADDR + 0x008010000 - 1,
PB1200_PC1_INT, PB1200_PC1_INT,
PB1200_PC1_INSERT_INT, PB1200_PC1_INSERT_INT,
/*PB1200_PC1_STSCHG_INT*/0, /*PB1200_PC1_STSCHG_INT*/0,
......
...@@ -29,12 +29,12 @@ static int __init pb1500_dev_init(void) ...@@ -29,12 +29,12 @@ static int __init pb1500_dev_init(void)
int swapped; int swapped;
/* PCMCIA. single socket, identical to Pb1500 */ /* PCMCIA. single socket, identical to Pb1500 */
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS, PCMCIA_MEM_PHYS_ADDR,
PCMCIA_MEM_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_IO_PSEUDO_PHYS, PCMCIA_IO_PHYS_ADDR,
PCMCIA_IO_PSEUDO_PHYS + 0x00001000 - 1, PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
AU1500_GPIO11_INT, /* card */ AU1500_GPIO11_INT, /* card */
AU1500_GPIO9_INT, /* insert */ AU1500_GPIO9_INT, /* insert */
/*AU1500_GPIO10_INT*/0, /* stschg */ /*AU1500_GPIO10_INT*/0, /* stschg */
......
...@@ -37,24 +37,24 @@ static int __init pb1550_dev_init(void) ...@@ -37,24 +37,24 @@ static int __init pb1550_dev_init(void)
* drivers are used to shared irqs and b) statuschange isn't really use- * drivers are used to shared irqs and b) statuschange isn't really use-
* ful anyway. * ful anyway.
*/ */
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS, PCMCIA_MEM_PHYS_ADDR,
PCMCIA_MEM_PSEUDO_PHYS + 0x00040000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
PCMCIA_IO_PSEUDO_PHYS, PCMCIA_IO_PHYS_ADDR,
PCMCIA_IO_PSEUDO_PHYS + 0x00001000 - 1, PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
AU1550_GPIO201_205_INT, AU1550_GPIO201_205_INT,
AU1550_GPIO0_INT, AU1550_GPIO0_INT,
0, 0,
0, 0,
0); 0);
db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00800000, db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x008000000,
PCMCIA_ATTR_PSEUDO_PHYS + 0x00840000 - 1, PCMCIA_ATTR_PHYS_ADDR + 0x008400000 - 1,
PCMCIA_MEM_PSEUDO_PHYS + 0x00800000, PCMCIA_MEM_PHYS_ADDR + 0x008000000,
PCMCIA_MEM_PSEUDO_PHYS + 0x00840000 - 1, PCMCIA_MEM_PHYS_ADDR + 0x008400000 - 1,
PCMCIA_IO_PSEUDO_PHYS + 0x00800000, PCMCIA_IO_PHYS_ADDR + 0x008000000,
PCMCIA_IO_PSEUDO_PHYS + 0x00801000 - 1, PCMCIA_IO_PHYS_ADDR + 0x008010000 - 1,
AU1550_GPIO201_205_INT, AU1550_GPIO201_205_INT,
AU1550_GPIO1_INT, AU1550_GPIO1_INT,
0, 0,
......
...@@ -39,12 +39,12 @@ static int __init db1x_poweroff_setup(void) ...@@ -39,12 +39,12 @@ static int __init db1x_poweroff_setup(void)
late_initcall(db1x_poweroff_setup); late_initcall(db1x_poweroff_setup);
/* register a pcmcia socket */ /* register a pcmcia socket */
int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start, int __init db1x_register_pcmcia_socket(phys_addr_t pcmcia_attr_start,
unsigned long pseudo_attr_end, phys_addr_t pcmcia_attr_end,
unsigned long pseudo_mem_start, phys_addr_t pcmcia_mem_start,
unsigned long pseudo_mem_end, phys_addr_t pcmcia_mem_end,
unsigned long pseudo_io_start, phys_addr_t pcmcia_io_start,
unsigned long pseudo_io_end, phys_addr_t pcmcia_io_end,
int card_irq, int card_irq,
int cd_irq, int cd_irq,
int stschg_irq, int stschg_irq,
...@@ -71,20 +71,20 @@ int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start, ...@@ -71,20 +71,20 @@ int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
goto out; goto out;
} }
sr[0].name = "pseudo-attr"; sr[0].name = "pcmcia-attr";
sr[0].flags = IORESOURCE_MEM; sr[0].flags = IORESOURCE_MEM;
sr[0].start = pseudo_attr_start; sr[0].start = pcmcia_attr_start;
sr[0].end = pseudo_attr_end; sr[0].end = pcmcia_attr_end;
sr[1].name = "pseudo-mem"; sr[1].name = "pcmcia-mem";
sr[1].flags = IORESOURCE_MEM; sr[1].flags = IORESOURCE_MEM;
sr[1].start = pseudo_mem_start; sr[1].start = pcmcia_mem_start;
sr[1].end = pseudo_mem_end; sr[1].end = pcmcia_mem_end;
sr[2].name = "pseudo-io"; sr[2].name = "pcmcia-io";
sr[2].flags = IORESOURCE_MEM; sr[2].flags = IORESOURCE_MEM;
sr[2].start = pseudo_io_start; sr[2].start = pcmcia_io_start;
sr[2].end = pseudo_io_end; sr[2].end = pcmcia_io_end;
sr[3].name = "insert"; sr[3].name = "insert";
sr[3].flags = IORESOURCE_IRQ; sr[3].flags = IORESOURCE_IRQ;
...@@ -96,9 +96,9 @@ int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start, ...@@ -96,9 +96,9 @@ int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
i = 5; i = 5;
if (stschg_irq) { if (stschg_irq) {
sr[i].name = "insert"; sr[i].name = "stschg";
sr[i].flags = IORESOURCE_IRQ; sr[i].flags = IORESOURCE_IRQ;
sr[i].start = sr[i].end = cd_irq; sr[i].start = sr[i].end = stschg_irq;
i++; i++;
} }
if (eject_irq) { if (eject_irq) {
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
#include <linux/init.h> #include <linux/init.h>
int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start, int __init db1x_register_pcmcia_socket(phys_addr_t pcmcia_attr_start,
unsigned long pseudo_attr_len, phys_addr_t pcmcia_attr_len,
unsigned long pseudo_mem_start, phys_addr_t pcmcia_mem_start,
unsigned long pseudo_mem_end, phys_addr_t pcmcia_mem_end,
unsigned long pseudo_io_start, phys_addr_t pcmcia_io_start,
unsigned long pseudo_io_end, phys_addr_t pcmcia_io_end,
int card_irq, int card_irq,
int cd_irq, int cd_irq,
int stschg_irq, int stschg_irq,
......
...@@ -25,22 +25,22 @@ ...@@ -25,22 +25,22 @@
static struct resource xxs1500_pcmcia_res[] = { static struct resource xxs1500_pcmcia_res[] = {
{ {
.name = "pseudo-io", .name = "pcmcia-io",
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
.start = PCMCIA_IO_PSEUDO_PHYS, .start = PCMCIA_IO_PHYS_ADDR,
.end = PCMCIA_IO_PSEUDO_PHYS + 0x00040000 - 1, .end = PCMCIA_IO_PHYS_ADDR + 0x000400000 - 1,
}, },
{ {
.name = "pseudo-attr", .name = "pcmcia-attr",
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
.start = PCMCIA_ATTR_PSEUDO_PHYS, .start = PCMCIA_ATTR_PHYS_ADDR,
.end = PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1, .end = PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
}, },
{ {
.name = "pseudo-mem", .name = "pcmcia-mem",
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
.start = PCMCIA_IO_PSEUDO_PHYS, .start = PCMCIA_MEM_PHYS_ADDR,
.end = PCMCIA_IO_PSEUDO_PHYS + 0x00040000 - 1, .end = PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
}, },
}; };
......
...@@ -1678,18 +1678,4 @@ enum soc_au1200_ints { ...@@ -1678,18 +1678,4 @@ enum soc_au1200_ints {
#endif #endif
/*
* All Au1xx0 SOCs have a PCMCIA controller.
* We setup our 32-bit pseudo addresses to be equal to the
* 36-bit addr >> 4, to make it easier to check the address
* and fix it.
* The PCMCIA socket 0 physical attribute address is 0xF 4000 0000.
* The pseudo address we use is 0xF400 0000. Any address over
* 0xF400 0000 is a PCMCIA pseudo address.
*/
#define PCMCIA_IO_PSEUDO_PHYS (PCMCIA_IO_PHYS_ADDR >> 4)
#define PCMCIA_ATTR_PSEUDO_PHYS (PCMCIA_ATTR_PHYS_ADDR >> 4)
#define PCMCIA_MEM_PSEUDO_PHYS (PCMCIA_MEM_PHYS_ADDR >> 4)
#define PCMCIA_PSEUDO_END (0xffffffff)
#endif #endif
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include <linux/types.h> #include <linux/types.h>
#ifdef CONFIG_64BIT_PHYS_ADDR #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_PCI)
extern phys_t __fixup_bigphys_addr(phys_t, phys_t); extern phys_t __fixup_bigphys_addr(phys_t, phys_t);
#else #else
static inline phys_t __fixup_bigphys_addr(phys_t phys_addr, phys_t size) static inline phys_t __fixup_bigphys_addr(phys_t phys_addr, phys_t size)
......
...@@ -405,18 +405,16 @@ int au1x00_pcmcia_socket_probe(struct device *dev, struct pcmcia_low_level *ops, ...@@ -405,18 +405,16 @@ int au1x00_pcmcia_socket_probe(struct device *dev, struct pcmcia_low_level *ops,
skt->virt_io = (void *) skt->virt_io = (void *)
(ioremap((phys_t)AU1X_SOCK0_IO, 0x1000) - (ioremap((phys_t)AU1X_SOCK0_IO, 0x1000) -
(u32)mips_io_port_base); (u32)mips_io_port_base);
skt->phys_attr = AU1X_SOCK0_PSEUDO_PHYS_ATTR; skt->phys_attr = AU1X_SOCK0_PHYS_ATTR;
skt->phys_mem = AU1X_SOCK0_PSEUDO_PHYS_MEM; skt->phys_mem = AU1X_SOCK0_PHYS_MEM;
} }
#ifndef CONFIG_MIPS_XXS1500
else { else {
skt->virt_io = (void *) skt->virt_io = (void *)
(ioremap((phys_t)AU1X_SOCK1_IO, 0x1000) - (ioremap((phys_t)AU1X_SOCK1_IO, 0x1000) -
(u32)mips_io_port_base); (u32)mips_io_port_base);
skt->phys_attr = AU1X_SOCK1_PSEUDO_PHYS_ATTR; skt->phys_attr = AU1X_SOCK1_PHYS_ATTR;
skt->phys_mem = AU1X_SOCK1_PSEUDO_PHYS_MEM; skt->phys_mem = AU1X_SOCK1_PHYS_MEM;
} }
#endif
pcmcia_base_vaddrs[i] = (u32 *)skt->virt_io; pcmcia_base_vaddrs[i] = (u32 *)skt->virt_io;
ret = ops->hw_init(skt); ret = ops->hw_init(skt);
......
...@@ -36,10 +36,6 @@ ...@@ -36,10 +36,6 @@
#define AU1X_SOCK0_IO 0xF00000000ULL #define AU1X_SOCK0_IO 0xF00000000ULL
#define AU1X_SOCK0_PHYS_ATTR 0xF40000000ULL #define AU1X_SOCK0_PHYS_ATTR 0xF40000000ULL
#define AU1X_SOCK0_PHYS_MEM 0xF80000000ULL #define AU1X_SOCK0_PHYS_MEM 0xF80000000ULL
/* pseudo 32 bit phys addresses, which get fixed up to the
* real 36 bit address in fixup_bigphys_addr() */
#define AU1X_SOCK0_PSEUDO_PHYS_ATTR 0xF4000000
#define AU1X_SOCK0_PSEUDO_PHYS_MEM 0xF8000000
/* pcmcia socket 1 needs external glue logic so the memory map /* pcmcia socket 1 needs external glue logic so the memory map
* differs from board to board. * differs from board to board.
...@@ -48,8 +44,6 @@ ...@@ -48,8 +44,6 @@
#define AU1X_SOCK1_IO 0xF08000000ULL #define AU1X_SOCK1_IO 0xF08000000ULL
#define AU1X_SOCK1_PHYS_ATTR 0xF48000000ULL #define AU1X_SOCK1_PHYS_ATTR 0xF48000000ULL
#define AU1X_SOCK1_PHYS_MEM 0xF88000000ULL #define AU1X_SOCK1_PHYS_MEM 0xF88000000ULL
#define AU1X_SOCK1_PSEUDO_PHYS_ATTR 0xF4800000
#define AU1X_SOCK1_PSEUDO_PHYS_MEM 0xF8800000
#endif #endif
struct pcmcia_state { struct pcmcia_state {
......
...@@ -43,9 +43,9 @@ struct db1x_pcmcia_sock { ...@@ -43,9 +43,9 @@ struct db1x_pcmcia_sock {
void *virt_io; void *virt_io;
/* the "pseudo" addresses of the PCMCIA space. */ /* the "pseudo" addresses of the PCMCIA space. */
unsigned long phys_io; phys_addr_t phys_io;
unsigned long phys_attr; phys_addr_t phys_attr;
unsigned long phys_mem; phys_addr_t phys_mem;
/* previous flags for set_socket() */ /* previous flags for set_socket() */
unsigned int old_flags; unsigned int old_flags;
...@@ -404,7 +404,6 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -404,7 +404,6 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
{ {
struct db1x_pcmcia_sock *sock; struct db1x_pcmcia_sock *sock;
struct resource *r; struct resource *r;
phys_t physio;
int ret, bid; int ret, bid;
sock = kzalloc(sizeof(struct db1x_pcmcia_sock), GFP_KERNEL); sock = kzalloc(sizeof(struct db1x_pcmcia_sock), GFP_KERNEL);
...@@ -465,7 +464,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -465,7 +464,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
* for this socket (usually the 36bit address shifted 4 to the * for this socket (usually the 36bit address shifted 4 to the
* right). * right).
*/ */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-attr"); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-attr");
if (!r) { if (!r) {
printk(KERN_ERR "pcmcia%d has no 'pseudo-attr' resource!\n", printk(KERN_ERR "pcmcia%d has no 'pseudo-attr' resource!\n",
sock->nr); sock->nr);
...@@ -477,7 +476,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -477,7 +476,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
* pseudo-mem: The 32bit address of the PCMCIA memory space for * pseudo-mem: The 32bit address of the PCMCIA memory space for
* this socket (usually the 36bit address shifted 4 to the right) * this socket (usually the 36bit address shifted 4 to the right)
*/ */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-mem"); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-mem");
if (!r) { if (!r) {
printk(KERN_ERR "pcmcia%d has no 'pseudo-mem' resource!\n", printk(KERN_ERR "pcmcia%d has no 'pseudo-mem' resource!\n",
sock->nr); sock->nr);
...@@ -489,7 +488,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -489,7 +488,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
* pseudo-io: The 32bit address of the PCMCIA IO space for this * pseudo-io: The 32bit address of the PCMCIA IO space for this
* socket (usually the 36bit address shifted 4 to the right). * socket (usually the 36bit address shifted 4 to the right).
*/ */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-io"); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-io");
if (!r) { if (!r) {
printk(KERN_ERR "pcmcia%d has no 'pseudo-io' resource!\n", printk(KERN_ERR "pcmcia%d has no 'pseudo-io' resource!\n",
sock->nr); sock->nr);
...@@ -497,12 +496,6 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -497,12 +496,6 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
} }
sock->phys_io = r->start; sock->phys_io = r->start;
/* IO: we must remap the full 36bit address (for reference see
* alchemy/common/setup.c::__fixup_bigphys_addr())
*/
physio = ((phys_t)sock->phys_io) << 4;
/* /*
* PCMCIA client drivers use the inb/outb macros to access * PCMCIA client drivers use the inb/outb macros to access
* the IO registers. Since mips_io_port_base is added * the IO registers. Since mips_io_port_base is added
...@@ -511,7 +504,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -511,7 +504,7 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
* to access the I/O or MEM address directly, without * to access the I/O or MEM address directly, without
* going through this "mips_io_port_base" mechanism. * going through this "mips_io_port_base" mechanism.
*/ */
sock->virt_io = (void *)(ioremap(physio, IO_MAP_SIZE) - sock->virt_io = (void *)(ioremap(sock->phys_io, IO_MAP_SIZE) -
mips_io_port_base); mips_io_port_base);
if (!sock->virt_io) { if (!sock->virt_io) {
...@@ -547,8 +540,8 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -547,8 +540,8 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
goto out2; goto out2;
} }
printk(KERN_INFO "Alchemy Db/Pb1xxx pcmcia%d @ io/attr/mem %08lx" printk(KERN_INFO "Alchemy Db/Pb1xxx pcmcia%d @ io/attr/mem %09llx"
"(%p) %08lx %08lx card/insert/stschg/eject irqs @ %d " "(%p) %09llx %09llx card/insert/stschg/eject irqs @ %d "
"%d %d %d\n", sock->nr, sock->phys_io, sock->virt_io, "%d %d %d\n", sock->nr, sock->phys_io, sock->virt_io,
sock->phys_attr, sock->phys_mem, sock->card_irq, sock->phys_attr, sock->phys_mem, sock->card_irq,
sock->insert_irq, sock->stschg_irq, sock->eject_irq); sock->insert_irq, sock->stschg_irq, sock->eject_irq);
......
...@@ -56,10 +56,9 @@ struct xxs1500_pcmcia_sock { ...@@ -56,10 +56,9 @@ struct xxs1500_pcmcia_sock {
struct pcmcia_socket socket; struct pcmcia_socket socket;
void *virt_io; void *virt_io;
/* the "pseudo" addresses of the PCMCIA space. */ phys_addr_t phys_io;
unsigned long phys_io; phys_addr_t phys_attr;
unsigned long phys_attr; phys_addr_t phys_mem;
unsigned long phys_mem;
/* previous flags for set_socket() */ /* previous flags for set_socket() */
unsigned int old_flags; unsigned int old_flags;
...@@ -211,7 +210,6 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev) ...@@ -211,7 +210,6 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
{ {
struct xxs1500_pcmcia_sock *sock; struct xxs1500_pcmcia_sock *sock;
struct resource *r; struct resource *r;
phys_t physio;
int ret, irq; int ret, irq;
sock = kzalloc(sizeof(struct xxs1500_pcmcia_sock), GFP_KERNEL); sock = kzalloc(sizeof(struct xxs1500_pcmcia_sock), GFP_KERNEL);
...@@ -225,9 +223,9 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev) ...@@ -225,9 +223,9 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
* for this socket (usually the 36bit address shifted 4 to the * for this socket (usually the 36bit address shifted 4 to the
* right). * right).
*/ */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-attr"); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-attr");
if (!r) { if (!r) {
dev_err(&pdev->dev, "missing 'pseudo-attr' resource!\n"); dev_err(&pdev->dev, "missing 'pcmcia-attr' resource!\n");
goto out0; goto out0;
} }
sock->phys_attr = r->start; sock->phys_attr = r->start;
...@@ -236,9 +234,9 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev) ...@@ -236,9 +234,9 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
* pseudo-mem: The 32bit address of the PCMCIA memory space for * pseudo-mem: The 32bit address of the PCMCIA memory space for
* this socket (usually the 36bit address shifted 4 to the right) * this socket (usually the 36bit address shifted 4 to the right)
*/ */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-mem"); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-mem");
if (!r) { if (!r) {
dev_err(&pdev->dev, "missing 'pseudo-mem' resource!\n"); dev_err(&pdev->dev, "missing 'pcmcia-mem' resource!\n");
goto out0; goto out0;
} }
sock->phys_mem = r->start; sock->phys_mem = r->start;
...@@ -247,19 +245,14 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev) ...@@ -247,19 +245,14 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
* pseudo-io: The 32bit address of the PCMCIA IO space for this * pseudo-io: The 32bit address of the PCMCIA IO space for this
* socket (usually the 36bit address shifted 4 to the right). * socket (usually the 36bit address shifted 4 to the right).
*/ */
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-io"); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-io");
if (!r) { if (!r) {
dev_err(&pdev->dev, "missing 'pseudo-io' resource!\n"); dev_err(&pdev->dev, "missing 'pcmcia-io' resource!\n");
goto out0; goto out0;
} }
sock->phys_io = r->start; sock->phys_io = r->start;
/* for io must remap the full 36bit address (for reference see
* alchemy/common/setup.c::__fixup_bigphys_addr)
*/
physio = ((phys_t)sock->phys_io) << 4;
/* /*
* PCMCIA client drivers use the inb/outb macros to access * PCMCIA client drivers use the inb/outb macros to access
* the IO registers. Since mips_io_port_base is added * the IO registers. Since mips_io_port_base is added
...@@ -268,7 +261,7 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev) ...@@ -268,7 +261,7 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
* to access the I/O or MEM address directly, without * to access the I/O or MEM address directly, without
* going through this "mips_io_port_base" mechanism. * going through this "mips_io_port_base" mechanism.
*/ */
sock->virt_io = (void *)(ioremap(physio, IO_MAP_SIZE) - sock->virt_io = (void *)(ioremap(sock->phys_io, IO_MAP_SIZE) -
mips_io_port_base); mips_io_port_base);
if (!sock->virt_io) { if (!sock->virt_io) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment