From nobody Fri Jun 12 11:39:05 2026 Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) (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 E85C343900E for ; Fri, 15 May 2026 09:32:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837553; cv=none; b=QKfJFFasL/fvBj8ezRxoKS7jUDISF+y/vgIDaHSpSMRCWZf1vOBdQdyiiVu1l0Bm6xy/Cc09TeSqnHizqqc5+8CzQl+6KVXmOFGvoDzrerehC6duva2QO9okdR6m7O7PcD1ErgOlyxkImnkjxOF/p1WcyQ+WZa6DqyDecvzRTOg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837553; c=relaxed/simple; bh=jwYXw5BAfk6Wwc1RRtCbUDORFsnTrrPUfiaaNQ4rLTM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XMpX/3U1iGXlPH4PxBTdQ7lMOcFnqwCfGMvxUdduKn4q5/S8hhcBTo6JRK8Gf9gasaNORMfuPsRgSns4jJE3dKwjhflMS0pmmoV1fY3bEgEfH9mVx9kyiTtQsiYH07n7IwQ0ZCMfOqmP7/LF3yKbRyTku6SHo7/swwEFU2S2wgQ= 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=Xt83FyAP; arc=none smtp.client-ip=209.85.208.181 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="Xt83FyAP" Received: by mail-lj1-f181.google.com with SMTP id 38308e7fff4ca-39396f873adso118093341fa.3 for ; Fri, 15 May 2026 02:32:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778837550; x=1779442350; 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=iimSDWzY+fnbg7kLgqgMGtE7NPwiRHmQcfgUGJwUrmQ=; b=Xt83FyAPDf5TrPYJ/HKVG67Pb824ZNothXjeajPzelTIbPIU83bpOOY89Cd5Te7gWl 6rx5qso0DN7nnh6NJTn1lStVBqbpT+jZ3AivoqFziG0iEgAIYou7AsAuGvgZ0HNn/mtj BT3cRPlOJ6mFkpU4StEuq43d/vmJQ83NKkXpW8EsxbBZ6hMSOMBNUu72Ia9pHGHpIz+M uDCfm2SVdWyfzX/Vy+DIB5UCqKAbd6EHL02GR8UErp6kHhfqt4KDlCi3m8Nu3HuU9b/r 5prfTK7BUNFHWcCAs0cCA1dJqj0MGiFMIWjiQ60e0rHY+89r1DuAboWjrKh3F9a7JWWW kkVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778837550; x=1779442350; 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=iimSDWzY+fnbg7kLgqgMGtE7NPwiRHmQcfgUGJwUrmQ=; b=RWd2xpkYSEGJ3t3lDephYyjOubRmOFw/naT+XxcE2Klal7kOiXlbwsyHDyduK3VZYT cK2JAXo2EdthBPriDGk0X57Oxf7GPqYN2mJ9BMDby2A2lPWAIWPrlGe9FAiNSfE/aUjG a+Sl/nZtSEo4WN7JIl2n2Ifl1Q2ytbGed6JWDPeXzfA6iPVpJqm+dCKjHfD3nK7pP2xW cagDeLYE4wgDAM2Ia3X61yuJfeL2Ibw+bMppPmb8pWh6F/e+rJsm/JqtOxopDPehvmTb 3VjkgoSZejxtkbHa7Y1mFwrygXbLGohKElcR+6/TOc5r3kDqESB73TtafJ+GSmdVATd6 OVgA== X-Forwarded-Encrypted: i=1; AFNElJ+GSZCh8sqGSKEuGBQDXLEpQHy/1Qvsd+UD9yaulgyS8ZumnOAHmGkufnmdwqtJRI/Cx4A+LO/Cquu0j5w=@vger.kernel.org X-Gm-Message-State: AOJu0Yws/y1P/sX5cUBc6LE0FtjkoRodW9i0cuoZ4N/juI8PCaj1qBUC ajTZMXwdDZylOPVNIaBPiIPDuOXj5S20K1xFeSDAj9NGosHjQTiBBXiavI1SEKbSBOg= X-Gm-Gg: Acq92OFSO6YLqXpjDQhTjQXgwBheF/YTEi0FUHMIRT6d6n4DDYogLy0ySONPFNIUyql r21jEM7rD9SJDduZ/OMfk3bdyVJ3xG2hsVzlhyyU1pF+T0pzwDfjQIlbC7LRckXAskVThiAzXcV ZneByjumYlpVOLKmx/1PSpw8N1JJSFOJgPSK5mveAiWHWViX4w8SiqlU0LzEAu68SaFboPdwT0I xl4nctgMSj4fkZJ9FqREQBhiSZ3Oxna4pqQ4tGqRQ4+GJToNKb0vDexxstE1VH7WtNyjkmuqLGM dQLQRPzXzIk7eR8JqjZ8vetJBPbGjLuvjDrT+SpprwasB58SaKDtVlsK59/viF4Mp9CjrYqjOPC 5hMce8HI6bx1k6jnnkLUsf+a55syz2AD/t6PB98SzkGw7JtyihOSKPF2tlJOixFXL9Ou0tH+JKk bGvbxQoR7V0wG6lWrwN9b87bJiI/7QrddeuoH9KeJaJ+bef/rduwx4xq7ycyxVxnRxsZ7+WbGc8 6808g4q X-Received: by 2002:a05:6512:3095:b0:5a8:d7d4:4948 with SMTP id 2adb3069b0e04-5aa0e7641e9mr929129e87.33.1778837550053; Fri, 15 May 2026 02:32:30 -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 2adb3069b0e04-5a90f10c5e5sm1181661e87.3.2026.05.15.02.32.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:32:29 -0700 (PDT) From: Tudor Ambarus Date: Fri, 15 May 2026 09:32:25 +0000 Subject: [PATCH v2 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: <20260515-acpm-tmu-helpers-v2-1-8ca011d5a965@linaro.org> References: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@linaro.org> In-Reply-To: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@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=1778837548; l=7169; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=jwYXw5BAfk6Wwc1RRtCbUDORFsnTrrPUfiaaNQ4rLTM=; b=SlE20QOBytwbp3of5WbmmWd+4J6dOEPga4fPKIXHKFGYRAzADXNBgjaKAL0nDVmeSDb1n4VD4 62tQKwKN+zxBkKrwsfkML4jNh2/rMvlITenFe86NuddLacLH/IgKw+w 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.563.g4f69b47b94-goog From nobody Fri Jun 12 11:39:05 2026 Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.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 D7C9443C05A for ; Fri, 15 May 2026 09:32:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837554; cv=none; b=ercptCedJSZX4VWAa7NZrs22Bd3IlJOoWTZQW4G1g9gfBOJILLvaBvQSItJRjue2O6YbwETsm3Cl41mxryWpenu8UiIm+6I7/NqpQpn0UeCtuw/ocmOES+M6gnk6EtUoCVp6QxALa8dzTTnXJ/YIpYKP4JhJzdr/7012no0CRmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837554; c=relaxed/simple; bh=6PSsCPf8MT5m6CKTyNMHZfTI8nn23Liu9P17dyBV634=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QyBQ9CBjuxBPaE95PYUijI8GKokmKL3SGJEl2sPjiYKrkL9CRgocXqmXw8k7abYd4+W5t+W+q2ATl977CN6HTFDV8zBDTg52TFAod/gydcKBf2HzmeKGyqbSUeXgIjCJDcBPRnt9/enoZccdHr8SOHjo/L8VJQhavDsyPvSBd0w= 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=mNVdQSvK; arc=none smtp.client-ip=209.85.167.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="mNVdQSvK" Received: by mail-lf1-f52.google.com with SMTP id 2adb3069b0e04-5a884ebba7dso8958724e87.0 for ; Fri, 15 May 2026 02:32:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778837551; x=1779442351; 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=icODYKZ/3Y13ZM7Cds9bqBGuxOVMpNeuL9sEGrF2bZE=; b=mNVdQSvKGtMlt5BLtbhw8qmtb/0zzuyVCkr2uzvVqLmAtMe7GGU6J+wh5442tvCuGS s3lWiYd8PrhBtuJOGzlLovpn58LWbL2MroYE602sB8yRKDzhim3T7xD7FAcGNlHe5SEu FZ7xbZY/ChyRhCAv2Wk1NdQ2DG803wIWdqhsrmUMdUwvSKmIHzvIhjEaZJORox+V5KbI udbK3O8ewETkuoyWW38CEx0r1aXeZjHClNeOHKSTYvO/H0yCUxtqQI/Qa5mcby64G1rm 1Os0oltfidmaYuD3J7zFcPOxu6krhgjidYS6keu/KMk2ep1q2bECIpV5Di2SFfNzgoKU V1UA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778837551; x=1779442351; 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=icODYKZ/3Y13ZM7Cds9bqBGuxOVMpNeuL9sEGrF2bZE=; b=CPtjCMYAJKBBzZ5gM4AEhoUvuWttFcjI/RdcjMTqvYWElhdCyAmIniea48weVWsUDs gthcflbP+tNtpbLAWbGupxlFzH52sQ/c1xI5aoU33IyW0MXICZmsmAvkmdmdCouT/CJf +aIYKC+PvspgBFnT8VZf4H4DidnEd772xsLXSWMGLbzA2d3ulBnuoUVbW0JqOhdEVNnM aUID9sMC3fk8dC7u8S786INc7h+TA6pQluPvAc48xkIBAr7vXU7EO62i8DGIXYmqQVvI 9+um9UL3MXXsQ+hKuV1iMMODII1diHx1PDRPGCIXho1tnQnRIBx8gRIIbeKsS7ZGWYG6 xrqg== X-Forwarded-Encrypted: i=1; AFNElJ+Y4RnsuLau7v77t9CME6PlJn5U8MkMAE+R/9/w1pLWIA6QXP7sDkhQGckkqMJ7mZHXwuEwoG81WaRxTwU=@vger.kernel.org X-Gm-Message-State: AOJu0YyZkoLyyunyY6nxMksF+k9xpPNfzIq4nXp9ZFXSfnYx4PrkpcCL w1qQXxegJpX7VJtYbmYdLKCWTMvNVviHMqggveYfbukY0KDJYmsJvsEb5ZKUxQSVEc4= X-Gm-Gg: Acq92OEzqTTE473F+o+ynl1XorR7SFbGana1Wst5CSC3Hhz4YkQWBG8hM8KQQr9Hhik Qub3Nt/xNVFnOun2Zoh4bgBCrcRN8VG8Rglbzccb7dOppgYMHYoygkyTE/Gt7aakICP/nYwRnwC MgRrMZMBtYMJNnlWYW5sCZu98ppRnZCSvks3a0E1wZP6ccbefNg92jQE1nyP7q0Mf1FxcLWKpjI NHfrtjwpgPb8akxNp5f3wcRvdxSWnJyPSMB0a8LRcwkbRRCdnNclO7joXbUfgULTbxIpqo53WcU 03SGyfxCvqGwtjz/RBz7Aj5JOWULq4vxhX6gYa+bmOUGnBB2PjmKfXzVoTsTyl54z7xo3JrSP/n p+rLas9QOUxLHlIbe4uN1HIZdwEjeVhCAcY/hFzdzSl+WZ+XlwUjapbx0HUABbaspoOf4YgPETP AIirdO28esdPHdO8lH3vrQJ5r1ycGJqhNGMwB37ZjtV2a7dTmEMlHtSzE7Uk0wYz4ndKHhbT8uc fBAQFm9v0F6w8ShD+k= X-Received: by 2002:a05:6512:3b9b:b0:5a8:950f:e92e with SMTP id 2adb3069b0e04-5aa0e73059dmr1300539e87.23.1778837551168; Fri, 15 May 2026 02:32:31 -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 2adb3069b0e04-5a90f10c5e5sm1181661e87.3.2026.05.15.02.32.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:32:30 -0700 (PDT) From: Tudor Ambarus Date: Fri, 15 May 2026 09:32:26 +0000 Subject: [PATCH v2 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: <20260515-acpm-tmu-helpers-v2-2-8ca011d5a965@linaro.org> References: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@linaro.org> In-Reply-To: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@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=1778837548; l=2534; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=6PSsCPf8MT5m6CKTyNMHZfTI8nn23Liu9P17dyBV634=; b=iCYwdVYT6ikyAuAHFKMY96Zb8VzivsZ/FGir1N0D+I9Bvv3JY2d7O/aVAlgEV3biuCuMwQejE Qa50TNwhtNPAFrevpDUGgvg10E2bG3cpWCB7l19gLo9OjBj9FgBlE9r 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.563.g4f69b47b94-goog From nobody Fri Jun 12 11:39:05 2026 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 2AB7643D4EC for ; Fri, 15 May 2026 09:32:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837555; cv=none; b=o7dGJx7vl1ajMPtmfHqyVSCNkIa28pOZeL2GdamfpYytA35FUln0jfex6RuQSAkj3+AcWDzKNJCXWP3eIZSFzfsrbDBfWCbws/eAHsd/g0A8kaLlRBQBFvQnGvaJmW71xHiIVpKSrXh8J1BPEkBXtb7DtRRdJw3TJuaFCOegjsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837555; c=relaxed/simple; bh=DGMgRKBcQct6SvRrV5090Y3iu6T7EpjfNpyPo6Ptfr8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Tt4ZYkOYxmMlXqdDVSiOJ0qG77PsGxSS1IPdOVFSRXLhckyRUnaHuV6nCRyatmRbY6s9DDdATkvqseuyv5vbigUVYL1ztH+JveJ87JVO6KAyf/eY4gR8JQurHxln8owYaw3Arxuoxz5SDcLyy/+g/oydR7kovjj/ulBX2oHOND8= 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=BHQiu3l0; arc=none smtp.client-ip=209.85.167.50 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="BHQiu3l0" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-5a8891febd2so10856512e87.1 for ; Fri, 15 May 2026 02:32:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778837552; x=1779442352; 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=K5faQiqLzhy5VluCrLMwiwnkWFNjtvkFCiJgOz2hI0s=; b=BHQiu3l006nR+k/zJWZ+44R9f1HlsG7OEF860AUn8HLyC+vv7LpAYem4Q6GxiFpI0o 1Beu63w3Dn3AX5gw+o+y+E2R5VY6fNNjZwOjqhRU9lmqoFixzsPlMlpKW21V/6IarZVY SAPDQh49wNC5Oha5J3wxgyqWFWMYOu7yEgRczuElZlUMKsTb54VV6ukmIB8jGOTJxPnT VGvb+Ft5/lXmvkpYbONOjOJiD8gU4VyqmYnwyiqQPeNFN2EANxD6QigV9YAEKovkOLDW wujDT4BRkJx/lqpju62Y+cV0DlTg1jPtY8SDeW+1qjUEVwtGhRamuT+35XIQGAfKCfW6 N41g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778837552; x=1779442352; 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=K5faQiqLzhy5VluCrLMwiwnkWFNjtvkFCiJgOz2hI0s=; b=k5etaL7t2IsPJmv7QKbh3dM5ahL6T7gjEGb73wfaBgo9fX2haJLu/3lI9uB29jGbjR YsjtAX6otWPegbPdV823JZXQhodBJYl8c4mJS/7DIFzKpP2OJjk7G37EhHphlVUotN/i 4/PIoGRmwOPU2PKJKuQS/2XNh1xsEHvoN4c5q0rkEGg1tifg/MZlnWIIPb/8NhUvzz/Q hWT6eFEhJRfZFDRI9LUMwwQwFKTqn924MFEJz9G9i2M4oWV8LjsyocViRrfaJbSOUmNu zzb2idrHIUKW7K5+7NwK8JWMslPe7Tt/0OlUfVfTlzo0pBDkJlZ3OB7lJn2/TG7vdlJD F/+Q== X-Forwarded-Encrypted: i=1; AFNElJ8iBIkIuF7Wcp/DR2vSBjATM+AjF9gx0afLj9zg9Ttj3rOKZIxdwNOlG0/jI9aNaBNTS4WZO+Gfcp2oBwI=@vger.kernel.org X-Gm-Message-State: AOJu0YxPuooXu5VUOooXijKM25ZJObLcCSoztDEoJ6+Fyv6ck50fMVez gGDCN2/Urj6YGro5myni996PWzEwixkTGJSWLMlRLSM6t4DOXdmkhD401dru6VI2FwuaafomTo4 GAKKUjNs= X-Gm-Gg: Acq92OEx18g/QYuqq64sA9VkdcZLnzxjBqua+DgB1BOhprUStSEPnBEigXeiKfZeL8f KZqdxlkgpvI/XOBVOd0DRfUgUDziQjfO1W4dpTUgTcUUWcnb7BpfuREOEebTS0llWCucPg52C3Z 81ExcDUd+cc5+G/vyWjyP3v1yCG5s2nSYzUiDYqzKwejrooGKkt6NC1kM1BTLpA5Z2wM6lV4bWN aq7SSQvXHAZfjvhPiLa8vOm05+TFmmhhlnRuGtnsT81L0al40aJ856EcrAL9+pK0KaWCLzzg96M Y9zgE+koBgOp+pDNUBWqQj9I0YQBHNOvwNeF30KRbe+bM8owJrDOVwOat5k6+0B1I3w21Ai1U5E BAn/4OK+LUhQdTamCaXHTUZLd0cm0I9KjserTkGGAJ8S/59eWeSsHSnjrechjhO2mOZYzXkc6wT IECdatBBaAgO5vQA8QSMN7VqbnJYNpfVEozBr4JxOsaNBrN1aTM2uMXVP0diDtIf+plPe9F7SOi LLkRWTm X-Received: by 2002:a05:6512:10c9:b0:5a8:e340:487 with SMTP id 2adb3069b0e04-5aa0e734039mr932408e87.9.1778837552152; Fri, 15 May 2026 02:32:32 -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 2adb3069b0e04-5a90f10c5e5sm1181661e87.3.2026.05.15.02.32.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:32:31 -0700 (PDT) From: Tudor Ambarus Date: Fri, 15 May 2026 09:32:27 +0000 Subject: [PATCH v2 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: <20260515-acpm-tmu-helpers-v2-3-8ca011d5a965@linaro.org> References: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@linaro.org> In-Reply-To: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@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=1778837548; l=4528; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=DGMgRKBcQct6SvRrV5090Y3iu6T7EpjfNpyPo6Ptfr8=; b=oUgk+W+9ie/v9Qg1HmqzI4CBnVs8xE1qprJt/Y9TI/1OGNvHDAKpRZ4m5a9zS3aTBM6bilJdC hLavEvjfcpMAK00bpledGnzKPgamHkXmPPWSmvG2soRHjTf8hsTpvWH 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 Acked-by: Lee Jones --- 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.563.g4f69b47b94-goog From nobody Fri Jun 12 11:39:05 2026 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 9A66F43C059 for ; Fri, 15 May 2026 09:32:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837558; cv=none; b=Eu1lUbNl8ubWZysFTHsJfhRHsqerhMpCclMl5NdQwTEHaoFkMosHkIKfuC13/nRhuVph6Wc/PoJcbPysBum2jWus532dhfHAqnd/q5c+rkqFlLohqatx3+r2KR7GbQTQ4bBmYdcnfTTNCR8tbMW1m1+3KO5xLXF4wVRWf3+TVPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837558; c=relaxed/simple; bh=CoP0NftcObikN9l/cqR8xC1/WPnUUUtOTxMCtFFGUC0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YLhYi/fAhtnhhFb/EaXHEf1uOoBYrDj2VCLugFMl6ryQYAJv9w3RpeOckV/24sf8ENNwDes/Jsdfqw53yzgGSQYlQbi3+d+mCfyrbEfrCjj30vM/ndpiSZnasLuxeFjW7xXh3nK7Kb9Ox//o9XHTXol+PHXDGL8KqsGzhGf68LE= 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=Xq2eY1WT; arc=none smtp.client-ip=209.85.167.50 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="Xq2eY1WT" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-5a8c94cefcdso4177678e87.0 for ; Fri, 15 May 2026 02:32:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778837555; x=1779442355; 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=eXEOz2QeKOCh0TWnA0XGyH+pUT8xTMvIoFYTLYn5JsA=; b=Xq2eY1WTfWpV7zLp7rY420lMH0wlDX7Di4RBVrKGp125AcpFPqvsCuBxH8gTl3+ld4 frdhCasLKO8aWIxfTDKWyie2Kab+fDcUM5kvRudW8IryO57qWm9ZdERrQtfio56gN7H8 KnMPBjT3OKQjnHvQciTsYiFLuIUnFGJXNrXc2QUBVMIOWrvHaOXPxCTorHRMkH+xNwb9 XwaLLuMADfQX01pwXn5QXvKThhAI4Q9T+J3tcXU8VaA2g1ehpGmEbtlcyV01NEAe3a0p jdt6cd4AlQ03Bipeuow49it+SeudrhU8RpEe2dGyhRZzhFVRRRwap3LZa1xly/VRmts6 rU2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778837555; x=1779442355; 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=eXEOz2QeKOCh0TWnA0XGyH+pUT8xTMvIoFYTLYn5JsA=; b=kaHnCnto6BnguIbDV3vzVWfct/TvvmvKdsl28PkveypkLJB09ccX7JxHvkGErSBIxK Dz44QcNptRdYzWAWJ86YOaPdRbLD41Q7CaHiNZu+WGZYcYbiAI8mz5qj+ZuJCQRP+Fmp JYq2ZRELFAedp73D3g0wS+VJkozWqfD0ghpKTW0vwnik8ngTOSPdR9wIOrmC2WMp1HL7 uvrcM49Zc+e+5/3gP/7MX4FW0u/cTwE75RWhF9/mTp8ZTzPkC7cSWySV3J36g2xn0hKm +ixyCWUb0abjB43Uzh1hkAQmcFgx8XMuraEVN71m/Ty9TNbw4TWTyzTLm+kn3ZSGdrgW apUg== X-Forwarded-Encrypted: i=1; AFNElJ8naPNe5qSy4YYAnEtanJo3mhVAZW4ooyBFgQ2+JNGwpYkV+yEhWUY8AFn01fYNJ87WKNnCsquo+YGDhmc=@vger.kernel.org X-Gm-Message-State: AOJu0YwKg7bmHfrD/+xO3POX4/rzgkPu1s4m6SONyNNdqOYPP80kxNFo QUUXB7A8yepxEFLpP9pqrLnzqi0shAhcgYF1Ie+VCFKbJYetum6v7EiNQeGlUWT0sBU= X-Gm-Gg: Acq92OH9UxAVRfQLBsZKBdfa0B1gnnUN+5Xxj9tz6TIhJVqeaYtMZT3BWRq8nZayaUv J9ECCROw3/gIelkga3Eeawg+X4+p3RbD/XXaciVXXjJztOSvB1/LkTHg+JRJvve0+od8EIkTujn 3sOkH9lRr6sSu6iaeYCxtjAZi/qilckHXStGwTsrVZTnVhMhFPTL3EJM2C8JYlY6zbl9NgDac/7 /vzJf7HUyT3kcPq6lR4ib/r2WPRQHKhh8jGhOe+2cV1GC9cw5pH5y8+lnknYhQ/5vqugN0eY7eo 3Q/mhcsUrPl+MSggQVO6B88IFARXVxkwEjdKwKR0bexYtwHOre6UEGRvtu84/MYGOB4qju8p9IE 8ZYmFYhmK3k/MQY5dzyjkvFRstcGy0F82ff0tC1NNtTPzKc0KmKBmexeOZAqaEOMtCUwfT0PWVa Fkck8wpI7sYGhiN9fddVHfBvl26lgH0TyrUjtxU8Z7VmeY/ffeqiOth0DRoav+lX/35v00eN36G W74dI7T X-Received: by 2002:a05:6512:3b86:b0:5a3:ff48:f7db with SMTP id 2adb3069b0e04-5aa0e770e43mr771565e87.34.1778837553313; Fri, 15 May 2026 02:32:33 -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 2adb3069b0e04-5a90f10c5e5sm1181661e87.3.2026.05.15.02.32.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:32:32 -0700 (PDT) From: Tudor Ambarus Date: Fri, 15 May 2026 09:32:28 +0000 Subject: [PATCH v2 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: <20260515-acpm-tmu-helpers-v2-4-8ca011d5a965@linaro.org> References: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@linaro.org> In-Reply-To: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@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=1778837548; l=6120; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=CoP0NftcObikN9l/cqR8xC1/WPnUUUtOTxMCtFFGUC0=; b=JykrzFSkaugjyVv2ZC1Afc38Icl+cZPzHA0PelYSx0/Aod56VAyjzXXnp71T8x6UfdDhWg6+d +DxXNeVgIACBpEFooXdOpNKHF8ZNEpeMerhyWRsjrPKO+/35Jp4URZQ 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.563.g4f69b47b94-goog From nobody Fri Jun 12 11:39:05 2026 Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.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 1DA5143E9F8 for ; Fri, 15 May 2026 09:32:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837559; cv=none; b=TBgYDS8NuO8ELzAKwzfqCTwg7Imsw/gG18lRrxukzXhRrJ75QaDr9yVOSW9VDIpk1Ih2D/kFBEPqTfeNJ0LZxqYZgI2CJBooS2iqdSXKVlXWYv/fOZEvC4QzA7NIumGHEPuPvM0XLogmJeEzbEx5GJpc/7zIklZKrGFoKa1tp8M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837559; c=relaxed/simple; bh=Q0g8PJmvzDrb33+S0JvUG5YPdUMgcoeMcNew8qogA3s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o8fM4kFCptEZveFPAFbqu9jJVqxbr2Jkj/ZIxs5kdAbolvikrMyE1jf8vPLuBHgxR2kYdRBMhOkMrraiOkH0iA+2fuxD1IC9vKhcdhfgy9qlGkOfcFeDO3qQ9rMQY5EnbhFKSur/BN+PbEoYEP41NpgJJuOeLCc8cjrCifrpPKs= 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=N/Vdv1pI; arc=none smtp.client-ip=209.85.167.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="N/Vdv1pI" Received: by mail-lf1-f44.google.com with SMTP id 2adb3069b0e04-5a4113ab355so8617165e87.1 for ; Fri, 15 May 2026 02:32:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778837555; x=1779442355; 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=/iu0JFAaozh2EwNRNdO40kwIPCNHJ41fgSgDZT9kc6c=; b=N/Vdv1pI6S3seOO1vxNgeRCwIm9R5DJ0oygfH+jO1KFcHpkY+eKOrhfjlNvXqvjlNP XTf65ZmnN7dRXpCtB2oia1Ol3v+vGmvPykaKAR7YD48Nt5wTcp4QJt9YUL59x0PMg7r5 2wQWe7YWVet6723SZloPPPuZANBJKInXTgJJuPwyhdFX85+8bGoglJGO1VHlr4S0Qp5Q PbUfP0NF7ZjnE3oWYA7TOOK41I1WTZmYQLcaxi92Yg31by/X8QA7TtZ8EMKk8JcZCQP3 cbUu/BbrTIcF3h5C3ZE/1cKUl6GOXsNfQ4bsldpxNkacYhcpAhYrW5/r+LSmSzJezTHk rmFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778837555; x=1779442355; 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=/iu0JFAaozh2EwNRNdO40kwIPCNHJ41fgSgDZT9kc6c=; b=GFmw+8nfhhG/gG+6HrJBnlXzpCYHokPEYlj6IwErvXCVWbJqSGf1ia2gsxuEq/u0V3 sRmot3+URX4XTvNZsm7hrVapG0+pGYysuQ7JKT/8Pg3AZeaanBtWa584olgYJwk2cCyP PLJqy8cYxrLcgH5VkElibpF2RHhS1TrqqRuuyH3a+e9u4FHnESeaPNIFf2I4MVtVihN0 TREgvPqQguE46fFnHc+eYu3jB2UQSbk7Pd1k4jFumqFgiO11Jaac5pIHn7W3FDFAX8j1 h4myVXFoXGSpCLka0g6MIJcrRIlm7tOk3KDpCfOqXRLo4AfufWosvt8E8JP5D2I6aClj Z1UQ== X-Forwarded-Encrypted: i=1; AFNElJ8pRa3Alp+6Ra72aKLvnsY/JqtmREFeG5Uti0LufZbqa1BEkGt5fIdZ4R8ijpao6Gi97ORwMkT+HCJgTy4=@vger.kernel.org X-Gm-Message-State: AOJu0YwDZbJVNSGjg8FxC+VEne8z6qigBNz8ZcblvBeW466ddtW32KJJ wXnUDG850D7TNCxpqgLDBQIWNxiukrui3lUe0NDOKGLVakNLL1hK7zPxEJfw7eTk7JE= X-Gm-Gg: Acq92OGaFCGHfzaVRl1pHIPG4tyg5EAPggsr5PrE5Sqxo+WjgmDvTiyHnmPxyWJlbTl AGK4S58q2kLfuqOC3YptNsvWomy5A2N8ljhZUIf0vF1sbowHFcvZAqgyML2IqSTDhvIdjg46UDn J/usF/bfoPvpfSXTi6HcNTlPZMb6AfvwH5dlRXLGmxvcCvnFOb0BqD/m1jhoCrenHQUFYET6xBg qHpz8ZLvuG4HrFhWOE+kZTKqzE/11UZI3KZlMUQy9R2/CQbU9CGGuaZtQnQ9du7mxhzVkd6fUvO OooAydWDOkSlOYUqbq5IiAKWecbEQSknQiNg4BwJbhlwzrUG38zyGLvEX6W2KcYpFSBMY48hOqS +vU41nsqqtLZ4Fqwr07ugq/yk5BvR6PjEKIzc4iH61X9gP8dg/IKREHCNJlCtJniE71f1U+J8/A d/5dk2lNui1V+qCBIWZdyT9nQ4fRLSQQk5lNzkWseMzvh0cHuTUtLrG/kBSMDDHnK9UfPE9nPMJ AHqcR5x X-Received: by 2002:a05:6512:a92:b0:5a4:d21:de07 with SMTP id 2adb3069b0e04-5aa0e600e2cmr996522e87.1.1778837554430; Fri, 15 May 2026 02:32:34 -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 2adb3069b0e04-5a90f10c5e5sm1181661e87.3.2026.05.15.02.32.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:32:34 -0700 (PDT) From: Tudor Ambarus Date: Fri, 15 May 2026 09:32:29 +0000 Subject: [PATCH v2 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: <20260515-acpm-tmu-helpers-v2-5-8ca011d5a965@linaro.org> References: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@linaro.org> In-Reply-To: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@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=1778837548; l=10670; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=Q0g8PJmvzDrb33+S0JvUG5YPdUMgcoeMcNew8qogA3s=; b=081VThk7kSwAg7nN9JkU4Qxg4yVqW1EBrFO49XuM7hZ1pQVCFvdzY+00VaHy6GV5nohiUP9Tf 8RbEcKY6/nDDlwHa4K2BdAxRST6sZHFCrANI7Mefp1FvMefW3fZlW46 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.563.g4f69b47b94-goog From nobody Fri Jun 12 11:39:05 2026 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 5B24943E4B5 for ; Fri, 15 May 2026 09:32:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837559; cv=none; b=KA7UgoSsCoDnsTSs8eIvf9sHiDY+VzE8oyeNmwTHmZ+vFzBZbbltEnB5a+7qR40BNlIVpzbcW1+xHN1THeqLc6RyaUvRGDGbi0yEI7huMaW+KTmAmF7RxgHV1+RDiFsCXtAj7j5qWcJtcaBLCLJv22RJjIdHLrC662/TjEN5sBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778837559; c=relaxed/simple; bh=V/zAmCJSjPS4lESeLMnCYH+wKme4wcn13reVAfH2wSY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qAhn8/Ky2eOW1rOiUT9iyOiJ7sHwAU5FI3DQodHHsEAaiGNUqgNLa9d/Qh2uH9M4DBl3v9BRS+NrCUA0e4ulwIdu0eg9jV1EEzJGOX+StBz6Agn9Gm0lfRugznXIXrC9vWK5QVV5L69vmLHqW9veBHONemUAByMHgYYCgOt0MlI= 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=HWs9zKPd; arc=none smtp.client-ip=209.85.167.46 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="HWs9zKPd" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-5a8fbe18b1dso3318094e87.2 for ; Fri, 15 May 2026 02:32:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1778837556; x=1779442356; 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=bAYzurZY50V3hmmtsDULHaTPPUEpyOSaAQclTNRWi04=; b=HWs9zKPd8M0tg/D8xHPzwjUF++R4Ie2fvhiqKnjEoo8zRvOQGqYr5e7sL+gnQ7XjUf VPn3Q9QKqVM2WK1oE1qPBwsJqkWTpnqFJSdAnIyNtogtlv8pY59Sws8k/JkVatF8LfwK LoOf6GBTDSTt30Z0Q62fRnEz1NhJCDGMaJoFHrSkIo9fOOPzC/6RZsoGttxSUM+E81xY cNPsAErEBPER9xzPdBgbiadlRo9vonWoLOXcCaydtcOrdZWB3wkJhOFigNUmZQYFzTvt Py08jVeEBKlKPhRNVYq+TwIqlV+aU0WxsFOjK0klpVOZ3U3qcUg+UL93O50OlRpOeZ43 hN9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778837556; x=1779442356; 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=bAYzurZY50V3hmmtsDULHaTPPUEpyOSaAQclTNRWi04=; b=ONH0p4CbmxlaMwNHPUmZA/GBprZGkbP/CKBD/sPNYRoAxgdqd38Nk4KLyOqlw0DjsE LG9gvTHZ4jCq2b+IFaLM5yKgmT8bh3QuX6JbuJoFwoS5haULMOHEziDch3XrE/tyOC4l HqxCS0nzKioyTf+Gh6OZ7Zng69/2AbjuysLiftOS2/QmNqouCGHhV4FE2l1dYjyJBGXj lFKGAs5LyPN452mWmrG70d59bC4lZ1vXP+JikPj24jms2G+Savj4wldJwGIMXUCf1Y4f h5py1nOArPyMUTjJfMpSdrNqk7DqyrqVQ8z2MRvS7HGcXH2HYcArOlxbpm4pHWDM4z7J bxzw== X-Forwarded-Encrypted: i=1; AFNElJ8+uu0c0eWrGlfZkQdxXT9VVBqnv07xPu+/mBwzyRwRfwJvw2vnbYaC35XKq7Q14B2piumGJWiQFSOjBaI=@vger.kernel.org X-Gm-Message-State: AOJu0YzNpX4luLBvLho6WS0CK4GrYpkQoyN4lKHDl9vvjq7OUIwSBv59 pf2iVuH470J16yCvlFX6MXn0AKy0fP1E9Xni5tm32u3CtJnkJZn0xDtbVMwMmyHuRMY= X-Gm-Gg: Acq92OEPLCIoHgEKXc7iON5ezBowTJrd7N/Dj/GM/vCv3Y6MrmQroyDPZJzrYJDsR3h Qm+Vj1d6VcKiDboTbIqkespbRZylBnrLNZzn6LZdV7GIe039MylFLKyVxNRbuRkIy7ZhMheT8ZN 54jvx+8yEQxcQl3P9swF8hX0RxVymzTVLL0fpPJT+TE21szx8QUX3TQiZ9wTdAcyxvE2S5ZWelI N7LooNw/4ZUGpoVC7cHk1a73NHkB2CJJ5NzZixymPprY5PmcEYLYDblEoXsdIfpyX9XtuntVKy2 4au9BPBhL8NgSYeYvoDJjb4B1AtSnghNV7HsH7J9A9Z9p7fdKhxRAx13MrMYx75sP1JD9chzl3L sSScHObp5tMe70Xlbv6R3V9HhY2e4tN2cDo7TKG9FX5OTvfNYugt58kL4pE7nSNYf5LirelXb9S cqlGAP6X8fVH9ITxM2Vl70izzE67hnqworAMHUoy3VtxF1ndSLBR1YAeuAHFsD2m6H6V3lNLYBs BoxePB7 X-Received: by 2002:a05:6512:1241:b0:5aa:b6a:7a8c with SMTP id 2adb3069b0e04-5aa0e7755fbmr794712e87.43.1778837555450; Fri, 15 May 2026 02:32:35 -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 2adb3069b0e04-5a90f10c5e5sm1181661e87.3.2026.05.15.02.32.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2026 02:32:35 -0700 (PDT) From: Tudor Ambarus Date: Fri, 15 May 2026 09:32:30 +0000 Subject: [PATCH v2 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: <20260515-acpm-tmu-helpers-v2-6-8ca011d5a965@linaro.org> References: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@linaro.org> In-Reply-To: <20260515-acpm-tmu-helpers-v2-0-8ca011d5a965@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=1778837548; l=3069; i=tudor.ambarus@linaro.org; s=20241212; h=from:subject:message-id; bh=V/zAmCJSjPS4lESeLMnCYH+wKme4wcn13reVAfH2wSY=; b=InTs9KReVdF2eoMfw0/biWdc7G3Bd8Nh8MxuA9Gg5UmfB4Osm6mTlKpQfuXozSCoIiHD7QqQe acV6BXVoUDbCnqsPo4ZPDSLBCkon0f53ViIX/VdTjIn/a3bkutA2HBs 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.563.g4f69b47b94-goog