[U-Boot] [PATCH] rockchip: set scan_dev_for_boot_part env for rockchip SoC
Simon Glass
sjg at chromium.org
Thu Feb 23 03:33:52 UTC 2017
Hi Eddie,
On 22 February 2017 at 07:12, Eddie Cai <eddie.cai.linux at gmail.com> wrote:
> Hi Simon
>
> 2017-02-22 17:05 GMT+08:00 Eddie Cai <eddie.cai.linux at gmail.com>:
>>
>> Hi Simon
>>
>> 2017-02-22 11:59 GMT+08:00 Simon Glass <sjg at chromium.org>:
>>>
>>> Hi Eddie,
>>>
>>> On 17 February 2017 at 00:57, Eddie Cai <eddie.cai.linux at gmail.com>
>>> wrote:
>>> > Auto write GPT table if fail to get GPT table when
>>> > scan_dev_for_boot_part
>>> >
>>> > Signed-off-by: Eddie Cai <eddie.cai.linux at gmail.com>
>>> > ---
>>> > arch/arm/mach-rockchip/rk3036-board.c | 20 ++++++++++++++-
>>> > arch/arm/mach-rockchip/rk3288-board.c | 20 ++++++++++++++-
>>> > arch/arm/mach-rockchip/rk3399-board.c | 46
>>> > +++++++++++++++++++++++++++++++++++
>>> > 3 files changed, 84 insertions(+), 2 deletions(-)
>>> > create mode 100644 arch/arm/mach-rockchip/rk3399-board.c
>>> >
>>> > diff --git a/arch/arm/mach-rockchip/rk3036-board.c
>>> > b/arch/arm/mach-rockchip/rk3036-board.c
>>> > index bf2b268..e9aeaff 100644
>>> > --- a/arch/arm/mach-rockchip/rk3036-board.c
>>> > +++ b/arch/arm/mach-rockchip/rk3036-board.c
>>> > @@ -51,7 +51,25 @@ __weak int rk_board_late_init(void)
>>> > int board_late_init(void)
>>> > {
>>> > setup_boot_mode();
>>> > -
>>> > + setenv("scan_dev_for_boot_part",
>>> > + "part list ${devtype} ${devnum} -bootable test;
>>> > "
>>> > + "if env exists test; then "
>>> > + "echo Found valid partition table; "
>>> > + "else "
>>> > + "echo No valid partition table, write the
>>> > original partition table; "
>>> > + "gpt write ${devtype} ${devnum}
>>> > ${partitions}; "
>>> > + "mmc rescan;"
>>> > + "fi;"
>>> > + "part list ${devtype} ${devnum} -bootable
>>> > devplist; "
>>> > + "env exists devplist || setenv devplist 1; "
>>> > + "for distro_bootpart in ${devplist}; do "
>>> > + "if fstype ${devtype} "
>>> > + "${devnum}:${distro_bootpart} "
>>> > + "bootfstype; then "
>>> > + "run scan_dev_for_boot; "
>>> > + "fi; "
>>> > + "done\0"
>>> > + );
>>> > return rk_board_late_init();
>>> > }
>>> >
>>> > diff --git a/arch/arm/mach-rockchip/rk3288-board.c
>>> > b/arch/arm/mach-rockchip/rk3288-board.c
>>> > index 9894a25..386b155 100644
>>> > --- a/arch/arm/mach-rockchip/rk3288-board.c
>>> > +++ b/arch/arm/mach-rockchip/rk3288-board.c
>>> > @@ -74,7 +74,25 @@ int board_late_init(void)
>>> > {
>>> > setup_boot_mode();
>>> > rk3288_qos_init();
>>> > -
>>> > + setenv("scan_dev_for_boot_part",
>>> > + "part list ${devtype} ${devnum} -bootable test;
>>> > "
>>> > + "if env exists test; then "
>>> > + "echo Found valid partition table; "
>>> > + "else "
>>> > + "echo No valid partition table, write the
>>> > original partition table; "
>>> > + "gpt write ${devtype} ${devnum}
>>> > ${partitions}; "
>>> > + "mmc rescan;"
>>> > + "fi;"
>>> > + "part list ${devtype} ${devnum} -bootable
>>> > devplist; "
>>> > + "env exists devplist || setenv devplist 1; "
>>> > + "for distro_bootpart in ${devplist}; do "
>>> > + "if fstype ${devtype} "
>>> > + "${devnum}:${distro_bootpart} "
>>> > + "bootfstype; then "
>>> > + "run scan_dev_for_boot; "
>>> > + "fi; "
>>> > + "done\0"
>>> > + );
>>> > return rk_board_late_init();
>>> > }
>>> >
>>> > diff --git a/arch/arm/mach-rockchip/rk3399-board.c
>>> > b/arch/arm/mach-rockchip/rk3399-board.c
>>> > new file mode 100644
>>> > index 0000000..3777643
>>> > --- /dev/null
>>> > +++ b/arch/arm/mach-rockchip/rk3399-board.c
>>> > @@ -0,0 +1,46 @@
>>> > +/*
>>> > + * (C) Copyright 2017 ockchip Electronics Co., Ltd
>>> > + *
>>> > + * SPDX-License-Identifier: GPL-2.0+
>>> > + */
>>> > +
>>> > +#include <common.h>
>>> > +#include <clk.h>
>>> > +#include <dm.h>
>>> > +#include <ram.h>
>>> > +#include <syscon.h>
>>> > +#include <asm/io.h>
>>> > +#include <asm/arch/clock.h>
>>> > +#include <asm/arch/periph.h>
>>> > +
>>> > +DECLARE_GLOBAL_DATA_PTR;
>>> > +
>>> > +__weak int rk_board_late_init(void)
>>> > +{
>>> > + return 0;
>>> > +}
>>> > +
>>> > +int board_late_init(void)
>>> > +{
>>> > + setenv("scan_dev_for_boot_part",
>>> > + "part list ${devtype} ${devnum} -bootable test;
>>> > "
>>> > + "if env exists test; then "
>>> > + "echo Found valid partition table; "
>>> > + "else "
>>> > + "echo No valid partition table, write the
>>> > original partition table; "
>>> > + "gpt write ${devtype} ${devnum}
>>> > ${partitions}; "
>>> > + "mmc rescan;"
>>> > + "fi;"
>>> > + "part list ${devtype} ${devnum} -bootable
>>> > devplist; "
>>> > + "env exists devplist || setenv devplist 1; "
>>> > + "for distro_bootpart in ${devplist}; do "
>>> > + "if fstype ${devtype} "
>>> > + "${devnum}:${distro_bootpart} "
>>> > + "bootfstype; then "
>>> > + "run scan_dev_for_boot; "
>>> > + "fi; "
>>> > + "done\0"
>>>
>>> What is the purpose of this setenv()?
>>
>> Auto write GPT table when scan_dev_for_boot_part fail to find a valid one
>
> To be more clearly. If the GPT table in the boot media corrupted. Or there
> is no GPT table in the boot media. The original scan_dev_for_boot_part will
> fail to find a bootable partition. I just let it write GPT table when can
> not find a valid one.
>>>
OK, but you should not be changing the environment in your code. Can
you add your changes to the default environment (and put them in a
common file so that we don't have to repeat the same thing in each
file)?
Regards,
Simon
More information about the U-Boot
mailing list