Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-14 Thread Tony Dinh
On Sat, Jan 14, 2023 at 2:53 PM Pali Rohár  wrote:
>
> On Saturday 14 January 2023 14:48:28 Tony Dinh wrote:
> > Hi Pali,
> >
> > On Sat, Jan 14, 2023 at 2:12 PM Tony Dinh  wrote:
> > >
> > > Hi Pali,
> > >
> > > On Sat, Jan 14, 2023 at 1:44 PM Pali Rohár  wrote:
> > > >
> > > > On Saturday 14 January 2023 13:35:08 Tony Dinh wrote:
> > > > > Hi Pali,
> > > > >
> > > > > On Fri, Jan 13, 2023 at 5:32 PM Pali Rohár  wrote:
> > > > > >
> > > > > > On Wednesday 11 January 2023 21:56:41 Pali Rohár wrote:
> > > > > > > On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > > > > > > > Hi Pali,
> > > > > > > >
> > > > > > > > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  
> > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > > > > > > > Hi Pali,
> > > > > > > > > >
> > > > > > > > > > I got burned for being lazy :) it turned out that the mix 
> > > > > > > > > > of #ifdef
> > > > > > > > > > and #if defined was the problem. Just stepped away and came 
> > > > > > > > > > back for a
> > > > > > > > > > few minutes and I can see that I just need to define the 
> > > > > > > > > > CONFIG_DDR4
> > > > > > > > > > properly in arch/arm/mach-mvebu/Kconfig and build it to 
> > > > > > > > > > pass the
> > > > > > > > > > CONFIG_DDR4 stuff.
> > > > > > > > > >
> > > > > > > > > > One more small hurdle after that was 
> > > > > > > > > > CONFIG_USE_PRIVATE_LIBGCC must be
> > > > > > > > > > undefined for it to build (so I am using
> > > > > > > > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > > > > > > > arch/arm/lib/lib.a)
> > > > > > > > >
> > > > > > > > > Hello! It is normally a good idea to unset 
> > > > > > > > > CONFIG_USE_PRIVATE_LIBGCC
> > > > > > > > > unless you have compiled gcc for target CPU.
> > > > > > > >
> > > > > > > > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, 
> > > > > > > > since
> > > > > > > > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I 
> > > > > > > > got
> > > > > > > > several build errors like these:
> > > > > > > >
> > > > > > > > ld.bfd: 
> > > > > > > > drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > > > > > > > function `mv_ddr4_copt_get':
> > > > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > > > undefined reference to `__aeabi_i2d'
> > > > > > > > ld.bfd: 
> > > > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > > > undefined reference to `__aeabi_dmul'
> > > > > > > > ld.bfd: 
> > > > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > > > undefined reference to `__aeabi_d2uiz'
> > > > > > >
> > > > > > > This looks like a bug in that training code. I would need to see 
> > > > > > > source
> > > > > > > code, so I can figure out how to fix it.
> > > > > >
> > > > > > Have you solved this issue? Or if not, can you show what you had on 
> > > > > > that
> > > > > > problematic line 809?
> > > > >
> > > > > No, I have not and actually have no idea what that code does! And I
> > > > > thought you recognized the error, so I submitted the DDR4 patch so you
> > > > > can compile and see the error. Here is the code snipet, the error is
> > > > > now at 717.
> > > > >
> > > > > # grep -n10 PBS_VALUE_FACTOR
> > > > > /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
> > > > > 704- u8 copt_val;
> > > > > 705- u8 dq_idx;
> > > > > 706- u8 center_zone_max_low = 0;
> > > > > 707- u8 center_zone_min_high = 128;
> > > > > 708- u8 vw_zone_max_low = 0;
> > > > > 709- u8 vw_zone_min_high = 128;
> > > > > 710- u8 min_vw = 63; /* minimum valid window between all bits */
> > > > > 711- u8 center_low_el;
> > > > > 712- u8 center_high_el;
> > > > > 713-
> > > > > 714: /* lambda calculated as D * PBS_VALUE_FACTOR / d */
> > > > > 715- //printf("Copt::Debug::\t");
> > > > > 716- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> > > > > 717- center_per_dq[dq_idx] = 0.5 * (vw_h[dq_idx] + vw_l[dq_idx]);
> > > > > 718- vw_per_dq[dq_idx] = 1 + (vw_h[dq_idx] - vw_l[dq_idx]);
> > > > > 719- if (min_vw > vw_per_dq[dq_idx])
> > > > > 720- min_vw = vw_per_dq[dq_idx];
> > > > > 721- }
> > > > > 722-
> > > > > 723- /* calculate center zone */
> > > > > 724- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> > > >
> > > > Haha! That is pretty simple. On line 717 you have fractional number 0.5
> > > > which is represented by floating point and all numeric operation on that
> > > > line are done as floating point.
> > > >
> > > > U-Boot and kernel does not floating point HW and instruct compiler to
> > > > replace all floating point operations by function calls (which implement
> > > > software floating point support).
> > > >
> > > > U-Boot (for very good reasons) do not implement any floating point
> > > > operations.
> > > >
> > > > Fix should be very simple, use only integer operations. So replace
> > > >
> > > >   0.5 * som

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-14 Thread Pali Rohár
On Saturday 14 January 2023 14:48:28 Tony Dinh wrote:
> Hi Pali,
> 
> On Sat, Jan 14, 2023 at 2:12 PM Tony Dinh  wrote:
> >
> > Hi Pali,
> >
> > On Sat, Jan 14, 2023 at 1:44 PM Pali Rohár  wrote:
> > >
> > > On Saturday 14 January 2023 13:35:08 Tony Dinh wrote:
> > > > Hi Pali,
> > > >
> > > > On Fri, Jan 13, 2023 at 5:32 PM Pali Rohár  wrote:
> > > > >
> > > > > On Wednesday 11 January 2023 21:56:41 Pali Rohár wrote:
> > > > > > On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > > > > > > Hi Pali,
> > > > > > >
> > > > > > > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  
> > > > > > > wrote:
> > > > > > > >
> > > > > > > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > > > > > > Hi Pali,
> > > > > > > > >
> > > > > > > > > I got burned for being lazy :) it turned out that the mix of 
> > > > > > > > > #ifdef
> > > > > > > > > and #if defined was the problem. Just stepped away and came 
> > > > > > > > > back for a
> > > > > > > > > few minutes and I can see that I just need to define the 
> > > > > > > > > CONFIG_DDR4
> > > > > > > > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass 
> > > > > > > > > the
> > > > > > > > > CONFIG_DDR4 stuff.
> > > > > > > > >
> > > > > > > > > One more small hurdle after that was 
> > > > > > > > > CONFIG_USE_PRIVATE_LIBGCC must be
> > > > > > > > > undefined for it to build (so I am using
> > > > > > > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > > > > > > arch/arm/lib/lib.a)
> > > > > > > >
> > > > > > > > Hello! It is normally a good idea to unset 
> > > > > > > > CONFIG_USE_PRIVATE_LIBGCC
> > > > > > > > unless you have compiled gcc for target CPU.
> > > > > > >
> > > > > > > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, 
> > > > > > > since
> > > > > > > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > > > > > > several build errors like these:
> > > > > > >
> > > > > > > ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: 
> > > > > > > in
> > > > > > > function `mv_ddr4_copt_get':
> > > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > > undefined reference to `__aeabi_i2d'
> > > > > > > ld.bfd: 
> > > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > > undefined reference to `__aeabi_dmul'
> > > > > > > ld.bfd: 
> > > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > > undefined reference to `__aeabi_d2uiz'
> > > > > >
> > > > > > This looks like a bug in that training code. I would need to see 
> > > > > > source
> > > > > > code, so I can figure out how to fix it.
> > > > >
> > > > > Have you solved this issue? Or if not, can you show what you had on 
> > > > > that
> > > > > problematic line 809?
> > > >
> > > > No, I have not and actually have no idea what that code does! And I
> > > > thought you recognized the error, so I submitted the DDR4 patch so you
> > > > can compile and see the error. Here is the code snipet, the error is
> > > > now at 717.
> > > >
> > > > # grep -n10 PBS_VALUE_FACTOR
> > > > /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
> > > > 704- u8 copt_val;
> > > > 705- u8 dq_idx;
> > > > 706- u8 center_zone_max_low = 0;
> > > > 707- u8 center_zone_min_high = 128;
> > > > 708- u8 vw_zone_max_low = 0;
> > > > 709- u8 vw_zone_min_high = 128;
> > > > 710- u8 min_vw = 63; /* minimum valid window between all bits */
> > > > 711- u8 center_low_el;
> > > > 712- u8 center_high_el;
> > > > 713-
> > > > 714: /* lambda calculated as D * PBS_VALUE_FACTOR / d */
> > > > 715- //printf("Copt::Debug::\t");
> > > > 716- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> > > > 717- center_per_dq[dq_idx] = 0.5 * (vw_h[dq_idx] + vw_l[dq_idx]);
> > > > 718- vw_per_dq[dq_idx] = 1 + (vw_h[dq_idx] - vw_l[dq_idx]);
> > > > 719- if (min_vw > vw_per_dq[dq_idx])
> > > > 720- min_vw = vw_per_dq[dq_idx];
> > > > 721- }
> > > > 722-
> > > > 723- /* calculate center zone */
> > > > 724- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> > >
> > > Haha! That is pretty simple. On line 717 you have fractional number 0.5
> > > which is represented by floating point and all numeric operation on that
> > > line are done as floating point.
> > >
> > > U-Boot and kernel does not floating point HW and instruct compiler to
> > > replace all floating point operations by function calls (which implement
> > > software floating point support).
> > >
> > > U-Boot (for very good reasons) do not implement any floating point
> > > operations.
> > >
> > > Fix should be very simple, use only integer operations. So replace
> > >
> > >   0.5 * something
> > >
> > > by:
> > >
> > >   something / 2
> > >
> > > And check if it compiles and if it works.
> > >
> > > I'm surprised that Marvell was trying to do floating point...
> > >
> >
> > Yes!!! that was impressive how quick you saw the root cause. I've
> > replaced those floating point 

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-14 Thread Tony Dinh
Hi Pali,

On Sat, Jan 14, 2023 at 2:12 PM Tony Dinh  wrote:
>
> Hi Pali,
>
> On Sat, Jan 14, 2023 at 1:44 PM Pali Rohár  wrote:
> >
> > On Saturday 14 January 2023 13:35:08 Tony Dinh wrote:
> > > Hi Pali,
> > >
> > > On Fri, Jan 13, 2023 at 5:32 PM Pali Rohár  wrote:
> > > >
> > > > On Wednesday 11 January 2023 21:56:41 Pali Rohár wrote:
> > > > > On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > > > > > Hi Pali,
> > > > > >
> > > > > > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> > > > > > >
> > > > > > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > > > > > Hi Pali,
> > > > > > > >
> > > > > > > > I got burned for being lazy :) it turned out that the mix of 
> > > > > > > > #ifdef
> > > > > > > > and #if defined was the problem. Just stepped away and came 
> > > > > > > > back for a
> > > > > > > > few minutes and I can see that I just need to define the 
> > > > > > > > CONFIG_DDR4
> > > > > > > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > > > > > > CONFIG_DDR4 stuff.
> > > > > > > >
> > > > > > > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC 
> > > > > > > > must be
> > > > > > > > undefined for it to build (so I am using
> > > > > > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > > > > > arch/arm/lib/lib.a)
> > > > > > >
> > > > > > > Hello! It is normally a good idea to unset 
> > > > > > > CONFIG_USE_PRIVATE_LIBGCC
> > > > > > > unless you have compiled gcc for target CPU.
> > > > > >
> > > > > > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> > > > > > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > > > > > several build errors like these:
> > > > > >
> > > > > > ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > > > > > function `mv_ddr4_copt_get':
> > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > undefined reference to `__aeabi_i2d'
> > > > > > ld.bfd: 
> > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > undefined reference to `__aeabi_dmul'
> > > > > > ld.bfd: 
> > > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > > undefined reference to `__aeabi_d2uiz'
> > > > >
> > > > > This looks like a bug in that training code. I would need to see 
> > > > > source
> > > > > code, so I can figure out how to fix it.
> > > >
> > > > Have you solved this issue? Or if not, can you show what you had on that
> > > > problematic line 809?
> > >
> > > No, I have not and actually have no idea what that code does! And I
> > > thought you recognized the error, so I submitted the DDR4 patch so you
> > > can compile and see the error. Here is the code snipet, the error is
> > > now at 717.
> > >
> > > # grep -n10 PBS_VALUE_FACTOR
> > > /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
> > > 704- u8 copt_val;
> > > 705- u8 dq_idx;
> > > 706- u8 center_zone_max_low = 0;
> > > 707- u8 center_zone_min_high = 128;
> > > 708- u8 vw_zone_max_low = 0;
> > > 709- u8 vw_zone_min_high = 128;
> > > 710- u8 min_vw = 63; /* minimum valid window between all bits */
> > > 711- u8 center_low_el;
> > > 712- u8 center_high_el;
> > > 713-
> > > 714: /* lambda calculated as D * PBS_VALUE_FACTOR / d */
> > > 715- //printf("Copt::Debug::\t");
> > > 716- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> > > 717- center_per_dq[dq_idx] = 0.5 * (vw_h[dq_idx] + vw_l[dq_idx]);
> > > 718- vw_per_dq[dq_idx] = 1 + (vw_h[dq_idx] - vw_l[dq_idx]);
> > > 719- if (min_vw > vw_per_dq[dq_idx])
> > > 720- min_vw = vw_per_dq[dq_idx];
> > > 721- }
> > > 722-
> > > 723- /* calculate center zone */
> > > 724- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> >
> > Haha! That is pretty simple. On line 717 you have fractional number 0.5
> > which is represented by floating point and all numeric operation on that
> > line are done as floating point.
> >
> > U-Boot and kernel does not floating point HW and instruct compiler to
> > replace all floating point operations by function calls (which implement
> > software floating point support).
> >
> > U-Boot (for very good reasons) do not implement any floating point
> > operations.
> >
> > Fix should be very simple, use only integer operations. So replace
> >
> >   0.5 * something
> >
> > by:
> >
> >   something / 2
> >
> > And check if it compiles and if it works.
> >
> > I'm surprised that Marvell was trying to do floating point...
> >
>
> Yes!!! that was impressive how quick you saw the root cause. I've
> replaced those floating point operations with integer operations and
> it built fine. Let see it will run.

Indeed! It runs without problem with the changes below.

diff --git a/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
b/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
index e4e86c6f2e..7e596ce78a 100644
--- a/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
+++ b

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-14 Thread Tony Dinh
Hi Pali,

On Sat, Jan 14, 2023 at 1:44 PM Pali Rohár  wrote:
>
> On Saturday 14 January 2023 13:35:08 Tony Dinh wrote:
> > Hi Pali,
> >
> > On Fri, Jan 13, 2023 at 5:32 PM Pali Rohár  wrote:
> > >
> > > On Wednesday 11 January 2023 21:56:41 Pali Rohár wrote:
> > > > On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > > > > Hi Pali,
> > > > >
> > > > > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> > > > > >
> > > > > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > > > > Hi Pali,
> > > > > > >
> > > > > > > I got burned for being lazy :) it turned out that the mix of 
> > > > > > > #ifdef
> > > > > > > and #if defined was the problem. Just stepped away and came back 
> > > > > > > for a
> > > > > > > few minutes and I can see that I just need to define the 
> > > > > > > CONFIG_DDR4
> > > > > > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > > > > > CONFIG_DDR4 stuff.
> > > > > > >
> > > > > > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC 
> > > > > > > must be
> > > > > > > undefined for it to build (so I am using
> > > > > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > > > > arch/arm/lib/lib.a)
> > > > > >
> > > > > > Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
> > > > > > unless you have compiled gcc for target CPU.
> > > > >
> > > > > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> > > > > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > > > > several build errors like these:
> > > > >
> > > > > ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > > > > function `mv_ddr4_copt_get':
> > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > undefined reference to `__aeabi_i2d'
> > > > > ld.bfd: 
> > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > undefined reference to `__aeabi_dmul'
> > > > > ld.bfd: 
> > > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > > undefined reference to `__aeabi_d2uiz'
> > > >
> > > > This looks like a bug in that training code. I would need to see source
> > > > code, so I can figure out how to fix it.
> > >
> > > Have you solved this issue? Or if not, can you show what you had on that
> > > problematic line 809?
> >
> > No, I have not and actually have no idea what that code does! And I
> > thought you recognized the error, so I submitted the DDR4 patch so you
> > can compile and see the error. Here is the code snipet, the error is
> > now at 717.
> >
> > # grep -n10 PBS_VALUE_FACTOR
> > /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
> > 704- u8 copt_val;
> > 705- u8 dq_idx;
> > 706- u8 center_zone_max_low = 0;
> > 707- u8 center_zone_min_high = 128;
> > 708- u8 vw_zone_max_low = 0;
> > 709- u8 vw_zone_min_high = 128;
> > 710- u8 min_vw = 63; /* minimum valid window between all bits */
> > 711- u8 center_low_el;
> > 712- u8 center_high_el;
> > 713-
> > 714: /* lambda calculated as D * PBS_VALUE_FACTOR / d */
> > 715- //printf("Copt::Debug::\t");
> > 716- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> > 717- center_per_dq[dq_idx] = 0.5 * (vw_h[dq_idx] + vw_l[dq_idx]);
> > 718- vw_per_dq[dq_idx] = 1 + (vw_h[dq_idx] - vw_l[dq_idx]);
> > 719- if (min_vw > vw_per_dq[dq_idx])
> > 720- min_vw = vw_per_dq[dq_idx];
> > 721- }
> > 722-
> > 723- /* calculate center zone */
> > 724- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
>
> Haha! That is pretty simple. On line 717 you have fractional number 0.5
> which is represented by floating point and all numeric operation on that
> line are done as floating point.
>
> U-Boot and kernel does not floating point HW and instruct compiler to
> replace all floating point operations by function calls (which implement
> software floating point support).
>
> U-Boot (for very good reasons) do not implement any floating point
> operations.
>
> Fix should be very simple, use only integer operations. So replace
>
>   0.5 * something
>
> by:
>
>   something / 2
>
> And check if it compiles and if it works.
>
> I'm surprised that Marvell was trying to do floating point...
>

Yes!!! that was impressive how quick you saw the root cause. I've
replaced those floating point operations with integer operations and
it built fine. Let see it will run.

Thanks,
Tony

> > Here are the build errors with the current code.
> >
> > 
> >   rm -f spl/common/spl/built-in.o; ar cDPrsT spl/common/spl/built-in.o
> > spl/common/spl/spl.o spl/common/spl/spl_bootrom.o
> > spl/common/spl/spl_spi.o
> >   ( cd spl && ld.bfd  -T u-boot-spl.lds --gc-sections -Bstatic
> > --gc-sections  --no-dynamic-linker --build-id=none -Ttext 0x4030
> > arch/arm/cpu/armv7/start.o --whole-archive
> > arch/arm/mach-mvebu/built-in.o arch/arm/cpu/armv7/built-in.o
> > arch/arm/cpu/built-in.o arch/arm/lib/built-in.o
> > board/thecus/n2350/built-in.o common/spl/built-in.o
> > c

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-14 Thread Pali Rohár
On Saturday 14 January 2023 13:35:08 Tony Dinh wrote:
> Hi Pali,
> 
> On Fri, Jan 13, 2023 at 5:32 PM Pali Rohár  wrote:
> >
> > On Wednesday 11 January 2023 21:56:41 Pali Rohár wrote:
> > > On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > > > Hi Pali,
> > > >
> > > > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> > > > >
> > > > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > > > Hi Pali,
> > > > > >
> > > > > > I got burned for being lazy :) it turned out that the mix of #ifdef
> > > > > > and #if defined was the problem. Just stepped away and came back 
> > > > > > for a
> > > > > > few minutes and I can see that I just need to define the CONFIG_DDR4
> > > > > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > > > > CONFIG_DDR4 stuff.
> > > > > >
> > > > > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must 
> > > > > > be
> > > > > > undefined for it to build (so I am using
> > > > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > > > arch/arm/lib/lib.a)
> > > > >
> > > > > Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
> > > > > unless you have compiled gcc for target CPU.
> > > >
> > > > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> > > > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > > > several build errors like these:
> > > >
> > > > ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > > > function `mv_ddr4_copt_get':
> > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > undefined reference to `__aeabi_i2d'
> > > > ld.bfd: 
> > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > undefined reference to `__aeabi_dmul'
> > > > ld.bfd: 
> > > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > > undefined reference to `__aeabi_d2uiz'
> > >
> > > This looks like a bug in that training code. I would need to see source
> > > code, so I can figure out how to fix it.
> >
> > Have you solved this issue? Or if not, can you show what you had on that
> > problematic line 809?
> 
> No, I have not and actually have no idea what that code does! And I
> thought you recognized the error, so I submitted the DDR4 patch so you
> can compile and see the error. Here is the code snipet, the error is
> now at 717.
> 
> # grep -n10 PBS_VALUE_FACTOR
> /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
> 704- u8 copt_val;
> 705- u8 dq_idx;
> 706- u8 center_zone_max_low = 0;
> 707- u8 center_zone_min_high = 128;
> 708- u8 vw_zone_max_low = 0;
> 709- u8 vw_zone_min_high = 128;
> 710- u8 min_vw = 63; /* minimum valid window between all bits */
> 711- u8 center_low_el;
> 712- u8 center_high_el;
> 713-
> 714: /* lambda calculated as D * PBS_VALUE_FACTOR / d */
> 715- //printf("Copt::Debug::\t");
> 716- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
> 717- center_per_dq[dq_idx] = 0.5 * (vw_h[dq_idx] + vw_l[dq_idx]);
> 718- vw_per_dq[dq_idx] = 1 + (vw_h[dq_idx] - vw_l[dq_idx]);
> 719- if (min_vw > vw_per_dq[dq_idx])
> 720- min_vw = vw_per_dq[dq_idx];
> 721- }
> 722-
> 723- /* calculate center zone */
> 724- for (dq_idx = 0; dq_idx < 8; dq_idx++) {

Haha! That is pretty simple. On line 717 you have fractional number 0.5
which is represented by floating point and all numeric operation on that
line are done as floating point.

U-Boot and kernel does not floating point HW and instruct compiler to
replace all floating point operations by function calls (which implement
software floating point support).

U-Boot (for very good reasons) do not implement any floating point
operations.

Fix should be very simple, use only integer operations. So replace

  0.5 * something

by:

  something / 2

And check if it compiles and if it works.

I'm surprised that Marvell was trying to do floating point...

> Here are the build errors with the current code.
> 
> 
>   rm -f spl/common/spl/built-in.o; ar cDPrsT spl/common/spl/built-in.o
> spl/common/spl/spl.o spl/common/spl/spl_bootrom.o
> spl/common/spl/spl_spi.o
>   ( cd spl && ld.bfd  -T u-boot-spl.lds --gc-sections -Bstatic
> --gc-sections  --no-dynamic-linker --build-id=none -Ttext 0x4030
> arch/arm/cpu/armv7/start.o --whole-archive
> arch/arm/mach-mvebu/built-in.o arch/arm/cpu/armv7/built-in.o
> arch/arm/cpu/built-in.o arch/arm/lib/built-in.o
> board/thecus/n2350/built-in.o common/spl/built-in.o
> common/init/built-in.o boot/built-in.o common/built-in.o
> cmd/built-in.o env/built-in.o lib/built-in.o disk/built-in.o
> drivers/built-in.o dts/built-in.o fs/built-in.o  --no-whole-archive
> arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Map u-boot-spl.map -o
> u-boot-spl )
> ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> function `mv_ddr4_copt_get':
> /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:717:
> undefined reference to `__aeabi_i2

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-14 Thread Tony Dinh
Hi Pali,

On Fri, Jan 13, 2023 at 5:32 PM Pali Rohár  wrote:
>
> On Wednesday 11 January 2023 21:56:41 Pali Rohár wrote:
> > On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > > Hi Pali,
> > >
> > > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> > > >
> > > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > > Hi Pali,
> > > > >
> > > > > I got burned for being lazy :) it turned out that the mix of #ifdef
> > > > > and #if defined was the problem. Just stepped away and came back for a
> > > > > few minutes and I can see that I just need to define the CONFIG_DDR4
> > > > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > > > CONFIG_DDR4 stuff.
> > > > >
> > > > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must be
> > > > > undefined for it to build (so I am using
> > > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > > arch/arm/lib/lib.a)
> > > >
> > > > Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
> > > > unless you have compiled gcc for target CPU.
> > >
> > > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> > > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > > several build errors like these:
> > >
> > > ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > > function `mv_ddr4_copt_get':
> > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > undefined reference to `__aeabi_i2d'
> > > ld.bfd: 
> > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > undefined reference to `__aeabi_dmul'
> > > ld.bfd: 
> > > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > > undefined reference to `__aeabi_d2uiz'
> >
> > This looks like a bug in that training code. I would need to see source
> > code, so I can figure out how to fix it.
>
> Have you solved this issue? Or if not, can you show what you had on that
> problematic line 809?

No, I have not and actually have no idea what that code does! And I
thought you recognized the error, so I submitted the DDR4 patch so you
can compile and see the error. Here is the code snipet, the error is
now at 717.

# grep -n10 PBS_VALUE_FACTOR
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c
704- u8 copt_val;
705- u8 dq_idx;
706- u8 center_zone_max_low = 0;
707- u8 center_zone_min_high = 128;
708- u8 vw_zone_max_low = 0;
709- u8 vw_zone_min_high = 128;
710- u8 min_vw = 63; /* minimum valid window between all bits */
711- u8 center_low_el;
712- u8 center_high_el;
713-
714: /* lambda calculated as D * PBS_VALUE_FACTOR / d */
715- //printf("Copt::Debug::\t");
716- for (dq_idx = 0; dq_idx < 8; dq_idx++) {
717- center_per_dq[dq_idx] = 0.5 * (vw_h[dq_idx] + vw_l[dq_idx]);
718- vw_per_dq[dq_idx] = 1 + (vw_h[dq_idx] - vw_l[dq_idx]);
719- if (min_vw > vw_per_dq[dq_idx])
720- min_vw = vw_per_dq[dq_idx];
721- }
722-
723- /* calculate center zone */
724- for (dq_idx = 0; dq_idx < 8; dq_idx++) {

Here are the build errors with the current code.


  rm -f spl/common/spl/built-in.o; ar cDPrsT spl/common/spl/built-in.o
spl/common/spl/spl.o spl/common/spl/spl_bootrom.o
spl/common/spl/spl_spi.o
  ( cd spl && ld.bfd  -T u-boot-spl.lds --gc-sections -Bstatic
--gc-sections  --no-dynamic-linker --build-id=none -Ttext 0x4030
arch/arm/cpu/armv7/start.o --whole-archive
arch/arm/mach-mvebu/built-in.o arch/arm/cpu/armv7/built-in.o
arch/arm/cpu/built-in.o arch/arm/lib/built-in.o
board/thecus/n2350/built-in.o common/spl/built-in.o
common/init/built-in.o boot/built-in.o common/built-in.o
cmd/built-in.o env/built-in.o lib/built-in.o disk/built-in.o
drivers/built-in.o dts/built-in.o fs/built-in.o  --no-whole-archive
arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Map u-boot-spl.map -o
u-boot-spl )
ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
function `mv_ddr4_copt_get':
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:717:
undefined reference to `__aeabi_i2d'
ld.bfd: 
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:717:
undefined reference to `__aeabi_dmul'
ld.bfd: 
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:717:
undefined reference to `__aeabi_d2uiz'
ld.bfd: 
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:757:
undefined reference to `__aeabi_i2d'
ld.bfd: 
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:757:
undefined reference to `__aeabi_i2d'
ld.bfd: 
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:757:
undefined reference to `__aeabi_dmul'
ld.bfd: 
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:757:
undefined reference to `__aeabi_i2d'
ld.bfd: 
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:757:
undefined reference to `__aeabi_dadd'
ld.bfd: 

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-13 Thread Pali Rohár
On Wednesday 11 January 2023 21:56:41 Pali Rohár wrote:
> On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > Hi Pali,
> > 
> > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> > >
> > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > Hi Pali,
> > > >
> > > > I got burned for being lazy :) it turned out that the mix of #ifdef
> > > > and #if defined was the problem. Just stepped away and came back for a
> > > > few minutes and I can see that I just need to define the CONFIG_DDR4
> > > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > > CONFIG_DDR4 stuff.
> > > >
> > > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must be
> > > > undefined for it to build (so I am using
> > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > arch/arm/lib/lib.a)
> > >
> > > Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
> > > unless you have compiled gcc for target CPU.
> > 
> > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > several build errors like these:
> > 
> > ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > function `mv_ddr4_copt_get':
> > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > undefined reference to `__aeabi_i2d'
> > ld.bfd: 
> > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > undefined reference to `__aeabi_dmul'
> > ld.bfd: 
> > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > undefined reference to `__aeabi_d2uiz'
> 
> This looks like a bug in that training code. I would need to see source
> code, so I can figure out how to fix it.

Have you solved this issue? Or if not, can you show what you had on that
problematic line 809?


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-13 Thread Stefan Roese

Hi Pali,

On 1/13/23 09:31, Pali Rohár wrote:




Side note: Does your patch /sync only touch the currently not supported
DDR4 handling? If changes also include DDR3 then this should be tested
on the boards currently using this code very intensive. All A38x board
maintainers should be pointed to such new changes in this case.


I guess that new code only adds ifdefs for DDR4 which should not be
enabled nor compiled for existing boards. This should be safe.


Best would be, if we could make sure that this patch does not change
anything for non-DDR4 platforms. And if, then we should extract this
into a separate patch for the DDR3 stuff, that can be more easily
reviewed.

Thanks,
Stefan


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-13 Thread Pali Rohár
On Thursday 12 January 2023 23:00:04 Tony Dinh wrote:
> Hi Stefan,
> 
> On Thu, Jan 12, 2023 at 10:13 PM Stefan Roese  wrote:
> >
> > Hi Tony,
> >
> > (added Tom to Cc)
> >
> > On 1/13/23 02:40, Tony Dinh wrote:
> > > Hi Stefan,
> > >
> > > On Wed, Jan 11, 2023 at 12:56 PM Pali Rohár  wrote:
> > >>
> > >> On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > >>> Hi Pali,
> > >>>
> > >>> On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> > 
> >  On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > Hi Pali,
> > >
> > > I got burned for being lazy :) it turned out that the mix of #ifdef
> > > and #if defined was the problem. Just stepped away and came back for a
> > > few minutes and I can see that I just need to define the CONFIG_DDR4
> > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > CONFIG_DDR4 stuff.
> > >
> > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must be
> > > undefined for it to build (so I am using
> > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > arch/arm/lib/lib.a)
> > 
> >  Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
> >  unless you have compiled gcc for target CPU.
> > >>>
> > >>> CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> > >>> u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > >>> several build errors like these:
> > >>>
> > >>> ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > >>> function `mv_ddr4_copt_get':
> > >>> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > >>> undefined reference to `__aeabi_i2d'
> > >>> ld.bfd: 
> > >>> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > >>> undefined reference to `__aeabi_dmul'
> > >>> ld.bfd: 
> > >>> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > >>> undefined reference to `__aeabi_d2uiz'
> > >>
> > >> This looks like a bug in that training code. I would need to see source
> > >> code, so I can figure out how to fix it.
> > >>
> > >>> Perhaps this is something that needs to be looked at.
> > >>>
> > 
> > > But Marvell DDR4 is working fine! Please see the log.
> > 
> >  Nice! So you can send patches for that board to list.
> > >>>
> > >>> Sure I will for the N2350 board. How will we be handling the Marvell
> > >>> DDR code resync?
> > >>
> > >> Send that DDR code resync in one patch... and saying e.g. adding support
> > >> for DDR4 from Marvell repo.
> > >
> > > The DDR4 patch is quite large, about 272K. Will it get rejected from
> > > ML because it is over the 100K limit?
> >
> > Usually Tom as the mailing list maintainer will get informed about such
> > mails and if he decides how to handle such huge mails. If this can't be
> > handled differently, which is probably the case with such a sync to a
> > repository, then the mail will get sent to the list when he "releases"
> > such mails.
> >
> > > # git format-patch -1 HEAD
> > > # wc 0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch
> > >7962  35309 277976
> > > 0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch
> > >
> > > How would you like to receive the patch? Would you like 2 emails (1st
> > > go to the ML without the patch, 2nd with the patch but not to the ML)?
> >
> > As a normal mail / patch please.
> 
> Will do that!
> 
> >
> > Side note: Does your patch /sync only touch the currently not supported
> > DDR4 handling? If changes also include DDR3 then this should be tested
> > on the boards currently using this code very intensive. All A38x board
> > maintainers should be pointed to such new changes in this case.

I guess that new code only adds ifdefs for DDR4 which should not be
enabled nor compiled for existing boards. This should be safe.

> Yes, indeed. I plan to do at least a DDR3 regression test with the
> Synology DS116 board (Armada 385, DDR3). The existing A38x boards do
> not have CONFIG_DDR4 enabled, so the DDR3 code looks to be the same,
> AFAITC. The patch should be reviewed by Pali and Marek to confirm that
> on paper, at least. But preferably, all A38x board maintainers should
> be aware. I will grep for  the list of the A38x maintainers, and send
> directly to them (or if you already have such a list please let me
> know).
> 
> Thanks,
> Tony
> 
> 
> 
> >
> > Thanks,
> > Stefan
> >


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-12 Thread Tony Dinh
Hi Stefan,

On Thu, Jan 12, 2023 at 10:13 PM Stefan Roese  wrote:
>
> Hi Tony,
>
> (added Tom to Cc)
>
> On 1/13/23 02:40, Tony Dinh wrote:
> > Hi Stefan,
> >
> > On Wed, Jan 11, 2023 at 12:56 PM Pali Rohár  wrote:
> >>
> >> On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> >>> Hi Pali,
> >>>
> >>> On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> 
>  On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > Hi Pali,
> >
> > I got burned for being lazy :) it turned out that the mix of #ifdef
> > and #if defined was the problem. Just stepped away and came back for a
> > few minutes and I can see that I just need to define the CONFIG_DDR4
> > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > CONFIG_DDR4 stuff.
> >
> > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must be
> > undefined for it to build (so I am using
> > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > arch/arm/lib/lib.a)
> 
>  Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
>  unless you have compiled gcc for target CPU.
> >>>
> >>> CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> >>> u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> >>> several build errors like these:
> >>>
> >>> ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> >>> function `mv_ddr4_copt_get':
> >>> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> >>> undefined reference to `__aeabi_i2d'
> >>> ld.bfd: 
> >>> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> >>> undefined reference to `__aeabi_dmul'
> >>> ld.bfd: 
> >>> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> >>> undefined reference to `__aeabi_d2uiz'
> >>
> >> This looks like a bug in that training code. I would need to see source
> >> code, so I can figure out how to fix it.
> >>
> >>> Perhaps this is something that needs to be looked at.
> >>>
> 
> > But Marvell DDR4 is working fine! Please see the log.
> 
>  Nice! So you can send patches for that board to list.
> >>>
> >>> Sure I will for the N2350 board. How will we be handling the Marvell
> >>> DDR code resync?
> >>
> >> Send that DDR code resync in one patch... and saying e.g. adding support
> >> for DDR4 from Marvell repo.
> >
> > The DDR4 patch is quite large, about 272K. Will it get rejected from
> > ML because it is over the 100K limit?
>
> Usually Tom as the mailing list maintainer will get informed about such
> mails and if he decides how to handle such huge mails. If this can't be
> handled differently, which is probably the case with such a sync to a
> repository, then the mail will get sent to the list when he "releases"
> such mails.
>
> > # git format-patch -1 HEAD
> > # wc 0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch
> >7962  35309 277976
> > 0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch
> >
> > How would you like to receive the patch? Would you like 2 emails (1st
> > go to the ML without the patch, 2nd with the patch but not to the ML)?
>
> As a normal mail / patch please.

Will do that!

>
> Side note: Does your patch /sync only touch the currently not supported
> DDR4 handling? If changes also include DDR3 then this should be tested
> on the boards currently using this code very intensive. All A38x board
> maintainers should be pointed to such new changes in this case.

Yes, indeed. I plan to do at least a DDR3 regression test with the
Synology DS116 board (Armada 385, DDR3). The existing A38x boards do
not have CONFIG_DDR4 enabled, so the DDR3 code looks to be the same,
AFAITC. The patch should be reviewed by Pali and Marek to confirm that
on paper, at least. But preferably, all A38x board maintainers should
be aware. I will grep for  the list of the A38x maintainers, and send
directly to them (or if you already have such a list please let me
know).

Thanks,
Tony



>
> Thanks,
> Stefan
>


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-12 Thread Stefan Roese

Hi Tony,

(added Tom to Cc)

On 1/13/23 02:40, Tony Dinh wrote:

Hi Stefan,

On Wed, Jan 11, 2023 at 12:56 PM Pali Rohár  wrote:


On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:

Hi Pali,

On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:


On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:

Hi Pali,

I got burned for being lazy :) it turned out that the mix of #ifdef
and #if defined was the problem. Just stepped away and came back for a
few minutes and I can see that I just need to define the CONFIG_DDR4
properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
CONFIG_DDR4 stuff.

One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must be
undefined for it to build (so I am using
/usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
arch/arm/lib/lib.a)


Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
unless you have compiled gcc for target CPU.


CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
several build errors like these:

ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
function `mv_ddr4_copt_get':
/usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
undefined reference to `__aeabi_i2d'
ld.bfd: 
/usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
undefined reference to `__aeabi_dmul'
ld.bfd: 
/usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
undefined reference to `__aeabi_d2uiz'


This looks like a bug in that training code. I would need to see source
code, so I can figure out how to fix it.


Perhaps this is something that needs to be looked at.




But Marvell DDR4 is working fine! Please see the log.


Nice! So you can send patches for that board to list.


Sure I will for the N2350 board. How will we be handling the Marvell
DDR code resync?


Send that DDR code resync in one patch... and saying e.g. adding support
for DDR4 from Marvell repo.


The DDR4 patch is quite large, about 272K. Will it get rejected from
ML because it is over the 100K limit?


Usually Tom as the mailing list maintainer will get informed about such
mails and if he decides how to handle such huge mails. If this can't be
handled differently, which is probably the case with such a sync to a
repository, then the mail will get sent to the list when he "releases"
such mails.


# git format-patch -1 HEAD
# wc 0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch
   7962  35309 277976
0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch

How would you like to receive the patch? Would you like 2 emails (1st
go to the ML without the patch, 2nd with the patch but not to the ML)?


As a normal mail / patch please.

Side note: Does your patch /sync only touch the currently not supported
DDR4 handling? If changes also include DDR3 then this should be tested
on the boards currently using this code very intensive. All A38x board
maintainers should be pointed to such new changes in this case.

Thanks,
Stefan



Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-12 Thread Tony Dinh
Hi Stefan,

On Wed, Jan 11, 2023 at 12:56 PM Pali Rohár  wrote:
>
> On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> > Hi Pali,
> >
> > On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> > >
> > > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > > Hi Pali,
> > > >
> > > > I got burned for being lazy :) it turned out that the mix of #ifdef
> > > > and #if defined was the problem. Just stepped away and came back for a
> > > > few minutes and I can see that I just need to define the CONFIG_DDR4
> > > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > > CONFIG_DDR4 stuff.
> > > >
> > > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must be
> > > > undefined for it to build (so I am using
> > > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > > arch/arm/lib/lib.a)
> > >
> > > Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
> > > unless you have compiled gcc for target CPU.
> >
> > CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> > u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> > several build errors like these:
> >
> > ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> > function `mv_ddr4_copt_get':
> > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > undefined reference to `__aeabi_i2d'
> > ld.bfd: 
> > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > undefined reference to `__aeabi_dmul'
> > ld.bfd: 
> > /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> > undefined reference to `__aeabi_d2uiz'
>
> This looks like a bug in that training code. I would need to see source
> code, so I can figure out how to fix it.
>
> > Perhaps this is something that needs to be looked at.
> >
> > >
> > > > But Marvell DDR4 is working fine! Please see the log.
> > >
> > > Nice! So you can send patches for that board to list.
> >
> > Sure I will for the N2350 board. How will we be handling the Marvell
> > DDR code resync?
>
> Send that DDR code resync in one patch... and saying e.g. adding support
> for DDR4 from Marvell repo.

The DDR4 patch is quite large, about 272K. Will it get rejected from
ML because it is over the 100K limit?

# git format-patch -1 HEAD
# wc 0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch
  7962  35309 277976
0001-ddr-marvell-a38x-Add-support-for-DDR4-from-Marvell-m.patch

How would you like to receive the patch? Would you like 2 emails (1st
go to the ML without the patch, 2nd with the patch but not to the ML)?

Thanks,
Tony


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-11 Thread Pali Rohár
On Wednesday 11 January 2023 12:44:45 Tony Dinh wrote:
> Hi Pali,
> 
> On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
> >
> > On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > > Hi Pali,
> > >
> > > I got burned for being lazy :) it turned out that the mix of #ifdef
> > > and #if defined was the problem. Just stepped away and came back for a
> > > few minutes and I can see that I just need to define the CONFIG_DDR4
> > > properly in arch/arm/mach-mvebu/Kconfig and build it to pass the
> > > CONFIG_DDR4 stuff.
> > >
> > > One more small hurdle after that was CONFIG_USE_PRIVATE_LIBGCC must be
> > > undefined for it to build (so I am using
> > > /usr/lib/gcc/arm-linux-gnueabi/10/libgcc.a, and not using
> > > arch/arm/lib/lib.a)
> >
> > Hello! It is normally a good idea to unset CONFIG_USE_PRIVATE_LIBGCC
> > unless you have compiled gcc for target CPU.
> 
> CONFIG_USE_PRIVATE_LIBGCC was set as a default for ARM target, since
> u-boot has arch/arm/lib/lib.a. But using arch/arm/lib/lib.a I got
> several build errors like these:
> 
> ld.bfd: drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.o: in
> function `mv_ddr4_copt_get':
> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> undefined reference to `__aeabi_i2d'
> ld.bfd: 
> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> undefined reference to `__aeabi_dmul'
> ld.bfd: 
> /usr/src/u-boot/drivers/ddr/marvell/a38x/mv_ddr4_training_calibration.c:809:
> undefined reference to `__aeabi_d2uiz'

This looks like a bug in that training code. I would need to see source
code, so I can figure out how to fix it.

> Perhaps this is something that needs to be looked at.
> 
> >
> > > But Marvell DDR4 is working fine! Please see the log.
> >
> > Nice! So you can send patches for that board to list.
> 
> Sure I will for the N2350 board. How will we be handling the Marvell
> DDR code resync?

Send that DDR code resync in one patch... and saying e.g. adding support
for DDR4 from Marvell repo.


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-11 Thread Tony Dinh
Hi Pali,

On Wed, Jan 11, 2023 at 12:04 AM Pali Rohár  wrote:
>
> On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> > Hi Pali,
> >
> > On Mon, Jan 9, 2023 at 5:44 PM Tony Dinh  wrote:
> > >
> > > On Mon, Jan 9, 2023 at 5:38 PM Pali Rohár  wrote:
> > > >
> > > > On Monday 09 January 2023 17:35:24 Tony Dinh wrote:
> > > > > Hi Pali,
> > > > >
> > > > > On Mon, Jan 9, 2023 at 5:02 PM Pali Rohár  wrote:
> > > > > >
> > > > > > On Monday 09 January 2023 16:55:56 Tony Dinh wrote:
> > > > > > > Hi Pali,
> > > > > > >
> > > > > > > On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  
> > > > > > > wrote:
> > > > > > > >
> > > > > > > > Hello,
> > > > > > > >
> > > > > > > > On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  
> > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > > > > > > > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  
> > > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > > > > > > > > Hello!
> > > > > > > > > > > >
> > > > > > > > > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > > > > > > > > Hi Pali,
> > > > > > > > > > > > >
> > > > > > > > > > > > > I'm building a new u-boot for the Thecus N2350 board 
> > > > > > > > > > > > > (Armada 385
> > > > > > > > > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board 
> > > > > > > > > > > > > is DDR4, which
> > > > > > > > > > > > > is not currently supported in u-boot (also cc this to 
> > > > > > > > > > > > > Chris for
> > > > > > > > > > > > > commenting about Marvell DDR4 training driver).
> > > > > > > > > > > >
> > > > > > > > > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > > > > > > > > >
> > > > > > > > > > > > A38x u-boot ddr driver is in this directory:
> > > > > > > > > > > >
> > > > > > > > > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > > > > > > > > >
> > > > > > > > > > > > And it is copied from the original marvell driver by 
> > > > > > > > > > > > stripping non-a38x
> > > > > > > > > > > > code and removal of the ddr4 code from the master 
> > > > > > > > > > > > branch:
> > > > > > > > > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > > > > > > > > >
> > > > > > > > > > > > So you can try to copy code again without stripping 
> > > > > > > > > > > > ddr4 parts
> > > > > > > > > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > > > > > > >
> > > > > > > > > > > > And adjust u-boot board code for ddr4.
> > > > > > > > > > > >
> > > > > > > > > > > > I guess it could work but it would be needed to play 
> > > > > > > > > > > > with it.
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Last time I looked the MarvellEmbeddedProcessors stuff was 
> > > > > > > > > > a long way
> > > > > > > > > > behind what Marvell are releasing to customers. That was 
> > > > > > > > > > for the newer SoCs
> > > > > > > > > > so maybe the A385 stuff is current.
> > > > > > > > >
> > > > > > > > > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell 
> > > > > > > > > and
> > > > > > > > > A3700-utils-marvell were up-to-date and same as the version 
> > > > > > > > > distributed
> > > > > > > > > to the Marvell customers. I was cooperating with Marvell to 
> > > > > > > > > release all
> > > > > > > > > patches from Marvell Extranet portal to github as opensource 
> > > > > > > > > and also to
> > > > > > > > > incorporate github patches from community to their Extranet 
> > > > > > > > > version.
> > > > > > > > > Also I was synchronizing u-boot drivers/ddr/marvell/a38x 
> > > > > > > > > directory with
> > > > > > > > > MarvellEmbeddedProcessors version. I do not think that 
> > > > > > > > > Marvell released
> > > > > > > > > something super new in these repositories in last half of 
> > > > > > > > > year, so I
> > > > > > > > > think that the code on MarvellEmbeddedProcessors (for those 
> > > > > > > > > two
> > > > > > > > > repositories) is still up-to-date.
> > > > > > > >
> > > > > > > > Thanks all for commenting. As Pali has suggested, I will try 
> > > > > > > > copying
> > > > > > > > the latest Marvell Github DDR drivers.
> > > > > > >
> > > > > > > I've tried to bring in the latest Marvell DDR drivers, but failed
> > > > > > > miserably after many hours playing :) I used your DDR3 commit 
> > > > > > > info as
> > > > > > > a guide as how to strip out other parts, and only kept DDR3 and 
> > > > > > > DDR4
> > > > > > > for a38x:
> > > > > > >
> > > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > > >
> > > > > > > The current code has DDR4 interspersed in DDR3 with if-defs
> > > > > > > CONFIG_DDR4. And there are some minor dependencies on ATF types,

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-11 Thread Pali Rohár
On Tuesday 10 January 2023 21:07:45 Tony Dinh wrote:
> Hi Pali,
> 
> On Mon, Jan 9, 2023 at 5:44 PM Tony Dinh  wrote:
> >
> > On Mon, Jan 9, 2023 at 5:38 PM Pali Rohár  wrote:
> > >
> > > On Monday 09 January 2023 17:35:24 Tony Dinh wrote:
> > > > Hi Pali,
> > > >
> > > > On Mon, Jan 9, 2023 at 5:02 PM Pali Rohár  wrote:
> > > > >
> > > > > On Monday 09 January 2023 16:55:56 Tony Dinh wrote:
> > > > > > Hi Pali,
> > > > > >
> > > > > > On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  wrote:
> > > > > > >
> > > > > > > Hello,
> > > > > > >
> > > > > > > On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
> > > > > > > >
> > > > > > > > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > > > > > > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > > > > > > > Hello!
> > > > > > > > > > >
> > > > > > > > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > > > > > > > Hi Pali,
> > > > > > > > > > > >
> > > > > > > > > > > > I'm building a new u-boot for the Thecus N2350 board 
> > > > > > > > > > > > (Armada 385
> > > > > > > > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board 
> > > > > > > > > > > > is DDR4, which
> > > > > > > > > > > > is not currently supported in u-boot (also cc this to 
> > > > > > > > > > > > Chris for
> > > > > > > > > > > > commenting about Marvell DDR4 training driver).
> > > > > > > > > > >
> > > > > > > > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > > > > > > > >
> > > > > > > > > > > A38x u-boot ddr driver is in this directory:
> > > > > > > > > > >
> > > > > > > > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > > > > > > > >
> > > > > > > > > > > And it is copied from the original marvell driver by 
> > > > > > > > > > > stripping non-a38x
> > > > > > > > > > > code and removal of the ddr4 code from the master branch:
> > > > > > > > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > > > > > > > >
> > > > > > > > > > > So you can try to copy code again without stripping ddr4 
> > > > > > > > > > > parts
> > > > > > > > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > > > > > >
> > > > > > > > > > > And adjust u-boot board code for ddr4.
> > > > > > > > > > >
> > > > > > > > > > > I guess it could work but it would be needed to play with 
> > > > > > > > > > > it.
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > > Last time I looked the MarvellEmbeddedProcessors stuff was a 
> > > > > > > > > long way
> > > > > > > > > behind what Marvell are releasing to customers. That was for 
> > > > > > > > > the newer SoCs
> > > > > > > > > so maybe the A385 stuff is current.
> > > > > > > >
> > > > > > > > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell 
> > > > > > > > and
> > > > > > > > A3700-utils-marvell were up-to-date and same as the version 
> > > > > > > > distributed
> > > > > > > > to the Marvell customers. I was cooperating with Marvell to 
> > > > > > > > release all
> > > > > > > > patches from Marvell Extranet portal to github as opensource 
> > > > > > > > and also to
> > > > > > > > incorporate github patches from community to their Extranet 
> > > > > > > > version.
> > > > > > > > Also I was synchronizing u-boot drivers/ddr/marvell/a38x 
> > > > > > > > directory with
> > > > > > > > MarvellEmbeddedProcessors version. I do not think that Marvell 
> > > > > > > > released
> > > > > > > > something super new in these repositories in last half of year, 
> > > > > > > > so I
> > > > > > > > think that the code on MarvellEmbeddedProcessors (for those two
> > > > > > > > repositories) is still up-to-date.
> > > > > > >
> > > > > > > Thanks all for commenting. As Pali has suggested, I will try 
> > > > > > > copying
> > > > > > > the latest Marvell Github DDR drivers.
> > > > > >
> > > > > > I've tried to bring in the latest Marvell DDR drivers, but failed
> > > > > > miserably after many hours playing :) I used your DDR3 commit info 
> > > > > > as
> > > > > > a guide as how to strip out other parts, and only kept DDR3 and DDR4
> > > > > > for a38x:
> > > > > >
> > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > >
> > > > > > The current code has DDR4 interspersed in DDR3 with if-defs
> > > > > > CONFIG_DDR4. And there are some minor dependencies on ATF types,
> > > > > > quite difficult for me to get it to build cleanly. I guess I threw 
> > > > > > in
> > > > > > the towel for now :) If you ever find some free time, please give 
> > > > > > it a
> > > > > > shot.
> > > > > >
> > > > > > Thanks,
> > > > > > Tony
> > > > >
> > > > > Hello! And what is the issue? DDR training is failing? Or SPL does not
> > > > >

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-10 Thread Tony Dinh
Hi Pali,

On Mon, Jan 9, 2023 at 5:44 PM Tony Dinh  wrote:
>
> On Mon, Jan 9, 2023 at 5:38 PM Pali Rohár  wrote:
> >
> > On Monday 09 January 2023 17:35:24 Tony Dinh wrote:
> > > Hi Pali,
> > >
> > > On Mon, Jan 9, 2023 at 5:02 PM Pali Rohár  wrote:
> > > >
> > > > On Monday 09 January 2023 16:55:56 Tony Dinh wrote:
> > > > > Hi Pali,
> > > > >
> > > > > On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  wrote:
> > > > > >
> > > > > > Hello,
> > > > > >
> > > > > > On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
> > > > > > >
> > > > > > > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > > > > > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> > > > > > > >
> > > > > > > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > > > > > > Hello!
> > > > > > > > > >
> > > > > > > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > > > > > > Hi Pali,
> > > > > > > > > > >
> > > > > > > > > > > I'm building a new u-boot for the Thecus N2350 board 
> > > > > > > > > > > (Armada 385
> > > > > > > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is 
> > > > > > > > > > > DDR4, which
> > > > > > > > > > > is not currently supported in u-boot (also cc this to 
> > > > > > > > > > > Chris for
> > > > > > > > > > > commenting about Marvell DDR4 training driver).
> > > > > > > > > >
> > > > > > > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > > > > > > >
> > > > > > > > > > A38x u-boot ddr driver is in this directory:
> > > > > > > > > >
> > > > > > > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > > > > > > >
> > > > > > > > > > And it is copied from the original marvell driver by 
> > > > > > > > > > stripping non-a38x
> > > > > > > > > > code and removal of the ddr4 code from the master branch:
> > > > > > > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > > > > > > >
> > > > > > > > > > So you can try to copy code again without stripping ddr4 
> > > > > > > > > > parts
> > > > > > > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > > > > >
> > > > > > > > > > And adjust u-boot board code for ddr4.
> > > > > > > > > >
> > > > > > > > > > I guess it could work but it would be needed to play with 
> > > > > > > > > > it.
> > > > > > > > >
> > > > > > > >
> > > > > > > > Last time I looked the MarvellEmbeddedProcessors stuff was a 
> > > > > > > > long way
> > > > > > > > behind what Marvell are releasing to customers. That was for 
> > > > > > > > the newer SoCs
> > > > > > > > so maybe the A385 stuff is current.
> > > > > > >
> > > > > > > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
> > > > > > > A3700-utils-marvell were up-to-date and same as the version 
> > > > > > > distributed
> > > > > > > to the Marvell customers. I was cooperating with Marvell to 
> > > > > > > release all
> > > > > > > patches from Marvell Extranet portal to github as opensource and 
> > > > > > > also to
> > > > > > > incorporate github patches from community to their Extranet 
> > > > > > > version.
> > > > > > > Also I was synchronizing u-boot drivers/ddr/marvell/a38x 
> > > > > > > directory with
> > > > > > > MarvellEmbeddedProcessors version. I do not think that Marvell 
> > > > > > > released
> > > > > > > something super new in these repositories in last half of year, 
> > > > > > > so I
> > > > > > > think that the code on MarvellEmbeddedProcessors (for those two
> > > > > > > repositories) is still up-to-date.
> > > > > >
> > > > > > Thanks all for commenting. As Pali has suggested, I will try copying
> > > > > > the latest Marvell Github DDR drivers.
> > > > >
> > > > > I've tried to bring in the latest Marvell DDR drivers, but failed
> > > > > miserably after many hours playing :) I used your DDR3 commit info as
> > > > > a guide as how to strip out other parts, and only kept DDR3 and DDR4
> > > > > for a38x:
> > > > >
> > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > >
> > > > > The current code has DDR4 interspersed in DDR3 with if-defs
> > > > > CONFIG_DDR4. And there are some minor dependencies on ATF types,
> > > > > quite difficult for me to get it to build cleanly. I guess I threw in
> > > > > the towel for now :) If you ever find some free time, please give it a
> > > > > shot.
> > > > >
> > > > > Thanks,
> > > > > Tony
> > > >
> > > > Hello! And what is the issue? DDR training is failing? Or SPL does not
> > > > boot? Or it do not compile?
> > >
> > > Each of the code files was compiled (after some includes adjustments).
> > > But the build failed to link due to some errors such as
> > > /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr_plat.c:558:
> > > undefined reference to `mv_ddr_freq_get'
> > >
> > > It should have been seen by the linker (since tha

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-09 Thread Tony Dinh
On Mon, Jan 9, 2023 at 5:38 PM Pali Rohár  wrote:
>
> On Monday 09 January 2023 17:35:24 Tony Dinh wrote:
> > Hi Pali,
> >
> > On Mon, Jan 9, 2023 at 5:02 PM Pali Rohár  wrote:
> > >
> > > On Monday 09 January 2023 16:55:56 Tony Dinh wrote:
> > > > Hi Pali,
> > > >
> > > > On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  wrote:
> > > > >
> > > > > Hello,
> > > > >
> > > > > On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
> > > > > >
> > > > > > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > > > > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> > > > > > >
> > > > > > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > > > > > Hello!
> > > > > > > > >
> > > > > > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > > > > > Hi Pali,
> > > > > > > > > >
> > > > > > > > > > I'm building a new u-boot for the Thecus N2350 board 
> > > > > > > > > > (Armada 385
> > > > > > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is 
> > > > > > > > > > DDR4, which
> > > > > > > > > > is not currently supported in u-boot (also cc this to Chris 
> > > > > > > > > > for
> > > > > > > > > > commenting about Marvell DDR4 training driver).
> > > > > > > > >
> > > > > > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > > > > > >
> > > > > > > > > A38x u-boot ddr driver is in this directory:
> > > > > > > > >
> > > > > > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > > > > > >
> > > > > > > > > And it is copied from the original marvell driver by 
> > > > > > > > > stripping non-a38x
> > > > > > > > > code and removal of the ddr4 code from the master branch:
> > > > > > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > > > > > >
> > > > > > > > > So you can try to copy code again without stripping ddr4 parts
> > > > > > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > > > > > >
> > > > > > > >
> > > > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > > > >
> > > > > > > > > And adjust u-boot board code for ddr4.
> > > > > > > > >
> > > > > > > > > I guess it could work but it would be needed to play with it.
> > > > > > > >
> > > > > > >
> > > > > > > Last time I looked the MarvellEmbeddedProcessors stuff was a long 
> > > > > > > way
> > > > > > > behind what Marvell are releasing to customers. That was for the 
> > > > > > > newer SoCs
> > > > > > > so maybe the A385 stuff is current.
> > > > > >
> > > > > > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
> > > > > > A3700-utils-marvell were up-to-date and same as the version 
> > > > > > distributed
> > > > > > to the Marvell customers. I was cooperating with Marvell to release 
> > > > > > all
> > > > > > patches from Marvell Extranet portal to github as opensource and 
> > > > > > also to
> > > > > > incorporate github patches from community to their Extranet version.
> > > > > > Also I was synchronizing u-boot drivers/ddr/marvell/a38x directory 
> > > > > > with
> > > > > > MarvellEmbeddedProcessors version. I do not think that Marvell 
> > > > > > released
> > > > > > something super new in these repositories in last half of year, so I
> > > > > > think that the code on MarvellEmbeddedProcessors (for those two
> > > > > > repositories) is still up-to-date.
> > > > >
> > > > > Thanks all for commenting. As Pali has suggested, I will try copying
> > > > > the latest Marvell Github DDR drivers.
> > > >
> > > > I've tried to bring in the latest Marvell DDR drivers, but failed
> > > > miserably after many hours playing :) I used your DDR3 commit info as
> > > > a guide as how to strip out other parts, and only kept DDR3 and DDR4
> > > > for a38x:
> > > >
> > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > >
> > > > The current code has DDR4 interspersed in DDR3 with if-defs
> > > > CONFIG_DDR4. And there are some minor dependencies on ATF types,
> > > > quite difficult for me to get it to build cleanly. I guess I threw in
> > > > the towel for now :) If you ever find some free time, please give it a
> > > > shot.
> > > >
> > > > Thanks,
> > > > Tony
> > >
> > > Hello! And what is the issue? DDR training is failing? Or SPL does not
> > > boot? Or it do not compile?
> >
> > Each of the code files was compiled (after some includes adjustments).
> > But the build failed to link due to some errors such as
> > /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr_plat.c:558:
> > undefined reference to `mv_ddr_freq_get'
> >
> > It should have been seen by the linker (since that code was compiled),
> > I could not see why. I feel I have spent too much time fighting the
> > if-defs :)
> >
> > Thanks,
> > Tony
>
> Send the whole error message and also ideally push your changes to some
> git repository. So I can look at the stage at which you are.

OK thanks!

Tony

>
> > >
> > > >
> > > > >
> > > > > All the best,
>

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-09 Thread Pali Rohár
On Monday 09 January 2023 17:35:24 Tony Dinh wrote:
> Hi Pali,
> 
> On Mon, Jan 9, 2023 at 5:02 PM Pali Rohár  wrote:
> >
> > On Monday 09 January 2023 16:55:56 Tony Dinh wrote:
> > > Hi Pali,
> > >
> > > On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  wrote:
> > > >
> > > > Hello,
> > > >
> > > > On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
> > > > >
> > > > > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > > > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> > > > > >
> > > > > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > > > > Hello!
> > > > > > > >
> > > > > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > > > > Hi Pali,
> > > > > > > > >
> > > > > > > > > I'm building a new u-boot for the Thecus N2350 board (Armada 
> > > > > > > > > 385
> > > > > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is 
> > > > > > > > > DDR4, which
> > > > > > > > > is not currently supported in u-boot (also cc this to Chris 
> > > > > > > > > for
> > > > > > > > > commenting about Marvell DDR4 training driver).
> > > > > > > >
> > > > > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > > > > >
> > > > > > > > A38x u-boot ddr driver is in this directory:
> > > > > > > >
> > > > > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > > > > >
> > > > > > > > And it is copied from the original marvell driver by stripping 
> > > > > > > > non-a38x
> > > > > > > > code and removal of the ddr4 code from the master branch:
> > > > > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > > > > >
> > > > > > > > So you can try to copy code again without stripping ddr4 parts
> > > > > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > > > > >
> > > > > > >
> > > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > > >
> > > > > > > > And adjust u-boot board code for ddr4.
> > > > > > > >
> > > > > > > > I guess it could work but it would be needed to play with it.
> > > > > > >
> > > > > >
> > > > > > Last time I looked the MarvellEmbeddedProcessors stuff was a long 
> > > > > > way
> > > > > > behind what Marvell are releasing to customers. That was for the 
> > > > > > newer SoCs
> > > > > > so maybe the A385 stuff is current.
> > > > >
> > > > > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
> > > > > A3700-utils-marvell were up-to-date and same as the version 
> > > > > distributed
> > > > > to the Marvell customers. I was cooperating with Marvell to release 
> > > > > all
> > > > > patches from Marvell Extranet portal to github as opensource and also 
> > > > > to
> > > > > incorporate github patches from community to their Extranet version.
> > > > > Also I was synchronizing u-boot drivers/ddr/marvell/a38x directory 
> > > > > with
> > > > > MarvellEmbeddedProcessors version. I do not think that Marvell 
> > > > > released
> > > > > something super new in these repositories in last half of year, so I
> > > > > think that the code on MarvellEmbeddedProcessors (for those two
> > > > > repositories) is still up-to-date.
> > > >
> > > > Thanks all for commenting. As Pali has suggested, I will try copying
> > > > the latest Marvell Github DDR drivers.
> > >
> > > I've tried to bring in the latest Marvell DDR drivers, but failed
> > > miserably after many hours playing :) I used your DDR3 commit info as
> > > a guide as how to strip out other parts, and only kept DDR3 and DDR4
> > > for a38x:
> > >
> > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > >
> > > The current code has DDR4 interspersed in DDR3 with if-defs
> > > CONFIG_DDR4. And there are some minor dependencies on ATF types,
> > > quite difficult for me to get it to build cleanly. I guess I threw in
> > > the towel for now :) If you ever find some free time, please give it a
> > > shot.
> > >
> > > Thanks,
> > > Tony
> >
> > Hello! And what is the issue? DDR training is failing? Or SPL does not
> > boot? Or it do not compile?
> 
> Each of the code files was compiled (after some includes adjustments).
> But the build failed to link due to some errors such as
> /usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr_plat.c:558:
> undefined reference to `mv_ddr_freq_get'
> 
> It should have been seen by the linker (since that code was compiled),
> I could not see why. I feel I have spent too much time fighting the
> if-defs :)
> 
> Thanks,
> Tony

Send the whole error message and also ideally push your changes to some
git repository. So I can look at the stage at which you are.

> >
> > >
> > > >
> > > > All the best,
> > > > Tony
> > > >
> > > >
> > > > > > >
> > > > > > > > > So I'm building with binary.0 in the ./board/thecus/n2350/. 
> > > > > > > > > This
> > > > > > > > > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL 
> > > > > > > > > source
> > > > > > > > > for this board (provided by Th

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-09 Thread Tony Dinh
Hi Pali,

On Mon, Jan 9, 2023 at 5:02 PM Pali Rohár  wrote:
>
> On Monday 09 January 2023 16:55:56 Tony Dinh wrote:
> > Hi Pali,
> >
> > On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  wrote:
> > >
> > > Hello,
> > >
> > > On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
> > > >
> > > > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> > > > >
> > > > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > > > Hello!
> > > > > > >
> > > > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > > > Hi Pali,
> > > > > > > >
> > > > > > > > I'm building a new u-boot for the Thecus N2350 board (Armada 385
> > > > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, 
> > > > > > > > which
> > > > > > > > is not currently supported in u-boot (also cc this to Chris for
> > > > > > > > commenting about Marvell DDR4 training driver).
> > > > > > >
> > > > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > > > >
> > > > > > > A38x u-boot ddr driver is in this directory:
> > > > > > >
> > > > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > > > >
> > > > > > > And it is copied from the original marvell driver by stripping 
> > > > > > > non-a38x
> > > > > > > code and removal of the ddr4 code from the master branch:
> > > > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > > > >
> > > > > > > So you can try to copy code again without stripping ddr4 parts
> > > > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > > > >
> > > > > >
> > > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > > >
> > > > > > > And adjust u-boot board code for ddr4.
> > > > > > >
> > > > > > > I guess it could work but it would be needed to play with it.
> > > > > >
> > > > >
> > > > > Last time I looked the MarvellEmbeddedProcessors stuff was a long way
> > > > > behind what Marvell are releasing to customers. That was for the 
> > > > > newer SoCs
> > > > > so maybe the A385 stuff is current.
> > > >
> > > > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
> > > > A3700-utils-marvell were up-to-date and same as the version distributed
> > > > to the Marvell customers. I was cooperating with Marvell to release all
> > > > patches from Marvell Extranet portal to github as opensource and also to
> > > > incorporate github patches from community to their Extranet version.
> > > > Also I was synchronizing u-boot drivers/ddr/marvell/a38x directory with
> > > > MarvellEmbeddedProcessors version. I do not think that Marvell released
> > > > something super new in these repositories in last half of year, so I
> > > > think that the code on MarvellEmbeddedProcessors (for those two
> > > > repositories) is still up-to-date.
> > >
> > > Thanks all for commenting. As Pali has suggested, I will try copying
> > > the latest Marvell Github DDR drivers.
> >
> > I've tried to bring in the latest Marvell DDR drivers, but failed
> > miserably after many hours playing :) I used your DDR3 commit info as
> > a guide as how to strip out other parts, and only kept DDR3 and DDR4
> > for a38x:
> >
> > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> >
> > The current code has DDR4 interspersed in DDR3 with if-defs
> > CONFIG_DDR4. And there are some minor dependencies on ATF types,
> > quite difficult for me to get it to build cleanly. I guess I threw in
> > the towel for now :) If you ever find some free time, please give it a
> > shot.
> >
> > Thanks,
> > Tony
>
> Hello! And what is the issue? DDR training is failing? Or SPL does not
> boot? Or it do not compile?

Each of the code files was compiled (after some includes adjustments).
But the build failed to link due to some errors such as
/usr/src/u-boot-master/drivers/ddr/marvell/a38x/mv_ddr_plat.c:558:
undefined reference to `mv_ddr_freq_get'

It should have been seen by the linker (since that code was compiled),
I could not see why. I feel I have spent too much time fighting the
if-defs :)

Thanks,
Tony

>
> >
> > >
> > > All the best,
> > > Tony
> > >
> > >
> > > > > >
> > > > > > > > So I'm building with binary.0 in the ./board/thecus/n2350/. This
> > > > > > > > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL 
> > > > > > > > source
> > > > > > > > for this board (provided by Thecus). My
> > > > > > > > ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> > > > > > > >
> > > > > > > > # Armada 38x uses version 1 image format
> > > > > > > > VERSION 1
> > > > > > > > # Boot Media configurations
> > > > > > > > BOOT_FROM spi
> > > > > > > > # Binary Header (bin_hdr) with DDR4 training code
> > > > > > > > BINARY board/thecus/n2350/binary.0 005b 0068
> > > > > > > >
> > > > > > > > When I kwboot the u-boot.kwb image (using kwboot binary built 
> > > > > > > > with
> > > > > > > > 2

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-09 Thread Pali Rohár
On Monday 09 January 2023 16:55:56 Tony Dinh wrote:
> Hi Pali,
> 
> On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  wrote:
> >
> > Hello,
> >
> > On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
> > >
> > > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> > > >
> > > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > > Hello!
> > > > > >
> > > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > > Hi Pali,
> > > > > > >
> > > > > > > I'm building a new u-boot for the Thecus N2350 board (Armada 385
> > > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, 
> > > > > > > which
> > > > > > > is not currently supported in u-boot (also cc this to Chris for
> > > > > > > commenting about Marvell DDR4 training driver).
> > > > > >
> > > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > > >
> > > > > > A38x u-boot ddr driver is in this directory:
> > > > > >
> > > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > > >
> > > > > > And it is copied from the original marvell driver by stripping 
> > > > > > non-a38x
> > > > > > code and removal of the ddr4 code from the master branch:
> > > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > > >
> > > > > > So you can try to copy code again without stripping ddr4 parts
> > > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > > >
> > > > >
> > > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > > >
> > > > > > And adjust u-boot board code for ddr4.
> > > > > >
> > > > > > I guess it could work but it would be needed to play with it.
> > > > >
> > > >
> > > > Last time I looked the MarvellEmbeddedProcessors stuff was a long way
> > > > behind what Marvell are releasing to customers. That was for the newer 
> > > > SoCs
> > > > so maybe the A385 stuff is current.
> > >
> > > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
> > > A3700-utils-marvell were up-to-date and same as the version distributed
> > > to the Marvell customers. I was cooperating with Marvell to release all
> > > patches from Marvell Extranet portal to github as opensource and also to
> > > incorporate github patches from community to their Extranet version.
> > > Also I was synchronizing u-boot drivers/ddr/marvell/a38x directory with
> > > MarvellEmbeddedProcessors version. I do not think that Marvell released
> > > something super new in these repositories in last half of year, so I
> > > think that the code on MarvellEmbeddedProcessors (for those two
> > > repositories) is still up-to-date.
> >
> > Thanks all for commenting. As Pali has suggested, I will try copying
> > the latest Marvell Github DDR drivers.
> 
> I've tried to bring in the latest Marvell DDR drivers, but failed
> miserably after many hours playing :) I used your DDR3 commit info as
> a guide as how to strip out other parts, and only kept DDR3 and DDR4
> for a38x:
> 
> https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> 
> The current code has DDR4 interspersed in DDR3 with if-defs
> CONFIG_DDR4. And there are some minor dependencies on ATF types,
> quite difficult for me to get it to build cleanly. I guess I threw in
> the towel for now :) If you ever find some free time, please give it a
> shot.
> 
> Thanks,
> Tony

Hello! And what is the issue? DDR training is failing? Or SPL does not
boot? Or it do not compile?

> 
> >
> > All the best,
> > Tony
> >
> >
> > > > >
> > > > > > > So I'm building with binary.0 in the ./board/thecus/n2350/. This
> > > > > > > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL 
> > > > > > > source
> > > > > > > for this board (provided by Thecus). My
> > > > > > > ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> > > > > > >
> > > > > > > # Armada 38x uses version 1 image format
> > > > > > > VERSION 1
> > > > > > > # Boot Media configurations
> > > > > > > BOOT_FROM spi
> > > > > > > # Binary Header (bin_hdr) with DDR4 training code
> > > > > > > BINARY board/thecus/n2350/binary.0 005b 0068
> > > > > > >
> > > > > > > When I kwboot the u-boot.kwb image (using kwboot binary built with
> > > > > > > 2023.01-rc4), the header was transferred successfully, but then 
> > > > > > > the
> > > > > > > BootROM jumped to SPI u-boot, instead of loading the u-boot 
> > > > > > > payload
> > > > > > > from UART. Please see the log below.
> > > > > > > 
> > > > > > > # ./kwboot -t -p -B 115200 /dev/ttyUSB0 -b uboot.kwb
> > > > > > >
> > > > > > > kwboot version 2023.01-tld-1-00048-g19e15f9081-dirty
> > > > > > > Patching image boot signature to UART
> > > > > > > Aligning image header to Xmodem block size
> > > > > > > Sending boot message. Please reboot the target.../
> > > > > > > Sending boot image header (97792 bytes)...
> > > > > > >   0 %
> > > > > [..

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-09 Thread Tony Dinh
Hi Pali,

On Wed, Jan 4, 2023 at 1:04 PM Tony Dinh  wrote:
>
> Hello,
>
> On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
> >
> > On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> > >
> > > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > > Hello!
> > > > >
> > > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > > Hi Pali,
> > > > > >
> > > > > > I'm building a new u-boot for the Thecus N2350 board (Armada 385
> > > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, which
> > > > > > is not currently supported in u-boot (also cc this to Chris for
> > > > > > commenting about Marvell DDR4 training driver).
> > > > >
> > > > > Yes, ddr4 training code is not in u-boot yet.
> > > > >
> > > > > A38x u-boot ddr driver is in this directory:
> > > > >
> > > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > > >
> > > > > And it is copied from the original marvell driver by stripping 
> > > > > non-a38x
> > > > > code and removal of the ddr4 code from the master branch:
> > > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > > >
> > > > > So you can try to copy code again without stripping ddr4 parts
> > > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > > >
> > > >
> > > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > > >
> > > > > And adjust u-boot board code for ddr4.
> > > > >
> > > > > I guess it could work but it would be needed to play with it.
> > > >
> > >
> > > Last time I looked the MarvellEmbeddedProcessors stuff was a long way
> > > behind what Marvell are releasing to customers. That was for the newer 
> > > SoCs
> > > so maybe the A385 stuff is current.
> >
> > About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
> > A3700-utils-marvell were up-to-date and same as the version distributed
> > to the Marvell customers. I was cooperating with Marvell to release all
> > patches from Marvell Extranet portal to github as opensource and also to
> > incorporate github patches from community to their Extranet version.
> > Also I was synchronizing u-boot drivers/ddr/marvell/a38x directory with
> > MarvellEmbeddedProcessors version. I do not think that Marvell released
> > something super new in these repositories in last half of year, so I
> > think that the code on MarvellEmbeddedProcessors (for those two
> > repositories) is still up-to-date.
>
> Thanks all for commenting. As Pali has suggested, I will try copying
> the latest Marvell Github DDR drivers.

I've tried to bring in the latest Marvell DDR drivers, but failed
miserably after many hours playing :) I used your DDR3 commit info as
a guide as how to strip out other parts, and only kept DDR3 and DDR4
for a38x:

https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460

The current code has DDR4 interspersed in DDR3 with if-defs
CONFIG_DDR4. And there are some minor dependencies on ATF types,
quite difficult for me to get it to build cleanly. I guess I threw in
the towel for now :) If you ever find some free time, please give it a
shot.

Thanks,
Tony


>
> All the best,
> Tony
>
>
> > > >
> > > > > > So I'm building with binary.0 in the ./board/thecus/n2350/. This
> > > > > > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL source
> > > > > > for this board (provided by Thecus). My
> > > > > > ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> > > > > >
> > > > > > # Armada 38x uses version 1 image format
> > > > > > VERSION 1
> > > > > > # Boot Media configurations
> > > > > > BOOT_FROM spi
> > > > > > # Binary Header (bin_hdr) with DDR4 training code
> > > > > > BINARY board/thecus/n2350/binary.0 005b 0068
> > > > > >
> > > > > > When I kwboot the u-boot.kwb image (using kwboot binary built with
> > > > > > 2023.01-rc4), the header was transferred successfully, but then the
> > > > > > BootROM jumped to SPI u-boot, instead of loading the u-boot payload
> > > > > > from UART. Please see the log below.
> > > > > > 
> > > > > > # ./kwboot -t -p -B 115200 /dev/ttyUSB0 -b uboot.kwb
> > > > > >
> > > > > > kwboot version 2023.01-tld-1-00048-g19e15f9081-dirty
> > > > > > Patching image boot signature to UART
> > > > > > Aligning image header to Xmodem block size
> > > > > > Sending boot message. Please reboot the target.../
> > > > > > Sending boot image header (97792 bytes)...
> > > > > >   0 %
> > > > [..]
> > > > > >   9 %
> > > > [..]
> > > > > > 
> > > > > >  82 %
> > > > [..]
> > > > > >  91 %
> > > > [  ]
> > > > > > Done
> > > > > >
> > > > > > BootROM - 1.73
> > > > > > Booting from S

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-04 Thread Tony Dinh
Hello,

On Wed, Jan 4, 2023 at 9:44 AM Pali Rohár  wrote:
>
> On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> > On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> >
> > > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > > Hello!
> > > >
> > > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > > Hi Pali,
> > > > >
> > > > > I'm building a new u-boot for the Thecus N2350 board (Armada 385
> > > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, which
> > > > > is not currently supported in u-boot (also cc this to Chris for
> > > > > commenting about Marvell DDR4 training driver).
> > > >
> > > > Yes, ddr4 training code is not in u-boot yet.
> > > >
> > > > A38x u-boot ddr driver is in this directory:
> > > >
> > > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > > >
> > > > And it is copied from the original marvell driver by stripping non-a38x
> > > > code and removal of the ddr4 code from the master branch:
> > > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > > >
> > > > So you can try to copy code again without stripping ddr4 parts
> > > > (run git log drivers/ddr/marvell/a38x in u-boot)
> > >
> > >
> > > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> > >
> > > > And adjust u-boot board code for ddr4.
> > > >
> > > > I guess it could work but it would be needed to play with it.
> > >
> >
> > Last time I looked the MarvellEmbeddedProcessors stuff was a long way
> > behind what Marvell are releasing to customers. That was for the newer SoCs
> > so maybe the A385 stuff is current.
>
> About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
> A3700-utils-marvell were up-to-date and same as the version distributed
> to the Marvell customers. I was cooperating with Marvell to release all
> patches from Marvell Extranet portal to github as opensource and also to
> incorporate github patches from community to their Extranet version.
> Also I was synchronizing u-boot drivers/ddr/marvell/a38x directory with
> MarvellEmbeddedProcessors version. I do not think that Marvell released
> something super new in these repositories in last half of year, so I
> think that the code on MarvellEmbeddedProcessors (for those two
> repositories) is still up-to-date.

Thanks all for commenting. As Pali has suggested, I will try copying
the latest Marvell Github DDR drivers.

All the best,
Tony


> > >
> > > > > So I'm building with binary.0 in the ./board/thecus/n2350/. This
> > > > > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL source
> > > > > for this board (provided by Thecus). My
> > > > > ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> > > > >
> > > > > # Armada 38x uses version 1 image format
> > > > > VERSION 1
> > > > > # Boot Media configurations
> > > > > BOOT_FROM spi
> > > > > # Binary Header (bin_hdr) with DDR4 training code
> > > > > BINARY board/thecus/n2350/binary.0 005b 0068
> > > > >
> > > > > When I kwboot the u-boot.kwb image (using kwboot binary built with
> > > > > 2023.01-rc4), the header was transferred successfully, but then the
> > > > > BootROM jumped to SPI u-boot, instead of loading the u-boot payload
> > > > > from UART. Please see the log below.
> > > > > 
> > > > > # ./kwboot -t -p -B 115200 /dev/ttyUSB0 -b uboot.kwb
> > > > >
> > > > > kwboot version 2023.01-tld-1-00048-g19e15f9081-dirty
> > > > > Patching image boot signature to UART
> > > > > Aligning image header to Xmodem block size
> > > > > Sending boot message. Please reboot the target.../
> > > > > Sending boot image header (97792 bytes)...
> > > > >   0 %
> > > [..]
> > > > >   9 %
> > > [..]
> > > > > 
> > > > >  82 %
> > > [..]
> > > > >  91 %
> > > [  ]
> > > > > Done
> > > > >
> > > > > BootROM - 1.73
> > > > > Booting from SPI flash
> > > >
> > > > This indicates reset of the board. BootROM started execution of the
> > > > image from the primary location.
> > > >
> > > > > 
> > > > > U-Boot 2013.01 (Nov 12 2018 - 20:56:19) Marvell version:
> > > 2015_T1.0p18-tld-4
> > > > > 
> > > > >
> > > > > It seems kwboot patched the image, but the BOOT_FROM indicator was
> > > > > still recognized as from SPI. So the BootROM loaded the stock u-boot
> > > > > image from SPI and executed it. Since I am booting with bin_hdr, I'm
> > > > > not sure if there is something inside this blob that has forced this
> > > > > indicator to SPI.
> > > >
> > > > No, blob cannot force BootROM to switch boot location. This really
> > > > indicates crash of the blob or crash of the payload which results in the
> > > > board reset.
> > > >
> > > > > I'm attaching the u-boot.kwb image to this email, in c

Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-04 Thread Pali Rohár
On Wednesday 04 January 2023 23:41:05 Chris Packham wrote:
> On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:
> 
> > On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > > Hello!
> > >
> > > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > > Hi Pali,
> > > >
> > > > I'm building a new u-boot for the Thecus N2350 board (Armada 385
> > > > dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, which
> > > > is not currently supported in u-boot (also cc this to Chris for
> > > > commenting about Marvell DDR4 training driver).
> > >
> > > Yes, ddr4 training code is not in u-boot yet.
> > >
> > > A38x u-boot ddr driver is in this directory:
> > >
> > https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> > >
> > > And it is copied from the original marvell driver by stripping non-a38x
> > > code and removal of the ddr4 code from the master branch:
> > > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> > >
> > > So you can try to copy code again without stripping ddr4 parts
> > > (run git log drivers/ddr/marvell/a38x in u-boot)
> >
> >
> > https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
> >
> > > And adjust u-boot board code for ddr4.
> > >
> > > I guess it could work but it would be needed to play with it.
> >
> 
> Last time I looked the MarvellEmbeddedProcessors stuff was a long way
> behind what Marvell are releasing to customers. That was for the newer SoCs
> so maybe the A385 stuff is current.

About half year ago, MarvellEmbeddedProcessors mv-ddr-marvell and
A3700-utils-marvell were up-to-date and same as the version distributed
to the Marvell customers. I was cooperating with Marvell to release all
patches from Marvell Extranet portal to github as opensource and also to
incorporate github patches from community to their Extranet version.
Also I was synchronizing u-boot drivers/ddr/marvell/a38x directory with
MarvellEmbeddedProcessors version. I do not think that Marvell released
something super new in these repositories in last half of year, so I
think that the code on MarvellEmbeddedProcessors (for those two
repositories) is still up-to-date.

> >
> > > > So I'm building with binary.0 in the ./board/thecus/n2350/. This
> > > > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL source
> > > > for this board (provided by Thecus). My
> > > > ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> > > >
> > > > # Armada 38x uses version 1 image format
> > > > VERSION 1
> > > > # Boot Media configurations
> > > > BOOT_FROM spi
> > > > # Binary Header (bin_hdr) with DDR4 training code
> > > > BINARY board/thecus/n2350/binary.0 005b 0068
> > > >
> > > > When I kwboot the u-boot.kwb image (using kwboot binary built with
> > > > 2023.01-rc4), the header was transferred successfully, but then the
> > > > BootROM jumped to SPI u-boot, instead of loading the u-boot payload
> > > > from UART. Please see the log below.
> > > > 
> > > > # ./kwboot -t -p -B 115200 /dev/ttyUSB0 -b uboot.kwb
> > > >
> > > > kwboot version 2023.01-tld-1-00048-g19e15f9081-dirty
> > > > Patching image boot signature to UART
> > > > Aligning image header to Xmodem block size
> > > > Sending boot message. Please reboot the target.../
> > > > Sending boot image header (97792 bytes)...
> > > >   0 %
> > [..]
> > > >   9 %
> > [..]
> > > > 
> > > >  82 %
> > [..]
> > > >  91 %
> > [  ]
> > > > Done
> > > >
> > > > BootROM - 1.73
> > > > Booting from SPI flash
> > >
> > > This indicates reset of the board. BootROM started execution of the
> > > image from the primary location.
> > >
> > > > 
> > > > U-Boot 2013.01 (Nov 12 2018 - 20:56:19) Marvell version:
> > 2015_T1.0p18-tld-4
> > > > 
> > > >
> > > > It seems kwboot patched the image, but the BOOT_FROM indicator was
> > > > still recognized as from SPI. So the BootROM loaded the stock u-boot
> > > > image from SPI and executed it. Since I am booting with bin_hdr, I'm
> > > > not sure if there is something inside this blob that has forced this
> > > > indicator to SPI.
> > >
> > > No, blob cannot force BootROM to switch boot location. This really
> > > indicates crash of the blob or crash of the payload which results in the
> > > board reset.
> > >
> > > > I'm attaching the u-boot.kwb image to this email, in case you are
> > > > interested in taking a look at the structure.
> > > >
> > > > Thanks,
> > > > Tony
> > >
> > >
> >


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-04 Thread Chris Packham
On Wed, 4 Jan 2023, 8:52 PM Pali Rohár,  wrote:

> On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> > Hello!
> >
> > On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > > Hi Pali,
> > >
> > > I'm building a new u-boot for the Thecus N2350 board (Armada 385
> > > dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, which
> > > is not currently supported in u-boot (also cc this to Chris for
> > > commenting about Marvell DDR4 training driver).
> >
> > Yes, ddr4 training code is not in u-boot yet.
> >
> > A38x u-boot ddr driver is in this directory:
> >
> https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> >
> > And it is copied from the original marvell driver by stripping non-a38x
> > code and removal of the ddr4 code from the master branch:
> > https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> >
> > So you can try to copy code again without stripping ddr4 parts
> > (run git log drivers/ddr/marvell/a38x in u-boot)
>
>
> https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460
>
> > And adjust u-boot board code for ddr4.
> >
> > I guess it could work but it would be needed to play with it.
>

Last time I looked the MarvellEmbeddedProcessors stuff was a long way
behind what Marvell are releasing to customers. That was for the newer SoCs
so maybe the A385 stuff is current.

>
> > > So I'm building with binary.0 in the ./board/thecus/n2350/. This
> > > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL source
> > > for this board (provided by Thecus). My
> > > ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> > >
> > > # Armada 38x uses version 1 image format
> > > VERSION 1
> > > # Boot Media configurations
> > > BOOT_FROM spi
> > > # Binary Header (bin_hdr) with DDR4 training code
> > > BINARY board/thecus/n2350/binary.0 005b 0068
> > >
> > > When I kwboot the u-boot.kwb image (using kwboot binary built with
> > > 2023.01-rc4), the header was transferred successfully, but then the
> > > BootROM jumped to SPI u-boot, instead of loading the u-boot payload
> > > from UART. Please see the log below.
> > > 
> > > # ./kwboot -t -p -B 115200 /dev/ttyUSB0 -b uboot.kwb
> > >
> > > kwboot version 2023.01-tld-1-00048-g19e15f9081-dirty
> > > Patching image boot signature to UART
> > > Aligning image header to Xmodem block size
> > > Sending boot message. Please reboot the target.../
> > > Sending boot image header (97792 bytes)...
> > >   0 %
> [..]
> > >   9 %
> [..]
> > > 
> > >  82 %
> [..]
> > >  91 %
> [  ]
> > > Done
> > >
> > > BootROM - 1.73
> > > Booting from SPI flash
> >
> > This indicates reset of the board. BootROM started execution of the
> > image from the primary location.
> >
> > > 
> > > U-Boot 2013.01 (Nov 12 2018 - 20:56:19) Marvell version:
> 2015_T1.0p18-tld-4
> > > 
> > >
> > > It seems kwboot patched the image, but the BOOT_FROM indicator was
> > > still recognized as from SPI. So the BootROM loaded the stock u-boot
> > > image from SPI and executed it. Since I am booting with bin_hdr, I'm
> > > not sure if there is something inside this blob that has forced this
> > > indicator to SPI.
> >
> > No, blob cannot force BootROM to switch boot location. This really
> > indicates crash of the blob or crash of the payload which results in the
> > board reset.
> >
> > > I'm attaching the u-boot.kwb image to this email, in case you are
> > > interested in taking a look at the structure.
> > >
> > > Thanks,
> > > Tony
> >
> >
>


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-03 Thread Pali Rohár
On Wednesday 04 January 2023 08:50:28 Pali Rohár wrote:
> Hello!
> 
> On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> > Hi Pali,
> > 
> > I'm building a new u-boot for the Thecus N2350 board (Armada 385
> > dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, which
> > is not currently supported in u-boot (also cc this to Chris for
> > commenting about Marvell DDR4 training driver).
> 
> Yes, ddr4 training code is not in u-boot yet.
> 
> A38x u-boot ddr driver is in this directory:
> https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x
> 
> And it is copied from the original marvell driver by stripping non-a38x
> code and removal of the ddr4 code from the master branch:
> https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell
> 
> So you can try to copy code again without stripping ddr4 parts
> (run git log drivers/ddr/marvell/a38x in u-boot)

https://source.denx.de/u-boot/u-boot/-/commit/107c3391b95bcc2ba09a876da4fa0c31b6c1e460

> And adjust u-boot board code for ddr4.
> 
> I guess it could work but it would be needed to play with it.
> 
> > So I'm building with binary.0 in the ./board/thecus/n2350/. This
> > binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL source
> > for this board (provided by Thecus). My
> > ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> > 
> > # Armada 38x uses version 1 image format
> > VERSION 1
> > # Boot Media configurations
> > BOOT_FROM spi
> > # Binary Header (bin_hdr) with DDR4 training code
> > BINARY board/thecus/n2350/binary.0 005b 0068
> > 
> > When I kwboot the u-boot.kwb image (using kwboot binary built with
> > 2023.01-rc4), the header was transferred successfully, but then the
> > BootROM jumped to SPI u-boot, instead of loading the u-boot payload
> > from UART. Please see the log below.
> > 
> > # ./kwboot -t -p -B 115200 /dev/ttyUSB0 -b uboot.kwb
> > 
> > kwboot version 2023.01-tld-1-00048-g19e15f9081-dirty
> > Patching image boot signature to UART
> > Aligning image header to Xmodem block size
> > Sending boot message. Please reboot the target.../
> > Sending boot image header (97792 bytes)...
> >   0 % 
> > [..]
> >   9 % 
> > [..]
> > 
> >  82 % 
> > [..]
> >  91 % [ 
> >  ]
> > Done
> > 
> > BootROM - 1.73
> > Booting from SPI flash
> 
> This indicates reset of the board. BootROM started execution of the
> image from the primary location.
> 
> > 
> > U-Boot 2013.01 (Nov 12 2018 - 20:56:19) Marvell version: 2015_T1.0p18-tld-4
> > 
> > 
> > It seems kwboot patched the image, but the BOOT_FROM indicator was
> > still recognized as from SPI. So the BootROM loaded the stock u-boot
> > image from SPI and executed it. Since I am booting with bin_hdr, I'm
> > not sure if there is something inside this blob that has forced this
> > indicator to SPI.
> 
> No, blob cannot force BootROM to switch boot location. This really
> indicates crash of the blob or crash of the payload which results in the
> board reset.
> 
> > I'm attaching the u-boot.kwb image to this email, in case you are
> > interested in taking a look at the structure.
> > 
> > Thanks,
> > Tony
> 
> 


Re: kwboot: UART booting with bin_hdr u-boot (Marvell Armada 385)

2023-01-03 Thread Pali Rohár
Hello!

On Tuesday 03 January 2023 17:55:41 Tony Dinh wrote:
> Hi Pali,
> 
> I'm building a new u-boot for the Thecus N2350 board (Armada 385
> dual-core 1Ghz 1GB DDR4). The trouble with this board is DDR4, which
> is not currently supported in u-boot (also cc this to Chris for
> commenting about Marvell DDR4 training driver).

Yes, ddr4 training code is not in u-boot yet.

A38x u-boot ddr driver is in this directory:
https://source.denx.de/u-boot/u-boot/-/tree/master/drivers/ddr/marvell/a38x

And it is copied from the original marvell driver by stripping non-a38x
code and removal of the ddr4 code from the master branch:
https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell

So you can try to copy code again without stripping ddr4 parts
(run git log drivers/ddr/marvell/a38x in u-boot)
And adjust u-boot board code for ddr4.

I guess it could work but it would be needed to play with it.

> So I'm building with binary.0 in the ./board/thecus/n2350/. This
> binary.0 is a copy of the Marvell bin_hdr for SPI in the GPL source
> for this board (provided by Thecus). My
> ./board/thecus/n2350/kwbimage.cfg.in file looks like this
> 
> # Armada 38x uses version 1 image format
> VERSION 1
> # Boot Media configurations
> BOOT_FROM spi
> # Binary Header (bin_hdr) with DDR4 training code
> BINARY board/thecus/n2350/binary.0 005b 0068
> 
> When I kwboot the u-boot.kwb image (using kwboot binary built with
> 2023.01-rc4), the header was transferred successfully, but then the
> BootROM jumped to SPI u-boot, instead of loading the u-boot payload
> from UART. Please see the log below.
> 
> # ./kwboot -t -p -B 115200 /dev/ttyUSB0 -b uboot.kwb
> 
> kwboot version 2023.01-tld-1-00048-g19e15f9081-dirty
> Patching image boot signature to UART
> Aligning image header to Xmodem block size
> Sending boot message. Please reboot the target.../
> Sending boot image header (97792 bytes)...
>   0 % [..]
>   9 % [..]
> 
>  82 % [..]
>  91 % [  ]
> Done
> 
> BootROM - 1.73
> Booting from SPI flash

This indicates reset of the board. BootROM started execution of the
image from the primary location.

> 
> U-Boot 2013.01 (Nov 12 2018 - 20:56:19) Marvell version: 2015_T1.0p18-tld-4
> 
> 
> It seems kwboot patched the image, but the BOOT_FROM indicator was
> still recognized as from SPI. So the BootROM loaded the stock u-boot
> image from SPI and executed it. Since I am booting with bin_hdr, I'm
> not sure if there is something inside this blob that has forced this
> indicator to SPI.

No, blob cannot force BootROM to switch boot location. This really
indicates crash of the blob or crash of the payload which results in the
board reset.

> I'm attaching the u-boot.kwb image to this email, in case you are
> interested in taking a look at the structure.
> 
> Thanks,
> Tony