From nobody Mon Feb 9 17:35:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DD9FF200105; Sat, 22 Feb 2025 16:57:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740243448; cv=none; b=nbB1CjtzHTiWMlVhCIdmKjpUelpjQj/8kLKLPSWoWip6XZ9Iqgy0thk9kIl60eNmZC8ydo7sdovZhgyP7lc6VDuakQ+WD24FW7JWqL2X+3wZFRQZDGZwgijXun4GnLEbQpgROwpTNlzP/LwfdHq26IzgXnLVu1W6Ccju2oRJfsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740243448; c=relaxed/simple; bh=An5J6IqDp2zWwUNORXgBiUZy9PXB7xSOmI3qj26bEQs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RerRrTlPlK5HCv7yLXqt8t6J6intAH3jKixLF0t+ZA2i64LnSCbDBwzCkzZFsqZFhSeG+XZ+WHORkilj4Zx34mFsuvWq9P40BSNio7315Y6FZFR0eJBZtc0BpAPJCYNltTlRJFygWWatOhWvVQoQzw94WJBiuHtmxVzQEFOmbP4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=muvyDUnd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="muvyDUnd" Received: by smtp.kernel.org (Postfix) with ESMTPS id 7A01AC4CEE4; Sat, 22 Feb 2025 16:57:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740243447; bh=An5J6IqDp2zWwUNORXgBiUZy9PXB7xSOmI3qj26bEQs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=muvyDUndkBAKBPQHlC5moP1e+2pHsgPnei8eGoUIhaYWbASHiTmkT4AwAzx0Dyghk xzRDaOX2M1bSwndpb/hL+WUJXowO/NGouW5t36AN07YZXaHO0wENbvdoxJGQ6t32zj Bmxe7pNKzKawMcCUXs4RXxo3xYs9AHzsxZ2j+UtRstxiUl7XJQA0hkHoWySzQIq9tI zuZ6jfVYbNSmiYTFQpJDP93pCPdt8EB2PpN6GS2NKkhX3NKxt2ZHLDL9ZiOXu9ZBxJ FIig97FyrugSGg9RVJ+irQOb/WkJhfQW9lSN3xewUtX5y1QOSTavJc67I70827QlZF jtOjsBy77YPgw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6A596C021B8; Sat, 22 Feb 2025 16:57:27 +0000 (UTC) From: Sven Peter via B4 Relay Date: Sat, 22 Feb 2025 16:56:47 +0000 Subject: [PATCH 2/4] soc: apple: rtkit: Implement OSLog buffers properly 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: <20250222-apple-soc-misc-v1-2-1a3af494a48a@svenpeter.dev> References: <20250222-apple-soc-misc-v1-0-1a3af494a48a@svenpeter.dev> In-Reply-To: <20250222-apple-soc-misc-v1-0-1a3af494a48a@svenpeter.dev> To: Alyssa Rosenzweig , Janne Grunau , Sven Peter Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Hector Martin X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5240; i=sven@svenpeter.dev; h=from:subject:message-id; bh=R+qHwP6N7Wo+pbfFcnEksJfkuPHxCovWxSbr4FQ4Ruc=; b=owGbwMvMwCHmIlirolUq95LxtFoSQ/ouxs8NTSUv34Q7hytKBahp98uzVDzsaVa4/5D/5xwGd Rn2R1s6SlkYxDgYZMUUWbbvtzd98vCN4NJNl97DzGFlAhnCwMUpABOxCmRkWMv261PWkZlvD+hf /nhMiGNH+cvME28+Lq18kSo49UHhpFsMf8Wu7kmbt5i//W6Z+r1JolqTeYzc1u9nMNdNmfesR7u 6jAkA X-Developer-Key: i=sven@svenpeter.dev; a=openpgp; fpr=A1E3E34A2B3C820DBC4955E5993B08092F131F93 X-Endpoint-Received: by B4 Relay for sven@svenpeter.dev/default with auth_id=167 X-Original-From: Sven Peter Reply-To: sven@svenpeter.dev From: Hector Martin Apparently nobody can figure out where the old logic came from, but it seems like it has never been actually used on any supported firmware to this day. OSLog buffers were apparently never requested. But starting with 13.3, we actually need this implemented properly for MTP (and later AOP) to work, so let's actually do that. Signed-off-by: Hector Martin Signed-off-by: Sven Peter --- drivers/soc/apple/rtkit-internal.h | 1 + drivers/soc/apple/rtkit.c | 55 +++++++++++++++++++++++-----------= ---- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/drivers/soc/apple/rtkit-internal.h b/drivers/soc/apple/rtkit-i= nternal.h index 27c9fa745fd5..b8d5244678f0 100644 --- a/drivers/soc/apple/rtkit-internal.h +++ b/drivers/soc/apple/rtkit-internal.h @@ -44,6 +44,7 @@ struct apple_rtkit { =20 struct apple_rtkit_shmem ioreport_buffer; struct apple_rtkit_shmem crashlog_buffer; + struct apple_rtkit_shmem oslog_buffer; =20 struct apple_rtkit_shmem syslog_buffer; char *syslog_msg_buffer; diff --git a/drivers/soc/apple/rtkit.c b/drivers/soc/apple/rtkit.c index be0d08861168..35734ae8c9ce 100644 --- a/drivers/soc/apple/rtkit.c +++ b/drivers/soc/apple/rtkit.c @@ -67,8 +67,9 @@ enum { #define APPLE_RTKIT_SYSLOG_MSG_SIZE GENMASK_ULL(31, 24) =20 #define APPLE_RTKIT_OSLOG_TYPE GENMASK_ULL(63, 56) -#define APPLE_RTKIT_OSLOG_INIT 1 -#define APPLE_RTKIT_OSLOG_ACK 3 +#define APPLE_RTKIT_OSLOG_BUFFER_REQUEST 1 +#define APPLE_RTKIT_OSLOG_SIZE GENMASK_ULL(55, 36) +#define APPLE_RTKIT_OSLOG_IOVA GENMASK_ULL(35, 0) =20 #define APPLE_RTKIT_MIN_SUPPORTED_VERSION 11 #define APPLE_RTKIT_MAX_SUPPORTED_VERSION 12 @@ -259,15 +260,20 @@ static int apple_rtkit_common_rx_get_buffer(struct ap= ple_rtkit *rtk, struct apple_rtkit_shmem *buffer, u8 ep, u64 msg) { - size_t n_4kpages =3D FIELD_GET(APPLE_RTKIT_BUFFER_REQUEST_SIZE, msg); u64 reply; int err; =20 + if (ep =3D=3D APPLE_RTKIT_EP_OSLOG) { + buffer->size =3D FIELD_GET(APPLE_RTKIT_OSLOG_SIZE, msg); + buffer->iova =3D FIELD_GET(APPLE_RTKIT_OSLOG_IOVA, msg) << 12; + } else { + buffer->size =3D FIELD_GET(APPLE_RTKIT_BUFFER_REQUEST_SIZE, msg) << 12; + buffer->iova =3D FIELD_GET(APPLE_RTKIT_BUFFER_REQUEST_IOVA, msg); + } + buffer->buffer =3D NULL; buffer->iomem =3D NULL; buffer->is_mapped =3D false; - buffer->iova =3D FIELD_GET(APPLE_RTKIT_BUFFER_REQUEST_IOVA, msg); - buffer->size =3D n_4kpages << 12; =20 dev_dbg(rtk->dev, "RTKit: buffer request for 0x%zx bytes at %pad\n", buffer->size, &buffer->iova); @@ -292,11 +298,21 @@ static int apple_rtkit_common_rx_get_buffer(struct ap= ple_rtkit *rtk, } =20 if (!buffer->is_mapped) { - reply =3D FIELD_PREP(APPLE_RTKIT_SYSLOG_TYPE, - APPLE_RTKIT_BUFFER_REQUEST); - reply |=3D FIELD_PREP(APPLE_RTKIT_BUFFER_REQUEST_SIZE, n_4kpages); - reply |=3D FIELD_PREP(APPLE_RTKIT_BUFFER_REQUEST_IOVA, - buffer->iova); + /* oslog uses different fields */ + if (ep =3D=3D APPLE_RTKIT_EP_OSLOG) { + reply =3D FIELD_PREP(APPLE_RTKIT_OSLOG_TYPE, + APPLE_RTKIT_OSLOG_BUFFER_REQUEST); + reply |=3D FIELD_PREP(APPLE_RTKIT_OSLOG_SIZE, buffer->size); + reply |=3D FIELD_PREP(APPLE_RTKIT_OSLOG_IOVA, + buffer->iova >> 12); + } else { + reply =3D FIELD_PREP(APPLE_RTKIT_SYSLOG_TYPE, + APPLE_RTKIT_BUFFER_REQUEST); + reply |=3D FIELD_PREP(APPLE_RTKIT_BUFFER_REQUEST_SIZE, + buffer->size >> 12); + reply |=3D FIELD_PREP(APPLE_RTKIT_BUFFER_REQUEST_IOVA, + buffer->iova); + } apple_rtkit_send_message(rtk, ep, reply, NULL, false); } =20 @@ -494,25 +510,18 @@ static void apple_rtkit_syslog_rx(struct apple_rtkit = *rtk, u64 msg) } } =20 -static void apple_rtkit_oslog_rx_init(struct apple_rtkit *rtk, u64 msg) -{ - u64 ack; - - dev_dbg(rtk->dev, "RTKit: oslog init: msg: 0x%llx\n", msg); - ack =3D FIELD_PREP(APPLE_RTKIT_OSLOG_TYPE, APPLE_RTKIT_OSLOG_ACK); - apple_rtkit_send_message(rtk, APPLE_RTKIT_EP_OSLOG, ack, NULL, false); -} - static void apple_rtkit_oslog_rx(struct apple_rtkit *rtk, u64 msg) { u8 type =3D FIELD_GET(APPLE_RTKIT_OSLOG_TYPE, msg); =20 switch (type) { - case APPLE_RTKIT_OSLOG_INIT: - apple_rtkit_oslog_rx_init(rtk, msg); + case APPLE_RTKIT_OSLOG_BUFFER_REQUEST: + apple_rtkit_common_rx_get_buffer(rtk, &rtk->oslog_buffer, + APPLE_RTKIT_EP_OSLOG, msg); break; default: - dev_warn(rtk->dev, "RTKit: Unknown oslog message: %llx\n", msg); + dev_warn(rtk->dev, "RTKit: Unknown oslog message: %llx\n", + msg); } } =20 @@ -729,6 +738,7 @@ int apple_rtkit_reinit(struct apple_rtkit *rtk) =20 apple_rtkit_free_buffer(rtk, &rtk->ioreport_buffer); apple_rtkit_free_buffer(rtk, &rtk->crashlog_buffer); + apple_rtkit_free_buffer(rtk, &rtk->oslog_buffer); apple_rtkit_free_buffer(rtk, &rtk->syslog_buffer); =20 kfree(rtk->syslog_msg_buffer); @@ -916,6 +926,7 @@ void apple_rtkit_free(struct apple_rtkit *rtk) =20 apple_rtkit_free_buffer(rtk, &rtk->ioreport_buffer); apple_rtkit_free_buffer(rtk, &rtk->crashlog_buffer); + apple_rtkit_free_buffer(rtk, &rtk->oslog_buffer); apple_rtkit_free_buffer(rtk, &rtk->syslog_buffer); =20 kfree(rtk->syslog_msg_buffer); --=20 2.34.1