Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 490a0ece authored by Sergey Ryazanov's avatar Sergey Ryazanov Committed by Ralf Baechle
Browse files

MIPS: pci-ar7{1x, 24}x: remove odd locking in PCI config space access code



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

Signed-off-by: default avatarSergey 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: default avatarRalf Baechle <ralf@linux-mips.org>
parent c4a30537
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -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;
@@ -182,7 +181,6 @@ 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;
@@ -190,8 +188,6 @@ static int ar71xx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
	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)
@@ -199,8 +195,6 @@ static int ar71xx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
	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;
@@ -211,15 +205,12 @@ 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)
@@ -227,8 +218,6 @@ static int ar71xx_pci_write_config(struct pci_bus *bus, unsigned int devfn,
	else
		__raw_writel(value, base + AR71XX_PCI_REG_CFG_WRDATA);

	spin_unlock_irqrestore(&apc->lock, flags);

	return ret;
}

@@ -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))
+0 −23
Original line number Diff line number Diff line
@@ -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>
@@ -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;
@@ -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;
@@ -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) {
@@ -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;
}
@@ -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;

@@ -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) {
@@ -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 */
@@ -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;
@@ -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) {
@@ -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;
}
@@ -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;