pata_atiixp: add proper ->prereset method
PATCH 1/1 pata_atiixp: add proper ->prereset method
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] pata_atiixp: add proper ->prereset method
Fixes PCI access before PCI resources are allocated.
---
earlier references:
https://lkml.org/lkml/2009/11/25/320
drivers/ata/pata_atiixp.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-)
drivers/ata/pata_atiixp.c +26 -9
@@ -49,6 +49,31 @@ static int atiixp_cable_detect(struct atstatic DEFINE_SPINLOCK (atiixp_lock);/** +* atiixp_prereset - perform reset handling +* @link: ATA link +* @deadline: deadline jiffies for the operation +* +* Reset sequence checking enable bits to see which ports are +* active. +*/ + +static int atiixp_prereset (struct ata_link *link,unsigned long deadline) +{ +static const struct pci_bits atiixp_enable_bits[] = { + {0x48 ,1 ,0x01 ,0x00 }, + {0x48 ,1 ,0x08 ,0x00 } + }; + +struct ata_port *ap = link->ap; +struct pci_dev *pdev =to_pci_dev (ap->host->dev); + +if (!pci_test_config_bits (pdev, &atiixp_enable_bits[ap->port_no])) +return -ENOENT ; + +return ata_sff_prereset (link, deadline); +} + +/** * atiixp_set_pio_timing - set initial PIO mode data * @ap: ATA interface * @adev: ATA device
@@ -221,6 +246,7 @@ static struct ata_port_operations atiixp .bmdma_start = atiixp_bmdma_start, .bmdma_stop = atiixp_bmdma_stop, + .prereset = atiixp_prereset, .cable_detect = atiixp_cable_detect, .set_piomode = atiixp_set_piomode, .set_dmamode = atiixp_set_dmamode,
@@ -235,16 +261,7 @@ static int atiixp_init_one(struct pci_de .udma_mask = ATA_UDMA5, .port_ops = &atiixp_port_ops }; -static const struct pci_bits atiixp_enable_bits[] = { - {0x48 ,1 ,0x01 ,0x00 }, - {0x48 ,1 ,0x08 ,0x00 } - };const struct ata_port_info *ppi[] = { &info, &info }; -int i; - -for (i =0 ; i <2 ; i++) -if (!pci_test_config_bits (pdev, &atiixp_enable_bits[i])) - ppi[i] = &ata_dummy_port_info;return ata_pci_bmdma_init_one (pdev, ppi, &atiixp_sht,NULL ,ATA_HOST_PARALLEL_SCAN );
Quoted 6 lines · On Tue, 11 Oct 2011 19:55:09 +0200 Bartlomiej Zolnierkiewicz…
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH]pata_atiixp: add proper ->prereset methodFixes PCI access before PCI resources are allocated.
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
Hello.
Quoted 4 lines · Bartlomiej Zolnierkiewicz
From: Bartlomiej Zolnierkiewicz<[email protected]>
Subject: [PATCH]pata_atiixp: add proper ->prereset methodFixes PCI access before PCI resources are allocated.
Hm, didn't understand this...
Quoted 12 lines
Signed-off-by Bartlomiej Zolnierkiewicz<[email protected]>---
earlier references:
https://lkml.org/lkml/2009/11/25/320drivers/ata/pata_atiixp.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-)Index:
b/drivers/ata/pata_atiixp.c
===================================================================drivers/ata/pata_atiixp.c +0
-0
[...]
Quoted 4 lines
drivers/ata/pata_atiixp.c +0
-0@@ -235,16 +261,7 @@ static int atiixp_init_one(struct pci_de .udma_mask = ATA_UDMA5, .port_ops =&atiixp_port_ops };
drivers/ata/pata_atiixp.c static int atiixp_init_one(struct pci_de · line 247
Quoted 10 lines
drivers/ata/pata_atiixp.c +0
-9-static const struct pci_bits atiixp_enable_bits[] = { - {0x48 ,1 ,0x01 ,0x00 }, - {0x48 ,1 ,0x08 ,0x00 } - };const struct ata_port_info *ppi[] = {&info,&info }; -int i; - -for (i =0 ; i<2 ; i++) -if (!pci_test_config_bits (pdev,&atiixp_enable_bits[i])) - ppi[i] =&ata_dummy_port_info;
But this seems more safe method than prereset() as it should really avoid
accessing the disabled IDE ports (which blows up on non-x86)... didn't understand why this is incorrect...
WBR, Sergei