Commit 3c3d818a authored by Cristian Marussi's avatar Cristian Marussi Committed by Sudeep Holla

firmware: arm_scmi: Add core raw transmission support

Add SCMI raw mode support which exposes a userspace interface to allow for
bare SCMI command injection and snooping from userspace.
Signed-off-by: default avatarCristian Marussi <cristian.marussi@arm.com>
Tested-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Tested-by: default avatarVincent Guittot <vincent.guittot@linaro.org>
Link: https://lore.kernel.org/r/20230118121426.492864-13-cristian.marussi@arm.comSigned-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent 0f62ed00
...@@ -30,6 +30,21 @@ config ARM_SCMI_NEED_DEBUGFS ...@@ -30,6 +30,21 @@ config ARM_SCMI_NEED_DEBUGFS
which needs debugfs support. When selected causess the creation which needs debugfs support. When selected causess the creation
of a common SCMI debugfs root directory. of a common SCMI debugfs root directory.
config ARM_SCMI_RAW_MODE_SUPPORT
bool "Enable support for SCMI Raw transmission mode"
depends on DEBUG_FS
select ARM_SCMI_NEED_DEBUGFS
help
Enable support for SCMI Raw transmission mode.
If enabled allows the direct injection and snooping of SCMI bare
messages through a dedicated debugfs interface.
It is meant to be used by SCMI compliance/testing suites.
When enabled regular SCMI drivers interactions are inhibited in
order to avoid unexpected interactions with the SCMI Raw message
flow. If unsure say N.
config ARM_SCMI_HAVE_TRANSPORT config ARM_SCMI_HAVE_TRANSPORT
bool bool
help help
......
...@@ -3,6 +3,7 @@ scmi-bus-y = bus.o ...@@ -3,6 +3,7 @@ scmi-bus-y = bus.o
scmi-core-objs := $(scmi-bus-y) scmi-core-objs := $(scmi-bus-y)
scmi-driver-y = driver.o notify.o scmi-driver-y = driver.o notify.o
scmi-driver-$(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT) += raw_mode.o
scmi-transport-$(CONFIG_ARM_SCMI_HAVE_SHMEM) = shmem.o scmi-transport-$(CONFIG_ARM_SCMI_HAVE_SHMEM) = shmem.o
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_MAILBOX) += mailbox.o scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_MAILBOX) += mailbox.o
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_SMC) += smc.o scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_SMC) += smc.o
......
...@@ -920,7 +920,8 @@ static void scmi_handle_response(struct scmi_chan_info *cinfo, ...@@ -920,7 +920,8 @@ static void scmi_handle_response(struct scmi_chan_info *cinfo,
trace_scmi_msg_dump(info->id, cinfo->id, xfer->hdr.protocol_id, trace_scmi_msg_dump(info->id, cinfo->id, xfer->hdr.protocol_id,
xfer->hdr.id, xfer->hdr.id,
xfer->hdr.type == MSG_TYPE_DELAYED_RESP ? xfer->hdr.type == MSG_TYPE_DELAYED_RESP ?
"DLYD" : "RESP", (!SCMI_XFER_IS_RAW(xfer) ? "DLYD" : "dlyd") :
(!SCMI_XFER_IS_RAW(xfer) ? "RESP" : "resp"),
xfer->hdr.seq, xfer->hdr.status, xfer->hdr.seq, xfer->hdr.status,
xfer->rx.buf, xfer->rx.len); xfer->rx.buf, xfer->rx.len);
...@@ -1045,7 +1046,8 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc, ...@@ -1045,7 +1046,8 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc,
/* Trace polled replies. */ /* Trace polled replies. */
trace_scmi_msg_dump(info->id, cinfo->id, trace_scmi_msg_dump(info->id, cinfo->id,
xfer->hdr.protocol_id, xfer->hdr.id, xfer->hdr.protocol_id, xfer->hdr.id,
"RESP", !SCMI_XFER_IS_RAW(xfer) ?
"RESP" : "resp",
xfer->hdr.seq, xfer->hdr.status, xfer->hdr.seq, xfer->hdr.status,
xfer->rx.buf, xfer->rx.len); xfer->rx.buf, xfer->rx.len);
} }
......
This diff is collapsed.
/* SPDX-License-Identifier: GPL-2.0 */
/*
* System Control and Management Interface (SCMI) Message Protocol
* Raw mode support header.
*
* Copyright (C) 2022 ARM Ltd.
*/
#ifndef _SCMI_RAW_MODE_H
#define _SCMI_RAW_MODE_H
#include "common.h"
enum {
SCMI_RAW_REPLY_QUEUE,
SCMI_RAW_NOTIF_QUEUE,
SCMI_RAW_ERRS_QUEUE,
SCMI_RAW_MAX_QUEUE
};
void *scmi_raw_mode_init(const struct scmi_handle *handle,
struct dentry *top_dentry, int instance_id,
const struct scmi_desc *desc, int tx_max_msg);
void scmi_raw_mode_cleanup(void *raw);
void scmi_raw_message_report(void *raw, struct scmi_xfer *xfer,
unsigned int idx);
void scmi_raw_error_report(void *raw, struct scmi_chan_info *cinfo,
u32 msg_hdr, void *priv);
#endif /* _SCMI_RAW_MODE_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment