diff mbox series

[U-Boot] bootm: vxworks: Support Linux compatible standard DTB for ARM and PPC

Message ID 1573806077-1456-1-git-send-email-bmeng.cn@gmail.com
State Accepted
Commit 1e26f648885719cb6a105ae3562e8d840e75a6b8
Delegated to: Tom Rini
Headers show
Series [U-Boot] bootm: vxworks: Support Linux compatible standard DTB for ARM and PPC | expand

Commit Message

Bin Meng Nov. 15, 2019, 8:21 a.m. UTC
From: Lihua Zhao <lihua.zhao@windriver.com>

Enhance do_bootm_vxworks() to support Linux compatible standard DTB
for ARM and PPC, when the least significant bit of flags in VxWorks
bootargs is set. Otherwise it falls back to the existing bootm flow
which is now legacy.

Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---

 common/bootm_os.c  | 39 +++++++++++++++++++++++++++++++++++++--
 doc/README.vxworks | 13 +++++++++++++
 include/vxworks.h  |  3 +++
 3 files changed, 53 insertions(+), 2 deletions(-)

Comments

Bin Meng Nov. 20, 2019, 2:11 a.m. UTC | #1
Hi Tom,

On Fri, Nov 15, 2019 at 4:21 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> From: Lihua Zhao <lihua.zhao@windriver.com>
>
> Enhance do_bootm_vxworks() to support Linux compatible standard DTB
> for ARM and PPC, when the least significant bit of flags in VxWorks
> bootargs is set. Otherwise it falls back to the existing bootm flow
> which is now legacy.
>
> Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> ---
>
>  common/bootm_os.c  | 39 +++++++++++++++++++++++++++++++++++++--
>  doc/README.vxworks | 13 +++++++++++++
>  include/vxworks.h  |  3 +++
>  3 files changed, 53 insertions(+), 2 deletions(-)
>

It would be good if you pick this up for v2020.01. Thanks!

Regards,
Bin
Tom Rini Nov. 20, 2019, 2:22 p.m. UTC | #2
On Wed, Nov 20, 2019 at 10:11:00AM +0800, Bin Meng wrote:
> Hi Tom,
> 
> On Fri, Nov 15, 2019 at 4:21 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> >
> > From: Lihua Zhao <lihua.zhao@windriver.com>
> >
> > Enhance do_bootm_vxworks() to support Linux compatible standard DTB
> > for ARM and PPC, when the least significant bit of flags in VxWorks
> > bootargs is set. Otherwise it falls back to the existing bootm flow
> > which is now legacy.
> >
> > Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
> > Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> > ---
> >
> >  common/bootm_os.c  | 39 +++++++++++++++++++++++++++++++++++++--
> >  doc/README.vxworks | 13 +++++++++++++
> >  include/vxworks.h  |  3 +++
> >  3 files changed, 53 insertions(+), 2 deletions(-)
> 
> It would be good if you pick this up for v2020.01. Thanks!

OK, thanks.  I'll put this on my TODO list for soon.
Bin Meng Nov. 27, 2019, 6:03 a.m. UTC | #3
Hi Tom,

On Wed, Nov 20, 2019 at 10:22 PM Tom Rini <trini@konsulko.com> wrote:
>
> On Wed, Nov 20, 2019 at 10:11:00AM +0800, Bin Meng wrote:
> > Hi Tom,
> >
> > On Fri, Nov 15, 2019 at 4:21 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> > >
> > > From: Lihua Zhao <lihua.zhao@windriver.com>
> > >
> > > Enhance do_bootm_vxworks() to support Linux compatible standard DTB
> > > for ARM and PPC, when the least significant bit of flags in VxWorks
> > > bootargs is set. Otherwise it falls back to the existing bootm flow
> > > which is now legacy.
> > >
> > > Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
> > > Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> > > ---
> > >
> > >  common/bootm_os.c  | 39 +++++++++++++++++++++++++++++++++++++--
> > >  doc/README.vxworks | 13 +++++++++++++
> > >  include/vxworks.h  |  3 +++
> > >  3 files changed, 53 insertions(+), 2 deletions(-)
> >
> > It would be good if you pick this up for v2020.01. Thanks!
>
> OK, thanks.  I'll put this on my TODO list for soon.

A gentle ping?

Regards,
Bin
Tom Rini Nov. 27, 2019, 12:55 p.m. UTC | #4
On Wed, Nov 27, 2019 at 02:03:03PM +0800, Bin Meng wrote:
> Hi Tom,
> 
> On Wed, Nov 20, 2019 at 10:22 PM Tom Rini <trini@konsulko.com> wrote:
> >
> > On Wed, Nov 20, 2019 at 10:11:00AM +0800, Bin Meng wrote:
> > > Hi Tom,
> > >
> > > On Fri, Nov 15, 2019 at 4:21 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> > > >
> > > > From: Lihua Zhao <lihua.zhao@windriver.com>
> > > >
> > > > Enhance do_bootm_vxworks() to support Linux compatible standard DTB
> > > > for ARM and PPC, when the least significant bit of flags in VxWorks
> > > > bootargs is set. Otherwise it falls back to the existing bootm flow
> > > > which is now legacy.
> > > >
> > > > Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
> > > > Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> > > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> > > > ---
> > > >
> > > >  common/bootm_os.c  | 39 +++++++++++++++++++++++++++++++++++++--
> > > >  doc/README.vxworks | 13 +++++++++++++
> > > >  include/vxworks.h  |  3 +++
> > > >  3 files changed, 53 insertions(+), 2 deletions(-)
> > >
> > > It would be good if you pick this up for v2020.01. Thanks!
> >
> > OK, thanks.  I'll put this on my TODO list for soon.
> 
> A gentle ping?

So the issue now is that this causes size growth and then link failure
on tbs2910.  And I don't think "boot modern VxWorks kernels" is a new
CONFIG option I want to see.  So I'm not quite sure what to do here yet.
Soeren, do you care about VxWorks support on this platform?  Thanks!
Sören Moch Nov. 27, 2019, 1:34 p.m. UTC | #5
On 27.11.19 13:55, Tom Rini wrote:
> On Wed, Nov 27, 2019 at 02:03:03PM +0800, Bin Meng wrote:
>> Hi Tom,
>>
>> On Wed, Nov 20, 2019 at 10:22 PM Tom Rini <trini@konsulko.com> wrote:
>>> On Wed, Nov 20, 2019 at 10:11:00AM +0800, Bin Meng wrote:
>>>> Hi Tom,
>>>>
>>>> On Fri, Nov 15, 2019 at 4:21 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>>>>> From: Lihua Zhao <lihua.zhao@windriver.com>
>>>>>
>>>>> Enhance do_bootm_vxworks() to support Linux compatible standard DTB
>>>>> for ARM and PPC, when the least significant bit of flags in VxWorks
>>>>> bootargs is set. Otherwise it falls back to the existing bootm flow
>>>>> which is now legacy.
>>>>>
>>>>> Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
>>>>> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
>>>>> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>>>>> ---
>>>>>
>>>>>  common/bootm_os.c  | 39 +++++++++++++++++++++++++++++++++++++--
>>>>>  doc/README.vxworks | 13 +++++++++++++
>>>>>  include/vxworks.h  |  3 +++
>>>>>  3 files changed, 53 insertions(+), 2 deletions(-)
>>>> It would be good if you pick this up for v2020.01. Thanks!
>>> OK, thanks.  I'll put this on my TODO list for soon.
>> A gentle ping?
> So the issue now is that this causes size growth and then link failure
> on tbs2910.  And I don't think "boot modern VxWorks kernels" is a new
> CONFIG option I want to see.  So I'm not quite sure what to do here yet.
> Soeren, do you care about VxWorks support on this platform?  Thanks!
>
I'm not aware of any user of VxWorks on tbs2910. So would be OK for me
to disable CONFIG_BOOTM_VXWORKS in tbs2910_defconfig.

Do you want me to send a patch for this? Has this to go through the imx
tree? I'm also happy to send an Acked-by instead, if this makes things
easier.

Regards,
Soeren
Tom Rini Nov. 27, 2019, 2:20 p.m. UTC | #6
On Wed, Nov 27, 2019 at 02:34:14PM +0100, Soeren Moch wrote:
> On 27.11.19 13:55, Tom Rini wrote:
> > On Wed, Nov 27, 2019 at 02:03:03PM +0800, Bin Meng wrote:
> >> Hi Tom,
> >>
> >> On Wed, Nov 20, 2019 at 10:22 PM Tom Rini <trini@konsulko.com> wrote:
> >>> On Wed, Nov 20, 2019 at 10:11:00AM +0800, Bin Meng wrote:
> >>>> Hi Tom,
> >>>>
> >>>> On Fri, Nov 15, 2019 at 4:21 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> >>>>> From: Lihua Zhao <lihua.zhao@windriver.com>
> >>>>>
> >>>>> Enhance do_bootm_vxworks() to support Linux compatible standard DTB
> >>>>> for ARM and PPC, when the least significant bit of flags in VxWorks
> >>>>> bootargs is set. Otherwise it falls back to the existing bootm flow
> >>>>> which is now legacy.
> >>>>>
> >>>>> Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
> >>>>> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> >>>>> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> >>>>> ---
> >>>>>
> >>>>>  common/bootm_os.c  | 39 +++++++++++++++++++++++++++++++++++++--
> >>>>>  doc/README.vxworks | 13 +++++++++++++
> >>>>>  include/vxworks.h  |  3 +++
> >>>>>  3 files changed, 53 insertions(+), 2 deletions(-)
> >>>> It would be good if you pick this up for v2020.01. Thanks!
> >>> OK, thanks.  I'll put this on my TODO list for soon.
> >> A gentle ping?
> > So the issue now is that this causes size growth and then link failure
> > on tbs2910.  And I don't think "boot modern VxWorks kernels" is a new
> > CONFIG option I want to see.  So I'm not quite sure what to do here yet.
> > Soeren, do you care about VxWorks support on this platform?  Thanks!
> >
> I'm not aware of any user of VxWorks on tbs2910. So would be OK for me
> to disable CONFIG_BOOTM_VXWORKS in tbs2910_defconfig.
> 
> Do you want me to send a patch for this? Has this to go through the imx
> tree? I'm also happy to send an Acked-by instead, if this makes things
> easier.

Thanks.  I'll post a patch shortly and you can ack it.
Tom Rini Dec. 4, 2019, 4:02 a.m. UTC | #7
On Fri, Nov 15, 2019 at 12:21:17AM -0800, Bin Meng wrote:

> From: Lihua Zhao <lihua.zhao@windriver.com>
> 
> Enhance do_bootm_vxworks() to support Linux compatible standard DTB
> for ARM and PPC, when the least significant bit of flags in VxWorks
> bootargs is set. Otherwise it falls back to the existing bootm flow
> which is now legacy.
> 
> Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/common/bootm_os.c b/common/bootm_os.c
index 6fb7d65..6c2d4e2 100644
--- a/common/bootm_os.c
+++ b/common/bootm_os.c
@@ -318,8 +318,8 @@  static void do_bootvx_fdt(bootm_headers_t *images)
 	puts("## vxWorks terminated\n");
 }
 
-int do_bootm_vxworks(int flag, int argc, char * const argv[],
-		     bootm_headers_t *images)
+static int do_bootm_vxworks_legacy(int flag, int argc, char * const argv[],
+				   bootm_headers_t *images)
 {
 	if (flag != BOOTM_STATE_OS_GO)
 		return 0;
@@ -335,6 +335,41 @@  int do_bootm_vxworks(int flag, int argc, char * const argv[],
 
 	return 1;
 }
+
+int do_bootm_vxworks(int flag, int argc, char * const argv[],
+		     bootm_headers_t *images)
+{
+	char *bootargs;
+	int pos;
+	unsigned long vxflags;
+	bool std_dtb = false;
+
+	/* get bootargs env */
+	bootargs = env_get("bootargs");
+
+	if (bootargs != NULL) {
+		for (pos = 0; pos < strlen(bootargs); pos++) {
+			/* find f=0xnumber flag */
+			if ((bootargs[pos] == '=') && (pos >= 1) &&
+			    (bootargs[pos - 1] == 'f')) {
+				vxflags = simple_strtoul(&bootargs[pos + 1],
+							 NULL, 16);
+				if (vxflags & VXWORKS_SYSFLG_STD_DTB)
+					std_dtb = true;
+			}
+		}
+	}
+
+	if (std_dtb) {
+		if (flag & BOOTM_STATE_OS_PREP)
+			printf("   Using standard DTB\n");
+		return do_bootm_linux(flag, argc, argv, images);
+	} else {
+		if (flag & BOOTM_STATE_OS_PREP)
+			printf("   !!! WARNING !!! Using legacy DTB\n");
+		return do_bootm_vxworks_legacy(flag, argc, argv, images);
+	}
+}
 #endif
 
 #if defined(CONFIG_CMD_ELF)
diff --git a/doc/README.vxworks b/doc/README.vxworks
index 3e08711..12a0d74 100644
--- a/doc/README.vxworks
+++ b/doc/README.vxworks
@@ -2,6 +2,7 @@ 
 #
 # Copyright (C) 2013, Miao Yan <miao.yan@windriver.com>
 # Copyright (C) 2015-2018, Bin Meng <bmeng.cn@gmail.com>
+# Copyright (C) 2019, Lihua Zhao <lihua.zhao@windriver.com>
 
 VxWorks Support
 ===============
@@ -24,6 +25,15 @@  From VxWorks 7, VxWorks starts adopting device tree as its hardware description
 mechanism (for PowerPC and ARM), thus requiring boot interface changes.
 This section will describe the new interface.
 
+Since VxWorks 7 SR0640 release, VxWorks starts using Linux compatible standard
+DTB for some boards. With that, the exact same bootm flow as used by Linux is
+used, which includes board-specific DTB fix up. To keep backward compatibility,
+only when the least significant bit of flags in bootargs is set, the standard
+DTB will be used. Otherwise it falls back to the legacy bootm flow.
+
+For legacy bootm flow, make sure the least significant bit of flags in bootargs
+is cleared. The calling convention is described below:
+
 For PowerPC, the calling convention of the new VxWorks entry point conforms to
 the ePAPR standard, which is shown below (see ePAPR for more details):
 
@@ -33,6 +43,9 @@  For ARM, the calling convention is shown below:
 
     void (*kernel_entry)(void *fdt_addr)
 
+When using the Linux compatible standard DTB, the calling convention of VxWorks
+entry point is exactly the same as the Linux kernel.
+
 When booting a VxWorks 7 kernel (uImage format), the parameters passed to bootm
 is like below:
 
diff --git a/include/vxworks.h b/include/vxworks.h
index 1a29509..d90d862 100644
--- a/include/vxworks.h
+++ b/include/vxworks.h
@@ -9,6 +9,9 @@ 
 
 #include <efi_api.h>
 
+/* Use Linux compatible standard DTB */
+#define VXWORKS_SYSFLG_STD_DTB	0x1
+
 /*
  * Physical address of memory base for VxWorks x86
  * This is LOCAL_MEM_LOCAL_ADRS in the VxWorks kernel configuration.