[libata] remove ata_chk_err(), ->check_err() hook.
We now depend on ->tf_read() to provide us with the contents of the Error shadow register.
This commit is contained in:
parent
be15cd72d2
commit
0169e284f6
|
@ -192,7 +192,6 @@ static void ahci_port_stop(struct ata_port *ap);
|
||||||
static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
|
static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
|
||||||
static void ahci_qc_prep(struct ata_queued_cmd *qc);
|
static void ahci_qc_prep(struct ata_queued_cmd *qc);
|
||||||
static u8 ahci_check_status(struct ata_port *ap);
|
static u8 ahci_check_status(struct ata_port *ap);
|
||||||
static u8 ahci_check_err(struct ata_port *ap);
|
|
||||||
static inline int ahci_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
|
static inline int ahci_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
|
||||||
static void ahci_remove_one (struct pci_dev *pdev);
|
static void ahci_remove_one (struct pci_dev *pdev);
|
||||||
|
|
||||||
|
@ -221,7 +220,6 @@ static const struct ata_port_operations ahci_ops = {
|
||||||
|
|
||||||
.check_status = ahci_check_status,
|
.check_status = ahci_check_status,
|
||||||
.check_altstatus = ahci_check_status,
|
.check_altstatus = ahci_check_status,
|
||||||
.check_err = ahci_check_err,
|
|
||||||
.dev_select = ata_noop_dev_select,
|
.dev_select = ata_noop_dev_select,
|
||||||
|
|
||||||
.tf_read = ahci_tf_read,
|
.tf_read = ahci_tf_read,
|
||||||
|
@ -458,13 +456,6 @@ static u8 ahci_check_status(struct ata_port *ap)
|
||||||
return readl(mmio + PORT_TFDATA) & 0xFF;
|
return readl(mmio + PORT_TFDATA) & 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 ahci_check_err(struct ata_port *ap)
|
|
||||||
{
|
|
||||||
void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr;
|
|
||||||
|
|
||||||
return (readl(mmio + PORT_TFDATA) >> 8) & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
|
static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
|
||||||
{
|
{
|
||||||
struct ahci_port_priv *pp = ap->private_data;
|
struct ahci_port_priv *pp = ap->private_data;
|
||||||
|
|
|
@ -371,7 +371,7 @@ static void ata_tf_read_pio(struct ata_port *ap, struct ata_taskfile *tf)
|
||||||
struct ata_ioports *ioaddr = &ap->ioaddr;
|
struct ata_ioports *ioaddr = &ap->ioaddr;
|
||||||
|
|
||||||
tf->command = ata_check_status(ap);
|
tf->command = ata_check_status(ap);
|
||||||
tf->feature = ata_chk_err(ap);
|
tf->feature = inb(ioaddr->error_addr);
|
||||||
tf->nsect = inb(ioaddr->nsect_addr);
|
tf->nsect = inb(ioaddr->nsect_addr);
|
||||||
tf->lbal = inb(ioaddr->lbal_addr);
|
tf->lbal = inb(ioaddr->lbal_addr);
|
||||||
tf->lbam = inb(ioaddr->lbam_addr);
|
tf->lbam = inb(ioaddr->lbam_addr);
|
||||||
|
@ -405,7 +405,7 @@ static void ata_tf_read_mmio(struct ata_port *ap, struct ata_taskfile *tf)
|
||||||
struct ata_ioports *ioaddr = &ap->ioaddr;
|
struct ata_ioports *ioaddr = &ap->ioaddr;
|
||||||
|
|
||||||
tf->command = ata_check_status(ap);
|
tf->command = ata_check_status(ap);
|
||||||
tf->feature = ata_chk_err(ap);
|
tf->feature = readb((void __iomem *)ioaddr->error_addr);
|
||||||
tf->nsect = readb((void __iomem *)ioaddr->nsect_addr);
|
tf->nsect = readb((void __iomem *)ioaddr->nsect_addr);
|
||||||
tf->lbal = readb((void __iomem *)ioaddr->lbal_addr);
|
tf->lbal = readb((void __iomem *)ioaddr->lbal_addr);
|
||||||
tf->lbam = readb((void __iomem *)ioaddr->lbam_addr);
|
tf->lbam = readb((void __iomem *)ioaddr->lbam_addr);
|
||||||
|
@ -525,30 +525,6 @@ u8 ata_altstatus(struct ata_port *ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ata_chk_err - Read device error reg
|
|
||||||
* @ap: port where the device is
|
|
||||||
*
|
|
||||||
* Reads ATA taskfile error register for
|
|
||||||
* currently-selected device and return its value.
|
|
||||||
*
|
|
||||||
* Note: may NOT be used as the check_err() entry in
|
|
||||||
* ata_port_operations.
|
|
||||||
*
|
|
||||||
* LOCKING:
|
|
||||||
* Inherited from caller.
|
|
||||||
*/
|
|
||||||
u8 ata_chk_err(struct ata_port *ap)
|
|
||||||
{
|
|
||||||
if (ap->ops->check_err)
|
|
||||||
return ap->ops->check_err(ap);
|
|
||||||
|
|
||||||
if (ap->flags & ATA_FLAG_MMIO) {
|
|
||||||
return readb((void __iomem *) ap->ioaddr.error_addr);
|
|
||||||
}
|
|
||||||
return inb(ap->ioaddr.error_addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
|
* ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
|
||||||
* @tf: Taskfile to convert
|
* @tf: Taskfile to convert
|
||||||
|
@ -901,8 +877,8 @@ static u8 ata_dev_try_classify(struct ata_port *ap, unsigned int device)
|
||||||
|
|
||||||
memset(&tf, 0, sizeof(tf));
|
memset(&tf, 0, sizeof(tf));
|
||||||
|
|
||||||
err = ata_chk_err(ap);
|
|
||||||
ap->ops->tf_read(ap, &tf);
|
ap->ops->tf_read(ap, &tf);
|
||||||
|
err = tf.feature;
|
||||||
|
|
||||||
dev->class = ATA_DEV_NONE;
|
dev->class = ATA_DEV_NONE;
|
||||||
|
|
||||||
|
@ -1139,7 +1115,6 @@ static void ata_dev_identify(struct ata_port *ap, unsigned int device)
|
||||||
unsigned int major_version;
|
unsigned int major_version;
|
||||||
u16 tmp;
|
u16 tmp;
|
||||||
unsigned long xfer_modes;
|
unsigned long xfer_modes;
|
||||||
u8 status;
|
|
||||||
unsigned int using_edd;
|
unsigned int using_edd;
|
||||||
DECLARE_COMPLETION(wait);
|
DECLARE_COMPLETION(wait);
|
||||||
struct ata_queued_cmd *qc;
|
struct ata_queued_cmd *qc;
|
||||||
|
@ -1193,8 +1168,11 @@ retry:
|
||||||
else
|
else
|
||||||
wait_for_completion(&wait);
|
wait_for_completion(&wait);
|
||||||
|
|
||||||
status = ata_chk_status(ap);
|
spin_lock_irqsave(&ap->host_set->lock, flags);
|
||||||
if (status & ATA_ERR) {
|
ap->ops->tf_read(ap, &qc->tf);
|
||||||
|
spin_unlock_irqrestore(&ap->host_set->lock, flags);
|
||||||
|
|
||||||
|
if (qc->tf.command & ATA_ERR) {
|
||||||
/*
|
/*
|
||||||
* arg! EDD works for all test cases, but seems to return
|
* arg! EDD works for all test cases, but seems to return
|
||||||
* the ATA signature for some ATAPI devices. Until the
|
* the ATA signature for some ATAPI devices. Until the
|
||||||
|
@ -1207,7 +1185,7 @@ retry:
|
||||||
* to have this problem.
|
* to have this problem.
|
||||||
*/
|
*/
|
||||||
if ((using_edd) && (qc->tf.command == ATA_CMD_ID_ATA)) {
|
if ((using_edd) && (qc->tf.command == ATA_CMD_ID_ATA)) {
|
||||||
u8 err = ata_chk_err(ap);
|
u8 err = qc->tf.feature;
|
||||||
if (err & ATA_ABORTED) {
|
if (err & ATA_ABORTED) {
|
||||||
dev->class = ATA_DEV_ATAPI;
|
dev->class = ATA_DEV_ATAPI;
|
||||||
qc->cursg = 0;
|
qc->cursg = 0;
|
||||||
|
@ -4873,7 +4851,6 @@ EXPORT_SYMBOL_GPL(ata_tf_to_fis);
|
||||||
EXPORT_SYMBOL_GPL(ata_tf_from_fis);
|
EXPORT_SYMBOL_GPL(ata_tf_from_fis);
|
||||||
EXPORT_SYMBOL_GPL(ata_check_status);
|
EXPORT_SYMBOL_GPL(ata_check_status);
|
||||||
EXPORT_SYMBOL_GPL(ata_altstatus);
|
EXPORT_SYMBOL_GPL(ata_altstatus);
|
||||||
EXPORT_SYMBOL_GPL(ata_chk_err);
|
|
||||||
EXPORT_SYMBOL_GPL(ata_exec_command);
|
EXPORT_SYMBOL_GPL(ata_exec_command);
|
||||||
EXPORT_SYMBOL_GPL(ata_port_start);
|
EXPORT_SYMBOL_GPL(ata_port_start);
|
||||||
EXPORT_SYMBOL_GPL(ata_port_stop);
|
EXPORT_SYMBOL_GPL(ata_port_stop);
|
||||||
|
|
|
@ -258,7 +258,6 @@ struct mv_host_priv {
|
||||||
static void mv_irq_clear(struct ata_port *ap);
|
static void mv_irq_clear(struct ata_port *ap);
|
||||||
static u32 mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in);
|
static u32 mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in);
|
||||||
static void mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
|
static void mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
|
||||||
static u8 mv_check_err(struct ata_port *ap);
|
|
||||||
static void mv_phy_reset(struct ata_port *ap);
|
static void mv_phy_reset(struct ata_port *ap);
|
||||||
static void mv_host_stop(struct ata_host_set *host_set);
|
static void mv_host_stop(struct ata_host_set *host_set);
|
||||||
static int mv_port_start(struct ata_port *ap);
|
static int mv_port_start(struct ata_port *ap);
|
||||||
|
@ -296,7 +295,6 @@ static const struct ata_port_operations mv_ops = {
|
||||||
.tf_load = ata_tf_load,
|
.tf_load = ata_tf_load,
|
||||||
.tf_read = ata_tf_read,
|
.tf_read = ata_tf_read,
|
||||||
.check_status = ata_check_status,
|
.check_status = ata_check_status,
|
||||||
.check_err = mv_check_err,
|
|
||||||
.exec_command = ata_exec_command,
|
.exec_command = ata_exec_command,
|
||||||
.dev_select = ata_std_dev_select,
|
.dev_select = ata_std_dev_select,
|
||||||
|
|
||||||
|
@ -1184,22 +1182,6 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance,
|
||||||
return IRQ_RETVAL(handled);
|
return IRQ_RETVAL(handled);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* mv_check_err - Return the error shadow register to caller.
|
|
||||||
* @ap: ATA channel to manipulate
|
|
||||||
*
|
|
||||||
* Marvell requires DMA to be stopped before accessing shadow
|
|
||||||
* registers. So we do that, then return the needed register.
|
|
||||||
*
|
|
||||||
* LOCKING:
|
|
||||||
* Inherited from caller. FIXME: protect mv_stop_dma with lock?
|
|
||||||
*/
|
|
||||||
static u8 mv_check_err(struct ata_port *ap)
|
|
||||||
{
|
|
||||||
mv_stop_dma(ap); /* can't read shadow regs if DMA on */
|
|
||||||
return readb((void __iomem *) ap->ioaddr.error_addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mv_phy_reset - Perform eDMA reset followed by COMRESET
|
* mv_phy_reset - Perform eDMA reset followed by COMRESET
|
||||||
* @ap: ATA channel to manipulate
|
* @ap: ATA channel to manipulate
|
||||||
|
|
|
@ -225,7 +225,6 @@ struct sil24_host_priv {
|
||||||
};
|
};
|
||||||
|
|
||||||
static u8 sil24_check_status(struct ata_port *ap);
|
static u8 sil24_check_status(struct ata_port *ap);
|
||||||
static u8 sil24_check_err(struct ata_port *ap);
|
|
||||||
static u32 sil24_scr_read(struct ata_port *ap, unsigned sc_reg);
|
static u32 sil24_scr_read(struct ata_port *ap, unsigned sc_reg);
|
||||||
static void sil24_scr_write(struct ata_port *ap, unsigned sc_reg, u32 val);
|
static void sil24_scr_write(struct ata_port *ap, unsigned sc_reg, u32 val);
|
||||||
static void sil24_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
|
static void sil24_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
|
||||||
|
@ -280,7 +279,6 @@ static const struct ata_port_operations sil24_ops = {
|
||||||
|
|
||||||
.check_status = sil24_check_status,
|
.check_status = sil24_check_status,
|
||||||
.check_altstatus = sil24_check_status,
|
.check_altstatus = sil24_check_status,
|
||||||
.check_err = sil24_check_err,
|
|
||||||
.dev_select = ata_noop_dev_select,
|
.dev_select = ata_noop_dev_select,
|
||||||
|
|
||||||
.tf_read = sil24_tf_read,
|
.tf_read = sil24_tf_read,
|
||||||
|
@ -363,12 +361,6 @@ static u8 sil24_check_status(struct ata_port *ap)
|
||||||
return pp->tf.command;
|
return pp->tf.command;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 sil24_check_err(struct ata_port *ap)
|
|
||||||
{
|
|
||||||
struct sil24_port_priv *pp = ap->private_data;
|
|
||||||
return pp->tf.feature;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sil24_scr_map[] = {
|
static int sil24_scr_map[] = {
|
||||||
[SCR_CONTROL] = 0,
|
[SCR_CONTROL] = 0,
|
||||||
[SCR_STATUS] = 1,
|
[SCR_STATUS] = 1,
|
||||||
|
|
|
@ -347,7 +347,6 @@ struct ata_port_operations {
|
||||||
void (*exec_command)(struct ata_port *ap, const struct ata_taskfile *tf);
|
void (*exec_command)(struct ata_port *ap, const struct ata_taskfile *tf);
|
||||||
u8 (*check_status)(struct ata_port *ap);
|
u8 (*check_status)(struct ata_port *ap);
|
||||||
u8 (*check_altstatus)(struct ata_port *ap);
|
u8 (*check_altstatus)(struct ata_port *ap);
|
||||||
u8 (*check_err)(struct ata_port *ap);
|
|
||||||
void (*dev_select)(struct ata_port *ap, unsigned int device);
|
void (*dev_select)(struct ata_port *ap, unsigned int device);
|
||||||
|
|
||||||
void (*phy_reset) (struct ata_port *ap);
|
void (*phy_reset) (struct ata_port *ap);
|
||||||
|
@ -434,7 +433,6 @@ extern void ata_noop_dev_select (struct ata_port *ap, unsigned int device);
|
||||||
extern void ata_std_dev_select (struct ata_port *ap, unsigned int device);
|
extern void ata_std_dev_select (struct ata_port *ap, unsigned int device);
|
||||||
extern u8 ata_check_status(struct ata_port *ap);
|
extern u8 ata_check_status(struct ata_port *ap);
|
||||||
extern u8 ata_altstatus(struct ata_port *ap);
|
extern u8 ata_altstatus(struct ata_port *ap);
|
||||||
extern u8 ata_chk_err(struct ata_port *ap);
|
|
||||||
extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf);
|
extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf);
|
||||||
extern int ata_port_start (struct ata_port *ap);
|
extern int ata_port_start (struct ata_port *ap);
|
||||||
extern void ata_port_stop (struct ata_port *ap);
|
extern void ata_port_stop (struct ata_port *ap);
|
||||||
|
|
Loading…
Reference in New Issue