mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 07:04:28 +00:00
sandbox: add sandbox sm uclass driver
This patch adds sandbox secure monitor driver. Signed-off-by: Alexey Romanov <avromanov@salutedevices.com> Reviewed-by: Simon Glass <sjg@chromium.org> Link: https://lore.kernel.org/r/20230921081346.22157-3-avromanov@salutedevices.com Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
This commit is contained in:
parent
c52cd07407
commit
9ec6db32ca
3 changed files with 95 additions and 0 deletions
|
@ -1,3 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
obj-y += sm-uclass.o
|
||||
obj-$(CONFIG_SANDBOX) += sandbox-sm.o
|
||||
|
|
76
drivers/sm/sandbox-sm.c
Normal file
76
drivers/sm/sandbox-sm.c
Normal file
|
@ -0,0 +1,76 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (c) 2023 SberDevices, Inc.
|
||||
*
|
||||
* Author: Alexey Romanov <avromanov@salutedevices.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <sm.h>
|
||||
#include <sm-uclass.h>
|
||||
#include <sandbox-sm.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <dm/device.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
static u8 test_buffer[SZ_4K];
|
||||
|
||||
static int sandbox_sm_call(struct udevice *dev, u32 cmd_index, s32 *smc_ret,
|
||||
struct pt_regs *args)
|
||||
{
|
||||
if (cmd_index >= SANDBOX_SMC_CMD_COUNT)
|
||||
return -EINVAL;
|
||||
|
||||
if (smc_ret)
|
||||
*smc_ret = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sandbox_sm_call_read(struct udevice *dev, void *buffer, size_t size,
|
||||
u32 cmd_index, struct pt_regs *args)
|
||||
{
|
||||
if (cmd_index >= SANDBOX_SMC_CMD_COUNT || !buffer)
|
||||
return -EINVAL;
|
||||
|
||||
if (size > sizeof(test_buffer))
|
||||
return -EINVAL;
|
||||
|
||||
memcpy(buffer, test_buffer, size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static int sandbox_sm_call_write(struct udevice *dev, void *buffer, size_t size,
|
||||
u32 cmd_index, struct pt_regs *args)
|
||||
{
|
||||
if (cmd_index >= SANDBOX_SMC_CMD_COUNT || !buffer)
|
||||
return -EINVAL;
|
||||
|
||||
if (size > sizeof(test_buffer))
|
||||
return -EINVAL;
|
||||
|
||||
memcpy(test_buffer, buffer, size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static const struct udevice_id sandbox_sm_ids[] = {
|
||||
{
|
||||
.compatible = "sandbox,sm",
|
||||
},
|
||||
{},
|
||||
};
|
||||
|
||||
static const struct sm_ops sandbox_sm_ops = {
|
||||
.sm_call = sandbox_sm_call,
|
||||
.sm_call_read = sandbox_sm_call_read,
|
||||
.sm_call_write = sandbox_sm_call_write,
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(sm) = {
|
||||
.name = "sm",
|
||||
.id = UCLASS_SM,
|
||||
.of_match = sandbox_sm_ids,
|
||||
.ops = &sandbox_sm_ops,
|
||||
};
|
18
include/sandbox-sm.h
Normal file
18
include/sandbox-sm.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright (c) 2023 SberDevices, Inc.
|
||||
*
|
||||
* Author: Alexey Romanov <avromanov@salutedevices.com>
|
||||
*/
|
||||
|
||||
#ifndef __SANDBOX_SM_H__
|
||||
#define __SANDBOX_SM_H__
|
||||
|
||||
enum sandbox_smc_cmd {
|
||||
SANDBOX_SMC_CMD_READ_MEM,
|
||||
SANDBOX_SMC_CMD_WRITE_MEM,
|
||||
SANDBOX_SMC_CMD_COMMON,
|
||||
SANDBOX_SMC_CMD_COUNT,
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue