From patchwork Fri Feb 22 14:53:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 10826259 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 76A3414E1 for ; Fri, 22 Feb 2019 14:54:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6285A30C23 for ; Fri, 22 Feb 2019 14:54:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 60A5C32831; Fri, 22 Feb 2019 14:54:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 169D330C23 for ; Fri, 22 Feb 2019 14:54:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vxl6OU5DR1mswoyWzoX05+dtg7T5eO0cY+w1wKkJJiY=; b=CRphvge2mead0r Zm0vDfmiCS7ikEsDH+Qo6NHLc1Dt9HYuQeqTiB0AcpzJxGElQd7u3LnbeY8vZmUvloSU55IUmrx6V xq0SFCiLfu/Dfr0mqPORxbnwFMSo4ujvTNuycDTS11oEyZZGFhIao9i/xQSZyHSZ7X0RecJINjp0A TdBbNXywQWif8StyLbzdl6L2HpStzCxojZquRZLSW5Pvc2iMPKaQq8hZAudBdcX9q6v9Hr4/YdmZg Wpn7+DltS+SCo6GU4M5PYSfjD7J5MxkCf3jJgiGwf3+aQSaB9+RKLN2R2nXbZNxXEYlRaV14QVpHo L1xaPEWZVy7fKmYrozNg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCDS-00014H-1x; Fri, 22 Feb 2019 14:54:18 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCDP-000127-4J for linux-arm-kernel@lists.infradead.org; Fri, 22 Feb 2019 14:54:16 +0000 X-Originating-IP: 90.88.23.190 Received: from localhost.localdomain (aaubervilliers-681-1-81-190.w90-88.abo.wanadoo.fr [90.88.23.190]) (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id A58BD60007; Fri, 22 Feb 2019 14:54:02 +0000 (UTC) From: Miquel Raynal To: Gregory Clement , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Rob Herring , Mark Rutland , Jens Axboe , Hans de Goede , Thomas Gleixner , Marc Zyngier Subject: [PATCH 1/5] ata: libahci: Ensure the host interrupt status bits are cleared Date: Fri, 22 Feb 2019 15:53:52 +0100 Message-Id: <20190222145356.23072-2-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190222145356.23072-1-miquel.raynal@bootlin.com> References: <20190222145356.23072-1-miquel.raynal@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190222_065415_404486_1130C1A3 X-CRM114-Status: GOOD ( 11.65 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Antoine Tenart , Maxime Chevallier , Nadav Haklai , linux-ide@vger.kernel.org, Thomas Petazzoni , Miquel Raynal , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP ahci_multi_irqs_intr_hard() is going to be used as interrupt handler to support SATA per-port interrupts. The current logic is to check and clear the SATA port interrupt status register only. To avoid spurious IRQs and interrupt storms, it will be needed to clear the port interrupt bit in the host interrupt status register as well. Signed-off-by: Miquel Raynal --- drivers/ata/libahci.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index b5f57c69c487..66d4906a5013 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -1912,7 +1912,10 @@ static void ahci_port_intr(struct ata_port *ap) static irqreturn_t ahci_multi_irqs_intr_hard(int irq, void *dev_instance) { struct ata_port *ap = dev_instance; + struct ata_host *host = ap->host; + struct ahci_host_priv *hpriv = host->private_data; void __iomem *port_mmio = ahci_port_base(ap); + void __iomem *mmio = hpriv->mmio; u32 status; VPRINTK("ENTER\n"); @@ -1924,6 +1927,10 @@ static irqreturn_t ahci_multi_irqs_intr_hard(int irq, void *dev_instance) ahci_handle_port_interrupt(ap, port_mmio, status); spin_unlock(ap->lock); + spin_lock(&host->lock); + writel(BIT(ap->port_no), mmio + HOST_IRQ_STAT); + spin_unlock(&host->lock); + VPRINTK("EXIT\n"); return IRQ_HANDLED; From patchwork Fri Feb 22 14:53:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 10826267 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5800615AC for ; Fri, 22 Feb 2019 14:55:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 387373077C for ; Fri, 22 Feb 2019 14:55:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2BB7C30BA1; Fri, 22 Feb 2019 14:55:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 918923077C for ; Fri, 22 Feb 2019 14:55:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=oSp6F5SI2YZ9e0AaPWBsa38EZP5VHfIX1qtIkY8o5Gg=; b=IUlzPElmN6bRKa Hs/oxczwfysb5MBqRFVFxyzyVHzM90FNoE8RYG5pMGAIACgJ4lsw9FKzqu0q/aJkqCSB6jsEACY8/ MxiVr0MrIYO+tkzdikXGaI7Dvlu6urKOFbiFHfh/9KfzZ0SY/DFxIsvnVBShU33zut0gtJtvzE2qW onKDUUhnqWhsap/PYu5rP4eC46FdXA0t+r47ruenuyL6JGZUXoQoSrfTehcflwBz7783F/DrAi4yP stBlVjXonV8rrPhQ15ZJM2pxscKsLnXNLaJXBA5ije5odeBQuP5Wd8XHRFtzgIbTB1gPLHSu300GN Y9Djoc6r3S099LPartnA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCEL-0002cS-7n; Fri, 22 Feb 2019 14:55:13 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCDP-00012A-QO for linux-arm-kernel@lists.infradead.org; Fri, 22 Feb 2019 14:54:19 +0000 X-Originating-IP: 90.88.23.190 Received: from localhost.localdomain (aaubervilliers-681-1-81-190.w90-88.abo.wanadoo.fr [90.88.23.190]) (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id AFC096001C; Fri, 22 Feb 2019 14:54:05 +0000 (UTC) From: Miquel Raynal To: Gregory Clement , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Rob Herring , Mark Rutland , Jens Axboe , Hans de Goede , Thomas Gleixner , Marc Zyngier Subject: [PATCH 2/5] ata: libahci_platform: Support per-port interrupts Date: Fri, 22 Feb 2019 15:53:53 +0100 Message-Id: <20190222145356.23072-3-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190222145356.23072-1-miquel.raynal@bootlin.com> References: <20190222145356.23072-1-miquel.raynal@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190222_065416_149175_E98684DE X-CRM114-Status: GOOD ( 20.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Antoine Tenart , Maxime Chevallier , Nadav Haklai , linux-ide@vger.kernel.org, Thomas Petazzoni , Miquel Raynal , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Right now the ATA core only allows IPs to use a single interrupt. Some of them (for instance the Armada-CP110 one) actually has one interrupt per port. Add some logic to support such situation. We consider that either there is one single interrupt declared in the main IP node, or there are per-port interrupts, each of them being declared in the port sub-nodes. Signed-off-by: Miquel Raynal --- drivers/ata/acard-ahci.c | 2 +- drivers/ata/ahci.c | 2 +- drivers/ata/ahci.h | 3 +- drivers/ata/libahci.c | 2 +- drivers/ata/libahci_platform.c | 66 ++++++++++++++++++++++++++++------ drivers/ata/sata_highbank.c | 2 +- 6 files changed, 61 insertions(+), 16 deletions(-) diff --git a/drivers/ata/acard-ahci.c b/drivers/ata/acard-ahci.c index 583e366be7e2..9414b81e994c 100644 --- a/drivers/ata/acard-ahci.c +++ b/drivers/ata/acard-ahci.c @@ -434,7 +434,7 @@ static int acard_ahci_init_one(struct pci_dev *pdev, const struct pci_device_id if (!hpriv) return -ENOMEM; - hpriv->irq = pdev->irq; + hpriv->irqs[0] = pdev->irq; hpriv->flags |= (unsigned long)pi.private_data; if (!(hpriv->flags & AHCI_HFLAG_NO_MSI)) diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 021ce46e2e57..18bce556d85f 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -1817,7 +1817,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) /* legacy intx interrupts */ pci_intx(pdev, 1); } - hpriv->irq = pci_irq_vector(pdev, 0); + hpriv->irqs[0] = pci_irq_vector(pdev, 0); if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss) host->flags |= ATA_HOST_PARALLEL_SCAN; diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index ef356e70e6de..1f1c00be5b2e 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -361,7 +361,7 @@ struct ahci_host_priv { struct phy **phys; unsigned nports; /* Number of ports */ void *plat_data; /* Other platform data */ - unsigned int irq; /* interrupt line */ + unsigned int *irqs; /* interrupt line(s) */ /* * Optional ahci_start_engine override, if not set this gets set to the * default ahci_start_engine during ahci_save_initial_config, this can @@ -432,6 +432,7 @@ void ahci_print_info(struct ata_host *host, const char *scc_s); int ahci_host_activate(struct ata_host *host, struct scsi_host_template *sht); void ahci_error_handler(struct ata_port *ap); u32 ahci_handle_port_intr(struct ata_host *host, u32 irq_masked); +int ahci_get_per_port_irq_vector(struct ata_host *host, int port); static inline void __iomem *__ahci_port_base(struct ata_host *host, unsigned int port_no) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 66d4906a5013..25970138a65a 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -2602,7 +2602,7 @@ static int ahci_host_activate_multi_irqs(struct ata_host *host, int ahci_host_activate(struct ata_host *host, struct scsi_host_template *sht) { struct ahci_host_priv *hpriv = host->private_data; - int irq = hpriv->irq; + int irq = hpriv->irqs[0]; int rc; if (hpriv->flags & AHCI_HFLAG_MULTI_MSI) { diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c index 4b900fc659f7..af3d65c09087 100644 --- a/drivers/ata/libahci_platform.c +++ b/drivers/ata/libahci_platform.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include "ahci.h" @@ -89,6 +90,14 @@ static void ahci_platform_disable_phys(struct ahci_host_priv *hpriv) } } +int ahci_get_per_port_irq_vector(struct ata_host *host, int port) +{ + struct ahci_host_priv *hpriv = host->private_data; + + return hpriv->irqs[port]; +} +EXPORT_SYMBOL_GPL(ahci_get_per_port_irq_vector); + /** * ahci_platform_enable_clks - Enable platform clocks * @hpriv: host private area to store config values @@ -379,6 +388,7 @@ static int ahci_platform_get_regulator(struct ahci_host_priv *hpriv, u32 port, * or for non devicetree enabled platforms a single clock * 4) resets, if flags has AHCI_PLATFORM_GET_RESETS (optional) * 5) phys (optional) + * 6) interrupt(s) * * RETURNS: * The allocated ahci_host_priv on success, otherwise an ERR_PTR value @@ -390,7 +400,7 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev, struct ahci_host_priv *hpriv; struct clk *clk; struct device_node *child; - int i, enabled_ports = 0, rc = -ENOMEM, child_nodes; + int i, enabled_ports = 0, rc = -ENOMEM, child_nodes, ctrl_irq; u32 mask_port_map = 0; if (!devres_open_group(dev, NULL, GFP_KERNEL)) @@ -483,10 +493,29 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev, goto err_out; } + hpriv->irqs = kzalloc(sizeof(*hpriv->irqs) * hpriv->nports, GFP_KERNEL); + if (!hpriv->irqs) { + rc = -ENOMEM; + goto err_out; + } + + ctrl_irq = platform_get_irq(pdev, 0); + if (ctrl_irq < 0) { + if (ctrl_irq == -EPROBE_DEFER) { + rc = ctrl_irq; + goto err_out; + } + ctrl_irq = 0; + } + + if (ctrl_irq > 0) + hpriv->irqs[0] = ctrl_irq; + if (child_nodes) { for_each_child_of_node(dev->of_node, child) { u32 port; struct platform_device *port_dev __maybe_unused; + int port_irq; if (!of_device_is_available(child)) continue; @@ -515,6 +544,18 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev, } #endif + if (!ctrl_irq) { + port_irq = of_irq_get(child, 0); + if (!port_irq) + port_irq = -EINVAL; + if (port_irq < 0) { + rc = port_irq; + goto err_out; + } + + hpriv->irqs[port] = port_irq; + } + rc = ahci_platform_get_phy(hpriv, port, dev, child); if (rc) goto err_out; @@ -542,6 +583,18 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev, if (rc == -EPROBE_DEFER) goto err_out; } + + if (!ctrl_irq && !enabled_ports) { + dev_err(&pdev->dev, "No IRQ defined\n"); + rc = -ENODEV; + goto err_out; + } + + if (enabled_ports > 1) { + hpriv->flags |= AHCI_HFLAG_MULTI_MSI; + hpriv->get_irq_vector = ahci_get_per_port_irq_vector; + } + pm_runtime_enable(dev); pm_runtime_get_sync(dev); hpriv->got_runtime_pm = true; @@ -578,16 +631,7 @@ int ahci_platform_init_host(struct platform_device *pdev, struct ata_port_info pi = *pi_template; const struct ata_port_info *ppi[] = { &pi, NULL }; struct ata_host *host; - int i, irq, n_ports, rc; - - irq = platform_get_irq(pdev, 0); - if (irq <= 0) { - if (irq != -EPROBE_DEFER) - dev_err(dev, "no irq\n"); - return irq; - } - - hpriv->irq = irq; + int i, n_ports, rc; /* prepare host */ pi.private_data = (void *)(unsigned long)hpriv->flags; diff --git a/drivers/ata/sata_highbank.c b/drivers/ata/sata_highbank.c index c8fc9280d6e4..dcfdab20021b 100644 --- a/drivers/ata/sata_highbank.c +++ b/drivers/ata/sata_highbank.c @@ -496,7 +496,7 @@ static int ahci_highbank_probe(struct platform_device *pdev) return -ENOMEM; } - hpriv->irq = irq; + hpriv->irqs[0] = irq; hpriv->flags |= (unsigned long)pi.private_data; hpriv->mmio = devm_ioremap(dev, mem->start, resource_size(mem)); From patchwork Fri Feb 22 14:53:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 10826265 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E608314E1 for ; Fri, 22 Feb 2019 14:54:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D10A930A22 for ; Fri, 22 Feb 2019 14:54:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C4A973147D; Fri, 22 Feb 2019 14:54:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 296DB30BA1 for ; Fri, 22 Feb 2019 14:54:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ur01IWZv6fKYvWoIQTjOArnKC0YzUeyysq10hpqIwgA=; b=nmeIBPG9f2h2Yf HcnPQpvjRU3TE+pxxhzlO+k9RmrNZfQ7drPph9FmEL4tp2JvxMw5Ov6J9kfqH+tgCJdWuNsbpQ2EH miylcoL5Zbwr2Jp+8INyJCnVRS+hYUClRf3QKlO9HE4uVmjvaMZ5mVtpZke16pavKj1CXuZYrp7me c4zY7TRVcWzAR96StRUhvsnxNjnr1nV1wtwZv0wTJLx0rZgzbRmd0SDbZr7OztfAp85+1VQ0AvL2V BwSAc9B6WvYGjv3VuEhK4Of/fmiHXzE9eZSqb10XFbz0rInktjcn5/3OrzLaYTCUUR4mmYjHyJrsL LOreZeQvuh90sl3N+15w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCE4-0001ny-Nk; Fri, 22 Feb 2019 14:54:56 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCDP-00012C-Qk for linux-arm-kernel@lists.infradead.org; Fri, 22 Feb 2019 14:54:19 +0000 X-Originating-IP: 90.88.23.190 Received: from localhost.localdomain (aaubervilliers-681-1-81-190.w90-88.abo.wanadoo.fr [90.88.23.190]) (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 64C0060010; Fri, 22 Feb 2019 14:54:08 +0000 (UTC) From: Miquel Raynal To: Gregory Clement , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Rob Herring , Mark Rutland , Jens Axboe , Hans de Goede , Thomas Gleixner , Marc Zyngier Subject: [PATCH 3/5] irqchip/irq-mvebu-icu: Move the double SATA ports interrupt hack Date: Fri, 22 Feb 2019 15:53:54 +0100 Message-Id: <20190222145356.23072-4-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190222145356.23072-1-miquel.raynal@bootlin.com> References: <20190222145356.23072-1-miquel.raynal@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190222_065416_164655_9CC5AC31 X-CRM114-Status: GOOD ( 22.74 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Antoine Tenart , Maxime Chevallier , Nadav Haklai , linux-ide@vger.kernel.org, Thomas Petazzoni , Miquel Raynal , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP When writing the driver, a hack was introduced to configure both SATA interrupts regardless of the port in use to overcome a limitation in the SATA core. Now that this limitation has been addressed, let's clean this driver section and move the hack into the (historically) responsible SATA driver: ahci_platform. Signed-off-by: Miquel Raynal --- drivers/ata/ahci_platform.c | 174 ++++++++++++++++++++++++++++++++ drivers/irqchip/irq-mvebu-icu.c | 18 ---- 2 files changed, 174 insertions(+), 18 deletions(-) diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index cf1e0e18a7a9..4401a137e6d5 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,9 @@ #define DRV_NAME "ahci" +#define ICU_SATA0_ICU_ID 109 +#define ICU_SATA1_ICU_ID 107 + static const struct ata_port_info ahci_port_info = { .flags = AHCI_FLAG_COMMON, .pio_mask = ATA_PIO4, @@ -44,6 +48,170 @@ static struct scsi_host_template ahci_platform_sht = { AHCI_SHT(DRV_NAME), }; +/* + * The Armada CP110 SATA unit (on A7k/A8k SoCs) has 2 ports, and a dedicated ICU + * entry per port. In the past, the AHCI SATA driver only supported one + * interrupt per SATA unit. To solve this, the 2 SATA wired interrupts in the + * South-Bridge got configured as 1 GIC interrupt in the North-Bridge, + * regardless of the number of SATA ports actually enabled/in use. + * + * Since then, this limitation has been addressed and the hack described + * above has been removed from the ICU driver. However, for compatibility + * it is needed to support DT with just one interrupt and no SATA ports. + * Instead of hacking everywhere in the ahci/libahci code, this quirk has been + * written to manually create the SATA port sub-nodes if they are missing, + * assign them the right port numbers through the "reg" properties and their + * respective "interrupts". + */ +static int ahci_armada_8k_quirk(struct device *dev) +{ + struct device_node *dn = dev->of_node; + struct property *interrupt = of_find_property(dn, "interrupts", NULL); + struct device_node *ports; + struct property *regs, *ints; + int rc, i; + + if (!(of_device_is_compatible(dn, "marvell,armada-8k-ahci") && + !of_get_child_count(dn))) + return 0; + + if (!of_node_get(dn)) + return -EINVAL; + + /* Verify the main SATA node "interrupts" property validity */ + if (!interrupt) { + rc = -EINVAL; + goto put_dn; + } + + /* Create the two sub-nodes */ + ports = kzalloc(2 * sizeof(*ports), GFP_KERNEL); + if (!ports) { + rc = -ENOMEM; + goto put_dn; + } + + for (i = 0; i < 2; i++) { + of_node_set_flag(&ports[i], OF_DYNAMIC); + of_node_init(&ports[i]); + ports[i].parent = dn; + } + + ports[0].full_name = kstrdup("sata-port@0", GFP_KERNEL); + ports[1].full_name = kstrdup("sata-port@1", GFP_KERNEL); + if (!ports[0].full_name || !ports[1].full_name) { + rc = -ENOMEM; + goto free_ports_names; + } + + /* Create the two "reg" and "interrupts" property for the sub-nodes */ + regs = kzalloc(2 * sizeof(*regs), GFP_KERNEL); + ints = kzalloc(2 * sizeof(*ints), GFP_KERNEL); + if (!regs || !ints) { + rc = -ENOMEM; + goto free_props; + } + + for (i = 0; i < 2; i++) { + regs[i].name = kstrdup("reg", GFP_KERNEL); + regs[i].length = sizeof(u32); + regs[i].value = kmalloc(sizeof(regs[i].length), GFP_KERNEL); + + ints[i].name = kstrdup("interrupts", GFP_KERNEL); + ints[i].length = interrupt->length; + ints[i].value = kmemdup(interrupt->value, interrupt->length, + GFP_KERNEL); + + if (!regs[i].name || !regs[i].value || + !ints[i].name || !ints[i].value) { + rc = -ENOMEM; + goto free_props_allocs; + } + } + + /* Force the values of the ICU interrupts for both ports. + * In the past, "interrupts" properties had three values: + * 1/ ICU interrupt type, 2/ interrupt ID, 3/ interrupt type + * Now there are only two: + * 1/ interrupt ID, 2/ interrupt type + * In both case we want to access the penultimate. + */ + for (i = 0; i < 2; i++) { + u32 *reg, *icu_int; + u8 *value; + + reg = regs[i].value; + *reg = cpu_to_be32(i); + + value = ints[i].value; + value = &value[ints[i].length - (2 * sizeof(u32))]; + icu_int = (u32 *)value; + if (!i) + *icu_int = cpu_to_be32(ICU_SATA0_ICU_ID); + else + *icu_int = cpu_to_be32(ICU_SATA1_ICU_ID); + } + + for (i = 0; i < 2; i++) { + ports[i].properties = ®s[i]; + regs[i].next = &ints[i]; + ints[i].next = NULL; + } + + /* Create the two sub-nodes by attaching them */ + rc = of_attach_node(&ports[0]); + if (rc) { + dev_err(dev, "Compat: cannot attach port0 (err %d)\n", rc); + goto free_props_allocs; + } + + rc = of_attach_node(&ports[1]); + if (rc) { + dev_err(dev, "Compat: cannot attach port1 (err %d)\n", rc); + goto detach_port0; + } + + /* Delete the "interrupts" property from the SATA host node */ + rc = of_remove_property(dn, interrupt); + if (rc) { + dev_err(dev, "Compat: cannot delete SATA host interrupt\n"); + goto detach_ports; + } + + of_node_put(dn); + + return 0; + +detach_ports: + of_detach_node(&ports[1]); + +detach_port0: + of_detach_node(&ports[0]); + +free_props_allocs: + for (i = 0; i < 2; i++) { + kfree(regs[i].name); + kfree(regs[i].value); + kfree(ints[i].name); + kfree(ints[i].value); + } + +free_props: + kfree(regs); + kfree(ints); + +free_ports_names: + for (i = 0; i < 2; i++) + kfree(ports[i].full_name); + + kfree(ports); + +put_dn: + of_node_put(dn); + + return rc; + } + static int ahci_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -51,6 +219,12 @@ static int ahci_probe(struct platform_device *pdev) const struct ata_port_info *port; int rc; + rc = ahci_armada_8k_quirk(dev); + if (rc) { + dev_err(dev, "Problem with CP110 backward compatibility\n"); + return rc; + } + hpriv = ahci_platform_get_resources(pdev, AHCI_PLATFORM_GET_RESETS); if (IS_ERR(hpriv)) diff --git a/drivers/irqchip/irq-mvebu-icu.c b/drivers/irqchip/irq-mvebu-icu.c index 547045d89c4b..f3b43f63fe2e 100644 --- a/drivers/irqchip/irq-mvebu-icu.c +++ b/drivers/irqchip/irq-mvebu-icu.c @@ -38,8 +38,6 @@ /* ICU definitions */ #define ICU_MAX_IRQS 207 -#define ICU_SATA0_ICU_ID 109 -#define ICU_SATA1_ICU_ID 107 struct mvebu_icu_subset_data { unsigned int icu_group; @@ -111,22 +109,6 @@ static void mvebu_icu_write_msg(struct msi_desc *desc, struct msi_msg *msg) } writel_relaxed(icu_int, icu->base + ICU_INT_CFG(d->hwirq)); - - /* - * The SATA unit has 2 ports, and a dedicated ICU entry per - * port. The ahci sata driver supports only one irq interrupt - * per SATA unit. To solve this conflict, we configure the 2 - * SATA wired interrupts in the south bridge into 1 GIC - * interrupt in the north bridge. Even if only a single port - * is enabled, if sata node is enabled, both interrupts are - * configured (regardless of which port is actually in use). - */ - if (d->hwirq == ICU_SATA0_ICU_ID || d->hwirq == ICU_SATA1_ICU_ID) { - writel_relaxed(icu_int, - icu->base + ICU_INT_CFG(ICU_SATA0_ICU_ID)); - writel_relaxed(icu_int, - icu->base + ICU_INT_CFG(ICU_SATA1_ICU_ID)); - } } static struct irq_chip mvebu_icu_nsr_chip = { From patchwork Fri Feb 22 14:53:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 10826263 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0E85315AC for ; Fri, 22 Feb 2019 14:54:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF14B1FF29 for ; Fri, 22 Feb 2019 14:54:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E290A1FF87; Fri, 22 Feb 2019 14:54:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9DC7E1FF29 for ; Fri, 22 Feb 2019 14:54:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=EItoABuI29w19NnDaPnF8bCbvAqyFUfft4KoxAm1kgI=; b=YOlyDDLmBmgNNo K4Q9FJSBiQJdb2rJ07QB+f26qsV55NJrKAcbSU6o+5Ko3Rwx5eMxGT5EnUg6zUoEjFVZj6ZuOYGvo HNB5ngt+oZgXI7vKxt/MKt0BwigXrmvC9ujK7ySdICKp2jUMdPIEZ4Yi6rQtIYWnhfLIcuFbtt8Ua XI0hhHnyDnyqjgSqJpuoYenLC8LeP+J7RJTFciNoMOCvZiJTqYFrvou7vJm3c/grDL3fTuao4Y2NA g/7TyjBpbuzvfhhwSzdhXVSVbHDRUIwL4UXcb2xKW0Bahjse59/Uv4G12f+VMBEXCdjEeJ9+Nw5ff OKIwu34B/i2H7sr//pBQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCDu-0001Zt-9T; Fri, 22 Feb 2019 14:54:46 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCDP-00012Q-AX for linux-arm-kernel@lists.infradead.org; Fri, 22 Feb 2019 14:54:18 +0000 X-Originating-IP: 90.88.23.190 Received: from localhost.localdomain (aaubervilliers-681-1-81-190.w90-88.abo.wanadoo.fr [90.88.23.190]) (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 36E7F6000B; Fri, 22 Feb 2019 14:54:11 +0000 (UTC) From: Miquel Raynal To: Gregory Clement , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Rob Herring , Mark Rutland , Jens Axboe , Hans de Goede , Thomas Gleixner , Marc Zyngier Subject: [PATCH 4/5] arm64: dts: marvell: armada-8040-clearfog: Drop non-existent SATA port Date: Fri, 22 Feb 2019 15:53:55 +0100 Message-Id: <20190222145356.23072-5-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190222145356.23072-1-miquel.raynal@bootlin.com> References: <20190222145356.23072-1-miquel.raynal@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190222_065415_709050_932124C4 X-CRM114-Status: GOOD ( 11.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Antoine Tenart , Maxime Chevallier , Nadav Haklai , linux-ide@vger.kernel.org, Thomas Petazzoni , Miquel Raynal , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP There is no CP110 SATA port available on the 8040 Clearfog A8k, SATA may be used thanks to a mPCIe -> SATA extension board only. Hence, the cp1_sata0 node must be removed from the device tree. Signed-off-by: Miquel Raynal --- arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts b/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts index 5b4a9609e31f..caabbd3a85a8 100644 --- a/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts +++ b/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts @@ -333,11 +333,6 @@ }; }; -&cp1_sata0 { - pinctrl-0 = <&cp0_pci1_reset_pins>; - status = "okay"; -}; - &cp1_mdio { pinctrl-names = "default"; pinctrl-0 = <&cp1_ge_mdio_pins>; From patchwork Fri Feb 22 14:53:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 10826269 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AB4EC14E1 for ; Fri, 22 Feb 2019 14:55:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9481B30BA1 for ; Fri, 22 Feb 2019 14:55:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 884643147D; Fri, 22 Feb 2019 14:55:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 1664A30BA1 for ; Fri, 22 Feb 2019 14:55:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=N4AH44LSRduP17cFQaYAu9hhX1ddUE6t93vxvsrhhj8=; b=n93CyxM7lQxyWx pvluxx/JlTu1HtcO6ZTi6xSjP9P/lP8/Jn0Vd19hAj3eMUdmQqFqrevVlwfHXc0Ey4hZjCGBsJsYp jqBJsIwxJQ0y8KDnPlSxhoMYKDKthoG8ptbD9WFik8pt0J5K6jK64G6Q89mQGSXlnQ56u1ZqO2InZ I/VbVQbBTq9DyUZ7+XOQSzFGhfdvW/3lHWsbqUGUCvpeNOiT9ndfZSqRgjYr+JwQZLTEYgDCT61EG IZ1jhH0MovufnS+DNa30CHCeFM3W3/lO6bbWzFR8QgS2BH1qQQWYK5Wys+Fl3/oev+uloKs9d2smo /JWTgGRX9RN3ZweogUkQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCEX-0003Uc-I3; Fri, 22 Feb 2019 14:55:25 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gxCDS-00013o-0G for linux-arm-kernel@lists.infradead.org; Fri, 22 Feb 2019 14:54:21 +0000 X-Originating-IP: 90.88.23.190 Received: from localhost.localdomain (aaubervilliers-681-1-81-190.w90-88.abo.wanadoo.fr [90.88.23.190]) (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 057216001A; Fri, 22 Feb 2019 14:54:13 +0000 (UTC) From: Miquel Raynal To: Gregory Clement , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Rob Herring , Mark Rutland , Jens Axboe , Hans de Goede , Thomas Gleixner , Marc Zyngier Subject: [PATCH 5/5] arm64: dts: marvell: armada-cp110: Switch to per-port SATA interrupts Date: Fri, 22 Feb 2019 15:53:56 +0100 Message-Id: <20190222145356.23072-6-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190222145356.23072-1-miquel.raynal@bootlin.com> References: <20190222145356.23072-1-miquel.raynal@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190222_065418_505438_9E7FCF1D X-CRM114-Status: GOOD ( 12.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Antoine Tenart , Maxime Chevallier , Nadav Haklai , linux-ide@vger.kernel.org, Thomas Petazzoni , Miquel Raynal , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Thomas Petazzoni There are two SATA ports per CP110. Each of them has a dedicated interrupt. Describe the real hardware by adding two SATA ports to the CP110 SATA node and enabling them in all the DTs including it (7040-db/8040-db/8040-clearfog). Signed-off-by: Thomas Petazzoni Signed-off-by: Miquel Raynal --- arch/arm64/boot/dts/marvell/armada-7040-db.dts | 7 ++++++- arch/arm64/boot/dts/marvell/armada-8040-db.dts | 14 ++++++++++++-- arch/arm64/boot/dts/marvell/armada-cp110.dtsi | 16 ++++++++++++++-- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/arch/arm64/boot/dts/marvell/armada-7040-db.dts b/arch/arm64/boot/dts/marvell/armada-7040-db.dts index 412efdb46e7c..54c1c0ddc813 100644 --- a/arch/arm64/boot/dts/marvell/armada-7040-db.dts +++ b/arch/arm64/boot/dts/marvell/armada-7040-db.dts @@ -194,7 +194,12 @@ }; &cp0_sata0 { - status = "okay"; + sata-port@0 { + status = "okay"; + }; + sata-port@1 { + status = "okay"; + }; }; &cp0_usb3_0 { diff --git a/arch/arm64/boot/dts/marvell/armada-8040-db.dts b/arch/arm64/boot/dts/marvell/armada-8040-db.dts index 1bac437369a1..988cc7dc15d9 100644 --- a/arch/arm64/boot/dts/marvell/armada-8040-db.dts +++ b/arch/arm64/boot/dts/marvell/armada-8040-db.dts @@ -147,7 +147,12 @@ /* CON4 on CP0 expansion */ &cp0_sata0 { - status = "okay"; + sata-port@0 { + status = "okay"; + }; + sata-port@1 { + status = "okay"; + }; }; /* CON9 on CP0 expansion */ @@ -279,7 +284,12 @@ /* CON4 on CP1 expansion */ &cp1_sata0 { - status = "okay"; + sata-port@0 { + status = "okay"; + }; + sata-port@1 { + status = "okay"; + }; }; /* CON9 on CP1 expansion */ diff --git a/arch/arm64/boot/dts/marvell/armada-cp110.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110.dtsi index b9d9f31e3ba1..f27edddcacd1 100644 --- a/arch/arm64/boot/dts/marvell/armada-cp110.dtsi +++ b/arch/arm64/boot/dts/marvell/armada-cp110.dtsi @@ -292,10 +292,22 @@ "generic-ahci"; reg = <0x540000 0x30000>; dma-coherent; - interrupts = <107 IRQ_TYPE_LEVEL_HIGH>; clocks = <&CP110_LABEL(clk) 1 15>, <&CP110_LABEL(clk) 1 16>; - status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + + sata-port@0 { + reg = <0>; + interrupts = <109 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; + }; + + sata-port@1 { + reg = <1>; + interrupts = <107 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; + }; }; CP110_LABEL(xor0): xor@6a0000 {