fsp_broadwell_de: Add Kconfig switch for SERIRQ operation mode

The serial IRQ (SERIRQ) used by the LPC interface can operate either in
continuous or in quiet mode. Add a Kconfig switch to select the desired
mode. This switch can now be used on mainboard level to enable the
needed mode per mainboard.

Change-Id: Ibe246b88164a622f9c71ebe7bab752a083a49a62
Signed-off-by: Werner Zeh <werner.zeh@siemens.com>
Reviewed-on: https://review.coreboot.org/16575
Tested-by: build bot (Jenkins)
Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
Werner Zeh 2016-09-12 07:48:51 +02:00 committed by Martin Roth
parent 9d18e330fd
commit 4f2754c720
3 changed files with 19 additions and 1 deletions

View File

@ -81,6 +81,13 @@ config CPU_MICROCODE_HEADER_FILES
string string
default "../intel/cpu/broadwell_de/microcode/M1050663_07000001.h ../intel/cpu/broadwell_de/microcode/M1050662_0000000A.h ../intel/cpu/broadwell_de/microcode/MFF50661_F1000008.h" default "../intel/cpu/broadwell_de/microcode/M1050663_07000001.h ../intel/cpu/broadwell_de/microcode/M1050662_0000000A.h ../intel/cpu/broadwell_de/microcode/MFF50661_F1000008.h"
config SERIRQ_CONTINUOUS_MODE
bool
default n
help
If you set this option to y, the serial IRQ machine will be
operated in continuous mode.
## Broadwell-DE Specific FSP Kconfig ## Broadwell-DE Specific FSP Kconfig
source src/soc/intel/fsp_broadwell_de/fsp/Kconfig source src/soc/intel/fsp_broadwell_de/fsp/Kconfig

View File

@ -22,6 +22,10 @@
/* LPC Interface Bridge PCI Configuration Registers */ /* LPC Interface Bridge PCI Configuration Registers */
#define REVID 0x08 #define REVID 0x08
#define PIRQ_RCR1 0x60 #define PIRQ_RCR1 0x60
#define SIRQ_CNTL 0x64
#define SIRQ_EN 0x80
#define SIRQ_MODE_QUIET 0x00
#define SIRQ_MODE_CONT 0x40
#define PIRQ_RCR2 0x68 #define PIRQ_RCR2 0x68
#define LPC_IO_DEC 0x80 #define LPC_IO_DEC 0x80
#define LPC_EN 0x82 #define LPC_EN 0x82

View File

@ -215,7 +215,14 @@ static void sc_init(struct device *dev)
PCI_COMMAND_MASTER | PCI_COMMAND_SPECIAL); PCI_COMMAND_MASTER | PCI_COMMAND_SPECIAL);
/* Program Serial IRQ register. */ /* Program Serial IRQ register. */
pci_write_config8(dev, 0x64, 0xd0); pci_write_config8(dev, SIRQ_CNTL, SIRQ_EN | SIRQ_MODE_CONT);
if (!IS_ENABLED(CONFIG_SERIRQ_CONTINUOUS_MODE)) {
/* If SERIRQ have to operate in quiet mode, it should have been
run in continuous mode for at least one frame first. Use I/O
access to achieve the delay of at least one LPC cycle. */
outb(inb(0x80), 0x80);
pci_write_config8(dev, SIRQ_CNTL, SIRQ_EN | SIRQ_MODE_QUIET);
}
sc_pirq_init(dev); sc_pirq_init(dev);
write_pci_config_irqs(); write_pci_config_irqs();