sandbox: pch: Add a test for the PCH uclass
authorSimon Glass <sjg@chromium.org>
Sun, 17 Feb 2019 03:24:50 +0000 (20:24 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 20 Feb 2019 07:26:36 +0000 (15:26 +0800)
This uclass currently has no tests. Add a sandbox driver and some simple
tests to provide basic coverage.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
[bmeng: Use "sandbox,pch" for the compatible string, for consistency]
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
arch/sandbox/dts/test.dts
arch/sandbox/include/asm/test.h
drivers/pch/Makefile
drivers/pch/sandbox_pch.c [new file with mode: 0644]
test/dm/Makefile
test/dm/pch.c [new file with mode: 0644]

index 1d011ded7cc0ec3bb79c8a17a7d81de9db3cd824..f014c561bc312caa676d7fdb32516c413be5515c 100644 (file)
                compatible = "sandbox,mmc";
        };
 
+       pch {
+               compatible = "sandbox,pch";
+       };
+
        pci0: pci-controller0 {
                compatible = "sandbox,pci";
                device_type = "pci";
index 74f96188220ee85679e617922500468670b7211e..ce00ba51e476b4e6376136e7a131a195c0a3057f 100644 (file)
@@ -161,4 +161,12 @@ int sandbox_get_setup_called(struct udevice *dev);
  */
 int sandbox_get_sound_sum(struct udevice *dev);
 
+/**
+ * sandbox_get_pch_spi_protect() - Get the PCI SPI protection status
+ *
+ * @dev: Device to check
+ * @return 0 if not protected, 1 if protected
+ */
+int sandbox_get_pch_spi_protect(struct udevice *dev);
+
 #endif
index 696cdffedb627e124ac5a2fc2303a1f47f6d7411..8ea6b7852acbcf6f5592faa08af561bedd874300 100644 (file)
@@ -3,3 +3,4 @@
 obj-y += pch-uclass.o
 obj-y += pch7.o
 obj-y += pch9.o
+obj-$(CONFIG_SANDBOX) += sandbox_pch.o
diff --git a/drivers/pch/sandbox_pch.c b/drivers/pch/sandbox_pch.c
new file mode 100644 (file)
index 0000000..81f8156
--- /dev/null
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <pch.h>
+
+struct sandbox_pch_priv {
+       bool protect;
+};
+
+int sandbox_get_pch_spi_protect(struct udevice *dev)
+{
+       struct sandbox_pch_priv *priv = dev_get_priv(dev);
+
+       return priv->protect;
+}
+
+static int sandbox_pch_get_spi_base(struct udevice *dev, ulong *sbasep)
+{
+       *sbasep = 0x10;
+
+       return 0;
+}
+
+static int sandbox_pch_set_spi_protect(struct udevice *dev, bool protect)
+{
+       struct sandbox_pch_priv *priv = dev_get_priv(dev);
+
+       priv->protect = protect;
+
+       return 0;
+}
+
+static int sandbox_pch_get_gpio_base(struct udevice *dev, u32 *gbasep)
+{
+       *gbasep = 0x20;
+
+       return 0;
+}
+
+static int sandbox_pch_get_io_base(struct udevice *dev, u32 *iobasep)
+{
+       *iobasep = 0x30;
+
+       return 0;
+}
+
+static const struct pch_ops sandbox_pch_ops = {
+       .get_spi_base   = sandbox_pch_get_spi_base,
+       .set_spi_protect = sandbox_pch_set_spi_protect,
+       .get_gpio_base  = sandbox_pch_get_gpio_base,
+       .get_io_base = sandbox_pch_get_io_base,
+};
+
+static const struct udevice_id sandbox_pch_ids[] = {
+       { .compatible = "sandbox,pch" },
+       { }
+};
+
+U_BOOT_DRIVER(sandbox_pch_drv) = {
+       .name           = "sandbox-pch",
+       .id             = UCLASS_PCH,
+       .of_match       = sandbox_pch_ids,
+       .ops            = &sandbox_pch_ops,
+       .priv_auto_alloc_size   = sizeof(struct sandbox_pch_priv),
+};
index 1b089960cbbc8bfb589286423cee36e585934be4..49857c50929816773a4487f1e186108680064c0d 100644 (file)
@@ -30,6 +30,7 @@ obj-y += ofnode.o
 obj-$(CONFIG_OSD) += osd.o
 obj-$(CONFIG_DM_VIDEO) += panel.o
 obj-$(CONFIG_DM_PCI) += pci.o
+obj-$(CONFIG_PCH) += pch.o
 obj-$(CONFIG_PHY) += phy.o
 obj-$(CONFIG_POWER_DOMAIN) += power-domain.o
 obj-$(CONFIG_DM_PWM) += pwm.o
diff --git a/test/dm/pch.c b/test/dm/pch.c
new file mode 100644 (file)
index 0000000..f184445
--- /dev/null
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <pch.h>
+#include <asm/test.h>
+#include <dm/test.h>
+#include <test/ut.h>
+
+/* Test that sandbox PCH works correctly */
+static int dm_test_pch_base(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       u32 gbase, iobase;
+       ulong sbase;
+
+       ut_assertok(uclass_first_device_err(UCLASS_PCH, &dev));
+       ut_assertok(pch_get_spi_base(dev, &sbase));
+       ut_asserteq(0x10, sbase);
+
+       ut_asserteq(0, sandbox_get_pch_spi_protect(dev));
+       ut_assertok(pch_set_spi_protect(dev, true));
+       ut_asserteq(1, sandbox_get_pch_spi_protect(dev));
+
+       ut_assertok(pch_get_gpio_base(dev, &gbase));
+       ut_asserteq(0x20, gbase);
+
+       ut_assertok(pch_get_io_base(dev, &iobase));
+       ut_asserteq(0x30, iobase);
+
+       return 0;
+}
+DM_TEST(dm_test_pch_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);