Commit 0bbc9bc3 authored by Paul Mundt's avatar Paul Mundt

sh: pci: Set class/sub-class code correctly for SH7780 PCIC.

The SH7780 PCI host controller implements a configuration header that
requires a fair bit of hand-holding to initialize properly. By default
it appears as a pre-2.0 host controller given the zeroed out class code,
so fix this up properly.

Some boards that happened to be using the R7780RP version of the PCIC
fixups had set this correctly, but this belongs in the standard
initialization, and is by no means board specific.
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 7e4ba0d7
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
int pci_fixup_pcic(struct pci_channel *chan) int pci_fixup_pcic(struct pci_channel *chan)
{ {
ctrl_outl(0x00000001, SH7780_PCI_VCR2);
/* Enable all interrupts, so we know what to fix */ /* Enable all interrupts, so we know what to fix */
pci_write_reg(chan, 0x0000C3FF, SH7780_PCIIMR); pci_write_reg(chan, 0x0000C3FF, SH7780_PCIIMR);
pci_write_reg(chan, 0x0000380F, SH7780_PCIAINTM); pci_write_reg(chan, 0x0000380F, SH7780_PCIAINTM);
...@@ -26,8 +24,6 @@ int pci_fixup_pcic(struct pci_channel *chan) ...@@ -26,8 +24,6 @@ int pci_fixup_pcic(struct pci_channel *chan)
pci_write_reg(chan, 0xFB00, SH7780_PCISTATUS); pci_write_reg(chan, 0xFB00, SH7780_PCISTATUS);
pci_write_reg(chan, 0x0047, SH7780_PCICMD); pci_write_reg(chan, 0x0047, SH7780_PCICMD);
pci_write_reg(chan, 0x00, SH7780_PCIPIF); pci_write_reg(chan, 0x00, SH7780_PCIPIF);
pci_write_reg(chan, 0x00, SH7780_PCISUB);
pci_write_reg(chan, 0x06, SH7780_PCIBCC);
pci_write_reg(chan, 0x1912, SH7780_PCISVID); pci_write_reg(chan, 0x1912, SH7780_PCISVID);
pci_write_reg(chan, 0x0001, SH7780_PCISID); pci_write_reg(chan, 0x0001, SH7780_PCISID);
......
...@@ -72,16 +72,15 @@ int __init sh7780_pcic_init(struct pci_channel *chan, ...@@ -72,16 +72,15 @@ int __init sh7780_pcic_init(struct pci_channel *chan,
{ {
u32 word; u32 word;
pci_write_reg(chan, PCI_CLASS_BRIDGE_HOST >> 8, SH7780_PCIBCC);
pci_write_reg(chan, PCI_CLASS_BRIDGE_HOST & 0xff, SH7780_PCISUB);
/* set the command/status bits to: /* set the command/status bits to:
* Wait Cycle Control + Parity Enable + Bus Master + * Wait Cycle Control + Parity Enable + Bus Master +
* Mem space enable * Mem space enable
*/ */
pci_write_reg(chan, 0x00000046, SH7780_PCICMD); pci_write_reg(chan, 0x00000046, SH7780_PCICMD);
/* define this host as the host bridge */
word = PCI_BASE_CLASS_BRIDGE << 24;
pci_write_reg(chan, word, SH7780_PCIRID);
/* Set IO and Mem windows to local address /* Set IO and Mem windows to local address
* Make PCI and local address the same for easy 1 to 1 mapping * Make PCI and local address the same for easy 1 to 1 mapping
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment