On Mon, 7 Sep 2020 at 08:50, Etienne Carriere <etienne.carri...@linaro.org> wrote: > > This change introduces SCMI agent uclass to interact with a firmware > using the SCMI protocols [1]. > > SCMI agent uclass currently supports a single method to request > processing of the SCMI message by an identified server. A SCMI message > is made of a byte payload associated to a protocol ID and a message ID, > all defined by the SCMI specification [1]. On return from process_msg() > method, the caller gets the service response. > > SCMI agent uclass defines a post bind generic sequence for all devices. > The sequence binds all the SCMI protocols listed in the FDT for that > SCMI agent device. Currently none, but later change will introduce > protocols. > > This change implements a simple sandbox device for the SCMI agent uclass. > The sandbox nicely answers SCMI_NOT_SUPPORTED to SCMI messages. > To prepare for further test support, the sandbox exposes a architecture > function for test application to read the sandbox emulated devices state. > Currently supports 2 SCMI agents, identified by an ID in the FDT device > name. The simplistic DM test does nothing yet. > > SCMI agent uclass is designed for platforms that embed a SCMI server in > a firmware hosted somewhere, for example in a companion co-processor or > in the secure world of the executing processor. SCMI protocols allow an > SCMI agent to discover and access external resources as clock, reset > controllers and more. SCMI agent and server communicate following the > SCMI specification [1]. This SCMI agent implementation complies with > the DT bindings defined in the Linux kernel source tree regarding > SCMI agent description since v5.8. > > Links: [1] > https://developer.arm.com/architectures/system-architectures/software-standards/scmi > Signed-off-by: Etienne Carriere <etienne.carri...@linaro.org> > Cc: Simon Glass <s...@chromium.org> > Cc: Peng Fan <peng....@nxp.com> > Cc: Sudeep Holla <sudeep.ho...@arm.com> > --- > > Changes in v3: > - Address comments about adding a new uclass and some sandbox test from > v2 in https://patchwork.ozlabs.org/project/uboot/list/?series=196253 > - New directory drivers/firmware/scmi/. The path mimics Linux kernel > source tree for the equivalent driver. > - Split scmi.h (patch v2) into scmi_protocols.h, scmi_agent.h and > scmi_agent-uclass.h. > - Create new uclass UCLASS_SCMI_AGENT. > - Introduce a simple sandbox on that agent. Mailbox and smccc agents are > moved to specific commits in the series. > > Changes in v2: > - Fix CONFIG_SCMI_FIRMWARE description with explicit SCMI reference. > - Move struct, enum and macro definitions at source file top and > add inline comment description for the structures and local functions. > - Replace rc with ret as return value local variable label. > - Use explicit return 0 on successful return paths. > - Replace EINVAL with more accurate error numbers. > - Use dev_read_u32() instead of ofnode_read_u32(dev_ofnode(), ...). > - Use memcpy_toio()/memcpy_fromio() when copying message payload > to/from IO memory. > - Embed mailbox transport resources upon CONFIG_DM_MAILBOX and > SMCCC transport resources upon CONFIG_ARM_SMCCC. > > Note: review comments on defining a uclass and sandbox for SCMI > transport drivers are NOT addressed in this v2. Main issue is that > there is no driver/device defined for SCMI transport layer as well as > and no defined compatible ID in the SCMI DT bindings documentation. > --- > arch/sandbox/dts/test.dts | 16 +++ > arch/sandbox/include/asm/scmi_test.h | 43 ++++++ > configs/sandbox_defconfig | 2 + > drivers/firmware/Kconfig | 2 + > drivers/firmware/Makefile | 1 + > drivers/firmware/scmi/Kconfig | 17 +++ > drivers/firmware/scmi/Makefile | 2 + > drivers/firmware/scmi/sandbox-scmi_agent.c | 147 +++++++++++++++++++++ > drivers/firmware/scmi/scmi_agent-uclass.c | 107 +++++++++++++++ > include/dm/uclass-id.h | 1 + > include/scmi_agent-uclass.h | 24 ++++ > include/scmi_agent.h | 68 ++++++++++ > include/scmi_protocols.h | 41 ++++++ > test/dm/Makefile | 1 + > test/dm/scmi.c | 38 ++++++ > 15 files changed, 510 insertions(+) > create mode 100644 arch/sandbox/include/asm/scmi_test.h > create mode 100644 drivers/firmware/scmi/Kconfig > create mode 100644 drivers/firmware/scmi/Makefile > create mode 100644 drivers/firmware/scmi/sandbox-scmi_agent.c > create mode 100644 drivers/firmware/scmi/scmi_agent-uclass.c > create mode 100644 include/scmi_agent-uclass.h > create mode 100644 include/scmi_agent.h > create mode 100644 include/scmi_protocols.h > create mode 100644 test/dm/scmi.c >
Reviewed-by: Simon Glass <s...@chromium.org>