[U-Boot] [RFC][PATCH 0/5] SATA support for OMAP5 uevm

Roger Quadros rogerq at ti.com
Mon Nov 11 14:16:29 CET 2013


Aneesh,

On 11/07/2013 07:15 PM, V, Aneesh wrote:
> Hi Roger,
> 
>> -----Original Message-----
>> From: Quadros, Roger
>> Sent: Thursday, November 07, 2013 2:45 AM
>> To: Enric Balletbo Serra
>> Cc: u-boot at lists.denx.de; Rini, Tom; Krishnamoorthy, Balaji T;
>> rob.herring at calxeda.com; V, Aneesh
>> Subject: Re: [U-Boot] [RFC][PATCH 0/5] SATA support for OMAP5 uevm
>>
>> +Aneesh.
>>
>> Hi Enric,
>>
>> On 11/07/2013 10:52 AM, Enric Balletbo Serra wrote:
>>> Hi Roger,
>>>
>>> Thanks for the patches!
>>>
>>> 2013/11/6 Roger Quadros <rogerq at ti.com>:
>>>> Hi,
>>>>
>>>> This series adds SATA support for OMAP5 uevm board.
>>>>
>>>> This is an RFC patchset for review only. Patches are based on
>>>> v2013.10.
>>>>
>>>> cheers,
>>>> -roger
>>>>
>>>> ---
>>>> Roger Quadros (5):
>>>>   ahci: Error out with message on malloc() failure
>>>>   ARM: OMAP5: Add Pipe3 PHY driver
>>>>   ARM: OMAP5: Add PRCM and Control information for SATA
>>>>   ARM: OMAP5: Add SATA platform glue
>>>>   ARM: omap5_uevm: Add SATA support
>>>>
>>>>  arch/arm/cpu/armv7/omap-common/Makefile    |   7 +
>>>>  arch/arm/cpu/armv7/omap-common/pipe3-phy.c | 233
>>>> +++++++++++++++++++++++++++++  arch/arm/cpu/armv7/omap-
>> common/pipe3-phy.h |  36 +++++
>>>>  arch/arm/cpu/armv7/omap-common/sata.c      |  78 ++++++++++
>>>>  arch/arm/cpu/armv7/omap5/prcm-regs.c       |   5 +
>>>>  arch/arm/include/asm/arch-omap5/clock.h    |   3 +
>>>>  arch/arm/include/asm/arch-omap5/omap.h     |   3 +
>>>>  arch/arm/include/asm/arch-omap5/sata.h     |  48 ++++++
>>>>  arch/arm/include/asm/omap_common.h         |   3 +
>>>>  board/ti/omap5_uevm/evm.c                  |   7 +
>>>>  drivers/block/ahci.c                       |  16 +-
>>>>  include/configs/omap5_uevm.h               |  10 ++
>>>>  12 files changed, 447 insertions(+), 2 deletions(-)  create mode
>>>> 100644 arch/arm/cpu/armv7/omap-common/pipe3-phy.c
>>>>  create mode 100644 arch/arm/cpu/armv7/omap-common/pipe3-phy.h
>>>>  create mode 100644 arch/arm/cpu/armv7/omap-common/sata.c
>>>>  create mode 100644 arch/arm/include/asm/arch-omap5/sata.h
>>>>
>>>> --
>>>> 1.8.3.2
>>>>
>>>> _______________________________________________
>>>> U-Boot mailing list
>>>> U-Boot at lists.denx.de
>>>> http://lists.denx.de/mailman/listinfo/u-boot
>>>
>>> I applied your patches and worked perfectly, however I've two small issues.
>>>
>>> The first issue is that I see the following error:
>>>
>>>     scanning bus for devices...
>>>     ERROR: v7_dcache_inval_range - start address is not aligned - 0xfee48618
>>>     ERROR: v7_dcache_inval_range - stop address is not aligned -
>>> 0xfee48818
>>
>> I'm seeing this too. Not sure how to fix it.
>> Aneesh, any pointers?
> 
> The issue is that the dcache invalidation is requested for a buffer that is not aligned to cache-line
> boundary. The cpu instructions for cache invalidation operate on cache lines, so a cache line can
> not be invalidated partially. So in this case the invalidation function will refuse to invalidate the 
> first and last cache lines. 
> 
> The solution is to align your DMA buffer correctly.  Take a look at :
> 
> ALLOC_CACHE_ALIGN_BUFFER() and DEFINE_CACHE_ALIGN_BUFFER() in
> include/common.h
> 
> Also, doc/README.arm-caches has instructions for handling cached buffers for DMA. 

Thanks for this tip, it helped.

One more thing. While I was looking at arch/arm/cpu/armv7/cache_v7.c
I failed to understand how you convert the cache line size from words to byte.

e.g.

> static void v7_maint_dcache_level_setway(u32 level, u32 operation)
> {
>         u32 ccsidr;
>         u32 num_sets, num_ways, log2_line_len, log2_num_ways;
>         u32 way_shift;
> 
>         set_csselr(level, ARMV7_CSSELR_IND_DATA_UNIFIED);
> 
>         ccsidr = get_ccsidr();
> 
>         log2_line_len = ((ccsidr & CCSIDR_LINE_SIZE_MASK) >>
>                                 CCSIDR_LINE_SIZE_OFFSET) + 2;
>         /* Converting from words to bytes */
>         log2_line_len += 2;

Shouldn't this be
	log2_line_len += 1;

cheers,
-roger


More information about the U-Boot mailing list