sh: pci io port base address code
Adds a __get_pci_io_base() function which is used to match a port range against struct pci_channel. This allows us to detect if a port range is assigned to pci or happens to be legacy port io. While at it, remove unused cpu-specific cruft. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
Родитель
ef339f241b
Коммит
8ce0143b11
|
@ -68,7 +68,6 @@ static struct sh4_pci_address_map sh7751_pci_map = {
|
||||||
|
|
||||||
int __init pcibios_init_platform(void)
|
int __init pcibios_init_platform(void)
|
||||||
{
|
{
|
||||||
__set_io_port_base(SH7751_PCI_IO_BASE);
|
|
||||||
return sh7751_pcic_init(&board_pci_channels[0], &sh7751_pci_map);
|
return sh7751_pcic_init(&board_pci_channels[0], &sh7751_pci_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,33 +38,6 @@ extern struct pci_channel board_pci_channels[];
|
||||||
#define PCIBIOS_MIN_IO __PCI_CHAN(bus)->io_resource->start
|
#define PCIBIOS_MIN_IO __PCI_CHAN(bus)->io_resource->start
|
||||||
#define PCIBIOS_MIN_MEM __PCI_CHAN(bus)->mem_resource->start
|
#define PCIBIOS_MIN_MEM __PCI_CHAN(bus)->mem_resource->start
|
||||||
|
|
||||||
/*
|
|
||||||
* I/O routine helpers
|
|
||||||
*/
|
|
||||||
#if defined(CONFIG_CPU_SUBTYPE_SH7780) || defined(CONFIG_CPU_SUBTYPE_SH7785)
|
|
||||||
#define PCI_IO_AREA 0xFE400000
|
|
||||||
#define PCI_IO_SIZE 0x00400000
|
|
||||||
#elif defined(CONFIG_CPU_SH5)
|
|
||||||
extern unsigned long PCI_IO_AREA;
|
|
||||||
#define PCI_IO_SIZE 0x00010000
|
|
||||||
#else
|
|
||||||
#define PCI_IO_AREA 0xFE240000
|
|
||||||
#define PCI_IO_SIZE 0x00040000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PCI_MEM_SIZE 0x01000000
|
|
||||||
|
|
||||||
#define SH4_PCIIOBR_MASK 0xFFFC0000
|
|
||||||
#define pci_ioaddr(addr) (PCI_IO_AREA + (addr & ~SH4_PCIIOBR_MASK))
|
|
||||||
|
|
||||||
#if defined(CONFIG_PCI)
|
|
||||||
#define is_pci_ioaddr(port) \
|
|
||||||
(((port) >= PCIBIOS_MIN_IO) && \
|
|
||||||
((port) < (PCIBIOS_MIN_IO + PCI_IO_SIZE)))
|
|
||||||
#else
|
|
||||||
#define is_pci_ioaddr(port) (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct pci_dev;
|
struct pci_dev;
|
||||||
|
|
||||||
extern void pcibios_set_master(struct pci_dev *dev);
|
extern void pcibios_set_master(struct pci_dev *dev);
|
||||||
|
@ -137,11 +110,31 @@ static inline int __is_pci_memory(unsigned long phys_addr, unsigned long size)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __iomem *__get_pci_io_base(unsigned long port,
|
||||||
|
unsigned long size)
|
||||||
|
{
|
||||||
|
struct pci_channel *p;
|
||||||
|
struct resource *res;
|
||||||
|
|
||||||
|
for (p = board_pci_channels; p->init; p++) {
|
||||||
|
res = p->io_resource;
|
||||||
|
if (p->enabled && (port >= res->start) &&
|
||||||
|
(port + size) <= (res->end + 1))
|
||||||
|
return (void __iomem *)(p->io_base + port);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
static inline int __is_pci_memory(unsigned long phys_addr, unsigned long size)
|
static inline int __is_pci_memory(unsigned long phys_addr, unsigned long size)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
static inline void __iomem *__get_pci_io_base(unsigned long port,
|
||||||
|
unsigned long size)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Board-specific fixup routines. */
|
/* Board-specific fixup routines. */
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
@ -69,6 +70,10 @@ void __iomem *ioport_map(unsigned long port, unsigned int nr)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = __get_pci_io_base(port, nr);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return __ioport_map(port, nr);
|
return __ioport_map(port, nr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ioport_map);
|
EXPORT_SYMBOL(ioport_map);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче