Commit e59f0dad authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

sata_sil24: replace sil24_update_tf() with sil24_read_tf()

Replace sil24_update_tf() to sil24_read_tf() which reads TF into
passed int result TF argument and can read TFs of PMP links.  This
will be used by PMP support.
Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent a9cf5e85
...@@ -464,15 +464,15 @@ static void sil24_dev_config(struct ata_device *dev) ...@@ -464,15 +464,15 @@ static void sil24_dev_config(struct ata_device *dev)
writel(PORT_CS_CDB16, port + PORT_CTRL_CLR); writel(PORT_CS_CDB16, port + PORT_CTRL_CLR);
} }
static inline void sil24_update_tf(struct ata_port *ap) static void sil24_read_tf(struct ata_port *ap, int tag, struct ata_taskfile *tf)
{ {
struct sil24_port_priv *pp = ap->private_data;
void __iomem *port = ap->ioaddr.cmd_addr; void __iomem *port = ap->ioaddr.cmd_addr;
struct sil24_prb __iomem *prb = port; struct sil24_prb __iomem *prb;
u8 fis[6 * 4]; u8 fis[6 * 4];
memcpy_fromio(fis, prb->fis, 6 * 4); prb = port + PORT_LRAM + sil24_tag(tag) * PORT_LRAM_SLOT_SZ;
ata_tf_from_fis(fis, &pp->tf); memcpy_fromio(fis, prb->fis, sizeof(fis));
ata_tf_from_fis(fis, tf);
} }
static u8 sil24_check_status(struct ata_port *ap) static u8 sil24_check_status(struct ata_port *ap)
...@@ -538,6 +538,7 @@ static int sil24_softreset(struct ata_port *ap, unsigned int *class, ...@@ -538,6 +538,7 @@ static int sil24_softreset(struct ata_port *ap, unsigned int *class,
struct sil24_port_priv *pp = ap->private_data; struct sil24_port_priv *pp = ap->private_data;
struct sil24_prb *prb = &pp->cmd_block[0].ata.prb; struct sil24_prb *prb = &pp->cmd_block[0].ata.prb;
dma_addr_t paddr = pp->cmd_block_dma; dma_addr_t paddr = pp->cmd_block_dma;
struct ata_taskfile tf;
u32 mask, irq_stat; u32 mask, irq_stat;
const char *reason; const char *reason;
...@@ -577,8 +578,8 @@ static int sil24_softreset(struct ata_port *ap, unsigned int *class, ...@@ -577,8 +578,8 @@ static int sil24_softreset(struct ata_port *ap, unsigned int *class,
goto err; goto err;
} }
sil24_update_tf(ap); sil24_read_tf(ap, 0, &tf);
*class = ata_dev_classify(&pp->tf); *class = ata_dev_classify(&tf);
if (*class == ATA_DEV_UNKNOWN) if (*class == ATA_DEV_UNKNOWN)
*class = ATA_DEV_NONE; *class = ATA_DEV_NONE;
...@@ -754,6 +755,7 @@ static void sil24_thaw(struct ata_port *ap) ...@@ -754,6 +755,7 @@ static void sil24_thaw(struct ata_port *ap)
static void sil24_error_intr(struct ata_port *ap) static void sil24_error_intr(struct ata_port *ap)
{ {
void __iomem *port = ap->ioaddr.cmd_addr; void __iomem *port = ap->ioaddr.cmd_addr;
struct sil24_port_priv *pp = ap->private_data;
struct ata_eh_info *ehi = &ap->eh_info; struct ata_eh_info *ehi = &ap->eh_info;
int freeze = 0; int freeze = 0;
u32 irq_stat; u32 irq_stat;
...@@ -808,7 +810,7 @@ static void sil24_error_intr(struct ata_port *ap) ...@@ -808,7 +810,7 @@ static void sil24_error_intr(struct ata_port *ap)
/* record error info */ /* record error info */
qc = ata_qc_from_tag(ap, ap->active_tag); qc = ata_qc_from_tag(ap, ap->active_tag);
if (qc) { if (qc) {
sil24_update_tf(ap); sil24_read_tf(ap, qc->tag, &pp->tf);
qc->err_mask |= err_mask; qc->err_mask |= err_mask;
} else } else
ehi->err_mask |= err_mask; ehi->err_mask |= err_mask;
...@@ -825,8 +827,11 @@ static void sil24_error_intr(struct ata_port *ap) ...@@ -825,8 +827,11 @@ static void sil24_error_intr(struct ata_port *ap)
static void sil24_finish_qc(struct ata_queued_cmd *qc) static void sil24_finish_qc(struct ata_queued_cmd *qc)
{ {
struct ata_port *ap = qc->ap;
struct sil24_port_priv *pp = ap->private_data;
if (qc->flags & ATA_QCFLAG_RESULT_TF) if (qc->flags & ATA_QCFLAG_RESULT_TF)
sil24_update_tf(qc->ap); sil24_read_tf(ap, qc->tag, &pp->tf);
} }
static inline void sil24_host_intr(struct ata_port *ap) static inline void sil24_host_intr(struct ata_port *ap)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment