Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp3018155rdb; Mon, 4 Dec 2023 14:18:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IEljrcrYi2KyjksZsWs5xXe6OTL2XcI6srV4KRsrlx2dzHUnLvV+8On43Sq1/6kplslXORy X-Received: by 2002:a05:6a20:2452:b0:18f:97c:b9f2 with SMTP id t18-20020a056a20245200b0018f097cb9f2mr3014177pzc.76.1701728296461; Mon, 04 Dec 2023 14:18:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701728296; cv=none; d=google.com; s=arc-20160816; b=UUqMJXF17lRA7ZelVJrDXaf23St6jJkhI0xuNMdx3O8XwIR+l9+V6beVEpM0jr2qcj q0btiYefs3OkEM/SrK6JHaMrQXEQ4lNl9iQd/XecjfVGvMrsQdlP5tTtIY8i58BOuutN HyQwriFIkxVMsuA/ht3yM+jDQHj8GyKaV+31hkep2LYycpC5yDW41BbjZ/0hJM61gNBc mDLb+b3h14d/tF2yxFnjh1Cgc89Wnvh0fxAOl83WCtxmzpZRITPz1nb2dMcs8/mAb5dT /Ba94Lv2tptvEaQ5IKy/EJZeTm4I95pOTFFzXvG/8FRyGpBOusL+BrRjXh7EJFjCEUnz 6YdA== 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=SEJ8fx8bSTvtOcMdrh3FyeaSADakrEr2Adk7gaOh5BE=; fh=WxcXzAXi1awalX5nBNdKiu2pCszhVA/a0vtqlN5we7w=; b=DQqg2hPIlKJKmI/zM4eWMHGYuagfoLnvkOcvKvXkhcakcXRZ45cjV5MJsWa7O5hPOF iIf7z6wch4NBDSfcKqgC714RXeZYW+i7mCAnBB0KOHM0gJnS4b04627UCVicAAfLDYIX UKKWeibHBJuWJoEwbsbSHuIptb09p5a6C7J52QvZ3q3SbLldrdcpLA73j5U84F5DByUm HoJ5XNSzdolVJvsI+fc8NgxLuUJ6tdz7bZEi5SjiNxIRlyQAAnJtb+VXxrOO5UmpCBlD kRMvKH+VWAJra2YoYlRgWyaKEggS12UbafqRfDe3ulZKXuFWONZ1bnNBD2xLI8dI5wpT knuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dgHUd9IP; 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 i27-20020a63541b000000b005c684e1f2cesi2682258pgb.391.2023.12.04.14.18.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 14:18:16 -0800 (PST) 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=dgHUd9IP; 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 33F8C8054B42; Mon, 4 Dec 2023 14:18:11 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234703AbjLDWRy (ORCPT + 99 others); Mon, 4 Dec 2023 17:17:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45038 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234484AbjLDWRn (ORCPT ); Mon, 4 Dec 2023 17:17:43 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E78E3CB; Mon, 4 Dec 2023 14:17:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701728269; x=1733264269; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dsVx0Rv5ZtRcfupl4LgN9IaDABv2etpZtPWU/ZZQsGs=; b=dgHUd9IPUz+MIwfkLrPftuA/aFwdPMV2yOiidfsrztbB2uzZrzSg7ltv 51ym7YRdvpEo2ltUc2SvmvVLhnGk9xVRB/kWdTl9ujBp7CydLEK1S5udu OWY4bUv6OKTo1k6uIngE7+GipwjbkViOKiy1Es5VEYncg93MF+yE7IGkP Ys8v4GV9c8hGB2svxRXt9gaXpr8POl/hjIWLAU1HHXTbs/UHMNkMEjTKR 6Wl2EkhXdS6GI/+X7qHbg8MP3XSeFSUHt1iqGtM/dnJCXgiGjK/g8lotR G2+YJRvlV7IX4CiIBzVwIIaivkWfg8fv6oLGzdo0Clc5Tcayf+xrFFNiG g==; X-IronPort-AV: E=McAfee;i="6600,9927,10914"; a="480000884" X-IronPort-AV: E=Sophos;i="6.04,250,1695711600"; d="scan'208";a="480000884" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2023 14:17:47 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10914"; a="764111956" X-IronPort-AV: E=Sophos;i="6.04,250,1695711600"; d="scan'208";a="764111956" Received: from spandruv-desk.jf.intel.com ([10.54.75.14]) by orsmga007.jf.intel.com with ESMTP; 04 Dec 2023 14:17:46 -0800 From: Srinivas Pandruvada To: hdegoede@redhat.com, markgross@kernel.org, ilpo.jarvinen@linux.intel.com, andriy.shevchenko@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Pandruvada Subject: [PATCH v3 5/5] platform/x86/intel-uncore-freq: Process read/write blocked feature status Date: Mon, 4 Dec 2023 14:17:40 -0800 Message-Id: <20231204221740.3645130-6-srinivas.pandruvada@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231204221740.3645130-1-srinivas.pandruvada@linux.intel.com> References: <20231204221740.3645130-1-srinivas.pandruvada@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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,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 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]); Mon, 04 Dec 2023 14:18:11 -0800 (PST) When a feature is read blocked, don't continue to read uncore information and register with uncore core. When the feature is write blocked, continue to offer read interface but block setting uncore limits. Signed-off-by: Srinivas Pandruvada Reviewed-by: Ilpo Järvinen --- v3 - Rebased on top of /pdx86/platform-drivers-x86 review-hans v2 - Change read_blocked, write_blocked to bool .../uncore-frequency/uncore-frequency-tpmi.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c index 4fb790552c47..bd75d61ff8a6 100644 --- a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c +++ b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c @@ -66,6 +66,7 @@ struct tpmi_uncore_struct { int min_ratio; struct tpmi_uncore_power_domain_info *pd_info; struct tpmi_uncore_cluster_info root_cluster; + bool write_blocked; }; #define UNCORE_GENMASK_MIN_RATIO GENMASK_ULL(21, 15) @@ -157,6 +158,9 @@ static int uncore_write_control_freq(struct uncore_data *data, unsigned int inpu cluster_info = container_of(data, struct tpmi_uncore_cluster_info, uncore_data); uncore_root = cluster_info->uncore_root; + if (uncore_root->write_blocked) + return -EPERM; + /* Update each cluster in a package */ if (cluster_info->root_domain) { struct tpmi_uncore_struct *uncore_root = cluster_info->uncore_root; @@ -233,11 +237,21 @@ static void remove_cluster_entries(struct tpmi_uncore_struct *tpmi_uncore) static int uncore_probe(struct auxiliary_device *auxdev, const struct auxiliary_device_id *id) { + bool read_blocked = 0, write_blocked = 0; struct intel_tpmi_plat_info *plat_info; struct tpmi_uncore_struct *tpmi_uncore; int ret, i, pkg = 0; int num_resources; + ret = tpmi_get_feature_status(auxdev, TPMI_ID_UNCORE, &read_blocked, &write_blocked); + if (ret) + dev_info(&auxdev->dev, "Can't read feature status: ignoring blocked status\n"); + + if (read_blocked) { + dev_info(&auxdev->dev, "Firmware has blocked reads, exiting\n"); + return -ENODEV; + } + /* Get number of power domains, which is equal to number of resources */ num_resources = tpmi_get_resource_count(auxdev); if (!num_resources) @@ -266,6 +280,7 @@ static int uncore_probe(struct auxiliary_device *auxdev, const struct auxiliary_ } tpmi_uncore->power_domain_count = num_resources; + tpmi_uncore->write_blocked = write_blocked; /* Get the package ID from the TPMI core */ plat_info = tpmi_get_platform_data(auxdev); -- 2.40.1