From: Jeff Garzik <jgarzik@pobox.com>
To: Mark Lord <liml@rtr.ca>
Cc: IDE/ATA development list <linux-ide@vger.kernel.org>
Subject: Re: [PATCH 05/14] sata_mv Fix EDMA configuration
Date: Fri, 25 Jan 2008 23:17:09 -0500 [thread overview]
Message-ID: <479AB445.6060505@pobox.com> (raw)
In-Reply-To: <4798FC48.4060707@rtr.ca>
Mark Lord wrote:
> sata_mv Fix EDMA configuration.
>
> Simplify and fix EDMA configuration setup to match Marvell specificiations.
> The chip documentation gives a specific (re)init sequence, which we now
> follow.
>
> Signed-off-by: Mark Lord <mlord@pobox.com>
>
> --- old/drivers/ata/sata_mv.c 2008-01-24 12:06:25.000000000 -0500
> +++ new/drivers/ata/sata_mv.c 2008-01-24 12:12:37.000000000 -0500
> @@ -210,6 +210,7 @@
> /* SATA registers */
> SATA_STATUS_OFS = 0x300, /* ctrl, err regs follow status */
> SATA_ACTIVE_OFS = 0x350,
> + SATA_FIS_IRQ_CAUSE_OFS = 0x364,
> PHY_MODE3 = 0x310,
> PHY_MODE4 = 0x314,
> PHY_MODE2 = 0x330,
> @@ -222,11 +223,11 @@
>
> /* Port registers */
> EDMA_CFG_OFS = 0,
> - EDMA_CFG_Q_DEPTH = 0, /* queueing disabled */
> - EDMA_CFG_NCQ = (1 << 5),
> - EDMA_CFG_NCQ_GO_ON_ERR = (1 << 14), /* continue on error */
> - EDMA_CFG_RD_BRST_EXT = (1 << 11), /* read burst 512B */
> - EDMA_CFG_WR_BUFF_LEN = (1 << 13), /* write buffer 512B */
> + EDMA_CFG_Q_DEPTH = 0x1f, /* max device queue depth */
> + EDMA_CFG_NCQ = (1 << 5), /* for R/W FPDMA queued */
> + EDMA_CFG_NCQ_GO_ON_ERR = (1 << 14), /* continue on error */
> + EDMA_CFG_RD_BRST_EXT = (1 << 11), /* read burst 512B */
> + EDMA_CFG_WR_BUFF_LEN = (1 << 13), /* write buffer 512B */
>
> EDMA_ERR_IRQ_CAUSE_OFS = 0x8,
> EDMA_ERR_IRQ_MASK_OFS = 0xc,
> @@ -470,6 +471,8 @@
> static void mv_reset_pci_bus(struct pci_dev *pdev, void __iomem *mmio);
> static void mv_channel_reset(struct mv_host_priv *hpriv, void __iomem
> *mmio,
> unsigned int port_no);
> +static void mv_edma_cfg(struct ata_port *ap, struct mv_host_priv *hpriv,
> + void __iomem *port_mmio);
>
> static struct scsi_host_template mv5_sht = {
> .module = THIS_MODULE,
> @@ -834,13 +837,33 @@
> * LOCKING:
> * Inherited from caller.
> */
> -static void mv_start_dma(void __iomem *port_mmio, struct mv_host_priv
> *hpriv,
> +static void mv_start_dma(struct ata_port *ap, void __iomem *port_mmio,
> struct mv_port_priv *pp)
> {
> if (!(pp->pp_flags & MV_PP_FLAG_EDMA_EN)) {
> + struct mv_host_priv *hpriv = ap->host->private_data;
> + int hard_port = mv_hardport_from_port(ap->port_no);
> + void __iomem *hc_mmio = mv_hc_base_from_port(
> + ap->host->iomap[MV_PRIMARY_BAR], hard_port);
> + u32 hc_irq_cause, ipending;
> +
> /* clear EDMA event indicators, if any */
> writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
>
> + /* clear EDMA interrupt indicator, if any */
> + hc_irq_cause = readl(hc_mmio + HC_IRQ_CAUSE_OFS);
> + ipending = (DEV_IRQ << hard_port) |
> + (CRPB_DMA_DONE << hard_port);
> + if (hc_irq_cause & ipending) {
> + writelfl(hc_irq_cause & ~ipending,
> + hc_mmio + HC_IRQ_CAUSE_OFS);
> + }
> +
> + mv_edma_cfg(ap, hpriv, port_mmio);
> +
> + /* clear FIS IRQ Cause */
> + writelfl(0, port_mmio + SATA_FIS_IRQ_CAUSE_OFS);
> +
> mv_set_edma_ptrs(port_mmio, hpriv, pp);
>
> writelfl(EDMA_EN, port_mmio + EDMA_CMD_OFS);
> @@ -1025,30 +1048,22 @@
> static void mv_edma_cfg(struct ata_port *ap, struct mv_host_priv *hpriv,
> void __iomem *port_mmio)
> {
> - u32 cfg = readl(port_mmio + EDMA_CFG_OFS);
> + u32 cfg;
>
> /* set up non-NCQ EDMA configuration */
> - cfg &= ~(1 << 9); /* disable eQue */
> + cfg = EDMA_CFG_Q_DEPTH; /* always 0x1f for *all* chips */
>
> - if (IS_GEN_I(hpriv)) {
> - cfg &= ~0x1f; /* clear queue depth */
> + if (IS_GEN_I(hpriv))
> cfg |= (1 << 8); /* enab config burst size mask */
You no longer clear bit 9 for Gen-I, which looks wrong.
everything else looks OK
next prev parent reply other threads:[~2008-01-26 4:17 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-24 20:56 [PATCH 00/12] sata_mv NCQ support Mark Lord
2008-01-24 20:57 ` [PATCH 01/14] sata_mv EH fixes Mark Lord
2008-01-26 4:09 ` Jeff Garzik
2008-01-24 20:57 ` [PATCH 02/14] sata_mv Mask transient IRQs Mark Lord
2008-01-26 4:10 ` Jeff Garzik
2008-01-26 15:11 ` Mark Lord
2008-01-24 20:58 ` [PATCH 03/14] sata_mv Clear queue indexes on chip restart Mark Lord
2008-01-24 20:59 ` [PATCH 04/14] sata_mv rename base to port_mmio Mark Lord
2008-01-26 4:11 ` Jeff Garzik
2008-01-24 20:59 ` [PATCH 05/14] sata_mv Fix EDMA configuration Mark Lord
2008-01-26 4:17 ` Jeff Garzik [this message]
2008-01-26 15:12 ` Mark Lord
2008-01-24 21:00 ` [PATCH 06/14] sata_mv Add want_ncq parameter for " Mark Lord
2008-01-26 4:18 ` Jeff Garzik
2008-01-24 21:00 ` [PATCH 07/14] sata_mv Use hqtag instead of ioid Mark Lord
2008-01-26 4:19 ` Jeff Garzik
2008-01-26 15:14 ` Mark Lord
2008-01-24 21:01 ` [PATCH 08/14] sata_mv Ignore response status LSB on NCQ Mark Lord
2008-01-24 21:01 ` [PATCH 09/14] sata_mv Restrict max_sectors to 8-bits on GenII NCQ Mark Lord
2008-01-26 4:21 ` Jeff Garzik
2008-01-24 21:02 ` [PATCH 10/14] sata_mv Use DMA memory pools for hardware memory tables Mark Lord
2008-01-26 4:25 ` Jeff Garzik
2008-01-26 15:18 ` Mark Lord
2008-01-26 15:30 ` Mark Lord
2008-01-26 15:45 ` Jeff Garzik
2008-01-26 18:27 ` Mark Lord
2008-01-26 15:20 ` Mark Lord
2008-01-24 21:02 ` [PATCH 11/12] sata_mv Introduce per-tag SG tables Mark Lord
2008-01-26 4:26 ` Jeff Garzik
2008-01-24 21:03 ` [PATCH 12/14] sata_mv Enable NCQ operation Mark Lord
2008-01-26 4:26 ` Jeff Garzik
2008-01-24 21:03 ` [PATCH 13/14] sata_mv No soft resets Mark Lord
2008-01-26 4:28 ` Jeff Garzik
2008-01-26 15:21 ` Mark Lord
2008-01-24 21:04 ` [PATCH 14/14] sata_mv Comments and version bump Mark Lord
2008-01-25 19:38 ` [PATCH 14/14] sata_mv Comments and version bump (v.2) Mark Lord
2008-01-24 21:06 ` [PATCH 00/12] sata_mv NCQ support Mark Lord
2008-01-25 0:04 ` [PATCH 15/14] " Mark Lord
2008-01-25 0:08 ` Tejun Heo
2008-01-26 4:28 ` Jeff Garzik
2008-01-26 4:14 ` [PATCH 00/12] " Jeff Garzik
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=479AB445.6060505@pobox.com \
--to=jgarzik@pobox.com \
--cc=liml@rtr.ca \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).