|
@@ -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 piix_pata_ops = {
|
|
|
.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_info[] = {
|
|
|
/* 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_info[] = {
|
|
|
/* 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);
|
|
|
}
|
|
|
|
|
|
/**
|