SoCFPGA with CONFIG_THUMB2_KERNEL boot error

Sascha Hauer s.hauer at pengutronix.de
Wed Apr 20 23:54:10 PDT 2016


On Wed, Apr 20, 2016 at 10:55:40AM -0500, Dinh Nguyen wrote:
> >  void __init socfpga_sysmgr_init(void)
> >  {
> > @@ -38,14 +37,6 @@ void __init socfpga_sysmgr_init(void)
> >  
> >  	np = of_find_compatible_node(NULL, NULL, "altr,sys-mgr");
> >  
> > -	if (of_property_read_u32(np, "cpu1-start-addr",
> > -			(u32 *) &socfpga_cpu1start_addr))
> > -		pr_err("SMP: Need cpu1-start-addr in device tree.\n");
> > -
> > -	/* Ensure that socfpga_cpu1start_addr is visible to other CPUs */
> > -	smp_wmb();
> > -	sync_cache_w(&socfpga_cpu1start_addr);
> > -
> >  	sys_manager_base_addr = of_iomap(np, 0);
> >  
> >  	np = of_find_compatible_node(NULL, NULL, "altr,rst-mgr");
> > 
> 
> Your proposed patch is causing this failure during a CPU hotlpug, and
> ultimately CPU1 doesn't seem to be able to comeback online at all:
> 
> # echo 0 > /sys/devices/system/cpu/cpu1/online
> [   53.664085] CPU1: shutdown
> # echo 1 > /sys/devices/system/cpu/cpu1/online
> 
> [   60.394169] Unable to handle kernel paging request at virtual address
> c0118668

This issue can be fixed by setting the socfpga_boot_fn variable in the
smp_prepare_cpus hook instead of the smp_boot_secondary hook. I just
a fixed version as a formal patch. Compared to the last version I also
removed the unnecessary if(1) and fixed big endian support.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the linux-arm-kernel mailing list