[U-Boot] [PATCH v2] arm: omap: Fix 'get_device_type()' for OMAP34XX

Derald Woods woods.technical at gmail.com
Thu Aug 10 12:25:29 UTC 2017


On Mon, Aug 7, 2017 at 5:19 PM, Derald Woods <woods.technical at gmail.com>
wrote:

> On Mon, Aug 7, 2017 at 7:41 AM, Tom Rini <trini at konsulko.com> wrote:
>
>> On Mon, Aug 07, 2017 at 07:35:30AM -0500, Derald Woods wrote:
>> > On Mon, Jul 31, 2017 at 7:41 AM, Derald D. Woods <
>> woods.technical at gmail.com>
>> > wrote:
>> >
>> > > Fixes: 00bbe96ebabb ("arm: omap: Unify get_device_type() function")
>> > >
>> > > The control status register value is embedded in a structure somewhere
>> > > in SRAM, with the last refactoring effort. This patch allows OMAP3 EVM
>> > > (TMDSEVM3530) to boot again using the known control register base and
>> > > offset for 'readl', for the OMAP34XX case.
>> > >
>> > > Signed-off-by: Derald D. Woods <woods.technical at gmail.com>
>> > >
>> > > ---
>> > > Changes in v2:
>> > > - Added 'signed-off-by'
>> > > - Updated description
>> > >
>> > > ---
>> > >  arch/arm/mach-omap2/sysinfo-common.c | 4 ++++
>> > >  1 file changed, 4 insertions(+)
>> > >
>> > > diff --git a/arch/arm/mach-omap2/sysinfo-common.c
>> > > b/arch/arm/mach-omap2/sysinfo-common.c
>> > > index 1dc7051ab3..3955e803ad 100644
>> > > --- a/arch/arm/mach-omap2/sysinfo-common.c
>> > > +++ b/arch/arm/mach-omap2/sysinfo-common.c
>> > > @@ -16,6 +16,10 @@
>> > >   */
>> > >  u32 get_device_type(void)
>> > >  {
>> > > +#if defined(CONFIG_OMAP34XX)
>> > > +       return (readl(OMAP34XX_CTRL_BASE + 0x2f0) & DEVICE_TYPE_MASK)
>> >>
>> > > +               DEVICE_TYPE_SHIFT;
>> > > +#endif
>> > >         return (readl((*ctrl)->control_status) & DEVICE_TYPE_MASK) >>
>> > >                 DEVICE_TYPE_SHIFT;
>> > >  }
>> >
>> > ​Is there any​ comment or concern with this patch? It was the simplest
>> > means to get OMAP35XX booting again and still keep the original patch.
>> > Basically it avoids the pointer to the OMAP_SRAM_SCRATCH_SYS_CTRL
>> located
>> > structure as now defined in "arch/arm/mach-omap2/omap3/hw_data.c".
>> OMAP3
>> > has a larger active SOC base than just OMAP36XX and greater. Was there
>> > anything really broken with 'get_device_type()' previously?
>>
>> Is the pointer value wrong for 35xx?  The problem, such as it was, was
>> having the same function duplicated in a number of places, and needing
>> to make it more easily / readily available (rather than duplicated
>> again) for some additional patches.  I'd really rather not introduce
>> an #if here unless we really have no other choice.  Thanks!
>>
>> --
>> Tom
>>
>
> ​I will examine/debug the new 'get_device_type()' source code again
> tonight. ‎Without the patch, I have two OMAP3530 boards that do not boot at
> all.
>
​​

Derald​
​

In "arch/arm/mach-omap2/omap3/board.c", the following routines call
'get_device_type':
- v7_arch_cp15_set_l2aux_ctrl      (called from
"arch/arm/cpu/armv7/start.S")
- v7_arch_cp15_set_acr             (called from
"arch/arm/cpu/armv7/start.S")
- omap3_invalidate_l2_cache_secure (called from "board.c" 's_init')
- try_unlock_memory                (called from "board.c" 's_init')

Each one of these calls to 'get_device_type' seems to have a purpose (i.e.
ERRATA or setup). What it highlights is the difference in usage from
OMAP36XX, AM33XX, and newer. The SRAM usage, L2 cache and call ordering are
likely factors here. ​Figuring out the implications for OMAP34XX will take
time. But you need to have boards that boot to address those issues. So
'get_device_type' usage, for OMAP34XX, is not strictly a "Apples to Apples"
type comparison. For now I can proceed with an "out-of-tree" patch, since
it is small. Let me know if there is something that I am missing here.

Derald


More information about the U-Boot mailing list