sh: add reg_base member to pci_channel
Store the base address of the pci host controller registers in struct pci_channel and use the address in pci_read_reg() and pci_write_reg(). Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
Родитель
b6706ef10f
Коммит
e4c6a3604e
|
@ -121,8 +121,8 @@ int __init sh4_pci_check_direct(struct pci_channel *chan)
|
||||||
if (pci_read_reg(chan, SH4_PCIPAR) == P1SEG) {
|
if (pci_read_reg(chan, SH4_PCIPAR) == P1SEG) {
|
||||||
pci_write_reg(chan, tmp, SH4_PCIPAR);
|
pci_write_reg(chan, tmp, SH4_PCIPAR);
|
||||||
printk(KERN_INFO "PCI: Using configuration type 1\n");
|
printk(KERN_INFO "PCI: Using configuration type 1\n");
|
||||||
request_region(PCI_REG(SH4_PCIPAR), 8, "PCI conf1");
|
request_region(chan->reg_base + SH4_PCIPAR, 8,
|
||||||
|
"PCI conf1");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,13 +171,13 @@ struct sh4_pci_address_map {
|
||||||
static inline void pci_write_reg(struct pci_channel *chan,
|
static inline void pci_write_reg(struct pci_channel *chan,
|
||||||
unsigned long val, unsigned long reg)
|
unsigned long val, unsigned long reg)
|
||||||
{
|
{
|
||||||
ctrl_outl(val, PCI_REG(reg));
|
ctrl_outl(val, chan->reg_base + reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long pci_read_reg(struct pci_channel *chan,
|
static inline unsigned long pci_read_reg(struct pci_channel *chan,
|
||||||
unsigned long reg)
|
unsigned long reg)
|
||||||
{
|
{
|
||||||
return ctrl_inl(PCI_REG(reg));
|
return ctrl_inl(chan->reg_base + reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __PCI_SH4_H */
|
#endif /* __PCI_SH4_H */
|
||||||
|
|
|
@ -39,6 +39,8 @@ int __init sh7751_pci_init(struct pci_channel *chan)
|
||||||
|
|
||||||
pr_debug("PCI: Starting intialization.\n");
|
pr_debug("PCI: Starting intialization.\n");
|
||||||
|
|
||||||
|
chan->reg_base = 0xfe200000;
|
||||||
|
|
||||||
/* check for SH7751/SH7751R hardware */
|
/* check for SH7751/SH7751R hardware */
|
||||||
id = pci_read_reg(chan, SH7751_PCICONF0);
|
id = pci_read_reg(chan, SH7751_PCICONF0);
|
||||||
if (id != ((SH7751_DEVICE_ID << 16) | SH7751_VENDOR_ID) &&
|
if (id != ((SH7751_DEVICE_ID << 16) | SH7751_VENDOR_ID) &&
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#define SH7751_PCI_IO_SIZE 0x40000 /* Size of IO window */
|
#define SH7751_PCI_IO_SIZE 0x40000 /* Size of IO window */
|
||||||
|
|
||||||
#define SH7751_PCIREG_BASE 0xFE200000 /* PCI regs base address */
|
#define SH7751_PCIREG_BASE 0xFE200000 /* PCI regs base address */
|
||||||
#define PCI_REG(n) (SH7751_PCIREG_BASE+ n)
|
|
||||||
|
|
||||||
#define SH7751_PCICONF0 0x0 /* PCI Config Reg 0 */
|
#define SH7751_PCICONF0 0x0 /* PCI Config Reg 0 */
|
||||||
#define SH7751_PCICONF0_DEVID 0xFFFF0000 /* Device ID */
|
#define SH7751_PCICONF0_DEVID 0xFFFF0000 /* Device ID */
|
||||||
|
|
|
@ -52,6 +52,8 @@ int __init sh7780_pci_init(struct pci_channel *chan)
|
||||||
|
|
||||||
pr_debug("PCI: Starting intialization.\n");
|
pr_debug("PCI: Starting intialization.\n");
|
||||||
|
|
||||||
|
chan->reg_base = 0xfe040000;
|
||||||
|
|
||||||
ctrl_outl(0x00000001, SH7780_PCI_VCR2); /* Enable PCIC */
|
ctrl_outl(0x00000001, SH7780_PCI_VCR2); /* Enable PCIC */
|
||||||
|
|
||||||
/* check for SH7780/SH7780R hardware */
|
/* check for SH7780/SH7780R hardware */
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
#define SH7780_PCI_IO_SIZE 0x00400000 /* Size of IO window */
|
#define SH7780_PCI_IO_SIZE 0x00400000 /* Size of IO window */
|
||||||
|
|
||||||
#define SH7780_PCIREG_BASE 0xFE040000 /* PCI regs base address */
|
#define SH7780_PCIREG_BASE 0xFE040000 /* PCI regs base address */
|
||||||
#define PCI_REG(n) (SH7780_PCIREG_BASE+n)
|
|
||||||
|
|
||||||
/* SH7780 PCI Config Registers */
|
/* SH7780 PCI Config Registers */
|
||||||
#define SH7780_PCIVID 0x000 /* Vendor ID */
|
#define SH7780_PCIVID 0x000 /* Vendor ID */
|
||||||
|
|
|
@ -24,6 +24,7 @@ struct pci_channel {
|
||||||
int first_devfn;
|
int first_devfn;
|
||||||
int last_devfn;
|
int last_devfn;
|
||||||
int enabled;
|
int enabled;
|
||||||
|
unsigned long reg_base;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче