]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'ptebits' into devel
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Thu, 9 Oct 2008 20:31:56 +0000 (21:31 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 9 Oct 2008 20:31:56 +0000 (21:31 +0100)
Conflicts:

arch/arm/Kconfig

16 files changed:
1  2 
arch/arm/Kconfig
arch/arm/include/asm/pgtable.h
arch/arm/lib/sha1.S
arch/arm/mach-footbridge/time.c
arch/arm/mach-ixp2000/enp2611.c
arch/arm/mach-omap2/board-2430sdp.c
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/spitz.c
arch/arm/mm/fault-armv.c
arch/arm/mm/ioremap.c
arch/arm/mm/mm.h
arch/arm/mm/mmu.c
arch/arm/mm/proc-v7.S
arch/arm/plat-omap/gpio.c
drivers/net/Kconfig
drivers/net/smc91x.c

diff --combined arch/arm/Kconfig
index ea52fae33290a2d9c2baffab08d58f83407c0c22,70dba16689077dc0440cf12cc607f000bd5bdbdf..744d07e696025929848de3815ba8d3e68423b86f
@@@ -148,6 -148,7 +148,6 @@@ config ARCH_MAY_HAVE_PC_FD
  
  config ZONE_DMA
        bool
 -      default y
  
  config GENERIC_ISA_DMA
        bool
@@@ -177,11 -178,6 +177,11 @@@ config OPROFILE_MPCOR
  config OPROFILE_ARM11_CORE
        bool
  
 +config OPROFILE_ARMV7
 +      def_bool y
 +      depends on CPU_V7 && !SMP
 +      bool
 +
  endif
  
  config VECTORS_BASE
@@@ -249,7 -245,6 +249,7 @@@ config ARCH_CLPS750
        select TIMER_ACORN
        select ISA
        select NO_IOPORT
 +      select ARCH_SPARSEMEM_ENABLE
        help
          Support for the Cirrus Logic PS7500FE system-on-a-chip.
  
@@@ -311,7 -306,6 +311,7 @@@ config ARCH_IOP13X
        select PLAT_IOP
        select PCI
        select ARCH_SUPPORTS_MSI
 +      select VMSPLIT_1G
        help
          Support for Intel's IOP13XX (XScale) family of processors.
  
@@@ -356,7 -350,6 +356,7 @@@ config ARCH_IXP4X
        select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
 +      select ZONE_DMA if PCI
        help
          Support for Intel's IXP4XX (XScale) family of processors.
  
@@@ -471,7 -464,6 +471,7 @@@ config ARCH_RP
        select HAVE_PATA_PLATFORM
        select ISA_DMA_API
        select NO_IOPORT
 +      select ARCH_SPARSEMEM_ENABLE
        help
          On the Acorn Risc-PC, Linux can support the internal IDE disk and
          CD-ROM interface, serial and parallel port, and the floppy drive.
  config ARCH_SA1100
        bool "SA1100-based"
        select ISA
 -      select ARCH_DISCONTIGMEM_ENABLE
        select ARCH_SPARSEMEM_ENABLE
 -      select ARCH_SELECT_MEMORY_MODEL
        select ARCH_MTD_XIP
        select GENERIC_GPIO
        select GENERIC_TIME
@@@ -503,7 -497,6 +503,7 @@@ config ARCH_SHAR
        bool "Shark"
        select ISA
        select ISA_DMA
 +      select ZONE_DMA
        select PCI
        help
          Support for the StrongARM based Digital DNARD machine, also known
  
  config ARCH_LH7A40X
        bool "Sharp LH7A40X"
 +      select ARCH_DISCONTIGMEM_ENABLE if !LH7A40X_CONTIGMEM
 +      select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM
        help
          Say Y here for systems based on one of the Sharp LH7A40X
          System on a Chip processors.  These CPUs include an ARM922T
@@@ -525,7 -516,6 +525,7 @@@ config ARCH_DAVINC
        select GENERIC_CLOCKEVENTS
        select GENERIC_GPIO
        select HAVE_CLK
 +      select ZONE_DMA
        help
          Support for TI's DaVinci platform.
  
@@@ -744,29 -734,6 +744,29 @@@ config SM
  
          If you don't know what to do here, say N.
  
 +choice
 +      prompt "Memory split"
 +      default VMSPLIT_3G
 +      help
 +        Select the desired split between kernel and user memory.
 +
 +        If you are not absolutely sure what you are doing, leave this
 +        option alone!
 +
 +      config VMSPLIT_3G
 +              bool "3G/1G user/kernel split"
 +      config VMSPLIT_2G
 +              bool "2G/2G user/kernel split"
 +      config VMSPLIT_1G
 +              bool "1G/3G user/kernel split"
 +endchoice
 +
 +config PAGE_OFFSET
 +      hex
 +      default 0x40000000 if VMSPLIT_1G
 +      default 0x80000000 if VMSPLIT_2G
 +      default 0xC0000000
 +
  config NR_CPUS
        int "Maximum number of CPUs (2-32)"
        range 2 32
@@@ -843,18 -810,25 +843,23 @@@ config OABI_COMPA
          UNPREDICTABLE (in fact it can be predicted that it won't work
          at all). If in doubt say Y.
  
+ config ARCH_FLATMEM_HAS_HOLES
+       bool
+       default y
+       depends on FLATMEM
 +# Discontigmem is deprecated
  config ARCH_DISCONTIGMEM_ENABLE
        bool
 -      default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM)
 -      help
 -        Say Y to support efficient handling of discontiguous physical memory,
 -        for architectures which are either NUMA (Non-Uniform Memory Access)
 -        or have huge holes in the physical address space for other reasons.
 -        See <file:Documentation/vm/numa> for more.
  
  config ARCH_SPARSEMEM_ENABLE
        bool
  
 +config ARCH_SPARSEMEM_DEFAULT
 +      def_bool ARCH_SPARSEMEM_ENABLE
 +
  config ARCH_SELECT_MEMORY_MODEL
 -      bool
 +      def_bool ARCH_DISCONTIGMEM_ENABLE && ARCH_SPARSEMEM_ENABLE
  
  config NODES_SHIFT
        int
@@@ -1031,9 -1005,9 +1036,9 @@@ config ATAGS_PRO
  
  endmenu
  
 -if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA)
 +menu "CPU Power Management"
  
 -menu "CPU Frequency scaling"
 +if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA)
  
  source "drivers/cpufreq/Kconfig"
  
@@@ -1073,12 -1047,10 +1078,12 @@@ config CPU_FREQ_PX
        default y
        select CPU_FREQ_DEFAULT_GOV_USERSPACE
  
 -endmenu
 -
  endif
  
 +source "drivers/cpuidle/Kconfig"
 +
 +endmenu
 +
  menu "Floating point emulation"
  
  comment "At least one emulation must be selected"
@@@ -1230,8 -1202,6 +1235,8 @@@ source "drivers/power/Kconfig
  
  source "drivers/hwmon/Kconfig"
  
 +source "drivers/thermal/Kconfig"
 +
  source "drivers/watchdog/Kconfig"
  
  source "drivers/ssb/Kconfig"
@@@ -1252,10 -1222,6 +1257,10 @@@ source "drivers/usb/Kconfig
  
  source "drivers/mmc/Kconfig"
  
 +source "drivers/memstick/Kconfig"
 +
 +source "drivers/accessibility/Kconfig"
 +
  source "drivers/leds/Kconfig"
  
  source "drivers/rtc/Kconfig"
@@@ -1264,8 -1230,6 +1269,8 @@@ source "drivers/dma/Kconfig
  
  source "drivers/dca/Kconfig"
  
 +source "drivers/auxdisplay/Kconfig"
 +
  source "drivers/regulator/Kconfig"
  
  source "drivers/uio/Kconfig"
index ec630109a8c75aa642ebc786762f470ddbf22598,b02be6c55aeffe3956bdcbbd3159e36eeb2749fc..110295c5461dc2dd471f7172b31daf7eb589b244
@@@ -164,14 -164,30 +164,30 @@@ extern void __pgd_error(const char *fil
  #define L_PTE_PRESENT         (1 << 0)
  #define L_PTE_FILE            (1 << 1)        /* only when !PRESENT */
  #define L_PTE_YOUNG           (1 << 1)
- #define L_PTE_BUFFERABLE      (1 << 2)        /* matches PTE */
- #define L_PTE_CACHEABLE               (1 << 3)        /* matches PTE */
- #define L_PTE_USER            (1 << 4)
- #define L_PTE_WRITE           (1 << 5)
- #define L_PTE_EXEC            (1 << 6)
- #define L_PTE_DIRTY           (1 << 7)
+ #define L_PTE_BUFFERABLE      (1 << 2)        /* obsolete, matches PTE */
+ #define L_PTE_CACHEABLE               (1 << 3)        /* obsolete, matches PTE */
+ #define L_PTE_DIRTY           (1 << 6)
+ #define L_PTE_WRITE           (1 << 7)
+ #define L_PTE_USER            (1 << 8)
+ #define L_PTE_EXEC            (1 << 9)
  #define L_PTE_SHARED          (1 << 10)       /* shared(v6), coherent(xsc3) */
  
+ /*
+  * These are the memory types, defined to be compatible with
+  * pre-ARMv6 CPUs cacheable and bufferable bits:   XXCB
+  */
+ #define L_PTE_MT_UNCACHED     (0x00 << 2)     /* 0000 */
+ #define L_PTE_MT_BUFFERABLE   (0x01 << 2)     /* 0001 */
+ #define L_PTE_MT_WRITETHROUGH (0x02 << 2)     /* 0010 */
+ #define L_PTE_MT_WRITEBACK    (0x03 << 2)     /* 0011 */
+ #define L_PTE_MT_MINICACHE    (0x06 << 2)     /* 0110 (sa1100, xscale) */
+ #define L_PTE_MT_WRITEALLOC   (0x07 << 2)     /* 0111 */
+ #define L_PTE_MT_DEV_SHARED   (0x04 << 2)     /* 0100 */
+ #define L_PTE_MT_DEV_NONSHARED        (0x0c << 2)     /* 1100 */
+ #define L_PTE_MT_DEV_WC               (0x09 << 2)     /* 1001 */
+ #define L_PTE_MT_DEV_CACHED   (0x0b << 2)     /* 1011 */
+ #define L_PTE_MT_MASK         (0x0f << 2)
  #ifndef __ASSEMBLY__
  
  /*
   * as well as any architecture dependent bits like global/ASID and SMP
   * shared mapping bits.
   */
- #define _L_PTE_DEFAULT        L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_CACHEABLE | L_PTE_BUFFERABLE
- #define _L_PTE_READ   L_PTE_USER | L_PTE_EXEC
+ #define _L_PTE_DEFAULT        L_PTE_PRESENT | L_PTE_YOUNG
  
  extern pgprot_t               pgprot_user;
  extern pgprot_t               pgprot_kernel;
  
- #define PAGE_NONE     pgprot_user
- #define PAGE_COPY     __pgprot(pgprot_val(pgprot_user) | _L_PTE_READ)
- #define PAGE_SHARED   __pgprot(pgprot_val(pgprot_user) | _L_PTE_READ | \
-                                L_PTE_WRITE)
- #define PAGE_READONLY __pgprot(pgprot_val(pgprot_user) | _L_PTE_READ)
- #define PAGE_KERNEL   pgprot_kernel
- #define __PAGE_NONE   __pgprot(_L_PTE_DEFAULT)
- #define __PAGE_COPY   __pgprot(_L_PTE_DEFAULT | _L_PTE_READ)
- #define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | _L_PTE_READ | L_PTE_WRITE)
- #define __PAGE_READONLY       __pgprot(_L_PTE_DEFAULT | _L_PTE_READ)
+ #define _MOD_PROT(p, b)       __pgprot(pgprot_val(p) | (b))
+ #define PAGE_NONE             pgprot_user
+ #define PAGE_SHARED           _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_WRITE)
+ #define PAGE_SHARED_EXEC      _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_WRITE | L_PTE_EXEC)
+ #define PAGE_COPY             _MOD_PROT(pgprot_user, L_PTE_USER)
+ #define PAGE_COPY_EXEC                _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_EXEC)
+ #define PAGE_READONLY         _MOD_PROT(pgprot_user, L_PTE_USER)
+ #define PAGE_READONLY_EXEC    _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_EXEC)
+ #define PAGE_KERNEL           pgprot_kernel
+ #define PAGE_KERNEL_EXEC      _MOD_PROT(pgprot_kernel, L_PTE_EXEC)
+ #define __PAGE_NONE           __pgprot(_L_PTE_DEFAULT)
+ #define __PAGE_SHARED         __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_WRITE)
+ #define __PAGE_SHARED_EXEC    __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_WRITE | L_PTE_EXEC)
+ #define __PAGE_COPY           __pgprot(_L_PTE_DEFAULT | L_PTE_USER)
+ #define __PAGE_COPY_EXEC      __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_EXEC)
+ #define __PAGE_READONLY               __pgprot(_L_PTE_DEFAULT | L_PTE_USER)
+ #define __PAGE_READONLY_EXEC  __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_EXEC)
  
  #endif /* __ASSEMBLY__ */
  
  #define __P001  __PAGE_READONLY
  #define __P010  __PAGE_COPY
  #define __P011  __PAGE_COPY
- #define __P100  __PAGE_READONLY
- #define __P101  __PAGE_READONLY
- #define __P110  __PAGE_COPY
- #define __P111  __PAGE_COPY
+ #define __P100  __PAGE_READONLY_EXEC
+ #define __P101  __PAGE_READONLY_EXEC
+ #define __P110  __PAGE_COPY_EXEC
+ #define __P111  __PAGE_COPY_EXEC
  
  #define __S000  __PAGE_NONE
  #define __S001  __PAGE_READONLY
  #define __S010  __PAGE_SHARED
  #define __S011  __PAGE_SHARED
- #define __S100  __PAGE_READONLY
- #define __S101  __PAGE_READONLY
- #define __S110  __PAGE_SHARED
- #define __S111  __PAGE_SHARED
+ #define __S100  __PAGE_READONLY_EXEC
+ #define __S101  __PAGE_READONLY_EXEC
+ #define __S110  __PAGE_SHARED_EXEC
+ #define __S111  __PAGE_SHARED_EXEC
  
  #ifndef __ASSEMBLY__
  /*
@@@ -286,8 -309,10 +309,10 @@@ static inline pte_t pte_mkspecial(pte_
  /*
   * Mark the prot value as uncacheable and unbufferable.
   */
- #define pgprot_noncached(prot)        __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE))
- #define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE)
+ #define pgprot_noncached(prot) \
+       __pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_UNCACHED)
+ #define pgprot_writecombine(prot) \
+       __pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_BUFFERABLE)
  
  #define pmd_none(pmd)         (!pmd_val(pmd))
  #define pmd_present(pmd)      (pmd_val(pmd))
@@@ -319,6 -344,11 +344,6 @@@ static inline pte_t *pmd_page_vaddr(pmd
  
  #define pmd_page(pmd) virt_to_page(__va(pmd_val(pmd)))
  
 -/*
 - * Permanent address of a page. We never have highmem, so this is trivial.
 - */
 -#define pages_to_mb(x)                ((x) >> (20 - PAGE_SHIFT))
 -
  /*
   * Conversion functions: convert a page and protection to a page entry,
   * and a page entry and page directory to the page they refer to.
diff --combined arch/arm/lib/sha1.S
index 8a1c67fe0544d5a586fa4f7891dfe7e0dcd8c5b5,67c2bf4774b70619f1b2652b665024871452f901..a16fb208c8418591bd0ab01d8db0c95dca08ea16
@@@ -29,7 -29,7 +29,7 @@@ ENTRY(sha_transform
        stmfd   sp!, {r4 - r8, lr}
  
        @ for (i = 0; i < 16; i++)
-       @         W[i] = be32_to_cpu(in[i]); */
+       @         W[i] = be32_to_cpu(in[i]);
  
  #ifdef __ARMEB__
        mov     r4, r0
  
        ldmfd   sp!, {r4 - r8, pc}
  
 +ENDPROC(sha_transform)
 +
  .L_sha_K:
        .word   0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6
  
@@@ -206,4 -204,3 +206,4 @@@ ENTRY(sha_init
        stmia   r0, {r1, r2, r3, ip, lr}
        ldr     pc, [sp], #4
  
 +ENDPROC(sha_init)
index 216ed5c7404d33889e5f0ead9722fcfc41a180ee,004819ea85c8338cc126f449091621bd06379b02..cd1b54ff9fe2bc91dd81a9d258a4c5bafdaa8af7
@@@ -22,9 -22,9 +22,9 @@@
  #include <linux/sched.h>
  #include <linux/mc146818rtc.h>
  #include <linux/bcd.h>
 +#include <linux/io.h>
  
  #include <mach/hardware.h>
 -#include <asm/io.h>
  
  #include <asm/mach/time.h>
  #include "common.h"
@@@ -49,12 -49,12 +49,12 @@@ static unsigned long __init get_isa_cmo
        } while (sec != CMOS_READ(RTC_SECONDS));
  
        if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) || RTC_ALWAYS_BCD) {
-               BCD_TO_BIN(sec);
-               BCD_TO_BIN(min);
-               BCD_TO_BIN(hour);
-               BCD_TO_BIN(day);
-               BCD_TO_BIN(mon);
-               BCD_TO_BIN(year);
+               sec = bcd2bin(sec);
+               min = bcd2bin(min);
+               hour = bcd2bin(hour);
+               day = bcd2bin(day);
+               mon = bcd2bin(mon);
+               year = bcd2bin(year);
        }
        if ((year += 1900) < 1970)
                year += 100;
@@@ -76,7 -76,7 +76,7 @@@ static int set_isa_cmos_time(void
  
        cmos_minutes = CMOS_READ(RTC_MINUTES);
        if (!(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
-               BCD_TO_BIN(cmos_minutes);
+               cmos_minutes = bcd2bin(cmos_minutes);
  
        /*
         * since we're only adjusting minutes and seconds,
@@@ -92,8 -92,8 +92,8 @@@
  
        if (abs(real_minutes - cmos_minutes) < 30) {
                if (!(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) {
-                       BIN_TO_BCD(real_seconds);
-                       BIN_TO_BCD(real_minutes);
+                       real_seconds = bin2bcd(real_seconds);
+                       real_minutes = bin2bcd(real_minutes);
                }
                CMOS_WRITE(real_seconds,RTC_SECONDS);
                CMOS_WRITE(real_minutes,RTC_MINUTES);
index 279e431e0379beb5e5a3d2ef08780e5fb26bab34,8bb184dbc187a7b1aff0bb2fb6e25d82e2c1abd3..c84dfac13882a3b2838ba7b684a1531fa4e19fac
@@@ -32,8 -32,8 +32,8 @@@
  #include <linux/tty.h>
  #include <linux/serial_core.h>
  #include <linux/platform_device.h>
 +#include <linux/io.h>
  
 -#include <asm/io.h>
  #include <asm/irq.h>
  #include <asm/pgtable.h>
  #include <asm/page.h>
@@@ -70,17 -70,17 +70,17 @@@ static struct map_desc enp2611_io_desc[
                .virtual        = ENP2611_CALEB_VIRT_BASE,
                .pfn            = __phys_to_pfn(ENP2611_CALEB_PHYS_BASE),
                .length         = ENP2611_CALEB_SIZE,
-               .type           = MT_DEVICE_IXP2000,
+               .type           = MT_DEVICE,
        }, {
                .virtual        = ENP2611_PM3386_0_VIRT_BASE,
                .pfn            = __phys_to_pfn(ENP2611_PM3386_0_PHYS_BASE),
                .length         = ENP2611_PM3386_0_SIZE,
-               .type           = MT_DEVICE_IXP2000,
+               .type           = MT_DEVICE,
        }, {
                .virtual        = ENP2611_PM3386_1_VIRT_BASE,
                .pfn            = __phys_to_pfn(ENP2611_PM3386_1_PHYS_BASE),
                .length         = ENP2611_PM3386_1_SIZE,
-               .type           = MT_DEVICE_IXP2000,
+               .type           = MT_DEVICE,
        }
  };
  
index cbb921ded7f9c384112679eca2f604953502afd9,b72ca13b3acb7038e472ac83e01e369b4bfa9a68..24688efaa445f08939fc4fbafa4b2ab0f0aee51c
@@@ -21,7 -21,6 +21,7 @@@
  #include <linux/delay.h>
  #include <linux/err.h>
  #include <linux/clk.h>
 +#include <linux/io.h>
  
  #include <mach/hardware.h>
  #include <asm/mach-types.h>
@@@ -35,6 -34,8 +35,6 @@@
  #include <mach/common.h>
  #include <mach/gpmc.h>
  
 -#include <asm/io.h>
 -
  
  #define       SDP2430_FLASH_CS        0
  #define       SDP2430_SMC91X_CS       5
@@@ -102,7 -103,7 +102,7 @@@ static struct resource sdp2430_smc91x_r
        [1] = {
                .start  = OMAP_GPIO_IRQ(OMAP24XX_ETHR_GPIO_IRQ),
                .end    = OMAP_GPIO_IRQ(OMAP24XX_ETHR_GPIO_IRQ),
-               .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
+               .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
        },
  };
  
index fe5f1ba6c34b8bfbb53a274605540db4d445eb53,e703a8d209e243d87410b2bde4f520ac5bd75769..4cbf08bd546ba0f16a4a19bcba553e15a6603653
@@@ -21,7 -21,6 +21,7 @@@
  #include <linux/mmc/host.h>
  #include <linux/pm.h>
  #include <linux/backlight.h>
 +#include <linux/io.h>
  #include <video/w100fb.h>
  
  #include <asm/setup.h>
@@@ -29,6 -28,7 +29,6 @@@
  #include <asm/mach-types.h>
  #include <mach/hardware.h>
  #include <asm/irq.h>
 -#include <asm/io.h>
  #include <asm/system.h>
  
  #include <asm/mach/arch.h>
@@@ -38,6 -38,7 +38,7 @@@
  #include <mach/pxa-regs.h>
  #include <mach/pxa2xx-regs.h>
  #include <mach/pxa2xx-gpio.h>
+ #include <mach/i2c.h>
  #include <mach/irda.h>
  #include <mach/mmc.h>
  #include <mach/udc.h>
@@@ -532,6 -533,7 +533,7 @@@ static void __init corgi_init(void
        pxa_set_udc_info(&udc_info);
        pxa_set_mci_info(&corgi_mci_platform_data);
        pxa_set_ficp_info(&corgi_ficp_platform_data);
+       pxa_set_i2c_info(NULL);
  
        platform_scoop_config = &corgi_pcmcia_config;
  
index 73a2da0065f510a074f90fe97e35ae839ca661bb,b569f3b4cf3a68dfa629e201ab79da0e464e0908..7e181afcca3935cf19682923b2b2710e2b46f5bb
  #include <linux/mmc/host.h>
  #include <linux/pm.h>
  #include <linux/backlight.h>
 +#include <linux/io.h>
  
  #include <asm/setup.h>
  #include <asm/memory.h>
  #include <asm/mach-types.h>
  #include <mach/hardware.h>
  #include <asm/irq.h>
 -#include <asm/io.h>
  #include <asm/system.h>
  
  #include <asm/mach/arch.h>
@@@ -40,6 -40,7 +40,7 @@@
  #include <mach/pxa2xx-gpio.h>
  #include <mach/pxa27x-udc.h>
  #include <mach/reset.h>
+ #include <mach/i2c.h>
  #include <mach/irda.h>
  #include <mach/mmc.h>
  #include <mach/ohci.h>
@@@ -574,6 -575,7 +575,7 @@@ static void __init common_init(void
        pxa_set_ficp_info(&spitz_ficp_platform_data);
        set_pxa_fb_parent(&spitzssp_device.dev);
        set_pxa_fb_info(&spitz_pxafb_info);
+       pxa_set_i2c_info(NULL);
  }
  
  #if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI)
diff --combined arch/arm/mm/fault-armv.c
index af6ed6ef9a81d3aeb654fccd8f3cf72ad9b8ab4f,6f92904a81e9170e0e49678a7f2ac3150a37c88f..81d0b8772de33c47b108a7246967adde0d380251
  #include <linux/init.h>
  #include <linux/pagemap.h>
  
 +#include <asm/bugs.h>
  #include <asm/cacheflush.h>
 +#include <asm/cachetype.h>
  #include <asm/pgtable.h>
  #include <asm/tlbflush.h>
  
- static unsigned long shared_pte_mask = L_PTE_CACHEABLE;
+ static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE;
  
  /*
   * We take the easy way out of this problem - we make the
@@@ -65,9 -63,10 +65,10 @@@ static int adjust_pte(struct vm_area_st
         * If this page isn't present, or is already setup to
         * fault (ie, is old), we can safely ignore any issues.
         */
-       if (ret && pte_val(entry) & shared_pte_mask) {
+       if (ret && (pte_val(entry) & L_PTE_MT_MASK) != shared_pte_mask) {
                flush_cache_page(vma, address, pte_pfn(entry));
-               pte_val(entry) &= ~shared_pte_mask;
+               pte_val(entry) &= ~L_PTE_MT_MASK;
+               pte_val(entry) |= shared_pte_mask;
                set_pte_at(vma->vm_mm, address, pte, entry);
                flush_tlb_page(vma, address);
        }
@@@ -199,7 -198,7 +200,7 @@@ void __init check_writebuffer_bugs(void
                unsigned long *p1, *p2;
                pgprot_t prot = __pgprot(L_PTE_PRESENT|L_PTE_YOUNG|
                                         L_PTE_DIRTY|L_PTE_WRITE|
-                                        L_PTE_BUFFERABLE);
+                                        L_PTE_MT_BUFFERABLE);
  
                p1 = vmap(&page, 1, VM_IOREMAP, prot);
                p2 = vmap(&page, 1, VM_IOREMAP, prot);
  
        if (v) {
                printk("failed, %s\n", reason);
-               shared_pte_mask |= L_PTE_BUFFERABLE;
+               shared_pte_mask = L_PTE_MT_UNCACHED;
        } else {
                printk("ok\n");
        }
diff --combined arch/arm/mm/ioremap.c
index 8a41912ec7c525c4bd185356b89261091595f7bb,33eeab0ce3d167dffd4bead06d72dd31538d07d3..18373f73f2fc4a65c460db459cd061beea9c55b0
  #include <linux/errno.h>
  #include <linux/mm.h>
  #include <linux/vmalloc.h>
 +#include <linux/io.h>
  
 +#include <asm/cputype.h>
  #include <asm/cacheflush.h>
 -#include <asm/io.h>
  #include <asm/mmu_context.h>
  #include <asm/pgalloc.h>
  #include <asm/tlbflush.h>
@@@ -56,8 -55,7 +56,7 @@@ static int remap_area_pte(pmd_t *pmd, u
                if (!pte_none(*pte))
                        goto bad;
  
-               set_pte_ext(pte, pfn_pte(phys_addr >> PAGE_SHIFT, prot),
-                           type->prot_pte_ext);
+               set_pte_ext(pte, pfn_pte(phys_addr >> PAGE_SHIFT, prot), 0);
                phys_addr += PAGE_SIZE;
        } while (pte++, addr += PAGE_SIZE, addr != end);
        return 0;
@@@ -333,14 -331,15 +332,14 @@@ __arm_ioremap(unsigned long phys_addr, 
  }
  EXPORT_SYMBOL(__arm_ioremap);
  
 -void __iounmap(volatile void __iomem *addr)
 +void __iounmap(volatile void __iomem *io_addr)
  {
 +      void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr);
  #ifndef CONFIG_SMP
        struct vm_struct **p, *tmp;
  #endif
        unsigned int section_mapping = 0;
  
 -      addr = (volatile void __iomem *)(PAGE_MASK & (unsigned long)addr);
 -
  #ifndef CONFIG_SMP
        /*
         * If this is a section based mapping we need to handle it
         */
        write_lock(&vmlist_lock);
        for (p = &vmlist ; (tmp = *p) ; p = &tmp->next) {
 -              if((tmp->flags & VM_IOREMAP) && (tmp->addr == addr)) {
 +              if ((tmp->flags & VM_IOREMAP) && (tmp->addr == addr)) {
                        if (tmp->flags & VM_ARM_SECTION_MAPPING) {
                                *p = tmp->next;
                                unmap_area_sections((unsigned long)tmp->addr,
  #endif
  
        if (!section_mapping)
 -              vunmap((void __force *)addr);
 +              vunmap(addr);
  }
  EXPORT_SYMBOL(__iounmap);
diff --combined arch/arm/mm/mm.h
index 96590104ba0f3abb331706701de947e0ad0b421f,66f8612c5e5b9cdbab3127013b65a16c0a264d2e..5d9f53907b4eda5eb85741e2330926d96bd57c8f
@@@ -18,7 -18,6 +18,6 @@@ static inline pmd_t *pmd_off_k(unsigne
  
  struct mem_type {
        unsigned int prot_pte;
-       unsigned int prot_pte_ext;
        unsigned int prot_l1;
        unsigned int prot_sect;
        unsigned int domain;
@@@ -35,5 -34,3 +34,5 @@@ struct pglist_data
  void __init create_mapping(struct map_desc *md);
  void __init bootmem_init(struct meminfo *mi);
  void reserve_node_zero(struct pglist_data *pgdat);
 +
 +extern void _text, _stext, _etext, __data_start, _end, __init_begin, __init_end;
diff --combined arch/arm/mm/mmu.c
index e7af83e569d7a85c9e3afa30c76a5c7ee2aaa100,06ad914928cfa3a019811095269103955d528c4f..8ba754064559305668dcf96aa9ca974db32ac7db
@@@ -15,7 -15,6 +15,7 @@@
  #include <linux/mman.h>
  #include <linux/nodemask.h>
  
 +#include <asm/cputype.h>
  #include <asm/mach-types.h>
  #include <asm/setup.h>
  #include <asm/sizes.h>
@@@ -28,6 -27,9 +28,6 @@@
  
  DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
  
 -extern void _stext, _etext, __data_start, _end;
 -extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
 -
  /*
   * empty_zero_page is a special page that is used for
   * zero-initialized data and COW.
@@@ -66,27 -68,27 +66,27 @@@ static struct cachepolicy cache_policie
                .policy         = "uncached",
                .cr_mask        = CR_W|CR_C,
                .pmd            = PMD_SECT_UNCACHED,
-               .pte            = 0,
+               .pte            = L_PTE_MT_UNCACHED,
        }, {
                .policy         = "buffered",
                .cr_mask        = CR_C,
                .pmd            = PMD_SECT_BUFFERED,
-               .pte            = PTE_BUFFERABLE,
+               .pte            = L_PTE_MT_BUFFERABLE,
        }, {
                .policy         = "writethrough",
                .cr_mask        = 0,
                .pmd            = PMD_SECT_WT,
-               .pte            = PTE_CACHEABLE,
+               .pte            = L_PTE_MT_WRITETHROUGH,
        }, {
                .policy         = "writeback",
                .cr_mask        = 0,
                .pmd            = PMD_SECT_WB,
-               .pte            = PTE_BUFFERABLE|PTE_CACHEABLE,
+               .pte            = L_PTE_MT_WRITEBACK,
        }, {
                .policy         = "writealloc",
                .cr_mask        = 0,
                .pmd            = PMD_SECT_WBWA,
-               .pte            = PTE_BUFFERABLE|PTE_CACHEABLE,
+               .pte            = L_PTE_MT_WRITEALLOC,
        }
  };
  
@@@ -184,29 -186,28 +184,28 @@@ void adjust_cr(unsigned long mask, unsi
  
  static struct mem_type mem_types[] = {
        [MT_DEVICE] = {           /* Strongly ordered / ARMv6 shared device */
-               .prot_pte       = PROT_PTE_DEVICE,
+               .prot_pte       = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED |
+                                 L_PTE_SHARED,
                .prot_l1        = PMD_TYPE_TABLE,
                .prot_sect      = PROT_SECT_DEVICE | PMD_SECT_UNCACHED,
                .domain         = DOMAIN_IO,
        },
        [MT_DEVICE_NONSHARED] = { /* ARMv6 non-shared device */
-               .prot_pte       = PROT_PTE_DEVICE,
-               .prot_pte_ext   = PTE_EXT_TEX(2),
+               .prot_pte       = PROT_PTE_DEVICE | L_PTE_MT_DEV_NONSHARED,
                .prot_l1        = PMD_TYPE_TABLE,
                .prot_sect      = PROT_SECT_DEVICE | PMD_SECT_TEX(2),
                .domain         = DOMAIN_IO,
        },
        [MT_DEVICE_CACHED] = {    /* ioremap_cached */
-               .prot_pte       = PROT_PTE_DEVICE | L_PTE_CACHEABLE | L_PTE_BUFFERABLE,
+               .prot_pte       = PROT_PTE_DEVICE | L_PTE_MT_DEV_CACHED,
                .prot_l1        = PMD_TYPE_TABLE,
                .prot_sect      = PROT_SECT_DEVICE | PMD_SECT_WB,
                .domain         = DOMAIN_IO,
        },      
-       [MT_DEVICE_IXP2000] = {   /* IXP2400 requires XCB=101 for on-chip I/O */
-               .prot_pte       = PROT_PTE_DEVICE,
+       [MT_DEVICE_WC] = {      /* ioremap_wc */
+               .prot_pte       = PROT_PTE_DEVICE | L_PTE_MT_DEV_WC,
                .prot_l1        = PMD_TYPE_TABLE,
-               .prot_sect      = PROT_SECT_DEVICE | PMD_SECT_BUFFERABLE |
-                                 PMD_SECT_TEX(1),
+               .prot_sect      = PROT_SECT_DEVICE | PMD_SECT_BUFFERABLE,
                .domain         = DOMAIN_IO,
        },
        [MT_CACHECLEAN] = {
@@@ -251,7 -252,7 +250,7 @@@ static void __init build_mem_type_table
  {
        struct cachepolicy *cp;
        unsigned int cr = get_cr();
-       unsigned int user_pgprot, kern_pgprot;
+       unsigned int user_pgprot, kern_pgprot, vecs_pgprot;
        int cpu_arch = cpu_architecture();
        int i;
  
                        cachepolicy = CPOLICY_WRITEBACK;
                ecc_mask = 0;
        }
+ #ifdef CONFIG_SMP
+       cachepolicy = CPOLICY_WRITEALLOC;
+ #endif
+       /*
+        * On non-Xscale3 ARMv5-and-older systems, use CB=01
+        * (Uncached/Buffered) for ioremap_wc() mappings.  On XScale3
+        * and ARMv6+, use TEXCB=00100 mappings (Inner/Outer Uncacheable
+        * in xsc3 parlance, Uncached Normal in ARMv6 parlance).
+        */
+       if (cpu_is_xsc3() || cpu_arch >= CPU_ARCH_ARMv6) {
+               mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1);
+               mem_types[MT_DEVICE_WC].prot_sect &= ~PMD_SECT_BUFFERABLE;
+       }
  
        /*
         * ARMv5 and lower, bit 4 must be set for page tables.
        }
  
        cp = &cache_policies[cachepolicy];
-       kern_pgprot = user_pgprot = cp->pte;
+       vecs_pgprot = kern_pgprot = user_pgprot = cp->pte;
+ #ifndef CONFIG_SMP
+       /*
+        * Only use write-through for non-SMP systems
+        */
+       if (cpu_arch >= CPU_ARCH_ARMv5 && cachepolicy > CPOLICY_WRITETHROUGH)
+               vecs_pgprot = cache_policies[CPOLICY_WRITETHROUGH].pte;
+ #endif
  
        /*
         * Enable CPU-specific coherency if supported.
                /*
                 * Mark the device area as "shared device"
                 */
-               mem_types[MT_DEVICE].prot_pte |= L_PTE_BUFFERABLE;
                mem_types[MT_DEVICE].prot_sect |= PMD_SECT_BUFFERED;
  
  #ifdef CONFIG_SMP
                 */
                user_pgprot |= L_PTE_SHARED;
                kern_pgprot |= L_PTE_SHARED;
+               vecs_pgprot |= L_PTE_SHARED;
                mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
  #endif
        }
  
        for (i = 0; i < 16; i++) {
                unsigned long v = pgprot_val(protection_map[i]);
-               v = (v & ~(L_PTE_BUFFERABLE|L_PTE_CACHEABLE)) | user_pgprot;
-               protection_map[i] = __pgprot(v);
+               protection_map[i] = __pgprot(v | user_pgprot);
        }
  
-       mem_types[MT_LOW_VECTORS].prot_pte |= kern_pgprot;
-       mem_types[MT_HIGH_VECTORS].prot_pte |= kern_pgprot;
+       mem_types[MT_LOW_VECTORS].prot_pte |= vecs_pgprot;
+       mem_types[MT_HIGH_VECTORS].prot_pte |= vecs_pgprot;
  
-       if (cpu_arch >= CPU_ARCH_ARMv5) {
- #ifndef CONFIG_SMP
-               /*
-                * Only use write-through for non-SMP systems
-                */
-               mem_types[MT_LOW_VECTORS].prot_pte &= ~L_PTE_BUFFERABLE;
-               mem_types[MT_HIGH_VECTORS].prot_pte &= ~L_PTE_BUFFERABLE;
- #endif
-       } else {
+       if (cpu_arch < CPU_ARCH_ARMv5)
                mem_types[MT_MINICLEAN].prot_sect &= ~PMD_SECT_TEX(1);
-       }
  
        pgprot_user   = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | user_pgprot);
        pgprot_kernel = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG |
@@@ -398,8 -411,7 +409,7 @@@ static void __init alloc_init_pte(pmd_
  
        pte = pte_offset_kernel(pmd, addr);
        do {
-               set_pte_ext(pte, pfn_pte(pfn, __pgprot(type->prot_pte)),
-                           type->prot_pte_ext);
+               set_pte_ext(pte, pfn_pte(pfn, __pgprot(type->prot_pte)), 0);
                pfn++;
        } while (pte++, addr += PAGE_SIZE, addr != end);
  }
@@@ -566,35 -578,12 +576,35 @@@ void __init iotable_init(struct map_des
                create_mapping(io_desc + i);
  }
  
 +static unsigned long __initdata vmalloc_reserve = SZ_128M;
 +
 +/*
 + * vmalloc=size forces the vmalloc area to be exactly 'size'
 + * bytes. This can be used to increase (or decrease) the vmalloc
 + * area - the default is 128m.
 + */
 +static void __init early_vmalloc(char **arg)
 +{
 +      vmalloc_reserve = memparse(*arg, arg);
 +
 +      if (vmalloc_reserve < SZ_16M) {
 +              vmalloc_reserve = SZ_16M;
 +              printk(KERN_WARNING
 +                      "vmalloc area too small, limiting to %luMB\n",
 +                      vmalloc_reserve >> 20);
 +      }
 +}
 +__early_param("vmalloc=", early_vmalloc);
 +
 +#define VMALLOC_MIN   (void *)(VMALLOC_END - vmalloc_reserve)
 +
  static int __init check_membank_valid(struct membank *mb)
  {
        /*
 -       * Check whether this memory region has non-zero size.
 +       * Check whether this memory region has non-zero size or
 +       * invalid node number.
         */
 -      if (mb->size == 0)
 +      if (mb->size == 0 || mb->node >= MAX_NUMNODES)
                return 0;
  
        /*
  
  static void __init sanity_check_meminfo(struct meminfo *mi)
  {
 -      int i;
 -      int j;
 +      int i, j;
  
        for (i = 0, j = 0; i < mi->nr_banks; i++) {
                if (check_membank_valid(&mi->bank[i]))
diff --combined arch/arm/mm/proc-v7.S
index a67e26f3dce2a87ad9edaa7cf45dba2449cff3f1,db83c98b6b1fa2b4f9e189f3796c51cdbe199503..34e424041927fe57f464fa4612cd5e99b0c1ebe9
@@@ -12,7 -12,7 +12,7 @@@
  #include <linux/linkage.h>
  #include <asm/assembler.h>
  #include <asm/asm-offsets.h>
- #include <asm/elf.h>
+ #include <asm/hwcap.h>
  #include <asm/pgtable-hwdef.h>
  #include <asm/pgtable.h>
  
  
  ENTRY(cpu_v7_proc_init)
        mov     pc, lr
 +ENDPROC(cpu_v7_proc_init)
  
  ENTRY(cpu_v7_proc_fin)
        mov     pc, lr
 +ENDPROC(cpu_v7_proc_fin)
  
  /*
   *    cpu_v7_reset(loc)
@@@ -45,7 -43,6 +45,7 @@@
        .align  5
  ENTRY(cpu_v7_reset)
        mov     pc, r0
 +ENDPROC(cpu_v7_reset)
  
  /*
   *    cpu_v7_do_idle()
@@@ -55,9 -52,8 +55,9 @@@
   *    IRQs are already disabled.
   */
  ENTRY(cpu_v7_do_idle)
 -      .long   0xe320f003                      @ ARM V7 WFI instruction
 +      wfi
        mov     pc, lr
 +ENDPROC(cpu_v7_do_idle)
  
  ENTRY(cpu_v7_dcache_clean_area)
  #ifndef TLB_CAN_READ_FROM_L1_CACHE
@@@ -69,7 -65,6 +69,7 @@@
        dsb
  #endif
        mov     pc, lr
 +ENDPROC(cpu_v7_dcache_clean_area)
  
  /*
   *    cpu_v7_switch_mm(pgd_phys, tsk)
@@@ -94,7 -89,6 +94,7 @@@ ENTRY(cpu_v7_switch_mm
        isb
  #endif
        mov     pc, lr
 +ENDPROC(cpu_v7_switch_mm)
  
  /*
   *    cpu_v7_set_pte_ext(ptep, pte)
   *              (hardware version is stored at -1024 bytes)
   *    - pte   - PTE value to store
   *    - ext   - value for extended PTE bits
-  *
-  *    Permissions:
-  *      YUWD  APX AP1 AP0     SVC     User
-  *      0xxx   0   0   0      no acc  no acc
-  *      100x   1   0   1      r/o     no acc
-  *      10x0   1   0   1      r/o     no acc
-  *      1011   0   0   1      r/w     no acc
-  *      110x   0   1   0      r/w     r/o
-  *      11x0   0   1   0      r/w     r/o
-  *      1111   0   1   1      r/w     r/w
   */
  ENTRY(cpu_v7_set_pte_ext)
  #ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
  
        bic     r3, r1, #0x000003f0
-       bic     r3, r3, #0x00000003
+       bic     r3, r3, #PTE_TYPE_MASK
        orr     r3, r3, r2
        orr     r3, r3, #PTE_EXT_AP0 | 2
  
+       tst     r2, #1 << 4
+       orrne   r3, r3, #PTE_EXT_TEX(1)
        tst     r1, #L_PTE_WRITE
        tstne   r1, #L_PTE_DIRTY
        orreq   r3, r3, #PTE_EXT_APX
        tstne   r3, #PTE_EXT_APX
        bicne   r3, r3, #PTE_EXT_APX | PTE_EXT_AP0
  
-       tst     r1, #L_PTE_YOUNG
-       biceq   r3, r3, #PTE_EXT_APX | PTE_EXT_AP_MASK
        tst     r1, #L_PTE_EXEC
        orreq   r3, r3, #PTE_EXT_XN
  
-       tst     r1, #L_PTE_PRESENT
+       tst     r1, #L_PTE_YOUNG
+       tstne   r1, #L_PTE_PRESENT
        moveq   r3, #0
  
        str     r3, [r0]
        mcr     p15, 0, r0, c7, c10, 1          @ flush_pte
  #endif
        mov     pc, lr
 +ENDPROC(cpu_v7_set_pte_ext)
  
  cpu_v7_name:
        .ascii  "ARMv7 Processor"
@@@ -189,13 -173,16 +180,17 @@@ __v7_setup
        mov     r10, #0x1f                      @ domains 0, 1 = manager
        mcr     p15, 0, r10, c3, c0, 0          @ load domain access register
  #endif
+       ldr     r5, =0x40e040e0
+       ldr     r6, =0xff0aa1a8
+       mcr     p15, 0, r5, c10, c2, 0          @ write PRRR
+       mcr     p15, 0, r6, c10, c2, 1          @ write NMRR
        adr     r5, v7_crval
        ldmia   r5, {r5, r6}
        mrc     p15, 0, r0, c1, c0, 0           @ read control register
        bic     r0, r0, r5                      @ clear bits them
        orr     r0, r0, r6                      @ set them
        mov     pc, lr                          @ return to head.S:__ret
 +ENDPROC(__v7_setup)
  
        /*
         *         V X F   I D LR
         */
        .type   v7_crval, #object
  v7_crval:
-       crval   clear=0x0120c302, mmuset=0x00c0387d, ucset=0x00c0187c
+       crval   clear=0x0120c302, mmuset=0x10c0387d, ucset=0x00c0187c
  
  __v7_setup_stack:
        .space  4 * 11                          @ 11 registers
index e622fa2825b548dfa70078acdd6c5498e92d454a,9e1341ebc14e8842646ae8a53fb2aa9307031b69..5764bce98cf37fd7bef2e3f0c5c7af9fe9f3b823
@@@ -17,7 -17,6 +17,7 @@@
  #include <linux/sysdev.h>
  #include <linux/err.h>
  #include <linux/clk.h>
 +#include <linux/io.h>
  
  #include <mach/hardware.h>
  #include <asm/irq.h>
@@@ -25,6 -24,8 +25,6 @@@
  #include <mach/gpio.h>
  #include <asm/mach/irq.h>
  
 -#include <asm/io.h>
 -
  /*
   * OMAP1510 GPIO registers
   */
@@@ -1487,7 -1488,7 +1487,7 @@@ static int __init _omap_gpio_init(void
                bank->chip.set = gpio_set;
                if (bank_is_mpuio(bank)) {
                        bank->chip.label = "mpuio";
- #ifdef CONFIG_ARCH_OMAP1
+ #ifdef CONFIG_ARCH_OMAP16XX
                        bank->chip.dev = &omap_mpuio_device.dev;
  #endif
                        bank->chip.base = OMAP_MPUIO(0);
diff --combined drivers/net/Kconfig
index ad26f1fdf273e14129e2ec0bff60d0210919a7c6,4a11296a951438df0730456206473bc40b363059..9df7bb93edcae0c84885d763042faa1c844ae5e1
@@@ -822,14 -822,14 +822,14 @@@ config ULTRA3
          will be called smc-ultra32.
  
  config BFIN_MAC
-       tristate "Blackfin 527/536/537 on-chip mac support"
-       depends on NET_ETHERNET && (BF527 || BF537 || BF536)
+       tristate "Blackfin on-chip MAC support"
+       depends on NET_ETHERNET && (BF526 || BF527 || BF536 || BF537)
        select CRC32
        select MII
        select PHYLIB
        select BFIN_MAC_USE_L1 if DMA_UNCACHED_NONE
        help
-         This is the driver for blackfin on-chip mac device. Say Y if you want it
+         This is the driver for Blackfin on-chip mac device. Say Y if you want it
          compiled into the kernel. This driver is also available as a module
          ( = code which can be inserted in and removed from the running kernel
          whenever you want). The module will be called bfin_mac.
@@@ -1386,8 -1386,7 +1386,8 @@@ config FORCEDETH_NAP
  
  config CS89x0
        tristate "CS89x0 support"
 -      depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X)
 +      depends on NET_ETHERNET && (ISA || EISA || MACH_IXDP2351 \
 +              || ARCH_IXDP2X01 || ARCH_PNX010X || MACH_MX31ADS)
        ---help---
          Support for CS89x0 chipset based Ethernet cards. If you have a
          network (Ethernet) card of this type, say Y and read the
          To compile this driver as a module, choose M here. The module
          will be called cs89x0.
  
 +config CS89x0_NONISA_IRQ
 +      def_bool y
 +      depends on CS89x0 != n
 +      depends on MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X || MACH_MX31ADS
 +
  config TC35815
        tristate "TOSHIBA TC35815 Ethernet support"
        depends on NET_PCI && PCI && MIPS
diff --combined drivers/net/smc91x.c
index ceed2f69216a8b70a0c3bd9c6c0964b1ef1af3a2,24768c10cadb7d1e326b3651ce6819ec08021699..e332a518efe84de5a9b96c419546331c9b301b2c
@@@ -1520,9 -1520,7 +1520,9 @@@ smc_open(struct net_device *dev
        /* Setup the default Register Modes */
        lp->tcr_cur_mode = TCR_DEFAULT;
        lp->rcr_cur_mode = RCR_DEFAULT;
 -      lp->rpc_cur_mode = RPC_DEFAULT;
 +      lp->rpc_cur_mode = RPC_DEFAULT |
 +                              lp->cfg.leda << RPC_LSXA_SHFT |
 +                              lp->cfg.ledb << RPC_LSXB_SHFT;
  
        /*
         * If we are not using a MII interface, we need to
@@@ -2159,11 -2157,6 +2159,11 @@@ static int smc_drv_probe(struct platfor
                lp->cfg.flags |= (nowait) ? SMC91X_NOWAIT : 0;
        }
  
 +      if (!lp->cfg.leda && !lp->cfg.ledb) {
 +              lp->cfg.leda = RPC_LSA_DEFAULT;
 +              lp->cfg.ledb = RPC_LSB_DEFAULT;
 +      }
 +
        ndev->dma = (unsigned char)-1;
  
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs");
@@@ -2262,7 -2255,7 +2262,7 @@@ static int smc_drv_remove(struct platfo
  
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs");
        if (!res)
-               platform_get_resource(pdev, IORESOURCE_MEM, 0);
+               res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        release_mem_region(res->start, SMC_IO_EXTENT);
  
        free_netdev(ndev);