]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branches 'fixes', 'gpio', 'io' (early part), 'misc', 'p2v' and 'pgt' into for...
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 19 Aug 2011 07:57:44 +0000 (08:57 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 19 Aug 2011 07:57:44 +0000 (08:57 +0100)
1  2  3  4  5  6 
arch/arm/Kconfig
arch/arm/include/asm/hardware/cache-l2x0.h
arch/arm/include/asm/pgalloc.h
arch/arm/include/asm/tlb.h
arch/arm/mach-mmp/aspenite.c
arch/arm/mach-msm/board-msm7x30.c

index 3269576dbfa8dab12d6531996e2e86de2ca309c1,2c71a8f3535a1400c2d187e7fa612e00995e6927,2c71a8f3535a1400c2d187e7fa612e00995e6927,ac1ba259c07feb904bc414537bd5e0fb183f2d94,272eadc7a12cc552497dd3ad437c0ed76f7438a1,db524e75c4a21e4f45bc4b72e459adcdaf1dda4b..63cbd866453b6632c8fb3b9598a124ace5b96300
@@@@@@@ -194,27 -194,28 -194,28 -194,28 -194,24 -187,6 +194,24 @@@@@@@ config VECTORS_BAS
        help
          The base address of exception vectors.
      
-       bool "Patch physical to virtual translations at runtime"
 ---    bool "Patch physical to virtual translations at runtime (EXPERIMENTAL)"
 ---    depends on EXPERIMENTAL
     +config ARM_PATCH_PHYS_VIRT
----      of physical memory is at a 16MB boundary, or theoretically 64K
----      for the MSM machine class.
++++ +  bool "Patch physical to virtual translations at runtime" if EMBEDDED
++++ +  default y
     +  depends on !XIP_KERNEL && MMU
     +  depends on !ARCH_REALVIEW || !SPARSEMEM
     +  help
     +    Patch phys-to-virt and virt-to-phys translation functions at
     +    boot and module load time according to the position of the
     +    kernel in system memory.
     +
     +    This can only be used with non-XIP MMU kernels where the base
----  config ARM_PATCH_PHYS_VIRT_16BIT
----    def_bool y
----    depends on ARM_PATCH_PHYS_VIRT && ARCH_MSM
----    help
----      This option extends the physical to virtual translation patching
----      to allow physical memory down to a theoretical minimum of 64K
----      boundaries.
++++ +    of physical memory is at a 16MB boundary.
++++ +
++++ +    Only disable this option if you know that you do not require
++++ +    this feature (eg, building a kernel for a single machine) and
++++ +    you need to shrink the kernel to the minimal size.
     +
     +
      source "init/Kconfig"
      
      source "kernel/Kconfig.freezer"
@@@@@@@ -300,8 -301,8 -301,8 -301,8 -297,7 -271,6 +297,7 @@@@@@@ config ARCH_AT9
        bool "Atmel AT91"
        select ARCH_REQUIRE_GPIOLIB
        select HAVE_CLK
----    select ARM_PATCH_PHYS_VIRT if MMU
     +  select CLKDEV_LOOKUP
        help
          This enables support for systems based on the Atmel AT91RM9200,
          AT91SAM9 and AT91CAP9 processors.
@@@@@@@ -1224,65 -1225,53 -1225,53 -1225,53 -1220,53 -1136,6 +1220,65 @@@@@@@ config ARM_ERRATA_74362
          visible impact on the overall performance or power consumption of the
          processor.
      
     +config ARM_ERRATA_751472
     +  bool "ARM errata: Interrupted ICIALLUIS may prevent completion of broadcasted operation"
     +  depends on CPU_V7 && SMP
     +  help
     +    This option enables the workaround for the 751472 Cortex-A9 (prior
     +    to r3p0) erratum. An interrupted ICIALLUIS operation may prevent the
     +    completion of a following broadcasted operation if the second
     +    operation is received by a CPU before the ICIALLUIS has completed,
     +    potentially leading to corrupted entries in the cache or TLB.
     +
     +config ARM_ERRATA_753970
     +  bool "ARM errata: cache sync operation may be faulty"
     +  depends on CACHE_PL310
     +  help
     +    This option enables the workaround for the 753970 PL310 (r3p0) erratum.
     +
     +    Under some condition the effect of cache sync operation on
     +    the store buffer still remains when the operation completes.
     +    This means that the store buffer is always asked to drain and
     +    this prevents it from merging any further writes. The workaround
     +    is to replace the normal offset of cache sync operation (0x730)
     +    by another offset targeting an unmapped PL310 register 0x740.
     +    This has the same effect as the cache sync operation: store buffer
     +    drain and waiting for all buffers empty.
     +
     +config ARM_ERRATA_754322
     +  bool "ARM errata: possible faulty MMU translations following an ASID switch"
     +  depends on CPU_V7
     +  help
     +    This option enables the workaround for the 754322 Cortex-A9 (r2p*,
     +    r3p*) erratum. A speculative memory access may cause a page table walk
     +    which starts prior to an ASID switch but completes afterwards. This
     +    can populate the micro-TLB with a stale entry which may be hit with
     +    the new ASID. This workaround places two dsb instructions in the mm
     +    switching code so that no page table walks can cross the ASID switch.
     +
     +config ARM_ERRATA_754327
     +  bool "ARM errata: no automatic Store Buffer drain"
     +  depends on CPU_V7 && SMP
     +  help
     +    This option enables the workaround for the 754327 Cortex-A9 (prior to
     +    r2p0) erratum. The Store Buffer does not have any automatic draining
     +    mechanism and therefore a livelock may occur if an external agent
     +    continuously polls a memory location waiting to observe an update.
     +    This workaround defines cpu_relax() as smp_mb(), preventing correctly
     +    written polling loops from denying visibility of updates to memory.
     +
 +++++config ARM_ERRATA_364296
 +++++  bool "ARM errata: Possible cache data corruption with hit-under-miss enabled"
 +++++  depends on CPU_V6 && !SMP
 +++++  help
 +++++    This options enables the workaround for the 364296 ARM1136
 +++++    r0p2 erratum (possible cache data corruption with
 +++++    hit-under-miss enabled). It sets the undocumented bit 31 in
 +++++    the auxiliary control register and the FI bit in the control
 +++++    register, thus disabling hit-under-miss without putting the
 +++++    processor into full low interrupt latency mode. ARM11MPCore
 +++++    is not affected.
 +++++
      endmenu
      
      source "arch/arm/common/Kconfig"
@@@@@@@ -1393,8 -1382,8 -1382,8 -1382,33 -1377,8 -1239,9 +1389,33 @@@@@@@ config SMP_ON_U
      
          If you don't know what to do here, say Y.
      
+++ ++config ARM_CPU_TOPOLOGY
+++ ++  bool "Support cpu topology definition"
+++ ++  depends on SMP && CPU_V7
+++ ++  default y
+++ ++  help
+++ ++    Support ARM cpu topology definition. The MPIDR register defines
+++ ++    affinity between processors which is then used to describe the cpu
+++ ++    topology of an ARM System.
+++ ++
+++ ++config SCHED_MC
+++ ++  bool "Multi-core scheduler support"
+++ ++  depends on ARM_CPU_TOPOLOGY
+++ ++  help
+++ ++    Multi-core scheduler support improves the CPU scheduler's decision
+++ ++    making when dealing with multi-core CPU chips at a cost of slightly
+++ ++    increased overhead in some places. If unsure say N here.
+++ ++
+++ ++config SCHED_SMT
+++ ++  bool "SMT scheduler support"
+++ ++  depends on ARM_CPU_TOPOLOGY
+++ ++  help
+++ ++    Improves the CPU scheduler's decision making when dealing with
+++ ++    MultiThreading at a cost of slightly increased overhead in some
+++ ++    places. If unsure say N here.
+++ ++
      config HAVE_ARM_SCU
        bool
     -  depends on SMP
        help
          This option enables support for the ARM system coherency unit
      
index bfa706ffd9683966dec63406c35e2e71942bd294,16bd48031583da44b7c0f25c68027fd787dc3fe1,16bd48031583da44b7c0f25c68027fd787dc3fe1,8fe149f2fcf3944cd1db3595c4faa3be25855a8b,16bd48031583da44b7c0f25c68027fd787dc3fe1,cc42d5fdee17155e920d77ed753074aee0ade487..4a6004a86a12c6728c46c8da5120d329e8bb39c0
      #define L2X0_CACHE_ID_PART_MASK           (0xf << 6)
      #define L2X0_CACHE_ID_PART_L210           (1 << 6)
      #define L2X0_CACHE_ID_PART_L310           (3 << 6)
     -#define L2X0_AUX_CTRL_WAY_SIZE_MASK       (0x3 << 17)
     +
     +#define L2X0_AUX_CTRL_MASK                        0xc0000fff
+++ ++#define L2X0_AUX_CTRL_DATA_RD_LATENCY_SHIFT       0
+++ ++#define L2X0_AUX_CTRL_DATA_RD_LATENCY_MASK        0x7
+++ ++#define L2X0_AUX_CTRL_DATA_WR_LATENCY_SHIFT       3
+++ ++#define L2X0_AUX_CTRL_DATA_WR_LATENCY_MASK        (0x7 << 3)
+++ ++#define L2X0_AUX_CTRL_TAG_LATENCY_SHIFT           6
+++ ++#define L2X0_AUX_CTRL_TAG_LATENCY_MASK            (0x7 << 6)
+++ ++#define L2X0_AUX_CTRL_DIRTY_LATENCY_SHIFT 9
+++ ++#define L2X0_AUX_CTRL_DIRTY_LATENCY_MASK  (0x7 << 9)
     +#define L2X0_AUX_CTRL_ASSOCIATIVITY_SHIFT 16
     +#define L2X0_AUX_CTRL_WAY_SIZE_SHIFT              17
 ---- #define L2X0_AUX_CTRL_WAY_SIZE_MASK               (0x3 << 17)
 +++++#define L2X0_AUX_CTRL_WAY_SIZE_MASK               (0x7 << 17)
     +#define L2X0_AUX_CTRL_SHARE_OVERRIDE_SHIFT        22
     +#define L2X0_AUX_CTRL_NS_LOCKDOWN_SHIFT           26
     +#define L2X0_AUX_CTRL_NS_INT_CTRL_SHIFT           27
     +#define L2X0_AUX_CTRL_DATA_PREFETCH_SHIFT 28
     +#define L2X0_AUX_CTRL_INSTR_PREFETCH_SHIFT        29
     +#define L2X0_AUX_CTRL_EARLY_BRESP_SHIFT           30
     +
+++ ++#define L2X0_LATENCY_CTRL_SETUP_SHIFT     0
+++ ++#define L2X0_LATENCY_CTRL_RD_SHIFT        4
+++ ++#define L2X0_LATENCY_CTRL_WR_SHIFT        8
+++ ++
+++ ++#define L2X0_ADDR_FILTER_EN               1
+++ + 
      #ifndef __ASSEMBLY__
      extern void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask);
+++ ++extern int l2x0_of_init(__u32 aux_val, __u32 aux_mask);
      #endif
      
      #endif
Simple merge
index 265f908c4a6e79b98e07d43b7614c5164e86da53,265f908c4a6e79b98e07d43b7614c5164e86da53,265f908c4a6e79b98e07d43b7614c5164e86da53,265f908c4a6e79b98e07d43b7614c5164e86da53,265f908c4a6e79b98e07d43b7614c5164e86da53,a116bef20cbe47b12fb78492076fa4408a6b2cc8..b509e441e0ad4b71915ceeedc6ee256daed458f3
@@@@@@@ -172,38 -172,38 -172,38 -172,38 -172,38 -97,14 +172,39 @@@@@@@ tlb_start_vma(struct mmu_gather *tlb, s
      static inline void
      tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
      {
     -  if (!tlb->fullmm && tlb->range_end > 0)
     -          flush_tlb_range(vma, tlb->range_start, tlb->range_end);
     +  if (!tlb->fullmm)
     +          tlb_flush(tlb);
     +}
     +
     +static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page)
     +{
     +  if (tlb_fast_mode(tlb)) {
     +          free_page_and_swap_cache(page);
     +          return 1; /* avoid calling tlb_flush_mmu */
     +  }
     +
     +  tlb->pages[tlb->nr++] = page;
     +  VM_BUG_ON(tlb->nr > tlb->max);
     +  return tlb->max - tlb->nr;
     +}
     +
     +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
     +{
     +  if (!__tlb_remove_page(tlb, page))
     +          tlb_flush_mmu(tlb);
     +}
     +
     +static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
     +  unsigned long addr)
     +{
     +  pgtable_page_dtor(pte);
     +  tlb_add_flush(tlb, addr);
     +  tlb_remove_page(tlb, pte);
      }
      
     -#define tlb_remove_page(tlb,page) free_page_and_swap_cache(page)
     -#define pte_free_tlb(tlb, ptep, addr)     pte_free((tlb)->mm, ptep)
     +#define pte_free_tlb(tlb, ptep, addr)     __pte_free_tlb(tlb, ptep, addr)
      #define pmd_free_tlb(tlb, pmdp, addr)     pmd_free((tlb)->mm, pmdp)
+++++ #define pud_free_tlb(tlb, pudp, addr)     pud_free((tlb)->mm, pudp)
      
      #define tlb_migrate_finish(mm)            do { } while (0)
      
Simple merge
index b7a84966b711bcc9658595ecfdcc789bd9e1fe70,92afaf6583ea747de18eb7c2a3e8b34d1ad69a59,b7a84966b711bcc9658595ecfdcc789bd9e1fe70,b7a84966b711bcc9658595ecfdcc789bd9e1fe70,d1e4cc83b1e6e1aa4d2bc5a6233a32e2fcccf20d,05241df3f9b6b3a4dd829029d6b97943549b824d..9043417ea52fb025f8216f7c11607bf809634c79
      #include <linux/delay.h>
      #include <linux/io.h>
      #include <linux/smsc911x.h>
     +#include <linux/usb/msm_hsusb.h>
     +#include <linux/clkdev.h>
++++ +#include <linux/memblock.h>
      
      #include <asm/mach-types.h>
      #include <asm/mach/arch.h>
     +#include <asm/memory.h>
      #include <asm/setup.h>
      
- ----#include <mach/gpio.h>
      #include <mach/board.h>
     -#include <mach/memory.h>
      #include <mach/msm_iomap.h>
      #include <mach/dma.h>
      
      
      extern struct sys_timer msm_timer;
      
++++ +static void __init msm7x30_fixup(struct machine_desc *desc, struct tag *tag,
++++ +                   char **cmdline, struct meminfo *mi)
++++ +{
++++ +  for (; tag->hdr.size; tag = tag_next(tag))
++++ +          if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) {
++++ +                  tag->u.mem.start = 0;
++++ +                  tag->u.mem.size += SZ_2M;
++++ +          }
++++ +}
++++ +
++++ +static void __init msm7x30_reserve(void)
++++ +{
++++ +  memblock_remove(0x0, SZ_2M);
++++ +}
++++ +
     +static int hsusb_phy_init_seq[] = {
     +  0x30, 0x32,     /* Enable and set Pre-Emphasis Depth to 20% */
     +  0x02, 0x36,     /* Disable CDR Auto Reset feature */
     +  -1
     +};
     +
     +static struct msm_otg_platform_data msm_otg_pdata = {
     +  .phy_init_seq           = hsusb_phy_init_seq,
     +  .mode                   = USB_PERIPHERAL,
     +  .otg_control            = OTG_PHY_CONTROL,
     +};
     +
     +struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS] = {
     +#ifdef CONFIG_SERIAL_MSM_CONSOLE
     +  [49] = { /* UART2 RFR */
     +          .suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
     +                       GPIOMUX_FUNC_2 | GPIOMUX_VALID,
     +  },
     +  [50] = { /* UART2 CTS */
     +          .suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
     +                       GPIOMUX_FUNC_2 | GPIOMUX_VALID,
     +  },
     +  [51] = { /* UART2 RX */
     +          .suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
     +                       GPIOMUX_FUNC_2 | GPIOMUX_VALID,
     +  },
     +  [52] = { /* UART2 TX */
     +          .suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
     +                       GPIOMUX_FUNC_2 | GPIOMUX_VALID,
     +  },
     +#endif
     +};
     +
      static struct platform_device *devices[] __initdata = {
      #if defined(CONFIG_SERIAL_MSM) || defined(CONFIG_MSM_SERIAL_DEBUGGER)
              &msm_device_uart2,
@@@@@@@ -106,7 -105,7 -106,7 -106,7 -122,9 -63,9 +121,9 @@@@@@@ static void __init msm7x30_map_io(void
      }
      
      MACHINE_START(MSM7X30_SURF, "QCT MSM7X30 SURF")
     -#ifdef CONFIG_MSM_DEBUG_UART
     -#endif
     -  .boot_params = PHYS_OFFSET + 0x100,
     +  .boot_params = PLAT_PHYS_OFFSET + 0x100,
++++ +  .fixup = msm7x30_fixup,
++++ +  .reserve = msm7x30_reserve,
        .map_io = msm7x30_map_io,
        .init_irq = msm7x30_init_irq,
        .init_machine = msm7x30_init,
      MACHINE_END
      
      MACHINE_START(MSM7X30_FFA, "QCT MSM7X30 FFA")
     -#ifdef CONFIG_MSM_DEBUG_UART
     -#endif
     -  .boot_params = PHYS_OFFSET + 0x100,
     +  .boot_params = PLAT_PHYS_OFFSET + 0x100,
++++ +  .fixup = msm7x30_fixup,
++++ +  .reserve = msm7x30_reserve,
        .map_io = msm7x30_map_io,
        .init_irq = msm7x30_init_irq,
        .init_machine = msm7x30_init,
      MACHINE_END
      
      MACHINE_START(MSM7X30_FLUID, "QCT MSM7X30 FLUID")
     -#ifdef CONFIG_MSM_DEBUG_UART
     -#endif
     -  .boot_params = PHYS_OFFSET + 0x100,
     +  .boot_params = PLAT_PHYS_OFFSET + 0x100,
++++ +  .fixup = msm7x30_fixup,
++++ +  .reserve = msm7x30_reserve,
        .map_io = msm7x30_map_io,
        .init_irq = msm7x30_init_irq,
        .init_machine = msm7x30_init,