From: Jeff Garzik <jgarzik@pobox.com>
To: Tejun Heo <htejun@gmail.com>
Cc: alan@lxorguk.ukuu.org.uk, axboe@suse.de, albertcc@tw.ibm.com,
forrest.zhao@intel.com, efalk@google.com,
linux-ide@vger.kernel.org
Subject: Re: [PATCH 08/11] sata_sil: convert to new EH
Date: Sat, 13 May 2006 18:26:28 -0400 [thread overview]
Message-ID: <44665D14.9030404@pobox.com> (raw)
In-Reply-To: <11473536881889-git-send-email-htejun@gmail.com>
Tejun Heo wrote:
> Convert sata_sil to new EH. As these controllers have hardware
> interrupt mask and are known to have screaming interrupts issues, use
> hardware IRQ masking for freezing. sil_freeze() masks interrupts for
> the port and sil_thaw() unmasks them. As ports are automatically
> frozen before probing reset, there is no need to initialize interrupt
> masks sil_init_onde(). Remove related code.
>
> Other than freezing, sata_sil uses stock BMDMA EH routines.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
>
> ---
>
> drivers/scsi/sata_sil.c | 49 +++++++++++++++++++++++++++++++++--------------
> 1 files changed, 34 insertions(+), 15 deletions(-)
>
> 0eb051e052c5472c8e2abb0ab5caa267f6f72437
> diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c
> index bfcece1..3e998b7 100644
> --- a/drivers/scsi/sata_sil.c
> +++ b/drivers/scsi/sata_sil.c
> @@ -96,6 +96,8 @@ static void sil_dev_config(struct ata_po
> static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg);
> static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
> static void sil_post_set_mode (struct ata_port *ap);
> +static void sil_freeze(struct ata_port *ap);
> +static void sil_thaw(struct ata_port *ap);
>
>
> static const struct pci_device_id sil_pci_tbl[] = {
> @@ -174,7 +176,10 @@ static const struct ata_port_operations
> .bmdma_status = ata_bmdma_status,
> .qc_prep = ata_qc_prep,
> .qc_issue = ata_qc_issue_prot,
> - .eng_timeout = ata_eng_timeout,
> + .freeze = sil_freeze,
> + .thaw = sil_thaw,
> + .error_handler = ata_bmdma_error_handler,
> + .post_internal_cmd = ata_bmdma_post_internal_cmd,
> .irq_handler = ata_interrupt,
> .irq_clear = ata_bmdma_irq_clear,
> .scr_read = sil_scr_read,
> @@ -314,6 +319,33 @@ static void sil_scr_write (struct ata_po
> writel(val, mmio);
> }
>
> +static void sil_freeze(struct ata_port *ap)
> +{
> + void __iomem *mmio_base = ap->host_set->mmio_base;
> + u32 tmp;
> +
> + /* plug IRQ */
> + tmp = readl(mmio_base + SIL_SYSCFG);
> + tmp |= SIL_MASK_IDE0_INT << ap->port_no;
> + writel(tmp, mmio_base + SIL_SYSCFG);
> + readl(mmio_base + SIL_SYSCFG); /* flush */
> +}
> +
> +static void sil_thaw(struct ata_port *ap)
> +{
> + void __iomem *mmio_base = ap->host_set->mmio_base;
> + u32 tmp;
> +
> + /* clear IRQ */
> + ata_chk_status(ap);
> + ap->ops->irq_clear(ap);
General policy: An LLDD should directly call a function it implements,
rather than a pointer found via one or more pointer de-refs. Eliminates
the pointer derefs, and gives more information to the compiler (and/or
debugger).
> + /* turn on IRQ */
> + tmp = readl(mmio_base + SIL_SYSCFG);
> + tmp &= ~(SIL_MASK_IDE0_INT << ap->port_no);
> + writel(tmp, mmio_base + SIL_SYSCFG);
> +}
> +
> /**
> * sil_dev_config - Apply device/host-specific errata fixups
> * @ap: Port containing device to be examined
> @@ -384,7 +416,7 @@ static int sil_init_one (struct pci_dev
> int rc;
> unsigned int i;
> int pci_dev_busy = 0;
> - u32 tmp, irq_mask;
> + u32 tmp;
> u8 cls;
>
> if (!printed_version++)
> @@ -474,24 +506,11 @@ static int sil_init_one (struct pci_dev
> }
>
> if (ent->driver_data == sil_3114) {
> - irq_mask = SIL_MASK_4PORT;
> -
> /* flip the magic "make 4 ports work" bit */
> tmp = readl(mmio_base + sil_port[2].bmdma);
> if ((tmp & SIL_INTR_STEERING) == 0)
> writel(tmp | SIL_INTR_STEERING,
> mmio_base + sil_port[2].bmdma);
> -
> - } else {
> - irq_mask = SIL_MASK_2PORT;
> - }
> -
> - /* make sure IDE0/1/2/3 interrupts are not masked */
> - tmp = readl(mmio_base + SIL_SYSCFG);
> - if (tmp & irq_mask) {
> - tmp &= ~irq_mask;
> - writel(tmp, mmio_base + SIL_SYSCFG);
> - readl(mmio_base + SIL_SYSCFG); /* flush */
> }
>
> /* mask all SATA phy-related interrupts */
next prev parent reply other threads:[~2006-05-13 22:26 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-11 13:21 [PATCHSET 03/11] new EH implementation, take 3 Tejun Heo
2006-05-11 13:21 ` [PATCH 06/11] libata-eh: implement BMDMA EH Tejun Heo
2006-05-13 22:21 ` Jeff Garzik
2006-05-13 23:41 ` Tejun Heo
2006-05-15 13:38 ` Alan Cox
2006-05-15 13:59 ` Tejun Heo
2006-05-15 14:43 ` Alan Cox
2006-05-11 13:21 ` [PATCH 04/11] libata-eh: implement ata_eh_info and ata_eh_context Tejun Heo
2006-05-11 13:21 ` [PATCH 01/11] libata-eh: add ATA and libata flags for new EH Tejun Heo
2006-05-13 22:15 ` Jeff Garzik
2006-05-11 13:21 ` [PATCH 02/11] libata-eh: implement ata_ering Tejun Heo
2006-05-13 22:16 ` Jeff Garzik
2006-05-13 23:36 ` Tejun Heo
2006-05-14 1:05 ` Jeff Garzik
2006-05-14 1:20 ` Tejun Heo
2006-05-14 1:32 ` Jeff Garzik
2006-05-14 1:38 ` Tejun Heo
2006-05-15 13:36 ` Alan Cox
2006-05-15 14:00 ` Tejun Heo
2006-05-15 14:25 ` Tejun Heo
2006-05-15 14:50 ` Alan Cox
2006-05-15 14:57 ` Tejun Heo
2006-05-15 15:19 ` Alan Cox
2006-05-15 15:19 ` Tejun Heo
2006-05-15 18:22 ` Jeff Garzik
2006-05-11 13:21 ` [PATCH 03/11] libata-eh: add per-dev ata_ering Tejun Heo
2006-05-11 13:21 ` [PATCH 05/11] libata-eh: implement new EH Tejun Heo
2006-05-13 22:19 ` Jeff Garzik
2006-05-11 13:21 ` [PATCH 08/11] sata_sil: convert to " Tejun Heo
2006-05-11 14:22 ` Alan Cox
2006-05-11 14:39 ` Tejun Heo
2006-05-11 15:46 ` Alan Cox
2006-05-11 15:45 ` Tejun Heo
2006-05-11 16:12 ` Alan Cox
2006-05-11 16:10 ` Tejun Heo
2006-05-11 17:16 ` Alan Cox
2006-05-13 22:26 ` Jeff Garzik [this message]
2006-05-13 23:43 ` Tejun Heo
2006-05-11 13:21 ` [PATCH 07/11] ata_piix: " Tejun Heo
2006-05-13 22:23 ` Jeff Garzik
2006-05-11 13:21 ` [PATCH 09/11] ahci: " Tejun Heo
2006-05-13 10:53 ` Tejun Heo
2006-05-13 22:30 ` Jeff Garzik
2006-05-13 23:49 ` Tejun Heo
2006-05-11 13:21 ` [PATCH 11/11] sata_sil24: " Tejun Heo
2006-05-11 13:21 ` [PATCH 10/11] ahci: add PIOS interim interrupt handling Tejun Heo
2006-05-13 22:34 ` [PATCHSET 03/11] new EH implementation, take 3 Jeff Garzik
2006-05-13 23:58 ` Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44665D14.9030404@pobox.com \
--to=jgarzik@pobox.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=albertcc@tw.ibm.com \
--cc=axboe@suse.de \
--cc=efalk@google.com \
--cc=forrest.zhao@intel.com \
--cc=htejun@gmail.com \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.