Received: by 2002:a05:7412:2a8c:b0:e2:908c:2ebd with SMTP id u12csp1917009rdh; Tue, 26 Sep 2023 07:19:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE22kvFUPnS0XwCquAHar2VqOM/4iVGPCS/rlt//oUQne8eSfjgYcqLo6VUWA9S/s+DsWFp X-Received: by 2002:a05:6a00:987:b0:690:41a1:9b64 with SMTP id u7-20020a056a00098700b0069041a19b64mr8705946pfg.1.1695737962358; Tue, 26 Sep 2023 07:19:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695737962; cv=none; d=google.com; s=arc-20160816; b=Ql4g7eSfhUXK6oTPKNAZ4m32Vzh5EIUdhN3fjX3GDW4mPwYx9rlCNoMWxxvI5rcBKe 6buS1AQx8QgmlY2JBJpC61sLykgS4SZxM+QUig6CjsyRfIj4pVKllzuKqZ+bUCb/+7+6 ashb7lnbdRxqIe6midyay3wfL1p1CUpOkNAhIYSrmjEyO5M8aNc+J4iu5Lw6rhLwk0ZH USs/KgvnGrCyVqlbxGohERNrWRbMkUENGMBOzn4EG+P6PtULbyl46ZSAySgMNDJ2UTEY MQfh8e2MCgnLKMf0kPql4Bularcciqi5NTljOAu9L8jSl9pcn/s2qHk+Sv3iJFuBzvEU 5WTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:message-id:in-reply-to :subject:cc:to:from:date:dkim-signature; bh=NAupJIfVXX/YGXP4zr7WQASEgQ1m/7+z+v4rMMClFWA=; fh=mOqrdtzLxfRdhx+JUcCLIFZwj5ZpRA4B+MTwRGfrWMA=; b=g1wYW3N+eWGgktGVKPqH84v5JAIpXt5MbXcjQRZr3s3Lgz1L6/TLV8HQ+/4ASG3lvV yyF5/THXRS9kOlpsYUJlz4af2ayaJIPw/tmluxHQiHg7fmW1bi3slU6Tk/4PxYg9w52W gLYbLdAXGjRoq/nxzwPHG/xPgGx9Bwk+X3nsbYqnZ43T/eQF9KgfNh1Q8lunpOmRdGRT ze8Pti+pzAHSzTVZU9nv1ejcnosvliUAP6bkrBOeVwsT/fufnUtV1U2k/0xA3PkM8/qr KcN4vTABm9h8U8lkO+HgBmLRNqtho2CUlgLgfvUYqLZMjdrXzp2lVKKbf18hDmy8Mj7R YAoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=j08Ib+05; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 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 agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id fa25-20020a056a002d1900b0068a676c5f2csi13385960pfb.32.2023.09.26.07.19.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Sep 2023 07:19:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=j08Ib+05; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 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 out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 8C07D818BCB7; Tue, 26 Sep 2023 07:19:17 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232646AbjIZOTS (ORCPT + 99 others); Tue, 26 Sep 2023 10:19:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231902AbjIZOTR (ORCPT ); Tue, 26 Sep 2023 10:19:17 -0400 X-Greylist: delayed 62 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Tue, 26 Sep 2023 07:19:06 PDT Received: from mgamail.intel.com (unknown [198.175.65.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F04E210E; Tue, 26 Sep 2023 07:19:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1695737947; x=1727273947; h=date:from:to:cc:subject:in-reply-to:message-id: references:mime-version; bh=tZezWUyWI/E+sECmaBnngNun38NOGr4Q7H/3fQV86jU=; b=j08Ib+05w23lMOFcP9t9Uj1v+4pcNFNhD0vG3cyyGkOVWtCLoYGcOQFD I42adpN1zRkjxWBXS+qqvajolMqGnV5FRX1WEBrG7fMJN50aQ6eqtTA+/ aaj39BJgIA0t5Ee9uHN2hbZ0A6L1idhPQdw3pfxaefdSm02O1AKo82I2V cn1KipPUAswGbPebdIN3Re276NHCuacT+uGa1ShonRC7IQlO5/5dX+MaH G3f5Zb2sMh0wxZFDREPTD9f5qGZJUc9zCBGZ1bdfqAKeLmJeu/bcZx3Zr lzs7gxeEAEY+kToTGFnxZJ1+bXcDhT3DLgJHmoTJwgOa1Fzl9hQWUEcB9 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10845"; a="216959" X-IronPort-AV: E=Sophos;i="6.03,178,1694761200"; d="scan'208";a="216959" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Sep 2023 07:18:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10845"; a="814493035" X-IronPort-AV: E=Sophos;i="6.03,178,1694761200"; d="scan'208";a="814493035" Received: from hhalmen-mobl.ger.corp.intel.com ([10.251.219.207]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Sep 2023 07:18:02 -0700 Date: Tue, 26 Sep 2023 17:17:59 +0300 (EEST) From: =?ISO-8859-15?Q?Ilpo_J=E4rvinen?= To: "David E. Box" cc: LKML , platform-driver-x86@vger.kernel.org, rajvi.jingar@linux.intel.com Subject: Re: [PATCH 01/11] platform/x86/intel/vsec: Add intel_vsec_register In-Reply-To: <20230922213032.1770590-2-david.e.box@linux.intel.com> Message-ID: <1ed7ddc8-18a-cfbc-a4cd-baaa5751493e@linux.intel.com> References: <20230922213032.1770590-1-david.e.box@linux.intel.com> <20230922213032.1770590-2-david.e.box@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 26 Sep 2023 07:19:17 -0700 (PDT) On Fri, 22 Sep 2023, David E. Box wrote: > From: Gayatri Kammela > > Add and export intel_vsec_register() to allow the registration of Intel > extended capabilities from other drivers. Add check to look for memory > conflicts before registering a new capability. > > Signed-off-by: Gayatri Kammela > Signed-off-by: David E. Box > --- > drivers/platform/x86/intel/pmt/class.c | 2 +- > drivers/platform/x86/intel/vsec.c | 58 ++++++++++---------------- > drivers/platform/x86/intel/vsec.h | 42 ++++++++++++++++++- > 3 files changed, 63 insertions(+), 39 deletions(-) > > diff --git a/drivers/platform/x86/intel/pmt/class.c b/drivers/platform/x86/intel/pmt/class.c > index f32a233470de..2ad91d2fd954 100644 > --- a/drivers/platform/x86/intel/pmt/class.c > +++ b/drivers/platform/x86/intel/pmt/class.c > @@ -31,7 +31,7 @@ bool intel_pmt_is_early_client_hw(struct device *dev) > * differences from the server platforms (which use the Out Of Band > * Management Services Module OOBMSM). > */ > - return !!(ivdev->info->quirks & VSEC_QUIRK_EARLY_HW); > + return !!(ivdev->quirks & VSEC_QUIRK_EARLY_HW); > } > EXPORT_SYMBOL_NS_GPL(intel_pmt_is_early_client_hw, INTEL_PMT); > > diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c > index c1f9e4471b28..c5d0202068cf 100644 > --- a/drivers/platform/x86/intel/vsec.c > +++ b/drivers/platform/x86/intel/vsec.c > @@ -24,13 +24,6 @@ > > #include "vsec.h" > > -/* Intel DVSEC offsets */ > -#define INTEL_DVSEC_ENTRIES 0xA > -#define INTEL_DVSEC_SIZE 0xB > -#define INTEL_DVSEC_TABLE 0xC > -#define INTEL_DVSEC_TABLE_BAR(x) ((x) & GENMASK(2, 0)) > -#define INTEL_DVSEC_TABLE_OFFSET(x) ((x) & GENMASK(31, 3)) > -#define TABLE_OFFSET_SHIFT 3 > #define PMT_XA_START 0 > #define PMT_XA_MAX INT_MAX > #define PMT_XA_LIMIT XA_LIMIT(PMT_XA_START, PMT_XA_MAX) > @@ -39,34 +32,6 @@ static DEFINE_IDA(intel_vsec_ida); > static DEFINE_IDA(intel_vsec_sdsi_ida); > static DEFINE_XARRAY_ALLOC(auxdev_array); > > -/** > - * struct intel_vsec_header - Common fields of Intel VSEC and DVSEC registers. > - * @rev: Revision ID of the VSEC/DVSEC register space > - * @length: Length of the VSEC/DVSEC register space > - * @id: ID of the feature > - * @num_entries: Number of instances of the feature > - * @entry_size: Size of the discovery table for each feature > - * @tbir: BAR containing the discovery tables > - * @offset: BAR offset of start of the first discovery table > - */ > -struct intel_vsec_header { > - u8 rev; > - u16 length; > - u16 id; > - u8 num_entries; > - u8 entry_size; > - u8 tbir; > - u32 offset; > -}; > - > -enum intel_vsec_id { > - VSEC_ID_TELEMETRY = 2, > - VSEC_ID_WATCHER = 3, > - VSEC_ID_CRASHLOG = 4, > - VSEC_ID_SDSI = 65, > - VSEC_ID_TPMI = 66, > -}; > - > static const char *intel_vsec_name(enum intel_vsec_id id) > { > switch (id) { > @@ -223,19 +188,28 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he > header->offset + i * (header->entry_size * sizeof(u32)); > tmp->end = tmp->start + (header->entry_size * sizeof(u32)) - 1; > tmp->flags = IORESOURCE_MEM; > + > + /* Check resource is not in use */ > + if (!request_mem_region(tmp->start, resource_size(tmp), "")) { > + kfree(res); > + kfree(intel_vsec_dev); > + return -EBUSY; > + } > + > + release_mem_region(tmp->start, resource_size(tmp)); > } > > intel_vsec_dev->pcidev = pdev; > intel_vsec_dev->resource = res; > intel_vsec_dev->num_resources = header->num_entries; > - intel_vsec_dev->info = info; > + intel_vsec_dev->quirks = info->quirks; > > if (header->id == VSEC_ID_SDSI) > intel_vsec_dev->ida = &intel_vsec_sdsi_ida; > else > intel_vsec_dev->ida = &intel_vsec_ida; > > - return intel_vsec_add_aux(pdev, NULL, intel_vsec_dev, > + return intel_vsec_add_aux(pdev, info->parent, intel_vsec_dev, > intel_vsec_name(header->id)); > } > > @@ -353,6 +327,16 @@ static bool intel_vsec_walk_vsec(struct pci_dev *pdev, > return have_devices; > } > > +void intel_vsec_register(struct pci_dev *pdev, > + struct intel_vsec_platform_info *info) > +{ > + if (!pdev || !info) > + return; > + > + intel_vsec_walk_header(pdev, info); > +} > +EXPORT_SYMBOL_NS_GPL(intel_vsec_register, INTEL_VSEC); > + > static int intel_vsec_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > { > struct intel_vsec_platform_info *info; > diff --git a/drivers/platform/x86/intel/vsec.h b/drivers/platform/x86/intel/vsec.h > index 0fd042c171ba..ab0f161f86c5 100644 > --- a/drivers/platform/x86/intel/vsec.h > +++ b/drivers/platform/x86/intel/vsec.h > @@ -11,9 +11,45 @@ > #define VSEC_CAP_SDSI BIT(3) > #define VSEC_CAP_TPMI BIT(4) > > +/* Intel DVSEC offsets */ > +#define INTEL_DVSEC_ENTRIES 0xA > +#define INTEL_DVSEC_SIZE 0xB > +#define INTEL_DVSEC_TABLE 0xC > +#define INTEL_DVSEC_TABLE_BAR(x) ((x) & GENMASK(2, 0)) > +#define INTEL_DVSEC_TABLE_OFFSET(x) ((x) & GENMASK(31, 3)) > +#define TABLE_OFFSET_SHIFT 3 > + > struct pci_dev; > struct resource; > > +enum intel_vsec_id { > + VSEC_ID_TELEMETRY = 2, > + VSEC_ID_WATCHER = 3, > + VSEC_ID_CRASHLOG = 4, > + VSEC_ID_SDSI = 65, > + VSEC_ID_TPMI = 66, > +}; > + > +/** > + * struct intel_vsec_header - Common fields of Intel VSEC and DVSEC registers. > + * @rev: Revision ID of the VSEC/DVSEC register space > + * @length: Length of the VSEC/DVSEC register space > + * @id: ID of the feature > + * @num_entries:Number of instances of the feature > + * @entry_size: Size of the discovery table for each feature > + * @tbir: BAR containing the discovery tables > + * @offset: BAR offset of start of the first discovery table > + */ > +struct intel_vsec_header { > + u8 rev; > + u16 length; > + u16 id; > + u8 num_entries; > + u8 entry_size; > + u8 tbir; > + u32 offset; > +}; > + > enum intel_vsec_quirks { > /* Watcher feature not supported */ > VSEC_QUIRK_NO_WATCHER = BIT(0), > @@ -33,6 +69,7 @@ enum intel_vsec_quirks { > > /* Platform specific data */ > struct intel_vsec_platform_info { > + struct device *parent; > struct intel_vsec_header **headers; > unsigned long caps; > unsigned long quirks; > @@ -43,10 +80,10 @@ struct intel_vsec_device { > struct pci_dev *pcidev; > struct resource *resource; > struct ida *ida; > - struct intel_vsec_platform_info *info; > int num_resources; > void *priv_data; > size_t priv_data_size; > + unsigned long quirks; > }; > > int intel_vsec_add_aux(struct pci_dev *pdev, struct device *parent, > @@ -62,4 +99,7 @@ static inline struct intel_vsec_device *auxdev_to_ivdev(struct auxiliary_device > { > return container_of(auxdev, struct intel_vsec_device, auxdev); > } > + > +void intel_vsec_register(struct pci_dev *pdev, > + struct intel_vsec_platform_info *info); > #endif > Please split this patch properly. I see at least 3 components (some of which were not even mentioned in the changelog): - Moving enum, struct & defines (no functional changes intended patch) - Moving quirks to new place - The rest -- i.