MIPS: Alchemy: use 36bit addresses for PCMCIA resources.
authorManuel Lauss <manuel.lauss@googlemail.com>
Wed, 24 Feb 2010 16:40:21 +0000 (17:40 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Sat, 27 Feb 2010 11:53:43 +0000 (12:53 +0100)
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: Manuel 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: Ralf Baechle <ralf@linux-mips.org>
16 files changed:
arch/mips/alchemy/common/setup.c
arch/mips/alchemy/devboards/db1200/platform.c
arch/mips/alchemy/devboards/db1x00/platform.c
arch/mips/alchemy/devboards/pb1100/platform.c
arch/mips/alchemy/devboards/pb1200/platform.c
arch/mips/alchemy/devboards/pb1500/platform.c
arch/mips/alchemy/devboards/pb1550/platform.c
arch/mips/alchemy/devboards/platform.c
arch/mips/alchemy/devboards/platform.h
arch/mips/alchemy/xxs1500/platform.c
arch/mips/include/asm/mach-au1x00/au1000.h
arch/mips/include/asm/mach-au1x00/ioremap.h
drivers/pcmcia/au1000_generic.c
drivers/pcmcia/au1000_generic.h
drivers/pcmcia/db1xxx_ss.c
drivers/pcmcia/xxs1500_ss.c

index 193ba166affd6f8147c3f80647d5fa7098723fdb..561e5da2658b36f999c6da9bc8377c9f0b203289 100644 (file)
@@ -69,38 +69,20 @@ void __init plat_mem_setup(void)
        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 */
 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 */
        if ((phys_addr >> 32) != 0)
                return phys_addr;
 
-#ifdef CONFIG_PCI
-       {
-               u32 start = (u32)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);
+       /* Check for PCI memory window */
+       if (phys_addr >= start && (phys_addr + size - 1) <= end)
+               return (phys_t)((phys_addr - start) + Au1500_PCI_MEM_START);
 
        /* default nop */
        return phys_addr;
index d6b3e64376c092129e5fa50c43410794bdf69967..3cb95a98ab31bc107b3a994401841c9189efa251 100644 (file)
@@ -507,24 +507,24 @@ static int __init db1200_dev_init(void)
                (void __iomem *)KSEG1ADDR(PSC1_PHYS_ADDR) + PSC_SEL_OFFSET);
        wmb();
 
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x000400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x000010000 - 1,
                                    DB1200_PC0_INT,
                                    DB1200_PC0_INSERT_INT,
                                    /*DB1200_PC0_STSCHG_INT*/0,
                                    DB1200_PC0_EJECT_INT,
                                    0);
 
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00400000,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00440000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00400000,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00440000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00400000,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00401000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x004000000,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x004400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x004000000,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x004400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x004000000,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x004010000 - 1,
                                    DB1200_PC1_INT,
                                    DB1200_PC1_INSERT_INT,
                                    /*DB1200_PC1_STSCHG_INT*/0,
index 62e2a96fe119352caef0486f8c33ffd5d3ca7c49..978d5ab3d6781781eb5cb2d5acb117b3c443a81c 100644 (file)
 static int __init db1xxx_dev_init(void)
 {
 #ifdef DB1XXX_HAS_PCMCIA
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x000400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x000010000 - 1,
                                    DB1XXX_PCMCIA_CARD0,
                                    DB1XXX_PCMCIA_CD0,
                                    /*DB1XXX_PCMCIA_STSCHG0*/0,
                                    0,
                                    0);
 
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00400000,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00440000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00400000,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00440000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00400000,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00401000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x004000000,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x004400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x004000000,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x004400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x004000000,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x004010000 - 1,
                                    DB1XXX_PCMCIA_CARD1,
                                    DB1XXX_PCMCIA_CD1,
                                    /*DB1XXX_PCMCIA_STSCHG1*/0,
index bfc5ab6a121c753a1cd824ae0e369881864dcf68..2c8dc29759fdd9cac6f6feded744332400af04d8 100644 (file)
@@ -30,12 +30,12 @@ static int __init pb1100_dev_init(void)
        int swapped;
 
        /* PCMCIA. single socket, identical to Pb1500 */
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x000400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x000010000 - 1,
                                    AU1100_GPIO11_INT,   /* card */
                                    AU1100_GPIO9_INT,    /* insert */
                                    /*AU1100_GPIO10_INT*/0, /* stschg */
index 14e889fffcc5a36fb5bab2b1322bc57a439b4df6..3ef2dceeb796a8abf807fdd71471f0527419136d 100644 (file)
@@ -170,24 +170,24 @@ static int __init board_register_devices(void)
 {
        int swapped;
 
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x000400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x000010000 - 1,
                                    PB1200_PC0_INT,
                                    PB1200_PC0_INSERT_INT,
                                    /*PB1200_PC0_STSCHG_INT*/0,
                                    PB1200_PC0_EJECT_INT,
                                    0);
 
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00800000,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00840000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00800000,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00840000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00800000,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00801000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x008000000,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x008400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x008000000,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x008400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x008000000,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x008010000 - 1,
                                    PB1200_PC1_INT,
                                    PB1200_PC1_INSERT_INT,
                                    /*PB1200_PC1_STSCHG_INT*/0,
index 529acb7892545a09087f2a666da01e6bff3b43fb..d443bc7aa76e3140052f9d2fb846a893647d3a5c 100644 (file)
@@ -29,12 +29,12 @@ static int __init pb1500_dev_init(void)
        int swapped;
 
        /* PCMCIA. single socket, identical to Pb1500 */
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x000400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x000010000 - 1,
                                    AU1500_GPIO11_INT,   /* card */
                                    AU1500_GPIO9_INT,    /* insert */
                                    /*AU1500_GPIO10_INT*/0, /* stschg */
index 461339166a4e4a563309fc7290c2d3138741fda6..d7150d0f49c0d932b589eb16426be61ff08b9c8f 100644 (file)
@@ -37,24 +37,24 @@ static int __init pb1550_dev_init(void)
        * drivers are used to shared irqs and b) statuschange isn't really use-
        * ful anyway.
        */
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x000400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x000010000 - 1,
                                    AU1550_GPIO201_205_INT,
                                    AU1550_GPIO0_INT,
                                    0,
                                    0,
                                    0);
 
-       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00800000,
-                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00840000 - 1,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00800000,
-                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00840000 - 1,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00800000,
-                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00801000 - 1,
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x008000000,
+                                   PCMCIA_ATTR_PHYS_ADDR + 0x008400000 - 1,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x008000000,
+                                   PCMCIA_MEM_PHYS_ADDR  + 0x008400000 - 1,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x008000000,
+                                   PCMCIA_IO_PHYS_ADDR   + 0x008010000 - 1,
                                    AU1550_GPIO201_205_INT,
                                    AU1550_GPIO1_INT,
                                    0,
index febf4e04234363894886d64e64cf1047517f6fbd..49a4b3244d8e1ad792f701b2f3b550617078c5f8 100644 (file)
@@ -39,12 +39,12 @@ static int __init db1x_poweroff_setup(void)
 late_initcall(db1x_poweroff_setup);
 
 /* register a pcmcia socket */
-int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
-                                      unsigned long pseudo_attr_end,
-                                      unsigned long pseudo_mem_start,
-                                      unsigned long pseudo_mem_end,
-                                      unsigned long pseudo_io_start,
-                                      unsigned long pseudo_io_end,
+int __init db1x_register_pcmcia_socket(phys_addr_t pcmcia_attr_start,
+                                      phys_addr_t pcmcia_attr_end,
+                                      phys_addr_t pcmcia_mem_start,
+                                      phys_addr_t pcmcia_mem_end,
+                                      phys_addr_t pcmcia_io_start,
+                                      phys_addr_t pcmcia_io_end,
                                       int card_irq,
                                       int cd_irq,
                                       int stschg_irq,
@@ -71,20 +71,20 @@ int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
                goto out;
        }
 
-       sr[0].name      = "pseudo-attr";
+       sr[0].name      = "pcmcia-attr";
        sr[0].flags     = IORESOURCE_MEM;
-       sr[0].start     = pseudo_attr_start;
-       sr[0].end       = pseudo_attr_end;
+       sr[0].start     = pcmcia_attr_start;
+       sr[0].end       = pcmcia_attr_end;
 
-       sr[1].name      = "pseudo-mem";
+       sr[1].name      = "pcmcia-mem";
        sr[1].flags     = IORESOURCE_MEM;
-       sr[1].start     = pseudo_mem_start;
-       sr[1].end       = pseudo_mem_end;
+       sr[1].start     = pcmcia_mem_start;
+       sr[1].end       = pcmcia_mem_end;
 
-       sr[2].name      = "pseudo-io";
+       sr[2].name      = "pcmcia-io";
        sr[2].flags     = IORESOURCE_MEM;
-       sr[2].start     = pseudo_io_start;
-       sr[2].end       = pseudo_io_end;
+       sr[2].start     = pcmcia_io_start;
+       sr[2].end       = pcmcia_io_end;
 
        sr[3].name      = "insert";
        sr[3].flags     = IORESOURCE_IRQ;
@@ -96,9 +96,9 @@ int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
 
        i = 5;
        if (stschg_irq) {
-               sr[i].name      = "insert";
+               sr[i].name      = "stschg";
                sr[i].flags     = IORESOURCE_IRQ;
-               sr[i].start = sr[i].end = cd_irq;
+               sr[i].start = sr[i].end = stschg_irq;
                i++;
        }
        if (eject_irq) {
index 828c54e311579c3f8919df7734cd35a38e22cd56..5ac055d2cda9b678dd4816254a04af8418b70964 100644 (file)
@@ -3,12 +3,12 @@
 
 #include <linux/init.h>
 
-int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
-                                      unsigned long pseudo_attr_len,
-                                      unsigned long pseudo_mem_start,
-                                      unsigned long pseudo_mem_end,
-                                      unsigned long pseudo_io_start,
-                                      unsigned long pseudo_io_end,
+int __init db1x_register_pcmcia_socket(phys_addr_t pcmcia_attr_start,
+                                      phys_addr_t pcmcia_attr_len,
+                                      phys_addr_t pcmcia_mem_start,
+                                      phys_addr_t pcmcia_mem_end,
+                                      phys_addr_t pcmcia_io_start,
+                                      phys_addr_t pcmcia_io_end,
                                       int card_irq,
                                       int cd_irq,
                                       int stschg_irq,
index c14dcaa9531164e8dd62592cca20b1d7df8b0b2a..e87c45cde61b07f51db731cb9fc1e250a1d85e71 100644 (file)
 
 static struct resource xxs1500_pcmcia_res[] = {
        {
-               .name   = "pseudo-io",
+               .name   = "pcmcia-io",
                .flags  = IORESOURCE_MEM,
-               .start  = PCMCIA_IO_PSEUDO_PHYS,
-               .end    = PCMCIA_IO_PSEUDO_PHYS + 0x00040000 - 1,
+               .start  = PCMCIA_IO_PHYS_ADDR,
+               .end    = PCMCIA_IO_PHYS_ADDR + 0x000400000 - 1,
        },
        {
-               .name   = "pseudo-attr",
+               .name   = "pcmcia-attr",
                .flags  = IORESOURCE_MEM,
-               .start  = PCMCIA_ATTR_PSEUDO_PHYS,
-               .end    = PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
+               .start  = PCMCIA_ATTR_PHYS_ADDR,
+               .end    = PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1,
        },
        {
-               .name   = "pseudo-mem",
+               .name   = "pcmcia-mem",
                .flags  = IORESOURCE_MEM,
-               .start  = PCMCIA_IO_PSEUDO_PHYS,
-               .end    = PCMCIA_IO_PSEUDO_PHYS + 0x00040000 - 1,
+               .start  = PCMCIA_MEM_PHYS_ADDR,
+               .end    = PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
        },
 };
 
index 2805fc56484d4b3cf57a3679c50c61bb85d277ba..ae07423e6e821aa863a990e5f1751ef4734f8eb0 100644 (file)
@@ -1678,18 +1678,4 @@ enum soc_au1200_ints {
 
 #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
index 364cea2dc71fbaec28a061f41fca299109c49796..75a94ad3ac91db4db4446f0c217beba96836156c 100644 (file)
@@ -11,7 +11,7 @@
 
 #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);
 #else
 static inline phys_t __fixup_bigphys_addr(phys_t phys_addr, phys_t size)
index 02088704ac2ca8fcac8115a6ca211227b899f982..171c8a654887a65dcb91663e1173d48242923653 100644 (file)
@@ -405,18 +405,16 @@ int au1x00_pcmcia_socket_probe(struct device *dev, struct pcmcia_low_level *ops,
                        skt->virt_io = (void *)
                                (ioremap((phys_t)AU1X_SOCK0_IO, 0x1000) -
                                (u32)mips_io_port_base);
-                       skt->phys_attr = AU1X_SOCK0_PSEUDO_PHYS_ATTR;
-                       skt->phys_mem = AU1X_SOCK0_PSEUDO_PHYS_MEM;
+                       skt->phys_attr = AU1X_SOCK0_PHYS_ATTR;
+                       skt->phys_mem = AU1X_SOCK0_PHYS_MEM;
                }
-#ifndef CONFIG_MIPS_XXS1500
                else  {
                        skt->virt_io = (void *)
                                (ioremap((phys_t)AU1X_SOCK1_IO, 0x1000) -
                                (u32)mips_io_port_base);
-                       skt->phys_attr = AU1X_SOCK1_PSEUDO_PHYS_ATTR;
-                       skt->phys_mem = AU1X_SOCK1_PSEUDO_PHYS_MEM;
+                       skt->phys_attr = AU1X_SOCK1_PHYS_ATTR;
+                       skt->phys_mem = AU1X_SOCK1_PHYS_MEM;
                }
-#endif
                pcmcia_base_vaddrs[i] = (u32 *)skt->virt_io;
                ret = ops->hw_init(skt);
 
index aa743f6875bdbafbc9fbca1c899a6850c5570fe0..a324d329dea65e55a6183eed448aa68a29b52ac3 100644 (file)
 #define AU1X_SOCK0_IO        0xF00000000ULL
 #define AU1X_SOCK0_PHYS_ATTR 0xF40000000ULL
 #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
  * differs from board to board.
@@ -48,8 +44,6 @@
 #define AU1X_SOCK1_IO        0xF08000000ULL
 #define AU1X_SOCK1_PHYS_ATTR 0xF48000000ULL
 #define AU1X_SOCK1_PHYS_MEM  0xF88000000ULL
-#define AU1X_SOCK1_PSEUDO_PHYS_ATTR 0xF4800000
-#define AU1X_SOCK1_PSEUDO_PHYS_MEM  0xF8800000
 #endif
 
 struct pcmcia_state {
index b35b72b0d5b52b209998f53a776a15c2e1bf4266..3889cf07d6ce34bd799741c12c35ff1998005466 100644 (file)
@@ -43,9 +43,9 @@ struct db1x_pcmcia_sock {
        void            *virt_io;
 
        /* the "pseudo" addresses of the PCMCIA space. */
-       unsigned long   phys_io;
-       unsigned long   phys_attr;
-       unsigned long   phys_mem;
+       phys_addr_t     phys_io;
+       phys_addr_t     phys_attr;
+       phys_addr_t     phys_mem;
 
        /* previous flags for set_socket() */
        unsigned int old_flags;
@@ -404,7 +404,6 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
 {
        struct db1x_pcmcia_sock *sock;
        struct resource *r;
-       phys_t physio;
        int ret, bid;
 
        sock = kzalloc(sizeof(struct db1x_pcmcia_sock), GFP_KERNEL);
@@ -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
         * right).
         */
-       r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-attr");
+       r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-attr");
        if (!r) {
                printk(KERN_ERR "pcmcia%d has no 'pseudo-attr' resource!\n",
                        sock->nr);
@@ -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
         * 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) {
                printk(KERN_ERR "pcmcia%d has no 'pseudo-mem' resource!\n",
                        sock->nr);
@@ -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
         * 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) {
                printk(KERN_ERR "pcmcia%d has no 'pseudo-io' resource!\n",
                        sock->nr);
@@ -497,12 +496,6 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
        }
        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
         * 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)
         * to access the I/O or MEM address directly, without
         * 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);
 
        if (!sock->virt_io) {
@@ -547,8 +540,8 @@ static int __devinit db1x_pcmcia_socket_probe(struct platform_device *pdev)
                goto out2;
        }
 
-       printk(KERN_INFO "Alchemy Db/Pb1xxx pcmcia%d @ io/attr/mem %08lx"
-               "(%p) %08lx %08lx  card/insert/stschg/eject irqs @ %d "
+       printk(KERN_INFO "Alchemy Db/Pb1xxx pcmcia%d @ io/attr/mem %09llx"
+               "(%p) %09llx %09llx  card/insert/stschg/eject irqs @ %d "
                "%d %d %d\n", sock->nr, sock->phys_io, sock->virt_io,
                sock->phys_attr, sock->phys_mem, sock->card_irq,
                sock->insert_irq, sock->stschg_irq, sock->eject_irq);
index 4e36930b51ce3bb6b03953e480f38f4508754d8f..61560cd6e2877b5b37f1c804e291a8d722027503 100644 (file)
@@ -56,10 +56,9 @@ struct xxs1500_pcmcia_sock {
        struct pcmcia_socket    socket;
        void            *virt_io;
 
-       /* the "pseudo" addresses of the PCMCIA space. */
-       unsigned long   phys_io;
-       unsigned long   phys_attr;
-       unsigned long   phys_mem;
+       phys_addr_t     phys_io;
+       phys_addr_t     phys_attr;
+       phys_addr_t     phys_mem;
 
        /* previous flags for set_socket() */
        unsigned int old_flags;
@@ -211,7 +210,6 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
 {
        struct xxs1500_pcmcia_sock *sock;
        struct resource *r;
-       phys_t physio;
        int ret, irq;
 
        sock = kzalloc(sizeof(struct xxs1500_pcmcia_sock), GFP_KERNEL);
@@ -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
         * right).
         */
-       r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pseudo-attr");
+       r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcmcia-attr");
        if (!r) {
-               dev_err(&pdev->dev, "missing 'pseudo-attr' resource!\n");
+               dev_err(&pdev->dev, "missing 'pcmcia-attr' resource!\n");
                goto out0;
        }
        sock->phys_attr = r->start;
@@ -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
         * 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) {
-               dev_err(&pdev->dev, "missing 'pseudo-mem' resource!\n");
+               dev_err(&pdev->dev, "missing 'pcmcia-mem' resource!\n");
                goto out0;
        }
        sock->phys_mem = r->start;
@@ -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
         * 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) {
-               dev_err(&pdev->dev, "missing 'pseudo-io' resource!\n");
+               dev_err(&pdev->dev, "missing 'pcmcia-io' resource!\n");
                goto out0;
        }
        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
         * the IO registers.  Since mips_io_port_base is added
@@ -268,7 +261,7 @@ static int __devinit xxs1500_pcmcia_probe(struct platform_device *pdev)
         * to access the I/O or MEM address directly, without
         * 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);
 
        if (!sock->virt_io) {