xref: /openbmc/u-boot/arch/x86/cpu/tangier/sysreset.c (revision 1d6edcbf)
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