v6 software reset fails on 1176
will.deacon at arm.com
Tue Aug 23 14:00:59 EDT 2011
On Tue, Aug 23, 2011 at 06:56:38PM +0100, Jamie Iles wrote:
> On Tue, Aug 23, 2011 at 06:47:36PM +0100, Will Deacon wrote:
> > You need to make sure you call cpu_reset by jumping to its *physical*
> > address. If that happens to alias with the virtual address of the kernel, it
> > won't currently work but I have a solution to this in my kexec branch.
> > You can do something like:
> > typedef void (*phys_reset_t)(unsigned long);
> > phys_reset = (phys_reset_t)virt_to_phys(cpu_reset);
> > phys_reset(0xffff0000);
> OK, that makes perfect sense! I'll give it a go on my hardware tomorrow
> when I'm back in the office.
Great, let me know how you get on! I'll post my kexec series to the list
again once I've got on top of my current patchsets.
> All of the other mainline users of cpu_reset() just call it directly, so
> I guess they need to do the same thing?
For v6 and v7, yes. For older ARM cores you could actually code for the
pipeline implementation and things were arguably easier that way.
More information about the linux-arm-kernel