mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-12 06:12:58 +00:00
67ff9e11f3
Recently I started to notice that u-boot.img built for Wandboard
by some toolchains becomes so large that it basically overlaps with
U-Boot environment area on SD-card.
According to
http://wiki.wandboard.org/index.php/Boot-process#sdcard_boot_data_layout
Wandboard's SD-card layout is as follows:
------------------------------>8---------------------------
Acked-by: Otavio Salvador <otavio@ossystems.com.br>
Acked-by: Fabio Estevam <fabio.estevam@nxp.com>
==========================================================
1. 0x00000000 Reserved For MBR
2. 0x00000200 512 Secondary Image Table (optional)
3. 0x00000400 1024 uBoot Image (Starting From IVT)
4. 0x00060000 393216 start of uboot env (size:8k)
5. 0x00062000 end of uboot env
6. 0x00100000 1048576 Linux kernel start
7. 0x0076AC00 7777280 start of partition 1
------------------------------>8---------------------------
So for U-Boot we have 383kB (392192 bytes).
But in up to date U-Boot for Wandboard we build separately
a) SPL
b) u-boot.img
which gives us a bit more detailed SD-card layout:
------------------------------>8---------------------------
==========================================================
1. 0x00000000 Reserved For MBR
2. 0x00000200 512 Secondary Image Table (optional)
3. 0x00000400 1024 SPL
4. 0x00011400 70656 u-boot.img
5. 0x00060000 393216 start of uboot env (size:8k)
6. 0x00062000 end of uboot env
...
------------------------------>8---------------------------
>From that layout we may calculate amount of space reserved for
u-boot.img. It's just 315kb (322560 bytes).
Now if I build U-Boot with Sourcery CodeBench ARM 2014.05 produced
u-boot.img is already more than we expected
(323840 bytes instead of "< 322560"):
------------------------------>8---------------------------
ls -la u-boot.img
-rw-rw-r-- 1 user user 323840 Jul 5 07:38 u-boot.img
------------------------------>8---------------------------
Funny enough if I rebuild U-Boot with ARM toolchain available in
my Fedora 23 distro u-boot.img becomes a little bit smaller:
------------------------------>8---------------------------
ls -la u-boot.img
-rw-rw-r-- 1 user user 322216 Jul 5 07:39 u-boot.img
------------------------------>8---------------------------
What's worse this problem might not affect people most of the time
because what happens people would just copy u-boot.img on SD-card and
live in happiness with it... well until somebody attempts to save
environment in U-Boot with "saveenv" command which will simply
overwrite the very end of u-boot.img.
That will lead to unusable SD-card until user dd u-boot.img on
SD-card again.
I may foresee this issue in the future to become more visible once we
add more features in U-Boot for Wandboard or just existing code base
becomes bulkier and people will consistently get larger u-boot.img
files produced.
IMHO there's an obvious solution for all that - just move U-Boot's env
to the very end of the gap between U-Boot and the first real partition
on the SD-card. This patch will follow
8fb9eea565
("mx6sabre_common: Fix U-Boot corruption after 'saveenv'").
So env is still not in the very end of the gap (obviously 256kb is way
too much for U-Boot's env) but at least we have now the same
partitioning for i.MX6 boards.
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Peter Robinson <pbrobinson@gmail.com>
Cc: Tom Rini <trini@konsulko.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Wolfgang Denk <wd@denx.de>
199 lines
5.5 KiB
C
199 lines
5.5 KiB
C
/*
|
|
* Copyright (C) 2013 Freescale Semiconductor, Inc.
|
|
*
|
|
* Configuration settings for the Wandboard.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#ifndef __CONFIG_H
|
|
#define __CONFIG_H
|
|
|
|
#include <config_distro_defaults.h>
|
|
#include "mx6_common.h"
|
|
|
|
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
|
#define CONFIG_SPL_MMC_SUPPORT
|
|
#include "imx6_spl.h"
|
|
|
|
#define MACH_TYPE_WANDBOARD 4412
|
|
#define CONFIG_MACH_TYPE MACH_TYPE_WANDBOARD
|
|
|
|
/* Size of malloc() pool */
|
|
#define CONFIG_SYS_MALLOC_LEN (10 * SZ_1M)
|
|
|
|
#define CONFIG_BOARD_EARLY_INIT_F
|
|
#define CONFIG_BOARD_LATE_INIT
|
|
|
|
#define CONFIG_MXC_UART
|
|
#define CONFIG_MXC_UART_BASE UART1_BASE
|
|
|
|
/* SATA Configs */
|
|
|
|
#define CONFIG_CMD_SATA
|
|
#ifdef CONFIG_CMD_SATA
|
|
#define CONFIG_DWC_AHSATA
|
|
#define CONFIG_SYS_SATA_MAX_DEVICE 1
|
|
#define CONFIG_DWC_AHSATA_PORT_ID 0
|
|
#define CONFIG_DWC_AHSATA_BASE_ADDR SATA_ARB_BASE_ADDR
|
|
#define CONFIG_LBA48
|
|
#define CONFIG_LIBATA
|
|
#endif
|
|
|
|
/* Command definition */
|
|
#define CONFIG_CMD_BMODE
|
|
|
|
#define CONFIG_SYS_MEMTEST_START 0x10000000
|
|
#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 500 * SZ_1M)
|
|
|
|
/* I2C Configs */
|
|
#define CONFIG_SYS_I2C
|
|
#define CONFIG_SYS_I2C_MXC
|
|
#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
|
|
#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
|
|
#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */
|
|
#define CONFIG_SYS_I2C_SPEED 100000
|
|
|
|
/* MMC Configuration */
|
|
#define CONFIG_SYS_FSL_USDHC_NUM 2
|
|
#define CONFIG_SYS_FSL_ESDHC_ADDR 0
|
|
|
|
/* USB Configs */
|
|
#define CONFIG_USB_EHCI
|
|
#define CONFIG_USB_EHCI_MX6
|
|
#define CONFIG_USB_STORAGE
|
|
#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
|
|
#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
|
|
#define CONFIG_MXC_USB_FLAGS 0
|
|
|
|
/* Ethernet Configuration */
|
|
#define CONFIG_FEC_MXC
|
|
#define CONFIG_MII
|
|
#define IMX_FEC_BASE ENET_BASE_ADDR
|
|
#define CONFIG_FEC_XCV_TYPE RGMII
|
|
#define CONFIG_ETHPRIME "FEC"
|
|
#define CONFIG_FEC_MXC_PHYADDR 1
|
|
#define CONFIG_PHYLIB
|
|
#define CONFIG_PHY_ATHEROS
|
|
|
|
/* Framebuffer */
|
|
#define CONFIG_VIDEO
|
|
#define CONFIG_VIDEO_IPUV3
|
|
#define CONFIG_CFB_CONSOLE
|
|
#define CONFIG_VGA_AS_SINGLE_DEVICE
|
|
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
|
|
#define CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
|
|
#define CONFIG_VIDEO_BMP_RLE8
|
|
#define CONFIG_SPLASH_SCREEN
|
|
#define CONFIG_SPLASH_SCREEN_ALIGN
|
|
#define CONFIG_BMP_16BPP
|
|
#define CONFIG_VIDEO_LOGO
|
|
#define CONFIG_VIDEO_BMP_LOGO
|
|
#define CONFIG_IPUV3_CLK 260000000
|
|
#define CONFIG_CMD_HDMIDETECT
|
|
#define CONFIG_IMX_HDMI
|
|
#define CONFIG_IMX_VIDEO_SKIP
|
|
|
|
#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
|
"console=ttymxc0,115200\0" \
|
|
"splashpos=m,m\0" \
|
|
"fdtfile=undefined\0" \
|
|
"fdt_high=0xffffffff\0" \
|
|
"initrd_high=0xffffffff\0" \
|
|
"fdt_addr_r=0x18000000\0" \
|
|
"fdt_addr=0x18000000\0" \
|
|
"ip_dyn=yes\0" \
|
|
"mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
|
|
"update_sd_firmware_filename=u-boot.imx\0" \
|
|
"update_sd_firmware=" \
|
|
"if test ${ip_dyn} = yes; then " \
|
|
"setenv get_cmd dhcp; " \
|
|
"else " \
|
|
"setenv get_cmd tftp; " \
|
|
"fi; " \
|
|
"if mmc dev ${mmcdev}; then " \
|
|
"if ${get_cmd} ${update_sd_firmware_filename}; then " \
|
|
"setexpr fw_sz ${filesize} / 0x200; " \
|
|
"setexpr fw_sz ${fw_sz} + 1; " \
|
|
"mmc write ${loadaddr} 0x2 ${fw_sz}; " \
|
|
"fi; " \
|
|
"fi\0" \
|
|
"videoargs=" \
|
|
"setenv nextcon 0; " \
|
|
"if hdmidet; then " \
|
|
"setenv bootargs ${bootargs} " \
|
|
"video=mxcfb${nextcon}:dev=hdmi,1280x720M@60," \
|
|
"if=RGB24; " \
|
|
"setenv fbmen fbmem=28M; " \
|
|
"setexpr nextcon ${nextcon} + 1; " \
|
|
"else " \
|
|
"echo - no HDMI monitor;" \
|
|
"fi; " \
|
|
"i2c dev 1; " \
|
|
"if i2c probe 0x10; then " \
|
|
"setenv bootargs ${bootargs} " \
|
|
"video=mxcfb${nextcon}:dev=lcd,800x480@60," \
|
|
"if=RGB666,bpp=32; " \
|
|
"if test 0 -eq ${nextcon}; then " \
|
|
"setenv fbmem fbmem=10M; " \
|
|
"else " \
|
|
"setenv fbmem ${fbmem},10M; " \
|
|
"fi; " \
|
|
"setexpr nextcon ${nextcon} + 1; " \
|
|
"else " \
|
|
"echo '- no FWBADAPT-7WVGA-LCD-F07A-0102 display';" \
|
|
"fi; " \
|
|
"setenv bootargs ${bootargs} ${fbmem}\0" \
|
|
"findfdt="\
|
|
"if test $board_name = C1 && test $board_rev = MX6Q ; then " \
|
|
"setenv fdtfile imx6q-wandboard.dtb; fi; " \
|
|
"if test $board_name = C1 && test $board_rev = MX6DL ; then " \
|
|
"setenv fdtfile imx6dl-wandboard.dtb; fi; " \
|
|
"if test $board_name = B1 && test $board_rev = MX6Q ; then " \
|
|
"setenv fdtfile imx6q-wandboard-revb1.dtb; fi; " \
|
|
"if test $board_name = B1 && test $board_rev = MX6DL ; then " \
|
|
"setenv fdtfile imx6dl-wandboard-revb1.dtb; fi; " \
|
|
"if test $fdtfile = undefined; then " \
|
|
"echo WARNING: Could not determine dtb to use; fi; \0" \
|
|
"kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
|
|
"pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
|
|
"ramdisk_addr_r=0x13000000\0" \
|
|
"ramdiskaddr=0x13000000\0" \
|
|
"scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
|
|
BOOTENV
|
|
|
|
#define BOOT_TARGET_DEVICES(func) \
|
|
func(MMC, mmc, 0) \
|
|
func(MMC, mmc, 1) \
|
|
func(USB, usb, 0) \
|
|
func(PXE, pxe, na) \
|
|
func(DHCP, dhcp, na)
|
|
|
|
#define CONFIG_BOOTCOMMAND \
|
|
"run findfdt; " \
|
|
"run distro_bootcmd"
|
|
|
|
#include <config_distro_bootcmd.h>
|
|
|
|
/* Physical Memory Map */
|
|
#define CONFIG_NR_DRAM_BANKS 1
|
|
#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
|
|
|
|
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
|
|
#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
|
|
#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
|
|
|
|
#define CONFIG_SYS_INIT_SP_OFFSET \
|
|
(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
|
|
#define CONFIG_SYS_INIT_SP_ADDR \
|
|
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
|
|
|
|
/* Environment organization */
|
|
#define CONFIG_ENV_SIZE (8 * 1024)
|
|
|
|
#define CONFIG_ENV_IS_IN_MMC
|
|
#define CONFIG_ENV_OFFSET (768 * 1024)
|
|
#define CONFIG_SYS_MMC_ENV_DEV 0
|
|
|
|
#endif /* __CONFIG_H * */
|