xref: /openbmc/u-boot/drivers/pch/sandbox_pch.c (revision c507d306)
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