From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754288AbbIIBJ0 (ORCPT ); Tue, 8 Sep 2015 21:09:26 -0400 Received: from regular1.263xmail.com ([211.150.99.133]:45557 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752642AbbIIBJT (ORCPT ); Tue, 8 Sep 2015 21:09:19 -0400 X-263anti-spam: KSV:0;BIG:0;ABS:1;DNS:0;ATT:0;SPF:S; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 1 X-SKE-CHECKED: 1 X-ADDR-CHECKED: 0 X-RL-SENDER: andy.yan@rock-chips.com X-FST-TO: arnd@arndb.de X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: andy.yan@rock-chips.com X-UNIQUE-TAG: X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Andy Yan Subject: Re: set rockchip-specific uboot bootmode flags on reboot To: =?UTF-8?Q?Heiko_St=c3=bcbner?= References: <1441716187-29446-1-git-send-email-andy.yan@rock-chips.com> <9364768.6AeuYh3EEP@diego> Cc: linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux@arm.linux.org.uk, olof@lixom.net, khilman@linaro.org, Simon Glass , arnd@arndb.de Message-ID: <55EF86A7.10306@rock-chips.com> Date: Wed, 9 Sep 2015 09:08:55 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <9364768.6AeuYh3EEP@diego> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Heiko: On 2015年09月09日 06:46, Heiko Stübner wrote: > Hi Andy, > > Am Dienstag, 8. September 2015, 20:43:07 schrieb Andy Yan: >> rockchip platform have a protocol to pass the the kernel >> reboot mode to bootloader by some special registers when >> system reboot.By this way the bootloader can take different >> action according to the different kernel reboot mode, for >> example, command "reboot loader" will reboot the board to >> rockusb mode, this is a very convenient way to get the board >> to download mode. >> >> Signed-off-by: Andy Yan > [...] > >> @@ -0,0 +1,22 @@ >> +#ifndef __MACH_ROCKCHIP_LOADER_H >> +#define __MACH_ROCKCHIP_LOADER_H >> + >> +/*high 24 bits is tag, low 8 bits is type*/ >> +#define SYS_LOADER_REBOOT_FLAG 0x5242C300 >> + >> +enum { >> + BOOT_NORMAL = 0, /* normal boot */ >> + BOOT_LOADER, /* enter loader rockusb mode */ >> + BOOT_MASKROM, /* enter maskrom rockusb mode (not support now) */ >> + BOOT_RECOVER, /* enter recover */ >> + BOOT_NORECOVER, /* do not enter recover */ >> + BOOT_SECONDOS, /* boot second OS (not support now)*/ >> + BOOT_WIPEDATA, /* enter recover and wipe data. */ >> + BOOT_WIPEALL, /* enter recover and wipe all data. */ >> + BOOT_CHECKIMG, /* check firmware img with backup part*/ >> + BOOT_FASTBOOT, /* enter fast boot mode */ >> + BOOT_SECUREBOOT_DISABLE, >> + BOOT_CHARGING, /* enter charge mode */ >> + BOOT_MAX /* MAX VALID BOOT TYPE.*/ >> +}; >> +#endif > These flags rely on code in the bootloader to actually handle the target > action. Nowadays this is uboot, but still a rockchip-specific fork. And we're > actively moving away from that, with the recent rk3288 addition to mainline > uboot.   Sorry, I don't know about this action before, but this is really a very convenient way   to get machine enter download mode, it seems that many Android devices   have this function to support commands like "reboot recovery", "reboot fastboot".   Why should we moving away from that? > So unless you convince uboot people that the _underlying special > functionality_ behind these flags should be part of uboot, I don't think this > is going to fly. > > > In a way this is similar to gpu kernel code talking to proprietary userspace > libs - these are also not eligible for the kernel. (meaning stuff like the > mali kernel driver not being allowed). > > [...] > >> +static int rockchip_reboot_notify(struct notifier_block *this, >> + unsigned long mode, void *cmd) >> +{ >> + u32 flag; >> + >> + rockchip_get_reboot_flag(cmd, &flag); >> + regmap_write(regmap, flag_reg, flag); >> + >> + return NOTIFY_DONE; >> +} >> + >> +static struct notifier_block rockchip_reboot_handler = { >> + .notifier_call = rockchip_reboot_notify, >> + .priority = 150, >> +}; > the restart handlers are meant to really only restart the system, not to > execute some actions before the restart happens. > > Seehttps://lkml.org/lkml/2015/6/3/707 for a similar case. > So maybe I can use reboot notifier here? Thank you. > Heiko > > >