[U-Boot] [U-Boot,1/2] sunxi: Add basic H3 support

Hans de Goede
2015-11-20T15:39:14Z

Hi,

On 17-11-15 15:12, Jens Kuske wrote:
> Add initial sun8i H3 support, only uart + mmc are supported for now.
>
> Signed-off-by: Jens Kuske <jenskuske@gmail.com>

Thanks! I've applied both patches and added 2 more from
myself to bring in the latest upstream dts[i] work and
add defconfigs for the orangepi_plus and orangepi_pc.

I know that the upstream dts work is not yet fully final
due to bus_gates discussion, but the bus_gates bindings
(or any clk stuff for that matter) are not used by
u-boot. So from a u-boot pov this does not matter
(and when booting the kernel u-boot uses the dtb from
the boot medium, not its own copy).

Given the popularity of H3 boards I believe that it is
important to get basic support in place now. Esp. to
keep the contributions from various people working
on H3 support flowing. I'm very happy to see that various
people are contributing to this and I do not want to
discourage them by taking for-ever to merge this :)

Regards,

Hans

p.s.

I've listed myself as maintainer for the orangepi_plus
for now but I do not actually have one, feel free to
submit a follow-up patch updating board/sunxi/MAINTAINERS
to make you the maintainer for that one.

> ---
> arch/arm/cpu/armv7/sunxi/board.c | 4 ++++
> arch/arm/cpu/armv7/sunxi/cpu_info.c | 2 ++
> arch/arm/include/asm/arch-sunxi/gpio.h | 1 +
> board/sunxi/Kconfig | 7 ++++++-
> drivers/power/Kconfig | 5 +++--
> include/configs/sun8i.h | 2 ++
> 6 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/sunxi/board.c b/arch/arm/cpu/armv7/sunxi/board.c
> index 4785ac6..7615e50 100644
> --- a/arch/arm/cpu/armv7/sunxi/board.c
> +++ b/arch/arm/cpu/armv7/sunxi/board.c
> @@ -72,6 +72,10 @@ static int gpio_init(void)
> sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUN8I_A33_GPB_UART0);
> sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUN8I_A33_GPB_UART0);
> sunxi_gpio_set_pull(SUNXI_GPB(1), SUNXI_GPIO_PULL_UP);
> +#elif CONFIG_CONS_INDEX == 1 && defined(CONFIG_MACH_SUN8I_H3)
> + sunxi_gpio_set_cfgpin(SUNXI_GPA(4), SUN8I_H3_GPA_UART0);
> + sunxi_gpio_set_cfgpin(SUNXI_GPA(5), SUN8I_H3_GPA_UART0);
> + sunxi_gpio_set_pull(SUNXI_GPA(5), 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);
> diff --git a/arch/arm/cpu/armv7/sunxi/cpu_info.c b/arch/arm/cpu/armv7/sunxi/cpu_info.c
> index 05fef32..1e73332 100644
> --- a/arch/arm/cpu/armv7/sunxi/cpu_info.c
> +++ b/arch/arm/cpu/armv7/sunxi/cpu_info.c
> @@ -69,6 +69,8 @@ int print_cpuinfo(void)
> puts("CPU: Allwinner A23 (SUN8I)\n");
> #elif defined CONFIG_MACH_SUN8I_A33
> puts("CPU: Allwinner A33 (SUN8I)\n");
> +#elif defined CONFIG_MACH_SUN8I_H3
> + puts("CPU: Allwinner H3 (SUN8I)\n");
> #elif defined CONFIG_MACH_SUN9I
> puts("CPU: Allwinner A80 (SUN9I)\n");
> #else
> diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h b/arch/arm/include/asm/arch-sunxi/gpio.h
> index 8382101..7af5e29 100644
> --- a/arch/arm/include/asm/arch-sunxi/gpio.h
> +++ b/arch/arm/include/asm/arch-sunxi/gpio.h
> @@ -147,6 +147,7 @@ enum sunxi_gpio_number {
> #define SUN7I_GPA_GMAC 5
> #define SUN6I_GPA_SDC2 5
> #define SUN6I_GPA_SDC3 4
> +#define SUN8I_H3_GPA_UART0 2
>
> #define SUN4I_GPB_TWI0 2
> #define SUN4I_GPB_TWI1 2
> diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
> index f6f2a60..e1f574f 100644
> --- a/board/sunxi/Kconfig
> +++ b/board/sunxi/Kconfig
> @@ -68,6 +68,11 @@ config MACH_SUN8I_A33
> select SUPPORT_SPL
> select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
>
> +config MACH_SUN8I_H3
> + bool "sun8i (Allwinner H3)"
> + select CPU_V7
> + select SUNXI_GEN_SUN6I
> +
> config MACH_SUN9I
> bool "sun9i (Allwinner A80)"
> select CPU_V7
> @@ -78,7 +83,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
> + default y if MACH_SUN8I_A23 || MACH_SUN8I_A33 || MACH_SUN8I_H3
>
>
> config DRAM_CLK
> diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
> index 809f8f1..1936e5f 100644
> --- a/drivers/power/Kconfig
> +++ b/drivers/power/Kconfig
> @@ -8,7 +8,8 @@ choice
> prompt "Select Sunxi PMIC Variant"
> depends on ARCH_SUNXI
> default AXP209_POWER if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I
> - default AXP221_POWER if MACH_SUN6I || MACH_SUN8I
> + default AXP221_POWER if MACH_SUN6I || MACH_SUN8I_A23 || MACH_SUN8I_A33
> + default SUNXI_NO_PMIC if MACH_SUN8I_H3
>
> config SUNXI_NO_PMIC
> boolean "board without a pmic"
> @@ -31,7 +32,7 @@ config AXP209_POWER
>
> config AXP221_POWER
> boolean "axp221 / axp223 pmic support"
> - depends on MACH_SUN6I || MACH_SUN8I
> + depends on MACH_SUN6I || MACH_SUN8I_A23 || MACH_SUN8I_A33
> ---help---
> Select this to enable support for the axp221/axp223 pmic found on most
> A23 and A31 boards.
> diff --git a/include/configs/sun8i.h b/include/configs/sun8i.h
> index 4fc6365..113e320 100644
> --- a/include/configs/sun8i.h
> +++ b/include/configs/sun8i.h
> @@ -25,6 +25,8 @@
> #define CONFIG_ARMV7_PSCI_NR_CPUS 2
> #elif defined(CONFIG_MACH_SUN8I_A33)
> #define CONFIG_ARMV7_PSCI_NR_CPUS 4
> +#elif defined(CONFIG_MACH_SUN8I_H3)
> +#define CONFIG_ARMV7_PSCI_NR_CPUS 4
> #else
> #error Unsupported sun8i variant
> #endif
>