mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] ARM: webasto-ccbv2: Add variant with 512MB RAM
@ 2021-05-04  9:26 Holger Assmann
  2021-05-04  9:36 ` Rouven Czerwinski
  0 siblings, 1 reply; 3+ messages in thread
From: Holger Assmann @ 2021-05-04  9:26 UTC (permalink / raw)
  To: barebox; +Cc: Holger Assmann

Add variant for 512MB RAM. RAM size is appended to the image name.

Signed-off-by: Holger Assmann <h.assmann@pengutronix.de>
---
 ...sh-header-imx6ul-webasto-ccbv2-256.imxcfg} |  0
 ...ash-header-imx6ul-webasto-ccbv2-512.imxcfg | 88 +++++++++++++++++++
 arch/arm/boards/webasto-ccbv2/lowlevel.c      | 22 ++++-
 images/Makefile.imx                           |  4 +-
 4 files changed, 109 insertions(+), 5 deletions(-)
 rename arch/arm/boards/webasto-ccbv2/{flash-header-imx6ul-webasto-ccbv2.imxcfg => flash-header-imx6ul-webasto-ccbv2-256.imxcfg} (100%)
 create mode 100644 arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-512.imxcfg

diff --git a/arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2.imxcfg b/arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-256.imxcfg
similarity index 100%
rename from arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2.imxcfg
rename to arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-256.imxcfg
diff --git a/arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-512.imxcfg b/arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-512.imxcfg
new file mode 100644
index 0000000000..d438a665f1
--- /dev/null
+++ b/arch/arm/boards/webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-512.imxcfg
@@ -0,0 +1,88 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+loadaddr 0x80000000
+soc imx6
+ivtofs 0x400
+
+/* Enable all clocks */
+wm 32 0x020c4068 0xffffffff
+wm 32 0x020c406c 0xffffffff
+wm 32 0x020c4070 0xffffffff
+wm 32 0x020c4074 0xffffffff
+wm 32 0x020c4078 0xffffffff
+wm 32 0x020c407c 0xffffffff
+wm 32 0x020c4080 0xffffffff
+
+/* IOMUX */
+/* DDR IO type */
+wm 32 0x020E04B4 0x000C0000
+wm 32 0x020E04AC 0x00000000
+/* Clock */
+wm 32 0x020E027C 0x00000028
+/* Control */
+wm 32 0x020E0250 0x00000028
+wm 32 0x020E024C 0x00000028
+wm 32 0x020E0490 0x00000028
+wm 32 0x020E0288 0x00000028
+wm 32 0x020E0270 0x00000000
+wm 32 0x020E0260 0x00000028
+wm 32 0x020E0264 0x00000028
+wm 32 0x020E04A0 0x00000028
+/* Data strobe */
+wm 32 0x020E0494 0x00020000
+wm 32 0x020E0280 0x00000028
+wm 32 0x020E0284 0x00000028
+/* Data */
+wm 32 0x020E04B0 0x00020000
+wm 32 0x020E0498 0x00000028
+wm 32 0x020E04A4 0x00000028
+wm 32 0x020E0244 0x00000028
+wm 32 0x020E0248 0x00000028
+
+/* DDR Controller registers */
+wm 32 0x021B001C 0x00008000
+wm 32 0x021B0800 0xA1390003
+/* Calibration values */
+wm 32 0x021B080C 0x00090000
+wm 32 0x021B083C 0x01580158
+wm 32 0x021B0848 0x40405050
+wm 32 0x021B0850 0x4040524C
+wm 32 0x021B081C 0x33333333
+wm 32 0x021B0820 0x33333333
+wm 32 0x021B082C 0xf3333333
+wm 32 0x021B0830 0xf3333333
+/* END of calibration values */
+wm 32 0x021B08C0 0x00921012
+wm 32 0x021B08b8 0x00000800
+
+/* MMDC init */
+wm 32 0x021B0004 0x0002002D
+wm 32 0x021B0008 0x1b333030
+wm 32 0x021B000C 0x676B52F3
+wm 32 0x021B0010 0xB66D0B63
+wm 32 0x021B0014 0x01FF00DB
+/* Consider reducing RALAT (currently set to 5) */
+wm 32 0x021B0018 0x00211740
+wm 32 0x021B001C 0x00008000
+wm 32 0x021B002C 0x000026D2
+wm 32 0x021B0030 0x006B1023
+wm 32 0x021B0040 0x0000004F
+wm 32 0x021B0000 0x84180000
+
+/* Mode registers writes for CS0 */
+wm 32 0x021B001C 0x02008032
+wm 32 0x021B001C 0x00008033
+wm 32 0x021B001C 0x00048031
+wm 32 0x021B001C 0x15208030
+wm 32 0x021B001C 0x04008040
+
+/* Final DDR setup */
+wm 32 0x021B0020 0x00007800
+wm 32 0x021B0818 0x00000227
+wm 32 0x021B0004 0x0002556D
+wm 32 0x021B0404 0x00011006
+wm 32 0x021B001C 0x00000000
+
+/* Disable TZASC bypass */
+wm 32 0x020E4024 0x00000001
+
+#include <mach/habv4-imx6-gencsf.h>
diff --git a/arch/arm/boards/webasto-ccbv2/lowlevel.c b/arch/arm/boards/webasto-ccbv2/lowlevel.c
index 8529ea3735..d3c9fa73f9 100644
--- a/arch/arm/boards/webasto-ccbv2/lowlevel.c
+++ b/arch/arm/boards/webasto-ccbv2/lowlevel.c
@@ -32,7 +32,7 @@ static void configure_uart(void)
 
 }
 
-static void noinline start_ccbv2(u32 r0)
+static void noinline start_ccbv2(u32 r0, unsigned long memsize)
 {
 	int tee_size;
 	void *tee;
@@ -48,7 +48,7 @@ static void noinline start_ccbv2(u32 r0)
 	 */
 	if(IS_ENABLED(CONFIG_FIRMWARE_CCBV2_OPTEE)
 	   && !(r0 > MX6_MMDC_P0_BASE_ADDR
-	        &&  r0 < MX6_MMDC_P0_BASE_ADDR + SZ_256M)) {
+	        &&  r0 < MX6_MMDC_P0_BASE_ADDR + memsize)) {
 		get_builtin_firmware(ccbv2_optee_bin, &tee, &tee_size);
 
 		memset((void *)OPTEE_OVERLAY_LOCATION, 0, 0x1000);
@@ -59,7 +59,7 @@ static void noinline start_ccbv2(u32 r0)
 	imx6ul_barebox_entry(__dtb_z_imx6ul_webasto_ccbv2_start);
 }
 
-ENTRY_FUNCTION(start_imx6ul_ccbv2, r0, r1, r2)
+ENTRY_FUNCTION(start_imx6ul_ccbv2_256mb, r0, r1, r2)
 {
 
 	imx6ul_cpu_lowlevel_init();
@@ -70,5 +70,19 @@ ENTRY_FUNCTION(start_imx6ul_ccbv2, r0, r1, r2)
 	setup_c();
 	barrier();
 
-	start_ccbv2(r0);
+	start_ccbv2(r0, SZ_256M);
+}
+
+ENTRY_FUNCTION(start_imx6ul_ccbv2_512mb, r0, r1, r2)
+{
+
+	imx6ul_cpu_lowlevel_init();
+
+	arm_setup_stack(0x00910000);
+
+	relocate_to_current_adr();
+	setup_c();
+	barrier();
+
+	start_ccbv2(r0, SZ_512M);
 }
diff --git a/images/Makefile.imx b/images/Makefile.imx
index 382493488b..b86224edc1 100644
--- a/images/Makefile.imx
+++ b/images/Makefile.imx
@@ -366,7 +366,9 @@ $(call build_imx_habv4img, CONFIG_MACH_TECHNEXION_PICO_HOBBIT, start_imx6ul_pico
 
 $(call build_imx_habv4img, CONFIG_MACH_DIGI_CCIMX6ULSBCPRO, start_imx6ul_ccimx6ulsbcpro, digi-ccimx6ulsom/flash-header-imx6ul-ccimx6ulsbcpro, imx6ul-ccimx6ulsbcpro)
 
-$(call build_imx_habv4img, CONFIG_MACH_WEBASTO_CCBV2, start_imx6ul_ccbv2, webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2, imx6ul-webasto-ccbv2)
+$(call build_imx_habv4img, CONFIG_MACH_WEBASTO_CCBV2, start_imx6ul_ccbv2_256mb, webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-256, imx6ul-webasto-ccbv2-256m)
+
+$(call build_imx_habv4img, CONFIG_MACH_WEBASTO_CCBV2, start_imx6ul_ccbv2_512mb, webasto-ccbv2/flash-header-imx6ul-webasto-ccbv2-512, imx6ul-webasto-ccbv2-512m)
 
 # ----------------------- vf6xx based boards ---------------------------
 pblb-$(CONFIG_MACH_VF610_TWR) += start_vf610_twr
-- 
2.29.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] ARM: webasto-ccbv2: Add variant with 512MB RAM
  2021-05-04  9:26 [PATCH] ARM: webasto-ccbv2: Add variant with 512MB RAM Holger Assmann
@ 2021-05-04  9:36 ` Rouven Czerwinski
  2021-05-04  9:51   ` Ahmad Fatoum
  0 siblings, 1 reply; 3+ messages in thread
From: Rouven Czerwinski @ 2021-05-04  9:36 UTC (permalink / raw)
  To: Holger Assmann, barebox

Hi Holger,

On Tue, 2021-05-04 at 11:26 +0200, Holger Assmann wrote:
> 
> diff --git a/arch/arm/boards/webasto-ccbv2/lowlevel.c b/arch/arm/boards/webasto-ccbv2/lowlevel.c
> index 8529ea3735..d3c9fa73f9 100644
> --- a/arch/arm/boards/webasto-ccbv2/lowlevel.c
> +++ b/arch/arm/boards/webasto-ccbv2/lowlevel.c
> 
> -static void noinline start_ccbv2(u32 r0)
> +static void noinline start_ccbv2(u32 r0, unsigned long memsize)
>  {
>  	int tee_size;
>  	void *tee;
> @@ -48,7 +48,7 @@ static void noinline start_ccbv2(u32 r0)
>  	 */
>  	if(IS_ENABLED(CONFIG_FIRMWARE_CCBV2_OPTEE)
>  	   && !(r0 > MX6_MMDC_P0_BASE_ADDR
> -	        &&  r0 < MX6_MMDC_P0_BASE_ADDR + SZ_256M)) {
> +	        &&  r0 < MX6_MMDC_P0_BASE_ADDR + memsize)) {
>  		get_builtin_firmware(ccbv2_optee_bin, &tee, &tee_size);

Unfortunately, OP-TEE build for the old 256MB variant won't work for
the new 512MB variant. Depending on the OP-TEE Memory size we should
add a new FIRMWARE KCONFIG variable and retrieve the correct firmware
per board, i.e.

if (memsize == SZ_256M) {
	get_builtin_firmware(ccbv2_optee_bin, &tee, &tee_size)
} else {
	get_builtin_firmware(ccbv2_optee_512m_bin, &tee, &tee_size)

with a new FIRMWARE_CCBV2_OPTEE_512M symbol.

TBH, I don't like this, since our firmware KConfig will expand
needlessly for the variants. However currently OP-TEE is not setup to
be able to boot based on different memory sizes…

Regards,
Rouven Czerwinski



_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] ARM: webasto-ccbv2: Add variant with 512MB RAM
  2021-05-04  9:36 ` Rouven Czerwinski
@ 2021-05-04  9:51   ` Ahmad Fatoum
  0 siblings, 0 replies; 3+ messages in thread
From: Ahmad Fatoum @ 2021-05-04  9:51 UTC (permalink / raw)
  To: Rouven Czerwinski, Holger Assmann, barebox

Hi,

On 04.05.21 11:36, Rouven Czerwinski wrote:
> Hi Holger,
> 
> On Tue, 2021-05-04 at 11:26 +0200, Holger Assmann wrote:
>>
>> diff --git a/arch/arm/boards/webasto-ccbv2/lowlevel.c b/arch/arm/boards/webasto-ccbv2/lowlevel.c
>> index 8529ea3735..d3c9fa73f9 100644
>> --- a/arch/arm/boards/webasto-ccbv2/lowlevel.c
>> +++ b/arch/arm/boards/webasto-ccbv2/lowlevel.c
>>
>> -static void noinline start_ccbv2(u32 r0)
>> +static void noinline start_ccbv2(u32 r0, unsigned long memsize)
>>  {
>>  	int tee_size;
>>  	void *tee;
>> @@ -48,7 +48,7 @@ static void noinline start_ccbv2(u32 r0)
>>  	 */
>>  	if(IS_ENABLED(CONFIG_FIRMWARE_CCBV2_OPTEE)
>>  	   && !(r0 > MX6_MMDC_P0_BASE_ADDR
>> -	        &&  r0 < MX6_MMDC_P0_BASE_ADDR + SZ_256M)) {
>> +	        &&  r0 < MX6_MMDC_P0_BASE_ADDR + memsize)) {

You could hardcode memsize == SZ_512M here.

>>  		get_builtin_firmware(ccbv2_optee_bin, &tee, &tee_size);
> 
> Unfortunately, OP-TEE build for the old 256MB variant won't work for
> the new 512MB variant. Depending on the OP-TEE Memory size we should
> add a new FIRMWARE KCONFIG variable and retrieve the correct firmware
> per board, i.e.
> 
> if (memsize == SZ_256M) {
> 	get_builtin_firmware(ccbv2_optee_bin, &tee, &tee_size)
> } else {
> 	get_builtin_firmware(ccbv2_optee_512m_bin, &tee, &tee_size)
> 
> with a new FIRMWARE_CCBV2_OPTEE_512M symbol.
> 
> TBH, I don't like this, since our firmware KConfig will expand
> needlessly for the variants. However currently OP-TEE is not setup to
> be able to boot based on different memory sizes…

You could just ship both firmwares always if they are small enough?

If you got some GPIO to differentiate between both variants, you could
also use the same image for both (and drop the r0 hack above).

Cheers,
Ahmad

> 
> Regards,
> Rouven Czerwinski
> 
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-05-04  9:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-04  9:26 [PATCH] ARM: webasto-ccbv2: Add variant with 512MB RAM Holger Assmann
2021-05-04  9:36 ` Rouven Czerwinski
2021-05-04  9:51   ` Ahmad Fatoum

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox