Dne ponedeljek, 04. januar 2021 ob 03:47:06 CET je Samuel Holland napisal(a):
> On 1/3/21 3:26 AM, Jernej Skrabec wrote:
> > H616 is very similar to H6 so most of the infrastructure can be reused.
> > However, two big differences are that it doesn't have functional SRAM A2
> > which is usually used for TF-A and it doesn't have ARISC co-processor.
> > It also needs bigger SPL size - 48 KiB.
> > 
> > Signed-off-by: Jernej Skrabec <jernej.skra...@siol.net>
> > ---
> > 
> >  arch/arm/dts/sunxi-u-boot.dtsi                  |  9 +++++++++
> >  arch/arm/include/asm/arch-sunxi/cpu_sun50i_h6.h |  7 +++++++
> >  arch/arm/mach-sunxi/Kconfig                     | 11 ++++++++++-
> >  arch/arm/mach-sunxi/cpu_info.c                  |  2 ++
> >  drivers/power/Kconfig                           |  1 +
> >  include/configs/sunxi-common.h                  | 10 ++++++++++
> >  6 files changed, 39 insertions(+), 1 deletion(-)
> > 
> > diff --git a/arch/arm/dts/sunxi-u-boot.dtsi
> > b/arch/arm/dts/sunxi-u-boot.dtsi index c77cf7cacf0c..7e8644f390a8 100644
> > --- a/arch/arm/dts/sunxi-u-boot.dtsi
> > +++ b/arch/arm/dts/sunxi-u-boot.dtsi
> > @@ -3,6 +3,9 @@
> > 
> >  #ifdef CONFIG_MACH_SUN50I_H6
> >  #define BL31_ADDR 0x104000
> >  #define  SCP_ADDR 0x114000
> > 
> > +#elif defined(CONFIG_MACH_SUN50I_H616)
> > +#define BL31_ADDR 0x40004000
> > +#define  SCP_ADDR 0x028000
> 
> There should be no SCP_ADDR if there is no SCP firmware.

Nice catch!

> 
> >  #else
> >  #define BL31_ADDR  0x44000
> >  #define  SCP_ADDR  0x50000
> > 
> > @@ -61,6 +64,7 @@
> > 
> >                                     };
> >                             
> >                             };
> > 
> > +#ifndef CONFIG_MACH_SUN50I_H616
> > 
> >                             scp {
> >                             
> >                                     description = "SCP 
firmware";
> >                                     type = "firmware";
> > 
> > @@ -73,6 +77,7 @@
> > 
> >                                             missing-msg 
= "scp-sunxi";
> >                                     
> >                                     };
> >                             
> >                             };
> > 
> > +#endif
> > 
> >                             @fdt-SEQ {
> >                             
> >                                     description = "NAME";
> > 
> > @@ -87,7 +92,11 @@
> > 
> >                             @config-SEQ {
> >                             
> >                                     description = "NAME";
> >                                     firmware = "atf";
> > 
> > +#ifdef CONFIG_MACH_SUN50I_H616
> > +                                   loadables = "uboot";
> > +#else
> > 
> >                                     loadables = "scp", 
"uboot";
> > 
> > +#endif
> > 
> >                                     fdt = "fdt-SEQ";
> >                             
> >                             };
> >                     
> >                     };
> > 
> > diff --git a/arch/arm/include/asm/arch-sunxi/cpu_sun50i_h6.h
> > b/arch/arm/include/asm/arch-sunxi/cpu_sun50i_h6.h index
> > 6392cb07b472..d9cf8ae04288 100644
> > --- a/arch/arm/include/asm/arch-sunxi/cpu_sun50i_h6.h
> > +++ b/arch/arm/include/asm/arch-sunxi/cpu_sun50i_h6.h
> > @@ -28,13 +28,20 @@
> > 
> >  #define SUNXI_GIC400_BASE          0x03020000
> >  #define SUNXI_IOMMU_BASE           0x030F0000
> > 
> > +#ifdef CONFIG_MACH_SUN50I_H6
> > 
> >  #define SUNXI_DRAM_COM_BASE                0x04002000
> >  #define SUNXI_DRAM_CTL0_BASE               0x04003000
> >  #define SUNXI_DRAM_PHY0_BASE               0x04005000
> > 
> > +#endif
> > 
> >  #define SUNXI_NFC_BASE                     0x04011000
> >  #define SUNXI_MMC0_BASE                    0x04020000
> >  #define SUNXI_MMC1_BASE                    0x04021000
> >  #define SUNXI_MMC2_BASE                    0x04022000
> > 
> > +#ifdef CONFIG_MACH_SUN50I_H616
> > +#define SUNXI_DRAM_COM_BASE                0x047FA000
> > +#define SUNXI_DRAM_CTL0_BASE               0x047FB000
> > +#define SUNXI_DRAM_PHY0_BASE               0x04800000
> > +#endif
> > 
> >  #define SUNXI_UART0_BASE           0x05000000
> >  #define SUNXI_UART1_BASE           0x05000400
> > 
> > diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
> > index 1a5497989f04..859b30d74ceb 100644
> > --- a/arch/arm/mach-sunxi/Kconfig
> > +++ b/arch/arm/mach-sunxi/Kconfig
> > @@ -190,9 +190,10 @@ config MACH_SUNXI_H3_H5
> > 
> >     select SUPPORT_SPL
> >  
> >  # TODO: try out A80's 8GiB DRAM space
> > 
> > +# TODO: H616 supports 4 GiB DRAM space
> > 
> >  config SUNXI_DRAM_MAX_SIZE
> >  
> >     hex
> > 
> > -   default 0xC0000000 if MACH_SUN50I || MACH_SUN50I_H5 || 
MACH_SUN50I_H6
> > +   default 0xC0000000 if MACH_SUN50I || MACH_SUN50I_H5 || 
MACH_SUN50I_H6 ||
> > MACH_SUN50I_H616> 
> >     default 0x80000000
> >  
> >  choice
> > 
> > @@ -354,6 +355,12 @@ config MACH_SUN50I_H6
> > 
> >     select PHY_SUN4I_USB
> >     select DRAM_SUN50I_H6
> > 
> > +config MACH_SUN50I_H616
> > +   bool "sun50i (Allwinner H616)"
> > +   select ARM64
> > +   select DRAM_SUN50I_H616
> > +   select SUN50I_GEN_H6
> > +
> > 
> >  endchoice
> >  
> >  # The sun8i SoCs share a lot, this helps to avoid a lot of "if A23 ||
> >  A33"
> > 
> > @@ -589,6 +596,7 @@ config SYS_CLK_FREQ
> > 
> >     default 816000000 if MACH_SUN50I || MACH_SUN50I_H5
> >     default 1008000000 if MACH_SUN8I
> >     default 1008000000 if MACH_SUN9I
> > 
> > +   default 1008000000 if MACH_SUN50I_H616
> > 
> >  config SYS_CONFIG_NAME
> >  
> >     default "sun4i" if MACH_SUN4I
> > 
> > @@ -599,6 +607,7 @@ config SYS_CONFIG_NAME
> > 
> >     default "sun9i" if MACH_SUN9I
> >     default "sun50i" if MACH_SUN50I
> >     default "sun50i" if MACH_SUN50I_H6
> > 
> > +   default "sun50i" if MACH_SUN50I_H616
> > 
> >  config SYS_BOARD
> >  
> >     default "sunxi"
> > 
> > diff --git a/arch/arm/mach-sunxi/cpu_info.c
> > b/arch/arm/mach-sunxi/cpu_info.c index 875e5a1a8a8e..ba33ef24300c 100644
> > --- a/arch/arm/mach-sunxi/cpu_info.c
> > +++ b/arch/arm/mach-sunxi/cpu_info.c
> > @@ -99,6 +99,8 @@ int print_cpuinfo(void)
> > 
> >     puts("CPU:   Allwinner H5 (SUN50I)\n");
> >  
> >  #elif defined CONFIG_MACH_SUN50I_H6
> >  
> >     puts("CPU:   Allwinner H6 (SUN50I)\n");
> > 
> > +#elif defined CONFIG_MACH_SUN50I_H616
> > +   puts("CPU:   Allwinner H616 (SUN50I)\n");
> > 
> >  #else
> >  #warning Please update cpu_info.c with correct CPU information
> >  
> >     puts("CPU:   SUNXI Family\n");
> > 
> > diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
> > index d17cf2d9112a..c5fbf1f832a9 100644
> > --- a/drivers/power/Kconfig
> > +++ b/drivers/power/Kconfig
> > @@ -13,6 +13,7 @@ choice
> > 
> >     depends on ARCH_SUNXI
> >     default AXP209_POWER if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I
> >     default AXP221_POWER if MACH_SUN6I || MACH_SUN8I_A23 || 
MACH_SUN8I_A33
> >     || MACH_SUN8I_R40> 
> > +   default AXP305_POWER if MACH_SUN50I_H616
> > 
> >     default AXP818_POWER if MACH_SUN8I_A83T
> >     default SUNXI_NO_PMIC if MACH_SUNXI_H3_H5 || MACH_SUN50I ||
> >     MACH_SUN8I_V3S
> > 
> > diff --git a/include/configs/sunxi-common.h
> > b/include/configs/sunxi-common.h index 203cb10fbabc..6e8f547214d6 100644
> > --- a/include/configs/sunxi-common.h
> > +++ b/include/configs/sunxi-common.h
> > @@ -178,9 +178,14 @@
> > 
> >  #define LOW_LEVEL_SRAM_STACK               0x00018000
> >  #endif /* !CONFIG_ARM64 */
> >  #elif CONFIG_SUNXI_SRAM_ADDRESS == 0x20000
> > 
> > +#ifdef CONFIG_MACH_SUN50I_H616
> > +#define CONFIG_SPL_MAX_SIZE                0xbfa0          /* 48 KiB 
*/
> > +#define LOW_LEVEL_SRAM_STACK               0x58000
> > +#else
> > 
> >  #define CONFIG_SPL_MAX_SIZE                0x7fa0          /* 32 KiB 
*/
> >  /* end of SRAM A2 on H6 for now */
> >  #define LOW_LEVEL_SRAM_STACK               0x00118000
> > 
> > +#endif
> > 
> >  #else
> >  #define CONFIG_SPL_MAX_SIZE                0x5fa0          /* 24KB on 
sun4i/sun7i */
> >  #define LOW_LEVEL_SRAM_STACK               0x00008000      /* End of sram 
> > */
> > 
> > @@ -188,7 +193,12 @@
> > 
> >  #define CONFIG_SPL_STACK           LOW_LEVEL_SRAM_STACK
> > 
> > +/* H616 supports 48 KiB SPL */
> > +#ifdef CONFIG_MACH_SUN50I_H616
> > +#define CONFIG_SPL_PAD_TO          49152           /* decimal 
for 'dd' */
> 
> H616 supports much larger SPLs than 48 KiB, and CONFIG_SPL_PAD_TO
> enforces both a minimum and maximum size. So please leave
> CONFIG_SPL_PAD_TO undefined on the new platform (or for all
> SUN50I_GEN_H6, where the SPL size restriction was removed).

I thought padding is required for proper build. I'll test that.

Best regards,
Jernej

> 
> > +#else
> > 
> >  #define CONFIG_SPL_PAD_TO          32768           /* decimal 
for 'dd' */
> > 
> > +#endif
> > 
> >  /* I2C */
> 
> Cheers,
> Samuel




Reply via email to