Received: by 2002:a5d:9c59:0:0:0:0:0 with SMTP id 25csp50109iof; Sun, 5 Jun 2022 20:46:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwsXiLIjk0LKWzUhL3SNxyiEjQ4Y22LG+DEZo48kTtm4oDIxfwCHYUK1EAZjij9cQ6+j/rB X-Received: by 2002:a65:43cc:0:b0:3c2:6d65:f1f0 with SMTP id n12-20020a6543cc000000b003c26d65f1f0mr19140712pgp.0.1654487182381; Sun, 05 Jun 2022 20:46:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654487182; cv=none; d=google.com; s=arc-20160816; b=rtyfN3SZ/u+jgvlaLVxaLPYd1Gm7g6xCxYXCPGoHYIZ4jq5dw3R1uiasIeBfP1Hhwy CY+tinLKcA1ccRMgGmZVMblDmavm+xymIGD5xgjUVJXMuu8ph22iwpUdr3KUZBCdN1bW IqHfW6dmecucbg0wgtn6PZFpE5A8M1MdqTxPjNOBXQe5Fluz0gLMce63PCFDJHGuKw1K 8AmEj4mK6PzS/ivfshwPZOi/CuaDunBEn6bAU5WJKQciiv0eoWxsWTTuX+otxxAn4dJI HCNutjH5jcuuITW0Y0L9tH8o465oOxE6EhN+5WlaRP4kTRHNLgxWWrnel8lxLJw8uxJv RB9g== 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=CSTeW2UAUhk1XTNRweqXqSxlZQENvbrA7nudD+UmSnA=; b=Fdrc1LoC3gNPXc7VDvbAE4RlX/MREqUj8YgPqtSVWsbN30YUBjrjVef7WHFOe1nWtd 0nwOB2GSkSZoUXKEyxAsM7w/MSBr9gjnBctKLLzYkJBz7kRqe++RmZg0Qt9z9AyVGrMt lBoNhtfeGi9uUkIA63bOKCAG0lJwOLqZHthnHMrArsS1/c5369eXs5c1R/JlU2K2aIjF on7jnrPshwveAZULpKg9+yDkmFgfvK0kBheptfH3YdpCYTumOb8gqAx9H05TAFwMRZ8v 9CSXt9CzRdVjEQo9IhKUR5VQ7YnqOagNX68BhPHTqodqll1ezolN72ODhQD6QfyFAPkx gWOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BlMnmaoh; 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 Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id f1-20020a170902ab8100b0016381c7e28dsi18674627plr.67.2022.06.05.20.46.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jun 2022 20:46:22 -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=BlMnmaoh; 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 EDA9D5AA40; Sun, 5 Jun 2022 20:40:03 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243186AbiFEAvl (ORCPT + 99 others); Sat, 4 Jun 2022 20:51:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242685AbiFEAvZ (ORCPT ); Sat, 4 Jun 2022 20:51:25 -0400 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D2B084EF62; Sat, 4 Jun 2022 17:51:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654390274; x=1685926274; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=o7qTEg3mkquHcTlVCuEgESIyRTIwQAawLYy29W5QiFI=; b=BlMnmaohhA3bD84ZHLJ+P9bIKZ+s/1zzFsE8QT4dGyb3mphbJl7Qh3Sh TCMJSyIY2o0IjO+iUA5bOKwdKme4SfXJSnC0IjpgGSUbhFx1mZFP/YiZz 3Y2DZx3roxektxa/3Jt2XziOeDxbSbx6kt5W8/MgNO/HeJWisl4SSe3ag pSknynm8sUVrMsQQHyJ1Bb5nm2zxTG+BXikyTrEkJZRrlhivBJOaoOSuu fK8sEuZi0QwsCS8SHdmOP3cnkxBHZizY1U5JMzh7lryraaTr498umj8+7 8S+TGtr++OYvj5vHs8VYGhTV1xNGZbDKk2ByhGpQftARIPBOkLX/OH72p A==; X-IronPort-AV: E=McAfee;i="6400,9594,10368"; a="256970402" X-IronPort-AV: E=Sophos;i="5.91,278,1647327600"; d="scan'208";a="256970402" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jun 2022 17:51:14 -0700 X-IronPort-AV: E=Sophos;i="5.91,278,1647327600"; d="scan'208";a="583102788" Received: from aftome-mobl2.amr.corp.intel.com (HELO localhost) ([10.209.107.207]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jun 2022 17:51:13 -0700 From: ira.weiny@intel.com To: Dan Williams , Bjorn Helgaas , Jonathan Cameron Cc: Ira Weiny , Ben Widawsky , Jonathan Cameron , Alison Schofield , Vishal Verma , Dave Jiang , Ben Widawsky , linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, linux-pci@vger.kernel.org Subject: [PATCH V10 5/9] cxl/port: Find a DOE mailbox which supports CDAT Date: Sat, 4 Jun 2022 17:50:45 -0700 Message-Id: <20220605005049.2155874-6-ira.weiny@intel.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220605005049.2155874-1-ira.weiny@intel.com> References: <20220605005049.2155874-1-ira.weiny@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 From: Ira Weiny Each CXL device may have multiple DOE mailbox capabilities and each mailbox may support multiple protocols. CXL port devices need to query the CDAT information specifically. Search the DOE mailboxes for one which supports the CDAT protocol. Cache that mailbox to be used for future queries. Only support memory devices at this time. Cc: Ben Widawsky Cc: Jonathan Cameron Signed-off-by: Ira Weiny --- Changes from V9 Ben Widawsky s/cxl_find_cdat_mb/cxl_cache_cdat_mb/; add kdoc Jonathan Cameron Move cache_cdat to port probe [Not 100% necessary but it goes along with reading the cdat data.] Changes from V8 Incorporate feedback from Jonathan Move all this to the cxl_port object Changes from V7 Minor code clean ups Changes from V6 Adjust for aux devices being a CXL only concept Update commit msg. Ensure devices iterated by auxiliary_find_device() are checked to be DOE devices prior to checking for the CDAT protocol From Ben Ensure reference from auxiliary_find_device() is dropped --- drivers/cxl/core/pci.c | 35 +++++++++++++++++++++++++++++++++++ drivers/cxl/cxl.h | 2 ++ drivers/cxl/cxlpci.h | 1 + drivers/cxl/port.c | 2 ++ 4 files changed, 40 insertions(+) diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c index c4c99ff7b55e..d814d8317975 100644 --- a/drivers/cxl/core/pci.c +++ b/drivers/cxl/core/pci.c @@ -4,11 +4,14 @@ #include #include #include +#include #include #include #include #include "core.h" +#define CXL_DOE_PROTOCOL_TABLE_ACCESS 2 + /** * DOC: cxl core pci * @@ -458,3 +461,35 @@ int cxl_hdm_decode_init(struct cxl_dev_state *cxlds, struct cxl_hdm *cxlhdm) return 0; } EXPORT_SYMBOL_NS_GPL(cxl_hdm_decode_init, CXL); + +/** + * cxl_cache_cdat_mb() -- cache the DOE mailbox which suports the CDAT protocol + * + * @port: Port to containing DOE Mailboxes + * + * Cache a pointer to the doe mailbox which supports CDAT. + */ +void cxl_cache_cdat_mb(struct cxl_port *port) +{ + struct device *dev = port->uport; + struct cxl_memdev *cxlmd; + struct cxl_dev_state *cxlds; + int i; + + if (!is_cxl_memdev(dev)) + return; + + cxlmd = to_cxl_memdev(dev); + cxlds = cxlmd->cxlds; + + for (i = 0; i < cxlds->num_mbs; i++) { + struct pci_doe_mb *cur = cxlds->doe_mbs[i]; + + if (pci_doe_supports_prot(cur, PCI_DVSEC_VENDOR_ID_CXL, + CXL_DOE_PROTOCOL_TABLE_ACCESS)) { + port->cdat_mb = cur; + return; + } + } +} +EXPORT_SYMBOL_NS_GPL(cxl_cache_cdat_mb, CXL); diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h index 140dc3278cde..0a86be589ffc 100644 --- a/drivers/cxl/cxl.h +++ b/drivers/cxl/cxl.h @@ -267,6 +267,7 @@ struct cxl_nvdimm { * @component_reg_phys: component register capability base address (optional) * @dead: last ep has been removed, force port re-creation * @depth: How deep this port is relative to the root. depth 0 is the root. + * @cdat_mb: Mailbox which supports the CDAT protocol */ struct cxl_port { struct device dev; @@ -278,6 +279,7 @@ struct cxl_port { resource_size_t component_reg_phys; bool dead; unsigned int depth; + struct pci_doe_mb *cdat_mb; }; /** diff --git a/drivers/cxl/cxlpci.h b/drivers/cxl/cxlpci.h index fce1c11729c2..ddbb8b77752e 100644 --- a/drivers/cxl/cxlpci.h +++ b/drivers/cxl/cxlpci.h @@ -74,4 +74,5 @@ static inline resource_size_t cxl_regmap_to_base(struct pci_dev *pdev, int devm_cxl_port_enumerate_dports(struct cxl_port *port); struct cxl_dev_state; int cxl_hdm_decode_init(struct cxl_dev_state *cxlds, struct cxl_hdm *cxlhdm); +void cxl_cache_cdat_mb(struct cxl_port *port); #endif /* __CXL_PCI_H__ */ diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c index 3cf308f114c4..04f3d1fc6e07 100644 --- a/drivers/cxl/port.c +++ b/drivers/cxl/port.c @@ -49,6 +49,8 @@ static int cxl_port_probe(struct device *dev) if (IS_ERR(cxlhdm)) return PTR_ERR(cxlhdm); + cxl_cache_cdat_mb(port); + if (is_cxl_endpoint(port)) { struct cxl_memdev *cxlmd = to_cxl_memdev(port->uport); struct cxl_dev_state *cxlds = cxlmd->cxlds; -- 2.35.1