|
@@ -1039,12 +1039,15 @@ static void sata_fsl_error_intr(struct ata_port *ap)
|
|
|
|
|
|
/* find out the offending link and qc */
|
|
|
if (ap->nr_pmp_links) {
|
|
|
+ unsigned int dev_num;
|
|
|
+
|
|
|
dereg = ioread32(hcr_base + DE);
|
|
|
iowrite32(dereg, hcr_base + DE);
|
|
|
iowrite32(cereg, hcr_base + CE);
|
|
|
|
|
|
- if (dereg < ap->nr_pmp_links) {
|
|
|
- link = &ap->pmp_link[dereg];
|
|
|
+ dev_num = ffs(dereg) - 1;
|
|
|
+ if (dev_num < ap->nr_pmp_links && dereg != 0) {
|
|
|
+ link = &ap->pmp_link[dev_num];
|
|
|
ehi = &link->eh_info;
|
|
|
qc = ata_qc_from_tag(ap, link->active_tag);
|
|
|
/*
|