Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp1256147rwb; Sat, 3 Sep 2022 11:25:36 -0700 (PDT) X-Google-Smtp-Source: AA6agR7bW4Q0X1OpmY+N//4YZs5s+6O7Ino9NvaAbRGuid+nLvfoL94NedIS09kFSsAcnRHWUnUQ X-Received: by 2002:a17:902:ce12:b0:172:b8a2:d688 with SMTP id k18-20020a170902ce1200b00172b8a2d688mr40792175plg.65.1662229536203; Sat, 03 Sep 2022 11:25:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662229536; cv=none; d=google.com; s=arc-20160816; b=HFGhwd2ftJMFCVyeJk4ztHnuur7GhaMjovX2vuhbHEh5O9KLxAXNhnEPL520tAp5v+ Qw1gU8QbjYz9dpIbuwk0O+cumOjAKfxsMXMKX9wQ9h1JfD88nY3Mw0qgkVXC84rOSEda 0J/lbRCbg9SstismpURsABfh0XSFWDq6d8Bukpmr6L2XokQbGLsoB8bgMHqtvK6IMm+5 fRFm1pENSEI1aB4Ezij3yejw5tUw6iFUaHjbiIt+p0KmBYsQ6A/5HPpwmZecBAOV1eyj Ww59Oms9ObyZXvZmhvU2IgNjhJI3FrhZmAI7D8k0qztH07yCBO+t2tAW+q/RVd5mxGWN HOiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version; bh=ADCDZkM9VRAAcy+FPVXNht63Zj+njGChRH3Rklp+Wy8=; b=epKdZEEvndgLx7qIL0atltcZ0GzZrKRtNxzywhE+Gc17i7E8iqQCOhyj9lRROYL5IP Jsqc8yP8BjWduMac1dn3+qRB84aY76aZdTjiNxjSifsze6tZdETsrEev0EoBvXdj0XRc 7zFBkvfIb36teifiqu88UCNwSlgDrXeKdP6KGq6L0W25WXVWVhErcHpvvaYObK3NqadU OXMQbgfQksauDX3hfvU+q2JFtXZVUvvcHioCqIvh+uytp/OKsFUSJMvvdcZcSXcaVpjF S0PBEx5zvqAdUUx1SVkTrzYcNa50eoZG9OUrcRw+16cBaH7akd4zKIOUBHnZoS/mt11b 7qjg== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j6-20020a17090276c600b001746724391bsi5118208plt.263.2022.09.03.11.25.25; Sat, 03 Sep 2022 11:25:36 -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; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231719AbiICRk6 (ORCPT + 99 others); Sat, 3 Sep 2022 13:40:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230507AbiICRk5 (ORCPT ); Sat, 3 Sep 2022 13:40:57 -0400 Received: from mail-yb1-f170.google.com (mail-yb1-f170.google.com [209.85.219.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 283EF5208A; Sat, 3 Sep 2022 10:40:56 -0700 (PDT) Received: by mail-yb1-f170.google.com with SMTP id 202so2726194ybe.13; Sat, 03 Sep 2022 10:40:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=ADCDZkM9VRAAcy+FPVXNht63Zj+njGChRH3Rklp+Wy8=; b=ocEsvxDYyomHlVkffJCXMnkJIRtBjfGDnCnz/K/iZNQA7tq2KiFYPNFn290t6spYfe QrafLIyZZMgKxsvaUKBN3iAbQsj5Q2RyoYx1xhlE6KK4IPeE0nYzYcewW8iAgkpr4DWV x2GtR4ReouASIjJnp6Li4grSq/TJV6t8Y4jWfLkp/IaII3gYAeiBzZEs2/4336ngiDA+ brtTAzBG9dP/8eKi6QEwOc7yUhVQdtrMJFrN63lzq6Hg5ia1ERRyUhxPWvTyv8C0BH9x Qtotq/vAAHwYvwIMx7Q+XkoVepu/mYppEMoBsKljuKLdtHf05XcfrtKWQYxwT5PjjPPU 9NVA== X-Gm-Message-State: ACgBeo0m8KgxFqwaA8/3wCWcwDW7twj3e1ycxZtc8dEJeFj+a09o3sSB P+5qRc1mPzvvbJ4Ut1vuCM8DqMBx0iN7p1wcptE= X-Received: by 2002:a25:b749:0:b0:68f:171f:96bd with SMTP id e9-20020a25b749000000b0068f171f96bdmr28745931ybm.137.1662226855380; Sat, 03 Sep 2022 10:40:55 -0700 (PDT) MIME-Version: 1.0 References: <20220902233543.390890-1-helgaas@kernel.org> <20220902233543.390890-3-helgaas@kernel.org> In-Reply-To: <20220902233543.390890-3-helgaas@kernel.org> From: "Rafael J. Wysocki" Date: Sat, 3 Sep 2022 19:40:44 +0200 Message-ID: Subject: Re: [PATCH v2 2/3] PCI/PTM: Implement pci_enable_ptm() for Root Ports, Switch Upstream Ports To: Bjorn Helgaas Cc: Kai-Heng Feng , Rajvi Jingar , "Rafael J . Wysocki" , Koba Ko , Mika Westerberg , "David E . Box" , Sathyanarayanan Kuppuswamy , Linux PCI , Linux PM , Linux Kernel Mailing List , Bjorn Helgaas Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=no 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 On Sat, Sep 3, 2022 at 1:35 AM Bjorn Helgaas wrote: > > From: Bjorn Helgaas > > Signed-off-by: Bjorn Helgaas > --- > drivers/pci/pcie/ptm.c | 34 +++++++++++++++++++++++++++------- > 1 file changed, 27 insertions(+), 7 deletions(-) > > diff --git a/drivers/pci/pcie/ptm.c b/drivers/pci/pcie/ptm.c > index b6a417247ce3..ad283818f37b 100644 > --- a/drivers/pci/pcie/ptm.c > +++ b/drivers/pci/pcie/ptm.c > @@ -167,11 +167,11 @@ int pci_enable_ptm(struct pci_dev *dev, u8 *granularity) > if (!pos) > return -EINVAL; > > - pci_read_config_dword(dev, pos + PCI_PTM_CAP, &cap); > - if (!(cap & PCI_PTM_CAP_REQ)) > - return -EINVAL; > - > /* > + * Root Ports and Switch Upstream Ports have been configured > + * by pci_ptm_init(), so preserve their PCI_PTM_CTRL_ROOT and > + * granularity. > + * > * For a PCIe Endpoint, PTM is only useful if the endpoint can > * issue PTM requests to upstream devices that have PTM enabled. > * > @@ -179,19 +179,39 @@ int pci_enable_ptm(struct pci_dev *dev, u8 *granularity) > * device, so there must be some implementation-specific way to > * associate the endpoint with a time source. > */ > - if (pci_pcie_type(dev) == PCI_EXP_TYPE_ENDPOINT) { > + if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT || > + pci_pcie_type(dev) == PCI_EXP_TYPE_UPSTREAM) { > + if (pci_pcie_type(dev) == PCI_EXP_TYPE_UPSTREAM) { > + ups = pci_upstream_bridge(dev); > + if (!ups || !ups->ptm_enabled) > + return -EINVAL; > + } > + > + pci_read_config_dword(dev, pos + PCI_PTM_CTRL, &ctrl); > + ctrl |= PCI_PTM_CTRL_ENABLE; > + } else if (pci_pcie_type(dev) == PCI_EXP_TYPE_ENDPOINT) { > + pci_read_config_dword(dev, pos + PCI_PTM_CAP, &cap); > + if (!(cap & PCI_PTM_CAP_REQ)) > + return -EINVAL; > + > ups = pci_upstream_bridge(dev); > if (!ups || !ups->ptm_enabled) > return -EINVAL; > > dev->ptm_granularity = ups->ptm_granularity; > + ctrl = PCI_PTM_CTRL_ENABLE; > + ctrl |= dev->ptm_granularity << 8; > } else if (pci_pcie_type(dev) == PCI_EXP_TYPE_RC_END) { > + pci_read_config_dword(dev, pos + PCI_PTM_CAP, &cap); > + if (!(cap & PCI_PTM_CAP_REQ)) > + return -EINVAL; > + > dev->ptm_granularity = 0; > + ctrl = PCI_PTM_CTRL_ENABLE; > + ctrl |= dev->ptm_granularity << 8; > } else > return -EINVAL; I would do if ((pci_pcie_type(dev) == PCI_EXP_TYPE_UPSTREAM || pci_pcie_type(dev) == PCI_EXP_TYPE_ENDPOINT)) { ups = pci_upstream_bridge(dev); if (!ups || !ups->ptm_enabled) return -EINVAL; dev->ptm_granularity = ups->ptm_granularity; } switch(pci_pcie_type(dev)) { case PCI_EXP_TYPE_ROOT_PORT: case PCI_EXP_TYPE_UPSTREAM: pci_read_config_dword(dev, pos + PCI_PTM_CTRL, &ctrl); ctrl |= PCI_PTM_CTRL_ENABLE; break; case PCI_EXP_TYPE_ENDPOINT: case PCI_EXP_TYPE_RC_END: ctrl = PCI_PTM_CTRL_ENABLE; break; default: return -EINVAL; } > > - ctrl = PCI_PTM_CTRL_ENABLE; > - ctrl |= dev->ptm_granularity << 8; And I wouldn't remove the line above. Note that for root ports dev->ptm_granularity must be set and reflect the register setting or else the code wouldn't have worked for downstream components. > pci_write_config_dword(dev, pos + PCI_PTM_CTRL, ctrl); > dev->ptm_enabled = 1; > > --