]>
Commit | Line | Data |
---|---|---|
9ec6db32 AR |
1 | // SPDX-License-Identifier: GPL-2.0+ |
2 | /* | |
3 | * Copyright (c) 2023 SberDevices, Inc. | |
4 | * | |
5 | * Author: Alexey Romanov <avromanov@salutedevices.com> | |
6 | */ | |
7 | ||
d678a59d | 8 | #include <common.h> |
9ec6db32 AR |
9 | #include <sm.h> |
10 | #include <sm-uclass.h> | |
11 | #include <sandbox-sm.h> | |
12 | #include <asm/ptrace.h> | |
13 | #include <dm/device.h> | |
14 | #include <linux/sizes.h> | |
15 | ||
16 | static u8 test_buffer[SZ_4K]; | |
17 | ||
18 | static int sandbox_sm_call(struct udevice *dev, u32 cmd_index, s32 *smc_ret, | |
19 | struct pt_regs *args) | |
20 | { | |
21 | if (cmd_index >= SANDBOX_SMC_CMD_COUNT) | |
22 | return -EINVAL; | |
23 | ||
24 | if (smc_ret) | |
25 | *smc_ret = 0; | |
26 | ||
27 | return 0; | |
28 | } | |
29 | ||
30 | static int sandbox_sm_call_read(struct udevice *dev, void *buffer, size_t size, | |
31 | u32 cmd_index, struct pt_regs *args) | |
32 | { | |
33 | if (cmd_index >= SANDBOX_SMC_CMD_COUNT || !buffer) | |
34 | return -EINVAL; | |
35 | ||
36 | if (size > sizeof(test_buffer)) | |
37 | return -EINVAL; | |
38 | ||
39 | memcpy(buffer, test_buffer, size); | |
40 | ||
41 | return size; | |
42 | } | |
43 | ||
44 | static int sandbox_sm_call_write(struct udevice *dev, void *buffer, size_t size, | |
45 | u32 cmd_index, struct pt_regs *args) | |
46 | { | |
47 | if (cmd_index >= SANDBOX_SMC_CMD_COUNT || !buffer) | |
48 | return -EINVAL; | |
49 | ||
50 | if (size > sizeof(test_buffer)) | |
51 | return -EINVAL; | |
52 | ||
53 | memcpy(test_buffer, buffer, size); | |
54 | ||
55 | return size; | |
56 | } | |
57 | ||
58 | static const struct udevice_id sandbox_sm_ids[] = { | |
59 | { | |
60 | .compatible = "sandbox,sm", | |
61 | }, | |
62 | {}, | |
63 | }; | |
64 | ||
65 | static const struct sm_ops sandbox_sm_ops = { | |
66 | .sm_call = sandbox_sm_call, | |
67 | .sm_call_read = sandbox_sm_call_read, | |
68 | .sm_call_write = sandbox_sm_call_write, | |
69 | }; | |
70 | ||
71 | U_BOOT_DRIVER(sm) = { | |
72 | .name = "sm", | |
73 | .id = UCLASS_SM, | |
74 | .of_match = sandbox_sm_ids, | |
75 | .ops = &sandbox_sm_ops, | |
76 | }; |