Skip to content

Commit

Permalink
MIPS: pci-ar7{1x, 24}x: remove odd locking in PCI config space access…
Browse files Browse the repository at this point in the history
… code

Caller (generic PCI code) already do proper locking so no need to add
another one here.

Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Cc: Linux MIPS <linux-mips@linux-mips.org>
Cc: Gabor Juhos <juhosg@openwrt.org>
Patchwork: https://patchwork.linux-mips.org/patch/7602/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Sergey Ryazanov authored and Ralf Baechle committed Nov 24, 2014
1 parent c4a3053 commit 490a0ec
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 36 deletions.
13 changes: 0 additions & 13 deletions arch/mips/pci/pci-ar71xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@

struct ar71xx_pci_controller {
void __iomem *cfg_base;
spinlock_t lock;
int irq;
int irq_base;
struct pci_controller pci_ctrl;
Expand Down Expand Up @@ -182,25 +181,20 @@ static int ar71xx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
{
struct ar71xx_pci_controller *apc = pci_bus_to_ar71xx_controller(bus);
void __iomem *base = apc->cfg_base;
unsigned long flags;
u32 data;
int err;
int ret;

ret = PCIBIOS_SUCCESSFUL;
data = ~0;

spin_lock_irqsave(&apc->lock, flags);

err = ar71xx_pci_set_cfgaddr(bus, devfn, where, size,
AR71XX_PCI_CFG_CMD_READ);
if (err)
ret = PCIBIOS_DEVICE_NOT_FOUND;
else
data = __raw_readl(base + AR71XX_PCI_REG_CFG_RDDATA);

spin_unlock_irqrestore(&apc->lock, flags);

*value = (data >> (8 * (where & 3))) & ar71xx_pci_read_mask[size & 7];

return ret;
Expand All @@ -211,24 +205,19 @@ static int ar71xx_pci_write_config(struct pci_bus *bus, unsigned int devfn,
{
struct ar71xx_pci_controller *apc = pci_bus_to_ar71xx_controller(bus);
void __iomem *base = apc->cfg_base;
unsigned long flags;
int err;
int ret;

value = value << (8 * (where & 3));
ret = PCIBIOS_SUCCESSFUL;

spin_lock_irqsave(&apc->lock, flags);

err = ar71xx_pci_set_cfgaddr(bus, devfn, where, size,
AR71XX_PCI_CFG_CMD_WRITE);
if (err)
ret = PCIBIOS_DEVICE_NOT_FOUND;
else
__raw_writel(value, base + AR71XX_PCI_REG_CFG_WRDATA);

spin_unlock_irqrestore(&apc->lock, flags);

return ret;
}

Expand Down Expand Up @@ -360,8 +349,6 @@ static int ar71xx_pci_probe(struct platform_device *pdev)
if (!apc)
return -ENOMEM;

spin_lock_init(&apc->lock);

res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "cfg_base");
apc->cfg_base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(apc->cfg_base))
Expand Down
23 changes: 0 additions & 23 deletions arch/mips/pci/pci-ar724x.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
* by the Free Software Foundation.
*/

#include <linux/spinlock.h>
#include <linux/irq.h>
#include <linux/pci.h>
#include <linux/module.h>
Expand Down Expand Up @@ -48,8 +47,6 @@ struct ar724x_pci_controller {
bool bar0_is_cached;
u32 bar0_value;

spinlock_t lock;

struct pci_controller pci_controller;
struct resource io_res;
struct resource mem_res;
Expand All @@ -75,7 +72,6 @@ pci_bus_to_ar724x_controller(struct pci_bus *bus)
static int ar724x_pci_local_write(struct ar724x_pci_controller *apc,
int where, int size, u32 value)
{
unsigned long flags;
void __iomem *base;
u32 data;
int s;
Expand All @@ -86,8 +82,6 @@ static int ar724x_pci_local_write(struct ar724x_pci_controller *apc,
return PCIBIOS_DEVICE_NOT_FOUND;

base = apc->crp_base;

spin_lock_irqsave(&apc->lock, flags);
data = __raw_readl(base + (where & ~3));

switch (size) {
Expand All @@ -105,14 +99,12 @@ static int ar724x_pci_local_write(struct ar724x_pci_controller *apc,
data = value;
break;
default:
spin_unlock_irqrestore(&apc->lock, flags);
return PCIBIOS_BAD_REGISTER_NUMBER;
}

__raw_writel(data, base + (where & ~3));
/* flush write */
__raw_readl(base + (where & ~3));
spin_unlock_irqrestore(&apc->lock, flags);

return PCIBIOS_SUCCESSFUL;
}
Expand All @@ -121,7 +113,6 @@ static int ar724x_pci_read(struct pci_bus *bus, unsigned int devfn, int where,
int size, uint32_t *value)
{
struct ar724x_pci_controller *apc;
unsigned long flags;
void __iomem *base;
u32 data;

Expand All @@ -133,8 +124,6 @@ static int ar724x_pci_read(struct pci_bus *bus, unsigned int devfn, int where,
return PCIBIOS_DEVICE_NOT_FOUND;

base = apc->devcfg_base;

spin_lock_irqsave(&apc->lock, flags);
data = __raw_readl(base + (where & ~3));

switch (size) {
Expand All @@ -153,13 +142,9 @@ static int ar724x_pci_read(struct pci_bus *bus, unsigned int devfn, int where,
case 4:
break;
default:
spin_unlock_irqrestore(&apc->lock, flags);

return PCIBIOS_BAD_REGISTER_NUMBER;
}

spin_unlock_irqrestore(&apc->lock, flags);

if (where == PCI_BASE_ADDRESS_0 && size == 4 &&
apc->bar0_is_cached) {
/* use the cached value */
Expand All @@ -175,7 +160,6 @@ static int ar724x_pci_write(struct pci_bus *bus, unsigned int devfn, int where,
int size, uint32_t value)
{
struct ar724x_pci_controller *apc;
unsigned long flags;
void __iomem *base;
u32 data;
int s;
Expand Down Expand Up @@ -209,8 +193,6 @@ static int ar724x_pci_write(struct pci_bus *bus, unsigned int devfn, int where,
}

base = apc->devcfg_base;

spin_lock_irqsave(&apc->lock, flags);
data = __raw_readl(base + (where & ~3));

switch (size) {
Expand All @@ -228,15 +210,12 @@ static int ar724x_pci_write(struct pci_bus *bus, unsigned int devfn, int where,
data = value;
break;
default:
spin_unlock_irqrestore(&apc->lock, flags);

return PCIBIOS_BAD_REGISTER_NUMBER;
}

__raw_writel(data, base + (where & ~3));
/* flush write */
__raw_readl(base + (where & ~3));
spin_unlock_irqrestore(&apc->lock, flags);

return PCIBIOS_SUCCESSFUL;
}
Expand Down Expand Up @@ -380,8 +359,6 @@ static int ar724x_pci_probe(struct platform_device *pdev)
if (apc->irq < 0)
return -EINVAL;

spin_lock_init(&apc->lock);

res = platform_get_resource_byname(pdev, IORESOURCE_IO, "io_base");
if (!res)
return -EINVAL;
Expand Down

0 comments on commit 490a0ec

Please sign in to comment.