"Das U-Boot" Source Tree
at master 57 lines 1.0 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * (C) Copyright 2016 Google, Inc 4 */ 5 6#include <dm.h> 7#include <errno.h> 8#include <log.h> 9#include <sysreset.h> 10#include <wdt.h> 11#include <asm/io.h> 12#include <asm/arch/wdt.h> 13#include <linux/err.h> 14#include <hang.h> 15 16static int ast_sysreset_request(struct udevice *dev, enum sysreset_t type) 17{ 18 struct udevice *wdt; 19 u32 reset_mode; 20 int ret = uclass_first_device_err(UCLASS_WDT, &wdt); 21 22 if (ret) 23 return ret; 24 25 switch (type) { 26 case SYSRESET_WARM: 27 reset_mode = WDT_CTRL_RESET_CPU; 28 break; 29 case SYSRESET_COLD: 30 reset_mode = WDT_CTRL_RESET_CHIP; 31 break; 32 default: 33 return -EPROTONOSUPPORT; 34 } 35 36#if !defined(CONFIG_XPL_BUILD) 37 ret = wdt_expire_now(wdt, reset_mode); 38 if (ret) { 39 debug("Sysreset failed: %d", ret); 40 return ret; 41 } 42#else 43 hang(); 44#endif 45 46 return -EINPROGRESS; 47} 48 49static struct sysreset_ops ast_sysreset = { 50 .request = ast_sysreset_request, 51}; 52 53U_BOOT_DRIVER(sysreset_ast) = { 54 .name = "ast_sysreset", 55 .id = UCLASS_SYSRESET, 56 .ops = &ast_sysreset, 57};