]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
pci: layerscape: Fix the LUT and msi-map mismatch issue
authorHou Zhiqiang <Zhiqiang.Hou@nxp.com>
Tue, 9 Nov 2021 11:26:24 +0000 (16:56 +0530)
committerPriyanka Jain <priyanka.jain@nxp.com>
Tue, 9 Nov 2021 11:48:23 +0000 (17:18 +0530)
In the current code, it doesn't reset the cursors of LUT entry and
StreamID at the beginning of the fixup, so it can result in LUT entry
setup and msi-map mismatch and LUT entries and StreamID leaking
when reload and fixup the DTB.
This patch move the initialization of LUT entry and StreamID cursors
to the beginning of the fixup to resolve the issues.

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
[Rebased]
Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
drivers/pci/pcie_layerscape_fixup.c
drivers/pci/pcie_layerscape_fixup_common.c
drivers/pci/pcie_layerscape_gen4.c
drivers/pci/pcie_layerscape_gen4_fixup.c
drivers/pci/pcie_layerscape_rc.c

index a58e7a3892a122278d67119f47d3d76cf4416f1a..8a2a0e1f4a906a957137fae0eca0742d460c3e24 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * Copyright 2017-2020 NXP
+ * Copyright 2017-2021 NXP
  * Copyright 2014-2015 Freescale Semiconductor, Inc.
  * Layerscape PCIe driver
  */
@@ -24,6 +24,8 @@
 #include "pcie_layerscape.h"
 #include "pcie_layerscape_fixup_common.h"
 
+int next_stream_id;
+
 static int fdt_pcie_get_nodeoffset(void *blob, struct ls_pcie_rc *pcie_rc)
 {
        int nodeoffset;
@@ -607,6 +609,9 @@ static void ft_pcie_ls_setup(void *blob, struct ls_pcie_rc *pcie_rc)
 {
        ft_pcie_ep_fix(blob, pcie_rc);
        ft_pcie_rc_fix(blob, pcie_rc);
+
+       pcie_rc->stream_id_cur = 0;
+       pcie_rc->next_lut_index = 0;
 }
 
 /* Fixup Kernel DT for PCIe */
@@ -618,6 +623,7 @@ void ft_pci_setup_ls(void *blob, struct bd_info *bd)
                ft_pcie_ls_setup(blob, pcie_rc);
 
 #if defined(CONFIG_FSL_LSCH3) || defined(CONFIG_FSL_LSCH2)
+       next_stream_id = FSL_PEX_STREAM_ID_START;
        fdt_fixup_pcie_ls(blob);
 #endif
 }
index 3216a20027a85ae8619224897c46addf5fa65add..faccf6c141f172b9043538d7a1e8b879f1fd0bc6 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * Copyright 2019-2020 NXP
+ * Copyright 2019-2021 NXP
  *
  * PCIe DT fixup for NXP Layerscape SoCs
  * Author: Wasim Khan <wasim.khan@nxp.com>
@@ -15,6 +15,8 @@
 #include <fdt_support.h>
 #include "pcie_layerscape_fixup_common.h"
 
+extern int next_stream_id;
+
 void ft_pci_setup(void *blob, struct bd_info *bd)
 {
 #if defined(CONFIG_PCIE_LAYERSCAPE_GEN4)
@@ -147,8 +149,6 @@ int pcie_next_streamid(int currentid, int idx)
 /* returns the next available streamid for pcie, -errno if failed */
 int pcie_next_streamid(int currentid, int idx)
 {
-       static int next_stream_id = FSL_PEX_STREAM_ID_START;
-
        if (next_stream_id > FSL_PEX_STREAM_ID_END)
                return -EINVAL;
 
index 255e73181d59bf7947def4c29c09e849eac1f217..6ecdd6af408c8ff13cd5206a2f343a2e67b0e490 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+ OR X11
 /*
- * Copyright 2018-2020 NXP
+ * Copyright 2018-2021 NXP
  *
  * PCIe Gen4 driver for NXP Layerscape SoCs
  * Author: Hou Zhiqiang <Minder.Hou@gmail.com>
@@ -305,8 +305,6 @@ static void ls_pcie_g4_setup_ctrl(struct ls_pcie_g4 *pcie)
        ccsr_writel(pcie, PAB_AXI_PIO_CTRL(0), val);
 
        ls_pcie_g4_setup_wins(pcie);
-
-       pcie->stream_id_cur = 0;
 }
 
 static void ls_pcie_g4_ep_inbound_win_set(struct ls_pcie_g4 *pcie, int pf,
index e9ee15558e5a5ef511ee83f8ab2044c4f4c9b8c1..7d1123410616b703c99aa02739566beda29a0e3d 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+ OR X11
 /*
- * Copyright 2018-2020 NXP
+ * Copyright 2018-2021 NXP
  *
  * PCIe Gen4 driver for NXP Layerscape SoCs
  * Author: Hou Zhiqiang <Minder.Hou@gmail.com>
@@ -223,6 +223,9 @@ static void ft_pcie_layerscape_gen4_setup(void *blob, struct ls_pcie_g4 *pcie)
 {
        ft_pcie_rc_layerscape_gen4_fix(blob, pcie);
        ft_pcie_ep_layerscape_gen4_fix(blob, pcie);
+
+       pcie->stream_id_cur = 0;
+       pcie->next_lut_index = 0;
 }
 
 /* Fixup Kernel DT for PCIe */
index 217b420076ae6ae15c5908876fee9e4a37b41a4d..17969e2f23660f19b9d038b4d7b2f7051eba45a6 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * Copyright 2020 NXP
+ * Copyright 2020,2021 NXP
  * Layerscape PCIe driver
  */
 
@@ -244,7 +244,6 @@ static void ls_pcie_setup_ctrl(struct ls_pcie_rc *pcie_rc)
        ls_pcie_dbi_ro_wr_dis(pcie);
 
        ls_pcie_disable_bars(pcie_rc);
-       pcie_rc->stream_id_cur = 0;
 }
 
 static int ls_pcie_probe(struct udevice *dev)