soc/intel/common/block: Modify fast_spi_lock_bar function

Use 16bit write to avoid touching the upper two bytes that may cause
write cycle to fail in case a prior transaction has not completed.

This function sets the WRSDIS(Bit 11) and FLOCKDN (Bit 15) of the
SPIBAR + BIOS_HSFSTS_CTL. While WRSDIS is lockable with FLOCKDN,
writing both in the same cycle is guaranteed to work by design.

Avoid read->modify->write operation not to clear the RW1C bits
unintentionally.

Change-Id: Ia7880aaca0ed64150c994d49786a0a008bbaa98b
Signed-off-by: Barnali Sarkar <barnali.sarkar@intel.com>
Reviewed-on: https://review.coreboot.org/20643
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
Barnali Sarkar 2017-07-19 16:09:56 +05:30 committed by Aaron Durbin
parent 4635787895
commit 8e51319b03
2 changed files with 9 additions and 4 deletions

View File

@ -134,15 +134,19 @@ void fast_spi_set_opcode_menu(void)
/*
* Lock FAST_SPIBAR.
* Use 16bit write to avoid touching two upper bytes what may cause the write
* cycle to fail in case a prior transaction has not completed.
* While WRSDIS is lockable with FLOCKDN, writing both in the same
* cycle is guaranteed to work by design.
*
* Avoid read->modify->write not to clear RW1C bits unintentionally.
*/
void fast_spi_lock_bar(void)
{
void *spibar = fast_spi_get_bar();
uint32_t hsfs;
const uint16_t hsfs = SPIBAR_HSFSTS_FLOCKDN | SPIBAR_HSFSTS_WRSDIS;
hsfs = read32(spibar + SPIBAR_HSFSTS_CTL);
hsfs |= SPIBAR_HSFSTS_FLOCKDN;
write32(spibar + SPIBAR_HSFSTS_CTL, hsfs);
write16(spibar + SPIBAR_HSFSTS_CTL, hsfs);
}
/*

View File

@ -70,6 +70,7 @@
#define SPIBAR_HSFSTS_FLOCKDN (1 << 15)
#define SPIBAR_HSFSTS_FDV (1 << 14)
#define SPIBAR_HSFSTS_FDOPSS (1 << 13)
#define SPIBAR_HSFSTS_WRSDIS (1 << 11)
#define SPIBAR_HSFSTS_SAF_CE (1 << 8)
#define SPIBAR_HSFSTS_SAF_ACTIVE (1 << 7)
#define SPIBAR_HSFSTS_SAF_LE (1 << 6)