blob: c302da99756221bafc232a7666c60cd9205fcef7 [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2019 BayLibre SAS
*/
#include <common.h>
#include <dm.h>
#include <mmc.h>
#include "../../../drivers/watchdog/mtk_wdt.h"
#define WDT_DRIVER_NAME "mtk_wdt"
#define REBOOT_BOOTLOADER_VALUE (1)
#define REBOOT_BOOTLOADER_MASK (1)
#define REBOOT_BOOTLOADER_SHIFT (2)
int fastboot_set_reboot_flag(void) {
struct udevice *dev;
struct uclass *uc;
int ret = -ENOSYS;
ret = uclass_get(UCLASS_WDT, &uc);
if (ret)
return -ENOSYS;
uclass_foreach_dev(dev, uc) {
if (strncmp(dev->driver->name, WDT_DRIVER_NAME, strlen(WDT_DRIVER_NAME)) == 0) {
mtk_wdt_set_nonrst2(dev, REBOOT_BOOTLOADER_MASK << REBOOT_BOOTLOADER_SHIFT,
REBOOT_BOOTLOADER_VALUE << REBOOT_BOOTLOADER_SHIFT);
return 0;
}
}
return -ENOSYS;
}
int misc_init_r(void) {
int ret;
struct udevice *dev;
struct uclass *uc;
struct mmc *mmc;
int reg_val;
int mmc_dev = 0;
ret = uclass_get(UCLASS_WDT, &uc);
if (ret)
return -ENOSYS;
uclass_foreach_dev(dev, uc) {
if (strncmp(dev->driver->name, WDT_DRIVER_NAME, strlen(WDT_DRIVER_NAME)) == 0) {
reg_val = mtk_wdt_get_nonrst2(dev);
if (reg_val & (REBOOT_BOOTLOADER_VALUE << REBOOT_BOOTLOADER_SHIFT)) {
env_set("force_fastboot", "1");
mtk_wdt_set_nonrst2(dev, REBOOT_BOOTLOADER_MASK << REBOOT_BOOTLOADER_SHIFT, 0);
}
}
}
env_set("serial#", "0123456789ABCDEF");
mmc = find_mmc_device(mmc_dev);
if (mmc) {
if (!mmc_init(mmc) && mmc->capacity >= 7000000000) {
printf("EVT2 detected\n");
env_set("evt2_board", "1");
}
}
return 0;
}
int board_init(void)
{
struct udevice *dev;
uclass_first_device_err(UCLASS_USB_GADGET_GENERIC, &dev);
#ifdef CONFIG_USB_ETHER
usb_ether_init();
#endif
return 0;
}