Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp2373546rwn; Fri, 9 Sep 2022 12:40:07 -0700 (PDT) X-Google-Smtp-Source: AA6agR6qmoiynfd7OtqcY23BTI07knrb8i8RTiS67Sw0Vgz2b3HFIhoTXitTzh0w3peTE+vJKqPb X-Received: by 2002:a17:907:7da8:b0:730:fdad:4af8 with SMTP id oz40-20020a1709077da800b00730fdad4af8mr11148250ejc.401.1662752407251; Fri, 09 Sep 2022 12:40:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662752407; cv=none; d=google.com; s=arc-20160816; b=QTqEv6R+wIcYvuZghvwTkimRDsGdhCnfdXpoupDEsBOVG10aXkGm7sYeLaqiO50aLP 8qWrm9AVEBoyiIFx1Esqv5qaP1MOkm/SUDlhsyocPp+hYYqq5rwYg73sH/H5bY+DlWHP XyrjuSBG1V8Ki1fPEDEft5SFBmUESohnSMmW1KzMCcr1PfiuYC55NklDLSDc8TUkqmkg ZE4sbwcf67wRVHQlFJGsDWMKDi/Wca66voRHbq9d9KEKpwHxYtW4/OvkX9er4Vpc4+LH xkCTFCRooA1BH/BFNrMtmM6D84gsPUmIvxXFa39ubORTnpqg0f9v8MY132OEt1Cl8qzn nSnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=xg2OaeZnmPtszpVQN/SChJWw4hReYgrzAYpanoiG0kE=; b=J5GTTvLse9b0EhyG9qylMq5oRI8R9VitFUAlAcTy2Vx5MChXvMLvnbAj6tT5l4dSLq RV/S1GIreN30CY61SFUX3mSxgZ8T5kH6zSl51ok72dsmPNBluoePyplVtXWOfP2idMeX 6MfAuJxtGF0tMcPMTfj7+7MZKXMFoQJJ/WvGcMTrLyhuXOT7M9s9KRBJOPT8prH+VKO1 X950Dvyj8pKqV1oBvMrKPRwfUpDKZL5mdr4i1wowo+1VINv1851pqW7d9N7gvpJ6qiFo Y8Hu101hVeJr2Q9q2qcNJH5vZPiknLnxe6nbkfirnpAVd77ah/61Vl0N1u6r3Ilhn8KF nSLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baikalelectronics.ru header.s=mail header.b=dTvDS2QH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d4-20020a50fb04000000b00450f56cd37bsi908583edq.175.2022.09.09.12.39.42; Fri, 09 Sep 2022 12:40:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@baikalelectronics.ru header.s=mail header.b=dTvDS2QH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231991AbiIITiU (ORCPT + 99 others); Fri, 9 Sep 2022 15:38:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230423AbiIIThM (ORCPT ); Fri, 9 Sep 2022 15:37:12 -0400 Received: from mail.baikalelectronics.com (mail.baikalelectronics.com [87.245.175.230]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 08E3711C7E7; Fri, 9 Sep 2022 12:36:47 -0700 (PDT) Received: from mail (mail.baikal.int [192.168.51.25]) by mail.baikalelectronics.com (Postfix) with ESMTP id C14E5DBF; Fri, 9 Sep 2022 22:40:28 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mail.baikalelectronics.com C14E5DBF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baikalelectronics.ru; s=mail; t=1662752428; bh=xg2OaeZnmPtszpVQN/SChJWw4hReYgrzAYpanoiG0kE=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=dTvDS2QHHDP3hTcT/QCoG82jygqtpvQXIhvFTn1nl8LSxpLwM12d2POhk4ddr11tL OBgkbVME6MFzpWSvBnMVOcL8bMzKPAxWkXHIrAEb+cPPKfFNZru7iANE0pYFWKl3Q0 khA5Raa8nph+KqeHd4HGZleKlPxE4Q+ZmRuYf6Dc= Received: from localhost (192.168.168.10) by mail (192.168.51.25) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 9 Sep 2022 22:36:40 +0300 From: Serge Semin To: Damien Le Moal , Hans de Goede , Jens Axboe , Hannes Reinecke CC: Serge Semin , Serge Semin , Alexey Malahov , Pavel Parkhomenko , Rob Herring , Krzysztof Kozlowski , , , Subject: [PATCH v8 13/23] ata: libahci: Discard redundant force_port_map parameter Date: Fri, 9 Sep 2022 22:36:11 +0300 Message-ID: <20220909193621.17380-14-Sergey.Semin@baikalelectronics.ru> In-Reply-To: <20220909193621.17380-1-Sergey.Semin@baikalelectronics.ru> References: <20220909193621.17380-1-Sergey.Semin@baikalelectronics.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Reviewed-by: Hannes Reinecke --- 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 31be8a10facd..01c195b6d9e6 100644 --- a/drivers/ata/libahci_platform.c +++ b/drivers/ata/libahci_platform.c @@ -526,7 +526,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.37.2