dts: arc: Add dts support for arc

Signed-off-by: Savinay Dharmappa <savinay.dharmappa@intel.com>
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index 9c424a4..b96e4b6 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -201,6 +201,7 @@
 
 endmenu
 
+if !HAS_DTS
 config ICCM_SIZE
 	int "ICCM Size in kB"
 	help
@@ -256,6 +257,7 @@
 	This option specifies the base address of the flash on the board.  It is
 	normally set by the board's defconfig file and the user should generally
 	avoid modifying it via the menu configuration.
+endif
 
 config CACHE_LINE_SIZE_DETECT
 	bool
diff --git a/arch/arc/soc/quark_se_c1000_ss/Kconfig.defconfig b/arch/arc/soc/quark_se_c1000_ss/Kconfig.defconfig
index 7d5cd39..6f212d2 100644
--- a/arch/arc/soc/quark_se_c1000_ss/Kconfig.defconfig
+++ b/arch/arc/soc/quark_se_c1000_ss/Kconfig.defconfig
@@ -28,6 +28,7 @@
 config HARVARD
 	def_bool n
 
+if !HAS_DTS
 config FLASH_BASE_ADDRESS
 	default 0x40000000
 
@@ -53,6 +54,7 @@
 
 config DCCM_SIZE
 	default 8
+endif
 
 config QMSI
 	def_bool y
@@ -266,7 +268,7 @@
 
 endif # UART_QMSI
 
-if UART_CONSOLE
+if UART_CONSOLE && !HAS_DTS
 
 config UART_CONSOLE_ON_DEV_NAME
 	default "UART_1"
diff --git a/arch/arc/soc/quark_se_c1000_ss/linker.ld b/arch/arc/soc/quark_se_c1000_ss/linker.ld
index aa43c35..3423962 100644
--- a/arch/arc/soc/quark_se_c1000_ss/linker.ld
+++ b/arch/arc/soc/quark_se_c1000_ss/linker.ld
@@ -26,4 +26,5 @@
 #define DCCM_START		CONFIG_DCCM_BASE_ADDRESS
 #define DCCM_SIZE		CONFIG_DCCM_SIZE
 
+#include <generated_dts_board.h>
 #include <arch/arc/v2/linker.ld>
diff --git a/dts/arc/quark_se_c1000_ss.dtsi b/dts/arc/quark_se_c1000_ss.dtsi
new file mode 100644
index 0000000..4eff14e
--- /dev/null
+++ b/dts/arc/quark_se_c1000_ss.dtsi
@@ -0,0 +1,65 @@
+#include "skeleton.dtsi"
+
+#define __SIZE_K(x) (x * 1024)
+
+/ {
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu@0 {
+			device_type = "cpu";
+			compatible = "snps,arcem4";
+			reg = <1>;
+		};
+
+		core_intc: arcv2-intc@0 {
+			compatible = "snps,arcv2-intc";
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+	};
+
+	flash0: flash@40010000 {
+		reg = <0x40000000 DT_FLASH_SIZE>;
+	};
+
+	sram0: memory@a8000400 {
+		device_type = "memory";
+		compatible = "mmio-sram";
+		reg = <0xa8000400 DT_SRAM_SIZE>;
+	};
+
+	dccm0: dccm@80000000 {
+		device_type = "memory";
+		compatible = "arc,dccm";
+		reg = <0x80000000 DT_DCCM_SIZE>;
+	};
+
+	soc {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "simple-bus";
+		ranges;
+
+		uart0: uart@b0002000 {
+			compatible = "intel,qmsi-uart";
+			reg = <0xb0002000 0x400>;
+			interrupts = <5 0>;
+			interrupt-parent = <&core_intc>;
+			label = "UART_0";
+
+			status = "disabled";
+		};
+
+		uart1: uart@b0002400 {
+			compatible = "intel,qmsi-uart";
+			reg = <0xb0002400 0x400>;
+			interrupts = <6 0>;
+			interrupt-parent = <&core_intc>;
+			label = "UART_1";
+
+			status = "disabled";
+		};
+	};
+};
diff --git a/include/arch/arc/arch.h b/include/arch/arc/arch.h
index ebd9c81..9d505d8 100644
--- a/include/arch/arc/arch.h
+++ b/include/arch/arc/arch.h
@@ -25,6 +25,7 @@
 #define OCTET_TO_SIZEOFUNIT(X) (X)
 #define SIZEOFUNIT_TO_OCTET(X) (X)
 
+#include <generated_dts_board.h>
 #include <sw_isr_table.h>
 #ifdef CONFIG_CPU_ARCV2
 #include <arch/arc/v2/exc.h>