Upstream-Status: Pending[Not submitted to upstream yet]
Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>

From 97509e82b51c57935fc8e918b33c09c4f6648ed7 Mon Sep 17 00:00:00 2001
From: Emekcan <emekcan.aras@arm.com>
Date: Fri, 19 Aug 2022 14:51:08 +0100
Subject: [PATCH] Add external system driver

Adds external system driver to control it
from user-space. It provides run and reset
functionality at the moment.

Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
---
 drivers/misc/Kconfig           |   2 +
 drivers/misc/Makefile          |   1 +
 drivers/misc/arm/Kconfig       |   5 ++
 drivers/misc/arm/Makefile      |   1 +
 drivers/misc/arm/extsys_ctrl.c | 151 +++++++++++++++++++++++++++++++++
 5 files changed, 160 insertions(+)
 create mode 100644 drivers/misc/arm/Kconfig
 create mode 100644 drivers/misc/arm/Makefile
 create mode 100644 drivers/misc/arm/extsys_ctrl.c

diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 0f5a49fc7c9e..5ca195110b3f 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -487,4 +487,6 @@ source "drivers/misc/cardreader/Kconfig"
 source "drivers/misc/habanalabs/Kconfig"
 source "drivers/misc/uacce/Kconfig"
 source "drivers/misc/pvpanic/Kconfig"
+source "drivers/misc/arm/Kconfig"
+
 endmenu
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index a086197af544..f5c1bd5747f7 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -59,3 +59,4 @@ obj-$(CONFIG_UACCE)		+= uacce/
 obj-$(CONFIG_XILINX_SDFEC)	+= xilinx_sdfec.o
 obj-$(CONFIG_HISI_HIKEY_USB)	+= hisi_hikey_usb.o
 obj-$(CONFIG_HI6421V600_IRQ)	+= hi6421v600-irq.o
+obj-y				+= arm/
diff --git a/drivers/misc/arm/Kconfig b/drivers/misc/arm/Kconfig
new file mode 100644
index 000000000000..3c4b3f08e6b4
--- /dev/null
+++ b/drivers/misc/arm/Kconfig
@@ -0,0 +1,5 @@
+config EXTSYS_CTRL
+	tristate "Arm External System control driver"
+	help
+	  Say y here to enable support for external system control
+	  driver for the Arm Corstone-700 and Corstone1000 platform
\ No newline at end of file
diff --git a/drivers/misc/arm/Makefile b/drivers/misc/arm/Makefile
new file mode 100644
index 000000000000..1ca3084cf8a0
--- /dev/null
+++ b/drivers/misc/arm/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_EXTSYS_CTRL)	+= extsys_ctrl.o
diff --git a/drivers/misc/arm/extsys_ctrl.c b/drivers/misc/arm/extsys_ctrl.c
new file mode 100644
index 000000000000..1c6ef14a32ae
--- /dev/null
+++ b/drivers/misc/arm/extsys_ctrl.c
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Arm Corstone700 and Corstone1000 external system reset control driver
+ *
+ * Copyright (C) 2019 Arm Ltd.
+ *
+ */
+
+#include <linux/fs.h>
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/miscdevice.h>
+#include <linux/init.h>
+
+#define EXTSYS_DRV_NAME		"extsys_ctrl"
+#define EXTSYS_MAX_DEVS		 4
+
+#define EXTSYS_RST_SIZE		U(0x8)
+#define EXTSYS_RST_CTRL_OFF	U(0x0)
+#define EXTSYS_RST_ST_OFF	U(0x4)
+
+/* External system reset control indexes */
+#define EXTSYS_CPU_WAIT		(0x0)
+#define EXTSYS_RST_REQ		(0x1)
+
+/* External system reset status masks */
+#define EXTSYS_RST_ST_ACK_OFF	U(0x1)
+
+/* No Reset Requested */
+#define EXTSYS_RST_ST_ACK_NRR	(0x0 << EXTSYS_RST_ST_ACK_OFF)
+
+/* Reset Request Complete */
+#define EXTSYS_RST_ST_ACK_RRC	(0x2 << EXTSYS_RST_ST_ACK_OFF)
+
+/* Reset Request Unable to Complete */
+#define EXTSYS_RST_ST_ACK_RRUC	(0x3 << EXTSYS_RST_ST_ACK_OFF)
+
+/* IOCTL commands */
+#define EXTSYS_CPU_WAIT_DISABLE	0x0
+#define EXTSYS_RESET_REQ_ENABLE	0x1
+
+struct extsys_ctrl {
+	struct miscdevice miscdev;
+	void __iomem *reset_reg;
+	void __iomem *set_reg;
+};
+
+#define CLEAR_BIT(addr, index) writel(readl(addr) & ~(1UL << index), addr)
+#define SET_BIT(addr, index) writel(readl(addr) | (1UL << index), addr)
+
+static long extsys_ctrl_ioctl(struct file *f, unsigned int cmd,
+			      unsigned long arg)
+{
+	struct extsys_ctrl *extsys;
+
+	extsys = container_of(f->private_data, struct extsys_ctrl, miscdev);
+
+	switch (cmd) {
+	case EXTSYS_CPU_WAIT_DISABLE:
+		CLEAR_BIT(extsys->reset_reg, EXTSYS_CPU_WAIT);
+		break;
+	case EXTSYS_RESET_REQ_ENABLE:
+		SET_BIT(extsys->reset_reg, EXTSYS_RST_REQ);
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static const struct file_operations extsys_ctrl_fops = {
+	.owner = THIS_MODULE,
+	.unlocked_ioctl = extsys_ctrl_ioctl,
+};
+
+static int extsys_ctrl_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct extsys_ctrl *extsys;
+	struct resource *res;
+	void __iomem *reset_reg;
+	void __iomem *set_reg;
+	int ret;
+
+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rstreg");
+	reset_reg = devm_ioremap_resource(dev, res);
+	if (IS_ERR(reset_reg))
+		return PTR_ERR(reset_reg);
+
+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "streg");
+	set_reg = devm_ioremap_resource(dev, res);
+	if (IS_ERR(set_reg))
+		return PTR_ERR(set_reg);
+
+	extsys = devm_kzalloc(dev, sizeof(*extsys), GFP_KERNEL);
+	if (!extsys)
+		return -ENOMEM;
+
+	extsys->reset_reg = reset_reg;
+	extsys->set_reg = set_reg;
+
+	extsys->miscdev.minor = MISC_DYNAMIC_MINOR;
+	extsys->miscdev.name = EXTSYS_DRV_NAME;
+	extsys->miscdev.fops = &extsys_ctrl_fops;
+	extsys->miscdev.parent = dev;
+
+	ret = misc_register(&extsys->miscdev);
+	if (ret)
+		return ret;
+
+	dev_info(dev, "external system controller ready\n");
+
+	return 0;
+}
+
+static int extsys_ctrl_remove(struct platform_device *pdev)
+{
+	struct extsys_ctrl *extsys = dev_get_drvdata(&pdev->dev);
+
+	misc_deregister(&extsys->miscdev);
+
+	return 0;
+}
+
+static const struct of_device_id extsys_ctrl_match[] = {
+	{ .compatible = "arm,extsys_ctrl" },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, extsys_ctrl_match);
+
+static struct platform_driver extsys_ctrl_driver = {
+	.driver = {
+		.name = EXTSYS_DRV_NAME,
+		.of_match_table = extsys_ctrl_match,
+	},
+	.probe = extsys_ctrl_probe,
+	.remove = extsys_ctrl_remove,
+};
+module_platform_driver(extsys_ctrl_driver);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Arm External System Control Driver");
+MODULE_AUTHOR("Morten Borup Petersen");
+MODULE_AUTHOR("Rui Miguel Silva <rui.silva@arm.com>");
-- 
2.17.1

