Skip to contentSkip to conversation

Add Amlogic secure monitor driver

PATCH Superseded Carlo Caione 3 participants 8 messages May 18, 2016 – May 23, 2016

Subsystems (2)

v2 of 7 Superseded Latest is v7 →

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index cb58ef0..7e70b52 100644
@@ -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
index 5ade713..9024d2b 100644
@@ -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
new file mode 100644
index 0000000..fff11a3
@@ -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
new file mode 100644
index 0000000..9ab3884
@@ -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
new file mode 100644
index 0000000..6ff8317
@@ -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
#2 lore raw

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...

---
  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
index cb58ef0..7e70b52 100644
@@ -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
index 5ade713..9024d2b 100644
@@ -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
new file mode 100644
index 0000000..fff11a3
@@ -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
new file mode 100644
index 0000000..9ab3884
@@ -0,0 +1 @@
+obj-$(CONFIG_MESON_SM) +=	meson_sm.o
drivers/soc/meson/meson_sm.c new file +27 -0
new file mode 100644
index 0000000..16f7e32
@@ -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
new file mode 100644
index 0000000..6ff8317
@@ -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_ */
#3 lore raw

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
#4 lore raw

PATCH v2 2/4 soc: dt-bindings: Add secure monitor header file for GXBB

In reply to Carlo Caione

From: 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
new file mode 100644
index 0000000..b7d02df
@@ -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
#5 lore raw

PATCH v2 3/4 ARM64: dts: amlogic: gxbb: Enable secure monitor

In reply to Carlo Caione

From: 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
index 76b3b6d..003e298 100644
@@ -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
#6 lore raw

PATCH v2 4/4 documentation: Add secure monitor binding documentation

In reply to Carlo Caione

From: 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
new file mode 100644
index 0000000..f59c732
@@ -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
maintainer
#7 lore raw

PATCH 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.

---
 .../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 +0 -0
new file mode 100644
index 0000000..f59c732

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