GIC get the map relations of devid and stream id from the msi-map
property of DTS, our platform add this property in u-boot base on
the PCIe device in the bus, but if enable the vf device in kernel,
the vf device msi-map will not set, so the vf device can't work,
this patch purpose is that manage the stream id and device id map
relations dynamically in kernel, and make the new PCIe device work
in kernel.
Signed-off-by: Xiaowei Bao <xiaowei.bao@xxxxxxx>
---
drivers/of/irq.c | 9 +++
drivers/pci/controller/dwc/pci-layerscape.c | 94
+++++++++++++++++++++++++++++
drivers/pci/probe.c | 6 ++
drivers/pci/remove.c | 6 ++
4 files changed, 115 insertions(+)
diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index a296eaf..791e609 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -576,6 +576,11 @@ void __init of_irq_init(const struct
of_device_id *matches)
}
}
+u32 __weak ls_pcie_streamid_fix(struct device *dev, u32 rid)
+{
+ return rid;
+}
+
static u32 __of_msi_map_rid(struct device *dev, struct device_node **np,
u32 rid_in)
{
@@ -590,6 +595,10 @@ static u32 __of_msi_map_rid(struct device *dev,
struct device_node **np,
if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map",
"msi-map-mask", np, &rid_out))
break;
+
+ if (rid_out == rid_in)
+ rid_out = ls_pcie_streamid_fix(parent_dev, rid_in);