From nobody Tue Feb 10 04:58:36 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8D10525395A; Fri, 25 Apr 2025 12:53:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745585608; cv=none; b=DLsWrV3vtRrmFq8b799B1c4D3C9Yya3A+vy/MWjdhlfx4BVOH7yADnZ1jSh18rHOVaB0VVdqJFGpiwRXNXpDSVV5mdpR30sViuLV6fuSAx0s/01X3W7YHMY4At1OANy5x2DOZ9wi8A3Vcf0dG2Ss3EzzqfNx9L+6mcFEGtbYS9Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745585608; c=relaxed/simple; bh=s0Ff7xXwBJcLiRkm3GXV1bpR0i4IKNyHSl45jnotzP8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WysPZ8DbW3D//0VMS9P6MZZEYZjchgGgwCtLrvWcBr9l4/+ea/omRl4kKCAVijz91eKSBq9OuklmdljTPkI2PJj91l/SKXpErL3dhP1I/dlm5qbkoq9qxpCd03YyxTVSVnycz/fL3N/pjmdSXNSXNzqc5UHFO7FdjN/hiyeHodA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7BCEF1A2D; Fri, 25 Apr 2025 05:53:20 -0700 (PDT) Received: from pluto.. (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 234C83F59E; Fri, 25 Apr 2025 05:53:22 -0700 (PDT) From: Cristian Marussi To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, arm-scmi@vger.kernel.org Cc: sudeep.holla@arm.com, james.quinlan@broadcom.com, f.fainelli@gmail.com, vincent.guittot@linaro.org, peng.fan@oss.nxp.com, michal.simek@amd.com, quic_sibis@quicinc.com, dan.carpenter@linaro.org, maz@kernel.org, johan@kernel.org, Cristian Marussi Subject: [PATCH v2 4/4] [NOT FOR UPSTREAM] firmware: arm_scmi: quirk: Ignore FC bit in attributes Date: Fri, 25 Apr 2025 13:52:50 +0100 Message-ID: <20250425125250.1847711-5-cristian.marussi@arm.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20250425125250.1847711-1-cristian.marussi@arm.com> References: <20250425125250.1847711-1-cristian.marussi@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some platform misreported the support of FastChannel when queried: ignore that bit on selected platforms. Signed-off-by: Cristian Marussi Reviewed-by: Johan Hovold Tested-by: Johan Hovold --- Match features has to be set-up properly before upstreaming this. Ideally the out-of-spec firmware should be matched with a quirk matching pattern based on Vendor/SubVendor/ImplVersion....but it is NOT clear if the platform at hand will ship with future fixed firmwares where the ImplVersion field is properly handled. If we cannot be sure about that, we should fallback to a compatible match. v1 -> v2 - use multiple compats quirks syntax RFC->V1 - fix QUIRKS conditions --- drivers/firmware/arm_scmi/driver.c | 8 ++++++++ drivers/firmware/arm_scmi/quirks.c | 3 +++ drivers/firmware/arm_scmi/quirks.h | 1 + 3 files changed, 12 insertions(+) diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi= /driver.c index ffaa68cdf644..3b363bda2b1e 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -1904,6 +1904,13 @@ struct scmi_msg_resp_desc_fc { __le32 db_preserve_hmask; }; =20 +#define QUIRK_PERF_FC_FORCE \ + ({ \ + if (pi->proto->id =3D=3D SCMI_PROTOCOL_PERF && \ + message_id =3D=3D 0x8 /* PERF_LEVEL_GET */) \ + attributes |=3D BIT(0); \ + }) + static void scmi_common_fastchannel_init(const struct scmi_protocol_handle *ph, u8 describe_id, u32 message_id, u32 valid_size, @@ -1924,6 +1931,7 @@ scmi_common_fastchannel_init(const struct scmi_protoc= ol_handle *ph, =20 /* Check if the MSG_ID supports fastchannel */ ret =3D scmi_protocol_msg_check(ph, message_id, &attributes); + SCMI_QUIRK(perf_level_get_fc_force, QUIRK_PERF_FC_FORCE); if (ret || !MSG_SUPPORTS_FASTCHANNEL(attributes)) { dev_dbg(ph->dev, "Skip FC init for 0x%02X/%d domain:%d - ret:%d\n", diff --git a/drivers/firmware/arm_scmi/quirks.c b/drivers/firmware/arm_scmi= /quirks.c index 120ac933ed2e..64a5809da20b 100644 --- a/drivers/firmware/arm_scmi/quirks.c +++ b/drivers/firmware/arm_scmi/quirks.c @@ -168,6 +168,8 @@ struct scmi_quirk { =20 /* Global Quirks Definitions */ DEFINE_SCMI_QUIRK(clock_rates_triplet_out_of_spec, NULL, NULL, NULL); +DEFINE_SCMI_QUIRK(perf_level_get_fc_force, + "bad-vend", NULL, "0x20000-", "bad-compat", "bad-compat-2"); =20 /* * Quirks Pointers Array @@ -177,6 +179,7 @@ DEFINE_SCMI_QUIRK(clock_rates_triplet_out_of_spec, NULL= , NULL, NULL); */ static struct scmi_quirk *scmi_quirks_table[] =3D { __DECLARE_SCMI_QUIRK_ENTRY(clock_rates_triplet_out_of_spec), + __DECLARE_SCMI_QUIRK_ENTRY(perf_level_get_fc_force), NULL }; =20 diff --git a/drivers/firmware/arm_scmi/quirks.h b/drivers/firmware/arm_scmi= /quirks.h index 7fdc496c94c7..a71fde85a527 100644 --- a/drivers/firmware/arm_scmi/quirks.h +++ b/drivers/firmware/arm_scmi/quirks.h @@ -47,5 +47,6 @@ static inline void scmi_quirks_enable(struct device *dev,= const char *vend, =20 /* Quirk delarations */ DECLARE_SCMI_QUIRK(clock_rates_triplet_out_of_spec); +DECLARE_SCMI_QUIRK(perf_level_get_fc_force); =20 #endif /* _SCMI_QUIRKS_H */ --=20 2.47.0