libata: convert ata_piix to use new reset mechanism
PATCH 1/1 libata: convert ata_piix to use new reset mechanism
Hello, Jeff.
This patchset is re-spin of [1]. This patchset performs cable detection before proceeding with probe reset as pointed out [2]. This patchset contains three patches. The first one fixes comment above std postreset which indicated that setting cable type is the responsibility of postreset. The last two patches are the piix conversion patches.
Thanks. :-)
--
tejun
[1] http://article.gmane.org/gmane.linux.ide/7968
[2] http://article.gmane.org/gmane.linux.ide/7986
PATCH 1/3 libata: fix comment regarding setting cable type
The comment above ata_std_postreset() specified that setting cable type is the responsibility of postreset(), which isn't possible / optimal depending on controller / driver. This patch kills the comment. Setting cable type is responsibility of ->probe_reset. libata doesn't care whether it's done in probeinit, reset or postreset.
---
drivers/scsi/libata-core.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-)
823d5f6f8de896e7b6437a4f140d807bbab1e7bd
drivers/scsi/libata-core.c +1 -2
@@ -2106,7 +2106,6 @@ int sata_std_hardreset(struct ata_port ** This function is invoked after a successful reset. Note that * the device might have been reset more than once using * different reset methods before postreset is invoked. -* postreset is also reponsible for setting cable type. * * This function is to be used as standard callback for * ata_drive_*_reset().
@@ -2118,7 +2117,7 @@ void ata_std_postreset(struct ata_port * {DPRINTK ("ENTER\n" ); -/* set cable type */ +/* set cable type if it isn't already set */ if (ap->cbl ==ATA_CBL_NONE && ap->flags &ATA_FLAG_SATA ) ap->cbl =ATA_CBL_SATA ;
Signature · 1 line
1.1.5
Re: [PATCH 1/3] libata: fix comment regarding setting cable type
Quoted 8 lines · Tejun Heo
The comment above
ata_std_postreset()specified that setting cable type is the responsibility ofpostreset(), which isn't possible / optimal depending on controller / driver. This patch kills the comment. Setting cable type is responsibility of ->probe_reset. libata doesn't care whether it's done in probeinit, reset or postreset.Signed-off-by Tejun Heo <[email protected]>
applied 1-3
PATCH 2/3 ata_piix: convert pata to new reset mechanism
In reply to Tejun HeoConvert ata_piix pata ->phy_reset to new reset mechanism.
---
drivers/scsi/ata_piix.c | 43 +++++++++++++++++++++++++++---------------- 1 files changed, 27 insertions(+), 16 deletions(-)
79d2bec55755a2941f289a3e0fad5d5922fd00b4
drivers/scsi/ata_piix.c +27 -16
@@ -131,7 +131,7 @@ enum {static int piix_init_one (struct pci_dev *pdev,const struct pci_device_id *ent); -static void piix_pata_phy_reset (struct ata_port *ap); +static int piix_pata_probe_reset (struct ata_port *ap,unsigned int *classes);static void piix_sata_phy_reset (struct ata_port *ap);static void piix_set_piomode (struct ata_port *ap,struct ata_device *adev);static void piix_set_dmamode (struct ata_port *ap,struct ata_device *adev);
@@ -207,7 +207,7 @@ static const struct ata_port_operations .exec_command = ata_exec_command, .dev_select = ata_std_dev_select, - .phy_reset = piix_pata_phy_reset, + .probe_reset = piix_pata_probe_reset, .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start,
@@ -258,8 +258,7 @@ static struct ata_port_info piix_port_in/* ich5_pata */ { .sht = &piix_sht, - .host_flags =ATA_FLAG_SLAVE_POSS |ATA_FLAG_SRST | - PIIX_FLAG_CHECKINTR, + .host_flags = ATA_FLAG_SLAVE_POSS | PIIX_FLAG_CHECKINTR, .pio_mask =0x1f ,/* pio0-4 */ #if 0 .mwdma_mask = 0x06, /* mwdma1-2 */
@@ -284,7 +283,7 @@ static struct ata_port_info piix_port_in/* piix4_pata */ { .sht = &piix_sht, - .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST, + .host_flags = ATA_FLAG_SLAVE_POSS, .pio_mask =0x1f ,/* pio0-4 */ #if 0 .mwdma_mask = 0x06, /* mwdma1-2 */
@@ -366,30 +365,42 @@ cbl40: }/** -* piix_pata_phy_reset - Probe specified port on PATA host controller -* @ap: Port to probe +* piix_pata_probeinit - probeinit for PATA host controller +* @ap: Target port * -* Probe PATA phy. +* Probeinit including cable detection. * * LOCKING: * None (inherited from caller). */ +static void piix_pata_probeinit (struct ata_port *ap) +{ +piix_pata_cbl_detect (ap); +ata_std_probeinit (ap); +} -static void piix_pata_phy_reset (struct ata_port *ap) +/** +* piix_pata_probe_reset - Perform reset on PATA port and classify +* @ap: Port to reset +* @classes: Resulting classes of attached devices +* +* Reset PATA phy and classify attached devices. +* +* LOCKING: +* None (inherited from caller). +*/ +static int piix_pata_probe_reset (struct ata_port *ap,unsigned int *classes) {struct pci_dev *pdev =to_pci_dev (ap->host_set->dev);if (!pci_test_config_bits (pdev, &piix_enable_bits[ap->hard_port_no])) { -ata_port_disable (ap);printk (KERN_INFO "ata%u: port disabled. ignoring.\n" , ap->id); -return ; +return 0 ; } -piix_pata_cbl_detect (ap); - -ata_port_probe (ap); - -ata_bus_reset (ap); +return ata_drive_probe_reset (ap, piix_pata_probeinit, + ata_std_softreset,NULL , + ata_std_postreset, classes); }/**
Signature · 1 line
1.1.5
PATCH 3/3 ata_piix: convert sata to new reset mechanism
In reply to Tejun HeoConvert ata_piix sata ->phy_reset to new reset mechanism.
---
drivers/scsi/ata_piix.c | 35 +++++++++++++++-------------------- 1 files changed, 15 insertions(+), 20 deletions(-)
97913404ed0525f85fd23e20e321fe31a9487267
drivers/scsi/ata_piix.c +15 -20
@@ -132,7 +132,7 @@ static int piix_init_one (struct pci_dev const struct pci_device_id *ent);static int piix_pata_probe_reset (struct ata_port *ap,unsigned int *classes); -static void piix_sata_phy_reset (struct ata_port *ap); +static int piix_sata_probe_reset (struct ata_port *ap,unsigned int *classes);static void piix_set_piomode (struct ata_port *ap,struct ata_device *adev);static void piix_set_dmamode (struct ata_port *ap,struct ata_device *adev);
@@ -235,7 +235,7 @@ static const struct ata_port_operations .exec_command = ata_exec_command, .dev_select = ata_std_dev_select, - .phy_reset = piix_sata_phy_reset, + .probe_reset = piix_sata_probe_reset, .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start,
@@ -272,8 +272,8 @@ static struct ata_port_info piix_port_in/* ich5_sata */ { .sht = &piix_sht, - .host_flags =ATA_FLAG_SATA |ATA_FLAG_SRST | - PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR, + .host_flags =ATA_FLAG_SATA |PIIX_FLAG_COMBINED | + PIIX_FLAG_CHECKINTR, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 */
@@ -297,8 +297,7 @@ static struct ata_port_info piix_port_in/* ich6_sata */ { .sht = &piix_sht, - .host_flags =ATA_FLAG_SATA |ATA_FLAG_SRST | -PIIX_FLAG_COMBINED_ICH6 | + .host_flags =ATA_FLAG_SATA |PIIX_FLAG_COMBINED_ICH6 | PIIX_FLAG_CHECKINTR | ATA_FLAG_SLAVE_POSS, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */
@@ -309,8 +308,7 @@ static struct ata_port_info piix_port_in/* ich6_sata_ahci */ { .sht = &piix_sht, - .host_flags =ATA_FLAG_SATA |ATA_FLAG_SRST | -PIIX_FLAG_COMBINED_ICH6 | + .host_flags =ATA_FLAG_SATA |PIIX_FLAG_COMBINED_ICH6 |PIIX_FLAG_CHECKINTR |ATA_FLAG_SLAVE_POSS | PIIX_FLAG_AHCI, .pio_mask = 0x1f, /* pio0-4 */
@@ -448,28 +446,25 @@ static int piix_sata_probe (struct ata_p }/** -* piix_sata_phy_reset - Probe specified port on SATA host controller -* @ap: Port to probe +* piix_sata_probe_reset - Perform reset on SATA port and classify +* @ap: Port to reset +* @classes: Resulting classes of attached devices * -* Probe SATA phy. +* Reset SATA phy and classify attached devices. * * LOCKING: * None (inherited from caller). */ - -static void piix_sata_phy_reset (struct ata_port *ap) +static int piix_sata_probe_reset (struct ata_port *ap,unsigned int *classes) {if (!piix_sata_probe (ap)) { -ata_port_disable (ap);printk (KERN_INFO "ata%u: SATA port has no device.\n" , ap->id); -return ; +return 0 ; } - ap->cbl =ATA_CBL_SATA ; - -ata_port_probe (ap); - -ata_bus_reset (ap); +return ata_drive_probe_reset (ap, ata_std_probeinit, + ata_std_softreset,NULL , + ata_std_postreset, classes); }/**
Signature · 1 line
1.1.5