From patchwork Mon Jul 20 13:17:10 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Kocialkowski X-Patchwork-Id: 497714 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 6FF5E140D26 for ; Mon, 20 Jul 2015 23:18:15 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 649A44B65F; Mon, 20 Jul 2015 15:18:04 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wx8tCjhr0ISi; Mon, 20 Jul 2015 15:18:04 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A50974B64D; Mon, 20 Jul 2015 15:18:00 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 889714B61D for ; Mon, 20 Jul 2015 15:17:57 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UBcP6_fcYtFu for ; Mon, 20 Jul 2015 15:17:57 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from gagarine.paulk.fr (gagarine.paulk.fr [109.190.93.129]) by theia.denx.de (Postfix) with ESMTPS id 2651A4B691 for ; Mon, 20 Jul 2015 15:17:46 +0200 (CEST) Received: by gagarine.paulk.fr (Postfix, from userid 65534) id 1FD2F200B8; Mon, 20 Jul 2015 15:17:46 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on gagarine.paulk.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable autolearn_force=no version=3.4.0 Received: from armstrong.paulk.fr (armstrong.paulk.fr [82.233.88.171]) by gagarine.paulk.fr (Postfix) with ESMTPS id AE19F1FE82; Mon, 20 Jul 2015 15:17:23 +0200 (CEST) Received: from localhost.localdomain (aldrin [192.168.0.128]) by armstrong.paulk.fr (Postfix) with ESMTP id 1AE2337865; Mon, 20 Jul 2015 15:17:22 +0200 (CEST) From: Paul Kocialkowski To: u-boot@lists.denx.de Date: Mon, 20 Jul 2015 15:17:10 +0200 Message-Id: <1437398238-27912-5-git-send-email-contact@paulk.fr> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437398238-27912-1-git-send-email-contact@paulk.fr> References: <1437398238-27912-1-git-send-email-contact@paulk.fr> Cc: Tom Rini , Tom Rix , Przemyslaw Marczak Subject: [U-Boot] [PATCH 04/12] omap3: Reboot mode support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Reboot mode is written in scratchpad memory before reboot in the form of a single char, that is the first letter of the reboot mode string as passed to the reboot function. This mechanism is supported on OMAP3 both my the upstream kernel and by various TI kernels. It is up to each board to make use of this mechanism or not. Signed-off-by: Paul Kocialkowski Reviewed-by: Tom Rini --- arch/arm/cpu/armv7/omap3/boot.c | 38 ++++++++++++++++++++++++++++++++++ arch/arm/include/asm/arch-omap3/omap.h | 7 +++++++ 2 files changed, 45 insertions(+) diff --git a/arch/arm/cpu/armv7/omap3/boot.c b/arch/arm/cpu/armv7/omap3/boot.c index 66576b2..44d7c30 100644 --- a/arch/arm/cpu/armv7/omap3/boot.c +++ b/arch/arm/cpu/armv7/omap3/boot.c @@ -56,3 +56,41 @@ u32 omap_sys_boot_device(void) return boot_devices[sys_boot]; } + +char omap_reboot_mode(void) +{ + u32 reboot_mode; + char c; + + reboot_mode = readl((u32 *)(OMAP34XX_SCRATCHPAD + 4)); + + c = (reboot_mode >> 24) & 0xff; + if (c != 'B') + return -1; + + c = (reboot_mode >> 16) & 0xff; + if (c != 'M') + return -1; + + c = reboot_mode & 0xff; + + return c; +} + +int omap_reboot_mode_clear(void) +{ + writel(0, (u32 *)(OMAP34XX_SCRATCHPAD + 4)); + + return 0; +} + +int omap_reboot_mode_store(char c) +{ + u32 reboot_mode; + + reboot_mode = 'B' << 24 | 'M' << 16 | c; + + writel(reboot_mode, (u32 *)(OMAP34XX_SCRATCHPAD + 4)); + + return 0; +} diff --git a/arch/arm/include/asm/arch-omap3/omap.h b/arch/arm/include/asm/arch-omap3/omap.h index 537d13b..2c94a81 100644 --- a/arch/arm/include/asm/arch-omap3/omap.h +++ b/arch/arm/include/asm/arch-omap3/omap.h @@ -51,6 +51,9 @@ struct control_prog_io { /* Bit definition for CONTROL_PROG_IO1 */ #define PRG_I2C2_PULLUPRESX 0x00000001 +/* Scratchpad memory */ +#define OMAP34XX_SCRATCHPAD (OMAP34XX_CTRL_BASE + 0x910) + /* UART */ #define OMAP34XX_UART1 (OMAP34XX_L4_IO_BASE + 0x6a000) #define OMAP34XX_UART2 (OMAP34XX_L4_IO_BASE + 0x6c000) @@ -256,6 +259,10 @@ struct omap_boot_parameters { unsigned char ch_flags; unsigned int boot_device_descriptor; }; + +char omap_reboot_mode(void); +int omap_reboot_mode_clear(void); +int omap_reboot_mode_store(char c); #endif #endif