On Sat, 9 Oct 2021 14:18:58 +0200 Angelo Dureghello <angelo.dureghe...@timesys.com> wrote:
Hi Angelo, > Add H2+ Kconfig oiption to display proper cpu at boot time, > and for other future uses, if needed, to differentiate against H3. > > The patch does not change any board defconfig at this stage, > so that nothing is broken. > > Tested this CONFIG_MACH_SUN8I_H2_PLUS to work properly on > banana pi m2 zero. But why? What does that fix except the hardcoded CPU output line? I only see a lot of churn and future issues (forgetting to add MACH_SUN8I_H2_PLUS). As far as we know the two SoCs are very close, and are almost indistinguishable by software, that's why we treat them the same. So is there a good reason for differentiating the two? If you are *really* desperate about that one "CPU: ..." line, have a look at https://linux-sunxi.org/H3#Variants and see if you can make this decision at runtime, check A31 and A31s for an example. Cheers, Andre > Signed-off-by: Angelo Dureghello <angelo.dureghe...@timesys.com> > --- > arch/arm/cpu/armv7/sunxi/Makefile | 1 + > arch/arm/cpu/armv7/sunxi/psci.c | 2 ++ > arch/arm/cpu/armv7/sunxi/tzpc.c | 2 +- > arch/arm/dts/Makefile | 5 +++++ > arch/arm/include/asm/arch-sunxi/cpu_sun4i.h | 4 ++-- > arch/arm/mach-sunxi/Kconfig | 9 +++++++++ > arch/arm/mach-sunxi/board.c | 3 ++- > arch/arm/mach-sunxi/cpu_info.c | 6 ++++-- > arch/arm/mach-sunxi/dram_sunxi_dw.c | 4 ++-- > drivers/clk/sunxi/Makefile | 1 + > drivers/video/sunxi/sunxi_de2.c | 2 +- > 11 files changed, 30 insertions(+), 9 deletions(-) > > diff --git a/arch/arm/cpu/armv7/sunxi/Makefile > b/arch/arm/cpu/armv7/sunxi/Makefile > index 1d40d6a18d..5fdfe45401 100644 > --- a/arch/arm/cpu/armv7/sunxi/Makefile > +++ b/arch/arm/cpu/armv7/sunxi/Makefile > @@ -8,6 +8,7 @@ > obj-y += timer.o > > obj-$(CONFIG_MACH_SUN6I) += tzpc.o > +obj-$(CONFIG_MACH_SUN8I_H2_PLUS) += tzpc.o > obj-$(CONFIG_MACH_SUN8I_H3) += tzpc.o > > ifndef CONFIG_SPL_BUILD > diff --git a/arch/arm/cpu/armv7/sunxi/psci.c b/arch/arm/cpu/armv7/sunxi/psci.c > index 1ac50f558a..bcdbe888bc 100644 > --- a/arch/arm/cpu/armv7/sunxi/psci.c > +++ b/arch/arm/cpu/armv7/sunxi/psci.c > @@ -79,6 +79,7 @@ static void __secure __mdelay(u32 ms) > static void __secure clamp_release(u32 __maybe_unused *clamp) > { > #if defined(CONFIG_MACH_SUN6I) || defined(CONFIG_MACH_SUN7I) || \ > + defined(CONFIG_MACH_SUN8I_H2_PLUS) || \ > defined(CONFIG_MACH_SUN8I_H3) || \ > defined(CONFIG_MACH_SUN8I_R40) > u32 tmp = 0x1ff; > @@ -94,6 +95,7 @@ static void __secure clamp_release(u32 __maybe_unused > *clamp) > static void __secure clamp_set(u32 __maybe_unused *clamp) > { > #if defined(CONFIG_MACH_SUN6I) || defined(CONFIG_MACH_SUN7I) || \ > + defined(CONFIG_MACH_SUN8I_H2_PLUS) || \ > defined(CONFIG_MACH_SUN8I_H3) || \ > defined(CONFIG_MACH_SUN8I_R40) > writel(0xff, clamp); > diff --git a/arch/arm/cpu/armv7/sunxi/tzpc.c b/arch/arm/cpu/armv7/sunxi/tzpc.c > index 0c86a21a3f..44640509ff 100644 > --- a/arch/arm/cpu/armv7/sunxi/tzpc.c > +++ b/arch/arm/cpu/armv7/sunxi/tzpc.c > @@ -17,7 +17,7 @@ void tzpc_init(void) > writel(SUN6I_TZPC_DECPORT0_RTC, &tzpc->decport0_set); > #endif > > -#ifdef CONFIG_MACH_SUN8I_H3 > +#if defined(CONFIG_MACH_SUN8I_H2_PLUS) || defined(CONFIG_MACH_SUN8I_H3) > /* Enable non-secure access to all peripherals */ > writel(SUN8I_H3_TZPC_DECPORT0_ALL, &tzpc->decport0_set); > writel(SUN8I_H3_TZPC_DECPORT1_ALL, &tzpc->decport1_set); > diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile > index b8a382d153..2e58815769 100644 > --- a/arch/arm/dts/Makefile > +++ b/arch/arm/dts/Makefile > @@ -598,6 +598,11 @@ dtb-$(CONFIG_MACH_SUN8I_A83T) += \ > sun8i-a83t-bananapi-m3.dtb \ > sun8i-a83t-cubietruck-plus.dtb \ > sun8i-a83t-tbs-a711.dtb > +dtb-$(CONFIG_MACH_SUN8I_H2_PLUS) += \ > + sun8i-h2-plus-bananapi-m2-zero.dtb \ > + sun8i-h2-plus-libretech-all-h3-cc.dtb \ > + sun8i-h2-plus-orangepi-r1.dtb \ > + sun8i-h2-plus-orangepi-zero.dtb > dtb-$(CONFIG_MACH_SUN8I_H3) += \ > sun8i-h2-plus-bananapi-m2-zero.dtb \ > sun8i-h2-plus-libretech-all-h3-cc.dtb \ > diff --git a/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h > b/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h > index d4c795d89c..b7a66b91e7 100644 > --- a/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h > +++ b/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h > @@ -15,7 +15,7 @@ > !defined(CONFIG_MACH_SUN8I_R40) && \ > !defined(CONFIG_MACH_SUN8I_V3S) > #define SUNXI_SRAM_A2_BASE 0x00040000 > -#ifdef CONFIG_MACH_SUN8I_H3 > +#if defined(CONFIG_MACH_SUN8I_H2_PLUS) || defined(CONFIG_MACH_SUN8I_H3) > #define SUNXI_SRAM_A2_SIZE (48 * 1024) /* 16+32 kiB */ > #else > #define SUNXI_SRAM_A2_SIZE (80 * 1024) /* 16+64 kiB */ > @@ -174,7 +174,7 @@ defined(CONFIG_MACH_SUN50I) > /* module sram */ > #define SUNXI_SRAM_C_BASE 0x01d00000 > > -#ifndef CONFIG_MACH_SUN8I_H3 > +#if !defined(CONFIG_MACH_SUN8I_H2_PLUS) && !defined(CONFIG_MACH_SUN8I_H3) > #define SUNXI_DE_FE0_BASE 0x01e00000 > #else > #define SUNXI_TVE0_BASE 0x01e00000 > diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig > index 1d4a4fdd0c..eae8a0e68b 100644 > --- a/arch/arm/mach-sunxi/Kconfig > +++ b/arch/arm/mach-sunxi/Kconfig > @@ -288,6 +288,15 @@ config MACH_SUN8I_A83T > select MMC_SUNXI_HAS_MODE_SWITCH > select SUPPORT_SPL > > +config MACH_SUN8I_H2_PLUS > + bool "sun8i (Allwinner H2+)" > + select CPU_V7A > + select CPU_V7_HAS_NONSEC > + select CPU_V7_HAS_VIRT > + select ARCH_SUPPORT_PSCI > + select MACH_SUNXI_H3_H5 > + select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT > + > config MACH_SUN8I_H3 > bool "sun8i (Allwinner H3)" > select CPU_V7A > diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c > index d9b04f75fc..adb63e93e7 100644 > --- a/arch/arm/mach-sunxi/board.c > +++ b/arch/arm/mach-sunxi/board.c > @@ -228,7 +228,8 @@ void s_init(void) > "mcr p15, 0, r0, c1, c0, 1\n" > ::: "r0"); > #endif > -#if defined CONFIG_MACH_SUN6I || defined CONFIG_MACH_SUN8I_H3 > +#if defined CONFIG_MACH_SUN6I || defined CONFIG_MACH_SUN8I_H2_PLUS || \ > + defined CONFIG_MACH_SUN8I_H3 > /* Enable non-secure access to some peripherals */ > tzpc_init(); > #endif > diff --git a/arch/arm/mach-sunxi/cpu_info.c b/arch/arm/mach-sunxi/cpu_info.c > index ba33ef2430..429e5ce283 100644 > --- a/arch/arm/mach-sunxi/cpu_info.c > +++ b/arch/arm/mach-sunxi/cpu_info.c > @@ -85,6 +85,8 @@ int print_cpuinfo(void) > printf("CPU: Allwinner A33 (SUN8I %04x)\n", sunxi_get_sram_id()); > #elif defined CONFIG_MACH_SUN8I_A83T > printf("CPU: Allwinner A83T (SUN8I %04x)\n", sunxi_get_sram_id()); > +#elif defined CONFIG_MACH_SUN8I_H2_PLUS > + printf("CPU: Allwinner H2+ (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_R40 > @@ -109,7 +111,7 @@ int print_cpuinfo(void) > } > #endif > > -#ifdef CONFIG_MACH_SUN8I_H3 > +#if defined(CONFIG_MACH_SUN8I_H2_PLUS) || defined(CONFIG_MACH_SUN8I_H3) > > #define SIDC_PRCTL 0x40 > #define SIDC_RDKEY 0x60 > @@ -143,7 +145,7 @@ int sunxi_get_sid(unsigned int *sid) > { > #ifdef CONFIG_AXP221_POWER > return axp_get_sid(sid); > -#elif defined CONFIG_MACH_SUN8I_H3 > +#elif defined(CONFIG_MACH_SUN8I_H2_PLUS) || defined(CONFIG_MACH_SUN8I_H3) > /* > * H3 SID controller has a bug, which makes the initial value of > * SUNXI_SID_BASE at boot wrong. > diff --git a/arch/arm/mach-sunxi/dram_sunxi_dw.c > b/arch/arm/mach-sunxi/dram_sunxi_dw.c > index 9107b114df..f28c23d0c6 100644 > --- a/arch/arm/mach-sunxi/dram_sunxi_dw.c > +++ b/arch/arm/mach-sunxi/dram_sunxi_dw.c > @@ -863,7 +863,7 @@ unsigned long sunxi_dram_init(void) > } > }, > > -#if defined(CONFIG_MACH_SUN8I_H3) > +#if defined(CONFIG_MACH_SUN8I_H2_PLUS) || defined(CONFIG_MACH_SUN8I_H3) > .dx_read_delays = SUN8I_H3_DX_READ_DELAYS, > .dx_write_delays = SUN8I_H3_DX_WRITE_DELAYS, > .ac_delays = SUN8I_H3_AC_DELAYS, > @@ -890,7 +890,7 @@ unsigned long sunxi_dram_init(void) > * the static functions. This saves us #ifdefs, but still keeps the binary > * small. > */ > -#if defined(CONFIG_MACH_SUN8I_H3) > +#if defined(CONFIG_MACH_SUN8I_H2_PLUS) || defined(CONFIG_MACH_SUN8I_H3) > uint16_t socid = SOCID_H3; > #elif defined(CONFIG_MACH_SUN8I_R40) > uint16_t socid = SOCID_R40; > diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile > index 4f9282a8b9..d8565b3946 100644 > --- a/drivers/clk/sunxi/Makefile > +++ b/drivers/clk/sunxi/Makefile > @@ -16,6 +16,7 @@ obj-$(CONFIG_CLK_SUN8I_A83T) += clk_a83t.o > obj-$(CONFIG_CLK_SUN8I_R40) += clk_r40.o > obj-$(CONFIG_CLK_SUN8I_V3S) += clk_v3s.o > obj-$(CONFIG_CLK_SUN9I_A80) += clk_a80.o > +obj-$(CONFIG_CLK_SUN8I_H2_PLUS) += clk_h3.o > obj-$(CONFIG_CLK_SUN8I_H3) += clk_h3.o > obj-$(CONFIG_CLK_SUN50I_H6) += clk_h6.o > obj-$(CONFIG_CLK_SUN50I_H616) += clk_h616.o > diff --git a/drivers/video/sunxi/sunxi_de2.c b/drivers/video/sunxi/sunxi_de2.c > index e02d359cd2..2af2ae4cac 100644 > --- a/drivers/video/sunxi/sunxi_de2.c > +++ b/drivers/video/sunxi/sunxi_de2.c > @@ -84,7 +84,7 @@ static void sunxi_de2_mode_set(int mux, const struct > display_timing *mode, > u32 format; > > /* enable clock */ > -#ifdef CONFIG_MACH_SUN8I_H3 > +#if defined(CONFIG_MACH_SUN8I_H2_PLUS) || defined(CONFIG_MACH_SUN8I_H3) > setbits_le32(&de_clk_regs->rst_cfg, (mux == 0) ? 1 : 4); > #else > setbits_le32(&de_clk_regs->rst_cfg, BIT(mux));