diff options
author | Werner Zeh <werner.zeh@siemens.com> | 2018-04-13 09:06:46 +0200 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2018-04-16 02:25:06 +0000 |
commit | cee8532ce38a03528a6c9b7a4875d33840ba362e (patch) | |
tree | 589cdb878ed7bd7e73f64ab5b7286d513e3f7963 /src/soc/intel | |
parent | 0b643d24994588480a3ca77ecacbb7ce66402195 (diff) |
intel/fsp_broadwell_de: Remove buggy code for SMBus clock gating
The pch_smbus_init() function contains code to enable clock gating for
the SMBus controller. Unfortunately this code is buggy and leads to a
hanging system with the latest microcode version.
The hang occurs as follows:
The clock gate register is mapped into RCBA space. After reading the
RCBA address from the LPC device config space no mask is applied to the
value (only bits 31..14 are valid while bit 0 is the enable bit). For
this reason the final address is off by one. The old microcodes at least
allowed this unaligned access to the RCBA space. With the latest
microcode this access leads to CPU hang.
Once this is fixed the next issue occurs: After setting the clock
gating bit for SMBus (bit 5) the SMBus controller disappears from the
PCI bus completely and hence no usage of it is possible anymore.
To fix this issue the clock gating code is completely removed as it was
intentionally meant to enable clock gating on the SMB_CLK line and not
the clock gating on the PCIe interface of the SMBus controller.
This issue is known already and was discussed on the mailinglist:
[coreboot] BDX-DE PCI init fail
https://mail.coreboot.org/pipermail/coreboot/2018-January/085908.html
TEST=Boot mc_bdx1 with microcode version M1050663_07000012.
Change-Id: Icb86f4516f8a6e72552a44618737e682b0fdef33
Signed-off-by: Werner Zeh <werner.zeh@siemens.com>
Reviewed-on: https://review.coreboot.org/25652
Reviewed-by: David Hendricks <david.hendricks@gmail.com>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/intel')
-rw-r--r-- | src/soc/intel/fsp_broadwell_de/smbus.c | 8 |
1 files changed, 0 insertions, 8 deletions
diff --git a/src/soc/intel/fsp_broadwell_de/smbus.c b/src/soc/intel/fsp_broadwell_de/smbus.c index 480e49789e..039f84131a 100644 --- a/src/soc/intel/fsp_broadwell_de/smbus.c +++ b/src/soc/intel/fsp_broadwell_de/smbus.c @@ -29,14 +29,6 @@ static void pch_smbus_init(device_t dev) { struct resource *res; - uint32_t reg32; - device_t lpc_dev = dev_find_slot(0, LPC_DEV_FUNC); - void *rcba = (void *)pci_read_config32(lpc_dev, 0xf0); - - /* Enable clock gating */ - reg32 =read32(rcba + 0x341c); - reg32 |= (1 << 5); - write32(rcba + 0x341c, reg32); /* Set Receive Slave Address */ res = find_resource(dev, PCI_BASE_ADDRESS_4); |