2 * Copyright (c) 2016, NVIDIA CORPORATION.
4 * SPDX-License-Identifier: GPL-2.0
10 #include <reset-uclass.h>
11 #include <asm/arch-tegra/bpmp_abi.h>
13 static int tegra186_reset_request(struct reset_ctl
*reset_ctl
)
15 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__
, reset_ctl
,
16 reset_ctl
->dev
, reset_ctl
->id
);
21 static int tegra186_reset_free(struct reset_ctl
*reset_ctl
)
23 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__
, reset_ctl
,
24 reset_ctl
->dev
, reset_ctl
->id
);
29 static int tegra186_reset_common(struct reset_ctl
*reset_ctl
,
30 enum mrq_reset_commands cmd
)
32 struct mrq_reset_request req
;
36 req
.reset_id
= reset_ctl
->id
;
38 ret
= misc_call(reset_ctl
->dev
->parent
, MRQ_RESET
, &req
, sizeof(req
),
46 static int tegra186_reset_assert(struct reset_ctl
*reset_ctl
)
48 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__
, reset_ctl
,
49 reset_ctl
->dev
, reset_ctl
->id
);
51 return tegra186_reset_common(reset_ctl
, CMD_RESET_ASSERT
);
54 static int tegra186_reset_deassert(struct reset_ctl
*reset_ctl
)
56 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__
, reset_ctl
,
57 reset_ctl
->dev
, reset_ctl
->id
);
59 return tegra186_reset_common(reset_ctl
, CMD_RESET_DEASSERT
);
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
,
69 static int tegra186_reset_probe(struct udevice
*dev
)
71 debug("%s(dev=%p)\n", __func__
, dev
);
76 U_BOOT_DRIVER(tegra186_reset
) = {
77 .name
= "tegra186_reset",
79 .probe
= tegra186_reset_probe
,
80 .ops
= &tegra186_reset_ops
,