1*116397d6SKever Yang /* 2*116397d6SKever Yang * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3*116397d6SKever Yang * 4*116397d6SKever Yang * SPDX-License-Identifier: GPL-2.0 5*116397d6SKever Yang */ 6*116397d6SKever Yang 7*116397d6SKever Yang #include <common.h> 8*116397d6SKever Yang #include <dm.h> 9*116397d6SKever Yang #include <errno.h> 10*116397d6SKever Yang #include <sysreset.h> 11*116397d6SKever Yang #include <asm/io.h> 12*116397d6SKever Yang #include <asm/arch/clock.h> 13*116397d6SKever Yang #include <asm/arch/cru_rk3328.h> 14*116397d6SKever Yang #include <asm/arch/hardware.h> 15*116397d6SKever Yang #include <linux/err.h> 16*116397d6SKever Yang 17*116397d6SKever Yang int rockchip_sysreset_request(struct udevice *dev, enum sysreset_t type) 18*116397d6SKever Yang { 19*116397d6SKever Yang struct sysreset_reg *offset = dev_get_priv(dev); 20*116397d6SKever Yang unsigned long cru_base = (unsigned long)rockchip_get_cru(); 21*116397d6SKever Yang 22*116397d6SKever Yang if (IS_ERR_VALUE(cru_base)) 23*116397d6SKever Yang return (int)cru_base; 24*116397d6SKever Yang 25*116397d6SKever Yang switch (type) { 26*116397d6SKever Yang case SYSRESET_WARM: 27*116397d6SKever Yang writel(0xeca8, cru_base + offset->glb_srst_snd_value); 28*116397d6SKever Yang break; 29*116397d6SKever Yang case SYSRESET_COLD: 30*116397d6SKever Yang writel(0xfdb9, cru_base + offset->glb_srst_fst_value); 31*116397d6SKever Yang break; 32*116397d6SKever Yang default: 33*116397d6SKever Yang return -EPROTONOSUPPORT; 34*116397d6SKever Yang } 35*116397d6SKever Yang 36*116397d6SKever Yang return -EINPROGRESS; 37*116397d6SKever Yang } 38*116397d6SKever Yang 39*116397d6SKever Yang static struct sysreset_ops rockchip_sysreset = { 40*116397d6SKever Yang .request = rockchip_sysreset_request, 41*116397d6SKever Yang }; 42*116397d6SKever Yang 43*116397d6SKever Yang U_BOOT_DRIVER(sysreset_rockchip) = { 44*116397d6SKever Yang .name = "rockchip_sysreset", 45*116397d6SKever Yang .id = UCLASS_SYSRESET, 46*116397d6SKever Yang .ops = &rockchip_sysreset, 47*116397d6SKever Yang }; 48