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

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(-)
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.

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

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.

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

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!

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

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.

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!
participants (3)
-
Bin Meng
-
Soeren Moch
-
Tom Rini