From ca2ed9f450682c5f23ee1f3affac8b6dba7fdc0b Mon Sep 17 00:00:00 2001 From: Justin TerAvest Date: Wed, 17 Jan 2018 16:36:30 -0800 Subject: sconfig: Add a new mmio resource type Add support for a mmio resource in the devicetree to allow memory-mapped IO addresses to be assigned to given values. AMD platforms perform a significant amount of configuration through these MMIO addresses, including I2C bus configuration. BUG=b:72121803 Change-Id: I5608721c22c1b229f527815b5f17fff3a080c3c8 Signed-off-by: Justin TerAvest Reviewed-on: https://review.coreboot.org/23319 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin Reviewed-by: Furquan Shaikh --- src/device/device_util.c | 8 ++++++++ src/include/device/path.h | 6 ++++++ 2 files changed, 14 insertions(+) (limited to 'src') diff --git a/src/device/device_util.c b/src/device/device_util.c index 6ccf02cc05..6bc2730143 100644 --- a/src/device/device_util.c +++ b/src/device/device_util.c @@ -257,6 +257,7 @@ u32 dev_path_encode(struct device *dev) ret |= dev->path.spi.cs; break; case DEVICE_PATH_NONE: + case DEVICE_PATH_MMIO: /* don't care */ default: break; } @@ -332,6 +333,10 @@ const char *dev_path(struct device *dev) snprintf(buffer, sizeof (buffer), "SPI: %02x", dev->path.spi.cs); break; + case DEVICE_PATH_MMIO: + snprintf(buffer, sizeof (buffer), "MMIO: %08x", + dev->path.mmio.addr); + break; default: printk(BIOS_ERR, "Unknown device path type: %d\n", dev->path.type); @@ -406,6 +411,9 @@ int path_eq(struct device_path *path1, struct device_path *path2) case DEVICE_PATH_SPI: equal = (path1->spi.cs == path2->spi.cs); break; + case DEVICE_PATH_MMIO: + equal = (path1->mmio.addr == path2->mmio.addr); + break; default: printk(BIOS_ERR, "Unknown device type: %d\n", path1->type); break; diff --git a/src/include/device/path.h b/src/include/device/path.h index 5109fdaec3..eaa9cc7d67 100644 --- a/src/include/device/path.h +++ b/src/include/device/path.h @@ -15,6 +15,7 @@ enum device_path_type { DEVICE_PATH_IOAPIC, DEVICE_PATH_GENERIC, DEVICE_PATH_SPI, + DEVICE_PATH_MMIO, /* * When adding path types to this table, please also update the @@ -36,6 +37,7 @@ enum device_path_type { "DEVICE_PATH_IOAPIC", \ "DEVICE_PATH_GENERIC", \ "DEVICE_PATH_SPI", \ + "DEVICE_PATH_MMIO", \ } struct domain_path { @@ -89,6 +91,9 @@ struct generic_path { unsigned int subid; }; +struct mmio_path { + uintptr_t addr; +}; struct device_path { enum device_path_type type; @@ -104,6 +109,7 @@ struct device_path { struct cpu_bus_path cpu_bus; struct generic_path generic; struct spi_path spi; + struct mmio_path mmio; }; }; -- cgit v1.2.3