From nobody Wed Oct 1 20:34:02 2025 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 9A1581B21BF for ; Wed, 1 Oct 2025 14:38:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759329496; cv=none; b=i34/KK8eEMRND7rHGPKj9VHMNP7ZRb/OGerzeFE71/edcWQ2dEoqtjJj0B8/JLZReIXvF5PiwO/1S7YqVkehTjj8Um5FeLKJFhXxMlXKsEj+5tcdbogEnLREqXRz4XVRd+rQ0ub34sHsMZH6bkASpIGYE+hETI7BV8oGtV7k6e8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759329496; c=relaxed/simple; bh=KhR7mlGuLILLgbABDE8JZr+5vkedHPIY9RgeGmUDVFM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GvmJKnx/omZikAho6ttueUZWFwl1iSKtxL3XAKw4V+IKnOVyebgZPBzt7mvaR2Ez3nxm0CgfZR8fZ3XFGvc4os1tNWsQ8F4olm2yD17ThKWpOEYWTVvNZxzZZgEpnpGj9bbQnVRg+3RBCAUU6sYoMp4BC7TWlrcAkYg/8yzAzho= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=l9jgz+gW; arc=none smtp.client-ip=209.85.218.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="l9jgz+gW" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-afcb78ead12so1312310266b.1 for ; Wed, 01 Oct 2025 07:38:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1759329493; x=1759934293; 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=f2nbBjY1ngedAQK32AIlHILlTX4360hWS/5AwjBnjIw=; b=l9jgz+gWWoBE6z62mweflt/vSTKrVhFnsDHsrZ4n78XlE52xt0ejLV2m1u/qsaAAUK 8chL5WSoFn23VHfX6FBDvMZqmfhwRsWdPs2fzW8VdzRxn6zMa86XBlVN2xmMWkQux0op ttgBIYVZnrrrKpxJXvcIlqFU2bFMCXbYWfT/3tD9g0QO0ivuMB3I53u4zS/4kxSOQtGP 0c8dGoGSVu6YPtaO2zVyDdrpLmCleJfn8T9++xs7O2PR6d+IasHReQtOEch8hfS8nhxi 2nJr4bipjScb88UW+VZDs1enlAwMbmoDX/ReemBPYKRg2nPlZChgPyot13eUk7WP6lKX 40lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759329493; x=1759934293; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f2nbBjY1ngedAQK32AIlHILlTX4360hWS/5AwjBnjIw=; b=pVU6MRQW13qXZ9HZAp+6nVt25J3WzC6bZsKlFH7xsLe3+ZQdUP12gMcRCaV1nDqaqZ 5BROpSyZQ+v/rAK6qeY08kO2rcncLWNLhWxGWwOmQFwL6uSFQdHkF5A84yKAHu0EpMbk 8TWImlM93z14cRMhRNru7mtotL8mx7Yx4SOZNZ+kj8OPQgHUPN5CJGdF22vwP2DQhxNQ RPwyte3GgK49l+mVp4GVkV1DM0DJ67ju1EP2a1YgsuBa3WfS45PIagiTSeb2ryqAaEVq h56bnLY1El6fDaEZdxNfAmlXLdDyn99U7zHLz+rGJJKKcClnM0DFvcC4fa2/3YKTTMQt zLoA== X-Forwarded-Encrypted: i=1; AJvYcCWt9Hoksk0fSOTvPzuFgrGREkCYmg200yecwy3t2SVGMfbKh9QZM3X63aPF+OeQAtseVX6XEmJh4uGNXUE=@vger.kernel.org X-Gm-Message-State: AOJu0YwkQFEA5s7JkO/r5EfdpmA9cIMDvT/dVt8X9d1oUYLc4gh3K5Nr +qG6IQqT66MJtGQOZp6+iuacjJQ1mEfeJYuxsUw6Ztx9x41CkXhWi/ZQlE7jfIDNJws= X-Gm-Gg: ASbGnctlOGxDx+mSScM6oQdG2x+ZX5Rn+/DXMu1X+NJw9vHjoYTUYq+X55o3MX1sCkV UOdOfPLreQNm7ZpZLSjd2JSXVVJjG9h833PJudgLA/Bebd9gPug4eQQ0WrYQ2My9OSLNhRJ0K8B hkCE7RwJnBhW91s+icUigYzvB5CMEkMeyvrwxmYcO1ZDRJ8GB1YzysksA8f7G9mmqU1Ve7fNzGa 1+4ho0tzy0/cPMYwXCOE26STztuXK47cO9p488GQ0ezh+5Yn7EWnKHkk3jJnPY19Q+XY60FDX4o SjZEVCPRcIsUIbDCTW6fMgl2GCzLt+AzOZ7GExucFANjeKk+5mt1ntv0uofqFMr5G3MhiaIWtVU ohTWb5Jemsvn8J1N4dsWehrboFISOz5g3OVdhtHRIyMOU X-Google-Smtp-Source: AGHT+IFq8ZndNY94ug4Vncfn6GMH3AJectm8OrQgKj3dtrGm9CswRsXpRhsooX03/jVdbWn1ILmXPQ== X-Received: by 2002:a17:907:9487:b0:b3f:ccac:af47 with SMTP id a640c23a62f3a-b46e8894979mr402428366b.31.1759329492716; Wed, 01 Oct 2025 07:38:12 -0700 (PDT) Received: from localhost ([2001:4090:a245:8496:49da:2c07:5e9a:7fb9]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b3f57c9c2e2sm629872966b.68.2025.10.01.07.38.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Oct 2025 07:38:12 -0700 (PDT) From: "Markus Schneider-Pargmann (TI.com)" Date: Wed, 01 Oct 2025 16:37:38 +0200 Subject: [PATCH v8 1/3] firmware: ti_sci: Remove constant 0 function arguments 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: <20251001-topic-am62-partialio-v6-12-b4-v8-1-76a742605110@baylibre.com> References: <20251001-topic-am62-partialio-v6-12-b4-v8-0-76a742605110@baylibre.com> In-Reply-To: <20251001-topic-am62-partialio-v6-12-b4-v8-0-76a742605110@baylibre.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar Cc: Vishal Mahaveer , Kevin Hilman , Dhruva Gole , Sebin Francis , Kendall Willis , Akashdeep Kaur , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, "Markus Schneider-Pargmann (TI.com)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2209; i=msp@baylibre.com; h=from:subject:message-id; bh=KhR7mlGuLILLgbABDE8JZr+5vkedHPIY9RgeGmUDVFM=; b=owGbwMvMwCXWejAsc4KoVzDjabUkhoy7NvuKNpSGHnlyR/7Vs+1t0ywXXX4aJS6VUflv4RERQ ROHn2uWdpSyMIhxMciKKbJ0Joam/ZffeSx50bLNMHNYmUCGMHBxCsBEVj1jZFhanJD0/IWUTKWO 9Yx6JSUli88rX6ndKk74cPhXq0O00VuG/0GXvZN+bzy6Vee2gZ2VFNtaNtbd8y/s9mF0s/MN52k UYAAA X-Developer-Key: i=msp@baylibre.com; a=openpgp; fpr=BADD88DB889FDC3E8A3D5FE612FA6A01E0A45B41 ti_sci_cmd_prepare_sleep takes three arguments ctx_lo, ctx_hi and debug_flags which are always 0 for the caller. Remove these arguments as they are basically unused. Signed-off-by: Markus Schneider-Pargmann (TI.com) --- drivers/firmware/ti_sci.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index 49fd2ae01055d0f425062147422471f0fd49e4bd..24ab392b4a5d0460153de76fe38= 2371e319d8f2e 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -1661,14 +1661,10 @@ static int ti_sci_cmd_clk_get_freq(const struct ti_= sci_handle *handle, * ti_sci_cmd_prepare_sleep() - Prepare system for system suspend * @handle: pointer to TI SCI handle * @mode: Device identifier - * @ctx_lo: Low part of address for context save - * @ctx_hi: High part of address for context save - * @debug_flags: Debug flags to pass to firmware * * Return: 0 if all went well, else returns appropriate error value. */ -static int ti_sci_cmd_prepare_sleep(const struct ti_sci_handle *handle, u8= mode, - u32 ctx_lo, u32 ctx_hi, u32 debug_flags) +static int ti_sci_cmd_prepare_sleep(const struct ti_sci_handle *handle, u8= mode) { struct ti_sci_info *info; struct ti_sci_msg_req_prepare_sleep *req; @@ -1696,9 +1692,9 @@ static int ti_sci_cmd_prepare_sleep(const struct ti_s= ci_handle *handle, u8 mode, =20 req =3D (struct ti_sci_msg_req_prepare_sleep *)xfer->xfer_buf; req->mode =3D mode; - req->ctx_lo =3D ctx_lo; - req->ctx_hi =3D ctx_hi; - req->debug_flags =3D debug_flags; + req->ctx_lo =3D 0; + req->ctx_hi =3D 0; + req->debug_flags =3D 0; =20 ret =3D ti_sci_do_xfer(info, xfer); if (ret) { @@ -3689,8 +3685,7 @@ static int ti_sci_prepare_system_suspend(struct ti_sc= i_info *info) * internal use and can be 0 */ return ti_sci_cmd_prepare_sleep(&info->handle, - TISCI_MSG_VALUE_SLEEP_MODE_DM_MANAGED, - 0, 0, 0); + TISCI_MSG_VALUE_SLEEP_MODE_DM_MANAGED); } else { /* DM Managed is not supported by the firmware. */ dev_err(info->dev, "Suspend to memory is not supported by the firmware\= n"); --=20 2.51.0 From nobody Wed Oct 1 20:34:02 2025 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.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 B9DAE258CDF for ; Wed, 1 Oct 2025 14:38:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759329497; cv=none; b=gkhzYAlL84i4mid/WFqzJkAVYhmiP/nrsaaBJVYdd2LDZDQNenTD3t0aeafl4oXGfd7muTyA5YRry5AhmYQCiGc6IVlxw+wR4Q0HBoSaE8uDRf4Tyfel04bKI4xfUKTbIoDv2bt63bA28IJXTtNU2LkPVeu/+0iy42nsf3KQxEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759329497; c=relaxed/simple; bh=PFszx48unL3OZdOKxZC+O4/dOvgkdgU64h4yg5QoZts=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nsL6ahrWD9EvXAYL3s/RXBp+7cKN2S85bYor8aw9GBTAdbKqL9CvoVD6dEhGZ2TNxl4Ov240mRpmWadps+5jJkGxJNIRXWO6KIoXiSdaKA0fNpU7A16qeaOrxm/XcoILaVjaq/t+0n+oJ4xAAkv5v4mxcpoxyZ312x0/DO2/py4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=Bqb7tqJM; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="Bqb7tqJM" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-b3727611d76so1092818566b.2 for ; Wed, 01 Oct 2025 07:38:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1759329494; x=1759934294; 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=QmA+fxDwXNd4r2km4orWOLxYXAzQdDkMb/ExdCUz6S4=; b=Bqb7tqJM+CKx25BaY+CQOlG1ghjrPaVYOH8neytec7xr62iK6w9H+8TX8Y9dHz+HcM O3fmtijIrPWUixWIaip+xYJ3Lt5fYFhUA5X6jpIsfMN5Bpe73dvFEiodakBD/NEYo3SP CTFoUmy0DOPaAF+mWbJ+qHn7z6+oOfAhFrAg6o/CXAMWaI2+KK4fhXh/b0Pm0TZILeZv kk4ENOe2wg2DTFloY6HeIcBfuEy4P5ef/mtJSzqSb6BWwwkP1oAtbz81klYc5StkrEp+ RwDoZQKF0vC4aBbANx3dodwyAgvd8LTUoTB8iplsfOlYqxajvGZRIJUTH2/8uKRaovOo 5lCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759329494; x=1759934294; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QmA+fxDwXNd4r2km4orWOLxYXAzQdDkMb/ExdCUz6S4=; b=Zj3ZGPlb3lNCx6j6Dy+dSl6Hp/x2x3R8TcgllhEGkpp7nGV+9vbgSNdEF25YytvURf og6dH0mQvPZhnQlPSZAFFxdYBYP0s3gq4sFLK/BWHh/LZ0RJTBCgBo9eIdjIIgNZuTRt ilIDR5oFfks8+ImuDAjtfvog1fXl9tVchdtWpiQ7DGFXsgQaPU5nvgXwLmwSLBsNwTKC DuE5kKioZLb/4l1GCE6pq3SwPGJhaMwe98o+DPkrA+AgfGBcRgPqjtzVvNJeTvZ6R8Sx gC1Te4ua1VWAf4fdD5JwYj3dICKOc8MOGnFUwemYbbj9X5oWKDeNs2sdztPTuVFRpu8L wQSw== X-Forwarded-Encrypted: i=1; AJvYcCUDkG63MvnRaJxu0W0KyHQDlvMww31yycV+1iqt5PFzTg0XfV98xgfQPcUnLzwt9x3rueWcMM/pPqOktto=@vger.kernel.org X-Gm-Message-State: AOJu0YzV5/MIXmAjUeF3yiChvQcCwuV2ZudIwc2hCkSCampLsz+UiYR7 GOtWv3QaFEy8i8shypA8WfRUEpEPEtfUUVnfDZ1APcHA9tpnNKDsNlf6kUT1Gf4JOjg= X-Gm-Gg: ASbGncsQU1KVk7TxyJyom/dc1zIStmOcY4fr4wKBQs/y+biTNWl0F50uTVzPSh8wr6E iZHhsWmBtrCWOhEeaq6CnwosW8xWwU83wqrk58nLkDnGWXkez6IMwnMQ/e9L9fpUMopgcf9pUll PqaDu2p+j3LyVxZww/Y3PTVkcD99QlFgynEDs385l+OjTicUANVUVgNvSABfeezD8SXeC+CZDrt v5PtQSXxRkFHEjMdA3khoZRClakF2x0ShuTpkSarPYn4ugu6RTyvlQX5MrhHggs/YJmr+Ne9oSo 2Tvcb+Gc/PKwtSU8JJw1BB21JO4yE88Zzm0bm6asA74/k40MghIvqbLiQP3NtKelbEK+Gpix8DJ XOaq2B8vRXh1BvPgOLnaJxpONnzPjAc55LF0md+DcYQio X-Google-Smtp-Source: AGHT+IHfuFiRimcEv1krPbdAWrrcL7XU+qBwY+On7p+dsFTSv0tKvQyoY3KBf0q61CeTK0ABbzD1zg== X-Received: by 2002:a17:907:869f:b0:b24:7806:b59 with SMTP id a640c23a62f3a-b46e7bba94bmr458201266b.55.1759329493968; Wed, 01 Oct 2025 07:38:13 -0700 (PDT) Received: from localhost ([2001:4090:a245:8496:49da:2c07:5e9a:7fb9]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b353e5d0d0bsm1401521066b.5.2025.10.01.07.38.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Oct 2025 07:38:13 -0700 (PDT) From: "Markus Schneider-Pargmann (TI.com)" Date: Wed, 01 Oct 2025 16:37:39 +0200 Subject: [PATCH v8 2/3] firmware: ti_sci: Support transfers without response 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: <20251001-topic-am62-partialio-v6-12-b4-v8-2-76a742605110@baylibre.com> References: <20251001-topic-am62-partialio-v6-12-b4-v8-0-76a742605110@baylibre.com> In-Reply-To: <20251001-topic-am62-partialio-v6-12-b4-v8-0-76a742605110@baylibre.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar Cc: Vishal Mahaveer , Kevin Hilman , Dhruva Gole , Sebin Francis , Kendall Willis , Akashdeep Kaur , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, "Markus Schneider-Pargmann (TI.com)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1698; i=msp@baylibre.com; h=from:subject:message-id; bh=PFszx48unL3OZdOKxZC+O4/dOvgkdgU64h4yg5QoZts=; b=owGbwMvMwCXWejAsc4KoVzDjabUkhoy7Nkf3FAm/tbg/ufOT3QHXX3o13lsu6cyLLuZbKnGq1 0zKcllcRykLgxgXg6yYIktnYmjaf/mdx5IXLdsMM4eVCWQIAxenAExEfRkjwxr+ehu1Lp7V6+4f Nf+w9xDvkw9b1bnvvI/0N9ffzTWjfCIjw5c3S8Q0ZhlOFcg9wJBfUn3wLePtm7sfHSmaHBty98t XZh4A X-Developer-Key: i=msp@baylibre.com; a=openpgp; fpr=BADD88DB889FDC3E8A3D5FE612FA6A01E0A45B41 Check the header flags if an response is expected or not. If it is not expected skip the receive part of ti_sci_do_xfer(). This prepares the driver for one-way messages as prepare_sleep for Partial-IO. Reviewed-by: Kendall Willis Signed-off-by: Markus Schneider-Pargmann (TI.com) --- drivers/firmware/ti_sci.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index 24ab392b4a5d0460153de76fe382371e319d8f2e..4db84a92a517b0aa7bb8d47e809= d9848a16e2cc4 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -398,6 +398,9 @@ static void ti_sci_put_one_xfer(struct ti_sci_xfers_inf= o *minfo, static inline int ti_sci_do_xfer(struct ti_sci_info *info, struct ti_sci_xfer *xfer) { + struct ti_sci_msg_hdr *hdr =3D (struct ti_sci_msg_hdr *)xfer->tx_message.= buf; + bool response_expected =3D !!(hdr->flags & (TI_SCI_FLAG_REQ_ACK_ON_PROCES= SED | + TI_SCI_FLAG_REQ_ACK_ON_RECEIVED)); int ret; int timeout; struct device *dev =3D info->dev; @@ -409,12 +412,12 @@ static inline int ti_sci_do_xfer(struct ti_sci_info *= info, =20 ret =3D 0; =20 - if (system_state <=3D SYSTEM_RUNNING) { + if (response_expected && system_state <=3D SYSTEM_RUNNING) { /* And we wait for the response. */ timeout =3D msecs_to_jiffies(info->desc->max_rx_timeout_ms); if (!wait_for_completion_timeout(&xfer->done, timeout)) ret =3D -ETIMEDOUT; - } else { + } else if (response_expected) { /* * If we are !running, we cannot use wait_for_completion_timeout * during noirq phase, so we must manually poll the completion. --=20 2.51.0 From nobody Wed Oct 1 20:34:02 2025 Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) (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 0B415259CBC for ; Wed, 1 Oct 2025 14:38:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759329499; cv=none; b=DKkChx57ScIgn0P2XFGSw8ZtWOK+ygr7VjZOR/sI01yt++Wo8wGAe4zQtArxDMoZ3V4hpy8IuYYetUYFIgifRmEec685sZ2Tpsx2AcRWzXlkOgLCCHiA1bhWU/i6n2w2K4pmyPnxFuRZ2KCrmMDKBVGzz69B2kqJvdUnK1CllJ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759329499; c=relaxed/simple; bh=26F0Bvu56G754C2jeroEex8fImMoz0+Y7BY0qxomFcU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QeWgxuC/rXtdq6E4kESUWtA6RY9YMn/feyFvPO2Kfnt6Y332EARGM5eCYoTaZECy51ZQ8OaIaLN9HIINAZKqRa4oYAyaX91Ewl8lZ6xS6XWvYKHqJjmi9ScBHDYUzRuXjnPXzgiBbZo5iUVI35r7rn3clFjsf87QJ2xSlBqDigA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=zFMUPWc5; arc=none smtp.client-ip=209.85.208.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="zFMUPWc5" Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-62fca216e4aso2538941a12.0 for ; Wed, 01 Oct 2025 07:38:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1759329495; x=1759934295; 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=SJU/7pOy6k5Otq6sscIBJ2rwBspnn6iIa72yddH68yU=; b=zFMUPWc5kNac3qJiHDiXoxxw9/HrAuRbaiH+J96qjZM37bHDYf6yQFMQUHFAXjKCxL BFV23W/wonSlKZi4gHhybQ9w7canW9x2ImCwupjmAWF6tM/2x2GzUkGkrhPAYTUwfhfh UPpTmi/lNkgs0FeDNKk5oPlMBLH2PDvzaY+ArKpiVHzAINgA3v6oxmNmTTVTMblv6VS/ nchMwrsbYQICXMnUtZeyixp230SivgItVCN6lXrnBbiqrpt4uy7YDxZT2a8pBjU7TBNO pi5em2xLF4uxK6JIF4wEP4D+tVzI8N2BuOgpAvuWGWQ9t/kuBJPn7+gifT8yAijcmDYE lwhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759329495; x=1759934295; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SJU/7pOy6k5Otq6sscIBJ2rwBspnn6iIa72yddH68yU=; b=qNMoprSJe0xwVlCaB1LYUp5tgr3+kNkqOhBC3gMv7d1ZcSPHnOqAi0ega2bOaqio86 /uR+IF4b9/2kGkzIdMXoV/U540NMkDydTfdpuEakKeEphKhnbGJtBYOqPH4lhFnf8r1O nv2b5ADwx+eUie8ZkXEZlac1UNZnKa2DTHpCpGMNXznQXcaSHnSg/sVjE3ejFacWEeBn 2HisaOJEi11o8UGoIkBW99mSlkk9W++BJYUPFthXJsrR+3Ka9of95eA2Fs2s3ud0Rq4G Ad3x+Vi8+hXMMTzQMQVc157ZnRh/b7Cz7i7iBRCjPXllu53dpliLMp8TgGI9L4RfVuTx 6SbA== X-Forwarded-Encrypted: i=1; AJvYcCUL66eQ4h4PRHl9W+Rr6qLeDmQfrnaiCGFwuQ5qPRcCPd3zuqPdb/l2htmtEjLB9IdekO9xEKJPsKuDuw8=@vger.kernel.org X-Gm-Message-State: AOJu0YwWdk2VAcgUISIaPoB9Fgj71oVe5uDGLRNpL8hCQyMtuI44ag2n XlQkZ5ydO7iU2CBHPqqSLbFatT0YGy0iRtc96R+rBmzWlkK93qTeBFfcwB++dbPereg= X-Gm-Gg: ASbGncti9Evi09GC5uqxS/ufo7xujnaBJQzOaNcH8NRmY2z4D5FX3AAwKkKtRSJ0cI9 1z/uC/RxjNEhYhPWjhILk8GcNXe+SWoD5pHP8YMNqejQbjxT5LTi/O16vv1vluvPAvqXg2j0Khp 9Bcu2ddAYXWoGZ8AUrdP13kCUIZoLKIiZyK9WRAARQDsIOg6iuKVP1p+o+ZMnMrS3FEbk7uxft5 bH60lovTsiXVFsfCs6vbGl75pJnHEUsKvvYxTFUKVwgUtick5HhpNQoLUryq+upl7Ljx6XcMybc Rf8F9yVNUarQ/LuvBRkp7HTQJH2s1JZp31EF/m0sKafF+5CBO3AP65+99AGI9KcwBl58cTe+882 fBLgJYDdo3X7gnNLVfAO9MKjxrdD1VjRewH/4nXYm5Wxl X-Google-Smtp-Source: AGHT+IHa+wgm9MD2zteKAX3Y2oGpaJkBinAUJ1mEYJmTWJxIgm9mxSJSEQIgwJA1FEqnxgmGTDrd0A== X-Received: by 2002:a05:6402:649:b0:633:14bb:dcb1 with SMTP id 4fb4d7f45d1cf-6365af5ecedmr6350873a12.11.1759329495320; Wed, 01 Oct 2025 07:38:15 -0700 (PDT) Received: from localhost ([2001:4090:a245:8496:49da:2c07:5e9a:7fb9]) by smtp.gmail.com with UTF8SMTPSA id 4fb4d7f45d1cf-6366a3e38cbsm3065840a12.15.2025.10.01.07.38.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Oct 2025 07:38:14 -0700 (PDT) From: "Markus Schneider-Pargmann (TI.com)" Date: Wed, 01 Oct 2025 16:37:40 +0200 Subject: [PATCH v8 3/3] firmware: ti_sci: Partial-IO 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: <20251001-topic-am62-partialio-v6-12-b4-v8-3-76a742605110@baylibre.com> References: <20251001-topic-am62-partialio-v6-12-b4-v8-0-76a742605110@baylibre.com> In-Reply-To: <20251001-topic-am62-partialio-v6-12-b4-v8-0-76a742605110@baylibre.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar Cc: Vishal Mahaveer , Kevin Hilman , Dhruva Gole , Sebin Francis , Kendall Willis , Akashdeep Kaur , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, "Markus Schneider-Pargmann (TI.com)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7001; i=msp@baylibre.com; h=from:subject:message-id; bh=26F0Bvu56G754C2jeroEex8fImMoz0+Y7BY0qxomFcU=; b=owGbwMvMwCXWejAsc4KoVzDjabUkhoy7Nme6LR9Mm8jepaJtdpuDzyVKLWeh2pQnN1obzItsO rrfftDsKGVhEONikBVTZOlMDE37L7/zWPKiZZth5rAygQxh4OIUgIkcKGRk+MNx876kxQbP6JKW dg2zOX9/8f59tqXEVKR5bnnCfAbZEoZfTLZCGgFqS2xVmiWc7gZvtNmgcjvj3nrxqZt+RDV9903 iAwA= X-Developer-Key: i=msp@baylibre.com; a=openpgp; fpr=BADD88DB889FDC3E8A3D5FE612FA6A01E0A45B41 Add support for Partial-IO poweroff. In Partial-IO pins of a few hardware units can generate system wakeups while DDR memory is not powered resulting in a fresh boot of the system. These hardware units in the SoC are always powered so that some logic can detect pin activity. If the system supports Partial-IO as described in the fw capabilities, a sys_off handler is added. This sys_off handler decides if the poweroff is executed by entering normal poweroff or Partial-IO instead. The decision is made by checking if wakeup is enabled on all devices that may wake up the SoC from Partial-IO. The possible wakeup devices are found by checking which devices reference a "Partial-IO" system state in the list of wakeup-source system states. Only devices that are actually enabled by the user will be considered as an active wakeup source. If none of the wakeup sources is enabled the system will do a normal poweroff. If at least one wakeup source is enabled it will instead send a TI_SCI_MSG_PREPARE_SLEEP message from the sys_off handler. Sending this message will result in an immediate shutdown of the system. No execution is expected after this point. The code will wait for 5s and do an emergency_restart afterwards if Partial-IO wasn't entered at that point. A short documentation about Partial-IO can be found in section 6.2.4.5 of the TRM at https://www.ti.com/lit/pdf/spruiv7 Signed-off-by: Markus Schneider-Pargmann (TI.com) --- drivers/firmware/ti_sci.c | 132 ++++++++++++++++++++++++++++++++++++++++++= +++- drivers/firmware/ti_sci.h | 5 ++ 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index 4db84a92a517b0aa7bb8d47e809d9848a16e2cc4..f2922fccfbe748a436cb9aa0a8c= 8e5f48db02ef9 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -6,6 +6,7 @@ * Nishanth Menon */ =20 +#include "linux/dev_printk.h" #define pr_fmt(fmt) "%s: " fmt, __func__ =20 #include @@ -3663,6 +3664,116 @@ devm_ti_sci_get_resource(const struct ti_sci_handle= *handle, struct device *dev, } EXPORT_SYMBOL_GPL(devm_ti_sci_get_resource); =20 +/* + * Enter Partial-IO, which disables everything including DDR with only a s= mall + * logic being active for wakeup. + */ +static int ti_sci_enter_partial_io(struct ti_sci_info *info) +{ + struct ti_sci_msg_req_prepare_sleep *req; + struct ti_sci_xfer *xfer; + struct device *dev =3D info->dev; + int ret =3D 0; + + xfer =3D ti_sci_get_one_xfer(info, TI_SCI_MSG_PREPARE_SLEEP, + TI_SCI_FLAG_REQ_GENERIC_NORESPONSE, + sizeof(*req), sizeof(struct ti_sci_msg_hdr)); + if (IS_ERR(xfer)) { + ret =3D PTR_ERR(xfer); + dev_err(dev, "Message alloc failed(%d)\n", ret); + return ret; + } + + req =3D (struct ti_sci_msg_req_prepare_sleep *)xfer->xfer_buf; + req->mode =3D TISCI_MSG_VALUE_SLEEP_MODE_PARTIAL_IO; + req->ctx_lo =3D 0; + req->ctx_hi =3D 0; + req->debug_flags =3D 0; + + ret =3D ti_sci_do_xfer(info, xfer); + if (ret) { + dev_err(dev, "Mbox send fail %d\n", ret); + goto fail; + } + +fail: + ti_sci_put_one_xfer(&info->minfo, xfer); + + return ret; +} + +/* + * Iterate all device nodes that have a wakeup-source property and check i= f one + * of the possible phandles points to a Partial-IO system state. If it + * does resolve the device node to an actual device and check if wakeup is + * enabled. + */ +static bool ti_sci_partial_io_wakeup_enabled(struct ti_sci_info *info) +{ + struct device_node *wakeup_node =3D NULL; + + for_each_node_with_property(wakeup_node, "wakeup-source") { + struct of_phandle_iterator it; + int err; + + of_for_each_phandle(&it, err, wakeup_node, "wakeup-source", NULL, 0) { + struct platform_device *pdev; + bool may_wakeup; + + /* + * Continue if idle-state-name is not off-wake. Return + * value is the index of the string which should be 0 if + * off-wake is present. + */ + if (of_property_match_string(it.node, "idle-state-name", "off-wake")) + continue; + + pdev =3D of_find_device_by_node(wakeup_node); + if (!pdev) + continue; + + may_wakeup =3D device_may_wakeup(&pdev->dev); + put_device(&pdev->dev); + + if (may_wakeup) { + dev_dbg(info->dev, "%pOF identified as wakeup source for Partial-IO\n", + wakeup_node); + of_node_put(it.node); + of_node_put(wakeup_node); + return true; + } + } + } + + return false; +} + +static int ti_sci_sys_off_handler(struct sys_off_data *data) +{ + struct ti_sci_info *info =3D data->cb_data; + bool enter_partial_io =3D ti_sci_partial_io_wakeup_enabled(info); + int ret; + + if (!enter_partial_io) + return NOTIFY_DONE; + + dev_info(info->dev, "Entering Partial-IO because a powered wakeup-enabled= device was found.\n"); + + ret =3D ti_sci_enter_partial_io(info); + + if (ret) { + dev_err(info->dev, + "Failed to enter Partial-IO %pe, trying to do an emergency restart\n", + ERR_PTR(ret)); + emergency_restart(); + } + + mdelay(5000); + emergency_restart(); + + return NOTIFY_DONE; +} + static int tisci_reboot_handler(struct sys_off_data *data) { struct ti_sci_info *info =3D data->cb_data; @@ -3941,6 +4052,19 @@ static int ti_sci_probe(struct platform_device *pdev) goto out; } =20 + if (info->fw_caps & MSG_FLAG_CAPS_LPM_PARTIAL_IO) { + ret =3D devm_register_sys_off_handler(dev, + SYS_OFF_MODE_POWER_OFF, + SYS_OFF_PRIO_FIRMWARE, + ti_sci_sys_off_handler, + info); + if (ret) { + dev_err(dev, "Failed to register sys_off_handler %pe\n", + ERR_PTR(ret)); + goto out; + } + } + dev_info(dev, "ABI: %d.%d (firmware rev 0x%04x '%s')\n", info->handle.version.abi_major, info->handle.version.abi_minor, info->handle.version.firmware_revision, @@ -3950,7 +4074,13 @@ static int ti_sci_probe(struct platform_device *pdev) list_add_tail(&info->node, &ti_sci_list); mutex_unlock(&ti_sci_list_mutex); =20 - return of_platform_populate(dev->of_node, NULL, NULL, dev); + ret =3D of_platform_populate(dev->of_node, NULL, NULL, dev); + if (ret) { + dev_err(dev, "platform_populate failed %pe\n", ERR_PTR(ret)); + goto out; + } + return 0; + out: if (!IS_ERR(info->chan_tx)) mbox_free_channel(info->chan_tx); diff --git a/drivers/firmware/ti_sci.h b/drivers/firmware/ti_sci.h index 701c416b2e78f8ef20ce6741a88ffa6fd4853b2d..09eaea54dd5cabce72dd1652c96= 03e3ab446b60c 100644 --- a/drivers/firmware/ti_sci.h +++ b/drivers/firmware/ti_sci.h @@ -595,6 +595,11 @@ struct ti_sci_msg_resp_get_clock_freq { struct ti_sci_msg_req_prepare_sleep { struct ti_sci_msg_hdr hdr; =20 +/* + * When sending prepare_sleep with MODE_PARTIAL_IO no response will be sen= t, + * no further steps are required. + */ +#define TISCI_MSG_VALUE_SLEEP_MODE_PARTIAL_IO 0x03 #define TISCI_MSG_VALUE_SLEEP_MODE_DM_MANAGED 0xfd u8 mode; u32 ctx_lo; --=20 2.51.0