Browse Source

Merge branch 'perf/urgent' into perf/core

Merge reason: we need to queue up dependent patch

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ingo Molnar 14 năm trước cách đây
mục cha
commit
b00560f2d4
100 tập tin đã thay đổi với 318 bổ sung255 xóa
  1. 3 3
      Documentation/DocBook/drm.tmpl
  2. 0 0
      Documentation/devicetree/bindings/ata/fsl-sata.txt
  3. 0 0
      Documentation/devicetree/bindings/eeprom.txt
  4. 0 0
      Documentation/devicetree/bindings/gpio/8xxx_gpio.txt
  5. 0 0
      Documentation/devicetree/bindings/gpio/gpio.txt
  6. 0 0
      Documentation/devicetree/bindings/gpio/led.txt
  7. 0 0
      Documentation/devicetree/bindings/i2c/fsl-i2c.txt
  8. 0 0
      Documentation/devicetree/bindings/marvell.txt
  9. 0 0
      Documentation/devicetree/bindings/mmc/fsl-esdhc.txt
  10. 0 0
      Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt
  11. 0 0
      Documentation/devicetree/bindings/mtd/fsl-upm-nand.txt
  12. 0 0
      Documentation/devicetree/bindings/mtd/mtd-physmap.txt
  13. 0 0
      Documentation/devicetree/bindings/net/can/mpc5xxx-mscan.txt
  14. 0 0
      Documentation/devicetree/bindings/net/can/sja1000.txt
  15. 0 0
      Documentation/devicetree/bindings/net/fsl-tsec-phy.txt
  16. 0 0
      Documentation/devicetree/bindings/net/mdio-gpio.txt
  17. 0 0
      Documentation/devicetree/bindings/net/phy.txt
  18. 0 0
      Documentation/devicetree/bindings/pci/83xx-512x-pci.txt
  19. 0 0
      Documentation/devicetree/bindings/powerpc/4xx/cpm.txt
  20. 0 0
      Documentation/devicetree/bindings/powerpc/4xx/emac.txt
  21. 0 0
      Documentation/devicetree/bindings/powerpc/4xx/ndfc.txt
  22. 0 0
      Documentation/devicetree/bindings/powerpc/4xx/ppc440spe-adma.txt
  23. 0 0
      Documentation/devicetree/bindings/powerpc/4xx/reboot.txt
  24. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/board.txt
  25. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm.txt
  26. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/brg.txt
  27. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/i2c.txt
  28. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/pic.txt
  29. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/usb.txt
  30. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/gpio.txt
  31. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt
  32. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe.txt
  33. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/firmware.txt
  34. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/par_io.txt
  35. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/pincfg.txt
  36. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/ucc.txt
  37. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/usb.txt
  38. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/serial.txt
  39. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/diu.txt
  40. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/dma.txt
  41. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/ecm.txt
  42. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/gtm.txt
  43. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/guts.txt
  44. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/lbc.txt
  45. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/mcm.txt
  46. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/mcu-mpc8349emitx.txt
  47. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/mpc5121-psc.txt
  48. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/mpc5200.txt
  49. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/mpic.txt
  50. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt
  51. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/pmc.txt
  52. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/sec.txt
  53. 0 0
      Documentation/devicetree/bindings/powerpc/fsl/ssi.txt
  54. 0 0
      Documentation/devicetree/bindings/powerpc/nintendo/gamecube.txt
  55. 0 0
      Documentation/devicetree/bindings/powerpc/nintendo/wii.txt
  56. 0 0
      Documentation/devicetree/bindings/spi/fsl-spi.txt
  57. 0 0
      Documentation/devicetree/bindings/spi/spi-bus.txt
  58. 0 0
      Documentation/devicetree/bindings/usb/fsl-usb.txt
  59. 0 0
      Documentation/devicetree/bindings/usb/usb-ehci.txt
  60. 0 0
      Documentation/devicetree/bindings/xilinx.txt
  61. 54 111
      Documentation/devicetree/booting-without-of.txt
  62. 11 1
      MAINTAINERS
  63. 1 1
      Makefile
  64. 1 1
      arch/arm/Kconfig
  65. 26 12
      arch/arm/kernel/head.S
  66. 26 18
      arch/arm/kernel/hw_breakpoint.c
  67. 21 1
      arch/arm/kernel/module.c
  68. 1 1
      arch/arm/kernel/perf_event.c
  69. 1 1
      arch/arm/mach-pxa/colibri-evalboard.c
  70. 1 1
      arch/arm/mach-pxa/colibri-pxa300.c
  71. 1 1
      arch/arm/mach-pxa/include/mach/colibri.h
  72. 1 1
      arch/arm/mach-pxa/palm27x.c
  73. 2 2
      arch/arm/mach-pxa/pm.c
  74. 1 0
      arch/arm/mach-s5pv310/Kconfig
  75. 0 2
      arch/arm/mach-s5pv310/include/mach/map.h
  76. 4 1
      arch/arm/mach-s5pv310/include/mach/sysmmu.h
  77. 3 0
      arch/arm/mach-sa1100/collie.c
  78. 3 3
      arch/arm/mm/Kconfig
  79. 3 11
      arch/arm/oprofile/common.c
  80. 6 2
      arch/arm/plat-pxa/mfp.c
  81. 8 16
      arch/arm/plat-s5p/Kconfig
  82. 1 1
      arch/arm/plat-s5p/Makefile
  83. 0 23
      arch/arm/plat-s5p/include/plat/sysmmu.h
  84. 1 3
      arch/arm/plat-s5p/sysmmu.c
  85. 2 0
      arch/arm/plat-samsung/include/plat/pm.h
  86. 2 0
      arch/blackfin/include/asm/bfin_serial.h
  87. 1 3
      arch/m68k/include/asm/string.h
  88. 0 11
      arch/m68k/lib/string.c
  89. 6 0
      arch/m68knommu/kernel/vmlinux.lds.S
  90. 1 1
      arch/m68knommu/lib/Makefile
  91. 105 0
      arch/m68knommu/lib/memmove.c
  92. 3 1
      arch/m68knommu/platform/5249/intc2.c
  93. 0 1
      arch/m68knommu/platform/68328/entry.S
  94. 1 1
      arch/m68knommu/platform/68360/commproc.c
  95. 1 1
      arch/m68knommu/platform/68360/config.c
  96. 0 1
      arch/m68knommu/platform/68360/entry.S
  97. 2 2
      arch/m68knommu/platform/68360/ints.c
  98. 0 1
      arch/m68knommu/platform/coldfire/entry.S
  99. 1 1
      arch/microblaze/include/asm/irqflags.h
  100. 13 14
      arch/microblaze/include/asm/pgtable.h

+ 3 - 3
Documentation/DocBook/drm.tmpl

@@ -73,8 +73,8 @@
       services.
     </para>
     <para>
-      The core of every DRM driver is struct drm_device.  Drivers
-      will typically statically initialize a drm_device structure,
+      The core of every DRM driver is struct drm_driver.  Drivers
+      will typically statically initialize a drm_driver structure,
       then pass it to drm_init() at load time.
     </para>
 
@@ -84,7 +84,7 @@
     <title>Driver initialization</title>
     <para>
       Before calling the DRM initialization routines, the driver must
-      first create and fill out a struct drm_device structure.
+      first create and fill out a struct drm_driver structure.
     </para>
     <programlisting>
       static struct drm_driver driver = {

+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/sata.txt → Documentation/devicetree/bindings/ata/fsl-sata.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/eeprom.txt → Documentation/devicetree/bindings/eeprom.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/8xxx_gpio.txt → Documentation/devicetree/bindings/gpio/8xxx_gpio.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/gpio/gpio.txt → Documentation/devicetree/bindings/gpio/gpio.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/gpio/led.txt → Documentation/devicetree/bindings/gpio/led.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/i2c.txt → Documentation/devicetree/bindings/i2c/fsl-i2c.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/marvell.txt → Documentation/devicetree/bindings/marvell.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/esdhc.txt → Documentation/devicetree/bindings/mmc/fsl-esdhc.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/mmc-spi-slot.txt → Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/upm-nand.txt → Documentation/devicetree/bindings/mtd/fsl-upm-nand.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/mtd-physmap.txt → Documentation/devicetree/bindings/mtd/mtd-physmap.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/can.txt → Documentation/devicetree/bindings/net/can/mpc5xxx-mscan.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/can/sja1000.txt → Documentation/devicetree/bindings/net/can/sja1000.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/tsec.txt → Documentation/devicetree/bindings/net/fsl-tsec-phy.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/gpio/mdio.txt → Documentation/devicetree/bindings/net/mdio-gpio.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/phy.txt → Documentation/devicetree/bindings/net/phy.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/83xx-512x-pci.txt → Documentation/devicetree/bindings/pci/83xx-512x-pci.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/4xx/cpm.txt → Documentation/devicetree/bindings/powerpc/4xx/cpm.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/4xx/emac.txt → Documentation/devicetree/bindings/powerpc/4xx/emac.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/4xx/ndfc.txt → Documentation/devicetree/bindings/powerpc/4xx/ndfc.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/4xx/ppc440spe-adma.txt → Documentation/devicetree/bindings/powerpc/4xx/ppc440spe-adma.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/4xx/reboot.txt → Documentation/devicetree/bindings/powerpc/4xx/reboot.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/board.txt → Documentation/devicetree/bindings/powerpc/fsl/board.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/cpm.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/cpm/brg.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/brg.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/cpm/i2c.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/i2c.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/cpm/pic.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/pic.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/cpm/usb.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/usb.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/gpio.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/gpio.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/network.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe/firmware.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/firmware.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe/par_io.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/par_io.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe/pincfg.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/pincfg.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe/ucc.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/ucc.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe/usb.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/usb.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/cpm_qe/serial.txt → Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/serial.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/diu.txt → Documentation/devicetree/bindings/powerpc/fsl/diu.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/dma.txt → Documentation/devicetree/bindings/powerpc/fsl/dma.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/ecm.txt → Documentation/devicetree/bindings/powerpc/fsl/ecm.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/gtm.txt → Documentation/devicetree/bindings/powerpc/fsl/gtm.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/guts.txt → Documentation/devicetree/bindings/powerpc/fsl/guts.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/lbc.txt → Documentation/devicetree/bindings/powerpc/fsl/lbc.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/mcm.txt → Documentation/devicetree/bindings/powerpc/fsl/mcm.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/mcu-mpc8349emitx.txt → Documentation/devicetree/bindings/powerpc/fsl/mcu-mpc8349emitx.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/mpc5121-psc.txt → Documentation/devicetree/bindings/powerpc/fsl/mpc5121-psc.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/mpc5200.txt → Documentation/devicetree/bindings/powerpc/fsl/mpc5200.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/mpic.txt → Documentation/devicetree/bindings/powerpc/fsl/mpic.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/msi-pic.txt → Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/pmc.txt → Documentation/devicetree/bindings/powerpc/fsl/pmc.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/sec.txt → Documentation/devicetree/bindings/powerpc/fsl/sec.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/ssi.txt → Documentation/devicetree/bindings/powerpc/fsl/ssi.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/nintendo/gamecube.txt → Documentation/devicetree/bindings/powerpc/nintendo/gamecube.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/nintendo/wii.txt → Documentation/devicetree/bindings/powerpc/nintendo/wii.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/spi.txt → Documentation/devicetree/bindings/spi/fsl-spi.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/spi-bus.txt → Documentation/devicetree/bindings/spi/spi-bus.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/fsl/usb.txt → Documentation/devicetree/bindings/usb/fsl-usb.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/usb-ehci.txt → Documentation/devicetree/bindings/usb/usb-ehci.txt


+ 0 - 0
Documentation/powerpc/dts-bindings/xilinx.txt → Documentation/devicetree/bindings/xilinx.txt


+ 54 - 111
Documentation/powerpc/booting-without-of.txt → Documentation/devicetree/booting-without-of.txt

@@ -13,7 +13,6 @@ Table of Contents
 
   I - Introduction
     1) Entry point for arch/powerpc
-    2) Board support
 
   II - The DT block format
     1) Header
@@ -41,13 +40,6 @@ Table of Contents
   VI - System-on-a-chip devices and nodes
     1) Defining child nodes of an SOC
     2) Representing devices without a current OF specification
-      a) PHY nodes
-      b) Interrupt controllers
-      c) 4xx/Axon EMAC ethernet nodes
-      d) Xilinx IP cores
-      e) USB EHCI controllers
-      f) MDIO on GPIOs
-      g) SPI busses
 
   VII - Specifying interrupt information for devices
     1) interrupts property
@@ -123,7 +115,7 @@ Revision Information
 I - Introduction
 ================
 
-During the recent development of the Linux/ppc64 kernel, and more
+During the development of the Linux/ppc64 kernel, and more
 specifically, the addition of new platform types outside of the old
 IBM pSeries/iSeries pair, it was decided to enforce some strict rules
 regarding the kernel entry and bootloader <-> kernel interfaces, in
@@ -146,7 +138,7 @@ section III, but, for example, the kernel does not require you to
 create a node for every PCI device in the system. It is a requirement
 to have a node for PCI host bridges in order to provide interrupt
 routing informations and memory/IO ranges, among others. It is also
-recommended to define nodes for on chip devices and other busses that
+recommended to define nodes for on chip devices and other buses that
 don't specifically fit in an existing OF specification. This creates a
 great flexibility in the way the kernel can then probe those and match
 drivers to device, without having to hard code all sorts of tables. It
@@ -158,7 +150,7 @@ it with special cases.
 1) Entry point for arch/powerpc
 -------------------------------
 
-   There is one and one single entry point to the kernel, at the start
+   There is one single entry point to the kernel, at the start
    of the kernel image. That entry point supports two calling
    conventions:
 
@@ -210,12 +202,6 @@ it with special cases.
         with all CPUs. The way to do that with method b) will be
         described in a later revision of this document.
 
-
-2) Board support
-----------------
-
-64-bit kernels:
-
    Board supports (platforms) are not exclusive config options. An
    arbitrary set of board supports can be built in a single kernel
    image. The kernel will "know" what set of functions to use for a
@@ -234,48 +220,11 @@ it with special cases.
         containing the various callbacks that the generic code will
         use to get to your platform specific code
 
-        c) Add a reference to your "ppc_md" structure in the
-        "machines" table in arch/powerpc/kernel/setup_64.c if you are
-        a 64-bit platform.
-
-        d) request and get assigned a platform number (see PLATFORM_*
-        constants in arch/powerpc/include/asm/processor.h
-
-32-bit embedded kernels:
-
-  Currently, board support is essentially an exclusive config option.
-  The kernel is configured for a single platform.  Part of the reason
-  for this is to keep kernels on embedded systems small and efficient;
-  part of this is due to the fact the code is already that way. In the
-  future, a kernel may support multiple platforms, but only if the
+  A kernel image may support multiple platforms, but only if the
   platforms feature the same core architecture.  A single kernel build
   cannot support both configurations with Book E and configurations
   with classic Powerpc architectures.
 
-  32-bit embedded platforms that are moved into arch/powerpc using a
-  flattened device tree should adopt the merged tree practice of
-  setting ppc_md up dynamically, even though the kernel is currently
-  built with support for only a single platform at a time.  This allows
-  unification of the setup code, and will make it easier to go to a
-  multiple-platform-support model in the future.
-
-NOTE: I believe the above will be true once Ben's done with the merge
-of the boot sequences.... someone speak up if this is wrong!
-
-  To add a 32-bit embedded platform support, follow the instructions
-  for 64-bit platforms above, with the exception that the Kconfig
-  option should be set up such that the kernel builds exclusively for
-  the platform selected.  The processor type for the platform should
-  enable another config option to select the specific board
-  supported.
-
-NOTE: If Ben doesn't merge the setup files, may need to change this to
-point to setup_32.c
-
-
-   I will describe later the boot process and various callbacks that
-   your platform should implement.
-
 
 II - The DT block format
 ========================
@@ -300,8 +249,8 @@ the block to RAM before passing it to the kernel.
 1) Header
 ---------
 
-   The kernel is entered with r3 pointing to an area of memory that is
-   roughly described in arch/powerpc/include/asm/prom.h by the structure
+   The kernel is passed the physical address pointing to an area of memory
+   that is roughly described in include/linux/of_fdt.h by the structure
    boot_param_header:
 
 struct boot_param_header {
@@ -339,7 +288,7 @@ struct boot_param_header {
    All values in this header are in big endian format, the various
    fields in this header are defined more precisely below. All
    "offset" values are in bytes from the start of the header; that is
-   from the value of r3.
+   from the physical base address of the device tree block.
 
    - magic
 
@@ -437,7 +386,7 @@ struct boot_param_header {
 
 
              ------------------------------
-       r3 -> |  struct boot_param_header  |
+     base -> |  struct boot_param_header  |
              ------------------------------
              |      (alignment gap) (*)   |
              ------------------------------
@@ -457,7 +406,7 @@ struct boot_param_header {
       -----> ------------------------------
       |
       |
-      --- (r3 + totalsize)
+      --- (base + totalsize)
 
   (*) The alignment gaps are not necessarily present; their presence
       and size are dependent on the various alignment requirements of
@@ -500,7 +449,7 @@ the device-tree structure. It is typically used to represent "path" in
 the device-tree. More details about the actual format of these will be
 below.
 
-The kernel powerpc generic code does not make any formal use of the
+The kernel generic code does not make any formal use of the
 unit address (though some board support code may do) so the only real
 requirement here for the unit address is to ensure uniqueness of
 the node unit name at a given level of the tree. Nodes with no notion
@@ -518,20 +467,21 @@ path to the root node is "/".
 
 Every node which actually represents an actual device (that is, a node
 which isn't only a virtual "container" for more nodes, like "/cpus"
-is) is also required to have a "device_type" property indicating the
-type of node .
+is) is also required to have a "compatible" property indicating the
+specific hardware and an optional list of devices it is fully
+backwards compatible with.
 
 Finally, every node that can be referenced from a property in another
-node is required to have a "linux,phandle" property. Real open
-firmware implementations provide a unique "phandle" value for every
-node that the "prom_init()" trampoline code turns into
-"linux,phandle" properties. However, this is made optional if the
-flattened device tree is used directly. An example of a node
+node is required to have either a "phandle" or a "linux,phandle"
+property. Real Open Firmware implementations provide a unique
+"phandle" value for every node that the "prom_init()" trampoline code
+turns into "linux,phandle" properties. However, this is made optional
+if the flattened device tree is used directly. An example of a node
 referencing another node via "phandle" is when laying out the
 interrupt tree which will be described in a further version of this
 document.
 
-This "linux, phandle" property is a 32-bit value that uniquely
+The "phandle" property is a 32-bit value that uniquely
 identifies a node. You are free to use whatever values or system of
 values, internal pointers, or whatever to generate these, the only
 requirement is that every node for which you provide that property has
@@ -694,7 +644,7 @@ made of 3 cells, the bottom two containing the actual address itself
 while the top cell contains address space indication, flags, and pci
 bus & device numbers.
 
-For busses that support dynamic allocation, it's the accepted practice
+For buses that support dynamic allocation, it's the accepted practice
 to then not provide the address in "reg" (keep it 0) though while
 providing a flag indicating the address is dynamically allocated, and
 then, to provide a separate "assigned-addresses" property that
@@ -711,7 +661,7 @@ prom_parse.c file of the recent kernels for your bus type.
 The "reg" property only defines addresses and sizes (if #size-cells is
 non-0) within a given bus. In order to translate addresses upward
 (that is into parent bus addresses, and possibly into CPU physical
-addresses), all busses must contain a "ranges" property. If the
+addresses), all buses must contain a "ranges" property. If the
 "ranges" property is missing at a given level, it's assumed that
 translation isn't possible, i.e., the registers are not visible on the
 parent bus.  The format of the "ranges" property for a bus is a list
@@ -727,9 +677,9 @@ example, for a PCI host controller, that would be a CPU address. For a
 PCI<->ISA bridge, that would be a PCI address. It defines the base
 address in the parent bus where the beginning of that range is mapped.
 
-For a new 64-bit powerpc board, I recommend either the 2/2 format or
+For new 64-bit board support, I recommend either the 2/2 format or
 Apple's 2/1 format which is slightly more compact since sizes usually
-fit in a single 32-bit word.   New 32-bit powerpc boards should use a
+fit in a single 32-bit word.   New 32-bit board support should use a
 1/1 format, unless the processor supports physical addresses greater
 than 32-bits, in which case a 2/1 format is recommended.
 
@@ -754,7 +704,7 @@ of their actual names.
 While earlier users of Open Firmware like OldWorld macintoshes tended
 to use the actual device name for the "name" property, it's nowadays
 considered a good practice to use a name that is closer to the device
-class (often equal to device_type). For example, nowadays, ethernet
+class (often equal to device_type). For example, nowadays, Ethernet
 controllers are named "ethernet", an additional "model" property
 defining precisely the chip type/model, and "compatible" property
 defining the family in case a single driver can driver more than one
@@ -772,7 +722,7 @@ is present).
 4) Note about node and property names and character set
 -------------------------------------------------------
 
-While open firmware provides more flexible usage of 8859-1, this
+While Open Firmware provides more flexible usage of 8859-1, this
 specification enforces more strict rules. Nodes and properties should
 be comprised only of ASCII characters 'a' to 'z', '0' to
 '9', ',', '.', '_', '+', '#', '?', and '-'. Node names additionally
@@ -792,7 +742,7 @@ address which can extend beyond that limit.
 --------------------------------
   These are all that are currently required. However, it is strongly
   recommended that you expose PCI host bridges as documented in the
-  PCI binding to open firmware, and your interrupt tree as documented
+  PCI binding to Open Firmware, and your interrupt tree as documented
   in OF interrupt tree specification.
 
   a) The root node
@@ -802,20 +752,12 @@ address which can extend beyond that limit.
     - model : this is your board name/model
     - #address-cells : address representation for "root" devices
     - #size-cells: the size representation for "root" devices
-    - device_type : This property shouldn't be necessary. However, if
-      you decide to create a device_type for your root node, make sure it
-      is _not_ "chrp" unless your platform is a pSeries or PAPR compliant
-      one for 64-bit, or a CHRP-type machine for 32-bit as this will
-      matched by the kernel this way.
-
-  Additionally, some recommended properties are:
-
     - compatible : the board "family" generally finds its way here,
       for example, if you have 2 board models with a similar layout,
       that typically get driven by the same platform code in the
-      kernel, you would use a different "model" property but put a
-      value in "compatible". The kernel doesn't directly use that
-      value but it is generally useful.
+      kernel, you would specify the exact board model in the
+      compatible property followed by an entry that represents the SoC
+      model.
 
   The root node is also generally where you add additional properties
   specific to your board like the serial number if any, that sort of
@@ -841,8 +783,11 @@ address which can extend beyond that limit.
 
   So under /cpus, you are supposed to create a node for every CPU on
   the machine. There is no specific restriction on the name of the
-  CPU, though It's common practice to call it PowerPC,<name>. For
+  CPU, though it's common to call it <architecture>,<core>. For
   example, Apple uses PowerPC,G5 while IBM uses PowerPC,970FX.
+  However, the Generic Names convention suggests that it would be
+  better to simply use 'cpu' for each cpu node and use the compatible
+  property to identify the specific cpu core.
 
   Required properties:
 
@@ -923,7 +868,7 @@ compatibility.
 
   e) The /chosen node
 
-  This node is a bit "special". Normally, that's where open firmware
+  This node is a bit "special". Normally, that's where Open Firmware
   puts some variable environment information, like the arguments, or
   the default input/output devices.
 
@@ -940,11 +885,7 @@ compatibility.
       console device if any. Typically, if you have serial devices on
       your board, you may want to put the full path to the one set as
       the default console in the firmware here, for the kernel to pick
-      it up as its own default console. If you look at the function
-      set_preferred_console() in arch/ppc64/kernel/setup.c, you'll see
-      that the kernel tries to find out the default console and has
-      knowledge of various types like 8250 serial ports. You may want
-      to extend this function to add your own.
+      it up as its own default console.
 
   Note that u-boot creates and fills in the chosen node for platforms
   that use it.
@@ -955,23 +896,23 @@ compatibility.
 
   f) the /soc<SOCname> node
 
-  This node is used to represent a system-on-a-chip (SOC) and must be
-  present if the processor is a SOC. The top-level soc node contains
-  information that is global to all devices on the SOC. The node name
-  should contain a unit address for the SOC, which is the base address
-  of the memory-mapped register set for the SOC. The name of an soc
+  This node is used to represent a system-on-a-chip (SoC) and must be
+  present if the processor is a SoC. The top-level soc node contains
+  information that is global to all devices on the SoC. The node name
+  should contain a unit address for the SoC, which is the base address
+  of the memory-mapped register set for the SoC. The name of an SoC
   node should start with "soc", and the remainder of the name should
   represent the part number for the soc.  For example, the MPC8540's
   soc node would be called "soc8540".
 
   Required properties:
 
-    - device_type : Should be "soc"
     - ranges : Should be defined as specified in 1) to describe the
-      translation of SOC addresses for memory mapped SOC registers.
-    - bus-frequency: Contains the bus frequency for the SOC node.
+      translation of SoC addresses for memory mapped SoC registers.
+    - bus-frequency: Contains the bus frequency for the SoC node.
       Typically, the value of this field is filled in by the boot
       loader.
+    - compatible : Exact model of the SoC
 
 
   Recommended properties:
@@ -1155,12 +1096,13 @@ while all this has been defined and implemented.
 
   - An example of code for iterating nodes & retrieving properties
     directly from the flattened tree format can be found in the kernel
-    file arch/ppc64/kernel/prom.c, look at scan_flat_dt() function,
+    file drivers/of/fdt.c.  Look at the of_scan_flat_dt() function,
     its usage in early_init_devtree(), and the corresponding various
     early_init_dt_scan_*() callbacks. That code can be re-used in a
     GPL bootloader, and as the author of that code, I would be happy
     to discuss possible free licensing to any vendor who wishes to
     integrate all or part of this code into a non-GPL bootloader.
+    (reference needed; who is 'I' here? ---gcl Jan 31, 2011)
 
 
 
@@ -1203,18 +1145,19 @@ MPC8540.
 2) Representing devices without a current OF specification
 ----------------------------------------------------------
 
-Currently, there are many devices on SOCs that do not have a standard
-representation pre-defined as part of the open firmware
-specifications, mainly because the boards that contain these SOCs are
-not currently booted using open firmware.   This section contains
-descriptions for the SOC devices for which new nodes have been
-defined; this list will expand as more and more SOC-containing
-platforms are moved over to use the flattened-device-tree model.
+Currently, there are many devices on SoCs that do not have a standard
+representation defined as part of the Open Firmware specifications,
+mainly because the boards that contain these SoCs are not currently
+booted using Open Firmware.  Binding documentation for new devices
+should be added to the Documentation/devicetree/bindings directory.
+That directory will expand as device tree support is added to more and
+more SoCs.
+
 
 VII - Specifying interrupt information for devices
 ===================================================
 
-The device tree represents the busses and devices of a hardware
+The device tree represents the buses and devices of a hardware
 system in a form similar to the physical bus topology of the
 hardware.
 

+ 11 - 1
MAINTAINERS

@@ -2126,6 +2126,7 @@ S:	Supported
 F:	fs/dlm/
 
 DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
+M:	Vinod Koul <vinod.koul@intel.com>
 M:	Dan Williams <dan.j.williams@intel.com>
 S:	Supported
 F:	drivers/dma/
@@ -2774,6 +2775,15 @@ F:	Documentation/isdn/README.gigaset
 F:	drivers/isdn/gigaset/
 F:	include/linux/gigaset_dev.h
 
+GPIO SUBSYSTEM
+M:	Grant Likely <grant.likely@secretlab.ca>
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+T:	git git://git.secretlab.ca/git/linux-2.6.git
+F:	Documentation/gpio/gpio.txt
+F:	drivers/gpio/
+F:	include/linux/gpio*
+
 GRETH 10/100/1G Ethernet MAC device driver
 M:	Kristoffer Glembo <kristoffer@gaisler.com>
 L:	netdev@vger.kernel.org
@@ -4591,7 +4601,7 @@ F:	drivers/i2c/busses/i2c-ocores.c
 
 OPEN FIRMWARE AND FLATTENED DEVICE TREE
 M:	Grant Likely <grant.likely@secretlab.ca>
-L:	devicetree-discuss@lists.ozlabs.org
+L:	devicetree-discuss@lists.ozlabs.org (moderated for non-subscribers)
 W:	http://fdt.secretlab.ca
 T:	git git://git.secretlab.ca/git/linux-2.6.git
 S:	Maintained

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 38
-EXTRAVERSION = -rc4
+EXTRAVERSION = -rc5
 NAME = Flesh-Eating Bats with Fangs
 
 # *DOCUMENTATION*

+ 1 - 1
arch/arm/Kconfig

@@ -1391,7 +1391,7 @@ config AEABI
 
 config OABI_COMPAT
 	bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
-	depends on AEABI && EXPERIMENTAL
+	depends on AEABI && EXPERIMENTAL && !THUMB2_KERNEL
 	default y
 	help
 	  This option preserves the old syscall interface along with the

+ 26 - 12
arch/arm/kernel/head.S

@@ -391,6 +391,7 @@ ENDPROC(__turn_mmu_on)
 
 
 #ifdef CONFIG_SMP_ON_UP
+	__INIT
 __fixup_smp:
 	and	r3, r9, #0x000f0000	@ architecture version
 	teq	r3, #0x000f0000		@ CPU ID supported?
@@ -415,18 +416,7 @@ __fixup_smp_on_up:
 	sub	r3, r0, r3
 	add	r4, r4, r3
 	add	r5, r5, r3
-2:	cmp	r4, r5
-	movhs	pc, lr
-	ldmia	r4!, {r0, r6}
- ARM(	str	r6, [r0, r3]	)
- THUMB(	add	r0, r0, r3	)
-#ifdef __ARMEB__
- THUMB(	mov	r6, r6, ror #16	)	@ Convert word order for big-endian.
-#endif
- THUMB(	strh	r6, [r0], #2	)	@ For Thumb-2, store as two halfwords
- THUMB(	mov	r6, r6, lsr #16	)	@ to be robust against misaligned r3.
- THUMB(	strh	r6, [r0]	)
-	b	2b
+	b	__do_fixup_smp_on_up
 ENDPROC(__fixup_smp)
 
 	.align
@@ -440,7 +430,31 @@ smp_on_up:
 	ALT_SMP(.long	1)
 	ALT_UP(.long	0)
 	.popsection
+#endif
 
+	.text
+__do_fixup_smp_on_up:
+	cmp	r4, r5
+	movhs	pc, lr
+	ldmia	r4!, {r0, r6}
+ ARM(	str	r6, [r0, r3]	)
+ THUMB(	add	r0, r0, r3	)
+#ifdef __ARMEB__
+ THUMB(	mov	r6, r6, ror #16	)	@ Convert word order for big-endian.
 #endif
+ THUMB(	strh	r6, [r0], #2	)	@ For Thumb-2, store as two halfwords
+ THUMB(	mov	r6, r6, lsr #16	)	@ to be robust against misaligned r3.
+ THUMB(	strh	r6, [r0]	)
+	b	__do_fixup_smp_on_up
+ENDPROC(__do_fixup_smp_on_up)
+
+ENTRY(fixup_smp)
+	stmfd	sp!, {r4 - r6, lr}
+	mov	r4, r0
+	add	r5, r0, r1
+	mov	r3, #0
+	bl	__do_fixup_smp_on_up
+	ldmfd	sp!, {r4 - r6, pc}
+ENDPROC(fixup_smp)
 
 #include "head-common.S"

+ 26 - 18
arch/arm/kernel/hw_breakpoint.c

@@ -137,11 +137,10 @@ static u8 get_debug_arch(void)
 	u32 didr;
 
 	/* Do we implement the extended CPUID interface? */
-	if (((read_cpuid_id() >> 16) & 0xf) != 0xf) {
-		pr_warning("CPUID feature registers not supported. "
-				"Assuming v6 debug is present.\n");
+	if (WARN_ONCE((((read_cpuid_id() >> 16) & 0xf) != 0xf),
+	    "CPUID feature registers not supported. "
+	    "Assuming v6 debug is present.\n"))
 		return ARM_DEBUG_ARCH_V6;
-	}
 
 	ARM_DBG_READ(c0, 0, didr);
 	return (didr >> 16) & 0xf;
@@ -152,6 +151,12 @@ u8 arch_get_debug_arch(void)
 	return debug_arch;
 }
 
+static int debug_arch_supported(void)
+{
+	u8 arch = get_debug_arch();
+	return arch >= ARM_DEBUG_ARCH_V6 && arch <= ARM_DEBUG_ARCH_V7_ECP14;
+}
+
 /* Determine number of BRP register available. */
 static int get_num_brp_resources(void)
 {
@@ -268,6 +273,9 @@ out:
 
 int hw_breakpoint_slots(int type)
 {
+	if (!debug_arch_supported())
+		return 0;
+
 	/*
 	 * We can be called early, so don't rely on
 	 * our static variables being initialised.
@@ -834,11 +842,11 @@ static void reset_ctrl_regs(void *unused)
 
 	/*
 	 * v7 debug contains save and restore registers so that debug state
-	 * can be maintained across low-power modes without leaving
-	 * the debug logic powered up. It is IMPLEMENTATION DEFINED whether
-	 * we can write to the debug registers out of reset, so we must
-	 * unlock the OS Lock Access Register to avoid taking undefined
-	 * instruction exceptions later on.
+	 * can be maintained across low-power modes without leaving the debug
+	 * logic powered up. It is IMPLEMENTATION DEFINED whether we can access
+	 * the debug registers out of reset, so we must unlock the OS Lock
+	 * Access Register to avoid taking undefined instruction exceptions
+	 * later on.
 	 */
 	if (debug_arch >= ARM_DEBUG_ARCH_V7_ECP14) {
 		/*
@@ -882,7 +890,7 @@ static int __init arch_hw_breakpoint_init(void)
 
 	debug_arch = get_debug_arch();
 
-	if (debug_arch > ARM_DEBUG_ARCH_V7_ECP14) {
+	if (!debug_arch_supported()) {
 		pr_info("debug architecture 0x%x unsupported.\n", debug_arch);
 		return 0;
 	}
@@ -899,18 +907,18 @@ static int __init arch_hw_breakpoint_init(void)
 		pr_info("%d breakpoint(s) reserved for watchpoint "
 				"single-step.\n", core_num_reserved_brps);
 
+	/*
+	 * Reset the breakpoint resources. We assume that a halting
+	 * debugger will leave the world in a nice state for us.
+	 */
+	on_each_cpu(reset_ctrl_regs, NULL, 1);
+
 	ARM_DBG_READ(c1, 0, dscr);
 	if (dscr & ARM_DSCR_HDBGEN) {
+		max_watchpoint_len = 4;
 		pr_warning("halting debug mode enabled. Assuming maximum "
-				"watchpoint size of 4 bytes.");
+			   "watchpoint size of %u bytes.", max_watchpoint_len);
 	} else {
-		/*
-		 * Reset the breakpoint resources. We assume that a halting
-		 * debugger will leave the world in a nice state for us.
-		 */
-		smp_call_function(reset_ctrl_regs, NULL, 1);
-		reset_ctrl_regs(NULL);
-
 		/* Work out the maximum supported watchpoint length. */
 		max_watchpoint_len = get_max_wp_len();
 		pr_info("maximum watchpoint size is %u bytes.\n",

+ 21 - 1
arch/arm/kernel/module.c

@@ -22,6 +22,7 @@
 
 #include <asm/pgtable.h>
 #include <asm/sections.h>
+#include <asm/smp_plat.h>
 #include <asm/unwind.h>
 
 #ifdef CONFIG_XIP_KERNEL
@@ -268,12 +269,28 @@ struct mod_unwind_map {
 	const Elf_Shdr *txt_sec;
 };
 
+static const Elf_Shdr *find_mod_section(const Elf32_Ehdr *hdr,
+	const Elf_Shdr *sechdrs, const char *name)
+{
+	const Elf_Shdr *s, *se;
+	const char *secstrs = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
+
+	for (s = sechdrs, se = sechdrs + hdr->e_shnum; s < se; s++)
+		if (strcmp(name, secstrs + s->sh_name) == 0)
+			return s;
+
+	return NULL;
+}
+
+extern void fixup_smp(const void *, unsigned long);
+
 int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs,
 		    struct module *mod)
 {
+	const Elf_Shdr * __maybe_unused s = NULL;
 #ifdef CONFIG_ARM_UNWIND
 	const char *secstrs = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
-	const Elf_Shdr *s, *sechdrs_end = sechdrs + hdr->e_shnum;
+	const Elf_Shdr *sechdrs_end = sechdrs + hdr->e_shnum;
 	struct mod_unwind_map maps[ARM_SEC_MAX];
 	int i;
 
@@ -315,6 +332,9 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs,
 					         maps[i].txt_sec->sh_addr,
 					         maps[i].txt_sec->sh_size);
 #endif
+	s = find_mod_section(hdr, sechdrs, ".alt.smp.init");
+	if (s && !is_smp())
+		fixup_smp((void *)s->sh_addr, s->sh_size);
 	return 0;
 }
 

+ 1 - 1
arch/arm/kernel/perf_event.c

@@ -700,7 +700,7 @@ user_backtrace(struct frame_tail __user *tail,
 	 * Frame pointers should strictly progress back up the stack
 	 * (towards higher addresses).
 	 */
-	if (tail >= buftail.fp)
+	if (tail + 1 >= buftail.fp)
 		return NULL;
 
 	return buftail.fp - 1;

+ 1 - 1
arch/arm/mach-pxa/colibri-evalboard.c

@@ -50,7 +50,7 @@ static void __init colibri_mmc_init(void)
 			GPIO0_COLIBRI_PXA270_SD_DETECT;
 	if (machine_is_colibri300())	/* PXA300 Colibri */
 		colibri_mci_platform_data.gpio_card_detect =
-			GPIO39_COLIBRI_PXA300_SD_DETECT;
+			GPIO13_COLIBRI_PXA300_SD_DETECT;
 	else				/* PXA320 Colibri */
 		colibri_mci_platform_data.gpio_card_detect =
 			GPIO28_COLIBRI_PXA320_SD_DETECT;

+ 1 - 1
arch/arm/mach-pxa/colibri-pxa300.c

@@ -41,7 +41,7 @@ static mfp_cfg_t colibri_pxa300_evalboard_pin_config[] __initdata = {
 	GPIO4_MMC1_DAT1,
 	GPIO5_MMC1_DAT2,
 	GPIO6_MMC1_DAT3,
-	GPIO39_GPIO,	/* SD detect */
+	GPIO13_GPIO,	/* GPIO13_COLIBRI_PXA300_SD_DETECT */
 
 	/* UHC */
 	GPIO0_2_USBH_PEN,

+ 1 - 1
arch/arm/mach-pxa/include/mach/colibri.h

@@ -60,7 +60,7 @@ static inline void colibri_pxa3xx_init_nand(void) {}
 #define GPIO113_COLIBRI_PXA270_TS_IRQ	113
 
 /* GPIO definitions for Colibri PXA300/310 */
-#define GPIO39_COLIBRI_PXA300_SD_DETECT	39
+#define GPIO13_COLIBRI_PXA300_SD_DETECT	13
 
 /* GPIO definitions for Colibri PXA320 */
 #define GPIO28_COLIBRI_PXA320_SD_DETECT	28

+ 1 - 1
arch/arm/mach-pxa/palm27x.c

@@ -323,7 +323,7 @@ static struct platform_pwm_backlight_data palm27x_backlight_data = {
 	.pwm_id		= 0,
 	.max_brightness	= 0xfe,
 	.dft_brightness	= 0x7e,
-	.pwm_period_ns	= 3500,
+	.pwm_period_ns	= 3500 * 1024,
 	.init		= palm27x_backlight_init,
 	.notify		= palm27x_backlight_notify,
 	.exit		= palm27x_backlight_exit,

+ 2 - 2
arch/arm/mach-pxa/pm.c

@@ -33,7 +33,7 @@ int pxa_pm_enter(suspend_state_t state)
 #endif
 
 	/* skip registers saving for standby */
-	if (state != PM_SUSPEND_STANDBY) {
+	if (state != PM_SUSPEND_STANDBY && pxa_cpu_pm_fns->save) {
 		pxa_cpu_pm_fns->save(sleep_save);
 		/* before sleeping, calculate and save a checksum */
 		for (i = 0; i < pxa_cpu_pm_fns->save_count - 1; i++)
@@ -44,7 +44,7 @@ int pxa_pm_enter(suspend_state_t state)
 	pxa_cpu_pm_fns->enter(state);
 	cpu_init();
 
-	if (state != PM_SUSPEND_STANDBY) {
+	if (state != PM_SUSPEND_STANDBY && pxa_cpu_pm_fns->restore) {
 		/* after sleeping, validate the checksum */
 		for (i = 0; i < pxa_cpu_pm_fns->save_count - 1; i++)
 			checksum += sleep_save[i];

+ 1 - 0
arch/arm/mach-s5pv310/Kconfig

@@ -122,6 +122,7 @@ config MACH_SMDKV310
 	select S3C_DEV_HSMMC2
 	select S3C_DEV_HSMMC3
 	select S5PV310_DEV_PD
+	select S5PV310_DEV_SYSMMU
 	select S5PV310_SETUP_I2C1
 	select S5PV310_SETUP_SDHCI
 	help

+ 0 - 2
arch/arm/mach-s5pv310/include/mach/map.h

@@ -124,8 +124,6 @@
 #define S5PV310_PA_SYSMMU_TV		0x12E20000
 #define S5PV310_PA_SYSMMU_MFC_L		0x13620000
 #define S5PV310_PA_SYSMMU_MFC_R		0x13630000
-#define S5PV310_SYSMMU_TOTAL_IPNUM	16
-#define S5P_SYSMMU_TOTAL_IPNUM		S5PV310_SYSMMU_TOTAL_IPNUM
 
 /* compatibiltiy defines. */
 #define S3C_PA_UART			S5PV310_PA_UART

+ 4 - 1
arch/arm/mach-s5pv310/include/mach/sysmmu.h

@@ -13,6 +13,9 @@
 #ifndef __ASM_ARM_ARCH_SYSMMU_H
 #define __ASM_ARM_ARCH_SYSMMU_H __FILE__
 
+#define S5PV310_SYSMMU_TOTAL_IPNUM	16
+#define S5P_SYSMMU_TOTAL_IPNUM		S5PV310_SYSMMU_TOTAL_IPNUM
+
 enum s5pv310_sysmmu_ips {
 	SYSMMU_MDMA,
 	SYSMMU_SSS,
@@ -32,7 +35,7 @@ enum s5pv310_sysmmu_ips {
 	SYSMMU_MFC_R,
 };
 
-static char *sysmmu_ips_name[S5P_SYSMMU_TOTAL_IPNUM] = {
+static char *sysmmu_ips_name[S5PV310_SYSMMU_TOTAL_IPNUM] = {
 	"SYSMMU_MDMA"	,
 	"SYSMMU_SSS"	,
 	"SYSMMU_FIMC0"	,

+ 3 - 0
arch/arm/mach-sa1100/collie.c

@@ -241,6 +241,9 @@ static struct locomo_platform_data locomo_info = {
 struct platform_device collie_locomo_device = {
 	.name		= "locomo",
 	.id		= 0,
+	.dev		= {
+		.platform_data	= &locomo_info,
+	},
 	.num_resources	= ARRAY_SIZE(locomo_resources),
 	.resource	= locomo_resources,
 };

+ 3 - 3
arch/arm/mm/Kconfig

@@ -405,7 +405,7 @@ config CPU_V6
 config CPU_32v6K
 	bool "Support ARM V6K processor extensions" if !SMP
 	depends on CPU_V6 || CPU_V7
-	default y if SMP && !(ARCH_MX3 || ARCH_OMAP2)
+	default y if SMP
 	help
 	  Say Y here if your ARMv6 processor supports the 'K' extension.
 	  This enables the kernel to use some instructions not present
@@ -416,7 +416,7 @@ config CPU_32v6K
 # ARMv7
 config CPU_V7
 	bool "Support ARM V7 processor" if ARCH_INTEGRATOR || MACH_REALVIEW_EB || MACH_REALVIEW_PBX
-	select CPU_32v6K if !ARCH_OMAP2
+	select CPU_32v6K
 	select CPU_32v7
 	select CPU_ABRT_EV7
 	select CPU_PABRT_V7
@@ -644,7 +644,7 @@ config ARM_THUMBEE
 
 config SWP_EMULATE
 	bool "Emulate SWP/SWPB instructions"
-	depends on CPU_V7 && !CPU_V6
+	depends on !CPU_USE_DOMAINS && CPU_V7 && !CPU_V6
 	select HAVE_PROC_CPU if PROC_FS
 	default y if SMP
 	help

+ 3 - 11
arch/arm/oprofile/common.c

@@ -10,8 +10,6 @@
  */
 
 #include <linux/cpumask.h>
-#include <linux/err.h>
-#include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/mutex.h>
 #include <linux/oprofile.h>
@@ -46,6 +44,7 @@ char *op_name_from_perf_id(void)
 		return NULL;
 	}
 }
+#endif
 
 static int report_trace(struct stackframe *frame, void *d)
 {
@@ -85,7 +84,7 @@ static struct frame_tail* user_backtrace(struct frame_tail *tail)
 
 	/* frame pointers should strictly progress back up the stack
 	 * (towards higher addresses) */
-	if (tail >= buftail[0].fp)
+	if (tail + 1 >= buftail[0].fp)
 		return NULL;
 
 	return buftail[0].fp-1;
@@ -111,6 +110,7 @@ static void arm_backtrace(struct pt_regs * const regs, unsigned int depth)
 
 int __init oprofile_arch_init(struct oprofile_operations *ops)
 {
+	/* provide backtrace support also in timer mode: */
 	ops->backtrace		= arm_backtrace;
 
 	return oprofile_perf_init(ops);
@@ -120,11 +120,3 @@ void __exit oprofile_arch_exit(void)
 {
 	oprofile_perf_exit();
 }
-#else
-int __init oprofile_arch_init(struct oprofile_operations *ops)
-{
-	pr_info("oprofile: hardware counters not available\n");
-	return -ENODEV;
-}
-void __exit oprofile_arch_exit(void) {}
-#endif /* CONFIG_HW_PERF_EVENTS */

+ 6 - 2
arch/arm/plat-pxa/mfp.c

@@ -139,10 +139,11 @@ static const unsigned long mfpr_edge[] = {
 #define mfp_configured(p)	((p)->config != -1)
 
 /*
- * perform a read-back of any MFPR register to make sure the
+ * perform a read-back of any valid MFPR register to make sure the
  * previous writings are finished
  */
-#define mfpr_sync()	(void)__raw_readl(mfpr_mmio_base + 0)
+static unsigned long mfpr_off_readback;
+#define mfpr_sync()	(void)__raw_readl(mfpr_mmio_base + mfpr_off_readback)
 
 static inline void __mfp_config_run(struct mfp_pin *p)
 {
@@ -248,6 +249,9 @@ void __init mfp_init_addr(struct mfp_addr_map *map)
 
 	spin_lock_irqsave(&mfp_spin_lock, flags);
 
+	/* mfp offset for readback */
+	mfpr_off_readback = map[0].offset;
+
 	for (p = map; p->start != MFP_PIN_INVALID; p++) {
 		offset = p->offset;
 		i = p->start;

+ 8 - 16
arch/arm/plat-s5p/Kconfig

@@ -37,6 +37,14 @@ config S5P_GPIO_INT
 	help
 	  Common code for the GPIO interrupts (other than external interrupts.)
 
+comment "System MMU"
+
+config S5P_SYSTEM_MMU
+	bool "S5P SYSTEM MMU"
+	depends on ARCH_S5PV310
+	help
+	  Say Y here if you want to enable System MMU
+
 config S5P_DEV_FIMC0
 	bool
 	help
@@ -66,19 +74,3 @@ config S5P_DEV_CSIS1
 	bool
 	help
 	  Compile in platform device definitions for MIPI-CSIS channel 1
-
-menuconfig S5P_SYSMMU
-	bool "SYSMMU support"
-	depends on ARCH_S5PV310
-	help
-	  This is a System MMU driver for Samsung ARM based Soc.
-
-if S5P_SYSMMU
-
-config S5P_SYSMMU_DEBUG
-	bool "Enables debug messages"
-	depends on S5P_SYSMMU
-	help
-	  This enables SYSMMU driver debug massages.
-
-endif

+ 1 - 1
arch/arm/plat-s5p/Makefile

@@ -19,6 +19,7 @@ obj-y				+= clock.o
 obj-y				+= irq.o
 obj-$(CONFIG_S5P_EXT_INT)	+= irq-eint.o
 obj-$(CONFIG_S5P_GPIO_INT)	+= irq-gpioint.o
+obj-$(CONFIG_S5P_SYSTEM_MMU)	+= sysmmu.o
 obj-$(CONFIG_PM)		+= pm.o
 obj-$(CONFIG_PM)		+= irq-pm.o
 
@@ -30,4 +31,3 @@ obj-$(CONFIG_S5P_DEV_FIMC2)	+= dev-fimc2.o
 obj-$(CONFIG_S5P_DEV_ONENAND)	+= dev-onenand.o
 obj-$(CONFIG_S5P_DEV_CSIS0)	+= dev-csis0.o
 obj-$(CONFIG_S5P_DEV_CSIS1)	+= dev-csis1.o
-obj-$(CONFIG_S5P_SYSMMU)	+= sysmmu.o

+ 0 - 23
arch/arm/plat-s5p/include/plat/sysmmu.h

@@ -1,23 +0,0 @@
-/* linux/arch/arm/plat-s5p/include/plat/sysmmu.h
- *
- * Copyright (c) 2010 Samsung Electronics Co., Ltd.
- *		http://www.samsung.com/
- *
- * Samsung sysmmu driver
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#ifndef __ASM_PLAT_S5P_SYSMMU_H
-#define __ASM_PLAT_S5P_SYSMMU_H __FILE__
-
-/* debug macro */
-#ifdef CONFIG_S5P_SYSMMU_DEBUG
-#define sysmmu_debug(fmt, arg...)	printk(KERN_INFO "[%s] " fmt, __func__, ## arg)
-#else
-#define sysmmu_debug(fmt, arg...)	do { } while (0)
-#endif
-
-#endif /* __ASM_PLAT_S5P_SYSMMU_H */

+ 1 - 3
arch/arm/plat-s5p/sysmmu.c

@@ -16,8 +16,6 @@
 #include <mach/regs-sysmmu.h>
 #include <mach/sysmmu.h>
 
-#include <plat/sysmmu.h>
-
 struct sysmmu_controller s5p_sysmmu_cntlrs[S5P_SYSMMU_TOTAL_IPNUM];
 
 void s5p_sysmmu_register(struct sysmmu_controller *sysmmuconp)
@@ -123,7 +121,7 @@ static int s5p_sysmmu_set_tablebase(sysmmu_ips ips)
 		: "=r" (pg) : : "cc");		\
 		pg &= ~0x3fff;
 
-	sysmmu_debug("CP15 TTBR0 : 0x%x\n", pg);
+	printk(KERN_INFO "%s: CP15 TTBR0 : 0x%x\n", __func__, pg);
 
 	/* Set sysmmu page table base address */
 	__raw_writel(pg, sysmmuconp->regs + S5P_PT_BASE_ADDR);

+ 2 - 0
arch/arm/plat-samsung/include/plat/pm.h

@@ -17,6 +17,8 @@
 
 #include <linux/irq.h>
 
+struct sys_device;
+
 #ifdef CONFIG_PM
 
 extern __init int s3c_pm_init(void);

+ 2 - 0
arch/blackfin/include/asm/bfin_serial.h

@@ -10,6 +10,7 @@
 #define __BFIN_ASM_SERIAL_H__
 
 #include <linux/serial_core.h>
+#include <linux/spinlock.h>
 #include <mach/anomaly.h>
 #include <mach/bfin_serial.h>
 
@@ -41,6 +42,7 @@ struct bfin_serial_port {
 	struct circ_buf rx_dma_buf;
 	struct timer_list rx_dma_timer;
 	int rx_dma_nrows;
+	spinlock_t rx_lock;
 	unsigned int tx_dma_channel;
 	unsigned int rx_dma_channel;
 	struct work_struct tx_dma_workqueue;

+ 1 - 3
arch/m68k/include/asm/string.h

@@ -99,14 +99,12 @@ static inline int strcmp(const char *cs, const char *ct)
 		: "+a" (cs), "+a" (ct), "=d" (res));
 	return res;
 }
+#endif /* CONFIG_COLDFIRE */
 
 #define __HAVE_ARCH_MEMMOVE
 extern void *memmove(void *, const void *, __kernel_size_t);
 
-#define __HAVE_ARCH_MEMCMP
-extern int memcmp(const void *, const void *, __kernel_size_t);
 #define memcmp(d, s, n) __builtin_memcmp(d, s, n)
-#endif /* CONFIG_COLDFIRE */
 
 #define __HAVE_ARCH_MEMSET
 extern void *memset(void *, int, __kernel_size_t);

+ 0 - 11
arch/m68k/lib/string.c

@@ -243,14 +243,3 @@ void *memmove(void *dest, const void *src, size_t n)
 	return xdest;
 }
 EXPORT_SYMBOL(memmove);
-
-int memcmp(const void *cs, const void *ct, size_t count)
-{
-	const unsigned char *su1, *su2;
-
-	for (su1 = cs, su2 = ct; count > 0; ++su1, ++su2, count--)
-		if (*su1 != *su2)
-			return *su1 < *su2 ? -1 : +1;
-	return 0;
-}
-EXPORT_SYMBOL(memcmp);

+ 6 - 0
arch/m68knommu/kernel/vmlinux.lds.S

@@ -141,6 +141,12 @@ SECTIONS {
 		*(__param)
 		__stop___param = .;
 
+		/* Built-in module versions */
+		. = ALIGN(4) ;
+		__start___modver = .;
+		*(__modver)
+		__stop___modver = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > TEXT

+ 1 - 1
arch/m68knommu/lib/Makefile

@@ -4,4 +4,4 @@
 
 lib-y	:= ashldi3.o ashrdi3.o lshrdi3.o \
 	   muldi3.o mulsi3.o divsi3.o udivsi3.o modsi3.o umodsi3.o \
-	   checksum.o memcpy.o memset.o delay.o
+	   checksum.o memcpy.o memmove.o memset.o delay.o

+ 105 - 0
arch/m68knommu/lib/memmove.c

@@ -0,0 +1,105 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file COPYING in the main directory of this archive
+ * for more details.
+ */
+
+#define __IN_STRING_C
+
+#include <linux/module.h>
+#include <linux/string.h>
+
+void *memmove(void *dest, const void *src, size_t n)
+{
+	void *xdest = dest;
+	size_t temp;
+
+	if (!n)
+		return xdest;
+
+	if (dest < src) {
+		if ((long)dest & 1) {
+			char *cdest = dest;
+			const char *csrc = src;
+			*cdest++ = *csrc++;
+			dest = cdest;
+			src = csrc;
+			n--;
+		}
+		if (n > 2 && (long)dest & 2) {
+			short *sdest = dest;
+			const short *ssrc = src;
+			*sdest++ = *ssrc++;
+			dest = sdest;
+			src = ssrc;
+			n -= 2;
+		}
+		temp = n >> 2;
+		if (temp) {
+			long *ldest = dest;
+			const long *lsrc = src;
+			temp--;
+			do
+				*ldest++ = *lsrc++;
+			while (temp--);
+			dest = ldest;
+			src = lsrc;
+		}
+		if (n & 2) {
+			short *sdest = dest;
+			const short *ssrc = src;
+			*sdest++ = *ssrc++;
+			dest = sdest;
+			src = ssrc;
+		}
+		if (n & 1) {
+			char *cdest = dest;
+			const char *csrc = src;
+			*cdest = *csrc;
+		}
+	} else {
+		dest = (char *)dest + n;
+		src = (const char *)src + n;
+		if ((long)dest & 1) {
+			char *cdest = dest;
+			const char *csrc = src;
+			*--cdest = *--csrc;
+			dest = cdest;
+			src = csrc;
+			n--;
+		}
+		if (n > 2 && (long)dest & 2) {
+			short *sdest = dest;
+			const short *ssrc = src;
+			*--sdest = *--ssrc;
+			dest = sdest;
+			src = ssrc;
+			n -= 2;
+		}
+		temp = n >> 2;
+		if (temp) {
+			long *ldest = dest;
+			const long *lsrc = src;
+			temp--;
+			do
+				*--ldest = *--lsrc;
+			while (temp--);
+			dest = ldest;
+			src = lsrc;
+		}
+		if (n & 2) {
+			short *sdest = dest;
+			const short *ssrc = src;
+			*--sdest = *--ssrc;
+			dest = sdest;
+			src = ssrc;
+		}
+		if (n & 1) {
+			char *cdest = dest;
+			const char *csrc = src;
+			*--cdest = *--csrc;
+		}
+	}
+	return xdest;
+}
+EXPORT_SYMBOL(memmove);

+ 3 - 1
arch/m68knommu/platform/5249/intc2.c

@@ -50,8 +50,10 @@ static int __init mcf_intc2_init(void)
 	int irq;
 
 	/* GPIO interrupt sources */
-	for (irq = MCFINTC2_GPIOIRQ0; (irq <= MCFINTC2_GPIOIRQ7); irq++)
+	for (irq = MCFINTC2_GPIOIRQ0; (irq <= MCFINTC2_GPIOIRQ7); irq++) {
 		irq_desc[irq].chip = &intc2_irq_gpio_chip;
+		set_irq_handler(irq, handle_edge_irq);
+	}
 
 	return 0;
 }

+ 0 - 1
arch/m68knommu/platform/68328/entry.S

@@ -108,7 +108,6 @@ Luser_return:
 	movel	%d1,%a2
 1:
 	move	%a2@(TI_FLAGS),%d1	/* thread_info->flags */
-	andl	#_TIF_WORK_MASK,%d1
 	jne	Lwork_to_do
 	RESTORE_ALL
 

+ 1 - 1
arch/m68knommu/platform/68360/commproc.c

@@ -210,7 +210,7 @@ void
 cpm_install_handler(int vec, void (*handler)(), void *dev_id)
 {
 
-	request_irq(vec, handler, IRQ_FLG_LOCK, "timer", dev_id);
+	request_irq(vec, handler, 0, "timer", dev_id);
 
 /* 	if (cpm_vecs[vec].handler != 0) */
 /* 		printk(KERN_INFO "CPM interrupt %x replacing %x\n", */

+ 1 - 1
arch/m68knommu/platform/68360/config.c

@@ -75,7 +75,7 @@ void hw_timer_init(void)
   /* Set compare register  32Khz / 32 / 10 = 100 */
   TCMP = 10;                                                              
 
-  request_irq(IRQ_MACHSPEC | 1, timer_routine, IRQ_FLG_LOCK, "timer", NULL);
+  request_irq(IRQ_MACHSPEC | 1, timer_routine, 0, "timer", NULL);
 #endif
 
   /* General purpose quicc timers: MC68360UM p7-20 */

+ 0 - 1
arch/m68knommu/platform/68360/entry.S

@@ -104,7 +104,6 @@ Luser_return:
 	movel	%d1,%a2
 1:
 	move	%a2@(TI_FLAGS),%d1	/* thread_info->flags */
-	andl	#_TIF_WORK_MASK,%d1
 	jne	Lwork_to_do
 	RESTORE_ALL
 

+ 2 - 2
arch/m68knommu/platform/68360/ints.c

@@ -132,8 +132,8 @@ void init_IRQ(void)
 	pquicc->intr_cimr = 0x00000000;
 
 	for (i = 0; (i < NR_IRQS); i++) {
-		set_irq_chip(irq, &intc_irq_chip);
-		set_irq_handler(irq, handle_level_irq);
+		set_irq_chip(i, &intc_irq_chip);
+		set_irq_handler(i, handle_level_irq);
 	}
 }
 

+ 0 - 1
arch/m68knommu/platform/coldfire/entry.S

@@ -138,7 +138,6 @@ Luser_return:
 	andl	#-THREAD_SIZE,%d1	/* at base of kernel stack */
 	movel	%d1,%a0
 	movel	%a0@(TI_FLAGS),%d1	/* get thread_info->flags */
-	andl	#0xefff,%d1
 	jne	Lwork_to_do		/* still work to do */
 
 Lreturn:

+ 1 - 1
arch/microblaze/include/asm/irqflags.h

@@ -12,7 +12,7 @@
 #include <linux/types.h>
 #include <asm/registers.h>
 
-#ifdef CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
+#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
 
 static inline unsigned long arch_local_irq_save(void)
 {

+ 13 - 14
arch/microblaze/include/asm/pgtable.h

@@ -411,20 +411,19 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
 static inline unsigned long pte_update(pte_t *p, unsigned long clr,
 				unsigned long set)
 {
-	unsigned long old, tmp, msr;
-
-	__asm__ __volatile__("\
-	msrclr	%2, 0x2\n\
-	nop\n\
-	lw	%0, %4, r0\n\
-	andn	%1, %0, %5\n\
-	or	%1, %1, %6\n\
-	sw	%1, %4, r0\n\
-	mts     rmsr, %2\n\
-	nop"
-	: "=&r" (old), "=&r" (tmp), "=&r" (msr), "=m" (*p)
-	: "r" ((unsigned long)(p + 1) - 4), "r" (clr), "r" (set), "m" (*p)
-	: "cc");
+	unsigned long flags, old, tmp;
+
+	raw_local_irq_save(flags);
+
+	__asm__ __volatile__(	"lw	%0, %2, r0	\n"
+				"andn	%1, %0, %3	\n"
+				"or	%1, %1, %4	\n"
+				"sw	%1, %2, r0	\n"
+			: "=&r" (old), "=&r" (tmp)
+			: "r" ((unsigned long)(p + 1) - 4), "r" (clr), "r" (set)
+			: "cc");
+
+	raw_local_irq_restore(flags);
 
 	return old;
 }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác