]>
Commit | Line | Data |
---|---|---|
4dd99d14 SW |
1 | /* |
2 | * Copyright (c) 2016, NVIDIA CORPORATION. | |
3 | * | |
4 | * SPDX-License-Identifier: GPL-2.0 | |
5 | */ | |
6 | ||
7 | #include <common.h> | |
8 | #include <dm.h> | |
9 | #include <misc.h> | |
10 | #include <reset-uclass.h> | |
11 | #include <asm/arch-tegra/bpmp_abi.h> | |
12 | ||
13 | static int tegra186_reset_request(struct reset_ctl *reset_ctl) | |
14 | { | |
15 | debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, | |
16 | reset_ctl->dev, reset_ctl->id); | |
17 | ||
18 | return 0; | |
19 | } | |
20 | ||
21 | static int tegra186_reset_free(struct reset_ctl *reset_ctl) | |
22 | { | |
23 | debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, | |
24 | reset_ctl->dev, reset_ctl->id); | |
25 | ||
26 | return 0; | |
27 | } | |
28 | ||
29 | static int tegra186_reset_common(struct reset_ctl *reset_ctl, | |
30 | enum mrq_reset_commands cmd) | |
31 | { | |
32 | struct mrq_reset_request req; | |
33 | int ret; | |
34 | ||
35 | req.cmd = cmd; | |
36 | req.reset_id = reset_ctl->id; | |
37 | ||
38 | ret = misc_call(reset_ctl->dev->parent, MRQ_RESET, &req, sizeof(req), | |
39 | NULL, 0); | |
40 | if (ret < 0) | |
41 | return ret; | |
42 | ||
43 | return 0; | |
44 | } | |
45 | ||
46 | static int tegra186_reset_assert(struct reset_ctl *reset_ctl) | |
47 | { | |
48 | debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, | |
49 | reset_ctl->dev, reset_ctl->id); | |
50 | ||
51 | return tegra186_reset_common(reset_ctl, CMD_RESET_ASSERT); | |
52 | } | |
53 | ||
54 | static int tegra186_reset_deassert(struct reset_ctl *reset_ctl) | |
55 | { | |
56 | debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, | |
57 | reset_ctl->dev, reset_ctl->id); | |
58 | ||
59 | return tegra186_reset_common(reset_ctl, CMD_RESET_DEASSERT); | |
60 | } | |
61 | ||
62 | struct reset_ops tegra186_reset_ops = { | |
63 | .request = tegra186_reset_request, | |
64 | .free = tegra186_reset_free, | |
65 | .rst_assert = tegra186_reset_assert, | |
66 | .rst_deassert = tegra186_reset_deassert, | |
67 | }; | |
68 | ||
69 | static int tegra186_reset_probe(struct udevice *dev) | |
70 | { | |
71 | debug("%s(dev=%p)\n", __func__, dev); | |
72 | ||
73 | return 0; | |
74 | } | |
75 | ||
76 | U_BOOT_DRIVER(tegra186_reset) = { | |
77 | .name = "tegra186_reset", | |
78 | .id = UCLASS_RESET, | |
79 | .probe = tegra186_reset_probe, | |
80 | .ops = &tegra186_reset_ops, | |
81 | }; |