xref: /rk3399_rockchip-uboot/drivers/sysreset/sysreset_snapdragon.c (revision b25732c22beccb5a2ce3ec4174ea084ba0e176ab)
1*b25732c2SMax Filippov /*
2*b25732c2SMax Filippov  * Qualcomm APQ8016 reset controller driver
3*b25732c2SMax Filippov  *
4*b25732c2SMax Filippov  * (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
5*b25732c2SMax Filippov  *
6*b25732c2SMax Filippov  * SPDX-License-Identifier:	GPL-2.0+
7*b25732c2SMax Filippov  */
8*b25732c2SMax Filippov 
9*b25732c2SMax Filippov #include <common.h>
10*b25732c2SMax Filippov #include <dm.h>
11*b25732c2SMax Filippov #include <errno.h>
12*b25732c2SMax Filippov #include <sysreset.h>
13*b25732c2SMax Filippov #include <asm/io.h>
14*b25732c2SMax Filippov 
15*b25732c2SMax Filippov DECLARE_GLOBAL_DATA_PTR;
16*b25732c2SMax Filippov 
17*b25732c2SMax Filippov static int msm_sysreset_request(struct udevice *dev, enum sysreset_t type)
18*b25732c2SMax Filippov {
19*b25732c2SMax Filippov 	phys_addr_t addr = dev_get_addr(dev);
20*b25732c2SMax Filippov 	if (!addr)
21*b25732c2SMax Filippov 		return -EINVAL;
22*b25732c2SMax Filippov 	writel(0, addr);
23*b25732c2SMax Filippov 	return -EINPROGRESS;
24*b25732c2SMax Filippov }
25*b25732c2SMax Filippov 
26*b25732c2SMax Filippov static struct sysreset_ops msm_sysreset_ops = {
27*b25732c2SMax Filippov 	.request	= msm_sysreset_request,
28*b25732c2SMax Filippov };
29*b25732c2SMax Filippov 
30*b25732c2SMax Filippov static const struct udevice_id msm_sysreset_ids[] = {
31*b25732c2SMax Filippov 	{ .compatible = "qcom,pshold" },
32*b25732c2SMax Filippov 	{ }
33*b25732c2SMax Filippov };
34*b25732c2SMax Filippov 
35*b25732c2SMax Filippov U_BOOT_DRIVER(msm_reset) = {
36*b25732c2SMax Filippov 	.name		= "msm_sysreset",
37*b25732c2SMax Filippov 	.id		= UCLASS_SYSRESET,
38*b25732c2SMax Filippov 	.of_match	= msm_sysreset_ids,
39*b25732c2SMax Filippov 	.ops		= &msm_sysreset_ops,
40*b25732c2SMax Filippov };
41