> From: Yanhong Wang <yanhong.w...@starfivetech.com>
> Sent: Thursday, June 15, 2023 5:37 PM
> To: u-boot@lists.denx.de; Rick Jian-Zhi Chen(陳建志) <r...@andestech.com>; Leo 
> Yu-Chi Liang(梁育齊) <ycli...@andestech.com>; Joe Hershberger 
> <joe.hershber...@ni.com>; Ramon Fried <rfried....@gmail.com>
> Cc: Yanhong Wang <yanhong.w...@starfivetech.com>; Torsten Duwe <d...@lst.de>; 
> Leyfoon Tan <leyfoon....@starfivetech.com>; samin . guo 
> <samin....@starfivetech.com>; Walker Chen <walker.c...@starfivetech.com>; Hal 
> Feng <hal.f...@starfivetech.com>
> Subject: [PATCH v5 10/11] ram: starfive: Read memory size information from 
> EEPROM
>
> StarFive VisionFive 2 has two versions, 1.2A and 1.3B, each version of DDR 
> capacity includes 2G/4G/8G, a DT can not support multiple capacities, so the 
> capacity size information is recorded to EEPROM, when DDR initialization 
> required capacity size information is read from EEPROM.
>
> If there is no information in EEPROM, it is initialized with the default size 
> defined in DT.
>
> Signed-off-by: Yanhong Wang <yanhong.w...@starfivetech.com>
> ---
>  arch/riscv/cpu/jh7110/spl.c         | 32 ++++++++++++++++++++++++++++-
>  drivers/ram/starfive/starfive_ddr.c |  2 --
>  2 files changed, 31 insertions(+), 3 deletions(-)
>
> diff --git a/arch/riscv/cpu/jh7110/spl.c b/arch/riscv/cpu/jh7110/spl.c index 
> 104f0fe949..72adcefa0e 100644
> --- a/arch/riscv/cpu/jh7110/spl.c
> +++ b/arch/riscv/cpu/jh7110/spl.c
> @@ -3,19 +3,49 @@
>   * Copyright (C) 2022 StarFive Technology Co., Ltd.
>   * Author: Yanhong Wang<yanhong.w...@starfivetech.com>
>   */
> -
> +#include <common.h>
> +#include <asm/arch/eeprom.h>
>  #include <asm/csr.h>
>  #include <asm/sections.h>
>  #include <dm.h>
> +#include <linux/sizes.h>
>  #include <log.h>
> +#include <init.h>
>
>  #define CSR_U74_FEATURE_DISABLE        0x7c1
>  #define L2_LIM_MEM_END 0x81FFFFFUL
>
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +static bool check_ddr_size(phys_size_t size) {
> +       switch (size) {
> +       case SZ_2:
> +       case SZ_4:
> +       case SZ_8:
> +       case SZ_16:

In commit message, it describes that "DDR capacity includes 2G/4G/8G".
Is it mismatch here ?

> +               return true;
> +       default:
> +               return false;
> +       }
> +}
> +
>  int spl_soc_init(void)
>  {
>         int ret;
>         struct udevice *dev;
> +       phys_size_t size;
> +
> +       ret = fdtdec_setup_mem_size_base();
> +       if (ret)
> +               return ret;

It maybe unnecessary to add return above. If it fail to parse memory
node from DT, then there
has no chance to get ddr size from eeprom.

Thanks,
Rick

> +
> +       /* Read the definition of the DDR size from eeprom, and if not,
> +        * use the definition in DT
> +        */
> +       size = (get_ddr_size_from_eeprom() >> 16) & 0xFF;
> +       if (check_ddr_size(size))
> +               gd->ram_size = size << 30;
>
>         /* DDR init */
>         ret = uclass_get_device(UCLASS_RAM, 0, &dev); diff --git 
> a/drivers/ram/starfive/starfive_ddr.c b/drivers/ram/starfive/starfive_ddr.c
> index 553f2ce6f4..a0a3d6b33d 100644
> --- a/drivers/ram/starfive/starfive_ddr.c
> +++ b/drivers/ram/starfive/starfive_ddr.c
> @@ -72,8 +72,6 @@ static int starfive_ddr_probe(struct udevice *dev)
>         u64 rate;
>         int ret;
>
> -       /* Read memory base and size from DT */
> -       fdtdec_setup_mem_size_base();
>         priv->info.base = gd->ram_base;
>         priv->info.size = gd->ram_size;
>
> --
> 2.17.1

Reply via email to