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