Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07b73470 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

[PATCH] sata_sil24: convert to new reset mechanism



Convert sata_sil24 ->phy_reset to new reset mechanism.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent 531db7aa
Loading
Loading
Loading
Loading
+28 −28
Original line number Original line Diff line number Diff line
@@ -249,7 +249,7 @@ static u8 sil24_check_status(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);
static void sil24_phy_reset(struct ata_port *ap);
static int sil24_probe_reset(struct ata_port *ap, unsigned int *classes);
static void sil24_qc_prep(struct ata_queued_cmd *qc);
static void sil24_qc_prep(struct ata_queued_cmd *qc);
static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc);
static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc);
static void sil24_irq_clear(struct ata_port *ap);
static void sil24_irq_clear(struct ata_port *ap);
@@ -306,7 +306,7 @@ static const struct ata_port_operations sil24_ops = {


	.tf_read		= sil24_tf_read,
	.tf_read		= sil24_tf_read,


	.phy_reset		= sil24_phy_reset,
	.probe_reset		= sil24_probe_reset,


	.qc_prep		= sil24_qc_prep,
	.qc_prep		= sil24_qc_prep,
	.qc_issue		= sil24_qc_issue,
	.qc_issue		= sil24_qc_issue,
@@ -336,8 +336,8 @@ static struct ata_port_info sil24_port_info[] = {
	{
	{
		.sht		= &sil24_sht,
		.sht		= &sil24_sht,
		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				  ATA_FLAG_SRST | ATA_FLAG_MMIO |
				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				  ATA_FLAG_PIO_DMA | SIL24_NPORTS2FLAG(4),
				  SIL24_NPORTS2FLAG(4),
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= 0x3f,			/* udma0-5 */
		.udma_mask	= 0x3f,			/* udma0-5 */
@@ -347,8 +347,8 @@ static struct ata_port_info sil24_port_info[] = {
	{
	{
		.sht		= &sil24_sht,
		.sht		= &sil24_sht,
		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				  ATA_FLAG_SRST | ATA_FLAG_MMIO |
				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				  ATA_FLAG_PIO_DMA | SIL24_NPORTS2FLAG(2),
				  SIL24_NPORTS2FLAG(2),
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= 0x3f,			/* udma0-5 */
		.udma_mask	= 0x3f,			/* udma0-5 */
@@ -358,8 +358,8 @@ static struct ata_port_info sil24_port_info[] = {
	{
	{
		.sht		= &sil24_sht,
		.sht		= &sil24_sht,
		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				  ATA_FLAG_SRST | ATA_FLAG_MMIO |
				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				  ATA_FLAG_PIO_DMA | SIL24_NPORTS2FLAG(1),
				  SIL24_NPORTS2FLAG(1),
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= 0x3f,			/* udma0-5 */
		.udma_mask	= 0x3f,			/* udma0-5 */
@@ -428,7 +428,8 @@ static void sil24_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
	*tf = pp->tf;
	*tf = pp->tf;
}
}


static int sil24_issue_SRST(struct ata_port *ap)
static int sil24_softreset(struct ata_port *ap, int verbose,
			   unsigned int *class)
{
{
	void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
	void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
	struct sil24_port_priv *pp = ap->private_data;
	struct sil24_port_priv *pp = ap->private_data;
@@ -437,6 +438,8 @@ static int sil24_issue_SRST(struct ata_port *ap)
	u32 irq_enable, irq_stat;
	u32 irq_enable, irq_stat;
	int cnt;
	int cnt;


	DPRINTK("ENTER\n");

	/* temporarily turn off IRQs during SRST */
	/* temporarily turn off IRQs during SRST */
	irq_enable = readl(port + PORT_IRQ_ENABLE_SET);
	irq_enable = readl(port + PORT_IRQ_ENABLE_SET);
	writel(irq_enable, port + PORT_IRQ_ENABLE_CLR);
	writel(irq_enable, port + PORT_IRQ_ENABLE_CLR);
@@ -466,30 +469,27 @@ static int sil24_issue_SRST(struct ata_port *ap)
	/* restore IRQs */
	/* restore IRQs */
	writel(irq_enable, port + PORT_IRQ_ENABLE_SET);
	writel(irq_enable, port + PORT_IRQ_ENABLE_SET);


	if (!(irq_stat & PORT_IRQ_COMPLETE))
	if (sata_dev_present(ap)) {
		return -1;
		if (!(irq_stat & PORT_IRQ_COMPLETE)) {
			DPRINTK("EXIT, srst failed\n");
			return -EIO;
		}


	/* update TF */
		sil24_update_tf(ap);
		sil24_update_tf(ap);
	return 0;
		*class = ata_dev_classify(&pp->tf);
	}
	}
	if (*class == ATA_DEV_UNKNOWN)
		*class = ATA_DEV_NONE;


static void sil24_phy_reset(struct ata_port *ap)
	DPRINTK("EXIT, class=%u\n", *class);
{
	return 0;
	struct sil24_port_priv *pp = ap->private_data;

	__sata_phy_reset(ap);
	if (ap->flags & ATA_FLAG_PORT_DISABLED)
		return;

	if (sil24_issue_SRST(ap) < 0) {
		printk(KERN_ERR DRV_NAME
		       " ata%u: SRST failed, disabling port\n", ap->id);
		ap->ops->port_disable(ap);
		return;
}
}


	ap->device->class = ata_dev_classify(&pp->tf);
static int sil24_probe_reset(struct ata_port *ap, unsigned int *classes)
{
	return ata_drive_probe_reset(ap, ata_std_probeinit,
				     sil24_softreset, NULL,
				     ata_std_postreset, classes);
}
}


static inline void sil24_fill_sg(struct ata_queued_cmd *qc,
static inline void sil24_fill_sg(struct ata_queued_cmd *qc,