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: Cristian Marussi <cristian.marussi@arm.com> Tested-by: Florian Fainelli <f.fainelli@gmail.com> Tested-by: Vincent Guittot <vincent.guittot@linaro.org> Link: https://lore.kernel.org/r/20230118121426.492864-13-cristian.marussi@arm.com Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
This commit is contained in:
parent
0f62ed0092
commit
3c3d818a93
@ -30,6 +30,21 @@ config ARM_SCMI_NEED_DEBUGFS
|
||||
which needs debugfs support. When selected causess the creation
|
||||
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
|
||||
bool
|
||||
help
|
||||
|
@ -3,6 +3,7 @@ scmi-bus-y = bus.o
|
||||
scmi-core-objs := $(scmi-bus-y)
|
||||
|
||||
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_TRANSPORT_MAILBOX) += mailbox.o
|
||||
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_SMC) += smc.o
|
||||
|
@ -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,
|
||||
xfer->hdr.id,
|
||||
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->rx.buf, xfer->rx.len);
|
||||
|
||||
@ -1045,7 +1046,8 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc,
|
||||
/* Trace polled replies. */
|
||||
trace_scmi_msg_dump(info->id, cinfo->id,
|
||||
xfer->hdr.protocol_id, xfer->hdr.id,
|
||||
"RESP",
|
||||
!SCMI_XFER_IS_RAW(xfer) ?
|
||||
"RESP" : "resp",
|
||||
xfer->hdr.seq, xfer->hdr.status,
|
||||
xfer->rx.buf, xfer->rx.len);
|
||||
}
|
||||
|
1322
drivers/firmware/arm_scmi/raw_mode.c
Normal file
1322
drivers/firmware/arm_scmi/raw_mode.c
Normal file
File diff suppressed because it is too large
Load Diff
30
drivers/firmware/arm_scmi/raw_mode.h
Normal file
30
drivers/firmware/arm_scmi/raw_mode.h
Normal file
@ -0,0 +1,30 @@
|
||||
/* 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 */
|
Loading…
Reference in New Issue
Block a user