From: Russell King Date: Sun, 20 Mar 2011 09:32:12 +0000 (+0000) Subject: Merge branches 'fixes', 'pgt-next' and 'versatile' into devel X-Git-Tag: v2.6.39-rc1~100^2~2 X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=commitdiff_plain;h=196f020fbbb83d246960548e73a40fd08f3e7866 Merge branches 'fixes', 'pgt-next' and 'versatile' into devel --- 196f020fbbb83d246960548e73a40fd08f3e7866 diff --cc arch/arm/Kconfig index e34bf0272da4,166efa2a19cd,db524e75c4a2,a6ccef6d9d72..f785b49bf1f5 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@@@@ -7,10 -7,10 -6,10 -7,10 +7,10 @@@@@ config AR select HAVE_MEMBLOCK select RTC_LIB select SYS_SUPPORTS_APM_EMULATION --- select GENERIC_ATOMIC64 if (!CPU_32v6K || !AEABI) +++ select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI) select HAVE_OPROFILE if (HAVE_PERF_EVENTS) select HAVE_ARCH_KGDB - select HAVE_KPROBES if (!XIP_KERNEL) + select HAVE_KPROBES if (!XIP_KERNEL && !THUMB2_KERNEL) select HAVE_KRETPROBES if (HAVE_KPROBES) select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL) @@@@@ -24,10 -24,10 -22,7 -24,10 +24,10 @@@@@ select HAVE_PERF_EVENTS select PERF_USE_VMALLOC select HAVE_REGS_AND_STACK_ACCESS_API --- select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7)) +++ select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) + select HAVE_C_RECORDMCOUNT + select HAVE_GENERIC_HARDIRQS + select HAVE_SPARSE_IRQ help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and @@@@@ -182,6 -178,11 -171,14 -178,11 +182,6 @@@@@ config FI config ARCH_MTD_XIP bool - config GENERIC_HARDIRQS_NO__DO_IRQ - def_bool y - ---config ARM_L1_CACHE_SHIFT_6 --- bool --- help --- Setting ARM L1 cache line size to 64 Bytes. --- config VECTORS_BASE hex default 0xffff0000 if MMU || CPU_HIGH_VECTOR @@@@@ -241,8 -235,8 -231,7 -236,7 +242,7 @@@@@ config ARCH_INTEGRATO config ARCH_REALVIEW bool "ARM Ltd. RealView family" select ARM_AMBA - select COMMON_CLKDEV + select CLKDEV_LOOKUP -- select HAVE_SCHED_CLOCK select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB @@@@@ -256,8 -250,8 -245,7 -251,7 +257,7 @@@@@ config ARCH_VERSATIL bool "ARM Ltd. Versatile family" select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select CLKDEV_LOOKUP -- select HAVE_SCHED_CLOCK select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB @@@@@ -271,12 -265,12 -259,11 -267,13 +273,13 @@@@@ config ARCH_VEXPRES select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_TIMER_SP804 - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select HAVE_CLK -- select HAVE_SCHED_CLOCK +++ select HAVE_PATA_PLATFORM select ICST select PLAT_VERSATILE +++ select PLAT_VERSATILE_CLCD help This enables support for the ARM Ltd Versatile Express boards. @@@@@ -1008,9 -1006,7 -972,7 -1009,8 +1011,10 @@@@@ source "arch/arm/mach-ux500/Kconfig source "arch/arm/mach-versatile/Kconfig" source "arch/arm/mach-vexpress/Kconfig" +++ source "arch/arm/plat-versatile/Kconfig" ++ +++source "arch/arm/mach-vt8500/Kconfig" + source "arch/arm/mach-w90x900/Kconfig" # Definitions to make life easier @@@@@ -1191,53 -1177,31 -1136,6 -1181,6 +1195,53 @@@@@ 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. +++ endmenu source "arch/arm/common/Kconfig" @@@@@ -1311,14 -1275,13 -1203,12 -1254,13 +1315,14 @@@@@ source "kernel/time/Kconfig config SMP bool "Symmetric Multi-Processing (EXPERIMENTAL)" depends on EXPERIMENTAL +++ depends on CPU_V6K || CPU_V7 depends on GENERIC_CLOCKEVENTS depends on REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP || \ - MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\ - ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4 + MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \ + ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || \ + ARCH_MSM_SCORPIONMP || ARCH_SHMOBILE select USE_GENERIC_SMP_HELPERS - select HAVE_ARM_SCU + select HAVE_ARM_SCU if !ARCH_MSM_SCORPIONMP 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 @@@@@ -1422,8 -1385,8 -1310,8 -1364,8 +1426,8 @@@@@ config H default 100 config THUMB2_KERNEL - bool "Compile the kernel in Thumb-2 mode" - depends on CPU_V7 && EXPERIMENTAL + bool "Compile the kernel in Thumb-2 mode (EXPERIMENTAL)" - - depends on CPU_V7 && !CPU_V6 && EXPERIMENTAL +++ depends on CPU_V7 && !CPU_V6 && !CPU_V6K && EXPERIMENTAL select AEABI select ARM_ASM_UNIFIED help diff --cc arch/arm/include/asm/setup.h index da8b52ec49cf,f1e5a9bca249,50921182b7c3,f1e5a9bca249..95176af3df8c --- a/arch/arm/include/asm/setup.h +++ b/arch/arm/include/asm/setup.h @@@@@ -192,10 -192,14 -192,14 -192,14 +192,10 @@@@@ static struct tagtable __tagtable_##fn /* * Memory map description */ ---#ifdef CONFIG_ARCH_LH7A40X ---# define NR_BANKS 16 ---#else ---# define NR_BANKS 8 ---#endif +++#define NR_BANKS 8 struct membank { -- - unsigned long start; ++ + phys_addr_t start; unsigned long size; unsigned int highmem; }; diff --cc arch/arm/kernel/setup.c index d1da92174277,5ea4fb718b97,9d4a84402ae9,420b8d6485d6..d149539ccd68 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@@@@ -447,26 -431,19 -430,19 -431,19 +447,26 @@@@@ static struct machine_desc * __init set /* * locate machine in the list of supported machines. */ --- list = lookup_machine_type(nr); --- if (!list) { --- printk("Machine configuration botched (nr %d), unable " --- "to continue.\n", nr); --- while (1); --- } +++ for (p = __arch_info_begin; p < __arch_info_end; p++) +++ if (nr == p->nr) { +++ printk("Machine: %s\n", p->name); +++ return p; +++ } +++ +++ early_print("\n" +++ "Error: unrecognized/unsupported machine ID (r1 = 0x%08x).\n\n" +++ "Available machine support:\n\nID (hex)\tNAME\n", nr); + - - printk("Machine: %s\n", list->name); +++ for (p = __arch_info_begin; p < __arch_info_end; p++) +++ early_print("%08x\t%s\n", p->nr, p->name); - - return list; - printk("Machine: %s\n", list->name); +++ early_print("\nPlease check your kernel config and/or bootloader.\n"); + + - return list; +++ while (true) +++ /* can't use cpu_relax() here as it may require MMU setup */; } -- -static int __init arm_add_memory(unsigned long start, unsigned long size) ++ +static int __init arm_add_memory(phys_addr_t start, unsigned long size) { struct membank *bank = &meminfo.bank[meminfo.nr_banks]; diff --cc arch/arm/mach-omap2/Kconfig index b69fa0a0299e,1a2cf6226a55,ab784bfde908,ec55fd830f62..6819c64594ef --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@@@@ -44,12 -44,11 -42,8 -44,12 +44,13 @@@@@ config ARCH_OMAP depends on ARCH_OMAP2PLUS select CPU_V7 select ARM_GIC +++ select LOCAL_TIMERS if SMP select PL310_ERRATA_588369 +++ select PL310_ERRATA_727915 select ARM_ERRATA_720789 + select ARCH_HAS_OPP + select PM_OPP if PM + select USB_ARCH_HAS_EHCI comment "OMAP Core Type" depends on ARCH_OMAP2 diff --cc arch/arm/mach-realview/realview_eb.c index 8ede983b861c,6ef5c5e528b2,f2697106f809,d0f851b886db..2ecc1d94284e --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c @@@@@ -484,9 -484,9 -486,9 -463,10 +463,10 @@@@@ static void __init realview_eb_init(voi MACHINE_START(REALVIEW_EB, "ARM-RealView EB") /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ --- .boot_params = PHYS_OFFSET + 0x00000100, +++ .boot_params = PLAT_PHYS_OFFSET + 0x00000100, .fixup = realview_fixup, .map_io = realview_eb_map_io, +++ .init_early = realview_init_early, .init_irq = gic_init_irq, .timer = &realview_eb_timer, .init_machine = realview_eb_init, diff --cc arch/arm/mach-realview/realview_pb1176.c index 9f26369555c7,cbdc97a5685f,a4125619d71b,61f6a9d853fc..eab6070f66d0 --- a/arch/arm/mach-realview/realview_pb1176.c +++ b/arch/arm/mach-realview/realview_pb1176.c @@@@@ -379,9 -379,9 -378,9 -358,10 +358,10 @@@@@ static void __init realview_pb1176_init MACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176") /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ --- .boot_params = PHYS_OFFSET + 0x00000100, +++ .boot_params = PLAT_PHYS_OFFSET + 0x00000100, .fixup = realview_pb1176_fixup, .map_io = realview_pb1176_map_io, +++ .init_early = realview_init_early, .init_irq = gic_init_irq, .timer = &realview_pb1176_timer, .init_machine = realview_pb1176_init, diff --cc arch/arm/mach-realview/realview_pb11mp.c index dea06b2da3a2,8e8ab7d29a6a,117b95b2ca15,27bfeca89129..b2985fc7cd4e --- a/arch/arm/mach-realview/realview_pb11mp.c +++ b/arch/arm/mach-realview/realview_pb11mp.c @@@@@ -381,9 -381,9 -381,9 -360,10 +360,10 @@@@@ static void __init realview_pb11mp_init MACHINE_START(REALVIEW_PB11MP, "ARM-RealView PB11MPCore") /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ --- .boot_params = PHYS_OFFSET + 0x00000100, +++ .boot_params = PLAT_PHYS_OFFSET + 0x00000100, .fixup = realview_fixup, .map_io = realview_pb11mp_map_io, +++ .init_early = realview_init_early, .init_irq = gic_init_irq, .timer = &realview_pb11mp_timer, .init_machine = realview_pb11mp_init, diff --cc arch/arm/mach-realview/realview_pba8.c index 7d0f1734a217,841118e3e118,929b8dc12e81,11972df94313..fb6866558760 --- a/arch/arm/mach-realview/realview_pba8.c +++ b/arch/arm/mach-realview/realview_pba8.c @@@@@ -331,9 -331,9 -331,9 -310,10 +310,10 @@@@@ static void __init realview_pba8_init(v MACHINE_START(REALVIEW_PBA8, "ARM-RealView PB-A8") /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ --- .boot_params = PHYS_OFFSET + 0x00000100, +++ .boot_params = PLAT_PHYS_OFFSET + 0x00000100, .fixup = realview_fixup, .map_io = realview_pba8_map_io, +++ .init_early = realview_init_early, .init_irq = gic_init_irq, .timer = &realview_pba8_timer, .init_machine = realview_pba8_init, diff --cc arch/arm/mach-realview/realview_pbx.c index b89e28f8853e,02b755b009db,b9f9e20031a7,73ab3ca9355e..92ace2cf2b2c --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c @@@@@ -414,9 -414,9 -417,9 -393,10 +393,10 @@@@@ static void __init realview_pbx_init(vo MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX") /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ --- .boot_params = PHYS_OFFSET + 0x00000100, +++ .boot_params = PLAT_PHYS_OFFSET + 0x00000100, .fixup = realview_pbx_fixup, .map_io = realview_pbx_map_io, +++ .init_early = realview_init_early, .init_irq = gic_init_irq, .timer = &realview_pbx_timer, .init_machine = realview_pbx_init, diff --cc arch/arm/mach-vexpress/ct-ca9x4.c index e9bccc5230c9,e628402b754c,fd25ccd7272f,ff48ebc1a40b..30d5a5b0ac21 --- a/arch/arm/mach-vexpress/ct-ca9x4.c +++ b/arch/arm/mach-vexpress/ct-ca9x4.c @@@@@ -112,32 -112,32 -116,32 -91,12 +91,12 @@@@@ static void ct_ca9x4_clcd_enable(struc static int ct_ca9x4_clcd_setup(struct clcd_fb *fb) { unsigned long framesize = 1024 * 768 * 2; --- dma_addr_t dma; -- -- fb->panel = &xvga_panel; -- fb->fb.screen_base = dma_alloc_writecombine(&fb->dev->dev, framesize, -- &dma, GFP_KERNEL); -- if (!fb->fb.screen_base) { -- printk(KERN_ERR "CLCD: unable to map frame buffer\n"); -- return -ENOMEM; -- } -- fb->fb.fix.smem_start = dma; -- fb->fb.fix.smem_len = framesize; -- -- return 0; -- } -- -- static int ct_ca9x4_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma) -- { -- return dma_mmap_writecombine(&fb->dev->dev, vma, fb->fb.screen_base, -- fb->fb.fix.smem_start, fb->fb.fix.smem_len); -- } - fb->panel = &xvga_panel; +++ fb->panel = versatile_clcd_get_panel("XVGA"); +++ if (!fb->panel) +++ return -EINVAL; - fb->fb.screen_base = dma_alloc_writecombine(&fb->dev->dev, framesize, - &dma, GFP_KERNEL); - if (!fb->fb.screen_base) { - printk(KERN_ERR "CLCD: unable to map frame buffer\n"); - return -ENOMEM; - } - fb->fb.fix.smem_start = dma; - fb->fb.fix.smem_len = framesize; - - return 0; - } - - static int ct_ca9x4_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma) - { - return dma_mmap_writecombine(&fb->dev->dev, vma, fb->fb.screen_base, - fb->fb.fix.smem_start, fb->fb.fix.smem_len); - } - --- static void ct_ca9x4_clcd_remove(struct clcd_fb *fb) --- { --- dma_free_writecombine(&fb->dev->dev, fb->fb.fix.smem_len, --- fb->fb.screen_base, fb->fb.fix.smem_start); +++ return versatile_clcd_setup_dma(fb, framesize); } static struct clcd_board ct_ca9x4_clcd_data = { @@@@@ -243,9 -243,9 -247,9 -208,10 +208,10 @@@@@ static void __init ct_ca9x4_init(void } MACHINE_START(VEXPRESS, "ARM-Versatile Express CA9x4") --- .boot_params = PHYS_OFFSET + 0x00000100, +++ .boot_params = PLAT_PHYS_OFFSET + 0x00000100, .map_io = ct_ca9x4_map_io, .init_irq = ct_ca9x4_init_irq, +++ .init_early = ct_ca9x4_init_early, #if 0 .timer = &ct_ca9x4_timer, #else