Add Amlogic secure monitor driver
Subsystems (2)
v2 cover Add Amlogic secure monitor driver
From: Carlo Caione <[email protected]>
In the Amlogic SoCs the secure monitor calls are used for a lot of reasons:
interact with the NVMEM (efuses), check the reboot reason, set USB boot, ...
This driver defines a generic interface towards the secure monitor that can be used by more specialized drivers to interact with the secure monitor itself without worrying about bounce buffers managing.
Changelog:
v2:
* All the SMC function identifiers are now in a SoC-specific header file to be included by the DTS files so the SMC commands are now defined in the DT instead to be hardcoded into the driver
* Patchset is no longer an RFC
* Better error management and boundary checking
* s/unsigned int/u32/
* SMC call not only on CPU 0
* Fix memory leaking
* s/amlogic/meson/ in the directory names
Carlo Caione (4):
soc: Amlogic: Add secure monitor driver
soc: dt-bindings: Add secure monitor header file for GXBB
ARM64: dts: amlogic: gxbb: Enable secure monitor
documentation: Add secure monitor binding documentation
.../devicetree/bindings/soc/meson/meson_sm.txt | 45 ++++++ arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi | 7 + drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/meson/Kconfig | 8 ++ drivers/soc/meson/Makefile | 1 + drivers/soc/meson/meson_sm.c | 155 +++++++++++++++++++++ include/dt-bindings/soc/meson-gxbb-sm.h | 44 ++++++ include/linux/soc/meson/meson_sm.h | 22 +++ 9 files changed, 284 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/meson/meson_sm.txt create mode 100644 drivers/soc/meson/Kconfig create mode 100644 drivers/soc/meson/Makefile create mode 100644 drivers/soc/meson/meson_sm.c create mode 100644 include/dt-bindings/soc/meson-gxbb-sm.h create mode 100644 include/linux/soc/meson/meson_sm.h
Signature · 1 line
2.7.4
PATCH v2 1/4 soc: Amlogic: Add secure monitor driver
From: Carlo Caione <[email protected]>
Introduce a driver to provide calls into secure monitor mode.
In the Amlogic SoCs these calls are used for multiple reasons: access to NVMEM, set USB boot, enable JTAG, etc...
--- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/meson/Kconfig | 8 ++ drivers/soc/meson/Makefile | 1 + drivers/soc/meson/meson_sm.c | 155 +++++++++++++++++++++++++++++++++++++ include/linux/soc/meson/meson_sm.h | 22 ++++++ 6 files changed, 188 insertions(+) create mode 100644 drivers/soc/meson/Kconfig create mode 100644 drivers/soc/meson/Makefile create mode 100644 drivers/soc/meson/meson_sm.c create mode 100644 include/linux/soc/meson/meson_sm.h
drivers/soc/Kconfig +1 -0
@@ -4,6 +4,7 @@ source "drivers/soc/bcm/Kconfig" source "drivers/soc/brcmstb/Kconfig" source "drivers/soc/fsl/qe/Kconfig" source "drivers/soc/mediatek/Kconfig" +source "drivers/soc/meson/Kconfig" source "drivers/soc/qcom/Kconfig" source "drivers/soc/rockchip/Kconfig" source "drivers/soc/samsung/Kconfig"
drivers/soc/Makefile +1 -0
@@ -8,6 +8,7 @@ obj-$(CONFIG_ARCH_DOVE) += dove/ obj-$(CONFIG_MACH_DOVE) += dove/ obj-y += fsl/ obj-$(CONFIG_ARCH_MEDIATEK) += mediatek/ +obj-$(CONFIG_ARCH_MESON) += meson/ obj-$(CONFIG_ARCH_QCOM) += qcom/ obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/ obj-$(CONFIG_SOC_SAMSUNG) += samsung/
drivers/soc/meson/Kconfig new file +8 -0
@@ -0,0 +1,8 @@ +# +# Amlogic Secure Monitor driver +# +config MESON_SM + bool + default ARCH_MESON + help + Say y here to enable the Amlogic secure monitor driver
drivers/soc/meson/Makefile new file +1 -0
@@ -0,0 +1 @@ +obj-$(CONFIG_MESON_SM) += meson_sm.o
drivers/soc/meson/meson_sm.c new file +155 -0
155 lines not on this page · raw message
include/linux/soc/meson/meson_sm.h new file +22 -0
@@ -0,0 +1,22 @@ +/* +* Copyright (C) 2016 Endless Mobile, Inc. +* Author: Carlo Caione <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _MESON_SM_H_ +#define _MESON_SM_H_ + +u32 meson_sm_call (u32 cmd,u32 arg0,u32 arg1,u32 arg2,u32 arg3,u32 arg4); +u32 meson_sm_call_read (void *buffer,u32 cmd,u32 arg0,u32 arg1,u32 arg2, +u32 arg3,u32 arg4); +u32 meson_sm_call_write (void *buffer,unsigned int b_size,u32 cmd,u32 arg0, +u32 arg1,u32 arg2,u32 arg3,u32 arg4); + +#endif /* _MESON_SM_H_ */
Signature · 1 line
2.7.4
PATCH v2 1/4 soc: Amlogic: Add secure monitor driver
Quoted 99 lines · Carlo Caione
From: Carlo Caione <[email protected]>
Introduce a driver to provide calls into secure monitor mode.
In the Amlogic SoCs these calls are used for multiple reasons: access to NVMEM, set USB boot, enable JTAG, etc...
Signed-off-by Carlo Caione <[email protected]>--- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/meson/Kconfig | 8 ++ drivers/soc/meson/Makefile | 1 + drivers/soc/meson/meson_sm.c | 155 +++++++++++++++++++++++++++++++++++++ include/linux/soc/meson/meson_sm.h | 22 ++++++ 6 files changed, 188 insertions(+)create mode 100644
drivers/soc/meson/Kconfigcreate mode 100644drivers/soc/meson/Makefilecreate mode 100644drivers/soc/meson/meson_sm.ccreate mode 100644include/linux/soc/meson/meson_sm.hdrivers/soc/Kconfig +1
-0@@ -4,6 +4,7 @@ source "drivers/soc/bcm/Kconfig" source "drivers/soc/brcmstb/Kconfig" source "drivers/soc/fsl/qe/Kconfig" source "drivers/soc/mediatek/Kconfig" +source "drivers/soc/meson/Kconfig" source "drivers/soc/qcom/Kconfig" source "drivers/soc/rockchip/Kconfig" source "drivers/soc/samsung/Kconfig"drivers/soc/Makefile +1
-0@@ -8,6 +8,7 @@ obj-$(CONFIG_ARCH_DOVE) += dove/ obj-$(CONFIG_MACH_DOVE) += dove/ obj-y += fsl/ obj-$(CONFIG_ARCH_MEDIATEK) += mediatek/ +obj-$(CONFIG_ARCH_MESON) += meson/ obj-$(CONFIG_ARCH_QCOM) += qcom/ obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/ obj-$(CONFIG_SOC_SAMSUNG) += samsung/drivers/soc/meson/Kconfig new file +8
-0@@ -0,0 +1,8 @@ +# +# Amlogic Secure Monitor driver +# +config MESON_SM + bool + default ARCH_MESON + help + Say y here to enable the Amlogic secure monitor driverdrivers/soc/meson/Makefile new file +1
-0@@ -0,0 +1 @@ +obj-$(CONFIG_MESON_SM) += meson_sm.odrivers/soc/meson/meson_sm.c new file +27
-0@@ -0,0 +1,155 @@ +/* +* Amlogic Secure Monitor driver +* +* Copyright (C) 2016 Endless Mobile, Inc. +* Author: Carlo Caione <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdarg.h> +#include <asm/cacheflush.h> +#include <asm/compiler.h> +#include <linux/arm-smccc.h> +#include <linux/io.h> +#include <linux/ioport.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/of.h> +#include <linux/smp.h> + +#include <linux/soc/meson/meson_sm.h> +
drivers/soc/meson/meson_sm.c line 37
Quoted 10 lines
drivers/soc/meson/meson_sm.c new file +10
-0+#define SM_MEM_SIZE 0x1000 + +/* +* To read from / write to the secure monitor we use two bounce buffers. The +* physical addresses of the two buffers are obtained by querying the secure +* monitor itself. +*/ + +static u32 sm_phy_in_base; +static u32 sm_phy_out_base;
You can put this two variable in meson_sm_probe, right?
Quoted 16 lines
drivers/soc/meson/meson_sm.c new file +16
-0+ +static void __iomem *sm_sharemem_in_base; +static void __iomem *sm_sharemem_out_base; + +struct meson_sm_data { +u32 cmd; +u32 arg0; +u32 arg1; +u32 arg2; +u32 arg3; +u32 arg4; +u32 ret; +}; + +static void __meson_sm_call (void *info) +{
drivers/soc/meson/meson_sm.c line 63
Quoted 10 lines
drivers/soc/meson/meson_sm.c new file +10
-0+struct meson_sm_data *data = info; +struct arm_smccc_res res; + +arm_smccc_smc (data->cmd, + data->arg0, data->arg1, data->arg2, + data->arg3, data->arg4,0 ,0 , &res); + data->ret = res.a0; +} + +u32 meson_sm_call (u32 cmd,u32 arg0,u32 arg1,u32 arg2,u32 arg3,u32 arg4)
Can the function be static or will it be called from another driver?
Quoted 19 lines
drivers/soc/meson/meson_sm.c new file +19
-0+{ +struct meson_sm_data data; + + data.cmd = cmd; + data.arg0 = arg0; + data.arg1 = arg1; + data.arg2 = arg2; + data.arg3 = arg3; + data.arg4 = arg4; + data.ret =0 ; + +__meson_sm_call (&data); + +return data.ret; +} + +u32 meson_sm_call_read (void *buffer,u32 cmd,u32 arg0,u32 arg1, +u32 arg2,u32 arg3,u32 arg4) +{
drivers/soc/meson/meson_sm.c line 92
Quoted 10 lines
drivers/soc/meson/meson_sm.c new file +10
-0+u32 size; + + size =meson_sm_call (cmd, arg0, arg1, arg2, arg3, arg4); + +if (!size || size >SM_MEM_SIZE ) +return -EINVAL ; + +memcpy (buffer, sm_sharemem_out_base, size); +return size; +}
This function will be needed to be exported to be callable from modules.
Quoted 9 lines
drivers/soc/meson/meson_sm.c new file +9
-0+ +u32 meson_sm_call_write (void *buffer,unsigned int b_size,u32 cmd,u32 arg0, +u32 arg1,u32 arg2,u32 arg3,u32 arg4) +{ +u32 size; + +if (b_size >SM_MEM_SIZE ) +return -EINVAL ; +
drivers/soc/meson/meson_sm.c line 111
Quoted 10 lines
drivers/soc/meson/meson_sm.c new file +10
-0+memcpy (sm_sharemem_in_base, buffer, b_size); + + size =meson_sm_call (cmd, arg0, arg1, arg2, arg3, arg4); + +if (!size) +return -EINVAL ; + +return size; +} +
Same here.
Regards,
Matthias
Quoted 73 lines
drivers/soc/meson/meson_sm.c new file +44
-0+static int meson_sm_probe (struct platform_device *pdev) +{ +struct device_node *np = pdev->dev.of_node; +int cmd_in, cmd_out; + +if (of_property_read_u32 (np,"amlogic,sm_cmd_input_base" , &cmd_in)) +return -EINVAL ; + +if (of_property_read_u32 (np,"amlogic,sm_cmd_output_base" , &cmd_out)) +return -EINVAL ; + + sm_phy_in_base =meson_sm_call (cmd_in,0 ,0 ,0 ,0 ,0 ); + sm_sharemem_in_base =ioremap_cache (sm_phy_in_base,SM_MEM_SIZE ); +if (!sm_sharemem_in_base) +return -EINVAL ; + + sm_phy_out_base =meson_sm_call (cmd_out,0 ,0 ,0 ,0 ,0 ); + sm_sharemem_out_base =ioremap_cache (sm_phy_out_base,SM_MEM_SIZE ); +if (!sm_sharemem_out_base) { +iounmap (sm_sharemem_in_base); +return -EINVAL ; + } + +return 0 ; +} + +static const struct of_device_id meson_sm_ids[] = { + { .compatible ="amlogic,meson-sm" }, + {/* sentinel */ }, +}; +MODULE_DEVICE_TABLE (of, meson_sm_ids); + +static struct platform_driver meson_sm_platform_driver = { + .probe = meson_sm_probe, + .driver = { + .name ="secmon" , + .of_match_table = meson_sm_ids, + }, +}; +module_platform_driver (meson_sm_platform_driver); + +MODULE_AUTHOR ("Carlo Caione <[email protected]>" ); +MODULE_DESCRIPTION ("Amlogic secure monitor driver" ); +MODULE_LICENSE ("GPL" );include/linux/soc/meson/meson_sm.h new file +22
-0@@ -0,0 +1,22 @@ +/* +* Copyright (C) 2016 Endless Mobile, Inc. +* Author: Carlo Caione <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _MESON_SM_H_ +#define _MESON_SM_H_ + +u32 meson_sm_call (u32 cmd,u32 arg0,u32 arg1,u32 arg2,u32 arg3,u32 arg4); +u32 meson_sm_call_read (void *buffer,u32 cmd,u32 arg0,u32 arg1,u32 arg2, +u32 arg3,u32 arg4); +u32 meson_sm_call_write (void *buffer,unsigned int b_size,u32 cmd,u32 arg0, +u32 arg1,u32 arg2,u32 arg3,u32 arg4); + +#endif /* _MESON_SM_H_ */
PATCH v2 1/4 soc: Amlogic: Add secure monitor driver
Quoted 1 line · Matthias Brugger
[...]
Quoted 17 lines
Quoted 17 lines
drivers/soc/meson/meson_sm.c new file +17
-0+#include <stdarg.h> +#include <asm/cacheflush.h> +#include <asm/compiler.h> +#include <linux/arm-smccc.h> +#include <linux/io.h> +#include <linux/ioport.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/of.h> +#include <linux/smp.h> + +#include <linux/soc/meson/meson_sm.h> + +#define SM_MEM_SIZE 0x1000 + +/* +* To read from / write to the secure monitor we use two bounce buffers. The
Quoted 8 lines
drivers/soc/meson/meson_sm.c line 37
Quoted 6 lines
+ * physical addresses of the two buffers are obtained by querying the secure
+ * monitor itself.
+ */drivers/soc/meson/meson_sm.c new file +3
-0+ +static u32 sm_phy_in_base; +static u32 sm_phy_out_base;You can put this two variable in
meson_sm_probe, right?
Yeah, actually no need to be there.
Quoted 20 lines
Quoted 20 lines
drivers/soc/meson/meson_sm.c new file +20
-0+ +static void __iomem *sm_sharemem_in_base; +static void __iomem *sm_sharemem_out_base; + +struct meson_sm_data { +u32 cmd; +u32 arg0; +u32 arg1; +u32 arg2; +u32 arg3; +u32 arg4; +u32 ret; +}; + +static void __meson_sm_call (void *info) +{ +struct meson_sm_data *data = info; +struct arm_smccc_res res; + + arm_smccc_smc(data->cmd,
Quoted 8 lines
drivers/soc/meson/meson_sm.c line 63
Quoted 6 lines
drivers/soc/meson/meson_sm.c new file +6
-0+ data->arg0, data->arg1, data->arg2, + data->arg3, data->arg4, 0, 0, &res); + data->ret = res.a0; +} + +u32 meson_sm_call (u32 cmd,u32 arg0,u32 arg1,u32 arg2,u32 arg3,u32 arg4)Can the function be static or will it be called from another driver?
It _can_ be called from another driver. It depends on the SMC used, so better making it available.
Quoted 24 lines
Quoted 24 lines
drivers/soc/meson/meson_sm.c new file +23
-0+{ +struct meson_sm_data data; + + data.cmd = cmd; + data.arg0 = arg0; + data.arg1 = arg1; + data.arg2 = arg2; + data.arg3 = arg3; + data.arg4 = arg4; + data.ret =0 ; + +__meson_sm_call (&data); + +return data.ret; +} + +u32 meson_sm_call_read (void *buffer,u32 cmd,u32 arg0,u32 arg1, +u32 arg2,u32 arg3,u32 arg4) +{ +u32 size; + + size =meson_sm_call (cmd, arg0, arg1, arg2, arg3, arg4); +
Quoted 8 lines
drivers/soc/meson/meson_sm.c line 92
Quoted 6 lines
drivers/soc/meson/meson_sm.c new file +6
-0+if (!size || size >SM_MEM_SIZE ) +return -EINVAL ; + +memcpy (buffer, sm_sharemem_out_base, size); +return size; +}This function will be needed to be exported to be callable from modules.
Fix in v3.
Quoted 13 lines
Quoted 13 lines
drivers/soc/meson/meson_sm.c new file +13
-0+ +u32 meson_sm_call_write (void *buffer,unsigned int b_size,u32 cmd,u32 arg0, +u32 arg1,u32 arg2,u32 arg3,u32 arg4) +{ +u32 size; + +if (b_size >SM_MEM_SIZE ) +return -EINVAL ; + +memcpy (sm_sharemem_in_base, buffer, b_size); + + size =meson_sm_call (cmd, arg0, arg1, arg2, arg3, arg4); +
Quoted 8 lines
drivers/soc/meson/meson_sm.c line 111
Quoted 6 lines
drivers/soc/meson/meson_sm.c new file +6
-0+if (!size) +return -EINVAL ; + +return size; +} +Same here.
Thanks.
Cheers,
Signature · 1 line
Carlo Caione
PATCH v2 2/4 soc: dt-bindings: Add secure monitor header file for GXBB
In reply to Carlo CaioneFrom: Carlo Caione <[email protected]>
This patch adds the header file describing all the SMC function identifiers for the Amlogic Meson GXBB SoC.
--- include/dt-bindings/soc/meson-gxbb-sm.h | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 include/dt-bindings/soc/meson-gxbb-sm.h
include/dt-bindings/soc/meson-gxbb-sm.h new file +44 -0
@@ -0,0 +1,44 @@ +/* +* Copyright (C) 2016 Endless Mobile, Inc. +* Author: Carlo Caione <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _MESON_SM_GXBB_H_ +#define _MESON_SM_GXBB_H_ + +#define SM_GET_SHARE_MEM_INPUT_BASE 0x82000020 +#define SM_GET_SHARE_MEM_OUTPUT_BASE 0x82000021 +#define SM_GET_REBOOT_REASON 0x82000022 +#define SM_GET_SHARE_STORAGE_IN_BASE 0x82000023 +#define SM_GET_SHARE_STORAGE_OUT_BASE 0x82000024 +#define SM_GET_SHARE_STORAGE_BLOCK_BASE 0x82000025 +#define SM_GET_SHARE_STORAGE_MESSAGE_BASE 0x82000026 +#define SM_GET_SHARE_STORAGE_BLOCK_SIZE 0x82000027 +#define SM_EFUSE_READ 0x82000030 +#define SM_EFUSE_WRITE 0x82000031 +#define SM_EFUSE_WRITE_PATTERN 0x82000032 +#define SM_EFUSE_USER_MAX 0x82000033 +#define SM_JTAG_ON 0x82000040 +#define SM_JTAG_OFF 0x82000041 +#define SM_SET_USB_BOOT_FUNC 0x82000043 +#define SM_SECURITY_KEY_QUERY 0x82000060 +#define SM_SECURITY_KEY_READ 0x82000061 +#define SM_SECURITY_KEY_WRITE 0x82000062 +#define SM_SECURITY_KEY_TELL 0x82000063 +#define SM_SECURITY_KEY_VERIFY 0x82000064 +#define SM_SECURITY_KEY_STATUS 0x82000065 +#define SM_SECURITY_KEY_NOTIFY 0x82000066 +#define SM_SECURITY_KEY_LIST 0x82000067 +#define SM_SECURITY_KEY_REMOVE 0x82000068 +#define SM_DEBUG_EFUSE_WRITE_PATTERN 0x820000F0 +#define SM_DEBUG_EFUSE_READ_PATTERN 0x820000F1 +#define SM_AML_DATA_PROCESS 0x820000FF + +#endif /* _MESON_SM_GXBB_H_ */
Signature · 1 line
2.7.4
PATCH v2 3/4 ARM64: dts: amlogic: gxbb: Enable secure monitor
In reply to Carlo CaioneFrom: Carlo Caione <[email protected]>
Add the secure monitor node in the Amlogic Meson GXBB DTSI file to enable it.
--- arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi | 7 +++++++ 1 file changed, 7 insertions(+)
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi +7 -0
@@ -44,6 +44,7 @@ #include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/gpio/meson-gxbb-gpio.h> +#include <dt-bindings/soc/meson-gxbb-sm.h> / { compatible = "amlogic,meson-gxbb";
@@ -98,6 +99,12 @@ method = "smc"; }; + sm { + compatible = "amlogic,meson-sm"; + amlogic,sm_cmd_input_base = <SM_GET_SHARE_MEM_INPUT_BASE>; + amlogic,sm_cmd_output_base = <SM_GET_SHARE_MEM_OUTPUT_BASE>; + }; + timer { compatible = "arm,armv8-timer"; interrupts = <GIC_PPI 13
Signature · 1 line
2.7.4
PATCH v2 4/4 documentation: Add secure monitor binding documentation
In reply to Carlo CaioneFrom: Carlo Caione <[email protected]>
Add the binding documentation for the Amlogic secure monitor driver.
--- .../devicetree/bindings/soc/meson/meson_sm.txt | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/meson/meson_sm.txt
Documentation/devicetree/bindings/soc/meson/meson_sm.txt new file +45 -0
@@ -0,0 +1,45 @@ +* Amlogic Secure Monitor + +In the Amlogic SoCs the Secure Monitor code is used to provide access to the +NVMEM, enable JTAG, set USB boot, etc... + +Required properties for the secure monitor node: +- compatible: Should be "amlogic,meson-sm" +- amlogic,sm_cmd_input_base: SMC32 function identifier to read the physical + address of the input buffer +- amlogic,sm_cmd_output_base: SMC32 function identifier to read the physical + address of the output buffer + +Example: + + #include <dt-bindings/soc/meson-gxbb-sm.h> + + ... + + sm { + compatible = "amlogic,meson-sm"; + amlogic,sm_cmd_input_base = <SM_GET_SHARE_MEM_INPUT_BASE>; + amlogic,sm_cmd_output_base = <SM_GET_SHARE_MEM_OUTPUT_BASE>; + }; + +Node of a device using the secure monitor must have a custom property to +specify the SMC32 function the driver is going to use. The values of all the +SMC function identifiers are listed in a SoC-specific header file: + +"include/dt-bindings/soc/meson-gxbb-sm.h" - for the Meson GXBB secure monitor. + +Example of the node using the secure monitor: + + #include <dt-bindings/soc/meson-gxbb-sm.h> + + ... + + efuse: efuse { + compatible = "amlogic,meson-gxbb-efuse"; + amlogic,sm_cmd_read_efuse = <SM_EFUSE_READ>; + #address-cells = <1>; + #size-cells = <1>; + + ... + }; +
Signature · 1 line
2.7.4
Rob Herring
maintainerPATCH v2 4/4 documentation: Add secure monitor binding documentation
Documentation/devicetree/bindings/soc/meson/meson_sm.txt
Quoted 15 lines · Carlo Caione
From: Carlo Caione <[email protected]>
Add the binding documentation for the Amlogic secure monitor driver.
Signed-off-by Carlo Caione <[email protected]>--- .../devicetree/bindings/soc/meson/meson_sm.txt | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/meson/meson_sm.txtDocumentation/devicetree/bindings/soc/meson/meson_sm.txt new file +0
-0
bindings/firmware/
Documentation/devicetree/bindings/soc/meson/meson_sm.txt line 11
Quoted 12 lines
Documentation/devicetree/bindings/soc/meson/meson_sm.txt new file +11
-0@@ -0,0 +1,45 @@ +* Amlogic Secure Monitor + +In the Amlogic SoCs the Secure Monitor code is used to provide access to the +NVMEM, enable JTAG, set USB boot, etc... + +Required properties for the secure monitor node: +- compatible: Should be "amlogic,meson-sm" +- amlogic,sm_cmd_input_base: SMC32 function identifier to read the physical + address of the input buffer +- amlogic,sm_cmd_output_base: SMC32 function identifier to read the physical + address of the output buffer
Use '-' rather than '_'.
Documentation/devicetree/bindings/soc/meson/meson_sm.txt line 19
Quoted 8 lines
Documentation/devicetree/bindings/soc/meson/meson_sm.txt new file +8
-0+ +Example: + + #include <dt-bindings/soc/meson-gxbb-sm.h> + + ... + + sm {
Put this under a /firmware node.
Quoted 29 lines
Documentation/devicetree/bindings/soc/meson/meson_sm.txt new file +26
-0+ compatible = "amlogic,meson-sm"; + amlogic,sm_cmd_input_base = <SM_GET_SHARE_MEM_INPUT_BASE>; + amlogic,sm_cmd_output_base = <SM_GET_SHARE_MEM_OUTPUT_BASE>; + }; + +Node of a device using the secure monitor must have a custom property to +specify the SMC32 function the driver is going to use. The values of all the +SMC function identifiers are listed in a SoC-specific header file: + +"include/dt-bindings/soc/meson-gxbb-sm.h" - for the Meson GXBB secure monitor. + +Example of the node using the secure monitor: + + #include <dt-bindings/soc/meson-gxbb-sm.h> + + ... + + efuse: efuse { + compatible = "amlogic,meson-gxbb-efuse"; + amlogic,sm_cmd_read_efuse = <SM_EFUSE_READ>; + #address-cells = <1>; + #size-cells = <1>; + + ... + }; +Signature · 1 line
2.7.4