On Nov 22, 2011, at 3:29 AM, Li Yang-R58472 wrote:

>> Subject: Re: [PATCH v2 1/7] powerpc/85xx: re-enable timebase sync disabled
>> by KEXEC patch
>> 
>> On Fri, Nov 18, 2011 at 08:35:02AM -0600, Kumar Gala wrote:
>>> 
>>> On Nov 16, 2011, at 12:42 PM, Scott Wood wrote:
>>> 
>>>> On 11/16/2011 03:55 AM, Zhao Chenhui wrote:
>>>>> From: Li Yang <le...@freescale.com>
>>>>> 
>>>>> The timebase sync is not only necessary when using KEXEC. It should
>> also
>>>>> be used by normal boot up and cpu hotplug. Remove the ifdef added by
>>>>> the KEXEC patch.
>>>> 
>>>> Again, no it should not be used by normal boot up (whether KEXEC
>> support
>>>> is enabled or not).  We should only do timebase sync when we actually
>>>> need to (when we've actually just reset a core), and we should do it
>> the
>>>> way U-Boot does rather than with smp-tbsync.c.
> 
> While looking into the timebase sync code in u-boot, I have a few questions.
> 
>        /* enable time base at the platform */
>        if (whoami)
>                devdisr |= MPC85xx_DEVDISR_TB1;
>        else
>                devdisr |= MPC85xx_DEVDISR_TB0;
>        out_be32(&gur->devdisr, devdisr);
> 
>        /* readback to sync write */
>        in_be32(&gur->devdisr);
> 
>        mtspr(SPRN_TBWU, 0);
>        mtspr(SPRN_TBWL, 0);
> 
> What are the TBWU/TBWL registers?  I can't find the definition of them in 
> either e500 RM or booke RM.  Are they valid to be used?  What is the result 
> of writing to them?  Aren't the SPR registers core specific?  How can we set 
> the TB for the other cores?

TBWU/TBWL are SPR 284/285 (they might be called something a little different in 
the manual).

You can only set the TB on the core itself.  The way the u-boot code works is 
it sets TBL/TBU (TB) to 0 in release.S for secondary cores.  In the code you 
reference we are setting TB on the 'master' core to 0 since we turned TB on 
earlier for the master core and now are resetting it to 0 to sync all the cores.

> 
>        devdisr &= ~(MPC85xx_DEVDISR_TB0 | MPC85xx_DEVDISR_TB1);
>        out_be32(&gur->devdisr, devdisr);
> 
> Also in the UM, I read "Blocks disabled by DEVDISR must not be re-enabled 
> without a hard reset."  Is it safe we enable it here?

Yes this is safe, TB isn't truly a block.  Manual should technically be updated 
to exclude TB.

- k
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to