diff mbox series

[U-Boot,17/36] rockchip: sdram_common: add common dram_init_banksize

Message ID 1522142971-20739-18-git-send-email-kever.yang@rock-chips.com
State Changes Requested
Delegated to: Philipp Tomsich
Headers show
Series rockchip: clean up board file for rockchip SoCs | expand

Commit Message

Kever Yang March 27, 2018, 9:29 a.m. UTC
dram_init_banksize() can be common used by all SoCs, move it into
sdram_common.c

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 arch/arm/mach-rockchip/sdram_common.c | 63 ++++++++++++++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)

Comments

Philipp Tomsich April 1, 2018, 8:21 p.m. UTC | #1
> dram_init_banksize() can be common used by all SoCs, move it into
> sdram_common.c
> 
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
> 
>  arch/arm/mach-rockchip/sdram_common.c | 63 ++++++++++++++++++++++++++++++++++-
>  1 file changed, 62 insertions(+), 1 deletion(-)
> 

Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Philipp Tomsich April 1, 2018, 9:50 p.m. UTC | #2
On Tue, 27 Mar 2018, Kever Yang wrote:

> dram_init_banksize() can be common used by all SoCs, move it into
> sdram_common.c
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
> arch/arm/mach-rockchip/sdram_common.c | 63 ++++++++++++++++++++++++++++++++++-
> 1 file changed, 62 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-rockchip/sdram_common.c b/arch/arm/mach-rockchip/sdram_common.c
> index 3a71f09..ff86096 100644
> --- a/arch/arm/mach-rockchip/sdram_common.c
> +++ b/arch/arm/mach-rockchip/sdram_common.c
> @@ -21,13 +21,74 @@ struct ddr_param {
>
> #define PARAM_DRAM_INFO_OFFSET 0x2000000
>
> +#define TRUST_PARAMETER_OFFSET    (34 * 1024 * 1024)

This isn't covered by what you commit message states as content for this 
patch.

> +
> +struct tos_parameter_t {
> +	u32 version;
> +	u32 checksum;
> +	struct {
> +		char name[8];
> +		s64 phy_addr;
> +		u32 size;
> +		u32 flags;
> +	} tee_mem;
> +	struct {
> +		char name[8];
> +		s64 phy_addr;
> +		u32 size;
> +		u32 flags;
> +	} drm_mem;
> +	s64 reserve[8];
> +};
> +
> +int dram_init_banksize(void)
> +{
> +	size_t top = min((unsigned long)(gd->ram_size + CONFIG_SYS_SDRAM_BASE),
> +			 gd->ram_top);
> +
> +#ifdef CONFIG_ARM64
> +	/* Reserve 0x200000 for ATF bl31 */
> +	gd->bd->bi_dram[0].start = 0x200000;
> +	gd->bd->bi_dram[0].size = top - gd->bd->bi_dram[0].start;

This should only be done when preparing to start a
 	IH_OS_ARM_TRUSTED_FIRMWARE.

> +#else
> +#ifdef CONFIG_SPL_OPTEE

I don't think that this CONFIG_SPL_OPTEE was what the comments in the 
OPTEE thread have arrived at... please check again.

Just as an unreleated comment/reminder: you still need to revise the other 
series as per the comments and final decision on how to implement it.

> +	struct tos_parameter_t *tos_parameter;
> +
> +	tos_parameter = (struct tos_parameter_t *)(CONFIG_SYS_SDRAM_BASE +
> +			TRUST_PARAMETER_OFFSET);
> +
> +	if (tos_parameter->tee_mem.flags == 1) {

Please describe what this 'flags' member means and how it's encoded.

> +		gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
> +		gd->bd->bi_dram[0].size = tos_parameter->tee_mem.phy_addr
> +					- CONFIG_SYS_SDRAM_BASE;
> +		gd->bd->bi_dram[1].start = tos_parameter->tee_mem.phy_addr +
> +					tos_parameter->tee_mem.size;
> +		gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
> +					+ top - gd->bd->bi_dram[1].start;
> +	} else {
> +		gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
> +		gd->bd->bi_dram[0].size = 0x8400000;
> +		/* Reserve 32M for OPTEE with TA */
> +		gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE
> +					+ gd->bd->bi_dram[0].size + 0x2000000;
> +		gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
> +					+ top - gd->bd->bi_dram[1].start;
> +	}

This should again only be done, when the appropriate IH_OS_* is entered.

> +#else
> +	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
> +	gd->bd->bi_dram[0].size = top - gd->bd->bi_dram[0].start;

This should be the default (so you can remove the #if paths) once you make 
sure that the other paths are actually called for entering the particular 
IH_OS_* types.

> +#endif
> +#endif
> +
> +	return 0;
> +}
> +
> size_t rockchip_sdram_size(phys_addr_t reg)
> {
> 	u32 rank, col, bk, cs0_row, cs1_row, bw, row_3_4;
> 	size_t chipsize_mb = 0;
> 	size_t size_mb = 0;
> 	u32 ch;
> -

Ok, but not really needed (unless you want to do a separate 'cosmetic' or 
'whitespace' patch.  Touching an unrelated function is usually a bad idea.

> 	u32 sys_reg = readl(reg);
> 	u32 ch_num = 1 + ((sys_reg >> SYS_REG_NUM_CH_SHIFT)
> 		       & SYS_REG_NUM_CH_MASK);
>
Kever Yang April 2, 2018, 2:40 a.m. UTC | #3
On 04/02/2018 05:50 AM, Philipp Tomsich wrote:
>
>
> On Tue, 27 Mar 2018, Kever Yang wrote:
>
>> dram_init_banksize() can be common used by all SoCs, move it into
>> sdram_common.c
>>
>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>> ---
>>
>> arch/arm/mach-rockchip/sdram_common.c | 63
>> ++++++++++++++++++++++++++++++++++-
>> 1 file changed, 62 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/arm/mach-rockchip/sdram_common.c
>> b/arch/arm/mach-rockchip/sdram_common.c
>> index 3a71f09..ff86096 100644
>> --- a/arch/arm/mach-rockchip/sdram_common.c
>> +++ b/arch/arm/mach-rockchip/sdram_common.c
>> @@ -21,13 +21,74 @@ struct ddr_param {
>>
>> #define PARAM_DRAM_INFO_OFFSET 0x2000000
>>
>> +#define TRUST_PARAMETER_OFFSET    (34 * 1024 * 1024)
>
> This isn't covered by what you commit message states as content for
> this patch.

Will add it.
>
>> +
>> +struct tos_parameter_t {
>> +    u32 version;
>> +    u32 checksum;
>> +    struct {
>> +        char name[8];
>> +        s64 phy_addr;
>> +        u32 size;
>> +        u32 flags;
>> +    } tee_mem;
>> +    struct {
>> +        char name[8];
>> +        s64 phy_addr;
>> +        u32 size;
>> +        u32 flags;
>> +    } drm_mem;
>> +    s64 reserve[8];
>> +};
>> +
>> +int dram_init_banksize(void)
>> +{
>> +    size_t top = min((unsigned long)(gd->ram_size +
>> CONFIG_SYS_SDRAM_BASE),
>> +             gd->ram_top);
>> +
>> +#ifdef CONFIG_ARM64
>> +    /* Reserve 0x200000 for ATF bl31 */
>> +    gd->bd->bi_dram[0].start = 0x200000;
>> +    gd->bd->bi_dram[0].size = top - gd->bd->bi_dram[0].start;
>
> This should only be done when preparing to start a
>     IH_OS_ARM_TRUSTED_FIRMWARE.

Yes, you are right, but ATF in ARM64 is not optional, it's mandatory, so
I don't think we need
a #if/#else here.
>
>> +#else
>> +#ifdef CONFIG_SPL_OPTEE
>
> I don't think that this CONFIG_SPL_OPTEE was what the comments in the
> OPTEE thread have arrived at... please check again.
>

Will update and use new MACRO, I leave it there because you have such a
sloooow response and then a looong time discussion.

Thanks,
- Kever
> Just as an unreleated comment/reminder: you still need to revise the
> other series as per the comments and final decision on how to
> implement it.
>
>> +    struct tos_parameter_t *tos_parameter;
>> +
>> +    tos_parameter = (struct tos_parameter_t *)(CONFIG_SYS_SDRAM_BASE +
>> +            TRUST_PARAMETER_OFFSET);
>> +
>> +    if (tos_parameter->tee_mem.flags == 1) {
>
> Please describe what this 'flags' member means and how it's encoded.
>
>> +        gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
>> +        gd->bd->bi_dram[0].size = tos_parameter->tee_mem.phy_addr
>> +                    - CONFIG_SYS_SDRAM_BASE;
>> +        gd->bd->bi_dram[1].start = tos_parameter->tee_mem.phy_addr +
>> +                    tos_parameter->tee_mem.size;
>> +        gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
>> +                    + top - gd->bd->bi_dram[1].start;
>> +    } else {
>> +        gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
>> +        gd->bd->bi_dram[0].size = 0x8400000;
>> +        /* Reserve 32M for OPTEE with TA */
>> +        gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE
>> +                    + gd->bd->bi_dram[0].size + 0x2000000;
>> +        gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
>> +                    + top - gd->bd->bi_dram[1].start;
>> +    }
>
> This should again only be done, when the appropriate IH_OS_* is entered.
>
>> +#else
>> +    gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
>> +    gd->bd->bi_dram[0].size = top - gd->bd->bi_dram[0].start;
>
> This should be the default (so you can remove the #if paths) once you
> make sure that the other paths are actually called for entering the
> particular IH_OS_* types.
>
>> +#endif
>> +#endif
>> +
>> +    return 0;
>> +}
>> +
>> size_t rockchip_sdram_size(phys_addr_t reg)
>> {
>>     u32 rank, col, bk, cs0_row, cs1_row, bw, row_3_4;
>>     size_t chipsize_mb = 0;
>>     size_t size_mb = 0;
>>     u32 ch;
>> -
>
> Ok, but not really needed (unless you want to do a separate 'cosmetic'
> or 'whitespace' patch.  Touching an unrelated function is usually a
> bad idea.
>
>>     u32 sys_reg = readl(reg);
>>     u32 ch_num = 1 + ((sys_reg >> SYS_REG_NUM_CH_SHIFT)
>>                & SYS_REG_NUM_CH_MASK);
>>
>
diff mbox series

Patch

diff --git a/arch/arm/mach-rockchip/sdram_common.c b/arch/arm/mach-rockchip/sdram_common.c
index 3a71f09..ff86096 100644
--- a/arch/arm/mach-rockchip/sdram_common.c
+++ b/arch/arm/mach-rockchip/sdram_common.c
@@ -21,13 +21,74 @@  struct ddr_param {
 
 #define PARAM_DRAM_INFO_OFFSET 0x2000000
 
+#define TRUST_PARAMETER_OFFSET    (34 * 1024 * 1024)
+
+struct tos_parameter_t {
+	u32 version;
+	u32 checksum;
+	struct {
+		char name[8];
+		s64 phy_addr;
+		u32 size;
+		u32 flags;
+	} tee_mem;
+	struct {
+		char name[8];
+		s64 phy_addr;
+		u32 size;
+		u32 flags;
+	} drm_mem;
+	s64 reserve[8];
+};
+
+int dram_init_banksize(void)
+{
+	size_t top = min((unsigned long)(gd->ram_size + CONFIG_SYS_SDRAM_BASE),
+			 gd->ram_top);
+
+#ifdef CONFIG_ARM64
+	/* Reserve 0x200000 for ATF bl31 */
+	gd->bd->bi_dram[0].start = 0x200000;
+	gd->bd->bi_dram[0].size = top - gd->bd->bi_dram[0].start;
+#else
+#ifdef CONFIG_SPL_OPTEE
+	struct tos_parameter_t *tos_parameter;
+
+	tos_parameter = (struct tos_parameter_t *)(CONFIG_SYS_SDRAM_BASE +
+			TRUST_PARAMETER_OFFSET);
+
+	if (tos_parameter->tee_mem.flags == 1) {
+		gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+		gd->bd->bi_dram[0].size = tos_parameter->tee_mem.phy_addr
+					- CONFIG_SYS_SDRAM_BASE;
+		gd->bd->bi_dram[1].start = tos_parameter->tee_mem.phy_addr +
+					tos_parameter->tee_mem.size;
+		gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
+					+ top - gd->bd->bi_dram[1].start;
+	} else {
+		gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+		gd->bd->bi_dram[0].size = 0x8400000;
+		/* Reserve 32M for OPTEE with TA */
+		gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE
+					+ gd->bd->bi_dram[0].size + 0x2000000;
+		gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
+					+ top - gd->bd->bi_dram[1].start;
+	}
+#else
+	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+	gd->bd->bi_dram[0].size = top - gd->bd->bi_dram[0].start;
+#endif
+#endif
+
+	return 0;
+}
+
 size_t rockchip_sdram_size(phys_addr_t reg)
 {
 	u32 rank, col, bk, cs0_row, cs1_row, bw, row_3_4;
 	size_t chipsize_mb = 0;
 	size_t size_mb = 0;
 	u32 ch;
-
 	u32 sys_reg = readl(reg);
 	u32 ch_num = 1 + ((sys_reg >> SYS_REG_NUM_CH_SHIFT)
 		       & SYS_REG_NUM_CH_MASK);