Skip to content

Commit

Permalink
sandbox: pch: Add a test for the PCH uclass
Browse files Browse the repository at this point in the history
This uclass currently has no tests. Add a sandbox driver and some simple
tests to provide basic coverage.

Signed-off-by: Simon Glass <[email protected]>
Reviewed-by: Bin Meng <[email protected]>
[bmeng: Use "sandbox,pch" for the compatible string, for consistency]
Signed-off-by: Bin Meng <[email protected]>
  • Loading branch information
sjg20 authored and lbmeng committed Feb 20, 2019
1 parent c882163 commit b45c833
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 0 deletions.
4 changes: 4 additions & 0 deletions arch/sandbox/dts/test.dts
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,10 @@
compatible = "sandbox,mmc";
};

pch {
compatible = "sandbox,pch";
};

pci0: pci-controller0 {
compatible = "sandbox,pci";
device_type = "pci";
Expand Down
8 changes: 8 additions & 0 deletions arch/sandbox/include/asm/test.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
1 change: 1 addition & 0 deletions drivers/pch/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
obj-y += pch-uclass.o
obj-y += pch7.o
obj-y += pch9.o
obj-$(CONFIG_SANDBOX) += sandbox_pch.o
69 changes: 69 additions & 0 deletions drivers/pch/sandbox_pch.c
Original file line number Diff line number Diff line change
@@ -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),
};
1 change: 1 addition & 0 deletions test/dm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
36 changes: 36 additions & 0 deletions test/dm/pch.c
Original file line number Diff line number Diff line change
@@ -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);

0 comments on commit b45c833

Please sign in to comment.