soc/intel/meteorlake: Check clkreq overlap

In some cases, partner may assign same clkreq on more than one devices.
This could happen when one device is in baseboard dev tree and another
one is in override dev tree.

This change adds a clkreq overlap check and shows a warning message.

This patch is backported from
commit ff553ba8b3d39fba6f1ed9b8e3513fc5412ba5a9 (soc/intel/alderlake:
Check clkreq overlap)

Change-Id: Ifc1c57578eca376685196ad497d9db825d63aa76
Signed-off-by: Subrata Banik <subratabanik@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70414
Reviewed-by: Kapil Porwal <kapilporwal@google.com>
Reviewed-by: Ivy Jian <ivy.jian@quanta.corp-partner.google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/soc/intel/meteorlake/romstage/fsp_params.c b/src/soc/intel/meteorlake/romstage/fsp_params.c
index 7921f22..89f6aaf 100644
--- a/src/soc/intel/meteorlake/romstage/fsp_params.c
+++ b/src/soc/intel/meteorlake/romstage/fsp_params.c
@@ -28,6 +28,7 @@
 			const struct pcie_rp_config *cfg, size_t cfg_count)
 {
 	size_t i;
+	static unsigned int clk_req_mapping = 0;
 
 	for (i = 0; i < cfg_count; i++) {
 		if (!(en_mask & BIT(i)))
@@ -37,8 +38,13 @@
 		/* flags 0 means, RP config is not specify from devicetree */
 		if (cfg[i].flags == 0)
 			continue;
-		if (!(cfg[i].flags & PCIE_RP_CLK_REQ_UNUSED))
+		if (clk_req_mapping & (1 << cfg[i].clk_req))
+			printk(BIOS_WARNING, "Found overlapped clkreq assignment on clk req %d\n"
+				, cfg[i].clk_req);
+		if (!(cfg[i].flags & PCIE_RP_CLK_REQ_UNUSED)) {
 			m_cfg->PcieClkSrcClkReq[cfg[i].clk_src] = cfg[i].clk_req;
+			clk_req_mapping |= 1 << cfg[i].clk_req;
+		}
 		m_cfg->PcieClkSrcUsage[cfg[i].clk_src] = i;
 	}
 }