[U-Boot] [PATCH v2 09/16] mtd/nand/tegra: alignment workaround
Scott Wood
scottwood at freescale.com
Mon Jul 27 21:57:14 CEST 2015
On Tue, 2015-07-21 at 00:35 +0200, Marcel Ziswiler wrote:
> From: Marcel Ziswiler <marcel.ziswiler at toradex.com>
>
> Integrate cache alignment bounce buffer to workaround issues as follows:
>
> Loading file '/boot/zImage' to addr 0x01000000 with size 4499152
> (0x0044a6d0)...
> ERROR: v7_dcache_inval_range - start address is not aligned - 0x1f7f0108
> ERROR: v7_dcache_inval_range - stop address is not aligned - 0x1f7f1108
> Done
> Kernel image @ 0x1000000 [ 0x000000 - 0x44a6d0 ]
>
> Starting kernel ...
>
> undefined instruction
> pc : [<005ff03c>] lr : [<0000800c>]
> sp : 0144b6e8 ip : 01000188 fp : 0144a6c8
> r10: 00000000 r9 : 411fc090 r8 : 00000100
> r7 : 00000cfb r6 : 0144a6d0 r5 : 00000000 r4 : 00008000
> r3 : 0000000c r2 : 00000100 r1 : 00000cfb r0 : 00000000
> Flags: nZCv IRQs off FIQs off Mode SVC_32
> Resetting CPU ...
>
> Signed-off-by: Marcel Ziswiler <marcel.ziswiler at toradex.com>
> ---
> Changes in v2:
> Migrated to using generic bounce buffer implementation as suggested by
> Simon.
I didn't see Simon's suggestion, but what is the general policy in U-Boot
supposed to be for I/O alignment? Responsibility of the API user, or of the
driver? Are there other drivers with the same problem?
> - writel(virt_to_phys(buf), &info->reg->data_block_ptr);
> + writel((u32)bbstate.bounce_buffer, &info->reg->data_block_ptr);
Why are you converting usage of virt_to_phys() into a u32 cast?
-Scott
More information about the U-Boot
mailing list