From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Mans Rullgard <mans@mansr.com>, Tejun Heo <tj@kernel.org>,
linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/3] ata: sata_dwc_460ex: get rid of global data
Date: Thu, 17 Dec 2015 17:06:05 +0200 [thread overview]
Message-ID: <1450364765.30729.139.camel@linux.intel.com> (raw)
In-Reply-To: <1450221935-6034-3-git-send-email-mans@mansr.com>
On Tue, 2015-12-15 at 23:25 +0000, Mans Rullgard wrote:
> This moves all global data into the driver private struct, thus
> permitting multiple devices of this type to be used.
>
Nice!
Btw, last time Linus complained about new warnings. Most of them I have
fixed when moved to external DMA driver. Leftovers IIRC are related to
address space. Are you going to fix them? Otherwise it might be a
headache for him again with strong wording to our address I suppose.
> Signed-off-by: Mans Rullgard <mans@mansr.com>
> ---
> drivers/ata/sata_dwc_460ex.c | 80 ++++++++++++++++++++------------
> ------------
> 1 file changed, 36 insertions(+), 44 deletions(-)
>
> diff --git a/drivers/ata/sata_dwc_460ex.c
> b/drivers/ata/sata_dwc_460ex.c
> index d07aae1..919f870 100644
> --- a/drivers/ata/sata_dwc_460ex.c
> +++ b/drivers/ata/sata_dwc_460ex.c
> @@ -146,6 +146,8 @@ struct sata_dwc_device {
> struct ata_host *host;
> u8 __iomem *reg_base;
> struct sata_dwc_regs *sata_dwc_regs; /* DW
> Synopsys SATA specific */
> + u32 sactive_issued;
> + u32 sactive_queued;
> struct phy *phy;
> #ifdef CONFIG_SATA_DWC_OLD_DMA
> struct dw_dma_chip *dma;
> @@ -190,14 +192,6 @@ enum {
> SATA_DWC_DMA_PENDING_RX = 2,
> };
>
> -struct sata_dwc_host_priv {
> - void __iomem *scr_addr_sstatus;
> - u32 sata_dwc_sactive_issued ;
> - u32 sata_dwc_sactive_queued ;
> -};
> -
> -static struct sata_dwc_host_priv host_pvt;
> -
> /*
> * Prototypes
> */
> @@ -448,21 +442,22 @@ static int sata_dwc_scr_write(struct ata_link
> *link, unsigned int scr, u32 val)
> return 0;
> }
>
> -static u32 core_scr_read(unsigned int scr)
> +static u32 core_scr_read(struct sata_dwc_device *hsdev, unsigned int
> scr)
> {
> - return in_le32(host_pvt.scr_addr_sstatus + (scr * 4));
> + return in_le32(hsdev->reg_base + SATA_DWC_SCR_OFFSET + (scr
> * 4));
> }
>
> -static void core_scr_write(unsigned int scr, u32 val)
> +static void core_scr_write(struct sata_dwc_device *hsdev, unsigned
> int scr,
> + u32 val)
> {
> - out_le32(host_pvt.scr_addr_sstatus + (scr * 4), val);
> + out_le32(hsdev->reg_base + SATA_DWC_SCR_OFFSET + (scr * 4),
> val);
> }
>
> -static void clear_serror(void)
> +static void clear_serror(struct sata_dwc_device *hsdev)
> {
> u32 val;
> - val = core_scr_read(SCR_ERROR);
> - core_scr_write(SCR_ERROR, val);
> + val = core_scr_read(hsdev, SCR_ERROR);
> + core_scr_write(hsdev, SCR_ERROR, val);
> }
>
> static void clear_interrupt_bit(struct sata_dwc_device *hsdev, u32
> bit)
> @@ -489,7 +484,7 @@ static void sata_dwc_error_intr(struct ata_port
> *ap,
>
> ata_ehi_clear_desc(ehi);
>
> - serror = core_scr_read(SCR_ERROR);
> + serror = core_scr_read(hsdev, SCR_ERROR);
> status = ap->ops->sff_check_status(ap);
>
> tag = ap->link.active_tag;
> @@ -500,7 +495,7 @@ static void sata_dwc_error_intr(struct ata_port
> *ap,
> hsdevp->dma_pending[tag], hsdevp->cmd_issued[tag]);
>
> /* Clear error register and interrupt bit */
> - clear_serror();
> + clear_serror(hsdev);
> clear_interrupt_bit(hsdev, SATA_DWC_INTPR_ERR);
>
> /* This is the only error happening now. TODO check for
> exact error */
> @@ -539,7 +534,7 @@ static irqreturn_t sata_dwc_isr(int irq, void
> *dev_instance)
> int handled, num_processed, port = 0;
> uint intpr, sactive, sactive2, tag_mask;
> struct sata_dwc_device_port *hsdevp;
> - host_pvt.sata_dwc_sactive_issued = 0;
> + hsdev->sactive_issued = 0;
>
> spin_lock_irqsave(&host->lock, flags);
>
> @@ -568,7 +563,7 @@ static irqreturn_t sata_dwc_isr(int irq, void
> *dev_instance)
> if (hsdevp->cmd_issued[tag] !=
> SATA_DWC_CMD_ISSUED_PEND)
> dev_warn(ap->dev, "CMD tag=%d not
> pending?\n", tag);
>
> - host_pvt.sata_dwc_sactive_issued |=
> qcmd_tag_to_mask(tag);
> + hsdev->sactive_issued |= qcmd_tag_to_mask(tag);
>
> qc = ata_qc_from_tag(ap, tag);
> /*
> @@ -582,11 +577,11 @@ static irqreturn_t sata_dwc_isr(int irq, void
> *dev_instance)
> handled = 1;
> goto DONE;
> }
> - sactive = core_scr_read(SCR_ACTIVE);
> - tag_mask = (host_pvt.sata_dwc_sactive_issued | sactive) ^
> sactive;
> + sactive = core_scr_read(hsdev, SCR_ACTIVE);
> + tag_mask = (hsdev->sactive_issued | sactive) ^ sactive;
>
> /* If no sactive issued and tag_mask is zero then this is
> not NCQ */
> - if (host_pvt.sata_dwc_sactive_issued == 0 && tag_mask == 0)
> {
> + if (hsdev->sactive_issued == 0 && tag_mask == 0) {
> if (ap->link.active_tag == ATA_TAG_POISON)
> tag = 0;
> else
> @@ -656,22 +651,19 @@ DRVSTILLBUSY:
> */
>
> /* process completed commands */
> - sactive = core_scr_read(SCR_ACTIVE);
> - tag_mask = (host_pvt.sata_dwc_sactive_issued | sactive) ^
> sactive;
> + sactive = core_scr_read(hsdev, SCR_ACTIVE);
> + tag_mask = (hsdev->sactive_issued | sactive) ^ sactive;
>
> - if (sactive != 0 || (host_pvt.sata_dwc_sactive_issued) > 1
> || \
> - tag_mask >
> 1) {
> + if (sactive != 0 || hsdev->sactive_issued > 1 || tag_mask >
> 1) {
> dev_dbg(ap->dev,
> "%s
> NCQ:sactive=0x%08x sactive_issued=0x%08x tag_mask=0x%08x\n",
> - __func__, sactive,
> host_pvt.sata_dwc_sactive_issued,
> - tag_mask);
> + __func__, sactive, hsdev->sactive_issued,
> tag_mask);
> }
>
> - if ((tag_mask | (host_pvt.sata_dwc_sactive_issued)) != \
> - (host_pvt.sata_dwc_sactive_i
> ssued)) {
> + if ((tag_mask | hsdev->sactive_issued) != hsdev-
> >sactive_issued) {
> dev_warn(ap->dev,
> - "Bad tag mask? sactive=0x%08x
> (host_pvt.sata_dwc_sactive_issued)=0x%08x tag_mask=0x%08x\n",
> - sactive, host_pvt.sata_dwc_sactive_issued,
> tag_mask);
> + "Bad tag mask? sactive=0x%08x
> sactive_issued=0x%08x tag_mask=0x%08x\n",
> + sactive, hsdev->sactive_issued, tag_mask);
> }
>
> /* read just to clear ... not bad if currently still busy */
> @@ -733,7 +725,7 @@ STILLBUSY:
> * we were processing --we read status as part of processing
> a completed
> * command).
> */
> - sactive2 = core_scr_read(SCR_ACTIVE);
> + sactive2 = core_scr_read(hsdev, SCR_ACTIVE);
> if (sactive2 != sactive) {
> dev_dbg(ap->dev,
> "More completed - sactive=0x%x
> sactive2=0x%x\n",
> @@ -819,8 +811,9 @@ static int sata_dwc_qc_complete(struct ata_port
> *ap, struct ata_queued_cmd *qc,
> u8 status = 0;
> u32 mask = 0x0;
> u8 tag = qc->tag;
> + struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
> struct sata_dwc_device_port *hsdevp = HSDEVP_FROM_AP(ap);
> - host_pvt.sata_dwc_sactive_queued = 0;
> + hsdev->sactive_queued = 0;
> dev_dbg(ap->dev, "%s checkstatus? %x\n", __func__,
> check_status);
>
> if (hsdevp->dma_pending[tag] == SATA_DWC_DMA_PENDING_TX)
> @@ -833,10 +826,8 @@ static int sata_dwc_qc_complete(struct ata_port
> *ap, struct ata_queued_cmd *qc,
>
> /* clear active bit */
> mask = (~(qcmd_tag_to_mask(tag)));
> - host_pvt.sata_dwc_sactive_queued =
> (host_pvt.sata_dwc_sactive_queued) \
> - & mask;
> - host_pvt.sata_dwc_sactive_issued =
> (host_pvt.sata_dwc_sactive_issued) \
> - & mask;
> + hsdev->sactive_queued = hsdev->sactive_queued & mask;
> + hsdev->sactive_issued = hsdev->sactive_issued & mask;
> ata_qc_complete(qc);
> return 0;
> }
> @@ -961,7 +952,7 @@ static int sata_dwc_port_start(struct ata_port
> *ap)
> }
>
> /* Clear any error bits before libata starts issuing
> commands */
> - clear_serror();
> + clear_serror(hsdev);
> ap->private_data = hsdevp;
> dev_dbg(ap->dev, "%s: done\n", __func__);
> return 0;
> @@ -999,6 +990,7 @@ static void sata_dwc_exec_command_by_tag(struct
> ata_port *ap,
> {
> unsigned long flags;
> struct sata_dwc_device_port *hsdevp = HSDEVP_FROM_AP(ap);
> + struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
>
> dev_dbg(ap->dev, "%s cmd(0x%02x): %s tag=%d\n", __func__,
> tf->command,
> ata_get_cmd_descript(tf->command), tag);
> @@ -1012,7 +1004,7 @@ static void sata_dwc_exec_command_by_tag(struct
> ata_port *ap,
> * managed SError register for the disk needs to be done
> before the
> * task file is loaded.
> */
> - clear_serror();
> + clear_serror(hsdev);
> ata_sff_exec_command(ap, tf);
> }
>
> @@ -1065,7 +1057,7 @@ static void sata_dwc_bmdma_start_by_tag(struct
> ata_queued_cmd *qc, u8 tag)
> sata_dwc_tf_dump(ap, &qc->tf);
>
> if (start_dma) {
> - reg = core_scr_read(SCR_ERROR);
> + reg = core_scr_read(hsdev, SCR_ERROR);
> if (reg & SATA_DWC_SERROR_ERR_BITS) {
> dev_err(ap->dev, "%s: ****** SError=0x%08x
> ******\n",
> __func__, reg);
> @@ -1128,6 +1120,7 @@ static unsigned int sata_dwc_qc_issue(struct
> ata_queued_cmd *qc)
> u32 sactive;
> u8 tag = qc->tag;
> struct ata_port *ap = qc->ap;
> + struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
>
> #ifdef DEBUG_NCQ
> if (qc->tag > 0 || ap->link.sactive > 1)
> @@ -1144,9 +1137,9 @@ static unsigned int sata_dwc_qc_issue(struct
> ata_queued_cmd *qc)
> sata_dwc_qc_prep_by_tag(qc, tag);
>
> if (ata_is_ncq(qc->tf.protocol)) {
> - sactive = core_scr_read(SCR_ACTIVE);
> + sactive = core_scr_read(hsdev, SCR_ACTIVE);
> sactive |= (0x00000001 << tag);
> - core_scr_write(SCR_ACTIVE, sactive);
> + core_scr_write(hsdev, SCR_ACTIVE, sactive);
>
> dev_dbg(qc->ap->dev,
> "%s: tag=%d ap->link.sactive = 0x%08x
> sactive=0x%08x\n",
> @@ -1289,7 +1282,6 @@ static int sata_dwc_probe(struct
> platform_device *ofdev)
> /* Setup port */
> host->ports[0]->ioaddr.cmd_addr = base;
> host->ports[0]->ioaddr.scr_addr = base +
> SATA_DWC_SCR_OFFSET;
> - host_pvt.scr_addr_sstatus = base + SATA_DWC_SCR_OFFSET;
> sata_dwc_setup_port(&host->ports[0]->ioaddr, (unsigned
> long)base);
>
> /* Read the ID and Version Registers */
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2015-12-17 15:06 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 23:25 [PATCH 1/3] ata: sata_dwc_460ex: use "dmas" DT property to find dma channel Mans Rullgard
2015-12-15 23:25 ` [PATCH 2/3] ata: sata_dwc_460ex: add phy support Mans Rullgard
2015-12-16 11:14 ` Sergei Shtylyov
2015-12-16 11:24 ` Måns Rullgård
2015-12-15 23:25 ` [PATCH 3/3] ata: sata_dwc_460ex: get rid of global data Mans Rullgard
2015-12-17 15:06 ` Andy Shevchenko [this message]
2015-12-17 15:19 ` Måns Rullgård
2015-12-17 15:37 ` Andy Shevchenko
2015-12-17 15:57 ` Måns Rullgård
2015-12-15 23:34 ` [PATCH 1/3] ata: sata_dwc_460ex: use "dmas" DT property to find dma channel Måns Rullgård
2015-12-17 14:59 ` Andy Shevchenko
2015-12-17 15:13 ` Måns Rullgård
2015-12-17 15:55 ` Andy Shevchenko
2015-12-17 16:04 ` Måns Rullgård
2015-12-17 16:53 ` Andy Shevchenko
2015-12-17 17:57 ` Julian Margetson
2015-12-17 17:59 ` Måns Rullgård
[not found] ` <567302E8.5050303@candw.ms>
2015-12-17 18:51 ` Måns Rullgård
[not found] ` <5673061A.4070700@candw.ms>
2015-12-17 19:53 ` Måns Rullgård
[not found] ` <56732C04.9040100@candw.ms>
2015-12-18 0:06 ` Måns Rullgård
2015-12-18 0:59 ` Julian Margetson
2015-12-18 1:38 ` Måns Rullgård
2015-12-18 11:48 ` Julian Margetson
2015-12-18 12:04 ` Måns Rullgård
2015-12-18 12:23 ` Andy Shevchenko
2015-12-18 12:49 ` Måns Rullgård
[not found] ` <5674271B.9090308@candw.ms>
2015-12-18 17:18 ` Måns Rullgård
2015-12-18 18:48 ` Andy Shevchenko
[not found] ` <56745BA4.1090607@candw.ms>
2015-12-18 22:33 ` Måns Rullgård
2015-12-18 22:49 ` Julian Margetson
2015-12-18 23:16 ` Måns Rullgård
2015-12-19 2:34 ` Andy Shevchenko
2015-12-19 11:39 ` Julian Margetson
2015-12-19 15:40 ` Måns Rullgård
[not found] ` <567585CD.9080105@candw.ms>
2015-12-19 16:39 ` Måns Rullgård
2015-12-19 16:56 ` Andy Shevchenko
2015-12-19 17:05 ` Måns Rullgård
2015-12-19 17:09 ` Julian Margetson
2015-12-19 17:11 ` Andy Shevchenko
2015-12-19 17:19 ` Måns Rullgård
2015-12-19 18:56 ` Julian Margetson
2015-12-19 19:07 ` Måns Rullgård
2015-12-19 20:16 ` Julian Margetson
2015-12-19 20:39 ` Andy Shevchenko
2015-12-19 20:41 ` Måns Rullgård
2015-12-19 20:48 ` Julian Margetson
2015-12-19 20:55 ` Julian Margetson
2015-12-20 17:11 ` Måns Rullgård
2015-12-20 17:41 ` Andy Shevchenko
2015-12-20 17:54 ` Måns Rullgård
2015-12-20 17:44 ` Julian Margetson
2015-12-20 18:49 ` Måns Rullgård
2015-12-20 20:17 ` Andy Shevchenko
2015-12-20 20:55 ` Andy Shevchenko
2015-12-21 1:19 ` Måns Rullgård
2015-12-21 19:08 ` Andy Shevchenko
2015-12-21 19:27 ` Måns Rullgård
2015-12-21 20:54 ` Andy Shevchenko
2015-12-21 21:06 ` Måns Rullgård
2015-12-22 0:08 ` Måns Rullgård
2015-12-22 10:58 ` Andy Shevchenko
2016-01-06 16:26 ` Måns Rullgård
2016-01-06 17:36 ` Andy Shevchenko
2016-01-07 9:34 ` Andy Shevchenko
2016-01-07 18:32 ` Måns Rullgård
2016-01-08 8:57 ` Andy Shevchenko
2016-01-08 10:57 ` Måns Rullgård
2016-01-20 18:50 ` Måns Rullgård
2016-01-20 19:23 ` Andy Shevchenko
2016-01-20 19:24 ` Måns Rullgård
2016-01-20 19:38 ` Andy Shevchenko
2016-01-20 19:46 ` Måns Rullgård
2016-01-20 19:51 ` Andy Shevchenko
2016-01-20 20:07 ` Måns Rullgård
2016-01-22 10:04 ` Andy Shevchenko
2016-01-22 11:13 ` Måns Rullgård
2016-01-22 11:56 ` Andy Shevchenko
2016-01-22 12:05 ` Måns Rullgård
2016-01-22 12:15 ` Andy Shevchenko
2015-12-21 16:48 ` Andy Shevchenko
2015-12-21 17:20 ` Julian Margetson
2015-12-21 17:26 ` Julian Margetson
2015-12-21 17:55 ` Andy Shevchenko
2015-12-21 18:23 ` Julian Margetson
2015-12-21 18:27 ` Måns Rullgård
2015-12-21 19:08 ` Julian Margetson
2015-12-21 19:19 ` Julian Margetson
2015-12-21 19:27 ` Måns Rullgård
2015-12-21 19:47 ` Julian Margetson
2015-12-21 20:25 ` Andy Shevchenko
2015-12-21 20:29 ` Julian Margetson
2016-01-22 10:07 ` Andy Shevchenko
2015-12-21 20:33 ` Måns Rullgård
2015-12-21 18:25 ` Måns Rullgård
2015-12-21 0:47 ` Måns Rullgård
2015-12-21 0:53 ` Måns Rullgård
2015-12-21 0:58 ` Måns Rullgård
2015-12-21 8:40 ` Andy Shevchenko
2015-12-21 12:15 ` Måns Rullgård
2015-12-21 17:24 ` Andy Shevchenko
2015-12-21 18:16 ` Måns Rullgård
2015-12-21 19:23 ` Andy Shevchenko
2015-12-21 19:50 ` Måns Rullgård
[not found] ` <5677D447.40906@candw.ms>
2015-12-21 12:16 ` Måns Rullgård
2015-12-21 13:18 ` Julian Margetson
2015-12-21 13:24 ` Måns Rullgård
2015-12-21 14:40 ` Julian Margetson
2015-12-21 15:24 ` Måns Rullgård
2015-12-21 16:44 ` Andy Shevchenko
2015-12-21 18:19 ` Måns Rullgård
2015-12-18 12:33 ` Julian Margetson
2015-12-18 12:38 ` Andy Shevchenko
2015-12-18 12:45 ` Måns Rullgård
[not found] ` <56740F9F.5020500@candw.ms>
2015-12-18 14:24 ` Andy Shevchenko
2015-12-18 14:27 ` Måns Rullgård
2015-12-18 10:08 ` Andy Shevchenko
2015-12-18 11:24 ` Måns Rullgård
2015-12-17 14:58 ` Andy Shevchenko
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=1450364765.30729.139.camel@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mans@mansr.com \
--cc=tj@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).