diff options
author | Ley Foon Tan <ley.foon.tan@intel.com> | 2017-02-28 05:37:16 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2017-02-28 16:06:29 -0500 |
commit | 2a7275a3d867b228216886aae35e1f64291180b1 (patch) | |
tree | df189b2dc21fb2fafe42989154287f896de5eeb8 | |
parent | c0464062bfea9cd2ef6643d93429eafe8f6c2a4a (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.c | 10 |
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 | ||