aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLey Foon Tan <ley.foon.tan@intel.com>2017-02-28 05:37:16 -0500
committerBjorn Helgaas <bhelgaas@google.com>2017-02-28 16:06:29 -0500
commit2a7275a3d867b228216886aae35e1f64291180b1 (patch)
treedf189b2dc21fb2fafe42989154287f896de5eeb8
parentc0464062bfea9cd2ef6643d93429eafe8f6c2a4a (diff)
PCI: altera: Fix TLP_CFG_DW0 for TLP write
eb5767122feb ("PCI: altera: Simplify TLB_CFG_DW0 usage") used TLP_FMTTYPE_CFGRD* (instead of TLP_FMTTYPE_CFGWR*) for TLP writes, which causes writing to configuration space to fail. Fix it by using correct FMTTYPE for write operation. Fixes: eb5767122feb ("PCI: altera: Simplify TLB_CFG_DW0 usage") Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> CC: stable@vger.kernel.org # v4.9+
-rw-r--r--drivers/pci/host/pcie-altera.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/pci/host/pcie-altera.c b/drivers/pci/host/pcie-altera.c
index 5043b5f00ed8..75ec5cea26f6 100644
--- a/drivers/pci/host/pcie-altera.c
+++ b/drivers/pci/host/pcie-altera.c
@@ -57,10 +57,14 @@
57#define TLP_WRITE_TAG 0x10 57#define TLP_WRITE_TAG 0x10
58#define RP_DEVFN 0 58#define RP_DEVFN 0
59#define TLP_REQ_ID(bus, devfn) (((bus) << 8) | (devfn)) 59#define TLP_REQ_ID(bus, devfn) (((bus) << 8) | (devfn))
60#define TLP_CFG_DW0(pcie, bus) \ 60#define TLP_CFGRD_DW0(pcie, bus) \
61 ((((bus == pcie->root_bus_nr) ? TLP_FMTTYPE_CFGRD0 \ 61 ((((bus == pcie->root_bus_nr) ? TLP_FMTTYPE_CFGRD0 \
62 : TLP_FMTTYPE_CFGRD1) << 24) | \ 62 : TLP_FMTTYPE_CFGRD1) << 24) | \
63 TLP_PAYLOAD_SIZE) 63 TLP_PAYLOAD_SIZE)
64#define TLP_CFGWR_DW0(pcie, bus) \
65 ((((bus == pcie->root_bus_nr) ? TLP_FMTTYPE_CFGWR0 \
66 : TLP_FMTTYPE_CFGWR1) << 24) | \
67 TLP_PAYLOAD_SIZE)
64#define TLP_CFG_DW1(pcie, tag, be) \ 68#define TLP_CFG_DW1(pcie, tag, be) \
65 (((TLP_REQ_ID(pcie->root_bus_nr, RP_DEVFN)) << 16) | (tag << 8) | (be)) 69 (((TLP_REQ_ID(pcie->root_bus_nr, RP_DEVFN)) << 16) | (tag << 8) | (be))
66#define TLP_CFG_DW2(bus, devfn, offset) \ 70#define TLP_CFG_DW2(bus, devfn, offset) \
@@ -222,7 +226,7 @@ static int tlp_cfg_dword_read(struct altera_pcie *pcie, u8 bus, u32 devfn,
222{ 226{
223 u32 headers[TLP_HDR_SIZE]; 227 u32 headers[TLP_HDR_SIZE];
224 228
225 headers[0] = TLP_CFG_DW0(pcie, bus); 229 headers[0] = TLP_CFGRD_DW0(pcie, bus);
226 headers[1] = TLP_CFG_DW1(pcie, TLP_READ_TAG, byte_en); 230 headers[1] = TLP_CFG_DW1(pcie, TLP_READ_TAG, byte_en);
227 headers[2] = TLP_CFG_DW2(bus, devfn, where); 231 headers[2] = TLP_CFG_DW2(bus, devfn, where);
228 232
@@ -237,7 +241,7 @@ static int tlp_cfg_dword_write(struct altera_pcie *pcie, u8 bus, u32 devfn,
237 u32 headers[TLP_HDR_SIZE]; 241 u32 headers[TLP_HDR_SIZE];
238 int ret; 242 int ret;
239 243
240 headers[0] = TLP_CFG_DW0(pcie, bus); 244 headers[0] = TLP_CFGWR_DW0(pcie, bus);
241 headers[1] = TLP_CFG_DW1(pcie, TLP_WRITE_TAG, byte_en); 245 headers[1] = TLP_CFG_DW1(pcie, TLP_WRITE_TAG, byte_en);
242 headers[2] = TLP_CFG_DW2(bus, devfn, where); 246 headers[2] = TLP_CFG_DW2(bus, devfn, where);
243 247