soc/intel/apollolake: Add PCIe de-emphasis enable configuration.

PCIe de-emphasis is enabled by default. Thunderpeak Wi-Fi requires
it to be disabled. Therefore allow it to be configured via a
device tree setting.

TEST=On GLKRVP, verify Thunderpeak Wi-Fi card shows up in lspci when
de-emphasis is disabled in device tree.

Change-Id: Iae204768dfe00a638c764644c44c7cda269e73e0
Signed-off-by: Shamile Khan <shamile.khan@intel.com>
Reviewed-on: https://review.coreboot.org/25185
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/soc/intel/apollolake/chip.c b/src/soc/intel/apollolake/chip.c
index af145c0..cac2f11 100644
--- a/src/soc/intel/apollolake/chip.c
+++ b/src/soc/intel/apollolake/chip.c
@@ -502,6 +502,17 @@
 	struct soc_intel_apollolake_config *cfg, FSP_S_CONFIG *silconfig)
 {
 	silconfig->Gmm = 0;
+
+	/* On Geminilake, we need to override the default FSP PCIe de-emphasis
+	 * settings using the device tree settings. This is because PCIe
+	 * de-emphasis is enabled by default and Thunderpeak PCIe WiFi detection
+	 * requires de-emphasis disabled. If we make this change common to both
+	 * Apollolake and Geminilake, then we need to add mainboard device tree
+	 * de-emphasis settings of 1 to Apollolake systems.
+	 */
+	memcpy(silconfig->PcieRpSelectableDeemphasis,
+		cfg->pcie_rp_deemphasis_enable,
+		sizeof(silconfig->PcieRpSelectableDeemphasis));
 }
 
 void __attribute__((weak)) mainboard_devtree_update(struct device *dev)
diff --git a/src/soc/intel/apollolake/chip.h b/src/soc/intel/apollolake/chip.h
index fe845ab..f354538 100644
--- a/src/soc/intel/apollolake/chip.h
+++ b/src/soc/intel/apollolake/chip.h
@@ -49,6 +49,9 @@
 	/* Enable/disable hot-plug for root ports (0 = disable, 1 = enable). */
 	uint8_t pcie_rp_hotplug_enable[MAX_PCIE_PORTS];
 
+	/* De-emphasis enable configuration for each PCIe root port */
+	uint8_t pcie_rp_deemphasis_enable[MAX_PCIE_PORTS];
+
 	/* [14:8] DDR mode Number of dealy elements.Each = 125pSec.
 	 * [6:0] SDR mode Number of dealy elements.Each = 125pSec.
 	 */