From: Russell King Date: Thu, 6 Jan 2011 22:33:32 +0000 (+0000) Subject: Merge branch 'devel-stable' into devel X-Git-Tag: v2.6.38-rc1~471^2 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=404a02cbd2ae8bf256a2fa1169bdfe86bb5ebb34;p=linux.git Merge branch 'devel-stable' into devel Conflicts: arch/arm/mach-pxa/clock.c arch/arm/mach-pxa/clock.h --- 404a02cbd2ae8bf256a2fa1169bdfe86bb5ebb34 diff --cc arch/arm/Kconfig index 32cbf3e888ff,fac58916adec..a3fb23be87f3 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@@ -815,8 -804,9 +823,9 @@@ config ARCH_U850 select CPU_V7 select ARM_AMBA select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB + select ARCH_HAS_CPUFREQ help Support for ST-Ericsson's Ux500 architecture diff --cc arch/arm/mach-davinci/time.c index c1486716de77,5d1eea026635..e1969ce904dc --- a/arch/arm/mach-davinci/time.c +++ b/arch/arm/mach-davinci/time.c @@@ -272,10 -272,21 +272,20 @@@ static cycle_t read_cycles(struct clock return (cycles_t)timer32_read(t); } + /* + * Kernel assumes that sched_clock can be called early but may not have + * things ready yet. + */ + static cycle_t read_dummy(struct clocksource *cs) + { + return 0; + } + + static struct clocksource clocksource_davinci = { .rating = 300, - .read = read_cycles, + .read = read_dummy, .mask = CLOCKSOURCE_MASK(32), - .shift = 24, .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; @@@ -376,9 -398,12 +397,10 @@@ static void __init davinci_timer_init(v davinci_clock_tick_rate = clk_get_rate(timer_clk); /* setup clocksource */ + clocksource_davinci.read = read_cycles; clocksource_davinci.name = id_to_name[clocksource_id]; - clocksource_davinci.mult = - clocksource_khz2mult(davinci_clock_tick_rate/1000, - clocksource_davinci.shift); - if (clocksource_register(&clocksource_davinci)) + if (clocksource_register_hz(&clocksource_davinci, + davinci_clock_tick_rate)) printk(err, clocksource_davinci.name); /* setup clockevent */ diff --cc arch/arm/mach-pxa/clock.c index 4e4a84be96ba,8184fe2d71c3..d5152220ce94 --- a/arch/arm/mach-pxa/clock.c +++ b/arch/arm/mach-pxa/clock.c @@@ -3,21 -3,12 +3,11 @@@ */ #include #include - #include - #include - #include - #include #include #include - #include #include - -#include +#include - #include - #include - - #include "devices.h" - #include "generic.h" #include "clock.h" static DEFINE_SPINLOCK(clocks_lock); diff --cc arch/arm/mach-pxa/clock.h index 12cc0e87e6c4,6e949944f2ec..f9f349a21b54 --- a/arch/arm/mach-pxa/clock.h +++ b/arch/arm/mach-pxa/clock.h @@@ -1,4 -1,5 +1,5 @@@ +#include + #include -#include struct clkops { void (*enable)(struct clk *); diff --cc arch/arm/mach-ux500/cpu.c index 7328c0179769,a3700bc374d3..5730409c0f7d --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c @@@ -54,15 -50,10 +50,10 @@@ void __init ux500_map_io(void iotable_init(ux500_io_desc, ARRAY_SIZE(ux500_io_desc)); } - void __init ux500_init_devices(void) - { - amba_add_devices(ux500_amba_devs, ARRAY_SIZE(ux500_amba_devs)); - } - void __init ux500_init_irq(void) { - gic_dist_init(0, __io_address(UX500_GIC_DIST_BASE), 29); - gic_cpu_init(0, __io_address(UX500_GIC_CPU_BASE)); + gic_init(0, 29, __io_address(UX500_GIC_DIST_BASE), + __io_address(UX500_GIC_CPU_BASE)); /* * Init clocks here so that they are available for system timer diff --cc arch/arm/mach-ux500/platsmp.c index 2115a0cf07b0,ade2e17f253c..d77e76cb7edd --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c @@@ -25,19 -26,11 +25,19 @@@ * control for which core is the next to come out of the secondary * boot "holding pen" */ - volatile int __cpuinitdata pen_release = -1; + volatile int pen_release = -1; -static unsigned int __init get_core_count(void) +/* + * Write pen_release in a way that is guaranteed to be visible to all + * observers, irrespective of whether they're taking part in coherency + * or not. This is necessary for the hotplug code to work reliably. + */ +static void write_pen_release(int val) { - return scu_get_core_count(__io_address(UX500_SCU_BASE)); + pen_release = val; + smp_wmb(); + __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); + outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1)); } static DEFINE_SPINLOCK(boot_lock);