1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright 2018 Google LLC
4 */
5
6 #include <common.h>
7 #include <dm.h>
8 #include <pch.h>
9
10 struct sandbox_pch_priv {
11 bool protect;
12 };
13
sandbox_get_pch_spi_protect(struct udevice * dev)14 int sandbox_get_pch_spi_protect(struct udevice *dev)
15 {
16 struct sandbox_pch_priv *priv = dev_get_priv(dev);
17
18 return priv->protect;
19 }
20
sandbox_pch_get_spi_base(struct udevice * dev,ulong * sbasep)21 static int sandbox_pch_get_spi_base(struct udevice *dev, ulong *sbasep)
22 {
23 *sbasep = 0x10;
24
25 return 0;
26 }
27
sandbox_pch_set_spi_protect(struct udevice * dev,bool protect)28 static int sandbox_pch_set_spi_protect(struct udevice *dev, bool protect)
29 {
30 struct sandbox_pch_priv *priv = dev_get_priv(dev);
31
32 priv->protect = protect;
33
34 return 0;
35 }
36
sandbox_pch_get_gpio_base(struct udevice * dev,u32 * gbasep)37 static int sandbox_pch_get_gpio_base(struct udevice *dev, u32 *gbasep)
38 {
39 *gbasep = 0x20;
40
41 return 0;
42 }
43
sandbox_pch_get_io_base(struct udevice * dev,u32 * iobasep)44 static int sandbox_pch_get_io_base(struct udevice *dev, u32 *iobasep)
45 {
46 *iobasep = 0x30;
47
48 return 0;
49 }
50
sandbox_pch_ioctl(struct udevice * dev,enum pch_req_t req,void * data,int size)51 int sandbox_pch_ioctl(struct udevice *dev, enum pch_req_t req, void *data,
52 int size)
53 {
54 switch (req) {
55 case PCH_REQ_TEST1:
56 return -ENOSYS;
57 case PCH_REQ_TEST2:
58 return *(char *)data;
59 case PCH_REQ_TEST3:
60 *(char *)data = 'x';
61 return 1;
62 default:
63 return -ENOSYS;
64 }
65 }
66
67 static const struct pch_ops sandbox_pch_ops = {
68 .get_spi_base = sandbox_pch_get_spi_base,
69 .set_spi_protect = sandbox_pch_set_spi_protect,
70 .get_gpio_base = sandbox_pch_get_gpio_base,
71 .get_io_base = sandbox_pch_get_io_base,
72 .ioctl = sandbox_pch_ioctl,
73 };
74
75 static const struct udevice_id sandbox_pch_ids[] = {
76 { .compatible = "sandbox,pch" },
77 { }
78 };
79
80 U_BOOT_DRIVER(sandbox_pch_drv) = {
81 .name = "sandbox-pch",
82 .id = UCLASS_PCH,
83 .of_match = sandbox_pch_ids,
84 .ops = &sandbox_pch_ops,
85 .priv_auto_alloc_size = sizeof(struct sandbox_pch_priv),
86 };
87