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

Commit 8cdf92a9 authored by David Woodhouse's avatar David Woodhouse Committed by Jeff Garzik
Browse files

Fix Maple PATA IRQ assignment.



On the Maple board, the AMD8111 IDE is in legacy mode... except that it
appears on IRQ 20 instead of IRQ 15. For drivers/ide this was handled by
the architecture's "pci_get_legacy_ide_irq()" function, but in libata we
just hard-code the numbers 14 and 15.

This patch provides asm-powerpc/libata-portmap.h which maps the IRQ as
appropriate, having added a pci_dev argument to the
ATA_{PRIM,SECOND}ARY_IRQ macros.

There's probably a better way to do this -- especially if we observe
that the _only_ case in which this seemingly-generic
"pci_get_legacy_ide_irq()" function returns anything other than 14 and
15 for primary and secondary respectively is the case of the AMD8111 on
the Maple board -- couldn't we handle that with a special case in the
pata_amd driver, or perhaps with a PCI quirk for Maple to switch it into
native mode during early boot and assign resources properly?

Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent dfd7a3db
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -484,6 +484,7 @@ config PPC_MAPLE
	select PPC_970_NAP
	select PPC_970_NAP
	select PPC_NATIVE
	select PPC_NATIVE
	select PPC_RTAS
	select PPC_RTAS
	select ATA_NONSTANDARD if ATA
	default n
	default n
	help
	help
          This option enables support for the Maple 970FX Evaluation Board.
          This option enables support for the Maple 970FX Evaluation Board.
+4 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,10 @@ config ATA


if ATA
if ATA


config ATA_NONSTANDARD
       bool
       default n

config SATA_AHCI
config SATA_AHCI
	tristate "AHCI SATA support"
	tristate "AHCI SATA support"
	depends on PCI
	depends on PCI
+3 −3
Original line number Original line Diff line number Diff line
@@ -917,7 +917,7 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev,
	probe_ent->irq_flags = IRQF_SHARED;
	probe_ent->irq_flags = IRQF_SHARED;


	if (port_mask & ATA_PORT_PRIMARY) {
	if (port_mask & ATA_PORT_PRIMARY) {
		probe_ent->irq = ATA_PRIMARY_IRQ;
		probe_ent->irq = ATA_PRIMARY_IRQ(pdev);
		probe_ent->port[0].cmd_addr = ATA_PRIMARY_CMD;
		probe_ent->port[0].cmd_addr = ATA_PRIMARY_CMD;
		probe_ent->port[0].altstatus_addr =
		probe_ent->port[0].altstatus_addr =
		probe_ent->port[0].ctl_addr = ATA_PRIMARY_CTL;
		probe_ent->port[0].ctl_addr = ATA_PRIMARY_CTL;
@@ -933,9 +933,9 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev,


	if (port_mask & ATA_PORT_SECONDARY) {
	if (port_mask & ATA_PORT_SECONDARY) {
		if (probe_ent->irq)
		if (probe_ent->irq)
			probe_ent->irq2 = ATA_SECONDARY_IRQ;
			probe_ent->irq2 = ATA_SECONDARY_IRQ(pdev);
		else
		else
			probe_ent->irq = ATA_SECONDARY_IRQ;
			probe_ent->irq = ATA_SECONDARY_IRQ(pdev);
		probe_ent->port[1].cmd_addr = ATA_SECONDARY_CMD;
		probe_ent->port[1].cmd_addr = ATA_SECONDARY_CMD;
		probe_ent->port[1].altstatus_addr =
		probe_ent->port[1].altstatus_addr =
		probe_ent->port[1].ctl_addr = ATA_SECONDARY_CTL;
		probe_ent->port[1].ctl_addr = ATA_SECONDARY_CTL;
+2 −2
Original line number Original line Diff line number Diff line
@@ -3,10 +3,10 @@


#define ATA_PRIMARY_CMD		0x1F0
#define ATA_PRIMARY_CMD		0x1F0
#define ATA_PRIMARY_CTL		0x3F6
#define ATA_PRIMARY_CTL		0x3F6
#define ATA_PRIMARY_IRQ		14
#define ATA_PRIMARY_IRQ(dev)	14


#define ATA_SECONDARY_CMD	0x170
#define ATA_SECONDARY_CMD	0x170
#define ATA_SECONDARY_CTL	0x376
#define ATA_SECONDARY_CTL	0x376
#define ATA_SECONDARY_IRQ	15
#define ATA_SECONDARY_IRQ(dev)	15


#endif
#endif
+12 −0
Original line number Original line Diff line number Diff line
#ifndef __ASM_POWERPC_LIBATA_PORTMAP_H
#define __ASM_POWERPC_LIBATA_PORTMAP_H

#define ATA_PRIMARY_CMD	0x1F0
#define ATA_PRIMARY_CTL	0x3F6
#define ATA_PRIMARY_IRQ(dev)	pci_get_legacy_ide_irq(dev, 0)

#define ATA_SECONDARY_CMD	0x170
#define ATA_SECONDARY_CTL	0x376
#define ATA_SECONDARY_IRQ(dev)	pci_get_legacy_ide_irq(dev, 1)

#endif