All of lore.kernel.org
 help / color / mirror / Atom feed
From: Serge Semin <Sergey.Semin@baikalelectronics.ru>
To: Damien Le Moal <damien.lemoal@opensource.wdc.com>,
	Hans de Goede <hdegoede@redhat.com>, Jens Axboe <axboe@kernel.dk>,
	Hannes Reinecke <hare@suse.de>
Cc: Serge Semin <Sergey.Semin@baikalelectronics.ru>,
	Serge Semin <fancer.lancer@gmail.com>,
	Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>,
	Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>,
	Rob Herring <robh+dt@kernel.org>, <linux-ide@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>
Subject: [PATCH RESEND v6 13/23] ata: libahci: Discard redundant force_port_map parameter
Date: Thu, 28 Jul 2022 14:18:54 +0300	[thread overview]
Message-ID: <20220728111905.12427-14-Sergey.Semin@baikalelectronics.ru> (raw)
In-Reply-To: <20220728111905.12427-1-Sergey.Semin@baikalelectronics.ru>

Currently there are four port-map-related fields declared in the
ahci_host_priv structure and used to setup the HBA ports mapping. First
the ports-mapping is read from the PI register and immediately stored in
the saved_port_map field. If forced_port_map is initialized with non-zero
value then its value will have greater priority over the value read from
PI, thus it will override the saved_port_map field. That value will be
then masked by a non-zero mask_port_map field and after some sanity checks
it will be stored in the ahci_host_priv.port_map field as a final port
mapping.

As you can see the logic is a bit too complicated for such a simple task.
We can freely get rid from at least one of the fields with no change to
the implemented semantic. The force_port_map field can be replaced with
taking non-zero saved_port_map value into account. So if saved_port_map is
pre-initialized by the low level drivers (platform drivers) then it will
have greater priority over the value read from PI register and will be
used as actual HBA ports mapping later on. Thus the ports map forcing task
will be just transferred from force_port_map to the saved_port_map field.

This modification will perfectly fit into the feature of having OF-based
initialization of the HW-init HBA CSR fields we are about to introduce in
the next commit.

Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Reviewed-by: Hannes Reinecke <hare@suse.de>
---
 drivers/ata/ahci.c             |  2 +-
 drivers/ata/ahci.h             |  1 -
 drivers/ata/libahci.c          | 10 ++++++----
 drivers/ata/libahci_platform.c |  2 +-
 4 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index c1eca72b4575..bacb597a0d32 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -657,7 +657,7 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
 {
 	if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361) {
 		dev_info(&pdev->dev, "JMB361 has only one port\n");
-		hpriv->force_port_map = 1;
+		hpriv->saved_port_map = 1;
 	}
 
 	/*
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index 27cab4e909a5..cc4f40e6c924 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -328,7 +328,6 @@ struct ahci_port_priv {
 struct ahci_host_priv {
 	/* Input fields */
 	unsigned int		flags;		/* AHCI_HFLAG_* */
-	u32			force_port_map;	/* force port map */
 	u32			mask_port_map;	/* mask out particular bits */
 
 	void __iomem *		mmio;		/* bus-independent mem map */
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index cf8c7fd59ada..000a7072614f 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -453,7 +453,6 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv)
 	 * reset.  Values without are used for driver operation.
 	 */
 	hpriv->saved_cap = cap = readl(mmio + HOST_CAP);
-	hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL);
 
 	/* CAP2 register is only defined for AHCI 1.2 and later */
 	vers = readl(mmio + HOST_VERSION);
@@ -517,10 +516,13 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv)
 		cap &= ~HOST_CAP_SXS;
 	}
 
-	if (hpriv->force_port_map && port_map != hpriv->force_port_map) {
+	/* Override the HBA ports mapping if the platform needs it */
+	port_map = readl(mmio + HOST_PORTS_IMPL);
+	if (hpriv->saved_port_map && port_map != hpriv->saved_port_map) {
 		dev_info(dev, "forcing port_map 0x%x -> 0x%x\n",
-			 port_map, hpriv->force_port_map);
-		port_map = hpriv->force_port_map;
+			 port_map, hpriv->saved_port_map);
+		port_map = hpriv->saved_port_map;
+	} else {
 		hpriv->saved_port_map = port_map;
 	}
 
diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
index 307908a0d69d..691737b1a5ba 100644
--- a/drivers/ata/libahci_platform.c
+++ b/drivers/ata/libahci_platform.c
@@ -527,7 +527,7 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev,
 	}
 
 	of_property_read_u32(dev->of_node,
-			     "ports-implemented", &hpriv->force_port_map);
+			     "ports-implemented", &hpriv->saved_port_map);
 
 	if (child_nodes) {
 		for_each_child_of_node(dev->of_node, child) {
-- 
2.35.1


  parent reply	other threads:[~2022-07-28 11:21 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-28 11:18 [PATCH RESEND v6 00/23] ata: ahci: Add DWC/Baikal-T1 AHCI SATA support Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 01/23] dt-bindings: ata: ahci-platform: Move dma-coherent to sata-common.yaml Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 02/23] dt-bindings: ata: ahci-platform: Detach common AHCI bindings Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 03/23] dt-bindings: ata: ahci-platform: Clarify common AHCI props constraints Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 04/23] dt-bindings: ata: sata: Extend number of SATA ports Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 05/23] dt-bindings: ata: sata-brcm: Apply common AHCI schema Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 06/23] ata: libahci_platform: Convert to using platform devm-ioremap methods Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 07/23] ata: libahci_platform: Convert to using devm bulk clocks API Serge Semin
2022-07-29 19:56   ` kernel test robot
2022-07-30  1:51   ` kernel test robot
2022-07-28 11:18 ` [PATCH RESEND v6 08/23] ata: libahci_platform: Sanity check the DT child nodes number Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 09/23] ata: libahci_platform: Parse ports-implemented property in resources getter Serge Semin
2022-07-28 11:18   ` Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 10/23] ata: libahci_platform: Introduce reset assertion/deassertion methods Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 11/23] dt-bindings: ata: ahci: Add platform capability properties Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 12/23] ata: libahci: Extend port-cmd flags set with port capabilities Serge Semin
2022-07-28 11:18 ` Serge Semin [this message]
2022-07-28 11:18 ` [PATCH RESEND v6 14/23] ata: libahci: Don't read AHCI version twice in the save-config method Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 15/23] ata: ahci: Convert __ahci_port_base to accepting hpriv as arguments Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 16/23] ata: ahci: Introduce firmware-specific caps initialization Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 17/23] dt-bindings: ata: ahci: Add DWC AHCI SATA controller DT schema Serge Semin
2022-07-28 11:18 ` [PATCH RESEND v6 18/23] ata: libahci_platform: Add function returning a clock-handle by id Serge Semin
2022-07-28 11:19 ` [PATCH RESEND v6 19/23] ata: ahci: Add DWC AHCI SATA controller support Serge Semin
2022-07-28 11:19 ` [PATCH RESEND v6 20/23] dt-bindings: ata: ahci: Add Baikal-T1 AHCI SATA controller DT schema Serge Semin
2022-07-28 11:19 ` [PATCH RESEND v6 21/23] ata: ahci-dwc: Add platform-specific quirks support Serge Semin
2022-07-28 11:19 ` [PATCH RESEND v6 22/23] ata: ahci-dwc: Add Baikal-T1 AHCI SATA interface support Serge Semin
2022-07-28 11:19 ` [PATCH RESEND v6 23/23] MAINTAINERS: Add maintainers for DWC AHCI SATA driver Serge Semin
2022-07-29  4:18 ` [PATCH RESEND v6 00/23] ata: ahci: Add DWC/Baikal-T1 AHCI SATA support Damien Le Moal
2022-07-31 16:40   ` Serge Semin

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=20220728111905.12427-14-Sergey.Semin@baikalelectronics.ru \
    --to=sergey.semin@baikalelectronics.ru \
    --cc=Alexey.Malahov@baikalelectronics.ru \
    --cc=Pavel.Parkhomenko@baikalelectronics.ru \
    --cc=axboe@kernel.dk \
    --cc=damien.lemoal@opensource.wdc.com \
    --cc=devicetree@vger.kernel.org \
    --cc=fancer.lancer@gmail.com \
    --cc=hare@suse.de \
    --cc=hdegoede@redhat.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robh+dt@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.