Commit 09b19655 authored by Ley Foon Tan's avatar Ley Foon Tan Committed by Stefan Bader

PCI: altera: Rework config accessors for use without a struct pci_bus

BugLink: https://bugs.launchpad.net/bugs/1818237

commit 31fc0ad4 upstream.

Rework configs accessors so a future patch can use them in _probe() with
struct altera_pcie instead of struct pci_bus.
Signed-off-by: default avatarLey Foon Tan <lftan@altera.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Cc: Claudius Heine <claudius.heine.ext@siemens.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
Signed-off-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
parent f33b3e40
...@@ -330,22 +330,14 @@ static int tlp_cfg_dword_write(struct altera_pcie *pcie, u8 bus, u32 devfn, ...@@ -330,22 +330,14 @@ static int tlp_cfg_dword_write(struct altera_pcie *pcie, u8 bus, u32 devfn,
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
} }
static int altera_pcie_cfg_read(struct pci_bus *bus, unsigned int devfn, static int _altera_pcie_cfg_read(struct altera_pcie *pcie, u8 busno,
int where, int size, u32 *value) unsigned int devfn, int where, int size,
u32 *value)
{ {
struct altera_pcie *pcie = bus->sysdata;
int ret; int ret;
u32 data; u32 data;
u8 byte_en; u8 byte_en;
if (altera_pcie_hide_rc_bar(bus, devfn, where))
return PCIBIOS_BAD_REGISTER_NUMBER;
if (!altera_pcie_valid_config(pcie, bus, PCI_SLOT(devfn))) {
*value = 0xffffffff;
return PCIBIOS_DEVICE_NOT_FOUND;
}
switch (size) { switch (size) {
case 1: case 1:
byte_en = 1 << (where & 3); byte_en = 1 << (where & 3);
...@@ -358,7 +350,7 @@ static int altera_pcie_cfg_read(struct pci_bus *bus, unsigned int devfn, ...@@ -358,7 +350,7 @@ static int altera_pcie_cfg_read(struct pci_bus *bus, unsigned int devfn,
break; break;
} }
ret = tlp_cfg_dword_read(pcie, bus->number, devfn, ret = tlp_cfg_dword_read(pcie, busno, devfn,
(where & ~DWORD_MASK), byte_en, &data); (where & ~DWORD_MASK), byte_en, &data);
if (ret != PCIBIOS_SUCCESSFUL) if (ret != PCIBIOS_SUCCESSFUL)
return ret; return ret;
...@@ -378,20 +370,14 @@ static int altera_pcie_cfg_read(struct pci_bus *bus, unsigned int devfn, ...@@ -378,20 +370,14 @@ static int altera_pcie_cfg_read(struct pci_bus *bus, unsigned int devfn,
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
} }
static int altera_pcie_cfg_write(struct pci_bus *bus, unsigned int devfn, static int _altera_pcie_cfg_write(struct altera_pcie *pcie, u8 busno,
int where, int size, u32 value) unsigned int devfn, int where, int size,
u32 value)
{ {
struct altera_pcie *pcie = bus->sysdata;
u32 data32; u32 data32;
u32 shift = 8 * (where & 3); u32 shift = 8 * (where & 3);
u8 byte_en; u8 byte_en;
if (altera_pcie_hide_rc_bar(bus, devfn, where))
return PCIBIOS_BAD_REGISTER_NUMBER;
if (!altera_pcie_valid_config(pcie, bus, PCI_SLOT(devfn)))
return PCIBIOS_DEVICE_NOT_FOUND;
switch (size) { switch (size) {
case 1: case 1:
data32 = (value & 0xff) << shift; data32 = (value & 0xff) << shift;
...@@ -407,8 +393,40 @@ static int altera_pcie_cfg_write(struct pci_bus *bus, unsigned int devfn, ...@@ -407,8 +393,40 @@ static int altera_pcie_cfg_write(struct pci_bus *bus, unsigned int devfn,
break; break;
} }
return tlp_cfg_dword_write(pcie, bus->number, devfn, return tlp_cfg_dword_write(pcie, busno, devfn, (where & ~DWORD_MASK),
(where & ~DWORD_MASK), byte_en, data32); byte_en, data32);
}
static int altera_pcie_cfg_read(struct pci_bus *bus, unsigned int devfn,
int where, int size, u32 *value)
{
struct altera_pcie *pcie = bus->sysdata;
if (altera_pcie_hide_rc_bar(bus, devfn, where))
return PCIBIOS_BAD_REGISTER_NUMBER;
if (!altera_pcie_valid_config(pcie, bus, PCI_SLOT(devfn))) {
*value = 0xffffffff;
return PCIBIOS_DEVICE_NOT_FOUND;
}
return _altera_pcie_cfg_read(pcie, bus->number, devfn, where, size,
value);
}
static int altera_pcie_cfg_write(struct pci_bus *bus, unsigned int devfn,
int where, int size, u32 value)
{
struct altera_pcie *pcie = bus->sysdata;
if (altera_pcie_hide_rc_bar(bus, devfn, where))
return PCIBIOS_BAD_REGISTER_NUMBER;
if (!altera_pcie_valid_config(pcie, bus, PCI_SLOT(devfn)))
return PCIBIOS_DEVICE_NOT_FOUND;
return _altera_pcie_cfg_write(pcie, bus->number, devfn, where, size,
value);
} }
static struct pci_ops altera_pcie_ops = { static struct pci_ops altera_pcie_ops = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment