soc/intel/skylake: Add config for enabling LTR for PCIe Root port

There are a lot errors reported by AER driver for root port 0.
The erors are being caused by an unsupported request from the
device to the upstream port. Enabling LTR on the root port stops
these errors, it is because LTR is enabled on the device side but
not on the root port and hence root port was logging the LTR messages
from the device as unsupported.

The PCIe base spec (v3.1a) section 6.18 also states that:
LTR support is discovered and enabled through reporting and control
registers described in Chapter 7. Software must not enable LTR in an
Endpoint unless the Root Complex and all intermediate Switches indicate
support for LTR. Note that it is not required that all Endpoints support
LTR to permit enabling LTR in those Endpoints that do support it. When
enabling the LTR mechanism in a hierarchy, devices closest to the
Root Port must be enabled first.

If an LTR Message is received at a Downstream Port that does not
support LTR or if LTR is not enabled, the Message must be treated
as an Unsupported Request. FSP has a UPD for enabling/disabling
LTR on root port, use the same for configuring LTR on PCIe root ports.

BUG=b:65570878
TEST=After enbaling LTR on port 0 on the MB devicetree, No errors reported
     by AER driver for root port 0.

Change-Id: Ica97faa78fcd991dad63ae54d2ada82194b4202a
Signed-off-by: Rizwan Qureshi <rizwan.qureshi@intel.com>
Reviewed-on: https://review.coreboot.org/21547
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Rizwan Qureshi 2017-09-16 01:54:20 +05:30 committed by Furquan Shaikh
parent 1eb02592b3
commit 03937391bc
2 changed files with 36 additions and 1 deletions

View File

@ -169,12 +169,45 @@ struct soc_intel_skylake_config {
/* DCI Enable/Disable */ /* DCI Enable/Disable */
u8 PchDciEn; u8 PchDciEn;
/* Pcie Root Ports */ /*
* Pcie Root Port configuration:
* each element of array corresponds to
* respective PCIe root port.
*/
/*
* Enable/Disable Root Port
* 0: Disable Root Port
* 1: Enable Root Port
*/
u8 PcieRpEnable[CONFIG_MAX_ROOT_PORTS]; u8 PcieRpEnable[CONFIG_MAX_ROOT_PORTS];
/*
* Enable/Disable Clk-req support for Root Port
* 0: Disable Clk-Req
* 1: Enable Clk-req
*/
u8 PcieRpClkReqSupport[CONFIG_MAX_ROOT_PORTS]; u8 PcieRpClkReqSupport[CONFIG_MAX_ROOT_PORTS];
/*
* Clk-req source for Root Port
*/
u8 PcieRpClkReqNumber[CONFIG_MAX_ROOT_PORTS]; u8 PcieRpClkReqNumber[CONFIG_MAX_ROOT_PORTS];
/*
* Enable/Disable AER (Advanced Error Reporting) for Root Port
* 0: Disable AER
* 1: Enable AER
*/
u8 PcieRpAdvancedErrorReporting[CONFIG_MAX_ROOT_PORTS]; u8 PcieRpAdvancedErrorReporting[CONFIG_MAX_ROOT_PORTS];
/*
* Enable/Disable Latency Tolerance Reporting for Root Port
* 0: Disable LTR
* 1: Enable LTR
*/
u8 PcieRpLtrEnable[CONFIG_MAX_ROOT_PORTS];
/* USB related */ /* USB related */
struct usb2_port_config usb2_ports[16]; struct usb2_port_config usb2_ports[16];
struct usb3_port_config usb3_ports[10]; struct usb3_port_config usb3_ports[10];

View File

@ -169,6 +169,8 @@ void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
memcpy(params->PcieRpAdvancedErrorReporting, memcpy(params->PcieRpAdvancedErrorReporting,
config->PcieRpAdvancedErrorReporting, config->PcieRpAdvancedErrorReporting,
sizeof(params->PcieRpAdvancedErrorReporting)); sizeof(params->PcieRpAdvancedErrorReporting));
memcpy(params->PcieRpLtrEnable, config->PcieRpLtrEnable,
sizeof(params->PcieRpLtrEnable));
/* disable Legacy PME */ /* disable Legacy PME */
memset(params->PcieRpPmSci, 0, sizeof(params->PcieRpPmSci)); memset(params->PcieRpPmSci, 0, sizeof(params->PcieRpPmSci));