From nobody Sat Jun 13 17:10:29 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A059C43DA2B for ; Wed, 6 May 2026 11:39:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067568; cv=none; b=GcH2eZae8EnDUCgqsKGCvAckytgPsnx28Q9sy5dH+nomrQkBDeR+hgokhftT77gMf+xjyLufVsyRkHcZKLY8rrhZq9RpkqMcEXQJS+nAYwD7ozRBi6EB+rgn+TWCyMAFKCJsbI8/N4W8SsP69aaQCClbGBKCCYrAZsLS3Bf46pY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067568; c=relaxed/simple; bh=naSA/b8vmDt1R7gpuyFrHyOUwxvQ1EhD/2Hft+vc8Lg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QnNKO3giXeyg8WtgGIV/QWjbTOt2Dd+WKvcgDN+2o5zDUsrzYKY8j1ZMNQgn7x38sueKjTF9fY0AG9l8PeQNrxk642ZN6cXUfhLiZXF0t0qz71LTMkW1wGwk/vy3BYQNqBZplNKNsowk4U+PrvwGqjMJjehJ5WPfEAxqyuK2eBQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=EmE6A/rn; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="EmE6A/rn" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-43fe608cb92so3742911f8f.2 for ; Wed, 06 May 2026 04:39:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778067563; x=1778672363; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=hq+r+ui6AdgiIfyUgPR+5nEHwOM+a2J0haQufQDNVuw=; b=EmE6A/rnZnd/yiI9bXnfLB/VTGlz7Her3w1wTj8PrcG07IgZtoKIvh8IpI+cDWRs5L 7AAEc9gRcSbQ+plc/co7J43aeEQU8siqd7XXpVOGwSddvujNFazr2ikW4hg0Pw06mTiD gwRjcXbduvU0RJwhXmepisgxnSt4LojbUtb735rDjCyY0CMO74mBXy9TMN6L2GGWdqa5 bml3n+57uDnOM0BZwZRbAoCDrIeudN6p0pwQUlrZIm1wPXm4vj3asuBdHw3C8JVBm7gR PymMk5A7yd4Tr6lqAQnXpvyegIIxOfs4koexsRtgFhLJNpUvSoeugzLIa55QGVlURUp0 pt8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778067563; x=1778672363; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=hq+r+ui6AdgiIfyUgPR+5nEHwOM+a2J0haQufQDNVuw=; b=c3MU/F719/pkd4jcpwnmioFFGuqXeZXVF5eReGsxuHqdsAD5UKUZTKhpEt+GjClX8c 8PdaSAO/HkI/8qHmHhPpaB2LwvaSfXg2N/vAMR36ym7NWhPi3YstPTp21rQjc87GfMvS 41g4aCMjB3cMyiMrrF76zWv37RVXA3+3WVBMHwgk7We9JTaidcKfFhUmBgmhCgEwn/cQ PgQSHK+I66e6GVIB6fsvWCk/agLirvgpzKc9lhWXgj0VdKvv/Gk0yY8Je8rZoGB05h3V kaJYw4LIumTWFeAGz2BjNfdzA8XXtSAJZlthGKIoziltdniPyV7eUGkhHmCTDTWgAhj6 PRRA== X-Forwarded-Encrypted: i=1; AFNElJ/05cTe1C6HsZQazZ7Pq4fMZz2U4DU+E7GjRd+1mqNVNUlpfNo0bw5Z34PEyeGPIgZygDTxqZYsyBP+5oA=@vger.kernel.org X-Gm-Message-State: AOJu0YyUC8yqzMizKtAc6UKBYn9GHhMNLTl9Zan1RWdMUGMBlqeNl4Jt Wk+dezg9iNZ1sp5qL6WPk5s/g/mlj3tUZ5tYnybuZgsrgz5ZvZcceEHNmzPlkcBLzCDR3G3lvgg tGDlu9ME= X-Gm-Gg: AeBDietO60YW3bzAWjpIaILYDMd47npD6HptI79SIaH1Nvhv36HNMG8M6PZjia5PZ7M 0eWBUnhgqCb00sBcwCW9N8gsqzdOZAWL5RTbsPVy0AZLqbxo8qd7wTtqbQfpO0T16Mn4YdGSFgZ waWdhwYaFULAH2cbUNNPGLasQVv+q0/kgKgPFIKqr8MAN6SEBXCrAvHMtMkktMqSHY3hSdoHkhu GrjXjSB6WzEJfBKYlMx689M5MHYnmBvUNYTCGdZfI1H4lUEZrefMvOLpkM5ohTu4lMRN+s0lM4l M3PEfN1+X6x98rIi3mZ6pEOOBx+k9I5kfuIwV7/yNVcjcn/5XKtdwx1mYihS8+LaBqka/YIc7nC VReAdD97UndsKk2wtz7Q66sQtjEFgawoHtxXJFlvQQdcTgl4M2PmFlHuUFB3eAB7eOWLmRmgm0x 6d4whTkG1Oo7YNROyC4Bp9G1lNlyyXAnn6+iYF9xeS3EJw95GwgAzu3QDB2I+m9DC1/t/B6tE+7 X4h3XO/Wdu5D0RKlQ== X-Received: by 2002:a5d:5f82:0:b0:43d:775b:c9bd with SMTP id ffacd0b85a97d-4515b42ec0emr5288317f8f.10.1778067562509; Wed, 06 May 2026 04:39:22 -0700 (PDT) Received: from ta2.c.googlers.com (17.83.155.104.bc.googleusercontent.com. [104.155.83.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4505238e6e0sm11852350f8f.6.2026.05.06.04.39.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 04:39:22 -0700 (PDT) From: Tudor Ambarus Date: Wed, 06 May 2026 11:39:03 +0000 Subject: [PATCH 1/6] firmware: samsung: acpm: Consolidate transfer initialization helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-acpm-tmu-helpers-v1-1-a9cd5daf8355@linaro.org> References: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> In-Reply-To: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> To: Tudor Ambarus , Krzysztof Kozlowski , Michael Turquette , Stephen Boyd , Lee Jones Cc: Alim Akhtar , Sylwester Nawrocki , Chanwoo Choi , =?utf-8?q?Andr=C3=A9_Draszik?= , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, peter.griffin@linaro.org, andre.draszik@linaro.org, jyescas@google.com, kernel-team@android.com X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778067561; l=7114; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=naSA/b8vmDt1R7gpuyFrHyOUwxvQ1EhD/2Hft+vc8Lg=; b=RbK1DyoIZvVW8EbQjVaIsE5FjeKyL1pUqWpXgJ22BCLWZLFP1+O9Wu5Q69rNe7oxj9XZ3+RdR djY+aRBcVayD/lqiL/FR20B3ZmivMWJ0KG7uPbV/HXcvUPgq2ncoEMe X-Developer-Key: i=tudor.ambarus@linaro.org; a=ed25519; pk=uQzE0NXo3dIjeowMTOPCpIiPHEz12IA/MbyzrZVh9WI= Both the DVFS and PMIC ACPM sub-drivers implement similar local helper functions (acpm_dvfs_set_xfer and acpm_pmic_set_xfer) to initialize the acpm_xfer structure before sending an IPC message. Move this logic into a single centralized helper, acpm_set_xfer(), in the core ACPM driver to reduce boilerplate, eliminate code duplication, and prepare for the upcoming ACPM TMU helper sub-driver which will also utilize this method. Note that there is no change in underlying functionality. While the old acpm_pmic_set_xfer() unconditionally assigned the RX buffer parameters (xfer->rxd and xfer->rxcnt), the new unified helper introduces a 'response' boolean. All updated PMIC call sites now explicitly pass 'true' for this argument. This ensures the unified helper takes the 'if (response)' branch, performing the exact same assignments and preserving the original PMIC behavior. Signed-off-by: Tudor Ambarus Reviewed-by: Peter Griffin --- drivers/firmware/samsung/exynos-acpm-dvfs.c | 20 ++------------------ drivers/firmware/samsung/exynos-acpm-pmic.c | 20 +++++--------------- drivers/firmware/samsung/exynos-acpm.c | 26 ++++++++++++++++++++++++++ drivers/firmware/samsung/exynos-acpm.h | 2 ++ 4 files changed, 35 insertions(+), 33 deletions(-) diff --git a/drivers/firmware/samsung/exynos-acpm-dvfs.c b/drivers/firmware= /samsung/exynos-acpm-dvfs.c index fdea7aa24ca0..7266312ef5a6 100644 --- a/drivers/firmware/samsung/exynos-acpm-dvfs.c +++ b/drivers/firmware/samsung/exynos-acpm-dvfs.c @@ -21,22 +21,6 @@ #define ACPM_DVFS_FREQ_REQ 0 #define ACPM_DVFS_FREQ_GET 1 =20 -static void acpm_dvfs_set_xfer(struct acpm_xfer *xfer, u32 *cmd, size_t cm= dlen, - unsigned int acpm_chan_id, bool response) -{ - xfer->acpm_chan_id =3D acpm_chan_id; - xfer->txcnt =3D cmdlen; - xfer->txd =3D cmd; - - if (response) { - xfer->rxcnt =3D cmdlen; - xfer->rxd =3D cmd; - } else { - xfer->rxcnt =3D 0; - xfer->rxd =3D NULL; - } -} - static void acpm_dvfs_init_set_rate_cmd(u32 cmd[4], unsigned int clk_id, unsigned long rate) { @@ -54,7 +38,7 @@ int acpm_dvfs_set_rate(struct acpm_handle *handle, u32 cmd[4]; =20 acpm_dvfs_init_set_rate_cmd(cmd, clk_id, rate); - acpm_dvfs_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, false); + acpm_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, false); =20 return acpm_do_xfer(handle, &xfer); } @@ -74,7 +58,7 @@ unsigned long acpm_dvfs_get_rate(struct acpm_handle *hand= le, int ret; =20 acpm_dvfs_init_get_rate_cmd(cmd, clk_id); - acpm_dvfs_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, true); + acpm_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, true); =20 ret =3D acpm_do_xfer(handle, &xfer); if (ret) diff --git a/drivers/firmware/samsung/exynos-acpm-pmic.c b/drivers/firmware= /samsung/exynos-acpm-pmic.c index 0c50993cc9a8..f032f2c69685 100644 --- a/drivers/firmware/samsung/exynos-acpm-pmic.c +++ b/drivers/firmware/samsung/exynos-acpm-pmic.c @@ -58,16 +58,6 @@ static inline u32 acpm_pmic_get_bulk(u32 data, unsigned = int i) return (data >> (ACPM_PMIC_BULK_SHIFT * i)) & ACPM_PMIC_BULK_MASK; } =20 -static void acpm_pmic_set_xfer(struct acpm_xfer *xfer, u32 *cmd, size_t cm= dlen, - unsigned int acpm_chan_id) -{ - xfer->txd =3D cmd; - xfer->rxd =3D cmd; - xfer->txcnt =3D cmdlen; - xfer->rxcnt =3D cmdlen; - xfer->acpm_chan_id =3D acpm_chan_id; -} - static void acpm_pmic_init_read_cmd(u32 cmd[4], u8 type, u8 reg, u8 chan) { cmd[0] =3D FIELD_PREP(ACPM_PMIC_TYPE, type) | @@ -86,7 +76,7 @@ int acpm_pmic_read_reg(struct acpm_handle *handle, int ret; =20 acpm_pmic_init_read_cmd(cmd, type, reg, chan); - acpm_pmic_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id); + acpm_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, true); =20 ret =3D acpm_do_xfer(handle, &xfer); if (ret) @@ -119,7 +109,7 @@ int acpm_pmic_bulk_read(struct acpm_handle *handle, return -EINVAL; =20 acpm_pmic_init_bulk_read_cmd(cmd, type, reg, chan, count); - acpm_pmic_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id); + acpm_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, true); =20 ret =3D acpm_do_xfer(handle, &xfer); if (ret) @@ -159,7 +149,7 @@ int acpm_pmic_write_reg(struct acpm_handle *handle, int ret; =20 acpm_pmic_init_write_cmd(cmd, type, reg, chan, value); - acpm_pmic_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id); + acpm_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, true); =20 ret =3D acpm_do_xfer(handle, &xfer); if (ret) @@ -199,7 +189,7 @@ int acpm_pmic_bulk_write(struct acpm_handle *handle, return -EINVAL; =20 acpm_pmic_init_bulk_write_cmd(cmd, type, reg, chan, count, buf); - acpm_pmic_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id); + acpm_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, true); =20 ret =3D acpm_do_xfer(handle, &xfer); if (ret) @@ -229,7 +219,7 @@ int acpm_pmic_update_reg(struct acpm_handle *handle, int ret; =20 acpm_pmic_init_update_cmd(cmd, type, reg, chan, value, mask); - acpm_pmic_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id); + acpm_set_xfer(&xfer, cmd, ARRAY_SIZE(cmd), acpm_chan_id, true); =20 ret =3D acpm_do_xfer(handle, &xfer); if (ret) diff --git a/drivers/firmware/samsung/exynos-acpm.c b/drivers/firmware/sams= ung/exynos-acpm.c index a2cac913b2bd..88a06842753d 100644 --- a/drivers/firmware/samsung/exynos-acpm.c +++ b/drivers/firmware/samsung/exynos-acpm.c @@ -517,6 +517,32 @@ int acpm_do_xfer(struct acpm_handle *handle, const str= uct acpm_xfer *xfer) return acpm_wait_for_message_response(achan, xfer); } =20 +/** + * acpm_set_xfer() - initialize an ACPM IPC transfer structure. + * @xfer: pointer to the ACPM transfer structure that is being initialized. + * @cmd: pointer to the buffer containing the command to be transmitted + * to the ACPM firmware. + * @cmdcnt: length of the command in 32-bit words. + * @acpm_chan_id: mailbox channel identifier. + * @response: boolean flag indicating whether the kernel expects the ACPM + * firmware to send a reply to this specific command. + */ +void acpm_set_xfer(struct acpm_xfer *xfer, u32 *cmd, size_t cmdcnt, + unsigned int acpm_chan_id, bool response) +{ + xfer->acpm_chan_id =3D acpm_chan_id; + xfer->txcnt =3D cmdcnt; + xfer->txd =3D cmd; + + if (response) { + xfer->rxcnt =3D cmdcnt; + xfer->rxd =3D cmd; + } else { + xfer->rxcnt =3D 0; + xfer->rxd =3D NULL; + } +} + /** * acpm_chan_shmem_get_params() - get channel parameters and addresses of = the * TX/RX queues. diff --git a/drivers/firmware/samsung/exynos-acpm.h b/drivers/firmware/sams= ung/exynos-acpm.h index 5df8354dc96c..708f6b0102ac 100644 --- a/drivers/firmware/samsung/exynos-acpm.h +++ b/drivers/firmware/samsung/exynos-acpm.h @@ -17,6 +17,8 @@ struct acpm_xfer { =20 struct acpm_handle; =20 +void acpm_set_xfer(struct acpm_xfer *xfer, u32 *cmd, size_t cmdcnt, + unsigned int acpm_chan_id, bool response); int acpm_do_xfer(struct acpm_handle *handle, const struct acpm_xfer *xfer); =20 --=20 2.54.0.545.g6539524ca2-goog From nobody Sat Jun 13 17:10:29 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE03943D50B for ; Wed, 6 May 2026 11:39:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067568; cv=none; b=nEj2DJszPC81PXFk71Yk/xMhU9auFZUgeAUeDd1hvnJkUlLc7REP+pUUds3rBqsXv6kgJuMhyWqdaWS7ywD04oZduO3pA1ZAPhHQz/d99lcRTW/6kliZ6V9/rhafBetKAnd2Hgn71DRHcvt+wom5/yAB8D2fXT2xchtG6xsy2no= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067568; c=relaxed/simple; bh=InPW5aIoFLfi7L5QYj+FWyGxWg+TtOroOI35/SgGMrQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l57Xt6Ml1j1fQlnwddi2tbqZFky8mZhG6GuNcHY4IA3vRZAKz0GThcqLizg+O6kYILniPHJUujW1W/AE2OxpWIvZl7o0Naj2ujlqihV9g+dqWRAJvOgEPaCE9dqVAvoGnTf4vF/s5jVUQkBDPmkAhHOU/+ZV1rIlzo1zwPTPDzQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=c6zrL21F; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="c6zrL21F" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-43d64313c39so4510518f8f.3 for ; Wed, 06 May 2026 04:39:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778067563; x=1778672363; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=RvGC3o+HXUBsO1osZIafgMiKf+lkJO3vUojNNgCQ4PQ=; b=c6zrL21FYNzEy3XDPYIAPJ+OMWEEd/E8i3oP3CjsPFRvIfDN4YuvBeDip+LUt4jds5 UfYPpWGtd4g1nRgOB71YAvBOUAu0wgFpiNTwxyeRb92sr58EVDkb/hFAXC9hFu0Y/5l9 8p9MO9OwUnF1STu75Kj0BCyG9ciVnxrguHN7PK1A2Pue7sVLvGEY6UIqUrzOPChlriTI jVeHxTYbdhL16AgxE8uAqI7WKfypImy4rlIHKTBuoFFbl8sNbT7hiTXv28jnKpq6Vfjf 1/LQFFB3HDIkgaIIQsZF+t8ERpjkmomQwko7nuoh/zaqcR41aDCmAIdk6WkhmvZowTID TUnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778067563; x=1778672363; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=RvGC3o+HXUBsO1osZIafgMiKf+lkJO3vUojNNgCQ4PQ=; b=NP4RZkKHaUq6iiqZdHwtLOUNdpJwZGwqJ0l2Qs4W5Lm3p+Ax0Pc9ubO4y7AC4f1J/D zjaLVbNh2x3QhZc418eWtyKmRplap16k2vcjfOTWBtcwQQfHVct9bXc9By6DSJ8LlIl9 tIYIiADSqMc/Ll34015rSs62mPzvSLOwVqxRABwJr0F7a9gcla3BWnn/OZWubpqy9mHi j0FIsYY8NUfrFCsYfVSH0KfbGlCpQLO+wUvyEPgcN5TkpD27wwzEJyEq7HPxlZ9lxmvc VYmCO78FTsQlzOyZBEbYz/JiNK5O+ht4HRD1sf+FVDeQQ/WIqx5HvYUiw95WxXduxuhy qZUw== X-Forwarded-Encrypted: i=1; AFNElJ8GlI1YpvtY5xnRnvu1yTMlczbRSUjKkwLhHb0IC7KJS7JmmU70gLq+yypz7+2ADpjtJyf28VIIAchlmNI=@vger.kernel.org X-Gm-Message-State: AOJu0YyJd3kcb1aNfkfQbEi9CX3/OH8IYlHl8wwFTX8PWD4W5EyLikTv BqKT2793VhGbKkSnrdkJ1NV1IGdpJs+izxhTj8NnabM84sWlm2RqAmszYuNfLQ44S0I= X-Gm-Gg: AeBDiessQJLenaPrNP3ew+LLB4CUXKPpQB2QZajzhku1cVLeSR/t1beobl53wwAr/JG PRAZZ94NlLSoLMdxZdVuDWTCw1wukO+kaHMF13L92jGj+rYv9hpbg7iijYAhdBw7mbDUifO0lkn raAY1POPDXoC4h31PhyweEXfML0Ju1kWJ9BfHQJPbRvvGcUuWphGW36PM0fZx0Z6v9TQRXM1RP/ +KVBdkWFAmRJxLxgm/cG5m1ePqodXvCzPkMYf6c1aAdFnMq9kbKfhAdvc5kxm+zWs2irfDMdQ7c wNKGCREWl33e+nrioE1RxbkgAz4fGlbWWz9BByvC67wgHeeV+QY/+SCXRDS/7AdcAPQY2uf65LU uvVI78UT6ybFddHxVoe87hbyYe6NMCdHO47+Gyu8t1NmvLkc/wgxsL3qMP2tj4W0tW/jLpr++mb 4Z5c74lO1ayRoMvRBNyJj0Q+WgQhd/HEOiUOMlePtIpBmxmch562KBpeVQDfknXfCRlRjmDpaT5 SyJLRcuUZ7cWgy3Tw== X-Received: by 2002:a5d:5d87:0:b0:43d:762e:76ba with SMTP id ffacd0b85a97d-4515b525abemr5169570f8f.17.1778067563093; Wed, 06 May 2026 04:39:23 -0700 (PDT) Received: from ta2.c.googlers.com (17.83.155.104.bc.googleusercontent.com. [104.155.83.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4505238e6e0sm11852350f8f.6.2026.05.06.04.39.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 04:39:22 -0700 (PDT) From: Tudor Ambarus Date: Wed, 06 May 2026 11:39:04 +0000 Subject: [PATCH 2/6] firmware: samsung: acpm: Annotate rx_data->cmd with __counted_by_ptr Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-acpm-tmu-helpers-v1-2-a9cd5daf8355@linaro.org> References: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> In-Reply-To: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> To: Tudor Ambarus , Krzysztof Kozlowski , Michael Turquette , Stephen Boyd , Lee Jones Cc: Alim Akhtar , Sylwester Nawrocki , Chanwoo Choi , =?utf-8?q?Andr=C3=A9_Draszik?= , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, peter.griffin@linaro.org, andre.draszik@linaro.org, jyescas@google.com, kernel-team@android.com X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778067561; l=2479; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=InPW5aIoFLfi7L5QYj+FWyGxWg+TtOroOI35/SgGMrQ=; b=pubO52w85UBt/AD2Icw0FjZhzPE1/uxNCqZC7wE3gbz3G3T+DYAk/KG32A46kRsJt6nvTwNLa uopL717hhx2AY4JcFM/7kgruUPkFO+YPujpA0lG1qTAm3QoXYbGW4Zg X-Developer-Key: i=tudor.ambarus@linaro.org; a=ed25519; pk=uQzE0NXo3dIjeowMTOPCpIiPHEz12IA/MbyzrZVh9WI= Rename the `n_cmd` member of `struct acpm_rx_data` to `cmdcnt` to maintain consistent nomenclature across the driver (aligning with `txcnt`, `rxcnt`, and transfer helpers). With the member renamed, annotate the dynamically allocated `cmd` pointer with the `__counted_by_ptr(cmdcnt)` macro to improve runtime bounds checking. Signed-off-by: Tudor Ambarus Reviewed-by: Peter Griffin --- drivers/firmware/samsung/exynos-acpm.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/firmware/samsung/exynos-acpm.c b/drivers/firmware/sams= ung/exynos-acpm.c index 88a06842753d..fac88c427d2a 100644 --- a/drivers/firmware/samsung/exynos-acpm.c +++ b/drivers/firmware/samsung/exynos-acpm.c @@ -105,14 +105,14 @@ struct acpm_queue { * struct acpm_rx_data - RX queue data. * * @cmd: pointer to where the data shall be saved. - * @n_cmd: number of 32-bit commands. + * @cmdcnt: allocated capacity of the @cmd buffer in 32-bit words. * @rxcnt: expected length of the response in 32-bit words. * @completed: flag indicating if the firmware response has been fully * processed. */ struct acpm_rx_data { - u32 *cmd; - size_t n_cmd; + u32 *cmd __counted_by_ptr(cmdcnt); + size_t cmdcnt; size_t rxcnt; bool completed; }; @@ -432,7 +432,7 @@ static int acpm_prepare_xfer(struct acpm_chan *achan, /* Clear data for upcoming responses */ rx_data =3D &achan->rx_data[bit]; rx_data->completed =3D false; - memset(rx_data->cmd, 0, sizeof(*rx_data->cmd) * rx_data->n_cmd); + memset(rx_data->cmd, 0, sizeof(*rx_data->cmd) * rx_data->cmdcnt); /* zero means no response expected */ rx_data->rxcnt =3D xfer->rxcnt; =20 @@ -584,19 +584,19 @@ static int acpm_achan_alloc_cmds(struct acpm_chan *ac= han) { struct device *dev =3D achan->acpm->dev; struct acpm_rx_data *rx_data; - size_t cmd_size, n_cmd; + size_t cmd_size, cmdcnt; int i; =20 if (achan->mlen =3D=3D 0) return 0; =20 cmd_size =3D sizeof(*(achan->rx_data[0].cmd)); - n_cmd =3D DIV_ROUND_UP_ULL(achan->mlen, cmd_size); + cmdcnt =3D DIV_ROUND_UP_ULL(achan->mlen, cmd_size); =20 for (i =3D 0; i < ACPM_SEQNUM_MAX; i++) { rx_data =3D &achan->rx_data[i]; - rx_data->n_cmd =3D n_cmd; - rx_data->cmd =3D devm_kcalloc(dev, n_cmd, cmd_size, GFP_KERNEL); + rx_data->cmdcnt =3D cmdcnt; + rx_data->cmd =3D devm_kcalloc(dev, cmdcnt, cmd_size, GFP_KERNEL); if (!rx_data->cmd) return -ENOMEM; } --=20 2.54.0.545.g6539524ca2-goog From nobody Sat Jun 13 17:10:29 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67FC743D50C for ; Wed, 6 May 2026 11:39:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067567; cv=none; b=oZc8pqX0mMrdwaFrHiDKPBVnCRoy6060pL/vzNQpygtu9RI7a21McUzOV+GwbceYoTkFBw/RC8O9bjB6NpjgBAVdLJCDY9qavUTLJbjbciQ/pwc4FFFf3MoR9YMEOV1ydnjXrdDo7Ihw4kjx2tXGZbYar7zlqZpuXLcd+AR4FeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067567; c=relaxed/simple; bh=g7W+VZ4iU0XoANYUCcwBaeUQrWsATMZyd8vfMjiV5sA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PoY+VwJflfQ0ockPhiPOhurzzPlyPet6bjjDHPhUEy+HxRgFvVMwe6h6n6c0sMNCYebuSaR//liGvwUHSn0sQmrNovO8qRxyOms70JXDfkdJNtnqQD8otdzcrGffPy993Qqh+174B0pl/TOJYiW6iTpORsczqE2xn/7XaCwVOok= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=y+nP0WBK; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="y+nP0WBK" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4891e86fabeso75881135e9.1 for ; Wed, 06 May 2026 04:39:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778067564; x=1778672364; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=HctO9PHPxVVbYlg8980nTUBYVtmtaaSBay62x7H26xc=; b=y+nP0WBKg6gDteH7CBfCVoxbWcWtYypIAZfORFAZZO47q1c3hFOzsupNKfMqOEVO/w +vUDvBJnolwUYrFvO8MCWyizhaRkdLRDo4G+htqOzzf2vP+bzmRSXTEuKBhph1Yp618K iqVQWF30zUHzsVqcJzrOIKmTJsBSepVbm+xH/zmgybiPpxgM+guiPkaUzF6eA3O79ysK iFavS2epDXPTokIDwykAfAAfjMsbR38aE9B7koFJKi8TNgFI7EBvJHy3j9GgLhB1wbg7 BK2nofa4rLh0tYZTfxzNEMkuvOiifJUjlQF5iXc10kGtoRM8f5oBEbEqxegxU8juJ6XL iE7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778067564; x=1778672364; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=HctO9PHPxVVbYlg8980nTUBYVtmtaaSBay62x7H26xc=; b=dHUzaHkwpOqBzy/2pkkEMkK7mH+aTA0p01G+ud/nQtvw/S53gzyawBRQcZnH98F+To QC3Gfkwev9w/aDrltIlPFAhncEuFyNDerOya//XwUBazVAqnEEKi2TtOBY9YhhzcBeDL aTI/X1ESUS1ZVuXx98uebtZD712BYBqAZemCXvKvLrTn6SHZzQn7zwxydMhIWMo2qhmA J7sQuo1vmeFlNYm6jAfURD2nDuIQNXBf6xhTgoW9duPlVc4kXkm8Y2VfShpDQBDHYeru jTYKVqOReObQFrEAH6RVbo5kh7EnvOJZDfU1wpWGSL9PY2k4WhzCuoRf5Is81xK57B5Q WLYA== X-Forwarded-Encrypted: i=1; AFNElJ+jmun6Js06MLfVUYV7itrksLxZrD4PWJdpmBmt0OxC3asCJMOTNumm7eSA5rr+iKFPHx+y1eVALt0DY/Q=@vger.kernel.org X-Gm-Message-State: AOJu0YzDy0kuREMTIHhMf/FGcuNTa1XwZS7RDLoMeLViFkuYJtIFy+O+ /d77IiuQ6k7Fq3PivwsdTaTD6L4pZ/udYU1P6Rgbkz0Wgyu0ZJE8AX3Bu/CurO1N8RU= X-Gm-Gg: AeBDievZ5j70Mxua1mG0shVcCQhvfgkBJaTCGH8FD2L7jFXkIHcF030tYD34V0ivjcN ZY2PssyYtnhHbb/jB3vANkGzRbvUYzruTv7F2kCThCSyGSl5OF4LMSlkONZwg/IZiJ/hvx1a23z 38TD9B4WP2ap8QGdia2bfotCFCoRO08Z8UEw2EJhwwEd2tqHUwj9YluyMAxbAB9Nsv02R2+KxR7 unPAKbNrsaUNZN4WsCCKcDS3TcDjjoHSDgBShM4N5tjEhNskOKkrOJzxPnzj6epWQwLPNFbaFSq ndweRCSSxB+ru2gqmlC/Syhvsgs5zGs7fgo7ocuXtx+OOCx1iPYk2MbkOdMq08UrTsEMUQICye8 OPqlswd/vevc331Hs5Zq3d325c3BJ8QenfA21FNWW1GWZZLol1Q130MxJh/3O//BhBU5k3jBtpn WSwR89pCJnj8VJk6YVla9pcOZBGKBUu9eoIgkDszUatER02pRJqrivTdR0hHooKGuVzWMpMmQtJ AW10qMFSuuLLzGhJQ== X-Received: by 2002:a05:6000:2082:b0:43d:7a97:78af with SMTP id ffacd0b85a97d-4515da963d1mr5166511f8f.42.1778067563680; Wed, 06 May 2026 04:39:23 -0700 (PDT) Received: from ta2.c.googlers.com (17.83.155.104.bc.googleusercontent.com. [104.155.83.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4505238e6e0sm11852350f8f.6.2026.05.06.04.39.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 04:39:23 -0700 (PDT) From: Tudor Ambarus Date: Wed, 06 May 2026 11:39:05 +0000 Subject: [PATCH 3/6] firmware: samsung: acpm: Drop redundant _ops suffix in acpm_ops members Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-acpm-tmu-helpers-v1-3-a9cd5daf8355@linaro.org> References: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> In-Reply-To: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> To: Tudor Ambarus , Krzysztof Kozlowski , Michael Turquette , Stephen Boyd , Lee Jones Cc: Alim Akhtar , Sylwester Nawrocki , Chanwoo Choi , =?utf-8?q?Andr=C3=A9_Draszik?= , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, peter.griffin@linaro.org, andre.draszik@linaro.org, jyescas@google.com, kernel-team@android.com X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778067561; l=4435; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=g7W+VZ4iU0XoANYUCcwBaeUQrWsATMZyd8vfMjiV5sA=; b=7tox4iGBbtjxHercNunu+1vkvebqHsR0UywhkufQKg9lb7ncF4dNBIKHyZGZZ+pWcx7WvYOJ4 YJJ7RSbj0g/AxE/8yalf0mtSBgepg04rk9b9gD8puaZAaHZYrLLPeNu X-Developer-Key: i=tudor.ambarus@linaro.org; a=ed25519; pk=uQzE0NXo3dIjeowMTOPCpIiPHEz12IA/MbyzrZVh9WI= Rename the `dvfs_ops` and `pmic_ops` members of `struct acpm_ops` to `dvfs` and `pmic` respectively. Since these members are housed within the `acpm_ops` structure and utilize the `acpm_*_ops` types, the `_ops` suffix on the variable names creates unnecessary redundancy (e.g., `handle.ops.dvfs_ops`). This cleanup removes the stuttering, leading to cleaner consumer code. Signed-off-by: Tudor Ambarus Reviewed-by: Peter Griffin --- drivers/clk/samsung/clk-acpm.c | 8 ++++---- drivers/firmware/samsung/exynos-acpm.c | 4 ++-- drivers/mfd/sec-acpm.c | 6 +++--- include/linux/firmware/samsung/exynos-acpm-protocol.h | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/clk/samsung/clk-acpm.c b/drivers/clk/samsung/clk-acpm.c index d8944160793a..93667777094c 100644 --- a/drivers/clk/samsung/clk-acpm.c +++ b/drivers/clk/samsung/clk-acpm.c @@ -68,8 +68,8 @@ static unsigned long acpm_clk_recalc_rate(struct clk_hw *= hw, { struct acpm_clk *clk =3D to_acpm_clk(hw); =20 - return clk->handle->ops.dvfs_ops.get_rate(clk->handle, - clk->mbox_chan_id, clk->id); + return clk->handle->ops.dvfs.get_rate(clk->handle, clk->mbox_chan_id, + clk->id); } =20 static int acpm_clk_determine_rate(struct clk_hw *hw, @@ -89,8 +89,8 @@ static int acpm_clk_set_rate(struct clk_hw *hw, unsigned = long rate, { struct acpm_clk *clk =3D to_acpm_clk(hw); =20 - return clk->handle->ops.dvfs_ops.set_rate(clk->handle, - clk->mbox_chan_id, clk->id, rate); + return clk->handle->ops.dvfs.set_rate(clk->handle, clk->mbox_chan_id, + clk->id, rate); } =20 static const struct clk_ops acpm_clk_ops =3D { diff --git a/drivers/firmware/samsung/exynos-acpm.c b/drivers/firmware/sams= ung/exynos-acpm.c index fac88c427d2a..da960d3e1145 100644 --- a/drivers/firmware/samsung/exynos-acpm.c +++ b/drivers/firmware/samsung/exynos-acpm.c @@ -676,8 +676,8 @@ static int acpm_channels_init(struct acpm_info *acpm) */ static void acpm_setup_ops(struct acpm_info *acpm) { - struct acpm_dvfs_ops *dvfs_ops =3D &acpm->handle.ops.dvfs_ops; - struct acpm_pmic_ops *pmic_ops =3D &acpm->handle.ops.pmic_ops; + struct acpm_dvfs_ops *dvfs_ops =3D &acpm->handle.ops.dvfs; + struct acpm_pmic_ops *pmic_ops =3D &acpm->handle.ops.pmic; =20 dvfs_ops->set_rate =3D acpm_dvfs_set_rate; dvfs_ops->get_rate =3D acpm_dvfs_get_rate; diff --git a/drivers/mfd/sec-acpm.c b/drivers/mfd/sec-acpm.c index 0e23b9d9f7ee..9e15b260b8df 100644 --- a/drivers/mfd/sec-acpm.c +++ b/drivers/mfd/sec-acpm.c @@ -391,7 +391,7 @@ static int sec_pmic_acpm_bus_write(void *context, const= void *data, { struct sec_pmic_acpm_bus_context *ctx =3D context; struct acpm_handle *acpm =3D ctx->shared->acpm; - const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic_ops; + const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic; size_t val_count =3D count - BITS_TO_BYTES(ACPM_ADDR_BITS); const u8 *d =3D data; const u8 *vals =3D &d[BITS_TO_BYTES(ACPM_ADDR_BITS)]; @@ -411,7 +411,7 @@ static int sec_pmic_acpm_bus_read(void *context, const = void *reg_buf, size_t reg { struct sec_pmic_acpm_bus_context *ctx =3D context; struct acpm_handle *acpm =3D ctx->shared->acpm; - const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic_ops; + const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic; const u8 *r =3D reg_buf; u8 reg; =20 @@ -430,7 +430,7 @@ static int sec_pmic_acpm_bus_reg_update_bits(void *cont= ext, unsigned int reg, un { struct sec_pmic_acpm_bus_context *ctx =3D context; struct acpm_handle *acpm =3D ctx->shared->acpm; - const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic_ops; + const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic; =20 return pmic_ops->update_reg(acpm, ctx->shared->acpm_chan_id, ctx->type, r= eg & 0xff, ctx->shared->speedy_channel, val, mask); diff --git a/include/linux/firmware/samsung/exynos-acpm-protocol.h b/includ= e/linux/firmware/samsung/exynos-acpm-protocol.h index d4db2796a6fb..b206efa62be6 100644 --- a/include/linux/firmware/samsung/exynos-acpm-protocol.h +++ b/include/linux/firmware/samsung/exynos-acpm-protocol.h @@ -36,8 +36,8 @@ struct acpm_pmic_ops { }; =20 struct acpm_ops { - struct acpm_dvfs_ops dvfs_ops; - struct acpm_pmic_ops pmic_ops; + struct acpm_dvfs_ops dvfs; + struct acpm_pmic_ops pmic; }; =20 /** --=20 2.54.0.545.g6539524ca2-goog From nobody Sat Jun 13 17:10:29 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D9EC43DA21 for ; Wed, 6 May 2026 11:39:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067568; cv=none; b=AywUxqpDNdvFNlXZZwm2uaQcBSBcmeeqtAO7C3jUErj5uIdKKuQuEieVByxnLkjKOvwXN/Lr7IBc6jP/nM/gaojdhpP7hI8iAM+xqj1TxJPNR3NH9Bl40lmV2H6LLb7rO9d1g6Sl/T1tlHpqtlXYrB83oz5BG5cMiwYi+CMK/Ds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067568; c=relaxed/simple; bh=rvG1FU/yzeppWfRfa1yi/pl0sQB7nwSNY4B9HK/7PzY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pCseIHTy46l+HqtgP0+PObHZ4i+uszEdXJsUC01N3xjIBpWTgZ0nlTJarMnm4GYEycRVRgjR/uevMFeF9ADFdYHlJoUQCoqImne3iL49N/0knkAw1YlLJEPT8ZrXCcj/EDpz4tbqY+8BQEsL0mhsVEn5utvf+w1preWxXBdGpY4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=Vuq1r+Gl; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Vuq1r+Gl" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-48334ee0aeaso45165865e9.1 for ; Wed, 06 May 2026 04:39:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778067565; x=1778672365; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=LC2V7L5MNeD6JRSN42bm026kYg+hHIPEct1+4nQZRpY=; b=Vuq1r+GlpKnkBp/kv9UifzMBm/u7r8D2vOU2ZKzxBtk7VqqTIgRV59juZmrmm2FXux DxQ68CJYiLC7pg5RNJkcqUiJhe6Iq50kpbguX0nJK9T5Dc++MEl6cC1Jf3kcu+MYrIex EGn8kzBISCE9uxPnPsOlvZ/N9edFHKhHlITzXDAgmlIMhSux/+aBuML0VGePHvwEpx/I AGVQfIOmW2OJaJNas8tHF53376iq7+nP+Npn/AJl5hOAjf4OhayH1EqBbMaaYGbAw1P0 9OSVjHQsyOSgZ/aYOZpKGhcmWTZahwdz0/Eaw1a68AEcPwOcEfASLc6LqrilDgvaYNOE RYCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778067565; x=1778672365; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=LC2V7L5MNeD6JRSN42bm026kYg+hHIPEct1+4nQZRpY=; b=e5nxeUmsLQzGVvNmPjHZgJzJtoXNB9FTpbcD+wX0d4FYE7k2Mh5it4oiRQfryQXsAa PpdAo+XcztiunE4/bLBA5bkK9sS4lbYAWHmtBMAnlhnC3EL4BObzINeftH6FjjRTwvWq rRCZTs7ZNKAYpJuzBO3LtFocNzjE2CKUbcfNI+2pg7/dB1wkq2vROyj0brpiOeSprYRs JvAjH9Ahhiw7OpaHU+t8Z518sL3NIlTD2BXSLDCfdDVXK9AmjvGWRhjLeNiTxJoqte10 HFiFppIxontNjY2HeSz4wq7NVHYpcbWDK1u9SRFjzXbEs3ArhD1sZITDOf5ZgeOS58Jh myYg== X-Forwarded-Encrypted: i=1; AFNElJ9zTOQYftgIKYssyNdqMHA8fcCQ3Aw0kl+4EYf0Hj+fCzcXb2RxGKpo3BO/4UmFKWnUV87qL+dtPRTk0U8=@vger.kernel.org X-Gm-Message-State: AOJu0YyKUqlz3TfuvjY3R5Ty7p+PJixO43Tp9/W/omQNrZFO8uCPlgKD bOORhLUcpkS7/7L/GivYZ07TenvP2By2XuyZmlWZmUT2jWpPb7fHM50w98w3d6ujdPk= X-Gm-Gg: AeBDietT/iKGdXjN9B8/N/Hj1DCCZ1wwL9lMf/fX/3/vlTYxLti++peR+b09uoUL+p3 hwRRTi2RM2+2hkFv4b/VbGHsHfTBmejD7yIsNf0bQ2bAKv8qRn1MbEyNkZuW/7vQsWlG9y38XZU d06TCAX+MYR58HkL71s7zASMM5oTY0JT5xgVFFUF047otHxnfcsy2JL7+HP9n7Ug7GjIMb0ealk APSR8i86SdTZM5mLeoLd/MToD+EeCsT8yRgdDtZhH+6d22ZnFdKF3vQBuxFr/7/gAJ5ut2zRmH8 lJ6zW1D1N/nzZe1ZVXphRjvY+iD9L0kyiCceef6OLqQpKWUEQtNJ0i+dfJJeU3oPcDwr3BOt5TO tKGZrIFkEtrsXz4b7TVPjBxBi9J1La2HeHDpnxiaVoB0s6te4SkSuMScHjLdCdYrQ1d6ATm4J// w/wOBVKTXgYcxBfbb152wrmxEgofAo7CKsvEfPAi8oY7BMs+b4UKlUINxD47jZbhTvyCDCpndGo nCrozOgu8OyKVHOew== X-Received: by 2002:a05:600c:8011:b0:485:35d3:ce59 with SMTP id 5b1f17b1804b1-48e51e1a545mr48855035e9.10.1778067564787; Wed, 06 May 2026 04:39:24 -0700 (PDT) Received: from ta2.c.googlers.com (17.83.155.104.bc.googleusercontent.com. [104.155.83.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4505238e6e0sm11852350f8f.6.2026.05.06.04.39.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 04:39:23 -0700 (PDT) From: Tudor Ambarus Date: Wed, 06 May 2026 11:39:06 +0000 Subject: [PATCH 4/6] firmware: samsung: acpm: Make acpm_ops const and access via pointer Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-acpm-tmu-helpers-v1-4-a9cd5daf8355@linaro.org> References: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> In-Reply-To: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> To: Tudor Ambarus , Krzysztof Kozlowski , Michael Turquette , Stephen Boyd , Lee Jones Cc: Alim Akhtar , Sylwester Nawrocki , Chanwoo Choi , =?utf-8?q?Andr=C3=A9_Draszik?= , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, peter.griffin@linaro.org, andre.draszik@linaro.org, jyescas@google.com, kernel-team@android.com X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778067561; l=6065; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=rvG1FU/yzeppWfRfa1yi/pl0sQB7nwSNY4B9HK/7PzY=; b=q7uxU2+x4M5v5Y7lgDRgH3mPouc9ZTFFuaU6VeV5us/VlznbPWvWpvFipIAUKrRTi3snxP0gW okPof9XAajAAaiPYBGDvOUvmWT0ve0ac68SgF5T1G8zj+VJ4ve9rS89 X-Developer-Key: i=tudor.ambarus@linaro.org; a=ed25519; pk=uQzE0NXo3dIjeowMTOPCpIiPHEz12IA/MbyzrZVh9WI= Replace the embedded `struct acpm_ops` inside `struct acpm_handle` with a pointer to a `const struct acpm_ops`. Previously, the operations structure was embedded directly within the handle and populated dynamically at runtime via `acpm_setup_ops()`. This resulted in mutable function pointers and unnecessary per-instance memory overhead. By defining `exynos_acpm_driver_ops` statically as a `const` structure, the function pointers are now safely housed in the read-only `.rodata` section. This improves security by preventing function pointer overwrites, saves memory, and slightly reduces initialization overhead in `acpm_probe()`. Consequently, update all consumer drivers (clk, mfd) to access the operations via the new pointer indirection (`->ops->`). Finally, fix the previously empty kernel-doc description for the ops member to reflect its new pointer nature. Signed-off-by: Tudor Ambarus Reviewed-by: Peter Griffin --- drivers/clk/samsung/clk-acpm.c | 8 ++--- drivers/firmware/samsung/exynos-acpm.c | 36 ++++++++++--------= ---- drivers/mfd/sec-acpm.c | 6 ++-- .../linux/firmware/samsung/exynos-acpm-protocol.h | 4 +-- 4 files changed, 25 insertions(+), 29 deletions(-) diff --git a/drivers/clk/samsung/clk-acpm.c b/drivers/clk/samsung/clk-acpm.c index 93667777094c..953ca8d5720a 100644 --- a/drivers/clk/samsung/clk-acpm.c +++ b/drivers/clk/samsung/clk-acpm.c @@ -68,8 +68,8 @@ static unsigned long acpm_clk_recalc_rate(struct clk_hw *= hw, { struct acpm_clk *clk =3D to_acpm_clk(hw); =20 - return clk->handle->ops.dvfs.get_rate(clk->handle, clk->mbox_chan_id, - clk->id); + return clk->handle->ops->dvfs.get_rate(clk->handle, clk->mbox_chan_id, + clk->id); } =20 static int acpm_clk_determine_rate(struct clk_hw *hw, @@ -89,8 +89,8 @@ static int acpm_clk_set_rate(struct clk_hw *hw, unsigned = long rate, { struct acpm_clk *clk =3D to_acpm_clk(hw); =20 - return clk->handle->ops.dvfs.set_rate(clk->handle, clk->mbox_chan_id, - clk->id, rate); + return clk->handle->ops->dvfs.set_rate(clk->handle, clk->mbox_chan_id, + clk->id, rate); } =20 static const struct clk_ops acpm_clk_ops =3D { diff --git a/drivers/firmware/samsung/exynos-acpm.c b/drivers/firmware/sams= ung/exynos-acpm.c index da960d3e1145..1a0d98b55439 100644 --- a/drivers/firmware/samsung/exynos-acpm.c +++ b/drivers/firmware/samsung/exynos-acpm.c @@ -670,30 +670,26 @@ static int acpm_channels_init(struct acpm_info *acpm) return 0; } =20 -/** - * acpm_setup_ops() - setup the operations structures. - * @acpm: pointer to the driver data. - */ -static void acpm_setup_ops(struct acpm_info *acpm) -{ - struct acpm_dvfs_ops *dvfs_ops =3D &acpm->handle.ops.dvfs; - struct acpm_pmic_ops *pmic_ops =3D &acpm->handle.ops.pmic; - - dvfs_ops->set_rate =3D acpm_dvfs_set_rate; - dvfs_ops->get_rate =3D acpm_dvfs_get_rate; - - pmic_ops->read_reg =3D acpm_pmic_read_reg; - pmic_ops->bulk_read =3D acpm_pmic_bulk_read; - pmic_ops->write_reg =3D acpm_pmic_write_reg; - pmic_ops->bulk_write =3D acpm_pmic_bulk_write; - pmic_ops->update_reg =3D acpm_pmic_update_reg; -} - static void acpm_clk_pdev_unregister(void *data) { platform_device_unregister(data); } =20 +static const struct acpm_ops exynos_acpm_driver_ops =3D { + .dvfs =3D { + .set_rate =3D acpm_dvfs_set_rate, + .get_rate =3D acpm_dvfs_get_rate, + }, + + .pmic =3D { + .read_reg =3D acpm_pmic_read_reg, + .bulk_read =3D acpm_pmic_bulk_read, + .write_reg =3D acpm_pmic_write_reg, + .bulk_write =3D acpm_pmic_bulk_write, + .update_reg =3D acpm_pmic_update_reg, + }, +}; + static int acpm_probe(struct platform_device *pdev) { const struct acpm_match_data *match_data; @@ -734,7 +730,7 @@ static int acpm_probe(struct platform_device *pdev) if (ret) return ret; =20 - acpm_setup_ops(acpm); + acpm->handle.ops =3D &exynos_acpm_driver_ops; =20 platform_set_drvdata(pdev, acpm); =20 diff --git a/drivers/mfd/sec-acpm.c b/drivers/mfd/sec-acpm.c index 9e15b260b8df..3397d13d3b7f 100644 --- a/drivers/mfd/sec-acpm.c +++ b/drivers/mfd/sec-acpm.c @@ -391,7 +391,7 @@ static int sec_pmic_acpm_bus_write(void *context, const= void *data, { struct sec_pmic_acpm_bus_context *ctx =3D context; struct acpm_handle *acpm =3D ctx->shared->acpm; - const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic; + const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops->pmic; size_t val_count =3D count - BITS_TO_BYTES(ACPM_ADDR_BITS); const u8 *d =3D data; const u8 *vals =3D &d[BITS_TO_BYTES(ACPM_ADDR_BITS)]; @@ -411,7 +411,7 @@ static int sec_pmic_acpm_bus_read(void *context, const = void *reg_buf, size_t reg { struct sec_pmic_acpm_bus_context *ctx =3D context; struct acpm_handle *acpm =3D ctx->shared->acpm; - const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic; + const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops->pmic; const u8 *r =3D reg_buf; u8 reg; =20 @@ -430,7 +430,7 @@ static int sec_pmic_acpm_bus_reg_update_bits(void *cont= ext, unsigned int reg, un { struct sec_pmic_acpm_bus_context *ctx =3D context; struct acpm_handle *acpm =3D ctx->shared->acpm; - const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops.pmic; + const struct acpm_pmic_ops *pmic_ops =3D &acpm->ops->pmic; =20 return pmic_ops->update_reg(acpm, ctx->shared->acpm_chan_id, ctx->type, r= eg & 0xff, ctx->shared->speedy_channel, val, mask); diff --git a/include/linux/firmware/samsung/exynos-acpm-protocol.h b/includ= e/linux/firmware/samsung/exynos-acpm-protocol.h index b206efa62be6..fbf1829b33db 100644 --- a/include/linux/firmware/samsung/exynos-acpm-protocol.h +++ b/include/linux/firmware/samsung/exynos-acpm-protocol.h @@ -42,10 +42,10 @@ struct acpm_ops { =20 /** * struct acpm_handle - Reference to an initialized protocol instance - * @ops: + * @ops: pointer to the constant ACPM protocol operations. */ struct acpm_handle { - struct acpm_ops ops; + const struct acpm_ops *ops; }; =20 struct device; --=20 2.54.0.545.g6539524ca2-goog From nobody Sat Jun 13 17:10:29 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63FC543D51D for ; Wed, 6 May 2026 11:39:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067571; cv=none; b=WuTGutmYCCobYXwq9NvYUaCBp5n9pDU20aWaEWoxuxHlDUlqaqWfzphWAGUPZT6NqjHkfk/B6lnFUqGjAMjxs9kOYCQMYsrfSZ6aNf60/kIRI0z4VdCC384ZpuZvAdIUen02LW2UfSc7XhATYGp9GqxP6omAloog/ZLpsaAA/Vg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067571; c=relaxed/simple; bh=QM9RYjOEFgDZVWzh43f8lIp1ObP7OwsYnx52jyglobE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dviNbX+OTCtSOejOVdmtoZ30tANYSRjKJBFDMuSPYxb8WyXJb9cCRJ9GrdbqqEhNLRo86kHX8WrW0M6iqIr1LdoUCGOB/aX1MGxGaUa9+8l9cwureDfZGWU4ViqEzqxQU4GzkGfsEQSG1hj9kErXy+RiQCl5aYCOB6Fhfm9WTHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ShfIIROL; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ShfIIROL" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-452169ae568so263385f8f.3 for ; Wed, 06 May 2026 04:39:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778067568; x=1778672368; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+HYyI02VI5DS9H0X7Gd0os9Aeh6ziMH+nrP+zg8t06g=; b=ShfIIROLwFO2984DCcyQ0JlD7ZB6pkkMl8Zzgfr44m8Az9+frAjvzTex5/jvt4jaD5 hc/hdOnQ3l1KAI5bPOVRaiINQIZEi/2iRWVd8nQLlKgJ80s7bwkVujMr7FhLu4TTE7ng 8R/BiNdaYH56RQasFsv7wqHzOiwsjgxpj1DMb6Ijc1sq2QAyOBRWsdMQAAlWUKowEduK tCsgSE1AamMhYjJsm3RgL6eBZq/Hh+JONcgq2m14mfAMXFYRLwNvsO0u6Bc/BwxiFDHM 3RRpx0pSLTTbdiuVnOk72+N6sFdjZ8mkGD4o4V/3ehC3mx6DB6mteCn6oiNRQSNIY6WR mYEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778067568; x=1778672368; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=+HYyI02VI5DS9H0X7Gd0os9Aeh6ziMH+nrP+zg8t06g=; b=eqESsK4UgqIUOIVsV71rquroyYfYkjfhdETA+utybhF+1TqgdYIfX0hRggrKjPpi6N 3Dk7HwY6tooRZeBkBEyZyQpYk8pP4TDfWWenrEAaCx7ORwroxHQvwIw4DW0a+tYRqcUK Bb5RDtdaIONRi9MBKXwM9j3/TksbTtgGh+0VgSA3Rufbme24slAB4bY7FCtIfp3srlA2 yTAKe6SGNPv2qJBadMjzAeDZb3su7DtxsAE35+cxgKbHwSHzxDM/ohCQn4ttR6POj3jp 2E51fIxQcXXFnsUYOKm3v7d8tlQyap3xy2EATu6tjmQ3rn8U+unCts/YTqt8IOUc6joF mYRw== X-Forwarded-Encrypted: i=1; AFNElJ/tZW9vLWxFaAnVOEAM7pb1t0c9Hffxgh0FR6h7YrxDUth7LwCPIJg7dvl2NESlHhWeeWx/xMM43lg9X3o=@vger.kernel.org X-Gm-Message-State: AOJu0YwXtiOIvZa9i85cwhBw1DcAkOZO1z30kW8qEdNS79Rj8BVD53tB u0GqX4AVMERdJ5yeGlB2Z53VTq0/dSZJECaDyM9eIXYPOOh8jqn5y7dr4oYtLT1qC9EdUtWIxv8 pENP+3Pw= X-Gm-Gg: AeBDietQ+1//gULYdkz6Zrc21BL3nOW6t4bNvfM2e0G4h1GKDqLrn9ZyZLDJUXb35z2 z+fhh34r9dIQqyOqNh62rKSo8wMqZd/Es/QgF9hhdkBLcB7ldU7CagBjC468qxm3vDko4Fckda0 QwlOpe47Idlecy3Bh98NmADIrLfGmbrqcDlWdPj/r45ogEiQ/tBcKz2Cjb5pZ3lV9lhqCNAmcdR DSGw/7xODCccdhogoKIqcSUBrHe7fUG5t3IMh38UpziSaYI3XTf9o6iz81RT5ToKD0oVaMrC73P 3rsDHum9bGE8/kdSCqQ6QTArTKIiwCqYj/4/nDnSGFs3eDKCmF3v4OprbR9aSHltpicMzrSJr5E WWkxvx6NYPoH5JpoD4PfSwY+DULdHEL6WvIweaHilNX1xsgl59u/wOac2jfNsTb+eTc4+DBmbwl 3YU+JMlQPWtxgl75/5EPsSDWa/MR6dxTATq51THmUGW/M/RPAgOocKgf0MLMQZgheyriEMuai22 my5wNKUsRxyDdKLzg== X-Received: by 2002:a05:6000:144b:b0:43d:714:34e5 with SMTP id ffacd0b85a97d-4515ce1bd58mr5254777f8f.24.1778067565282; Wed, 06 May 2026 04:39:25 -0700 (PDT) Received: from ta2.c.googlers.com (17.83.155.104.bc.googleusercontent.com. [104.155.83.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4505238e6e0sm11852350f8f.6.2026.05.06.04.39.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 04:39:24 -0700 (PDT) From: Tudor Ambarus Date: Wed, 06 May 2026 11:39:07 +0000 Subject: [PATCH 5/6] firmware: samsung: acpm: Add TMU protocol support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-acpm-tmu-helpers-v1-5-a9cd5daf8355@linaro.org> References: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> In-Reply-To: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> To: Tudor Ambarus , Krzysztof Kozlowski , Michael Turquette , Stephen Boyd , Lee Jones Cc: Alim Akhtar , Sylwester Nawrocki , Chanwoo Choi , =?utf-8?q?Andr=C3=A9_Draszik?= , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, peter.griffin@linaro.org, andre.draszik@linaro.org, jyescas@google.com, kernel-team@android.com, Krzysztof Kozlowski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778067561; l=10615; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=QM9RYjOEFgDZVWzh43f8lIp1ObP7OwsYnx52jyglobE=; b=vfc9c2R8gfdwg8hpbY5ROTsxrJQaJ1cWOIgnhw13SWynhDZVUghnHV50nJ59ymbnauzbv32RH gA7rzLLSFEDDkVIUxTvDiE/9+aIGwREiskC7Rpbqvx5TWw7oqHGGfAT X-Developer-Key: i=tudor.ambarus@linaro.org; a=ed25519; pk=uQzE0NXo3dIjeowMTOPCpIiPHEz12IA/MbyzrZVh9WI= The Thermal Management Unit (TMU) on the Google GS101 SoC is managed through a hybrid model shared between the kernel and the Alive Clock and Power Manager (ACPM) firmware. Add the protocol helpers required to communicate with the ACPM for thermal operations, including initialization, threshold configuration, temperature reading, and system suspend/resume handshakes. Signed-off-by: Tudor Ambarus Reviewed-by: Krzysztof Kozlowski Reviewed-by: Peter Griffin --- drivers/firmware/samsung/Makefile | 1 + drivers/firmware/samsung/exynos-acpm-tmu.c | 239 +++++++++++++++++= ++++ drivers/firmware/samsung/exynos-acpm-tmu.h | 28 +++ drivers/firmware/samsung/exynos-acpm.c | 12 ++ .../linux/firmware/samsung/exynos-acpm-protocol.h | 18 ++ 5 files changed, 298 insertions(+) diff --git a/drivers/firmware/samsung/Makefile b/drivers/firmware/samsung/M= akefile index 80d4f89b33a9..5a6f72bececf 100644 --- a/drivers/firmware/samsung/Makefile +++ b/drivers/firmware/samsung/Makefile @@ -3,4 +3,5 @@ acpm-protocol-objs :=3D exynos-acpm.o acpm-protocol-objs +=3D exynos-acpm-pmic.o acpm-protocol-objs +=3D exynos-acpm-dvfs.o +acpm-protocol-objs +=3D exynos-acpm-tmu.o obj-$(CONFIG_EXYNOS_ACPM_PROTOCOL) +=3D acpm-protocol.o diff --git a/drivers/firmware/samsung/exynos-acpm-tmu.c b/drivers/firmware/= samsung/exynos-acpm-tmu.c new file mode 100644 index 000000000000..c68d60b4c0b3 --- /dev/null +++ b/drivers/firmware/samsung/exynos-acpm-tmu.c @@ -0,0 +1,239 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright 2020 Samsung Electronics Co., Ltd. + * Copyright 2020 Google LLC. + * Copyright 2026 Linaro Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "exynos-acpm.h" +#include "exynos-acpm-tmu.h" + +/* IPC Request Types */ +#define ACPM_TMU_INIT 0x01 +#define ACPM_TMU_READ_TEMP 0x02 +#define ACPM_TMU_SUSPEND 0x04 +#define ACPM_TMU_RESUME 0x10 +#define ACPM_TMU_THRESHOLD 0x11 +#define ACPM_TMU_INTEN 0x12 +#define ACPM_TMU_CONTROL 0x13 +#define ACPM_TMU_IRQ_CLEAR 0x14 + +#define ACPM_TMU_TX_DATA_LEN 8 +#define ACPM_TMU_RX_DATA_LEN 7 + +struct acpm_tmu_tx { + u16 ctx; + u16 fw_use; + u8 type; + u8 rsvd0; + u8 tzid; + u8 rsvd1; + u8 data[ACPM_TMU_TX_DATA_LEN]; +} __packed; + +struct acpm_tmu_rx { + u16 ctx; + u16 fw_use; + u8 type; + s8 ret; + u8 tzid; + s8 temp; + u8 rsvd; + u8 data[ACPM_TMU_RX_DATA_LEN]; +} __packed; + +union acpm_tmu_msg { + u32 data[4]; + struct acpm_tmu_tx tx; + struct acpm_tmu_rx rx; +}; + +static int acpm_tmu_to_linux_err(s8 fw_err) +{ + /* + * ACPM_TMU_INIT uses BIT(0) and BIT(1) of msg.rx.ret to flag APM + * capabilities. Treat zero and all positive values as success. + */ + if (fw_err >=3D 0) + return 0; + + if (fw_err =3D=3D -1) + return -EACCES; + + return -EIO; +} + +int acpm_tmu_init(struct acpm_handle *handle, unsigned int acpm_chan_id) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + msg.tx.type =3D ACPM_TMU_INIT; + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + return acpm_tmu_to_linux_err(msg.rx.ret); +} + +int acpm_tmu_read_temp(struct acpm_handle *handle, unsigned int acpm_chan_= id, + u8 tz, int *temp) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + msg.tx.type =3D ACPM_TMU_READ_TEMP; + msg.tx.tzid =3D tz; + + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + ret =3D acpm_tmu_to_linux_err(msg.rx.ret); + if (ret) + return ret; + + *temp =3D msg.rx.temp; + + return 0; +} + +int acpm_tmu_set_threshold(struct acpm_handle *handle, + unsigned int acpm_chan_id, u8 tz, + const u8 temperature[8], size_t tlen) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + if (tlen > ACPM_TMU_TX_DATA_LEN) + return -EINVAL; + + msg.tx.type =3D ACPM_TMU_THRESHOLD; + msg.tx.tzid =3D tz; + memcpy(msg.tx.data, temperature, tlen); + + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + return acpm_tmu_to_linux_err(msg.rx.ret); +} + +int acpm_tmu_set_interrupt_enable(struct acpm_handle *handle, + unsigned int acpm_chan_id, u8 tz, u8 inten) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + msg.tx.type =3D ACPM_TMU_INTEN; + msg.tx.tzid =3D tz; + msg.tx.data[0] =3D inten; + + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + return acpm_tmu_to_linux_err(msg.rx.ret); +} + +int acpm_tmu_tz_control(struct acpm_handle *handle, unsigned int acpm_chan= _id, + u8 tz, bool enable) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + msg.tx.type =3D ACPM_TMU_CONTROL; + msg.tx.tzid =3D tz; + msg.tx.data[0] =3D enable ? 1 : 0; + + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + return acpm_tmu_to_linux_err(msg.rx.ret); +} + +int acpm_tmu_clear_tz_irq(struct acpm_handle *handle, unsigned int acpm_ch= an_id, + u8 tz) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + msg.tx.type =3D ACPM_TMU_IRQ_CLEAR; + msg.tx.tzid =3D tz; + + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + return acpm_tmu_to_linux_err(msg.rx.ret); +} + +int acpm_tmu_suspend(struct acpm_handle *handle, unsigned int acpm_chan_id) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + msg.tx.type =3D ACPM_TMU_SUSPEND; + + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + return acpm_tmu_to_linux_err(msg.rx.ret); +} + +int acpm_tmu_resume(struct acpm_handle *handle, unsigned int acpm_chan_id) +{ + union acpm_tmu_msg msg =3D {0}; + struct acpm_xfer xfer; + int ret; + + msg.tx.type =3D ACPM_TMU_RESUME; + + acpm_set_xfer(&xfer, msg.data, ARRAY_SIZE(msg.data), acpm_chan_id, + true); + + ret =3D acpm_do_xfer(handle, &xfer); + if (ret) + return ret; + + return acpm_tmu_to_linux_err(msg.rx.ret); +} diff --git a/drivers/firmware/samsung/exynos-acpm-tmu.h b/drivers/firmware/= samsung/exynos-acpm-tmu.h new file mode 100644 index 000000000000..8b89f29fda67 --- /dev/null +++ b/drivers/firmware/samsung/exynos-acpm-tmu.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright 2020 Samsung Electronics Co., Ltd. + * Copyright 2020 Google LLC. + * Copyright 2026 Linaro Ltd. + */ +#ifndef __EXYNOS_ACPM_TMU_H__ +#define __EXYNOS_ACPM_TMU_H__ + +#include + +struct acpm_handle; + +int acpm_tmu_init(struct acpm_handle *handle, unsigned int acpm_chan_id); +int acpm_tmu_read_temp(struct acpm_handle *handle, unsigned int acpm_chan_= id, + u8 tz, int *temp); +int acpm_tmu_set_threshold(struct acpm_handle *handle, + unsigned int acpm_chan_id, u8 tz, + const u8 temperature[8], size_t tlen); +int acpm_tmu_set_interrupt_enable(struct acpm_handle *handle, + unsigned int acpm_chan_id, u8 tz, u8 inten); +int acpm_tmu_tz_control(struct acpm_handle *handle, unsigned int acpm_chan= _id, + u8 tz, bool enable); +int acpm_tmu_clear_tz_irq(struct acpm_handle *handle, unsigned int acpm_ch= an_id, + u8 tz); +int acpm_tmu_suspend(struct acpm_handle *handle, unsigned int acpm_chan_id= ); +int acpm_tmu_resume(struct acpm_handle *handle, unsigned int acpm_chan_id); +#endif /* __EXYNOS_ACPM_TMU_H__ */ diff --git a/drivers/firmware/samsung/exynos-acpm.c b/drivers/firmware/sams= ung/exynos-acpm.c index 1a0d98b55439..2cebc5456968 100644 --- a/drivers/firmware/samsung/exynos-acpm.c +++ b/drivers/firmware/samsung/exynos-acpm.c @@ -33,6 +33,7 @@ #include "exynos-acpm.h" #include "exynos-acpm-dvfs.h" #include "exynos-acpm-pmic.h" +#include "exynos-acpm-tmu.h" =20 #define ACPM_PROTOCOL_SEQNUM GENMASK(21, 16) =20 @@ -688,6 +689,17 @@ static const struct acpm_ops exynos_acpm_driver_ops = =3D { .bulk_write =3D acpm_pmic_bulk_write, .update_reg =3D acpm_pmic_update_reg, }, + + .tmu =3D { + .init =3D acpm_tmu_init, + .read_temp =3D acpm_tmu_read_temp, + .set_threshold =3D acpm_tmu_set_threshold, + .set_interrupt_enable =3D acpm_tmu_set_interrupt_enable, + .tz_control =3D acpm_tmu_tz_control, + .clear_tz_irq =3D acpm_tmu_clear_tz_irq, + .suspend =3D acpm_tmu_suspend, + .resume =3D acpm_tmu_resume, + }, }; =20 static int acpm_probe(struct platform_device *pdev) diff --git a/include/linux/firmware/samsung/exynos-acpm-protocol.h b/includ= e/linux/firmware/samsung/exynos-acpm-protocol.h index fbf1829b33db..08d9f5c95701 100644 --- a/include/linux/firmware/samsung/exynos-acpm-protocol.h +++ b/include/linux/firmware/samsung/exynos-acpm-protocol.h @@ -35,9 +35,27 @@ struct acpm_pmic_ops { u8 type, u8 reg, u8 chan, u8 value, u8 mask); }; =20 +struct acpm_tmu_ops { + int (*init)(struct acpm_handle *handle, unsigned int acpm_chan_id); + int (*read_temp)(struct acpm_handle *handle, unsigned int acpm_chan_id, + u8 tz, int *temp); + int (*set_threshold)(struct acpm_handle *handle, + unsigned int acpm_chan_id, u8 tz, + const u8 temperature[8], size_t tlen); + int (*set_interrupt_enable)(struct acpm_handle *handle, + unsigned int acpm_chan_id, u8 tz, u8 inten); + int (*tz_control)(struct acpm_handle *handle, unsigned int acpm_chan_id, + u8 tz, bool enable); + int (*clear_tz_irq)(struct acpm_handle *handle, + unsigned int acpm_chan_id, u8 tz); + int (*suspend)(struct acpm_handle *handle, unsigned int acpm_chan_id); + int (*resume)(struct acpm_handle *handle, unsigned int acpm_chan_id); +}; + struct acpm_ops { struct acpm_dvfs_ops dvfs; struct acpm_pmic_ops pmic; + struct acpm_tmu_ops tmu; }; =20 /** --=20 2.54.0.545.g6539524ca2-goog From nobody Sat Jun 13 17:10:29 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 976CC43DA47 for ; Wed, 6 May 2026 11:39:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067569; cv=none; b=gU2jrDI/S1Ko6hrZvkKgxbSSGLINCWR+WG+enUwt30wdwCSqDQrjWVFeuH61Y5rMJrWkVO5MvBRjyE2Y7Jw0Ly0M0WuMb2byI8EbKv881DDmbbXLrh/Msvt8nnBsjYlhaYwl4AaSebQ27yXZzm2JOBXnh9INv0Pt13QtiPVxwZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778067569; c=relaxed/simple; bh=ixgrXz9GN5EhUvDPJ28JgskjbIJslRyhesZiWA23f/I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Tik654JJJkoMw+1WZHwaWELSdsQYqzfUo//AiLB/xcyxQzATLahdJg/2Z+FTOPOJCyeNlXN+xWAtSv8WyDTzP3CvYrZYkcsfqFMltYliSxxe3Fshx3IjHkEoe27hNvMvS6IJ8wWzKUwDQbgpd5a3eeW+CaQbGAMCIiOJlpu6vv4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=WsTBEqwZ; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="WsTBEqwZ" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-43d7e23defbso3598843f8f.0 for ; Wed, 06 May 2026 04:39:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778067566; x=1778672366; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=e4q7kcb0fMi5Pu2YwTecx4CalpdCzHIy+97zlwqlgQQ=; b=WsTBEqwZb1iIc//09QkpFbiCK2IQ85aPaARCvUWhwpyQB2fApE3XlDm7ZzsDnS6Xgo NTD5xAm2Q2v0tMfx9vkqKZjFuOXXB6jaGlYweQwoWTE5FQfkHmshYcSRHMtHDKXJNulB vki/mzOPrDhBXHVG+WOpc01HMWCXLpJ/lcjqMVL5/NToCxvNIHnTsMHusPVogbgkd2Lb /SJqpGY16AgsFbOLFX0fOhVbcturTgIHbUsnl4O3GCRIxGb4sw5MRZmYVFD6h2ETIp/L 0iL2vN5/w+BEScFMvW+OsMoi2ofNCXyxfvlWLqYxKHaWzFu8iA6MdCbClTzNRcRtPFoN nW8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778067566; x=1778672366; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=e4q7kcb0fMi5Pu2YwTecx4CalpdCzHIy+97zlwqlgQQ=; b=Z0uG3d2+SV/1jG9grLhZYipFkMVqyHeQAVtHvfkUXkGTyBeQC5pgTeW65meHg3FhLG lrgk4Nv8IUCx+9wEkZtLknRp2ztU/uZSeqVjuMutPlumyUVwJkAPZyWyz+g5Hpf5v2sK ULqmkloO3Uh5LCwrQrcIyy7mvZ05y+V4hJZYUfRkBwHgNpXXLDdGxDSoNsNJTUyeAUCq f2szsd3gxnWoUJXts5l1uLaCUs1eRQOpwtAfORWO5e53H8N6l+a5X13pgM8WT+loEtGO DAloLbHJ3mWAXInvHoF4Iem9TxzzOjxHU4dpbFQ5gt9RafDrDz8qyAm1nRyj98nz67AZ j/fg== X-Forwarded-Encrypted: i=1; AFNElJ9l9r38P/PAzQ7mCVe9NgMXQ6D+hKjZfUp0F+YqQFJ5s9SWgd7leW0bbEzDyGZGOa/S4G9HWZ3NJoyfI04=@vger.kernel.org X-Gm-Message-State: AOJu0YxqTushbxrq/JeZHuXx1iL6IR/lIUwoGawSHVtUXR4sdMxC8YSG UEK/DTHiDvuvGgf3/yoXuhT97fhyXFmrQ/Sl5zVRKZy//cxFpnL3pPLGhZFzhr1PKtQ= X-Gm-Gg: AeBDies2cxd775GPftbVuzYhP9LTdY9hTnDboz0naJjKahvC/RUzYg5+kVNMzzdfAXR amI6UuClYgtoOo7I6Iy40c8EiYSvoRpTDbstvEToiZM8O6fsDnMwNCJIPRIO0hMRRgCfoobbPD6 dXCLEH8vlM/bg9N8Z6YFWk5oS+4tx0qIg/bHsRbJCOu6x7eqM+paCCKq1Nrit4QaV+EpzYvi73k TpY/0z2cWA6XOiclrirFCzc4W9zvTJcih+crRv7h9KmOd5+ciGLRalpShq82pJXSz/FdiU1tj/Q 3NFURYzCiihg5WTXWKlcOocaMQYB+NWV6YrlQN5ZQcFFTZA0NqcNSMlNvw9EU3zW3vihULjG6oV p8+/+9O0m1foJS3w/LvNr+baBBviZYDJvq2iP3ZgG3FO1uqAGTjKSk77aCz4T6zzWA5gxYAMmFj kgVeiAofawIzLHdaG+sATdrZXTolTMMqdid2g77UogHL3rwkisVjkZ5VDv89mi6vfues426j6Qs /ohfjD6axpqRgkj6AsfFJQrYhqV X-Received: by 2002:a05:6000:42c6:b0:451:6a8d:e774 with SMTP id ffacd0b85a97d-4516a8de7a3mr3101276f8f.1.1778067565966; Wed, 06 May 2026 04:39:25 -0700 (PDT) Received: from ta2.c.googlers.com (17.83.155.104.bc.googleusercontent.com. [104.155.83.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4505238e6e0sm11852350f8f.6.2026.05.06.04.39.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 04:39:25 -0700 (PDT) From: Tudor Ambarus Date: Wed, 06 May 2026 11:39:08 +0000 Subject: [PATCH 6/6] firmware: samsung: acpm: Add devm_acpm_get_by_phandle helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-acpm-tmu-helpers-v1-6-a9cd5daf8355@linaro.org> References: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> In-Reply-To: <20260506-acpm-tmu-helpers-v1-0-a9cd5daf8355@linaro.org> To: Tudor Ambarus , Krzysztof Kozlowski , Michael Turquette , Stephen Boyd , Lee Jones Cc: Alim Akhtar , Sylwester Nawrocki , Chanwoo Choi , =?utf-8?q?Andr=C3=A9_Draszik?= , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, peter.griffin@linaro.org, andre.draszik@linaro.org, jyescas@google.com, kernel-team@android.com X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778067561; l=3014; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=ixgrXz9GN5EhUvDPJ28JgskjbIJslRyhesZiWA23f/I=; b=f/8MQczFVqs1m38YFWFXyGRZ8YFS9xYx7+0MAU6sUUFpkMvkBSPCNfMwpYRWjgw7yCQ1ajQlP qyIQAYzjkSbCZe7EwVXEnD5bggQ92A/a77SgnUhU4fr/gmyOdJ0dcCW X-Developer-Key: i=tudor.ambarus@linaro.org; a=ed25519; pk=uQzE0NXo3dIjeowMTOPCpIiPHEz12IA/MbyzrZVh9WI= Introduce devm_acpm_get_by_phandle() to standardize how consumer drivers acquire a handle to the ACPM IPC interface. Enforce the use of the "samsung,acpm-ipc" property name across the SoC and simplify the boilerplate code in client drivers. The first consumer of this helper is the Exynos ACPM Thermal Management Unit (TMU) driver. The TMU utilizes a hybrid management approach: direct register access from the Application Processor (AP) is restricted to the interrupt pending (INTPEND) registers for event identification. High-level functional tasks, such as sensor initialization, threshold programming, and temperature reads, are delegated to the ACPM firmware via this IPC interface. Signed-off-by: Tudor Ambarus Reviewed-by: Peter Griffin --- drivers/firmware/samsung/exynos-acpm.c | 23 ++++++++++++++++++= ++++ .../linux/firmware/samsung/exynos-acpm-protocol.h | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/drivers/firmware/samsung/exynos-acpm.c b/drivers/firmware/sams= ung/exynos-acpm.c index 2cebc5456968..a663e15fbad6 100644 --- a/drivers/firmware/samsung/exynos-acpm.c +++ b/drivers/firmware/samsung/exynos-acpm.c @@ -857,6 +857,29 @@ struct acpm_handle *devm_acpm_get_by_node(struct devic= e *dev, } EXPORT_SYMBOL_GPL(devm_acpm_get_by_node); =20 +/** + * devm_acpm_get_by_phandle - Resource managed lookup of the standardized + * "samsung,acpm-ipc" handle. + * @dev: consumer device + * + * Return: pointer to handle on success, ERR_PTR(-errno) otherwise. + */ +struct acpm_handle *devm_acpm_get_by_phandle(struct device *dev) +{ + struct acpm_handle *handle; + struct device_node *np; + + np =3D of_parse_phandle(dev->of_node, "samsung,acpm-ipc", 0); + if (!np) + return ERR_PTR(-ENODEV); + + handle =3D devm_acpm_get_by_node(dev, np); + of_node_put(np); + + return handle; +} +EXPORT_SYMBOL_GPL(devm_acpm_get_by_phandle); + static const struct acpm_match_data acpm_gs101 =3D { .initdata_base =3D ACPM_GS101_INITDATA_BASE, .acpm_clk_dev_name =3D "gs101-acpm-clk", diff --git a/include/linux/firmware/samsung/exynos-acpm-protocol.h b/includ= e/linux/firmware/samsung/exynos-acpm-protocol.h index 08d9f5c95701..83cbd425b652 100644 --- a/include/linux/firmware/samsung/exynos-acpm-protocol.h +++ b/include/linux/firmware/samsung/exynos-acpm-protocol.h @@ -71,6 +71,7 @@ struct device; #if IS_ENABLED(CONFIG_EXYNOS_ACPM_PROTOCOL) struct acpm_handle *devm_acpm_get_by_node(struct device *dev, struct device_node *np); +struct acpm_handle *devm_acpm_get_by_phandle(struct device *dev); #else =20 static inline struct acpm_handle *devm_acpm_get_by_node(struct device *dev, @@ -78,6 +79,11 @@ static inline struct acpm_handle *devm_acpm_get_by_node(= struct device *dev, { return ERR_PTR(-ENODEV); } + +static inline struct acpm_handle *devm_acpm_get_by_phandle(struct device *= dev) +{ + return ERR_PTR(-ENODEV); +} #endif =20 #endif /* __EXYNOS_ACPM_PROTOCOL_H */ --=20 2.54.0.545.g6539524ca2-goog