1*4c99ccfeSBin Meng // SPDX-License-Identifier: GPL-2.0+
2*4c99ccfeSBin Meng /*
3*4c99ccfeSBin Meng * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
4*4c99ccfeSBin Meng *
5*4c99ccfeSBin Meng * Reset driver for tangier processor
6*4c99ccfeSBin Meng */
7*4c99ccfeSBin Meng
8*4c99ccfeSBin Meng #include <common.h>
9*4c99ccfeSBin Meng #include <dm.h>
10*4c99ccfeSBin Meng #include <sysreset.h>
11*4c99ccfeSBin Meng #include <asm/scu.h>
12*4c99ccfeSBin Meng
tangier_sysreset_request(struct udevice * dev,enum sysreset_t type)13*4c99ccfeSBin Meng static int tangier_sysreset_request(struct udevice *dev, enum sysreset_t type)
14*4c99ccfeSBin Meng {
15*4c99ccfeSBin Meng int value;
16*4c99ccfeSBin Meng
17*4c99ccfeSBin Meng switch (type) {
18*4c99ccfeSBin Meng case SYSRESET_WARM:
19*4c99ccfeSBin Meng value = IPCMSG_WARM_RESET;
20*4c99ccfeSBin Meng break;
21*4c99ccfeSBin Meng case SYSRESET_COLD:
22*4c99ccfeSBin Meng value = IPCMSG_COLD_RESET;
23*4c99ccfeSBin Meng break;
24*4c99ccfeSBin Meng default:
25*4c99ccfeSBin Meng return -ENOSYS;
26*4c99ccfeSBin Meng }
27*4c99ccfeSBin Meng
28*4c99ccfeSBin Meng scu_ipc_simple_command(value, 0);
29*4c99ccfeSBin Meng
30*4c99ccfeSBin Meng return -EINPROGRESS;
31*4c99ccfeSBin Meng }
32*4c99ccfeSBin Meng
33*4c99ccfeSBin Meng static const struct udevice_id tangier_sysreset_ids[] = {
34*4c99ccfeSBin Meng { .compatible = "intel,reset-tangier" },
35*4c99ccfeSBin Meng { }
36*4c99ccfeSBin Meng };
37*4c99ccfeSBin Meng
38*4c99ccfeSBin Meng static struct sysreset_ops tangier_sysreset_ops = {
39*4c99ccfeSBin Meng .request = tangier_sysreset_request,
40*4c99ccfeSBin Meng };
41*4c99ccfeSBin Meng
42*4c99ccfeSBin Meng U_BOOT_DRIVER(tangier_sysreset) = {
43*4c99ccfeSBin Meng .name = "tangier-sysreset",
44*4c99ccfeSBin Meng .id = UCLASS_SYSRESET,
45*4c99ccfeSBin Meng .of_match = tangier_sysreset_ids,
46*4c99ccfeSBin Meng .ops = &tangier_sysreset_ops,
47*4c99ccfeSBin Meng };
48