Skip to content

Commit

Permalink
PCI: designware: Use exact access size in dw_pcie_cfg_read()
Browse files Browse the repository at this point in the history
dw_pcie_cfg_write() uses the exact 8-, 16-, or 32-bit access size
requested, but dw_pcie_cfg_read() previously performed a 32-bit read and
masked out the bits requested.

Use the exact access size in dw_pcie_cfg_read().  For example, if we want
an 8-bit read, use readb() instead of using readl() and masking out the 8
bits we need.  This makes it symmetric with dw_pcie_cfg_write().

[bhelgaas: split into separate patch, set *val = 0 in failure case]
Signed-off-by: Gabriele Paoloni <[email protected]>
Signed-off-by: Bjorn Helgaas <[email protected]>
  • Loading branch information
g00308965 authored and bjorn-helgaas committed Nov 2, 2015
1 parent fa3b7cb commit c003ca9
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions drivers/pci/host/pcie-designware.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,16 @@ static inline struct pcie_port *sys_to_pcie(struct pci_sys_data *sys)

int dw_pcie_cfg_read(void __iomem *addr, int where, int size, u32 *val)
{
*val = readl(addr);

if (size == 1)
*val = (*val >> (8 * (where & 3))) & 0xff;
if (size == 4)
*val = readl(addr);
else if (size == 2)
*val = (*val >> (8 * (where & 3))) & 0xffff;
else if (size != 4)
*val = readw(addr + (where & 2));
else if (size == 1)
*val = readb(addr + (where & 1));
else {
*val = 0;
return PCIBIOS_BAD_REGISTER_NUMBER;
}

return PCIBIOS_SUCCESSFUL;
}
Expand Down

0 comments on commit c003ca9

Please sign in to comment.