From patchwork Thu Aug 17 12:17:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 136130 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b82d:0:b0:3f2:4152:657d with SMTP id z13csp1981976vqi; Sat, 19 Aug 2023 05:03:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGN7QtWeYc20qBkJVNOYqMcpFv71cBkg4SxeRSQ7Uk4OfYVQPAgtsoZek0ggWBVmSzIAwq2 X-Received: by 2002:a05:6871:728:b0:1be:ca9e:a65 with SMTP id f40-20020a056871072800b001beca9e0a65mr2798010oap.58.1692446626708; Sat, 19 Aug 2023 05:03:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692446626; cv=none; d=google.com; s=arc-20160816; b=gIobZCrgIYPkhdXJN8T5cvnKMvfjKjXWJMpc5Tk2I5FNlIEOniQXsl0EImoi3DfZ76 j5X18CFrn6bcVXZj/ZxL8p4Gi+VPmmLgXGrHY7bnkJml68UkBPxulPn1JvsPg5a3tLR1 ydX0TS/B94o06aJ3/r+Pff9JfB0hBYEWG4FiuLV3UJ+o9YpKH6kQu3E5QUJHKocRYKHZ HtrZgdkEtlNqtsOcVhcD3jMdgSF3GmgdVkib4ZcYKBfXSzNvfqa2XtJD8GFFbmir0mP4 qFaZoLBJ/5l5umVS8X0RDzDWKiZhNOBGhMU7xwYdDFEx4SQIV44PpMthFvfMMe4SQYAp HusQ== 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; bh=pg8QQd3oUNwuGsFtCkXbHNhXBNZ8wqylw1RFmobdRio=; fh=RnTGjPDI7+L65kWs+j0dAg3e8ksRg2WLBNe/2Ufn2GA=; b=yQ7SShR6NUvpZckUlFunMHjT0SjxXxlb5jKXdx/0Ar8k7h7o64pPyvjDT0oR0hhFZN S0999nph0s76aHOidcpZD+AH8HrHyOCGOshNnWvD44wKb6ZylKinUmtz35ij3DtOAGGH EuVjmylKtuxn+OKo5JkdKERpvZwy2b1fvFuNoSmTOV8ZwOGo8H3zgsEt3Zktm4nGC+OV 1fhEScQ4Bv8C83Zoa/aiNmC6HpUjKeDNnDlzO3QrmPfuG9+hyTwaFNxcwx1i2RpcInJV +qDACLKuJJi9En/QmcPJHwdmz6SrnDbk/WLiSTivswo9XWl6htJOCSccIaP/A4beXQ6z tkYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=C5OjBwm4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id s14-20020a65690e000000b00565f76f86d8si3340155pgq.818.2023.08.19.05.03.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Aug 2023 05:03:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=C5OjBwm4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 8BAC9765BA; Sat, 19 Aug 2023 01:36:03 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350795AbjHQMSM (ORCPT + 99 others); Thu, 17 Aug 2023 08:18:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47706 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350787AbjHQMRx (ORCPT ); Thu, 17 Aug 2023 08:17:53 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 850EB273F; Thu, 17 Aug 2023 05:17:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1692274670; x=1723810670; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vDsDIHqtLtfNmUG3Y8t5VDuHkp8RJgeZagGcp/a8iuA=; b=C5OjBwm48bQBMV7R1vPx7qIPRamtgbUmb2GiZFQOPp4nZlC8lLqosQCC 4sHp7An6EFL3je9F6TV2zLX6hq9ocv+e88UdaDWYnbza6xiS1MYG0xRLq YD2f0j3YqP4zPXFKbwGtrckLkMzouhHymSTJG9QH2IsIj1XpJsFc1p2xk D1EXUNm38UbGEui6Oj50JDCRqY7xhWwhl5iL/x+vqkAE0yjUWtdVkdxtR CJV/ZAO9CqKXpt6ZCYGvBA8Gczp6+1t+xzE7F2OaK/6s2BkessXG9BTVM HytCe61AuzoUlEchmXQO1heGCMN9+oEXBDCpAV4f7yiUfCrInxQg4sjHD Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10803"; a="436696716" X-IronPort-AV: E=Sophos;i="6.01,180,1684825200"; d="scan'208";a="436696716" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2023 05:17:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10803"; a="848872961" X-IronPort-AV: E=Sophos;i="6.01,180,1684825200"; d="scan'208";a="848872961" Received: from lababeix-mobl1.ger.corp.intel.com (HELO ijarvine-mobl2.ger.corp.intel.com) ([10.251.212.52]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2023 05:17:36 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Lukas Wunner , Alexandru Gagniuc , Dennis Dalessandro , Jason Gunthorpe , Leon Romanovsky , linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krishna chaitanya chundru , Srinivas Pandruvada , Alex Deucher , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Subject: [PATCH 04/10] drm/IB/hfi1: Use RMW accessors for changing LNKCTL2 Date: Thu, 17 Aug 2023 15:17:02 +0300 Message-Id: <20230817121708.53213-5-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230817121708.53213-1-ilpo.jarvinen@linux.intel.com> References: <20230817121708.53213-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_NONE 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 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1774658913769293723 X-GMAIL-MSGID: 1774658913769293723 Don't assume that only the driver would be accessing LNKCTL2. In the case of upstream (parent), the driver does not even own the device it's changing the registers for. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. This change is also useful as a cleanup. Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen --- drivers/infiniband/hw/hfi1/pcie.c | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/drivers/infiniband/hw/hfi1/pcie.c b/drivers/infiniband/hw/hfi1/pcie.c index 08732e1ac966..60a177f52eb5 100644 --- a/drivers/infiniband/hw/hfi1/pcie.c +++ b/drivers/infiniband/hw/hfi1/pcie.c @@ -1212,14 +1212,11 @@ int do_pcie_gen3_transition(struct hfi1_devdata *dd) (u32)lnkctl2); /* only write to parent if target is not as high as ours */ if ((lnkctl2 & PCI_EXP_LNKCTL2_TLS) < target_vector) { - lnkctl2 &= ~PCI_EXP_LNKCTL2_TLS; - lnkctl2 |= target_vector; - dd_dev_info(dd, "%s: ..new link control2: 0x%x\n", __func__, - (u32)lnkctl2); - ret = pcie_capability_write_word(parent, - PCI_EXP_LNKCTL2, lnkctl2); + ret = pcie_capability_clear_and_set_word(parent, PCI_EXP_LNKCTL2, + PCI_EXP_LNKCTL2_TLS, + target_vector); if (ret) { - dd_dev_err(dd, "Unable to write to PCI config\n"); + dd_dev_err(dd, "Unable to change PCI target speed\n"); return_error = 1; goto done; } @@ -1228,22 +1225,11 @@ int do_pcie_gen3_transition(struct hfi1_devdata *dd) } dd_dev_info(dd, "%s: setting target link speed\n", __func__); - ret = pcie_capability_read_word(dd->pcidev, PCI_EXP_LNKCTL2, &lnkctl2); + ret = pcie_capability_clear_and_set_word(dd->pcidev, PCI_EXP_LNKCTL2, + PCI_EXP_LNKCTL2_TLS, + target_vector); if (ret) { - dd_dev_err(dd, "Unable to read from PCI config\n"); - return_error = 1; - goto done; - } - - dd_dev_info(dd, "%s: ..old link control2: 0x%x\n", __func__, - (u32)lnkctl2); - lnkctl2 &= ~PCI_EXP_LNKCTL2_TLS; - lnkctl2 |= target_vector; - dd_dev_info(dd, "%s: ..new link control2: 0x%x\n", __func__, - (u32)lnkctl2); - ret = pcie_capability_write_word(dd->pcidev, PCI_EXP_LNKCTL2, lnkctl2); - if (ret) { - dd_dev_err(dd, "Unable to write to PCI config\n"); + dd_dev_err(dd, "Unable to change PCI target speed\n"); return_error = 1; goto done; }