Conflict between Versatile Express DT conversion and local timer updates

Russell King - ARM Linux linux at arm.linux.org.uk
Mon Mar 12 19:59:51 EDT 2012


On Mon, Mar 12, 2012 at 11:10:16PM +0000, Russell King - ARM Linux wrote:
> Marc, Pawel,
> 
> Your changes are conflicting badly.  Seriously badly.  So badly that I'm
> not bothering to fix the conflicts because I can't work out what the fix
> should be.
> 
> You both work for the same frigging organization and yet you seem to
> work completely independently (I really don't care if you work in
> different departments - the fact of the matter is you're touching the
> same code in completely different ways with zero coordination between
> yourselves.  That's simply broken workflow.)
> 
> For example, Marc's deleting arch/arm/plat-versatile/localtimer.c, but
> Pawel is modifying it to add DT support for Versatile Express.  The
> correct solution?  Hell knows.  And I don't want a solution to the merge
> conflict.  I want the merge conflict to go away (because I'm not frigging
> around applying the same git-rerere immune fixes to a tree I'm regenerating
> each night for the kernel autobuilder.)
> 
> I'm getting conflicts in arch/arm/mach-vexpress/ct-ca9x4.c and
> arch/arm/mach-ux500/timer.c as well, which I'm not going to bother trying
> to sort out - the obvious solution for ux500/timer.c doesn't look right.
> 
> I've a mind to drop the localtimer changes on the floor until after this
> merge window, but unfortunately they're part of devel-stable so I can't.

Correction: I haven't been pushing out my devel-stable branch for
apparantly two months (according to gitweb, and no one noticed?), so I
_could_ drop the merge of Marc's tree until the conflicts can be sanely
resolved.

> 
> How do we fix this?
> 
> (In the mean time, I've had to reset the kernel autobuilder back to last
> nights tree, which is -rc6 based.)
> 
> diff --cc arch/arm/mach-ux500/timer.c
> index cadf982,fd00024..0000000
> --- a/arch/arm/mach-ux500/timer.c
> +++ b/arch/arm/mach-ux500/timer.c
> @@@ -15,38 -15,22 +15,52 @@@
>   #include <mach/setup.h>
>   #include <mach/hardware.h>
>   
>  +#ifdef CONFIG_HAVE_ARM_TWD
>  +static DEFINE_TWD_LOCAL_TIMER(u5500_twd_local_timer,
>  +			      U5500_TWD_BASE, IRQ_LOCALTIMER);
>  +static DEFINE_TWD_LOCAL_TIMER(u8500_twd_local_timer,
>  +			      U8500_TWD_BASE, IRQ_LOCALTIMER);
>  +
>  +static void __init ux500_twd_init(void)
>  +{
>  +	struct twd_local_timer *twd_local_timer;
>  +	int err;
>  +
>  +	twd_local_timer = cpu_is_u5500() ? &u5500_twd_local_timer :
>  +					   &u8500_twd_local_timer;
>  +
>  +	err = twd_local_timer_register(twd_local_timer);
>  +	if (err)
>  +		pr_err("twd_local_timer_register failed %d\n", err);
>  +}
>  +#else
>  +#define ux500_twd_init()	do { } while(0)
>  +#endif
>  +
>   static void __init ux500_timer_init(void)
>   {
> + 	void __iomem *mtu_timer_base;
>   	void __iomem *prcmu_timer_base;
>  +	int err;
>   
>   	if (cpu_is_u5500()) {
> ++<<<<<<< HEAD
>  +		mtu_base = __io_address(U5500_MTU0_BASE);
>  +		prcmu_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE);
>  +	} else if (cpu_is_u8500()) {
>  +		mtu_base = __io_address(U8500_MTU0_BASE);
> ++=======
> + #ifdef CONFIG_LOCAL_TIMERS
> + 		twd_base = __io_address(U5500_TWD_BASE);
> + #endif
> + 		mtu_timer_base = __io_address(U5500_MTU0_BASE);
> + 		prcmu_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE);
> + 	} else if (cpu_is_u8500()) {
> + #ifdef CONFIG_LOCAL_TIMERS
> + 		twd_base = __io_address(U8500_TWD_BASE);
> + #endif
> + 		mtu_timer_base = __io_address(U8500_MTU0_BASE);
> ++>>>>>>> arm-soc
>   		prcmu_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE);
>   	} else {
>   		ux500_unknown_soc();
> @@@ -69,9 -53,8 +83,9 @@@
>   	 *
>   	 */
>   
> - 	nmdk_timer_init();
> + 	nmdk_timer_init(mtu_timer_base);
>   	clksrc_dbx500_prcmu_init(prcmu_timer_base);
>  +	ux500_twd_init();
>   }
>   
>   static void ux500_timer_reset(void)
> diff --cc arch/arm/mach-vexpress/ct-ca9x4.c
> index b391538,73791f0..0000000
> --- a/arch/arm/mach-vexpress/ct-ca9x4.c
> +++ b/arch/arm/mach-vexpress/ct-ca9x4.c
> @@@ -54,44 -42,17 +42,50 @@@ static struct map_desc ct_ca9x4_io_desc
>   static void __init ct_ca9x4_map_io(void)
>   {
>   	iotable_init(ct_ca9x4_io_desc, ARRAY_SIZE(ct_ca9x4_io_desc));
> ++<<<<<<< HEAD
> ++=======
> + #ifdef CONFIG_LOCAL_TIMERS
> + 	twd_base = ioremap(A9_MPCORE_TWD, SZ_32);
> + #endif
> ++>>>>>>> arm-soc
>   }
>   
>  +#ifdef CONFIG_HAVE_ARM_TWD
>  +static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, A9_MPCORE_TWD, IRQ_LOCALTIMER);
>  +
>  +static void __init ca9x4_twd_init(void)
>  +{
>  +	int err = twd_local_timer_register(&twd_local_timer);
>  +	if (err)
>  +		pr_err("twd_local_timer_register failed %d\n", err);
>  +}
>  +#else
>  +#define ca9x4_twd_init()	do {} while(0)
>  +#endif
>  +
>   static void __init ct_ca9x4_init_irq(void)
>   {
> ++<<<<<<< HEAD
>  +	gic_init(0, 29, MMIO_P2V(A9_MPCORE_GIC_DIST),
>  +		 MMIO_P2V(A9_MPCORE_GIC_CPU));
>  +	ca9x4_twd_init();
>  +}
>  +
>  +#if 0
>  +static void __init ct_ca9x4_timer_init(void)
>  +{
>  +	writel(0, MMIO_P2V(CT_CA9X4_TIMER0) + TIMER_CTRL);
>  +	writel(0, MMIO_P2V(CT_CA9X4_TIMER1) + TIMER_CTRL);
>  +
>  +	sp804_clocksource_init(MMIO_P2V(CT_CA9X4_TIMER1), "ct-timer1");
>  +	sp804_clockevents_init(MMIO_P2V(CT_CA9X4_TIMER0), IRQ_CT_CA9X4_TIMER0,
>  +		"ct-timer0");
> ++=======
> + 	gic_init(0, 29, ioremap(A9_MPCORE_GIC_DIST, SZ_4K),
> + 		 ioremap(A9_MPCORE_GIC_CPU, SZ_256));
> ++>>>>>>> arm-soc
>   }
>   
> - static struct sys_timer ct_ca9x4_timer = {
> - 	.init	= ct_ca9x4_timer_init,
> - };
> - #endif
> - 
>   static void ct_ca9x4_clcd_enable(struct clcd_fb *fb)
>   {
>   	v2m_cfg_write(SYS_CFG_MUXFPGA | SYS_CFG_SITE_DB1, 0);
> 



More information about the linux-arm-kernel mailing list