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