summaryrefslogtreecommitdiff
path: root/src/soc/intel/common/block
diff options
context:
space:
mode:
authorTim Wawrzynczak <twawrzynczak@chromium.org>2022-02-08 12:50:46 -0700
committerFelix Held <felix-coreboot@felixheld.de>2022-02-11 14:09:23 +0000
commit7a91a10c615b50be6eb634c1f383e47c1fa2321d (patch)
treec0c5060ba5057ef1feb95f0f7c3b1bbd4ab54ca9 /src/soc/intel/common/block
parenteb1891a9a86e79e8956bfe353fc47058f812059e (diff)
src/soc/intel/common/block/i2c: Use early BAR in ENV_PAYLOAD_LOADER
There may be occasions where an I2C device was initialized during "early initialization," but when used again in ENV_PAYLOAD_LOADER before resource allocation happens, it would currently return that it has not been assigned a BAR. However, because of the early BAR assigned to it, it should still be valid to use that until proper resources have been assigned, therefore return any BAR that may have been assigned to the device during early initialization. Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Change-Id: I8ab599199592a72ae96cd9f95accfaa0d84e66b6 Reviewed-on: https://review.coreboot.org/c/coreboot/+/61719 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Subrata Banik <subratabanik@google.com>
Diffstat (limited to 'src/soc/intel/common/block')
-rw-r--r--src/soc/intel/common/block/i2c/i2c.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/soc/intel/common/block/i2c/i2c.c b/src/soc/intel/common/block/i2c/i2c.c
index 7fdf8187ff..acfb053d6a 100644
--- a/src/soc/intel/common/block/i2c/i2c.c
+++ b/src/soc/intel/common/block/i2c/i2c.c
@@ -127,7 +127,12 @@ uintptr_t dw_i2c_base_address(unsigned int bus)
if (res)
return res->base;
- return (uintptr_t)NULL;
+ /* No resource found yet, it's possible this is running in the
+ * PAYLOAD_LOADER stage before resources have been assigned yet,
+ * therefore, any early init BAR should still be valid. */
+
+ /* Read the first base address for this device */
+ return (uintptr_t)ALIGN_DOWN(pci_read_config32(dev, PCI_BASE_ADDRESS_0), 16);
}
/*