From: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
To: tj@kernel.org
Cc: stripathi@apm.com, linux-ide@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH V3] AHCI: Workaround for ThunderX Errata#22536
Date: Tue, 23 Feb 2016 16:00:31 -0800 [thread overview]
Message-ID: <56CCF29F.8030105@caviumnetworks.com> (raw)
In-Reply-To: <1455653329-4934-1-git-send-email-tchalamarla@caviumnetworks.com>
Hi Tejun,
Any more comments on this?
Thanks,
Tirumalesh.
On 02/16/2016 12:08 PM, tchalamarla@caviumnetworks.com wrote:
> From: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
>
> Due to Errata in ThunderX, HOST_IRQ_STAT should be
> cleared before leaving the interrupt handler.
> The patch attempts to satisfy the need.
>
> Changes from V2:
> - removed newfile
> - code is now under CONFIG_ARM64
>
> Changes from V1:
> - Rebased on top of libata/for-4.6
> - Moved ThunderX intr handler to new file
>
> Signed-off-by: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
> ---
> drivers/ata/ahci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
> index 546a369..c8496fc 100644
> --- a/drivers/ata/ahci.c
> +++ b/drivers/ata/ahci.c
> @@ -1325,6 +1325,44 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
> {}
> #endif
>
> +#ifdef CONFIG_ARM64
> +/* Due to ERRATA#22536, ThunderX need to handle
> + * HOST_IRQ_STAT differently.
> + * Work around is to make sure all pending IRQs
> + * are served before leaving handler
> + */
> +static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance)
> +{
> + struct ata_host *host = dev_instance;
> + struct ahci_host_priv *hpriv;
> + unsigned int rc = 0;
> + void __iomem *mmio;
> + u32 irq_stat, irq_masked;
> + unsigned int handled = 1;
> +
> + VPRINTK("ENTER\n");
> + hpriv = host->private_data;
> + mmio = hpriv->mmio;
> + irq_stat = readl(mmio + HOST_IRQ_STAT);
> + if (!irq_stat)
> + return IRQ_NONE;
> +
> + do {
> + irq_masked = irq_stat & hpriv->port_map;
> + spin_lock(&host->lock);
> + rc = ahci_handle_port_intr(host, irq_masked);
> + if (!rc)
> + handled = 0;
> + writel(irq_stat, mmio + HOST_IRQ_STAT);
> + irq_stat = readl(mmio + HOST_IRQ_STAT);
> + spin_unlock(&host->lock);
> + } while (irq_stat);
> + VPRINTK("EXIT\n");
> +
> + return IRQ_RETVAL(handled);
> +}
> +#endif
> +
> /*
> * ahci_init_msix() - optionally enable per-port MSI-X otherwise defer
> * to single msi.
> @@ -1560,6 +1598,12 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> if (ahci_broken_devslp(pdev))
> hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
>
> +#ifdef CONFIG_ARM64
> + /* this should be done before save config*/
> + if (pdev->vendor == 0x177d && pdev->device == 0xa01c)
> + hpriv->irq_handler = ahci_thunderx_irq_handler;
> +#endif
> +
> /* save initial config */
> ahci_pci_save_initial_config(pdev, hpriv);
>
>
WARNING: multiple messages have this Message-ID (diff)
From: tchalamarla@caviumnetworks.com (Tirumalesh Chalamarla)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V3] AHCI: Workaround for ThunderX Errata#22536
Date: Tue, 23 Feb 2016 16:00:31 -0800 [thread overview]
Message-ID: <56CCF29F.8030105@caviumnetworks.com> (raw)
In-Reply-To: <1455653329-4934-1-git-send-email-tchalamarla@caviumnetworks.com>
Hi Tejun,
Any more comments on this?
Thanks,
Tirumalesh.
On 02/16/2016 12:08 PM, tchalamarla at caviumnetworks.com wrote:
> From: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
>
> Due to Errata in ThunderX, HOST_IRQ_STAT should be
> cleared before leaving the interrupt handler.
> The patch attempts to satisfy the need.
>
> Changes from V2:
> - removed newfile
> - code is now under CONFIG_ARM64
>
> Changes from V1:
> - Rebased on top of libata/for-4.6
> - Moved ThunderX intr handler to new file
>
> Signed-off-by: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
> ---
> drivers/ata/ahci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
> index 546a369..c8496fc 100644
> --- a/drivers/ata/ahci.c
> +++ b/drivers/ata/ahci.c
> @@ -1325,6 +1325,44 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
> {}
> #endif
>
> +#ifdef CONFIG_ARM64
> +/* Due to ERRATA#22536, ThunderX need to handle
> + * HOST_IRQ_STAT differently.
> + * Work around is to make sure all pending IRQs
> + * are served before leaving handler
> + */
> +static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance)
> +{
> + struct ata_host *host = dev_instance;
> + struct ahci_host_priv *hpriv;
> + unsigned int rc = 0;
> + void __iomem *mmio;
> + u32 irq_stat, irq_masked;
> + unsigned int handled = 1;
> +
> + VPRINTK("ENTER\n");
> + hpriv = host->private_data;
> + mmio = hpriv->mmio;
> + irq_stat = readl(mmio + HOST_IRQ_STAT);
> + if (!irq_stat)
> + return IRQ_NONE;
> +
> + do {
> + irq_masked = irq_stat & hpriv->port_map;
> + spin_lock(&host->lock);
> + rc = ahci_handle_port_intr(host, irq_masked);
> + if (!rc)
> + handled = 0;
> + writel(irq_stat, mmio + HOST_IRQ_STAT);
> + irq_stat = readl(mmio + HOST_IRQ_STAT);
> + spin_unlock(&host->lock);
> + } while (irq_stat);
> + VPRINTK("EXIT\n");
> +
> + return IRQ_RETVAL(handled);
> +}
> +#endif
> +
> /*
> * ahci_init_msix() - optionally enable per-port MSI-X otherwise defer
> * to single msi.
> @@ -1560,6 +1598,12 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> if (ahci_broken_devslp(pdev))
> hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
>
> +#ifdef CONFIG_ARM64
> + /* this should be done before save config*/
> + if (pdev->vendor == 0x177d && pdev->device == 0xa01c)
> + hpriv->irq_handler = ahci_thunderx_irq_handler;
> +#endif
> +
> /* save initial config */
> ahci_pci_save_initial_config(pdev, hpriv);
>
>
WARNING: multiple messages have this Message-ID (diff)
From: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
To: <tj@kernel.org>
Cc: <stripathi@apm.com>, <linux-ide@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH V3] AHCI: Workaround for ThunderX Errata#22536
Date: Tue, 23 Feb 2016 16:00:31 -0800 [thread overview]
Message-ID: <56CCF29F.8030105@caviumnetworks.com> (raw)
In-Reply-To: <1455653329-4934-1-git-send-email-tchalamarla@caviumnetworks.com>
Hi Tejun,
Any more comments on this?
Thanks,
Tirumalesh.
On 02/16/2016 12:08 PM, tchalamarla@caviumnetworks.com wrote:
> From: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
>
> Due to Errata in ThunderX, HOST_IRQ_STAT should be
> cleared before leaving the interrupt handler.
> The patch attempts to satisfy the need.
>
> Changes from V2:
> - removed newfile
> - code is now under CONFIG_ARM64
>
> Changes from V1:
> - Rebased on top of libata/for-4.6
> - Moved ThunderX intr handler to new file
>
> Signed-off-by: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com>
> ---
> drivers/ata/ahci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
> index 546a369..c8496fc 100644
> --- a/drivers/ata/ahci.c
> +++ b/drivers/ata/ahci.c
> @@ -1325,6 +1325,44 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
> {}
> #endif
>
> +#ifdef CONFIG_ARM64
> +/* Due to ERRATA#22536, ThunderX need to handle
> + * HOST_IRQ_STAT differently.
> + * Work around is to make sure all pending IRQs
> + * are served before leaving handler
> + */
> +static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance)
> +{
> + struct ata_host *host = dev_instance;
> + struct ahci_host_priv *hpriv;
> + unsigned int rc = 0;
> + void __iomem *mmio;
> + u32 irq_stat, irq_masked;
> + unsigned int handled = 1;
> +
> + VPRINTK("ENTER\n");
> + hpriv = host->private_data;
> + mmio = hpriv->mmio;
> + irq_stat = readl(mmio + HOST_IRQ_STAT);
> + if (!irq_stat)
> + return IRQ_NONE;
> +
> + do {
> + irq_masked = irq_stat & hpriv->port_map;
> + spin_lock(&host->lock);
> + rc = ahci_handle_port_intr(host, irq_masked);
> + if (!rc)
> + handled = 0;
> + writel(irq_stat, mmio + HOST_IRQ_STAT);
> + irq_stat = readl(mmio + HOST_IRQ_STAT);
> + spin_unlock(&host->lock);
> + } while (irq_stat);
> + VPRINTK("EXIT\n");
> +
> + return IRQ_RETVAL(handled);
> +}
> +#endif
> +
> /*
> * ahci_init_msix() - optionally enable per-port MSI-X otherwise defer
> * to single msi.
> @@ -1560,6 +1598,12 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> if (ahci_broken_devslp(pdev))
> hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
>
> +#ifdef CONFIG_ARM64
> + /* this should be done before save config*/
> + if (pdev->vendor == 0x177d && pdev->device == 0xa01c)
> + hpriv->irq_handler = ahci_thunderx_irq_handler;
> +#endif
> +
> /* save initial config */
> ahci_pci_save_initial_config(pdev, hpriv);
>
>
next prev parent reply other threads:[~2016-02-24 0:00 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-16 20:08 [PATCH V3] AHCI: Workaround for ThunderX Errata#22536 tchalamarla
2016-02-16 20:08 ` tchalamarla
2016-02-16 20:08 ` tchalamarla at caviumnetworks.com
2016-02-17 16:12 ` Thomas Gleixner
2016-02-17 16:12 ` Thomas Gleixner
2016-02-25 20:31 ` Tirumalesh Chalamarla
2016-02-25 20:31 ` Tirumalesh Chalamarla
2016-02-25 20:31 ` Tirumalesh Chalamarla
2016-02-29 21:12 ` Tejun Heo
2016-02-29 21:12 ` Tejun Heo
2016-02-24 0:00 ` Tirumalesh Chalamarla [this message]
2016-02-24 0:00 ` Tirumalesh Chalamarla
2016-02-24 0:00 ` Tirumalesh Chalamarla
2016-02-29 21:17 ` Tejun Heo
2016-02-29 21:17 ` Tejun Heo
2016-02-29 22:00 ` Tirumalesh Chalamarla
2016-02-29 22:00 ` Tirumalesh Chalamarla
2016-02-29 22:00 ` Tirumalesh Chalamarla
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=56CCF29F.8030105@caviumnetworks.com \
--to=tchalamarla@caviumnetworks.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stripathi@apm.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 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.