From a13d496456722ca2f668a27be588c91ae5a888db Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Mon, 7 Apr 2008 22:47:20 +0900 Subject: [PATCH] --- yaml --- r: 89270 b: refs/heads/master c: 5958e3025fd9d97429163e074d9cfa3848f51f28 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/ata/libata-core.c | 3 +-- trunk/drivers/ata/libata-eh.c | 5 +++++ trunk/drivers/ata/libata-pmp.c | 35 --------------------------------- trunk/drivers/ata/sata_sil24.c | 2 +- trunk/include/linux/libata.h | 2 -- 6 files changed, 8 insertions(+), 41 deletions(-) diff --git a/[refs] b/[refs] index f6a0d6f933d4..82c604e7f44d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ac371987a81c61c2efbd6931245cdcaf43baad89 +refs/heads/master: 5958e3025fd9d97429163e074d9cfa3848f51f28 diff --git a/trunk/drivers/ata/libata-core.c b/trunk/drivers/ata/libata-core.c index e00b620f161a..2da579b46bdd 100644 --- a/trunk/drivers/ata/libata-core.c +++ b/trunk/drivers/ata/libata-core.c @@ -91,7 +91,7 @@ const struct ata_port_operations sata_pmp_port_ops = { .inherits = &sata_port_ops, .pmp_prereset = ata_std_prereset, - .pmp_hardreset = sata_pmp_std_hardreset, + .pmp_hardreset = sata_std_hardreset, .pmp_postreset = ata_std_postreset, .error_handler = sata_pmp_error_handler, }; @@ -6307,7 +6307,6 @@ EXPORT_SYMBOL_GPL(ata_pci_device_resume); #endif /* CONFIG_PCI */ EXPORT_SYMBOL_GPL(sata_pmp_qc_defer_cmd_switch); -EXPORT_SYMBOL_GPL(sata_pmp_std_hardreset); EXPORT_SYMBOL_GPL(sata_pmp_error_handler); EXPORT_SYMBOL_GPL(__ata_ehi_push_desc); diff --git a/trunk/drivers/ata/libata-eh.c b/trunk/drivers/ata/libata-eh.c index 21687bbd9a70..d8c4a45dcf26 100644 --- a/trunk/drivers/ata/libata-eh.c +++ b/trunk/drivers/ata/libata-eh.c @@ -2276,6 +2276,11 @@ int ata_eh_reset(struct ata_link *link, int classify, return rc; fail: + /* if SCR isn't accessible on a fan-out port, PMP needs to be reset */ + if (!ata_is_host_link(link) && + sata_scr_read(link, SCR_STATUS, &sstatus)) + rc = -ERESTART; + if (rc == -ERESTART || try >= max_tries) goto out; diff --git a/trunk/drivers/ata/libata-pmp.c b/trunk/drivers/ata/libata-pmp.c index 2f8a9577c26d..9c998611b644 100644 --- a/trunk/drivers/ata/libata-pmp.c +++ b/trunk/drivers/ata/libata-pmp.c @@ -175,41 +175,6 @@ int sata_pmp_scr_write(struct ata_link *link, int reg, u32 val) return 0; } -/** - * sata_pmp_std_hardreset - standard hardreset method for PMP link - * @link: link to be reset - * @class: resulting class of attached device - * @deadline: deadline jiffies for the operation - * - * Hardreset PMP port @link. Note that this function doesn't - * wait for BSY clearance. There simply isn't a generic way to - * wait the event. Instead, this function return -EAGAIN thus - * telling libata-EH to followup with softreset. - * - * LOCKING: - * Kernel thread context (may sleep) - * - * RETURNS: - * 0 on success, -errno otherwise. - */ -int sata_pmp_std_hardreset(struct ata_link *link, unsigned int *class, - unsigned long deadline) -{ - u32 tmp; - int rc; - - DPRINTK("ENTER\n"); - - rc = sata_std_hardreset(link, class, deadline); - - /* if SCR isn't accessible, we need to reset the PMP */ - if (rc && rc != -EAGAIN && sata_scr_read(link, SCR_STATUS, &tmp)) - rc = -ERESTART; - - DPRINTK("EXIT, rc=%d\n", rc); - return rc; -} - /** * sata_pmp_read_gscr - read GSCR block of SATA PMP * @dev: PMP device diff --git a/trunk/drivers/ata/sata_sil24.c b/trunk/drivers/ata/sata_sil24.c index b83851f6e068..fc9d48cd8122 100644 --- a/trunk/drivers/ata/sata_sil24.c +++ b/trunk/drivers/ata/sata_sil24.c @@ -944,7 +944,7 @@ static int sil24_pmp_hardreset(struct ata_link *link, unsigned int *class, return rc; } - return sata_pmp_std_hardreset(link, class, deadline); + return sata_std_hardreset(link, class, deadline); } static void sil24_freeze(struct ata_port *ap) diff --git a/trunk/include/linux/libata.h b/trunk/include/linux/libata.h index b9188371b12a..2b5a0b77e179 100644 --- a/trunk/include/linux/libata.h +++ b/trunk/include/linux/libata.h @@ -1025,8 +1025,6 @@ static inline int ata_acpi_cbl_80wire(struct ata_port *ap, * PMP - drivers/ata/libata-pmp.c */ extern int sata_pmp_qc_defer_cmd_switch(struct ata_queued_cmd *qc); -extern int sata_pmp_std_hardreset(struct ata_link *link, unsigned int *class, - unsigned long deadline); extern void sata_pmp_error_handler(struct ata_port *ap); /*