]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge current mainline tree into linux-omap tree
authorTony Lindgren <tony@atomide.com>
Tue, 22 Apr 2008 21:45:05 +0000 (14:45 -0700)
committerTony Lindgren <tony@atomide.com>
Tue, 22 Apr 2008 21:45:05 +0000 (14:45 -0700)
Merge branches 'master' and 'linus'

Conflicts:

arch/arm/Kconfig
arch/arm/kernel/asm-offsets.c
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/board-2430sdp.c
arch/arm/mach-omap2/board-apollon.c
arch/arm/mach-omap2/board-h4.c
arch/arm/mach-omap2/clock.c
arch/arm/mach-omap2/clock.h
arch/arm/mach-omap2/clock24xx.c
arch/arm/mach-omap2/clock24xx.h
arch/arm/mach-omap2/clock34xx.c
arch/arm/mach-omap2/clock34xx.h
arch/arm/mach-omap2/cm-regbits-34xx.h
arch/arm/mach-omap2/cm.h
arch/arm/mach-omap2/gpmc.c
arch/arm/mach-omap2/mux.c
arch/arm/mach-omap2/pm.c
arch/arm/mach-omap2/prcm.c
arch/arm/mach-omap2/prm.h
arch/arm/mach-omap2/sdrc.h
arch/arm/mach-omap2/sleep.S
arch/arm/mach-omap2/sram-fn.S
arch/arm/mm/Kconfig
arch/arm/plat-omap/clock.c
drivers/mmc/host/omap.c
include/asm-arm/arch-omap/clock.h
include/asm-arm/arch-omap/mmc.h
include/asm-arm/arch-omap/mux.h
include/asm-arm/glue.h
include/asm-arm/thread_info.h

22 files changed:
1  2 
MAINTAINERS
Makefile
arch/arm/Kconfig
arch/arm/Makefile
arch/arm/mm/Kconfig
drivers/char/hw_random/omap-rng.c
drivers/crypto/Kconfig
drivers/input/keyboard/Kconfig
drivers/input/keyboard/Makefile
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/mtd/nand/Kconfig
drivers/net/smc91x.c
drivers/serial/8250.c
drivers/usb/gadget/Kconfig
drivers/usb/host/ehci-hcd.c
include/asm-arm/cpu-multi32.h
net/ipv4/netfilter/Kconfig
net/ipv4/netfilter/Makefile
security/Kconfig

diff --combined MAINTAINERS
index 327665a74510be272c9d14ce461be66a8e7ff77e,c0cc52a9afe5c4a1342af84e095663b27bc42297..11800c33ea84760575944dbca4e5fd3458ff3086
@@@ -486,6 -486,12 +486,12 @@@ M:       kernel@wantstofly.or
  L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
  S:    Maintained
  
+ ARM/GUMSTIX MACHINE SUPPORT
+ P:    Steve Sakoman
+ M:    sakoman@gmail.com
+ L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+ S:    Maintained
  ARM/HP JORNADA 7XX MACHINE SUPPORT
  P:      Kristoffer Ericson
  M:      kristoffer.ericson@gmail.com
@@@ -678,6 -684,11 +684,11 @@@ L:       linux-wireless@vger.kernel.or
  L:    ath5k-devel@lists.ath5k.org
  S:    Maintained
  
+ ATI_REMOTE2 DRIVER
+ P:    Ville Syrjala
+ M:    syrjala@sci.fi
+ S:    Maintained
  ATL1 ETHERNET DRIVER
  P:    Jay Cliburn
  M:    jcliburn@gmail.com
@@@ -840,15 -851,6 +851,6 @@@ L:        linux-wireless@vger.kernel.or
  W:    http://linuxwireless.org/en/users/Drivers/b43
  S:    Maintained
  
- BCM43XX WIRELESS DRIVER (SOFTMAC BASED VERSION)
- P:    Larry Finger
- M:    Larry.Finger@lwfinger.net
- P:    Stefano Brivio
- M:    stefano.brivio@polimi.it
- L:    linux-wireless@vger.kernel.org
- W:    http://bcm43xx.berlios.de/
- S:    Obsolete
  BEFS FILE SYSTEM
  P:    Sergey S. Kostyliov
  M:    rathamahata@php4.ru
@@@ -2319,6 -2321,12 +2321,12 @@@ L:    linux-kernel@vger.kernel.or
  L:    kexec@lists.infradead.org
  S:    Maintained
  
+ KGDB
+ P:    Jason Wessel
+ M:    jason.wessel@windriver.com
+ L:    kgdb-bugreport@lists.sourceforge.net
+ S:    Maintained
  KPROBES
  P:    Ananth N Mavinakayanahalli
  M:    ananth@in.ibm.com
@@@ -2944,8 -2952,9 +2952,9 @@@ P:      Mark Fashe
  M:    mfasheh@suse.com
  P:    Joel Becker
  M:    joel.becker@oracle.com
- L:    ocfs2-devel@oss.oracle.com
+ L:    ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
  W:    http://oss.oracle.com/projects/ocfs2/
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git
  S:    Supported
  
  OMNIKEY CARDMAN 4000 DRIVER
@@@ -3061,11 -3070,10 +3070,10 @@@ L:   linux-pci@atrey.karlin.mff.cuni.c
  S:    Supported
  
  PCI SUBSYSTEM
- P:    Greg Kroah-Hartman
- M:    gregkh@suse.de
+ P:    Jesse Barnes
+ M:    jbarnes@virtuousgeek.org
  L:    linux-kernel@vger.kernel.org
  L:    linux-pci@atrey.karlin.mff.cuni.cz
- T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
  S:    Supported
  
  PCI HOTPLUG CORE
@@@ -3472,7 -3480,7 +3480,7 @@@ P:      Vlad Yasevic
  M:    vladislav.yasevich@hp.com
  P:    Sridhar Samudrala
  M:    sri@us.ibm.com
- L:    lksctp-developers@lists.sourceforge.net
+ L:    linux-sctp@vger.kernel.org
  W:    http://lksctp.sourceforge.net
  S:    Supported
  
@@@ -3606,11 -3614,10 +3614,10 @@@ M:   mhoffman@lightlink.co
  L:    lm-sensors@lm-sensors.org
  S:    Maintained
  
- SOFTMAC LAYER (IEEE 802.11)
- P:    Daniel Drake
- M:    dsd@gentoo.org
- L:    linux-wireless@vger.kernel.org
- S:    Obsolete
+ SMX UIO Interface
+ P:    Ben Nizette
+ M:    bn@niasdigital.com
+ S:    Maintained
  
  SOFTWARE RAID (Multiple Disks) SUPPORT
  P:    Ingo Molnar
@@@ -3854,7 -3861,7 +3861,7 @@@ S:      Maintaine
  
  TI OMAP MMC INTERFACE DRIVER
  P:    Carlos Aguiar, Anderson Briglia and Syed Khasim
 -M:    linux-omap-open-source@linux.omap.com (subscribers only)
 +M:    linux-omap@vger.kernel.org
  W:    http://linux.omap.com
  W:    http://www.muru.com/linux/omap/
  S:    Maintained
diff --combined Makefile
index 8e3bb8c1de80f918851eabe21bde2d1a30ad5581,3dbc826bb8e6d73c175d772a497f17accd61c23e..a48f322d154f0eea79a51c710d6a600386166841
+++ b/Makefile
@@@ -16,9 -16,6 +16,9 @@@ NAME = Funky Weasel is Jiggy wit i
  # o  print "Entering directory ...";
  MAKEFLAGS += -rR --no-print-directory
  
 +# Add custom flags here to avoid conflict with updates
 +EXTRAVERSION := $(EXTRAVERSION)-omap1
 +
  # We are using a recursive build, so we need to do a little thinking
  # to get the ordering right.
  #
@@@ -174,8 -171,6 +174,8 @@@ SUBARCH := $(shell uname -m | sed -e s/
                                  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
                                  -e s/sh.*/sh/ )
  
 +SUBARCH := arm
 +
  # Cross compiling and selecting different set of gcc/bin-utils
  # ---------------------------------------------------------------------------
  #
  # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
  export KBUILD_BUILDHOST := $(SUBARCH)
  ARCH          ?= $(SUBARCH)
 -CROSS_COMPILE ?=
 +CROSS_COMPILE ?= arm-linux-
  
  # Architecture as present in compile.h
  UTS_MACHINE   := $(ARCH)
@@@ -1543,7 -1538,7 +1543,7 @@@ quiet_cmd_rmdirs = $(if $(wildcard $(rm
  quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
        cmd_rmfiles = rm -f $(rm-files)
  
- # Run depmod only is we have System.map and depmod is executable
+ # Run depmod only if we have System.map and depmod is executable
  # and we build for the host arch
  quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
        cmd_depmod = \
diff --combined arch/arm/Kconfig
index f8a7d222f995e4654ead5ab79417edbebd3f0f1e,d8d253285a94a33c8cc80607b8e811403563e78b..c60a27dd7653af4fc915bb6d42ff9172fc5ee90d
@@@ -255,6 -255,7 +255,7 @@@ config ARCH_EP93X
        select ARM_AMBA
        select ARM_VIC
        select GENERIC_GPIO
+       select HAVE_GPIO_LIB
        help
          This enables support for the Cirrus EP93xx series of CPUs.
  
@@@ -377,15 -378,17 +378,17 @@@ config ARCH_MX
        help
          Support for Freescale MXC/iMX-based family of processors
  
- config ARCH_ORION
+ config ARCH_ORION5X
        bool "Marvell Orion"
        depends on MMU
        select PCI
        select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
+       select PLAT_ORION
        help
-         Support for Marvell Orion System on Chip family.
+         Support for the following Marvell Orion 5x series SoCs:
+         Orion-1 (5181), Orion-NAS (5182), Orion-2 (5281.)
  
  config ARCH_PNX4008
        bool "Philips Nexperia PNX4008 Mobile"
@@@ -422,10 -425,15 +425,15 @@@ config ARCH_SA110
        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
+       select GENERIC_CLOCKEVENTS
+       select TICK_ONESHOT
        select HAVE_IDE
+       select HAVE_GPIO_LIB
        help
          Support for StrongARM 11x0 based boards.
  
@@@ -517,7 -525,7 +525,7 @@@ source "arch/arm/mach-omap1/Kconfig
  
  source "arch/arm/mach-omap2/Kconfig"
  
- source "arch/arm/mach-orion/Kconfig"
+ source "arch/arm/mach-orion5x/Kconfig"
  
  source "arch/arm/plat-s3c24xx/Kconfig"
  source "arch/arm/plat-s3c/Kconfig"
@@@ -564,6 -572,9 +572,9 @@@ config ARCH_ACOR
  config PLAT_IOP
        bool
  
+ config PLAT_ORION
+       bool
  source arch/arm/mm/Kconfig
  
  config IWMMXT
@@@ -651,7 -662,7 +662,7 @@@ source "kernel/time/Kconfig
  
  config SMP
        bool "Symmetric Multi-Processing (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && REALVIEW_EB_ARM11MP
+       depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP)
        help
          This enables support for systems with more than one CPU. If you have
          a system with only one CPU, like most personal computers, say N. If
@@@ -684,7 -695,7 +695,7 @@@ config HOTPLUG_CP
  
  config LOCAL_TIMERS
        bool "Use local timer interrupts"
-       depends on SMP && REALVIEW_EB_ARM11MP
+       depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP)
        default y
        help
          Enable support for local timers on SMP platforms, rather then the
@@@ -775,6 -786,12 +786,12 @@@ config ARCH_DISCONTIGMEM_ENABL
          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_SELECT_MEMORY_MODEL
+       bool
  config NODES_SHIFT
        int
        default "4" if ARCH_LH7A40X
@@@ -1175,11 -1192,8 +1192,13 @@@ source "drivers/dma/Kconfig
  
  source "drivers/dca/Kconfig"
  
+ source "drivers/uio/Kconfig"
 +if ARCH_OMAP
 +source "drivers/cbus/Kconfig"
 +source "drivers/dsp/dspgateway/Kconfig"
 +endif
 +
  endmenu
  
  source "fs/Kconfig"
diff --combined arch/arm/Makefile
index 90428eec17e776914c27c5d920a7c51a30b31e4a,e72db27e0ba074e599d9eda4101c417c19f78362..40a0b44434735cca3b55fe1acc35fcb9f3931721
@@@ -121,7 -121,6 +121,7 @@@ endi
   machine-$(CONFIG_ARCH_IXP23XX)    := ixp23xx
   machine-$(CONFIG_ARCH_OMAP1)    := omap1
   machine-$(CONFIG_ARCH_OMAP2)    := omap2
 + machine-$(CONFIG_ARCH_OMAP3)         := omap2
    incdir-$(CONFIG_ARCH_OMAP)     := omap
   machine-$(CONFIG_ARCH_S3C2410)          := s3c2410
   machine-$(CONFIG_ARCH_LH7A40X)          := lh7a40x
   machine-$(CONFIG_ARCH_PNX4008)          := pnx4008
   machine-$(CONFIG_ARCH_NETX)     := netx
   machine-$(CONFIG_ARCH_NS9XXX)           := ns9xxx
-  textofs-$(CONFIG_ARCH_NS9XXX)           := 0x00108000
   machine-$(CONFIG_ARCH_DAVINCI)          := davinci
   machine-$(CONFIG_ARCH_KS8695)     := ks8695
    incdir-$(CONFIG_ARCH_MXC)      := mxc
   machine-$(CONFIG_ARCH_MX3)      := mx3
-  machine-$(CONFIG_ARCH_ORION)    := orion
+  machine-$(CONFIG_ARCH_ORION5X)          := orion5x
   machine-$(CONFIG_ARCH_MSM7X00A)   := msm
  
  ifeq ($(CONFIG_ARCH_EBSA110),y)
@@@ -186,6 -184,7 +185,7 @@@ core-$(CONFIG_VFP)         += arch/arm/vfp
  
  # If we have a common platform directory, then include it in the build.
  core-$(CONFIG_PLAT_IOP)               += arch/arm/plat-iop/
+ core-$(CONFIG_PLAT_ORION)             += arch/arm/plat-orion/
  core-$(CONFIG_ARCH_OMAP)      += arch/arm/plat-omap/
  core-$(CONFIG_PLAT_S3C24XX)           += arch/arm/plat-s3c24xx/
  core-$(CONFIG_ARCH_MXC)               += arch/arm/plat-mxc/
diff --combined arch/arm/mm/Kconfig
index 1626f5c170bf639e28cf6857ee935656203af92e,746cbb7c8e95a7273dc899e811a81cd55d960a3b..15066c29a8498197777139a85aee056c6ce675e6
@@@ -359,10 -359,11 +359,11 @@@ config CPU_XSC
  # Feroceon
  config CPU_FEROCEON
        bool
-       depends on ARCH_ORION
+       depends on ARCH_ORION5X
        default y
        select CPU_32v5
        select CPU_ABRT_EV5T
+       select CPU_PABRT_NOIFAR
        select CPU_CACHE_VIVT
        select CPU_CP15_MMU
        select CPU_COPY_V4WB if MMU
@@@ -380,7 -381,7 +381,7 @@@ config CPU_FEROCEON_OLD_I
  # ARMv6
  config CPU_V6
        bool "Support ARM V6 processor"
-       depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM7X00A
+       depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM7X00A || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176
        default y if ARCH_MX3
        default y if ARCH_MSM7X00A
        select CPU_32v6
@@@ -408,7 -409,7 +409,7 @@@ config CPU_32v6
  # ARMv7
  config CPU_V7
        bool "Support ARM V7 processor"
-       depends on ARCH_INTEGRATOR || ARCH_OMAP3
 -      depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB
++      depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP3
        select CPU_32v6K
        select CPU_32v7
        select CPU_ABRT_EV7
@@@ -594,12 -595,12 +595,12 @@@ config ARM_THUM
  
          If you don't know what this all is, saying Y is a safe choice.
  
- config ARM_XENON
-       bool "Enable Xenon extension"
+ config ARM_THUMBEE
+       bool "Enable ThumbEE CPU extension"
        depends on CPU_V7
        help
-         Say Y here if you have a CPU with Xenon extension and code to make
-         use of it. Say N for code that can run on CPUs without Xenon.
+         Say Y here if you have a CPU with the ThumbEE extension and code to
+         make use of it. Say N for code that can run on CPUs without ThumbEE.
  
  config CPU_BIG_ENDIAN
        bool "Build big-endian kernel"
@@@ -700,5 -701,9 +701,9 @@@ config OUTER_CACH
        default n
  
  config CACHE_L2X0
-       bool
+       bool "Enable the L2x0 outer cache controller"
+       depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176
+       default y
        select OUTER_CACHE
+       help
+         This option enables the L2x0 PrimeCell.
index 9ce7c65beb022014e19d23856f776ccec0efd2b5,51738bdd834eccd732eb234b8cddd7cb1c83ed61..154a21fbb89fbbcc53ae97de902128231f4d73c5
@@@ -1,7 -1,5 +1,5 @@@
  /*
-  * drivers/char/hw_random/omap-rng.c
-  *
-  * RNG driver for TI OMAP CPU family
+  * omap-rng.c - RNG driver for TI OMAP CPU family
   *
   * Author: Deepak Saxena <dsaxena@plexity.net>
   *
   * This file is licensed under  the terms of the GNU General Public
   * License version 2. This program is licensed "as is" without any
   * warranty of any kind, whether express or implied.
-  *
-  * TODO:
-  *
-  * - Make status updated be interrupt driven so we don't poll
-  *
   */
  
  #include <linux/module.h>
@@@ -55,17 -48,16 +48,16 @@@ static void __iomem *rng_base
  static struct clk *rng_ick;
  static struct platform_device *rng_dev;
  
- static u32 omap_rng_read_reg(int reg)
+ static inline u32 omap_rng_read_reg(int reg)
  {
        return __raw_readl(rng_base + reg);
  }
  
- static void omap_rng_write_reg(int reg, u32 val)
+ static inline void omap_rng_write_reg(int reg, u32 val)
  {
        __raw_writel(val, rng_base + reg);
  }
  
- /* REVISIT: Does the status bit really work on 16xx? */
  static int omap_rng_data_present(struct hwrng *rng, int wait)
  {
        int data, i;
                data = omap_rng_read_reg(RNG_STAT_REG) ? 0 : 1;
                if (data || !wait)
                        break;
+               /* RNG produces data fast enough (2+ MBit/sec, even
+                * during "rngtest" loads, that these delays don't
+                * seem to trigger.  We *could* use the RNG IRQ, but
+                * that'd be higher overhead ... so why bother?
+                */
                udelay(10);
        }
        return data;
@@@ -101,7 -98,8 +98,8 @@@ static int __init omap_rng_probe(struc
         * A bit ugly, and it will never actually happen but there can
         * be only one RNG and this catches any bork
         */
-       BUG_ON(rng_dev);
+       if (rng_dev)
+               return -EBUSY;
  
        if (cpu_is_omap24xx()) {
                rng_ick = clk_get(NULL, "rng_ick");
                return -EBUSY;
  
        dev_set_drvdata(&pdev->dev, mem);
-       rng_base = (u32 __iomem *)io_p2v(res->start);
+       rng_base = (u32 __force __iomem *)io_p2v(res->start);
  
        ret = hwrng_register(&omap_rng_ops);
        if (ret) {
@@@ -182,12 -180,15 +180,14 @@@ static int omap_rng_resume(struct platf
  
  #endif
  
+ /* work with hotplug and coldplug */
+ MODULE_ALIAS("platform:omap_rng");
  
  static struct platform_driver omap_rng_driver = {
        .driver = {
                .name           = "omap_rng",
                .owner          = THIS_MODULE,
        },
 -      .probe          = omap_rng_probe,
        .remove         = __exit_p(omap_rng_remove),
        .suspend        = omap_rng_suspend,
        .resume         = omap_rng_resume
@@@ -198,7 -199,7 +198,7 @@@ static int __init omap_rng_init(void
        if (!cpu_is_omap16xx() && !cpu_is_omap24xx())
                return -ENODEV;
  
 -      return platform_driver_register(&omap_rng_driver);
 +      return platform_driver_probe(&omap_rng_driver, omap_rng_probe);
  }
  
  static void __exit omap_rng_exit(void)
diff --combined drivers/crypto/Kconfig
index cb34a72b8902a93a45b4f7fb8a8b7eb8010b8c9a,43b71b69daa57be26972fe50f0c6213596e7a847..110c4dc781fe709e9ee8dbc38f2fe0b2567711e3
@@@ -27,6 -27,7 +27,7 @@@ config CRYPTO_DEV_PADLOCK_AE
        tristate "PadLock driver for AES algorithm"
        depends on CRYPTO_DEV_PADLOCK
        select CRYPTO_BLKCIPHER
+       select CRYPTO_AES
        help
          Use VIA PadLock for AES algorithm.
  
@@@ -64,6 -65,7 +65,7 @@@ config ZCRYP
        tristate "Support for PCI-attached cryptographic adapters"
        depends on S390
        select ZCRYPT_MONOLITHIC if ZCRYPT="y"
+       select HW_RANDOM
        help
          Select this option if you want to use a PCI-attached cryptographic
          adapter like:
@@@ -81,13 -83,6 +83,13 @@@ config ZCRYPT_MONOLITHI
          that contains all parts of the crypto device driver (ap bus,
          request router and all the card drivers).
  
 +config OMAP_SHA1_MD5
 +      tristate "Support for OMAP SHA1/MD5 hw engine"
 +      depends on ARCH_OMAP24XX && CRYPTO_SHA1 && CRYPTO_MD5
 +      help
 +        OMAP processors have SHA1/MD5 module accelerator. Select this if you
 +        want to use the OMAP module for SHA1/MD5 algorithms.
 +
  config CRYPTO_SHA1_S390
        tristate "SHA1 digest algorithm"
        depends on S390
@@@ -107,6 -102,19 +109,19 @@@ config CRYPTO_SHA256_S39
          This version of SHA implements a 256 bit hash with 128 bits of
          security against collision attacks.
  
+ config CRYPTO_SHA512_S390
+       tristate "SHA384 and SHA512 digest algorithm"
+       depends on S390
+       select CRYPTO_ALGAPI
+       help
+         This is the s390 hardware accelerated implementation of the
+         SHA512 secure hash standard.
+         This version of SHA implements a 512 bit hash with 256 bits of
+         security against collision attacks. The code also includes SHA-384,
+         a 384 bit hash with 192 bits of security against collision attacks.
  config CRYPTO_DES_S390
        tristate "DES and Triple DES cipher algorithms"
        depends on S390
index 137f7e4d5c80a28f866304bbbadab2bc0fd8ecc3,efd70a9745910bfacd97e39b4fdebe451fa14ca4..0f96a308b49cd57d81c7bad4ca4fa47d6373e6a8
@@@ -259,39 -259,6 +259,39 @@@ config KEYBOARD_OMA
          To compile this driver as a module, choose M here: the
          module will be called omap-keypad.
  
 +config KEYBOARD_TWL4030
 +      tristate "TI TWL4030 keypad support"
 +      depends on TWL4030_CORE && (MACH_OMAP_2430SDP || MACH_OMAP_3430SDP)
 +      help
 +        Say Y here if you want to use the OMAP TWL4030 keypad.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called omap-twl4030keypad. This driver depends on
 +        TWL4030 Core and TWL4030 GPIO I2C client driver
 +
 +config OMAP_PS2
 +      tristate "TI OMAP Innovator 1510 PS/2 keyboard & mouse support"
 +      depends on ARCH_OMAP15XX && MACH_OMAP_INNOVATOR
 +      help
 +        Say Y here if you want to use the OMAP Innovator 1510 PS/2
 +        keyboard and mouse.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called innovator_ps2.
 +
 +config KEYBOARD_TSC2301
 +      tristate "TSC2301 keypad support"
 +      depends on SPI_TSC2301
 +      help
 +        Say Y here for if you are using the keypad features of TSC2301.
 +
 +config KEYBOARD_LM8323
 +      tristate "LM8323 keypad chip"
 +      depends on I2C
 +      help
 +        If you say yes here you get support for the National Semiconductor
 +        LM8323 keypad controller.
 +
  config KEYBOARD_PXA27x
        tristate "PXA27x/PXA3xx keypad support"
        depends on PXA27x || PXA3xx
@@@ -347,4 -314,13 +347,13 @@@ config KEYBOARD_BFI
          To compile this driver as a module, choose M here: the
          module will be called bf54x-keys.
  
+ config KEYBOARD_SH_KEYSC
+       tristate "SuperH KEYSC keypad support"
+       depends on SUPERH
+       help
+         Say Y here if you want to use a keypad attached to the KEYSC block
+         on SuperH processors such as sh7722 and sh7343.
+         To compile this driver as a module, choose M here: the
+         module will be called sh_keysc.
  endif
index ec447cd142d9262c0b2508096f30efdfbd17b29e,0edc8f285d1cf57f21a93eb4da8e6fa279920a7a..ae47fffacc6852798d0f094b078cb71d780125fc
@@@ -19,10 -19,6 +19,10 @@@ obj-$(CONFIG_KEYBOARD_TOSA)         += tosakbd
  obj-$(CONFIG_KEYBOARD_HIL)            += hil_kbd.o
  obj-$(CONFIG_KEYBOARD_HIL_OLD)                += hilkbd.o
  obj-$(CONFIG_KEYBOARD_OMAP)           += omap-keypad.o
 +obj-$(CONFIG_OMAP_PS2)                        += innovator_ps2.o
 +obj-$(CONFIG_KEYBOARD_TSC2301)                += tsc2301_kp.o
 +obj-$(CONFIG_KEYBOARD_LM8323)         += lm8323.o
 +obj-$(CONFIG_KEYBOARD_TWL4030)                += omap-twl4030keypad.o
  obj-$(CONFIG_KEYBOARD_PXA27x)         += pxa27x_keypad.o
  obj-$(CONFIG_KEYBOARD_AAED2000)               += aaed2000_kbd.o
  obj-$(CONFIG_KEYBOARD_GPIO)           += gpio_keys.o
@@@ -30,3 -26,4 +30,4 @@@ obj-$(CONFIG_KEYBOARD_HP6XX)          += jornad
  obj-$(CONFIG_KEYBOARD_HP7XX)          += jornada720_kbd.o
  obj-$(CONFIG_KEYBOARD_MAPLE)          += maple_keyb.o
  obj-$(CONFIG_KEYBOARD_BFIN)           += bf54x-keys.o
+ obj-$(CONFIG_KEYBOARD_SH_KEYSC)               += sh_keysc.o
diff --combined drivers/leds/Kconfig
index 77ee07f6f992f9e9474047361e4980f079d06781,a3a6199639f986dff5d21bb2742c3ad6277f8614..0c35501bd12077f260a2f47bb9c97cf92fbbba39
@@@ -46,13 -46,6 +46,6 @@@ config LEDS_SPIT
          This option enables support for the LEDs on Sharp Zaurus
          SL-Cxx00 series (C1000, C3000, C3100).
  
- config LEDS_TOSA
-       tristate "LED Support for the Sharp SL-6000 series"
-       depends on LEDS_CLASS && PXA_SHARPSL
-       help
-         This option enables support for the LEDs on Sharp Zaurus
-         SL-6000 series.
  config LEDS_S3C24XX
        tristate "LED Support for Samsung S3C24XX GPIO LEDs"
        depends on LEDS_CLASS && ARCH_S3C2410
@@@ -79,27 -72,6 +72,27 @@@ config LEDS_WRA
        help
          This option enables support for the PCEngines WRAP programmable LEDs.
  
 +config LEDS_OMAP_DEBUG
 +      boolean "LED Support for OMAP debug board LEDs"
 +      depends on LEDS_CLASS=y && ARCH_OMAP
 +      help
 +        Enables support for the LEDs on the debug board used with OMAP
 +        reference boards like H2/H3/H4 and Perseus2.  Up to six of these
 +        may be claimed by the original ARM debug LED API.
 +
 +config LEDS_OMAP
 +      tristate "LED Support for OMAP GPIO LEDs"
 +      depends on LEDS_CLASS && ARCH_OMAP
 +      help
 +        This option enables support for the LEDs on OMAP processors.
 +
 +config LEDS_OMAP_PWM
 +      tristate "LED Support for OMAP PWM-controlled LEDs"
 +      depends on LEDS_CLASS && ARCH_OMAP && OMAP_DM_TIMER
 +      help
 +        This options enables support for LEDs connected to GPIO lines
 +        controlled by a PWM timer on OMAP CPUs.
 +
  config LEDS_H1940
        tristate "LED Support for iPAQ H1940 device"
        depends on LEDS_CLASS && ARCH_H1940
diff --combined drivers/leds/Makefile
index ff17e1f33da0567573d8fe10aedc0137d0c71c5a,e54f42da21a225e3f4e689952d7f25280e0340fc..677e9cb2bba01690d7f2c523263ee1d2a51b332a
@@@ -9,13 -9,10 +9,12 @@@ obj-$(CONFIG_LEDS_ATMEL_PWM)          += leds-a
  obj-$(CONFIG_LEDS_CORGI)              += leds-corgi.o
  obj-$(CONFIG_LEDS_LOCOMO)             += leds-locomo.o
  obj-$(CONFIG_LEDS_SPITZ)              += leds-spitz.o
- obj-$(CONFIG_LEDS_TOSA)                       += leds-tosa.o
  obj-$(CONFIG_LEDS_S3C24XX)            += leds-s3c24xx.o
  obj-$(CONFIG_LEDS_AMS_DELTA)          += leds-ams-delta.o
  obj-$(CONFIG_LEDS_NET48XX)            += leds-net48xx.o
  obj-$(CONFIG_LEDS_WRAP)                       += leds-wrap.o
 +obj-$(CONFIG_LEDS_OMAP)                       += leds-omap.o
 +obj-$(CONFIG_LEDS_OMAP_PWM)           += leds-omap-pwm.o
  obj-$(CONFIG_LEDS_H1940)              += leds-h1940.o
  obj-$(CONFIG_LEDS_COBALT_QUBE)                += leds-cobalt-qube.o
  obj-$(CONFIG_LEDS_COBALT_RAQ)         += leds-cobalt-raq.o
diff --combined drivers/misc/Kconfig
index e2e327fbebd57c71de5b5c2aa27a564405893962,bb94ce78a6d003a1cfb8c9baa020c45eb0a416e9..dce2d22a836663e417d987d3a03cdf49fcd39d94
@@@ -22,6 -22,39 +22,39 @@@ config ATMEL_PW
          purposes including software controlled power-efficent backlights
          on LCD displays, motor control, and waveform generation.
  
+ config ATMEL_TCLIB
+       bool "Atmel AT32/AT91 Timer/Counter Library"
+       depends on (AVR32 || ARCH_AT91)
+       help
+         Select this if you want a library to allocate the Timer/Counter
+         blocks found on many Atmel processors.  This facilitates using
+         these blocks by different drivers despite processor differences.
+ config ATMEL_TCB_CLKSRC
+       bool "TC Block Clocksource"
+       depends on ATMEL_TCLIB && GENERIC_TIME
+       default y
+       help
+         Select this to get a high precision clocksource based on a
+         TC block with a 5+ MHz base clock rate.  Two timer channels
+         are combined to make a single 32-bit timer.
+         When GENERIC_CLOCKEVENTS is defined, the third timer channel
+         may be used as a clock event device supporting oneshot mode
+         (delays of up to two seconds) based on the 32 KiHz clock.
+ config ATMEL_TCB_CLKSRC_BLOCK
+       int
+       depends on ATMEL_TCB_CLKSRC
+       prompt "TC Block" if ARCH_AT91RM9200 || ARCH_AT91SAM9260 || CPU_AT32AP700X
+       default 0
+       range 0 1
+       help
+         Some chips provide more than one TC block, so you have the
+         choice of which one to use for the clock framework.  The other
+         TC can be used for other purposes, such as PWM generation and
+         interval timing.
  config IBM_ASM
        tristate "Device driver for IBM RSA service processor"
        depends on X86 && PCI && INPUT && EXPERIMENTAL
@@@ -318,20 -351,6 +351,20 @@@ config INTEL_MENLO
  
          If unsure, say N.
  
 +config OMAP_STI
 +        bool "Serial Trace Interface support"
 +        depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
 +        default n
 +        help
 +          Serial Trace Interface. The protocols suported for OMAP1/2/3 are
 +          STI/CSTI/XTIv2 correspondingly.
 +
 +config OMAP_STI_CONSOLE
 +      bool "STI console support"
 +      depends on OMAP_STI
 +      help
 +        This enables a console driver by way of STI/XTI.
 +
  config ENCLOSURE_SERVICES
        tristate "Enclosure Services"
        default n
diff --combined drivers/misc/Makefile
index d65b43d873af8711af01ed0afb4fd5da2be80c83,4581b2533111deb34f72a42d72bee4fdc8a7d63b..e4913d38a87aeb9c69552f9a63673b34b6d90b2b
@@@ -5,12 -5,12 +5,13 @@@ obj- := misc.o        # Dummy rule to force bu
  
  obj-$(CONFIG_IBM_ASM)         += ibmasm/
  obj-$(CONFIG_HDPU_FEATURES)   += hdpuftrs/
 +obj-$(CONFIG_OMAP_STI)                += sti/
  obj-$(CONFIG_MSI_LAPTOP)     += msi-laptop.o
  obj-$(CONFIG_ACER_WMI)     += acer-wmi.o
  obj-$(CONFIG_ASUS_LAPTOP)     += asus-laptop.o
  obj-$(CONFIG_ATMEL_PWM)               += atmel_pwm.o
  obj-$(CONFIG_ATMEL_SSC)               += atmel-ssc.o
+ obj-$(CONFIG_ATMEL_TCLIB)     += atmel_tclib.o
  obj-$(CONFIG_TC1100_WMI)      += tc1100-wmi.o
  obj-$(CONFIG_LKDTM)           += lkdtm.o
  obj-$(CONFIG_TIFM_CORE)               += tifm_core.o
@@@ -23,3 -23,4 +24,4 @@@ obj-$(CONFIG_FUJITSU_LAPTOP)  += fujitsu
  obj-$(CONFIG_EEPROM_93CX6)    += eeprom_93cx6.o
  obj-$(CONFIG_INTEL_MENLOW)    += intel_menlow.o
  obj-$(CONFIG_ENCLOSURE_SERVICES) += enclosure.o
+ obj-$(CONFIG_KGDB_TESTS)      += kgdbts.o
diff --combined drivers/mtd/nand/Kconfig
index 9ba2b2bb230eb00919eac2a9f365536188dbfe10,959fb86cda01e113aca653ef91c646b26f954aa3..d76c2e7ca7dcbb961b528d75eb87d8a1473f5506
@@@ -69,25 -69,6 +69,25 @@@ config MTD_NAND_AMS_DELT
        help
          Support for NAND flash on Amstrad E3 (Delta).
  
 +config MTD_NAND_OMAP2
 +      tristate "NAND Flash device on OMAP 2420H4/2430SDP boards"
 +      depends on (ARM && ARCH_OMAP2 && MTD_NAND)
 +      help
 +          Support for NAND flash on Texas Instruments 2430SDP/2420H4 platforms.
 +
 +config MTD_NAND_OMAP
 +      tristate "NAND Flash device on OMAP H3/H2/P2 boards"
 +      depends on ARM && ARCH_OMAP1 && MTD_NAND && (MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_PERSEUS2)
 +      help
 +        Support for NAND flash on Texas Instruments H3/H2/P2 platforms.
 +
 +config MTD_NAND_OMAP_HW
 +      bool "OMAP HW NAND Flash controller support"
 +        depends on ARM && ARCH_OMAP16XX && MTD_NAND
 +
 +      help
 +        Driver for TI OMAP16xx hardware NAND flash controller.
 +
  config MTD_NAND_TOTO
        tristate "NAND Flash device on TOTO board"
        depends on ARCH_OMAP && BROKEN
@@@ -333,7 -314,7 +333,7 @@@ config MTD_ALAUD
  
  config MTD_NAND_ORION
        tristate "NAND Flash support for Marvell Orion SoC"
-       depends on ARCH_ORION && MTD_NAND
+       depends on PLAT_ORION && MTD_NAND
        help
          This enables the NAND flash controller on Orion machines.
  
diff --combined drivers/net/smc91x.c
index 03b592c350a1883f4455f08428f6089f40d0f129,600b92af33349c1d5a2ed782f0aba89f0fa4a229..5a5aa5f0a8302b83e268a6e4bf0cd2bb49d0e5a3
@@@ -220,22 -220,22 +220,22 @@@ static void PRINT_PKT(u_char *buf, int 
  
  
  /* this enables an interrupt in the interrupt mask register */
- #define SMC_ENABLE_INT(x) do {                                                \
+ #define SMC_ENABLE_INT(lp, x) do {                                    \
        unsigned char mask;                                             \
        spin_lock_irq(&lp->lock);                                       \
-       mask = SMC_GET_INT_MASK();                                      \
+       mask = SMC_GET_INT_MASK(lp);                                    \
        mask |= (x);                                                    \
-       SMC_SET_INT_MASK(mask);                                         \
+       SMC_SET_INT_MASK(lp, mask);                                     \
        spin_unlock_irq(&lp->lock);                                     \
  } while (0)
  
  /* this disables an interrupt from the interrupt mask register */
- #define SMC_DISABLE_INT(x) do {                                               \
+ #define SMC_DISABLE_INT(lp, x) do {                                   \
        unsigned char mask;                                             \
        spin_lock_irq(&lp->lock);                                       \
-       mask = SMC_GET_INT_MASK();                                      \
+       mask = SMC_GET_INT_MASK(lp);                                    \
        mask &= ~(x);                                                   \
-       SMC_SET_INT_MASK(mask);                                         \
+       SMC_SET_INT_MASK(lp, mask);                                     \
        spin_unlock_irq(&lp->lock);                                     \
  } while (0)
  
   * if at all, but let's avoid deadlocking the system if the hardware
   * decides to go south.
   */
- #define SMC_WAIT_MMU_BUSY() do {                                      \
-       if (unlikely(SMC_GET_MMU_CMD() & MC_BUSY)) {                    \
+ #define SMC_WAIT_MMU_BUSY(lp) do {                                    \
+       if (unlikely(SMC_GET_MMU_CMD(lp) & MC_BUSY)) {          \
                unsigned long timeout = jiffies + 2;                    \
-               while (SMC_GET_MMU_CMD() & MC_BUSY) {                   \
+               while (SMC_GET_MMU_CMD(lp) & MC_BUSY) {         \
                        if (time_after(jiffies, timeout)) {             \
                                printk("%s: timeout %s line %d\n",      \
                                        dev->name, __FILE__, __LINE__); \
@@@ -273,8 -273,8 +273,8 @@@ static void smc_reset(struct net_devic
  
        /* Disable all interrupts, block TX tasklet */
        spin_lock_irq(&lp->lock);
-       SMC_SELECT_BANK(2);
-       SMC_SET_INT_MASK(0);
+       SMC_SELECT_BANK(lp, 2);
+       SMC_SET_INT_MASK(lp, 0);
        pending_skb = lp->pending_tx_skb;
        lp->pending_tx_skb = NULL;
        spin_unlock_irq(&lp->lock);
         * This resets the registers mostly to defaults, but doesn't
         * affect EEPROM.  That seems unnecessary
         */
-       SMC_SELECT_BANK(0);
-       SMC_SET_RCR(RCR_SOFTRST);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_RCR(lp, RCR_SOFTRST);
  
        /*
         * Setup the Configuration Register
         * This is necessary because the CONFIG_REG is not affected
         * by a soft reset
         */
-       SMC_SELECT_BANK(1);
+       SMC_SELECT_BANK(lp, 1);
  
        cfg = CONFIG_DEFAULT;
  
         */
        cfg |= CONFIG_EPH_POWER_EN;
  
-       SMC_SET_CONFIG(cfg);
+       SMC_SET_CONFIG(lp, cfg);
  
        /* this should pause enough for the chip to be happy */
        /*
        udelay(1);
  
        /* Disable transmit and receive functionality */
-       SMC_SELECT_BANK(0);
-       SMC_SET_RCR(RCR_CLEAR);
-       SMC_SET_TCR(TCR_CLEAR);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_RCR(lp, RCR_CLEAR);
+       SMC_SET_TCR(lp, TCR_CLEAR);
  
-       SMC_SELECT_BANK(1);
-       ctl = SMC_GET_CTL() | CTL_LE_ENABLE;
+       SMC_SELECT_BANK(lp, 1);
+       ctl = SMC_GET_CTL(lp) | CTL_LE_ENABLE;
  
        /*
         * Set the control register to automatically release successfully
                ctl |= CTL_AUTO_RELEASE;
        else
                ctl &= ~CTL_AUTO_RELEASE;
-       SMC_SET_CTL(ctl);
+       SMC_SET_CTL(lp, ctl);
  
        /* Reset the MMU */
-       SMC_SELECT_BANK(2);
-       SMC_SET_MMU_CMD(MC_RESET);
-       SMC_WAIT_MMU_BUSY();
+       SMC_SELECT_BANK(lp, 2);
+       SMC_SET_MMU_CMD(lp, MC_RESET);
+       SMC_WAIT_MMU_BUSY(lp);
  }
  
  /*
@@@ -365,19 -365,19 +365,19 @@@ static void smc_enable(struct net_devic
        DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
  
        /* see the header file for options in TCR/RCR DEFAULT */
-       SMC_SELECT_BANK(0);
-       SMC_SET_TCR(lp->tcr_cur_mode);
-       SMC_SET_RCR(lp->rcr_cur_mode);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_TCR(lp, lp->tcr_cur_mode);
+       SMC_SET_RCR(lp, lp->rcr_cur_mode);
  
-       SMC_SELECT_BANK(1);
-       SMC_SET_MAC_ADDR(dev->dev_addr);
+       SMC_SELECT_BANK(lp, 1);
+       SMC_SET_MAC_ADDR(lp, dev->dev_addr);
  
        /* now, enable interrupts */
        mask = IM_EPH_INT|IM_RX_OVRN_INT|IM_RCV_INT;
        if (lp->version >= (CHIP_91100 << 4))
                mask |= IM_MDINT;
-       SMC_SELECT_BANK(2);
-       SMC_SET_INT_MASK(mask);
+       SMC_SELECT_BANK(lp, 2);
+       SMC_SET_INT_MASK(lp, mask);
  
        /*
         * From this point the register bank must _NOT_ be switched away
@@@ -400,8 -400,8 +400,8 @@@ static void smc_shutdown(struct net_dev
  
        /* no more interrupts for me */
        spin_lock_irq(&lp->lock);
-       SMC_SELECT_BANK(2);
-       SMC_SET_INT_MASK(0);
+       SMC_SELECT_BANK(lp, 2);
+       SMC_SET_INT_MASK(lp, 0);
        pending_skb = lp->pending_tx_skb;
        lp->pending_tx_skb = NULL;
        spin_unlock_irq(&lp->lock);
                dev_kfree_skb(pending_skb);
  
        /* and tell the card to stay away from that nasty outside world */
-       SMC_SELECT_BANK(0);
-       SMC_SET_RCR(RCR_CLEAR);
-       SMC_SET_TCR(TCR_CLEAR);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_RCR(lp, RCR_CLEAR);
+       SMC_SET_TCR(lp, TCR_CLEAR);
  
  #ifdef POWER_DOWN
        /* finally, shut the chip down */
-       SMC_SELECT_BANK(1);
-       SMC_SET_CONFIG(SMC_GET_CONFIG() & ~CONFIG_EPH_POWER_EN);
+       SMC_SELECT_BANK(lp, 1);
+       SMC_SET_CONFIG(lp, SMC_GET_CONFIG(lp) & ~CONFIG_EPH_POWER_EN);
  #endif
  }
  
@@@ -431,27 -431,22 +431,27 @@@ static inline void  smc_rcv(struct net_
  
        DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
  
-       packet_number = SMC_GET_RXFIFO();
+       packet_number = SMC_GET_RXFIFO(lp);
        if (unlikely(packet_number & RXFIFO_REMPTY)) {
                PRINTK("%s: smc_rcv with nothing on FIFO.\n", dev->name);
                return;
        }
  
        /* read from start of packet */
-       SMC_SET_PTR(PTR_READ | PTR_RCV | PTR_AUTOINC);
+       SMC_SET_PTR(lp, PTR_READ | PTR_RCV | PTR_AUTOINC);
  
        /* First two words are status and packet length */
-       SMC_GET_PKT_HDR(status, packet_len);
+       SMC_GET_PKT_HDR(lp, status, packet_len);
        packet_len &= 0x07ff;  /* mask off top bits */
        DBG(2, "%s: RX PNR 0x%x STATUS 0x%04x LENGTH 0x%04x (%d)\n",
                dev->name, packet_number, status,
                packet_len, packet_len);
  
 +      if (unlikely(packet_len == 0 && !(status & RS_ERRORS))) {
 +              printk(KERN_ERR "%s: bad memory timings: rxlen %u status %x\n",
 +                      dev->name, packet_len, status);
 +              status |= RS_TOOSHORT;
 +      }
        back:
        if (unlikely(packet_len < 6 || status & RS_ERRORS)) {
                if (status & RS_TOOLONG && packet_len <= (1514 + 4 + 6)) {
                                        dev->name, packet_len, status);
                        status |= RS_TOOSHORT;
                }
-               SMC_WAIT_MMU_BUSY();
-               SMC_SET_MMU_CMD(MC_RELEASE);
+               SMC_WAIT_MMU_BUSY(lp);
+               SMC_SET_MMU_CMD(lp, MC_RELEASE);
                dev->stats.rx_errors++;
                if (status & RS_ALGNERR)
                        dev->stats.rx_frame_errors++;
                if (unlikely(skb == NULL)) {
                        printk(KERN_NOTICE "%s: Low memory, packet dropped.\n",
                                dev->name);
-                       SMC_WAIT_MMU_BUSY();
-                       SMC_SET_MMU_CMD(MC_RELEASE);
+                       SMC_WAIT_MMU_BUSY(lp);
+                       SMC_SET_MMU_CMD(lp, MC_RELEASE);
                        dev->stats.rx_dropped++;
                        return;
                }
                 */
                data_len = packet_len - ((status & RS_ODDFRAME) ? 5 : 6);
                data = skb_put(skb, data_len);
-               SMC_PULL_DATA(data, packet_len - 4);
+               SMC_PULL_DATA(lp, data, packet_len - 4);
  
-               SMC_WAIT_MMU_BUSY();
-               SMC_SET_MMU_CMD(MC_RELEASE);
+               SMC_WAIT_MMU_BUSY(lp);
+               SMC_SET_MMU_CMD(lp, MC_RELEASE);
  
                PRINT_PKT(data, packet_len - 4);
  
@@@ -596,7 -591,7 +596,7 @@@ static void smc_hardware_send_pkt(unsig
        }
        lp->pending_tx_skb = NULL;
  
-       packet_no = SMC_GET_AR();
+       packet_no = SMC_GET_AR(lp);
        if (unlikely(packet_no & AR_FAILED)) {
                printk("%s: Memory allocation failed.\n", dev->name);
                dev->stats.tx_errors++;
        }
  
        /* point to the beginning of the packet */
-       SMC_SET_PN(packet_no);
-       SMC_SET_PTR(PTR_AUTOINC);
+       SMC_SET_PN(lp, packet_no);
+       SMC_SET_PTR(lp, PTR_AUTOINC);
  
        buf = skb->data;
        len = skb->len;
         * Send the packet length (+6 for status words, length, and ctl.
         * The card will pad to 64 bytes with zeroes if packet is too small.
         */
-       SMC_PUT_PKT_HDR(0, len + 6);
+       SMC_PUT_PKT_HDR(lp, 0, len + 6);
  
        /* send the actual data */
-       SMC_PUSH_DATA(buf, len & ~1);
+       SMC_PUSH_DATA(lp, buf, len & ~1);
  
        /* Send final ctl word with the last byte if there is one */
-       SMC_outw(((len & 1) ? (0x2000 | buf[len-1]) : 0), ioaddr, DATA_REG);
+       SMC_outw(((len & 1) ? (0x2000 | buf[len-1]) : 0), ioaddr, DATA_REG(lp));
  
        /*
         * If THROTTLE_TX_PKTS is set, we stop the queue here. This will
                netif_stop_queue(dev);
  
        /* queue the packet for TX */
-       SMC_SET_MMU_CMD(MC_ENQUEUE);
+       SMC_SET_MMU_CMD(lp, MC_ENQUEUE);
        smc_special_unlock(&lp->lock);
  
        dev->trans_start = jiffies;
        dev->stats.tx_packets++;
        dev->stats.tx_bytes += len;
  
-       SMC_ENABLE_INT(IM_TX_INT | IM_TX_EMPTY_INT);
+       SMC_ENABLE_INT(lp, IM_TX_INT | IM_TX_EMPTY_INT);
  
  done: if (!THROTTLE_TX_PKTS)
                netif_wake_queue(dev);
@@@ -693,7 -688,7 +693,7 @@@ static int smc_hard_start_xmit(struct s
        smc_special_lock(&lp->lock);
  
        /* now, try to allocate the memory */
-       SMC_SET_MMU_CMD(MC_ALLOC | numPages);
+       SMC_SET_MMU_CMD(lp, MC_ALLOC | numPages);
  
        /*
         * Poll the chip for a short amount of time in case the
         */
        poll_count = MEMORY_WAIT_TIME;
        do {
-               status = SMC_GET_INT();
+               status = SMC_GET_INT(lp);
                if (status & IM_ALLOC_INT) {
-                       SMC_ACK_INT(IM_ALLOC_INT);
+                       SMC_ACK_INT(lp, IM_ALLOC_INT);
                        break;
                }
        } while (--poll_count);
                /* oh well, wait until the chip finds memory later */
                netif_stop_queue(dev);
                DBG(2, "%s: TX memory allocation deferred.\n", dev->name);
-               SMC_ENABLE_INT(IM_ALLOC_INT);
+               SMC_ENABLE_INT(lp, IM_ALLOC_INT);
        } else {
                /*
                 * Allocation succeeded: push packet to the chip's own memory
@@@ -741,19 -736,19 +741,19 @@@ static void smc_tx(struct net_device *d
        DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
  
        /* If the TX FIFO is empty then nothing to do */
-       packet_no = SMC_GET_TXFIFO();
+       packet_no = SMC_GET_TXFIFO(lp);
        if (unlikely(packet_no & TXFIFO_TEMPTY)) {
                PRINTK("%s: smc_tx with nothing on FIFO.\n", dev->name);
                return;
        }
  
        /* select packet to read from */
-       saved_packet = SMC_GET_PN();
-       SMC_SET_PN(packet_no);
+       saved_packet = SMC_GET_PN(lp);
+       SMC_SET_PN(lp, packet_no);
  
        /* read the first word (status word) from this packet */
-       SMC_SET_PTR(PTR_AUTOINC | PTR_READ);
-       SMC_GET_PKT_HDR(tx_status, pkt_len);
+       SMC_SET_PTR(lp, PTR_AUTOINC | PTR_READ);
+       SMC_GET_PKT_HDR(lp, tx_status, pkt_len);
        DBG(2, "%s: TX STATUS 0x%04x PNR 0x%02x\n",
                dev->name, tx_status, packet_no);
  
        }
  
        /* kill the packet */
-       SMC_WAIT_MMU_BUSY();
-       SMC_SET_MMU_CMD(MC_FREEPKT);
+       SMC_WAIT_MMU_BUSY(lp);
+       SMC_SET_MMU_CMD(lp, MC_FREEPKT);
  
        /* Don't restore Packet Number Reg until busy bit is cleared */
-       SMC_WAIT_MMU_BUSY();
-       SMC_SET_PN(saved_packet);
+       SMC_WAIT_MMU_BUSY(lp);
+       SMC_SET_PN(lp, saved_packet);
  
        /* re-enable transmit */
-       SMC_SELECT_BANK(0);
-       SMC_SET_TCR(lp->tcr_cur_mode);
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_TCR(lp, lp->tcr_cur_mode);
+       SMC_SELECT_BANK(lp, 2);
  }
  
  
@@@ -798,7 -793,7 +798,7 @@@ static void smc_mii_out(struct net_devi
        void __iomem *ioaddr = lp->base;
        unsigned int mii_reg, mask;
  
-       mii_reg = SMC_GET_MII() & ~(MII_MCLK | MII_MDOE | MII_MDO);
+       mii_reg = SMC_GET_MII(lp) & ~(MII_MCLK | MII_MDOE | MII_MDO);
        mii_reg |= MII_MDOE;
  
        for (mask = 1 << (bits - 1); mask; mask >>= 1) {
                else
                        mii_reg &= ~MII_MDO;
  
-               SMC_SET_MII(mii_reg);
+               SMC_SET_MII(lp, mii_reg);
                udelay(MII_DELAY);
-               SMC_SET_MII(mii_reg | MII_MCLK);
+               SMC_SET_MII(lp, mii_reg | MII_MCLK);
                udelay(MII_DELAY);
        }
  }
@@@ -820,16 -815,16 +820,16 @@@ static unsigned int smc_mii_in(struct n
        void __iomem *ioaddr = lp->base;
        unsigned int mii_reg, mask, val;
  
-       mii_reg = SMC_GET_MII() & ~(MII_MCLK | MII_MDOE | MII_MDO);
-       SMC_SET_MII(mii_reg);
+       mii_reg = SMC_GET_MII(lp) & ~(MII_MCLK | MII_MDOE | MII_MDO);
+       SMC_SET_MII(lp, mii_reg);
  
        for (mask = 1 << (bits - 1), val = 0; mask; mask >>= 1) {
-               if (SMC_GET_MII() & MII_MDI)
+               if (SMC_GET_MII(lp) & MII_MDI)
                        val |= mask;
  
-               SMC_SET_MII(mii_reg);
+               SMC_SET_MII(lp, mii_reg);
                udelay(MII_DELAY);
-               SMC_SET_MII(mii_reg | MII_MCLK);
+               SMC_SET_MII(lp, mii_reg | MII_MCLK);
                udelay(MII_DELAY);
        }
  
@@@ -845,7 -840,7 +845,7 @@@ static int smc_phy_read(struct net_devi
        void __iomem *ioaddr = lp->base;
        unsigned int phydata;
  
-       SMC_SELECT_BANK(3);
+       SMC_SELECT_BANK(lp, 3);
  
        /* Idle - 32 ones */
        smc_mii_out(dev, 0xffffffff, 32);
        phydata = smc_mii_in(dev, 18);
  
        /* Return to idle state */
-       SMC_SET_MII(SMC_GET_MII() & ~(MII_MCLK|MII_MDOE|MII_MDO));
+       SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO));
  
        DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
                __FUNCTION__, phyaddr, phyreg, phydata);
  
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 2);
        return phydata;
  }
  
@@@ -875,7 -870,7 +875,7 @@@ static void smc_phy_write(struct net_de
        struct smc_local *lp = netdev_priv(dev);
        void __iomem *ioaddr = lp->base;
  
-       SMC_SELECT_BANK(3);
+       SMC_SELECT_BANK(lp, 3);
  
        /* Idle - 32 ones */
        smc_mii_out(dev, 0xffffffff, 32);
        smc_mii_out(dev, 5 << 28 | phyaddr << 23 | phyreg << 18 | 2 << 16 | phydata, 32);
  
        /* Return to idle state */
-       SMC_SET_MII(SMC_GET_MII() & ~(MII_MCLK|MII_MDOE|MII_MDO));
+       SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO));
  
        DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
                __FUNCTION__, phyaddr, phyreg, phydata);
  
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 2);
  }
  
  /*
@@@ -962,9 -957,9 +962,9 @@@ static int smc_phy_fixed(struct net_dev
        smc_phy_write(dev, phyaddr, MII_BMCR, bmcr);
  
        /* Re-Configure the Receive/Phy Control register */
-       SMC_SELECT_BANK(0);
-       SMC_SET_RPC(lp->rpc_cur_mode);
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_RPC(lp, lp->rpc_cur_mode);
+       SMC_SELECT_BANK(lp, 2);
  
        return 1;
  }
@@@ -1055,8 -1050,8 +1055,8 @@@ static void smc_phy_check_media(struct 
                        lp->tcr_cur_mode &= ~TCR_SWFDUP;
                }
  
-               SMC_SELECT_BANK(0);
-               SMC_SET_TCR(lp->tcr_cur_mode);
+               SMC_SELECT_BANK(lp, 0);
+               SMC_SET_TCR(lp, lp->tcr_cur_mode);
        }
  }
  
@@@ -1105,8 -1100,8 +1105,8 @@@ static void smc_phy_configure(struct wo
                PHY_INT_SPDDET | PHY_INT_DPLXDET);
  
        /* Configure the Receive/Phy Control register */
-       SMC_SELECT_BANK(0);
-       SMC_SET_RPC(lp->rpc_cur_mode);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_RPC(lp, lp->rpc_cur_mode);
  
        /* If the user requested no auto neg, then go set his request */
        if (lp->mii.force_media) {
        smc_phy_check_media(dev, 1);
  
  smc_phy_configure_exit:
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 2);
        spin_unlock_irq(&lp->lock);
        lp->work_pending = 0;
  }
@@@ -1205,9 -1200,9 +1205,9 @@@ static void smc_10bt_check_media(struc
  
        old_carrier = netif_carrier_ok(dev) ? 1 : 0;
  
-       SMC_SELECT_BANK(0);
-       new_carrier = (SMC_GET_EPH_STATUS() & ES_LINK_OK) ? 1 : 0;
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 0);
+       new_carrier = (SMC_GET_EPH_STATUS(lp) & ES_LINK_OK) ? 1 : 0;
+       SMC_SELECT_BANK(lp, 2);
  
        if (init || (old_carrier != new_carrier)) {
                if (!new_carrier) {
@@@ -1229,11 -1224,11 +1229,11 @@@ static void smc_eph_interrupt(struct ne
  
        smc_10bt_check_media(dev, 0);
  
-       SMC_SELECT_BANK(1);
-       ctl = SMC_GET_CTL();
-       SMC_SET_CTL(ctl & ~CTL_LE_ENABLE);
-       SMC_SET_CTL(ctl);
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 1);
+       ctl = SMC_GET_CTL(lp);
+       SMC_SET_CTL(lp, ctl & ~CTL_LE_ENABLE);
+       SMC_SET_CTL(lp, ctl);
+       SMC_SELECT_BANK(lp, 2);
  }
  
  /*
@@@ -1257,22 -1252,22 +1257,22 @@@ static irqreturn_t smc_interrupt(int ir
         * ISR. */
        SMC_INTERRUPT_PREAMBLE;
  
-       saved_pointer = SMC_GET_PTR();
-       mask = SMC_GET_INT_MASK();
-       SMC_SET_INT_MASK(0);
+       saved_pointer = SMC_GET_PTR(lp);
+       mask = SMC_GET_INT_MASK(lp);
+       SMC_SET_INT_MASK(lp, 0);
  
        /* set a timeout value, so I don't stay here forever */
        timeout = MAX_IRQ_LOOPS;
  
        do {
-               status = SMC_GET_INT();
+               status = SMC_GET_INT(lp);
  
                DBG(2, "%s: INT 0x%02x MASK 0x%02x MEM 0x%04x FIFO 0x%04x\n",
                        dev->name, status, mask,
-                       ({ int meminfo; SMC_SELECT_BANK(0);
-                          meminfo = SMC_GET_MIR();
-                          SMC_SELECT_BANK(2); meminfo; }),
-                       SMC_GET_FIFO());
+                       ({ int meminfo; SMC_SELECT_BANK(lp, 0);
+                          meminfo = SMC_GET_MIR(lp);
+                          SMC_SELECT_BANK(lp, 2); meminfo; }),
+                       SMC_GET_FIFO(lp));
  
                status &= mask;
                if (!status)
                        /* do this before RX as it will free memory quickly */
                        DBG(3, "%s: TX int\n", dev->name);
                        smc_tx(dev);
-                       SMC_ACK_INT(IM_TX_INT);
+                       SMC_ACK_INT(lp, IM_TX_INT);
                        if (THROTTLE_TX_PKTS)
                                netif_wake_queue(dev);
                } else if (status & IM_RCV_INT) {
                        mask &= ~IM_TX_EMPTY_INT;
  
                        /* update stats */
-                       SMC_SELECT_BANK(0);
-                       card_stats = SMC_GET_COUNTER();
-                       SMC_SELECT_BANK(2);
+                       SMC_SELECT_BANK(lp, 0);
+                       card_stats = SMC_GET_COUNTER(lp);
+                       SMC_SELECT_BANK(lp, 2);
  
                        /* single collisions */
                        dev->stats.collisions += card_stats & 0xF;
                        dev->stats.collisions += card_stats & 0xF;
                } else if (status & IM_RX_OVRN_INT) {
                        DBG(1, "%s: RX overrun (EPH_ST 0x%04x)\n", dev->name,
-                              ({ int eph_st; SMC_SELECT_BANK(0);
-                                 eph_st = SMC_GET_EPH_STATUS();
-                                 SMC_SELECT_BANK(2); eph_st; }) );
-                       SMC_ACK_INT(IM_RX_OVRN_INT);
+                              ({ int eph_st; SMC_SELECT_BANK(lp, 0);
+                                 eph_st = SMC_GET_EPH_STATUS(lp);
+                                 SMC_SELECT_BANK(lp, 2); eph_st; }));
+                       SMC_ACK_INT(lp, IM_RX_OVRN_INT);
                        dev->stats.rx_errors++;
                        dev->stats.rx_fifo_errors++;
                } else if (status & IM_EPH_INT) {
                        smc_eph_interrupt(dev);
                } else if (status & IM_MDINT) {
-                       SMC_ACK_INT(IM_MDINT);
+                       SMC_ACK_INT(lp, IM_MDINT);
                        smc_phy_interrupt(dev);
                } else if (status & IM_ERCV_INT) {
-                       SMC_ACK_INT(IM_ERCV_INT);
+                       SMC_ACK_INT(lp, IM_ERCV_INT);
                        PRINTK("%s: UNSUPPORTED: ERCV INTERRUPT \n", dev->name);
                }
        } while (--timeout);
  
        /* restore register states */
-       SMC_SET_PTR(saved_pointer);
-       SMC_SET_INT_MASK(mask);
+       SMC_SET_PTR(lp, saved_pointer);
+       SMC_SET_INT_MASK(lp, mask);
        spin_unlock(&lp->lock);
  
  #ifndef CONFIG_NET_POLL_CONTROLLER
@@@ -1373,13 -1368,13 +1373,13 @@@ static void smc_timeout(struct net_devi
        DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
  
        spin_lock_irq(&lp->lock);
-       status = SMC_GET_INT();
-       mask = SMC_GET_INT_MASK();
-       fifo = SMC_GET_FIFO();
-       SMC_SELECT_BANK(0);
-       eph_st = SMC_GET_EPH_STATUS();
-       meminfo = SMC_GET_MIR();
-       SMC_SELECT_BANK(2);
+       status = SMC_GET_INT(lp);
+       mask = SMC_GET_INT_MASK(lp);
+       fifo = SMC_GET_FIFO(lp);
+       SMC_SELECT_BANK(lp, 0);
+       eph_st = SMC_GET_EPH_STATUS(lp);
+       meminfo = SMC_GET_MIR(lp);
+       SMC_SELECT_BANK(lp, 2);
        spin_unlock_irq(&lp->lock);
        PRINTK( "%s: TX timeout (INT 0x%02x INTMASK 0x%02x "
                "MEM 0x%04x FIFO 0x%04x EPH_ST 0x%04x)\n",
@@@ -1499,13 -1494,13 +1499,13 @@@ static void smc_set_multicast_list(stru
        }
  
        spin_lock_irq(&lp->lock);
-       SMC_SELECT_BANK(0);
-       SMC_SET_RCR(lp->rcr_cur_mode);
+       SMC_SELECT_BANK(lp, 0);
+       SMC_SET_RCR(lp, lp->rcr_cur_mode);
        if (update_multicast) {
-               SMC_SELECT_BANK(3);
-               SMC_SET_MCAST(multicast_table);
+               SMC_SELECT_BANK(lp, 3);
+               SMC_SET_MCAST(lp, multicast_table);
        }
-       SMC_SELECT_BANK(2);
+       SMC_SELECT_BANK(lp, 2);
        spin_unlock_irq(&lp->lock);
  }
  
@@@ -1709,8 -1704,9 +1709,9 @@@ static const struct ethtool_ops smc_eth
   * I just deleted auto_irq.c, since it was never built...
   *   --jgarzik
   */
- static int __init smc_findirq(void __iomem *ioaddr)
+ static int __init smc_findirq(struct smc_local *lp)
  {
+       void __iomem *ioaddr = lp->base;
        int timeout = 20;
        unsigned long cookie;
  
         * when done.
         */
        /* enable ALLOCation interrupts ONLY */
-       SMC_SELECT_BANK(2);
-       SMC_SET_INT_MASK(IM_ALLOC_INT);
+       SMC_SELECT_BANK(lp, 2);
+       SMC_SET_INT_MASK(lp, IM_ALLOC_INT);
  
        /*
         * Allocate 512 bytes of memory.  Note that the chip was just
         * reset so all the memory is available
         */
-       SMC_SET_MMU_CMD(MC_ALLOC | 1);
+       SMC_SET_MMU_CMD(lp, MC_ALLOC | 1);
  
        /*
         * Wait until positive that the interrupt has been generated
        do {
                int int_status;
                udelay(10);
-               int_status = SMC_GET_INT();
+               int_status = SMC_GET_INT(lp);
                if (int_status & IM_ALLOC_INT)
                        break;          /* got the interrupt */
        } while (--timeout);
         */
  
        /* and disable all interrupts again */
-       SMC_SET_INT_MASK(0);
+       SMC_SET_INT_MASK(lp, 0);
  
        /* and return what I found */
        return probe_irq_off(cookie);
@@@ -1795,7 -1791,7 +1796,7 @@@ static int __init smc_probe(struct net_
        DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__);
  
        /* First, see if the high byte is 0x33 */
-       val = SMC_CURRENT_BANK();
+       val = SMC_CURRENT_BANK(lp);
        DBG(2, "%s: bank signature probe returned 0x%04x\n", CARDNAME, val);
        if ((val & 0xFF00) != 0x3300) {
                if ((val & 0xFF) == 0x33) {
         * The above MIGHT indicate a device, but I need to write to
         * further test this.
         */
-       SMC_SELECT_BANK(0);
-       val = SMC_CURRENT_BANK();
+       SMC_SELECT_BANK(lp, 0);
+       val = SMC_CURRENT_BANK(lp);
        if ((val & 0xFF00) != 0x3300) {
                retval = -ENODEV;
                goto err_out;
         * register to bank 1, so I can access the base address
         * register
         */
-       SMC_SELECT_BANK(1);
-       val = SMC_GET_BASE();
+       SMC_SELECT_BANK(lp, 1);
+       val = SMC_GET_BASE(lp);
        val = ((val & 0x1F00) >> 3) << SMC_IO_SHIFT;
        if (((unsigned int)ioaddr & (0x3e0 << SMC_IO_SHIFT)) != val) {
                printk("%s: IOADDR %p doesn't match configuration (%x).\n",
         * recognize.  These might need to be added to later,
         * as future revisions could be added.
         */
-       SMC_SELECT_BANK(3);
-       revision_register = SMC_GET_REV();
+       SMC_SELECT_BANK(lp, 3);
+       revision_register = SMC_GET_REV(lp);
        DBG(2, "%s: revision = 0x%04x\n", CARDNAME, revision_register);
        version_string = chip_ids[ (revision_register >> 4) & 0xF];
        if (!version_string || (revision_register & 0xff00) != 0x3300) {
        spin_lock_init(&lp->lock);
  
        /* Get the MAC address */
-       SMC_SELECT_BANK(1);
-       SMC_GET_MAC_ADDR(dev->dev_addr);
+       SMC_SELECT_BANK(lp, 1);
+       SMC_GET_MAC_ADDR(lp, dev->dev_addr);
  
        /* now, reset the chip, and put it into a known state */
        smc_reset(dev);
  
                trials = 3;
                while (trials--) {
-                       dev->irq = smc_findirq(ioaddr);
+                       dev->irq = smc_findirq(lp);
                        if (dev->irq)
                                break;
                        /* kick the card and try again */
@@@ -2003,6 -1999,8 +2004,8 @@@ err_out
  
  static int smc_enable_device(struct platform_device *pdev)
  {
+       struct net_device *ndev = platform_get_drvdata(pdev);
+       struct smc_local *lp = netdev_priv(ndev);
        unsigned long flags;
        unsigned char ecor, ecsr;
        void __iomem *addr;
         * Set the appropriate byte/word mode.
         */
        ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8;
-       if (!SMC_CAN_USE_16BIT)
+       if (!SMC_16BIT(lp))
                ecsr |= ECSR_IOIS8;
        writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT));
        local_irq_restore(flags);
@@@ -2130,10 -2128,11 +2133,11 @@@ static void smc_release_datacs(struct p
   */
  static int smc_drv_probe(struct platform_device *pdev)
  {
+       struct smc91x_platdata *pd = pdev->dev.platform_data;
+       struct smc_local *lp;
        struct net_device *ndev;
        struct resource *res, *ires;
        unsigned int __iomem *addr;
-       unsigned long irq_flags = SMC_IRQ_FLAGS;
        int ret;
  
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs");
        }
        SET_NETDEV_DEV(ndev, &pdev->dev);
  
+       /* get configuration from platform data, only allow use of
+        * bus width if both SMC_CAN_USE_xxx and SMC91X_USE_xxx are set.
+        */
+       lp = netdev_priv(ndev);
+       lp->cfg.irq_flags = SMC_IRQ_FLAGS;
+ #ifdef SMC_DYNAMIC_BUS_CONFIG
+       if (pd)
+               memcpy(&lp->cfg, pd, sizeof(lp->cfg));
+       else {
+               lp->cfg.flags = SMC91X_USE_8BIT;
+               lp->cfg.flags |= SMC91X_USE_16BIT;
+               lp->cfg.flags |= SMC91X_USE_32BIT;
+       }
+       lp->cfg.flags &= ~(SMC_CAN_USE_8BIT ? 0 : SMC91X_USE_8BIT);
+       lp->cfg.flags &= ~(SMC_CAN_USE_16BIT ? 0 : SMC91X_USE_16BIT);
+       lp->cfg.flags &= ~(SMC_CAN_USE_32BIT ? 0 : SMC91X_USE_32BIT);
+ #endif
        ndev->dma = (unsigned char)-1;
  
        ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
  
        ndev->irq = ires->start;
        if (SMC_IRQ_FLAGS == -1)
-               irq_flags = ires->flags & IRQF_TRIGGER_MASK;
+               lp->cfg.irq_flags = ires->flags & IRQF_TRIGGER_MASK;
  
        ret = smc_request_attrib(pdev);
        if (ret)
  #if defined(CONFIG_SA1100_ASSABET)
        NCR_0 |= NCR_ENET_OSC_EN;
  #endif
+       platform_set_drvdata(pdev, ndev);
        ret = smc_enable_device(pdev);
        if (ret)
                goto out_release_attrib;
        }
  #endif
  
-       platform_set_drvdata(pdev, ndev);
-       ret = smc_probe(ndev, addr, irq_flags);
+       ret = smc_probe(ndev, addr, lp->cfg.irq_flags);
        if (ret != 0)
                goto out_iounmap;
  
diff --combined drivers/serial/8250.c
index 74aa45e21d4f305942cfa992f889859821b1c92b,96a585e1cee8226a449d3e0174c98bf9a1b6ff77..39db36f323cc72386b4e34cf6f6613f2ec42ef70
@@@ -1505,11 -1505,7 +1505,11 @@@ static irqreturn_t serial8250_interrupt
  
        DEBUG_INTR("end.\n");
  
 +#ifdef CONFIG_ARCH_OMAP15XX
 +      return IRQ_HANDLED;     /* FIXME: iir status not ready on 1510 */
 +#else
        return IRQ_RETVAL(handled);
 +#endif
  }
  
  /*
@@@ -1744,6 -1740,60 +1744,60 @@@ static inline void wait_for_xmitr(struc
        }
  }
  
+ #ifdef CONFIG_CONSOLE_POLL
+ /*
+  * Console polling routines for writing and reading from the uart while
+  * in an interrupt or debug context.
+  */
+ static int serial8250_get_poll_char(struct uart_port *port)
+ {
+       struct uart_8250_port *up = (struct uart_8250_port *)port;
+       unsigned char lsr = serial_inp(up, UART_LSR);
+       while (!(lsr & UART_LSR_DR))
+               lsr = serial_inp(up, UART_LSR);
+       return serial_inp(up, UART_RX);
+ }
+ static void serial8250_put_poll_char(struct uart_port *port,
+                        unsigned char c)
+ {
+       unsigned int ier;
+       struct uart_8250_port *up = (struct uart_8250_port *)port;
+       /*
+        *      First save the IER then disable the interrupts
+        */
+       ier = serial_in(up, UART_IER);
+       if (up->capabilities & UART_CAP_UUE)
+               serial_out(up, UART_IER, UART_IER_UUE);
+       else
+               serial_out(up, UART_IER, 0);
+       wait_for_xmitr(up, BOTH_EMPTY);
+       /*
+        *      Send the character out.
+        *      If a LF, also do CR...
+        */
+       serial_out(up, UART_TX, c);
+       if (c == 10) {
+               wait_for_xmitr(up, BOTH_EMPTY);
+               serial_out(up, UART_TX, 13);
+       }
+       /*
+        *      Finally, wait for transmitter to become empty
+        *      and restore the IER
+        */
+       wait_for_xmitr(up, BOTH_EMPTY);
+       serial_out(up, UART_IER, ier);
+ }
+ #endif /* CONFIG_CONSOLE_POLL */
  static int serial8250_startup(struct uart_port *port)
  {
        struct uart_8250_port *up = (struct uart_8250_port *)port;
@@@ -2174,19 -2224,6 +2228,19 @@@ serial8250_set_termios(struct uart_por
                        /* emulated UARTs (Lucent Venus 167x) need two steps */
                        serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
                }
 +
 +              /* Note that we need to set ECB to access write water mark
 +               * bits. First allow FCR tx fifo write, then set fcr with
 +               * possible TX fifo settings. */
 +              if (uart_config[up->port.type].flags & UART_CAP_EFR) {
 +                      serial_outp(up, UART_LCR, 0xbf);        /* Access EFR */
 +                      serial_outp(up, UART_EFR, UART_EFR_ECB);
 +                      serial_outp(up, UART_LCR, 0x0);         /* Access FCR */
 +                      serial_outp(up, UART_FCR, fcr);
 +                      serial_outp(up, UART_LCR, 0xbf);        /* Access EFR */
 +                      serial_outp(up, UART_EFR, 0);
 +                      serial_outp(up, UART_LCR, cval);        /* Access FCR */
 +        } else
                serial_outp(up, UART_FCR, fcr);         /* set fcr */
        }
        serial8250_set_mctrl(&up->port, up->port.mctrl);
@@@ -2214,11 -2251,6 +2268,11 @@@ static int serial8250_request_std_resou
        unsigned int size = 8 << up->port.regshift;
        int ret = 0;
  
 +#ifdef CONFIG_ARCH_OMAP
 +      if (is_omap_port((unsigned int)up->port.membase))
 +              size = 0x16 << up->port.regshift;
 +#endif
 +
        switch (up->port.iotype) {
        case UPIO_AU:
                size = 0x100000;
@@@ -2408,6 -2440,10 +2462,10 @@@ static struct uart_ops serial8250_pops 
        .request_port   = serial8250_request_port,
        .config_port    = serial8250_config_port,
        .verify_port    = serial8250_verify_port,
+ #ifdef CONFIG_CONSOLE_POLL
+       .poll_get_char = serial8250_get_poll_char,
+       .poll_put_char = serial8250_put_poll_char,
+ #endif
  };
  
  static struct uart_8250_port serial8250_ports[UART_NR];
index b5911799ef35c1c21816f6c59be9c262dc87ee82,d681bb27fa5815a10cd49cfda60812e7f1cd2bd8..0dfe0c7753cdc863c3b245cccdb3925e02954d19
@@@ -118,10 -118,10 +118,10 @@@ config USB_AMD5536UD
  config USB_GADGET_ATMEL_USBA
        boolean "Atmel USBA"
        select USB_GADGET_DUALSPEED
-       depends on AVR32
+       depends on AVR32 || ARCH_AT91CAP9
        help
          USBA is the integrated high-speed USB Device controller on
-         the AT32AP700x processors from Atmel.
+         the AT32AP700x and AT91CAP9 processors from Atmel.
  
  config USB_ATMEL_USBA
        tristate
@@@ -264,20 -264,10 +264,20 @@@ config USB_LH7A40
        default USB_GADGET
        select USB_GADGET_SELECTED
  
 +# built in ../musb along with host support
 +config USB_GADGET_MUSB_HDRC
 +      boolean "Inventra HDRC USB Peripheral (TI, ...)"
 +      depends on USB_MUSB_HDRC && (USB_MUSB_PERIPHERAL || USB_MUSB_OTG)
 +      select USB_GADGET_DUALSPEED
 +      select USB_GADGET_SELECTED
 +      help
 +        This OTG-capable silicon IP is used in dual designs including
 +        the TI DaVinci, OMAP 243x, OMAP 343x, and TUSB 6010.
 +
  config USB_GADGET_OMAP
        boolean "OMAP USB Device Controller"
        depends on ARCH_OMAP
 -      select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
 +      select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4_OTG
        help
           Many Texas Instruments OMAP processors have flexible full
           speed USB device controllers, with support for up to 30
index 7a81caa021289e5536f831c4774c26272f1a8da4,85074cb36f38001ac5d4faa8543c8e8bf7eda175..83547e28da391a288361ca4b759d92100c35ebba
@@@ -1018,11 -1018,6 +1018,11 @@@ MODULE_LICENSE ("GPL")
  #define       PLATFORM_DRIVER         ehci_hcd_au1xxx_driver
  #endif
  
 +#ifdef CONFIG_ARCH_OMAP34XX
 +#include "ehci-omap.c"
 +#define       PLATFORM_DRIVER         ehci_hcd_omap_driver
 +#endif
 +
  #ifdef CONFIG_PPC_PS3
  #include "ehci-ps3.c"
  #define       PS3_SYSTEM_BUS_DRIVER   ps3_ehci_driver
  #define OF_PLATFORM_DRIVER    ehci_hcd_ppc_of_driver
  #endif
  
- #ifdef CONFIG_ARCH_ORION
+ #ifdef CONFIG_PLAT_ORION
  #include "ehci-orion.c"
  #define       PLATFORM_DRIVER         ehci_orion_driver
  #endif
index 1146c8b2eb866cbacaaaca20ec4e3c72a988343e,3479de9266e5584ec6c404ea08786347d121e03c..53f0752b98786cc6ef39aa583f21d2a6cedafd23
@@@ -20,6 -20,10 +20,10 @@@ extern struct processor 
         * get data abort address/flags
         */
        void (*_data_abort)(unsigned long pc);
+       /*
+        * Retrieve prefetch fault address
+        */
+       unsigned long (*_prefetch_abort)(unsigned long lr);
        /*
         * Set up any processor specifics
         */
         * ignore 'ext'.
         */
        void (*set_pte_ext)(pte_t *ptep, pte_t pte, unsigned int ext);
 +      /*
 +       * Retrieve prefetch fault address.
 +       */
 +      unsigned long (*pabort_addr)(unsigned long lr);
  } processor;
  
  #define cpu_proc_init()                       processor._proc_init()
index a54a082fc96ad107542ff61103a8b730616ada78,2767841a8cefc19377a96506e2f2c4e1c2db7586..05952173b5723bc13595e2a3653540d6361da0ba
@@@ -216,19 -216,6 +216,19 @@@ config IP_NF_TARGET_NETMA
          address part intact. It is similar to Fast NAT, except that
          Netfilter's connection tracking doesn't work well with Fast NAT.
  
 +        To compile it as a module, choose M here.  If unsure, say N.
 +
 +config IP_NF_TARGET_IDLETIMER
 +      tristate  "IDLETIMER target support"
 +      depends on IP_NF_IPTABLES
 +      help
 +        This option adds a `IDLETIMER' target. Each matching packet resets
 +        the timer associated with input and/or output interfaces. Timer
 +        expiry causes kobject uevent. Idle timer can be read via sysfs.
 +
 +        To compile it as a module, choose M here.  If unsure, say N.
 +
 +
          To compile it as a module, choose M here.  If unsure, say N.
  
  config NF_NAT_SNMP_BASIC
  #           <expr> '&&' <expr>                   (6)
  #
  # (6) Returns the result of min(/expr/, /expr/).
+ config NF_NAT_PROTO_DCCP
+       tristate
+       depends on NF_NAT && NF_CT_PROTO_DCCP
+       default NF_NAT && NF_CT_PROTO_DCCP
  config NF_NAT_PROTO_GRE
        tristate
        depends on NF_NAT && NF_CT_PROTO_GRE
  
+ config NF_NAT_PROTO_UDPLITE
+       tristate
+       depends on NF_NAT && NF_CT_PROTO_UDPLITE
+       default NF_NAT && NF_CT_PROTO_UDPLITE
+ config NF_NAT_PROTO_SCTP
+       tristate
+       default NF_NAT && NF_CT_PROTO_SCTP
+       depends on NF_NAT && NF_CT_PROTO_SCTP
+       select LIBCRC32C
  config NF_NAT_FTP
        tristate
        depends on IP_NF_IPTABLES && NF_CONNTRACK && NF_NAT
index 584ed767095441b165eae1ebd8e5e95975eec5e6,d9b92fbf5579583918a7d5f01a1ea3ce0184b60a..c9cf744d5e86831ea43ee918397c1a912e005237
@@@ -10,7 -10,7 +10,7 @@@ nf_conntrack_ipv4-objs        += nf_conntrack_
  endif
  endif
  
- nf_nat-objs           := nf_nat_core.o nf_nat_helper.o nf_nat_proto_unknown.o nf_nat_proto_tcp.o nf_nat_proto_udp.o nf_nat_proto_icmp.o
+ nf_nat-objs           := nf_nat_core.o nf_nat_helper.o nf_nat_proto_unknown.o nf_nat_proto_common.o nf_nat_proto_tcp.o nf_nat_proto_udp.o nf_nat_proto_icmp.o
  iptable_nat-objs      := nf_nat_rule.o nf_nat_standalone.o
  
  # connection tracking
@@@ -29,7 -29,10 +29,10 @@@ obj-$(CONFIG_NF_NAT_SNMP_BASIC) += nf_n
  obj-$(CONFIG_NF_NAT_TFTP) += nf_nat_tftp.o
  
  # NAT protocols (nf_nat)
+ obj-$(CONFIG_NF_NAT_PROTO_DCCP) += nf_nat_proto_dccp.o
  obj-$(CONFIG_NF_NAT_PROTO_GRE) += nf_nat_proto_gre.o
+ obj-$(CONFIG_NF_NAT_PROTO_UDPLITE) += nf_nat_proto_udplite.o
+ obj-$(CONFIG_NF_NAT_PROTO_SCTP) += nf_nat_proto_sctp.o
  
  # generic IP tables 
  obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
@@@ -55,7 -58,6 +58,7 @@@ obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) +
  obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
  obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
  obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
 +obj-$(CONFIG_IP_NF_TARGET_IDLETIMER) += ipt_IDLETIMER.o
  obj-$(CONFIG_IP_NF_TARGET_TTL) += ipt_TTL.o
  obj-$(CONFIG_IP_NF_TARGET_ULOG) += ipt_ULOG.o
  
diff --combined security/Kconfig
index 3113d8f89736acb006b8ee0a4928d7fb8e22826e,49b51f964897dcb7133be9b58f1b936462bb6309..fb3425231927e6fdec4031a8162ae9e409f5d8b3
@@@ -104,14 -104,6 +104,14 @@@ config SECURITY_ROOTPLU
          
          If you are unsure how to answer this question, answer N.
  
 +config SECURITY_LOWMEM
 +      tristate "Low memory watermark support"
 +      depends on SECURITY
 +      help
 +        Implements low memory watermark support
 +
 +        If you are unsure how to answer this question, answer N.
 +
  config SECURITY_DEFAULT_MMAP_MIN_ADDR
          int "Low address space to protect from user allocation"
          depends on SECURITY
          from userspace allocation.  Keeping a user from writing to low pages
          can help reduce the impact of kernel NULL pointer bugs.
  
-         For most users with lots of address space a value of 65536 is
-         reasonable and should cause no problems.  Programs which use vm86
-         functionality would either need additional permissions from either
-         the LSM or the capabilities module or have this protection disabled.
+         For most ia64, ppc64 and x86 users with lots of address space
+         a value of 65536 is reasonable and should cause no problems.
+         On arm and other archs it should not be higher than 32768.
+         Programs which use vm86 functionality would either need additional
+         permissions from either the LSM or the capabilities module or have
+         this protection disabled.
  
          This value can be changed after boot using the
          /proc/sys/vm/mmap_min_addr tunable.