]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - arch/arm/mach-ixp4xx/common.c
Merge master.kernel.org:/home/rmk/linux-2.6-arm
[mirror_ubuntu-bionic-kernel.git] / arch / arm / mach-ixp4xx / common.c
index 6c396447c4e078d8ce7e1807c072edfc8c704bb7..6b393691d0e898cdcc0b4aaebb6da5ab2469c470 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/serial.h>
 #include <linux/sched.h>
 #include <linux/tty.h>
+#include <linux/platform_device.h>
 #include <linux/serial_core.h>
 #include <linux/bootmem.h>
 #include <linux/interrupt.h>
@@ -141,6 +142,8 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
        *int_reg &= ~(IXP4XX_GPIO_STYLE_CLEAR <<
                        (line * IXP4XX_GPIO_STYLE_SIZE));
 
+       *IXP4XX_GPIO_GPISR = (1 << line);
+
        /* Set the new style */
        *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE));
 
@@ -168,7 +171,7 @@ static void ixp4xx_irq_ack(unsigned int irq)
        int line = (irq < 32) ? irq2gpio[irq] : -1;
 
        if (line >= 0)
-               gpio_line_isr_clear(line);
+               *IXP4XX_GPIO_GPISR = (1 << line);
 }
 
 /*
@@ -329,11 +332,27 @@ static struct platform_device *ixp46x_devices[] __initdata = {
        &ixp46x_i2c_controller
 };
 
+unsigned long ixp4xx_exp_bus_size;
+
 void __init ixp4xx_sys_init(void)
 {
+       ixp4xx_exp_bus_size = SZ_16M;
+
        if (cpu_is_ixp46x()) {
+               int region;
+
                platform_add_devices(ixp46x_devices,
                                ARRAY_SIZE(ixp46x_devices));
+
+               for (region = 0; region < 7; region++) {
+                       if((*(IXP4XX_EXP_REG(0x4 * region)) & 0x200)) {
+                               ixp4xx_exp_bus_size = SZ_32M;
+                               break;
+                       }
+               }
        }
+
+       printk("IXP4xx: Using %uMiB expansion bus window size\n",
+                       ixp4xx_exp_bus_size >> 20);
 }