From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rini Date: Wed, 4 Mar 2015 11:57:18 -0500 Subject: [U-Boot] [PATCH v1 4/4] ARM: DRA7: fastboot: Implement reboot-bootloader command - Implemented fb_set_reboot_flag() for DRA7 - Defined a weak function, fb_check_reboot_flag() - Implemented for DRA7 In-Reply-To: References: <1425381044-19460-1-git-send-email-dileep.katta@linaro.org> <1425381044-19460-4-git-send-email-dileep.katta@linaro.org> Message-ID: <20150304165718.GX25373@bill-the-cat> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Tue, Mar 03, 2015 at 08:15:56AM -0600, Rob Herring wrote: > On Tue, Mar 3, 2015 at 5:10 AM, Dileep Katta wrote: > > Signed-off-by: Angela Stegmaier > > Signed-off-by: Dileep Katta You need a full commit message as I don't really understand what this is supposed to be doing or why it's needed. > > --- > > board/ti/dra7xx/Makefile | 1 + > > board/ti/dra7xx/fastboot.c | 45 ++++++++++++++++++++++++++++++++++++ > > common/cmd_bootm.c | 5 ++++ > > drivers/usb/gadget/f_fastboot.c | 5 ++++ > > include/configs/dra7xx_evm_android.h | 14 +++++++++++ > > 5 files changed, 70 insertions(+) > > create mode 100644 board/ti/dra7xx/fastboot.c > > > > diff --git a/board/ti/dra7xx/Makefile b/board/ti/dra7xx/Makefile > > index 434e8d1..ae730ae 100644 > > --- a/board/ti/dra7xx/Makefile > > +++ b/board/ti/dra7xx/Makefile > > @@ -6,3 +6,4 @@ > > # > > > > obj-y := evm.o > > +obj-$(CONFIG_CMD_FASTBOOT) += fastboot.o > > diff --git a/board/ti/dra7xx/fastboot.c b/board/ti/dra7xx/fastboot.c > > new file mode 100644 > > index 0000000..e05010d > > --- /dev/null > > +++ b/board/ti/dra7xx/fastboot.c > > @@ -0,0 +1,45 @@ > > +/* > > + * (C) Copyright 2013 > > + * Texas Instruments Incorporated, > > + * > > + * Lokesh Vutla > > + * > > + * Based on previous work by: > > + * Aneesh V > > + * Steve Sakoman > > + * > > + * SPDX-License-Identifier: GPL-2.0+ > > + */ > > +#include > > +#include > > +#include > > +#include > > + > > + > > +int fb_set_reboot_flag(void) > > +{ > > + /* clear all reset events */ > > + __raw_writel(DRA7XX_PRM_RSTST_CLR, PRM_RSTST); > > + strncpy((char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE, "bootloader", > > + DRA7XX_REBOOT_REASON_SIZE - 1); > > + *(((char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE) + > > + DRA7XX_REBOOT_REASON_SIZE - 1) = '\0'; > > + /* trigger warm reset */ > > + __raw_writel(DRA7XX_PRM_RSTCTRL_RESET_WARM_BIT, DRA7XX_PRM_RSTCTRL); > > Does this reset immediately? If so, then you will fail to send a > response to the client. > > > + > > + return 0; > > +} > > + > > +int fb_check_reboot_flag(void) > > +{ > > + /* Check if we are coming from a warm reset */ > > + if (__raw_readl(DRA7XX_PRM_RSTST) & DRA7XX_PRM_RSTST_RESET_WARM_BIT) > > + if (!strncmp((const char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE, > > + "bootloader", DRA7XX_REBOOT_REASON_SIZE)) { > > + strncpy((char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE, "", > > + DRA7XX_REBOOT_REASON_SIZE); > > + return 0; > > + } > > + > > + return 1; > > +} > > diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c > > index 48199bf..00791be 100644 > > --- a/common/cmd_bootm.c > > +++ b/common/cmd_bootm.c > > @@ -729,6 +729,11 @@ int do_booti(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > > { > > int ret; > > > > +#if defined(CONFIG_CMD_FASTBOOT) > > + if (!fb_check_reboot_flag()) > > + do_fastboot(cmdtp, flag, argc, argv); > > +#endif > > Part of the booti command? First, booti is for arm64 Image files. How > does this work for you? > > More importantly, this should not be tied into any bootX command. It > should probably be done in a boot script. If the flag is set, the > board code can set some environment variable. Then the boot script can > run the fastboot command if the env var is set. > > > + > > /* Consume 'booti' */ > > argc--; argv++; > > > > diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c > > index 206b6d1..a450357 100644 > > --- a/drivers/usb/gadget/f_fastboot.c > > +++ b/drivers/usb/gadget/f_fastboot.c > > @@ -332,6 +332,11 @@ int __weak fb_set_reboot_flag(void) > > return -ENOSYS; > > } > > > > +int __weak fb_check_reboot_flag(void) > > +{ > > + return -ENOSYS; > > +} > > + > > static void cb_reboot(struct usb_ep *ep, struct usb_request *req) > > { > > char *cmd = req->buf; > > diff --git a/include/configs/dra7xx_evm_android.h b/include/configs/dra7xx_evm_android.h > > index 68e7eec..2038e00 100644 > > --- a/include/configs/dra7xx_evm_android.h > > +++ b/include/configs/dra7xx_evm_android.h > > @@ -310,4 +310,18 @@ > > #endif > > #endif /* NOR support */ > > > > +#define DRA7XX_PUBLIC_SAR_RAM_1_FREE (0x4AE26000 + 0xFE0) > > +#define DRA7XX_PRM_RSTCTRL_RESET_WARM_BIT (1<<0) > > +#define DRA7XX_PRM_RSTST_RESET_WARM_BIT (1<<1) > > +#define DRA7XX_PRM_RSTST 0x4AE07D04 > > +#define DRA7XX_PRM_RSTCTRL 0x4AE07D00 > > +#define DRA7XX_PRM_RSTST_CLR 0xfff > > +#define DRA7XX_REBOOT_REASON_SIZE 0xf These defines, if really needed, need to end up somewhere under arch/arm/include/asm/arch-omap5/ and the code using them somewhere under arch/arm/cpu/armv7/omap-common/ > > +#define CONFIG_BOARD_MACH_TYPE 4070 > > You shouldn't need this anymore, right? > > > +#define MEMORY_BASE 0x80000000 > > +#define CONFIG_ADDR_ATAGS (MEMORY_BASE + 0x100) > > Or this? > > > +#define CONFIG_ADDR_DOWNLOAD (MEMORY_BASE + 0x02000000) > > +#define DEVICE_TREE 0x82f80000 > > Use fdt_addr_r env var instead? Yeah, this doesn't look right, nor genericially done for something I imagine "everyone" doing fastboot would want to get at. > > Rob > _______________________________________________ > U-Boot mailing list > U-Boot at lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: