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

Commit e2dbdc43 authored by Gabor Juhos's avatar Gabor Juhos Committed by Ralf Baechle
Browse files

MIPS: ath79: separate common PCI code



The 'pcibios_map_irq' and 'pcibios_plat_dev_init'
are common functions and only instance one of them
can be present in a single kernel.

Currently these functions can be built only if the
CONFIG_SOC_AR724X option is selected. However the
ath79 platform contain support for the AR71XX SoCs,.
The AR71XX SoCs have a differnet PCI controller,
and those will require a different code.

Move the common PCI code into a separeate file in
order to be able to use that with other SoCs as
well.

Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
Acked-by: default avatarRené Bolldorf <xsecute@googlemail.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/3485/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 97bf7a19
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
obj-y	:= prom.o setup.o irq.o common.o clock.o gpio.o

obj-$(CONFIG_EARLY_PRINTK)		+= early_printk.o
obj-$(CONFIG_PCI)			+= pci.o

#
# Devices

arch/mips/ath79/pci.c

0 → 100644
+46 −0
Original line number Diff line number Diff line
/*
 *  Atheros AR71XX/AR724X specific PCI setup code
 *
 *  Copyright (C) 2011 René Bolldorf <xsecute@googlemail.com>
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License version 2 as published
 *  by the Free Software Foundation.
 */

#include <linux/pci.h>
#include <asm/mach-ath79/pci-ath724x.h>

static struct ath724x_pci_data *pci_data;
static int pci_data_size;

void ath724x_pci_add_data(struct ath724x_pci_data *data, int size)
{
	pci_data	= data;
	pci_data_size	= size;
}

int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
{
	unsigned int devfn = dev->devfn;
	int irq = -1;

	if (devfn > pci_data_size - 1)
		return irq;

	irq = pci_data[devfn].irq;

	return irq;
}

int pcibios_plat_dev_init(struct pci_dev *dev)
{
	unsigned int devfn = dev->devfn;

	if (devfn > pci_data_size - 1)
		return PCIBIOS_DEVICE_NOT_FOUND;

	dev->dev.platform_data = pci_data[devfn].pdata;

	return PCIBIOS_SUCCESSFUL;
}
+0 −34
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@
 */

#include <linux/pci.h>
#include <asm/mach-ath79/pci-ath724x.h>

#define reg_read(_phys)		(*(unsigned int *) KSEG1ADDR(_phys))
#define reg_write(_phys, _val)	((*(unsigned int *) KSEG1ADDR(_phys)) = (_val))
@@ -19,8 +18,6 @@
#define ATH724X_PCI_MEM_SIZE	0x08000000

static DEFINE_SPINLOCK(ath724x_pci_lock);
static struct ath724x_pci_data *pci_data;
static int pci_data_size;

static int ath724x_pci_read(struct pci_bus *bus, unsigned int devfn, int where,
			    int size, uint32_t *value)
@@ -133,37 +130,6 @@ static struct pci_controller ath724x_pci_controller = {
	.mem_resource	= &ath724x_mem_resource,
};

void ath724x_pci_add_data(struct ath724x_pci_data *data, int size)
{
	pci_data	= data;
	pci_data_size	= size;
}

int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
{
	unsigned int devfn = dev->devfn;
	int irq = -1;

	if (devfn > pci_data_size - 1)
		return irq;

	irq = pci_data[devfn].irq;

	return irq;
}

int pcibios_plat_dev_init(struct pci_dev *dev)
{
	unsigned int devfn = dev->devfn;

	if (devfn > pci_data_size - 1)
		return PCIBIOS_DEVICE_NOT_FOUND;

	dev->dev.platform_data = pci_data[devfn].pdata;

	return PCIBIOS_SUCCESSFUL;
}

static int __init ath724x_pcibios_init(void)
{
	register_pci_controller(&ath724x_pci_controller);