mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
Merge branch 'pci/aer'
- Use match_string() instead of reimplementing it (Andy Shevchenko) - Enable SERR# forwarding for all bridges (Bharat Kumar Gogada) * pci/aer: PCI: Enable SERR# forwarding for all bridges PCI/AER: Use match_string() helper to simplify the code
This commit is contained in:
commit
9d8e0e4b39
@ -117,7 +117,7 @@ bool pci_aer_available(void)
|
||||
|
||||
static int ecrc_policy = ECRC_POLICY_DEFAULT;
|
||||
|
||||
static const char *ecrc_policy_str[] = {
|
||||
static const char * const ecrc_policy_str[] = {
|
||||
[ECRC_POLICY_DEFAULT] = "bios",
|
||||
[ECRC_POLICY_OFF] = "off",
|
||||
[ECRC_POLICY_ON] = "on"
|
||||
@ -203,11 +203,8 @@ void pcie_ecrc_get_policy(char *str)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ecrc_policy_str); i++)
|
||||
if (!strncmp(str, ecrc_policy_str[i],
|
||||
strlen(ecrc_policy_str[i])))
|
||||
break;
|
||||
if (i >= ARRAY_SIZE(ecrc_policy_str))
|
||||
i = match_string(ecrc_policy_str, ARRAY_SIZE(ecrc_policy_str), str);
|
||||
if (i < 0)
|
||||
return;
|
||||
|
||||
ecrc_policy = i;
|
||||
|
@ -1856,8 +1856,6 @@ static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
|
||||
pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
|
||||
hpp->latency_timer);
|
||||
pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
|
||||
if (hpp->enable_serr)
|
||||
pci_bctl |= PCI_BRIDGE_CTL_SERR;
|
||||
if (hpp->enable_perr)
|
||||
pci_bctl |= PCI_BRIDGE_CTL_PARITY;
|
||||
pci_write_config_word(dev, PCI_BRIDGE_CONTROL, pci_bctl);
|
||||
@ -2129,6 +2127,24 @@ static void pci_configure_eetlp_prefix(struct pci_dev *dev)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void pci_configure_serr(struct pci_dev *dev)
|
||||
{
|
||||
u16 control;
|
||||
|
||||
if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
|
||||
|
||||
/*
|
||||
* A bridge will not forward ERR_ messages coming from an
|
||||
* endpoint unless SERR# forwarding is enabled.
|
||||
*/
|
||||
pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &control);
|
||||
if (!(control & PCI_BRIDGE_CTL_SERR)) {
|
||||
control |= PCI_BRIDGE_CTL_SERR;
|
||||
pci_write_config_word(dev, PCI_BRIDGE_CONTROL, control);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void pci_configure_device(struct pci_dev *dev)
|
||||
{
|
||||
struct hotplug_params hpp;
|
||||
@ -2139,6 +2155,7 @@ static void pci_configure_device(struct pci_dev *dev)
|
||||
pci_configure_relaxed_ordering(dev);
|
||||
pci_configure_ltr(dev);
|
||||
pci_configure_eetlp_prefix(dev);
|
||||
pci_configure_serr(dev);
|
||||
|
||||
memset(&hpp, 0, sizeof(hpp));
|
||||
ret = pci_get_hp_params(dev, &hpp);
|
||||
|
Loading…
Reference in New Issue
Block a user