xref: /rk3399_rockchip-uboot/drivers/sysreset/sysreset_xtfpga.c (revision 7e270ec3af02d2358f9a454ba0d0bb39f07d14b6)
1*7e270ec3SChris Zankel /*
2*7e270ec3SChris Zankel  * Cadence Tensilica xtfpga system reset driver.
3*7e270ec3SChris Zankel  *
4*7e270ec3SChris Zankel  * (C) Copyright 2016 Cadence Design Systems Inc.
5*7e270ec3SChris Zankel  *
6*7e270ec3SChris Zankel  * SPDX-License-Identifier:     GPL-2.0+
7*7e270ec3SChris Zankel  */
8*7e270ec3SChris Zankel 
9*7e270ec3SChris Zankel #include <common.h>
10*7e270ec3SChris Zankel #include <dm.h>
11*7e270ec3SChris Zankel #include <errno.h>
12*7e270ec3SChris Zankel #include <sysreset.h>
13*7e270ec3SChris Zankel #include <asm/io.h>
14*7e270ec3SChris Zankel 
xtfpga_reset_request(struct udevice * dev,enum sysreset_t type)15*7e270ec3SChris Zankel static int xtfpga_reset_request(struct udevice *dev, enum sysreset_t type)
16*7e270ec3SChris Zankel {
17*7e270ec3SChris Zankel 	switch (type) {
18*7e270ec3SChris Zankel 	case SYSRESET_COLD:
19*7e270ec3SChris Zankel 		writel(CONFIG_SYS_FPGAREG_RESET_CODE,
20*7e270ec3SChris Zankel 		       CONFIG_SYS_FPGAREG_RESET);
21*7e270ec3SChris Zankel 		break;
22*7e270ec3SChris Zankel 	default:
23*7e270ec3SChris Zankel 		return -EPROTONOSUPPORT;
24*7e270ec3SChris Zankel 	}
25*7e270ec3SChris Zankel 
26*7e270ec3SChris Zankel 	return -EINPROGRESS;
27*7e270ec3SChris Zankel }
28*7e270ec3SChris Zankel 
29*7e270ec3SChris Zankel static struct sysreset_ops xtfpga_sysreset_ops = {
30*7e270ec3SChris Zankel 	.request	= xtfpga_reset_request,
31*7e270ec3SChris Zankel };
32*7e270ec3SChris Zankel 
33*7e270ec3SChris Zankel U_BOOT_DRIVER(xtfpga_sysreset) = {
34*7e270ec3SChris Zankel 	.name	= "xtfpga_sysreset",
35*7e270ec3SChris Zankel 	.id	= UCLASS_SYSRESET,
36*7e270ec3SChris Zankel 	.ops	= &xtfpga_sysreset_ops,
37*7e270ec3SChris Zankel };
38