[U-Boot] [U-Boot, v3, 3/3] rockchip: check download key before bootup

Andy Yan andy.yan at rock-chips.com
Tue Nov 21 01:02:05 UTC 2017


Hi Philipp:


On 2017年11月20日 22:51, Philipp Tomsich wrote:
>
>
> On Wed, 11 Oct 2017, Andy Yan wrote:
>
>> Enter download mode if the download key pressed.
>>
>> Signed-off-by: Andy Yan <andy.yan at rock-chips.com>
>> Acked-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
>
> Reviewed-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
>
> See below for requested changes.
>
>> ---
>>
>> Changes in v3: None
>> Changes in v2:
>> - more document
>> - move adc key detect as the default
>>
>> arch/arm/mach-rockchip/boot_mode.c | 43 
>> ++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 43 insertions(+)
>>
>> diff --git a/arch/arm/mach-rockchip/boot_mode.c 
>> b/arch/arm/mach-rockchip/boot_mode.c
>> index 4652490..bf0a410 100644
>> --- a/arch/arm/mach-rockchip/boot_mode.c
>> +++ b/arch/arm/mach-rockchip/boot_mode.c
>> @@ -5,14 +5,57 @@
>>  */
>>
>> #include <common.h>
>> +#include <adc.h>
>> #include <asm/io.h>
>> #include <asm/arch/boot_mode.h>
>>
>> +void set_back_to_bootrom_dnl_flag(void)
>> +{
>> +    writel(BOOT_BROM_DOWNLOAD, CONFIG_ROCKCHIP_BOOT_MODE_REG);
>> +}
>> +
>> +/*
>> + * detect download key status by adc, most rockchip
>> + * based boards use adc sample the download key status,
>> + * but there are also some use gpio. So it's better to
>> + * make this a weak function that can be override by
>> + * some special boards.
>> + */
>> +#define KEY_DOWN_MIN_VAL    0
>> +#define KEY_DOWN_MAX_VAL    30
>> +
>> +__weak int rockchip_dnl_key_pressed(void)
>> +{
>> +    unsigned int val;
>> +
>> +    if (adc_channel_single_shot("saradc", 1, &val)) {
>> +        printf("%s adc_channel_single_shot fail!\n", __func__);
>
> This should be a pr_debug() or pr_err().

     Okay, I will update it.
> Thanks.
>
>> +        return false;
>> +    }
>> +
>> +    if ((val >= KEY_DOWN_MIN_VAL) && (val <= KEY_DOWN_MAX_VAL))
>> +        return true;
>> +    else
>> +        return false;
>> +}
>> +
>> +void rockchip_dnl_mode_check(void)
>> +{
>> +    if (rockchip_dnl_key_pressed()) {
>> +        printf("download key pressed, entering download mode...");
>> +        set_back_to_bootrom_dnl_flag();
>> +        do_reset(NULL, 0, 0, NULL);
>> +    }
>> +}
>> +
>> int setup_boot_mode(void)
>> {
>>     void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG;
>>     int boot_mode = readl(reg);
>>
>> +    rockchip_dnl_mode_check();
>> +
>> +    boot_mode = readl(reg);
>>     debug("boot mode %x.\n", boot_mode);
>>
>>     /* Clear boot mode */
>>
>
>
>




More information about the U-Boot mailing list