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: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
a9cf5e8581
commit
e59f0dad33
|
@ -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,
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
/* 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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue