arch: arm: soc: ti_simplelink: Add MSP432P401R SoC

This patch adds SoC support for TI SimpleLink family MSP432P401R.

Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
diff --git a/CODEOWNERS b/CODEOWNERS
index 25ee6e1..87711a4 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -15,6 +15,7 @@
 arch/arm/soc/st_stm32/*                  @erwango
 arch/arm/soc/st_stm32/stm32f4/*          @rsalveti @idlethread
 arch/arm/soc/ti_simplelink/cc32xx        @GAnthony
+arch/arm/soc/ti_simplelink/msp432p4xx    @Mani-Sadhasivam
 arch/nios2/*                             @andrewboie
 arch/nios2/core/*                        @andrewboie
 arch/riscv32                             @fractalclone
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.defconfig.msp432p401r b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.defconfig.msp432p401r
new file mode 100644
index 0000000..be0c223
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.defconfig.msp432p401r
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2017, Linaro Ltd
+#
+# Kconfig.defconfig.msp432p401r- TI SimpleLink MSP432P401R SoC
+#
+
+if SOC_MSP432P401R
+
+config SOC
+	string
+	default msp432p401r
+
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+	int
+	default 48000000
+
+config SYS_CLOCK_TICKS_PER_SEC
+	int
+	default 1000
+
+config NUM_IRQS
+	int
+	default 64
+
+endif # SOC_MSP432P401R
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.defconfig.series b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.defconfig.series
new file mode 100644
index 0000000..d893dfd
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.defconfig.series
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2017, Linaro Ltd
+#
+# Kconfig.defconfig.series - TI SimpleLink MSP432P4XX
+#
+
+if SOC_SERIES_MSP432P4XX
+
+source "arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.defconfig.msp432p4*"
+
+config SOC_SERIES
+	default msp432p4xx
+
+endif # SOC_SERIES_MSP432P4XX
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.series b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.series
new file mode 100644
index 0000000..b231bc1
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.series
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2017, Linaro Ltd
+#
+# Kconfig.series - TI SimpleLink MSP432P4XX
+#
+
+config SOC_SERIES_MSP432P4XX
+	bool "TI SimpleLink Family MSP432P4XX"
+	select CPU_CORTEX_M
+	select CPU_CORTEX_M4
+	select SOC_FAMILY_TISIMPLELINK
+	select CPU_HAS_FPU
+	select CPU_HAS_SYSTICK
+	help
+	  Enable support for TI SimpleLink MSP432P4XX.
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.soc b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.soc
new file mode 100644
index 0000000..7bcd038
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/Kconfig.soc
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2017, Linaro Ltd
+#
+# Kconfig.soc - Texas Instruments MSP432P401R
+#
+
+choice
+prompt "TI SimpleLink MCU Selection"
+depends on SOC_SERIES_MSP432P4XX
+
+config SOC_MSP432P401R
+	bool "MSP432P401R"
+	select HAS_MSP432P4XXSDK
+endchoice
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/Makefile b/arch/arm/soc/ti_simplelink/msp432p4xx/Makefile
new file mode 100644
index 0000000..c0b387c
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/Makefile
@@ -0,0 +1,5 @@
+obj-y += soc.o
+
+ifdef CONFIG_SOC_MSP432P401R
+soc-cflags += -D__MSP432P401R__
+endif
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/linker.ld b/arch/arm/soc/ti_simplelink/msp432p4xx/linker.ld
new file mode 100644
index 0000000..c4f825a
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/linker.ld
@@ -0,0 +1,3 @@
+/* linker.ld - Linker command/script file */
+
+#include <arch/arm/cortex_m/scripts/linker.ld>
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/soc.c b/arch/arm/soc/ti_simplelink/msp432p4xx/soc.c
new file mode 100644
index 0000000..1851578
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/soc.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2017, Linaro Ltd
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <kernel.h>
+#include <device.h>
+#include <init.h>
+#include <soc.h>
+
+static int ti_msp432p4xx_init(struct device *arg)
+{
+	ARG_UNUSED(arg);
+
+	SystemInit();
+
+	return 0;
+}
+
+SYS_INIT(ti_msp432p4xx_init, PRE_KERNEL_1, 0);
diff --git a/arch/arm/soc/ti_simplelink/msp432p4xx/soc.h b/arch/arm/soc/ti_simplelink/msp432p4xx/soc.h
new file mode 100644
index 0000000..972fda2
--- /dev/null
+++ b/arch/arm/soc/ti_simplelink/msp432p4xx/soc.h
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2017, Linaro Ltd
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#include <ti/devices/msp432p4xx/inc/msp.h>
diff --git a/dts/arm/ti/mem.h b/dts/arm/ti/mem.h
index 30f6829..a347dc3 100644
--- a/dts/arm/ti/mem.h
+++ b/dts/arm/ti/mem.h
@@ -14,6 +14,10 @@
 #define DT_FLASH_SIZE		__SIZE_K(1024)
 #define DT_SRAM_SIZE		__SIZE_K(256)
 #define DT_SRAM_START		0x20000000
+#elif defined(CONFIG_SOC_MSP432P401R)
+#define DT_FLASH_SIZE		__SIZE_K(256)
+#define DT_SRAM_SIZE		__SIZE_K(64)
+#define DT_SRAM_START		0x20000000
 #else
 #error "Flash and RAM sizes not defined for this chip"
 #endif
diff --git a/dts/arm/ti/msp432p4xx.dtsi b/dts/arm/ti/msp432p4xx.dtsi
new file mode 100644
index 0000000..10146fd
--- /dev/null
+++ b/dts/arm/ti/msp432p4xx.dtsi
@@ -0,0 +1,34 @@
+#include <arm/armv7-m.dtsi>
+#include <ti/mem.h>
+
+/ {
+	cpus {
+		cpu@0 {
+			compatible = "arm,cortex-m4f";
+		};
+	};
+
+	sram0: memory {
+		compatible = "sram";
+		reg = <DT_SRAM_START DT_SRAM_SIZE>;
+	};
+
+	flash0: serial-flash {
+		compatible = "serial-flash";
+		reg = <0x0 DT_FLASH_SIZE>;
+	};
+
+	soc {
+		uart0: uart@40001000 {
+			compatible = "ti,msp432p4xx-uart";
+			reg = <0x40001000 0x400>;
+			interrupts = <32 0>;
+			status = "disabled";
+			label = "UART_0";
+		};
+	};
+};
+
+&nvic {
+	arm,num-irq-priority-bits = <3>;
+};