[U-Boot] [PATCH v2 1/4] sunxi: add basic V3s support

Icenowy Zheng icenowy at aosc.xyz
Wed Jan 11 20:38:59 CET 2017



11.01.2017, 03:25, "Maxime Ripard" <maxime.ripard at free-electrons.com>:
> Hi,
>
> On Tue, Jan 10, 2017 at 05:18:22PM +0800, Icenowy Zheng wrote:
>>  Basic U-Boot support is now present for V3s.
>>
>>  Some memory addresses are changed specially for V3s, as the original
>>  address map cannot fit into a so small DRAM.
>>
>>  As the DRAM controller code needs a big refactor, the SPL support is
>>  disabled in this version.
>>
>>  Signed-off-by: Icenowy Zheng <icenowy at aosc.xyz>
>>  ---
>>   arch/arm/include/asm/arch-sunxi/gpio.h | 1 +
>>   arch/arm/mach-sunxi/board.c | 9 ++++++--
>>   arch/arm/mach-sunxi/cpu_info.c | 2 ++
>>   board/sunxi/Kconfig | 12 ++++++++--
>>   include/configs/sun8i.h | 2 ++
>>   include/configs/sunxi-common.h | 42 +++++++++++++++++++++++++++++++---
>>   6 files changed, 61 insertions(+), 7 deletions(-)
>>
>>  diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h b/arch/arm/include/asm/arch-sunxi/gpio.h
>>  index 85a4ec3b0e..24f85206c8 100644
>>  --- a/arch/arm/include/asm/arch-sunxi/gpio.h
>>  +++ b/arch/arm/include/asm/arch-sunxi/gpio.h
>>  @@ -161,6 +161,7 @@ enum sunxi_gpio_number {
>>   #define SUN8I_GPB_UART2 2
>>   #define SUN8I_A33_GPB_UART0 3
>>   #define SUN8I_A83T_GPB_UART0 2
>>  +#define SUN8I_V3S_GPB_UART0 3
>>   #define SUN50I_GPB_UART0 4
>>
>>   #define SUNXI_GPC_NAND 2
>>  diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c
>>  index aa11493748..3b28478e2d 100644
>>  --- a/arch/arm/mach-sunxi/board.c
>>  +++ b/arch/arm/mach-sunxi/board.c
>>  @@ -110,6 +110,10 @@ static int gpio_init(void)
>>           sunxi_gpio_set_cfgpin(SUNXI_GPB(9), SUN8I_A83T_GPB_UART0);
>>           sunxi_gpio_set_cfgpin(SUNXI_GPB(10), SUN8I_A83T_GPB_UART0);
>>           sunxi_gpio_set_pull(SUNXI_GPB(10), SUNXI_GPIO_PULL_UP);
>>  +#elif CONFIG_CONS_INDEX == 1 && defined(CONFIG_MACH_SUN8I_V3S)
>>  + sunxi_gpio_set_cfgpin(SUNXI_GPB(8), SUN8I_V3S_GPB_UART0);
>>  + sunxi_gpio_set_cfgpin(SUNXI_GPB(9), SUN8I_V3S_GPB_UART0);
>>  + sunxi_gpio_set_pull(SUNXI_GPB(9), SUNXI_GPIO_PULL_UP);
>>   #elif CONFIG_CONS_INDEX == 1 && defined(CONFIG_MACH_SUN9I)
>>           sunxi_gpio_set_cfgpin(SUNXI_GPH(12), SUN9I_GPH_UART0);
>>           sunxi_gpio_set_cfgpin(SUNXI_GPH(13), SUN9I_GPH_UART0);
>>  @@ -180,10 +184,11 @@ void s_init(void)
>>           /* No H3 BSP, boot0 seems to not modify SUNXI_SRAMC_BASE + 0x44 */
>>   #endif
>>
>>  -#if defined CONFIG_MACH_SUN6I || \
>>  +#if (defined CONFIG_MACH_SUN6I || \
>>       defined CONFIG_MACH_SUN7I || \
>>       defined CONFIG_MACH_SUN8I || \
>>  - defined CONFIG_MACH_SUN9I
>>  + defined CONFIG_MACH_SUN9I) && \
>>  + !defined CONFIG_MACH_SUN8I_V3S
>>           /* Enable SMP mode for CPU0, by setting bit 6 of Auxiliary Ctl reg */
>>           asm volatile(
>>                   "mrc p15, 0, r0, c1, c0, 1\n"
>>  diff --git a/arch/arm/mach-sunxi/cpu_info.c b/arch/arm/mach-sunxi/cpu_info.c
>>  index f1f6fd5ba4..15f1e0e45a 100644
>>  --- a/arch/arm/mach-sunxi/cpu_info.c
>>  +++ b/arch/arm/mach-sunxi/cpu_info.c
>>  @@ -87,6 +87,8 @@ int print_cpuinfo(void)
>>           printf("CPU: Allwinner A83T (SUN8I %04x)\n", sunxi_get_sram_id());
>>   #elif defined CONFIG_MACH_SUN8I_H3
>>           printf("CPU: Allwinner H3 (SUN8I %04x)\n", sunxi_get_sram_id());
>>  +#elif defined CONFIG_MACH_SUN8I_V3S
>>  + printf("CPU: Allwinner V3s (SUN8I %04x)\n", sunxi_get_sram_id());
>>   #elif defined CONFIG_MACH_SUN9I
>>           puts("CPU: Allwinner A80 (SUN9I)\n");
>>   #elif defined CONFIG_MACH_SUN50I
>>  diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
>>  index e1d4ab148f..1eb23c3a4c 100644
>>  --- a/board/sunxi/Kconfig
>>  +++ b/board/sunxi/Kconfig
>>  @@ -115,6 +115,14 @@ config MACH_SUN8I_H3
>>           select SUPPORT_SPL
>>           select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
>>
>>  +config MACH_SUN8I_V3S
>>  + bool "sun8i (Allwinner V3s)"
>>  + select CPU_V7
>>  + select CPU_V7_HAS_NONSEC
>>  + select CPU_V7_HAS_VIRT
>>  + select SUNXI_GEN_SUN6I
>>  + select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
>>  +
>>   config MACH_SUN9I
>>           bool "sun9i (Allwinner A80)"
>>           select CPU_V7
>>  @@ -131,7 +139,7 @@ endchoice
>>   # The sun8i SoCs share a lot, this helps to avoid a lot of "if A23 || A33"
>>   config MACH_SUN8I
>>           bool
>>  - default y if MACH_SUN8I_A23 || MACH_SUN8I_A33 || MACH_SUN8I_H3 || MACH_SUN8I_A83T
>>  + default y if MACH_SUN8I_A23 || MACH_SUN8I_A33 || MACH_SUN8I_H3 || MACH_SUN8I_A83T || MACH_SUN8I_V3S
>
> This needs some wrapping
>
>>   config DRAM_TYPE
>>           int "sunxi dram type"
>>  @@ -462,7 +470,7 @@ config AXP_GPIO
>>
>>   config VIDEO
>>           bool "Enable graphical uboot console on HDMI, LCD or VGA"
>>  - depends on !MACH_SUN8I_A83T && !MACH_SUN8I_H3 && !MACH_SUN9I && !MACH_SUN50I
>>  + depends on !MACH_SUN8I_A83T && !MACH_SUN8I_H3 && !MACH_SUN8I_V3S && !MACH_SUN9I && !MACH_SUN50I
>
> Ditto.
>
>>           default y
>>           ---help---
>>           Say Y here to add support for using a cfb console on the HDMI, LCD
>>  diff --git a/include/configs/sun8i.h b/include/configs/sun8i.h
>>  index a4c3fb69e4..6ac42acaea 100644
>>  --- a/include/configs/sun8i.h
>>  +++ b/include/configs/sun8i.h
>>  @@ -21,6 +21,8 @@
>>           #define CONFIG_SUNXI_USB_PHYS 4
>>   #elif defined CONFIG_MACH_SUN8I_A83T
>>           #define CONFIG_SUNXI_USB_PHYS 3
>>  +#elif defined CONFIG_MACH_SUN8I_V3S
>>  + #define CONFIG_SUNXI_USB_PHYS 1
>>   #else
>>           #define CONFIG_SUNXI_USB_PHYS 2
>>   #endif
>>  diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
>>  index b0bfc0dfd7..f4489fad6d 100644
>>  --- a/include/configs/sunxi-common.h
>>  +++ b/include/configs/sunxi-common.h
>>  @@ -75,8 +75,13 @@
>>   #else
>>   #define SDRAM_OFFSET(x) 0x4##x
>>   #define CONFIG_SYS_SDRAM_BASE 0x40000000
>>  -#define CONFIG_SYS_LOAD_ADDR 0x42000000 /* default load address */
>>  +#define CONFIG_SYS_LOAD_ADDR 0x41000000 /* default load address */
>>  +/* V3s do not have enough memory to place code at 0x4a000000 */
>>  +#ifndef CONFIG_MACH_SUN8I_V3S
>>   #define CONFIG_SYS_TEXT_BASE 0x4a000000
>>  +#else
>>  +#define CONFIG_SYS_TEXT_BASE 0x42e00000
>>  +#endif
>>   /* Note SPL_STACK_R_ADDR is set through Kconfig, we include it here
>>    * since it needs to fit in with the other values. By also #defining it
>>    * we get warnings if the Kconfig value mismatches. */
>>  @@ -148,8 +153,13 @@
>>   #define CONFIG_SYS_MMC_MAX_DEVICE 4
>>   #endif
>>
>>  +#ifndef CONFIG_MACH_SUN8I_V3S
>>   /* 64MB of malloc() pool */
>>   #define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (64 << 20))
>>  +#else
>>  +/* 2MB of malloc() pool */
>>  +#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (2 << 20))
>>  +#endif
>>
>>   /*
>>    * Miscellaneous configurable options
>>  @@ -280,7 +290,11 @@ extern int soft_i2c_gpio_scl;
>>    * The amount of RAM to keep free at the top of RAM when relocating u-boot,
>>    * to use as framebuffer. This must be a multiple of 4096.
>>    */
>>  +#ifndef CONFIG_MACH_SUN8I_V3S
>>   #define CONFIG_SUNXI_MAX_FB_SIZE (16 << 20)
>>  +#else
>>  +#define CONFIG_SUNXI_MAX_FB_SIZE (2 << 20)
>>  +#endif
>
> Do you need that? CONFIG_VIDEO is disabled, so there's no need to
> reserve space for a framebuffer.

I have task to implement VIDEO support. (V3s come with some LCD
support)

>
>>   /* Do we want to initialize a simple FB? */
>>   #define CONFIG_VIDEO_DT_SIMPLEFB
>>  @@ -383,27 +397,49 @@ extern int soft_i2c_gpio_scl;
>>    * 32M uncompressed kernel, 16M compressed kernel, 1M fdt,
>>    * 1M script, 1M pxe and the ramdisk at the end.
>>    */
>>  -
>>  +#ifndef CONFIG_MACH_SUN8I_V3S
>>  +#define BOOTM_SIZE __stringify(0xa000000)
>>   #define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(2000000))
>>   #define FDT_ADDR_R __stringify(SDRAM_OFFSET(3000000))
>>   #define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(3100000))
>>   #define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(3200000))
>>   #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(3300000))
>>  +#else
>>  +/*
>>  + * 64M RAM minus 2MB heap + 16MB for u-boot, stack, fb, etc.
>>  + * 16M uncompressed kernel, 8M compressed kernel, 1M fdt,
>>  + * 1M script, 1M pxe and the ramdisk at the end.
>>  + */
>>  +#define BOOTM_SIZE __stringify(0x2e00000)
>>  +#define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(1000000))
>>  +#define FDT_ADDR_R __stringify(SDRAM_OFFSET(1800000))
>>  +#define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(1900000))
>>  +#define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(1A00000))
>>  +#define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(1B00000))
>>  +#endif
>>   #endif
>>
>>   #define MEM_LAYOUT_ENV_SETTINGS \
>>  - "bootm_size=0xa000000\0" \
>>  + "bootm_size=" BOOTM_SIZE "\0" \
>>           "kernel_addr_r=" KERNEL_ADDR_R "\0" \
>>           "fdt_addr_r=" FDT_ADDR_R "\0" \
>>           "scriptaddr=" SCRIPT_ADDR_R "\0" \
>>           "pxefile_addr_r=" PXEFILE_ADDR_R "\0" \
>>           "ramdisk_addr_r=" RAMDISK_ADDR_R "\0"
>>
>>  +#ifndef CONFIG_MACH_SUN8I_V3S
>>   #define DFU_ALT_INFO_RAM \
>>           "dfu_alt_info_ram=" \
>>           "kernel ram " KERNEL_ADDR_R " 0x1000000;" \
>>           "fdt ram " FDT_ADDR_R " 0x100000;" \
>>           "ramdisk ram " RAMDISK_ADDR_R " 0x4000000\0"
>>  +#else
>>  +#define DFU_ALT_INFO_RAM \
>>  + "dfu_alt_info_ram=" \
>>  + "kernel ram " KERNEL_ADDR_R " 0x800000;" \
>>  + "fdt ram " FDT_ADDR_R " 0x100000;" \
>>  + "ramdisk ram " RAMDISK_ADDR_R " 0x1000000\0"
>>  +#endif
>
> Do you even support DFU?

Also in task.

>
> Thanks,
> Maxime
>
> --
> Maxime Ripard, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com


More information about the U-Boot mailing list