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