[U-Boot] [PATCH] 85xx: Fix mapping of 0xfffffxxx when CONFIG_MP
Kumar Gala
galak at kernel.crashing.org
Wed Jul 8 17:52:43 CEST 2009
On Jul 7, 2009, at 5:38 PM, Peter Tyser wrote:
> On Tue, 2009-07-07 at 17:24 -0500, Kumar Gala wrote:
>> On Jul 7, 2009, at 5:13 PM, Peter Tyser wrote:
>>
>>> On Tue, 2009-07-07 at 16:59 -0500, Kumar Gala wrote:
>>>> On Jul 7, 2009, at 1:43 PM, Peter Tyser wrote:
>>>>
>>>>> Previously, boot page translation was enabled while U-Boot
>>>>> executed.
>>>>> This resulted in the address range 0xfffff000 - 0xffffffff being
>>>>> translated to SDRAM which made the 0xfffffxxx address space
>>>>> unusable
>>>>> for
>>>>> other peripherals.
>>>>>
>>>>> This change disables boot page translation after the secondary CPU
>>>>> cores
>>>>> have been initialized which allows the 0xfffffxxx address space to
>>>>> be
>>>>> properly accessed.
>>>>>
>>>>> Signed-off-by: Peter Tyser <ptyser at xes-inc.com>
>>>>> ---
>>>>> This was tested on the XPedite5370 which has flash mapped in the
>>>>> 0xfffffxxx adddress space. I verified the flash was accessible
>>>>> as expected and Linux properly brought up 2 cores.
>>>>>
>>>>> I wasn't sure how the MPC8572 handled caching with respect to the
>>>>> boot
>>>>> page translation. I didn't add any cache flushes/invalidates, but
>>>>> they
>>>>> may be necessary if the 0xfffffxxx range is not mapped as
>>>>> uncachable.
>>>>> Anyone at Freescale have any comments on this?
>>>>>
>>>>> Best,
>>>>> Peter
>>>>
>>>> I'm concerned about this because we specifically avoid the
>>>> 0xfffff000
>>>> - 0xffffffff range since if we reset a core we want it to go
>>>> through
>>>> boot page translation. Can you explain what you are putting at
>>>> that
>>>> address?
>>>
>>> Most of our boards (MPC8548, MPC8640, MPC8572-based) have two 128MB
>>> flashes - 1 from 0xf0000000-0xf7f00000 and the other from
>>> 0xf8000000 -
>>> 0xffffffff. We've used this convention for a while, before we
>>> started
>>> using MPC8572s.
>>>
>>> U-Boot is always stored at in the flash at 0xfff80000 on the
>>> MPC85xx-based boards we support. Thus I couldn't reprogram U-Boot
>>> when
>>> CONFIG_MP was defined since the top 4K of flash was really accessing
>>> SDRAM because of the boot page translation.
>>>
>>> With this patch boot page translation is still used to bring up the
>>> secondary cores on power on. This change just makes it so that boot
>>> page translation is disabled after the other cores are brought up.
>>
>> I understand what the patch does. It just removes the capability of
>> soft-resetting a core back into the boot translation code. I
>> understand your problem I'm just not keen on solving it by completely
>> disabling boot translation.
>>
>> We had a similar memory map and I moved away from it because of the
>> reset vector issues. Additionally, things like >4G of memory also
>> start creeping up.
>
> I'm not super familiar with how the MP support in U-Boot is used.
> Would
> you be resetting a secondary core for debug purposes? Or is there an
> example of when you'd reset one in normal operation? I thought normal
> operation was to use the "cpu release" command, or to let the OS
> manually take the secondary cores out of their wait loops.
>
> What if I spruced up cpu_reset() to temporarily re-enable boot page
> translation, then disabled it again? (And maybe re-initialized the
> cpus
> MP table so that it could properly ack the primary core similar to in
> pq3_mp_up().
>
> It seems somewhat dirty to me to constantly keep boot page translation
> enabled, even when its not needed. Especially since it would
> require us
> to change our memory map, environment variable scripts, documentation,
> etc on all our boards:)
>
> I'd be happy to look into an alternate workaround if you have an idea
> for a cleaner implementation.
The idea is after u-boot if you soft-reset a core that it would go
back into the spin table code. U-boot is long gone at this point.
- k
More information about the U-Boot
mailing list