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>
This commit is contained in:
parent
0b643d2499
commit
cee8532ce3
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue