[U-Boot] [PATCH v2] arm: cm4008, cm41xx: Fix ROM relocation
Andreas Bießmann
andreas.devel at googlemail.com
Thu Jul 5 17:19:00 CEST 2012
Dear Yann Vernier,
On 05.07.2012 15:22, Yann Vernier wrote:
> Changed CONFIG_SYS_TEXT_BASE to actual address (required for
> board_init_f) and moved it into cm4008.h, along with a warning that it
> must match CONFIG_SYS_FLASH_BASE (since lowlevel_init relocates there).
> lowlevel_init now uses CONFIG_SYS_FLASH_BASE to map ROM, although the
> second bank is still mapped at 0x02400000-0x027fffff.
> ---
> Changes for v2:
> - Update to use CONFIG_SYS_FLASH_ constants only (no PHYS_FLASH)
> - Use tabs where appropriate
> - Update cm41xx also
> - Explain the lowlevel_init change
>
> Signed-off-by: Yann Vernier <yann.vernier at orsoc.se>
> ---
> arch/arm/cpu/arm920t/ks8695/lowlevel_init.S | 9 +++++++--
> board/cm4008/config.mk | 1 -
> board/cm41xx/config.mk | 1 -
> include/configs/cm4008.h | 7 ++++---
> include/configs/cm41xx.h | 7 ++++---
> 5 files changed, 15 insertions(+), 10 deletions(-)
> delete mode 100644 board/cm4008/config.mk
> delete mode 100644 board/cm41xx/config.mk
>
> diff --git a/arch/arm/cpu/arm920t/ks8695/lowlevel_init.S b/arch/arm/cpu/arm920t/ks8695/lowlevel_init.S
> index df13de6..7bb9ede 100644
> --- a/arch/arm/cpu/arm920t/ks8695/lowlevel_init.S
> +++ b/arch/arm/cpu/arm920t/ks8695/lowlevel_init.S
> @@ -92,11 +92,16 @@ lowlevel_init:
> * ram from address 0, and flash at 32MB.
> */
> ldr r1, =(KS8695_IO_BASE+KS8695_MEM_CTRL0)
> + /* Remap flash memory to 768MB size, such that it covers
> + both 0 (boot) and 512MB (run) regions */
> ldr r2, =0xbfc00040
> str r2, [r1] /* large flash map */
> - ldr pc, =(highflash+0x02000000-0x00f00000) /* jump to high flash address */
> + /* Relies on CONFIG_SYS_FLASH_BASE==CONFIG_SYS_TEXT_BASE */
> + ldr pc, =(highflash) /* jump to high flash address */
> highflash:
> - ldr r2, =0x8fe00040
> + /* Move ROM to high address, and reconfigure to 4MiB size */
> + ldr r2, =(((CONFIG_SYS_FLASH_BASE+0x3f0000)<<(22-16))| \
> + (CONFIG_SYS_FLASH_BASE>>(16-12))|0x40)
again some magic ... Well I do not know this architecture in detail and
can nothing say about the register footprint. I just hope somebody with
access to tech spec of this cpu is able to understand how 'Move ROM to
high address, and reconfigure to 4MiB size' is related to this magic.
Beside that I tend to ack this patch. Yann, have you some proposal to
resolve my doubts?
> str r2, [r1] /* remap flash range */
>
> /*
> diff --git a/board/cm4008/config.mk b/board/cm4008/config.mk
> deleted file mode 100644
> index 0d5923b..0000000
> --- a/board/cm4008/config.mk
> +++ /dev/null
> @@ -1 +0,0 @@
> -CONFIG_SYS_TEXT_BASE = 0x00f00000
> diff --git a/board/cm41xx/config.mk b/board/cm41xx/config.mk
> deleted file mode 100644
> index 0d5923b..0000000
> --- a/board/cm41xx/config.mk
> +++ /dev/null
> @@ -1 +0,0 @@
> -CONFIG_SYS_TEXT_BASE = 0x00f00000
> diff --git a/include/configs/cm4008.h b/include/configs/cm4008.h
> index 18b37d7..3518206 100644
> --- a/include/configs/cm4008.h
> +++ b/include/configs/cm4008.h
> @@ -115,9 +115,10 @@
>
> #define CONFIG_SYS_INIT_SP_ADDR 0x00020000 /* lowest 128k of RAM */
>
> -#define PHYS_FLASH_1 0x02000000 /* Flash Bank #1 */
> -#define PHYS_FLASH_SECT_SIZE 0x00020000 /* 128 KB sectors (x1) */
> -#define CONFIG_SYS_FLASH_BASE PHYS_FLASH_1
> +/* CONFIG_SYS_TEXT_BASE and CONFIG_SYS_FLASH_BASE must match for both
> + relocation in lowlevel_init.S and function array in board.c */
> +#define CONFIG_SYS_TEXT_BASE 0x02000000
> +#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_TEXT_BASE
>
> #define CONFIG_SYS_FLASH_CFI
> #define CONFIG_FLASH_CFI_DRIVER 1
> diff --git a/include/configs/cm41xx.h b/include/configs/cm41xx.h
> index 3f46b12..5f2d445 100644
> --- a/include/configs/cm41xx.h
> +++ b/include/configs/cm41xx.h
> @@ -115,9 +115,10 @@
>
> #define CONFIG_SYS_INIT_SP_ADDR 0x00020000 /* lowest 128k of RAM */
>
> -#define PHYS_FLASH_1 0x02000000 /* Flash Bank #1 */
> -#define PHYS_FLASH_SECT_SIZE 0x00020000 /* 128 KB sectors (x1) */
> -#define CONFIG_SYS_FLASH_BASE PHYS_FLASH_1
> +/* CONFIG_SYS_TEXT_BASE and CONFIG_SYS_FLASH_BASE must match for both
> + relocation in lowlevel_init.S and function array in board.c */
> +#define CONFIG_SYS_TEXT_BASE 0x02000000
> +#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_TEXT_BASE
>
> #define CONFIG_SYS_FLASH_CFI
> #define CONFIG_FLASH_CFI_DRIVER 1
>
Best regards
Andreas Bießmann
More information about the U-Boot
mailing list