From 262571217c75c649115633d8075cb6a40d940733 Mon Sep 17 00:00:00 2001 From: Subrahmanya Lingappa Date: Fri, 19 Jun 2026 16:04:24 +0530 Subject: [PATCH] lib: utils/mpxy: Add RPMI MPXY driver for logging service group Add RPMI MPXY proxy driver for LOGGING service group so that S-mode can leverage LOGGING service group implemented by the platform microcontroller. Reviewed-by: Rahul Pathak Signed-off-by: Subrahmanya Lingappa Link: https://lore.kernel.org/r/20260619103424.990954-1-subrahmanya.lingappa@oss.qualcomm.com Signed-off-by: Anup Patel --- include/sbi_utils/mailbox/rpmi_msgprot.h | 19 +++++++++ lib/utils/mpxy/Kconfig | 4 ++ lib/utils/mpxy/fdt_mpxy_rpmi_logging.c | 51 ++++++++++++++++++++++++ lib/utils/mpxy/objects.mk | 3 ++ platform/generic/configs/defconfig | 1 + 5 files changed, 78 insertions(+) create mode 100644 lib/utils/mpxy/fdt_mpxy_rpmi_logging.c diff --git a/include/sbi_utils/mailbox/rpmi_msgprot.h b/include/sbi_utils/mailbox/rpmi_msgprot.h index 525b3750..7ae4abe0 100644 --- a/include/sbi_utils/mailbox/rpmi_msgprot.h +++ b/include/sbi_utils/mailbox/rpmi_msgprot.h @@ -225,6 +225,7 @@ enum rpmi_servicegroup_id { RPMI_SRVGRP_DEVICE_POWER = 0x0009, RPMI_SRVGRP_PERFORMANCE = 0x0000A, RPMI_SRVGRP_MANAGEMENT_MODE = 0x000B, + RPMI_SRVGRP_LOGGING = 0x000E, RPMI_SRVGRP_ID_MAX_COUNT, /* Reserved range for service groups */ @@ -1045,4 +1046,22 @@ struct rpmi_mm_communicate_rsp { u32 mm_comm_retdata_size; }; +/** RPMI LOGGING ServiceGroup Service IDs */ +enum rpmi_logging_service_id { + RPMI_LOGGING_SRV_ENABLE_NOTIFICATION = 0x01, + RPMI_LOGGING_SRV_LOG_DATA = 0x02, + RPMI_LOGGING_SRV_MAX_COUNT, +}; + +struct rpmi_logging_log_data_req { + u32 type; + u32 num_dwords; +#define MAX_LOGGING_DLEN ((RPMI_MSG_DATA_SIZE(RPMI_SLOT_SIZE_MIN) - (sizeof(u32) * 2)) / sizeof(u32)) + u32 data[MAX_LOGGING_DLEN]; +}; + +struct rpmi_logging_log_data_resp { + s32 status; +}; + #endif /* !__RPMI_MSGPROT_H__ */ diff --git a/lib/utils/mpxy/Kconfig b/lib/utils/mpxy/Kconfig index 1a38b792..a3ed1c22 100644 --- a/lib/utils/mpxy/Kconfig +++ b/lib/utils/mpxy/Kconfig @@ -18,6 +18,10 @@ config FDT_MPXY_RPMI_CLOCK bool "MPXY driver for RPMI clock service group" default n +config FDT_MPXY_RPMI_LOGGING + bool "MPXY driver for RPMI logging service group" + default n + config FDT_MPXY_RPMI_SYSMSI bool "MPXY driver for RPMI system MSI service group" default n diff --git a/lib/utils/mpxy/fdt_mpxy_rpmi_logging.c b/lib/utils/mpxy/fdt_mpxy_rpmi_logging.c new file mode 100644 index 00000000..e8f085eb --- /dev/null +++ b/lib/utils/mpxy/fdt_mpxy_rpmi_logging.c @@ -0,0 +1,51 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2026 Qualcomm, Inc + * + * Authors: + * Subrahmanya Lingappa + */ + +#include + +static struct mpxy_rpmi_service_data logging_services[] = { + [0] = { + .id = RPMI_MM_SRV_ENABLE_NOTIFICATION, + .min_tx_len = sizeof(struct rpmi_enable_notification_req), + .max_tx_len = sizeof(struct rpmi_enable_notification_req), + .min_rx_len = sizeof(struct rpmi_enable_notification_resp), + .max_rx_len = sizeof(struct rpmi_enable_notification_resp), + }, + [1] = { + .id = RPMI_LOGGING_SRV_LOG_DATA, + .min_tx_len = sizeof(u32) * 2, + .max_tx_len = sizeof(struct rpmi_logging_log_data_req), + .min_rx_len = sizeof(struct rpmi_logging_log_data_resp), + .max_rx_len = sizeof(struct rpmi_logging_log_data_resp), + }, + /* + * Keep a local terminator for safe lookup because only service ID 0x02 + * is intentionally exposed by this MPXY service group handler. + */ + [2] = { + .id = RPMI_LOGGING_SRV_MAX_COUNT, + }, +}; + +static const struct mpxy_rpmi_mbox_data logging_data = { + .servicegrp_id = RPMI_SRVGRP_LOGGING, + .num_services = RPMI_LOGGING_SRV_MAX_COUNT, + .service_data = logging_services, +}; + +static const struct fdt_match logging_match[] = { + { .compatible = "riscv,rpmi-mpxy-logging", .data = &logging_data }, + { }, +}; + +const struct fdt_driver fdt_mpxy_rpmi_logging = { + .match_table = logging_match, + .init = mpxy_rpmi_mbox_init, + .experimental = true, +}; diff --git a/lib/utils/mpxy/objects.mk b/lib/utils/mpxy/objects.mk index 9cfd86bc..1f1bf0a0 100644 --- a/lib/utils/mpxy/objects.mk +++ b/lib/utils/mpxy/objects.mk @@ -29,3 +29,6 @@ libsbiutils-objs-$(CONFIG_FDT_MPXY_RPMI_DEVICE_POWER) += mpxy/fdt_mpxy_rpmi_devi carray-fdt_mpxy_drivers-$(CONFIG_FDT_MPXY_RPMI_MM) += fdt_mpxy_rpmi_mm libsbiutils-objs-$(CONFIG_FDT_MPXY_RPMI_MM) += mpxy/fdt_mpxy_rpmi_mm.o + +carray-fdt_mpxy_drivers-$(CONFIG_FDT_MPXY_RPMI_LOGGING) += fdt_mpxy_rpmi_logging +libsbiutils-objs-$(CONFIG_FDT_MPXY_RPMI_LOGGING) += mpxy/fdt_mpxy_rpmi_logging.o diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig index 969639e3..341f6b25 100644 --- a/platform/generic/configs/defconfig +++ b/platform/generic/configs/defconfig @@ -83,3 +83,4 @@ CONFIG_FDT_MPXY_RPMI_DEVICE_POWER=y CONFIG_FDT_MPXY_RPMI_PERFORMANCE=y CONFIG_FDT_MPXY_RPMI_SYSMSI=y CONFIG_FDT_MPXY_RPMI_MM=y +CONFIG_FDT_MPXY_RPMI_LOGGING=y