[sw] Move Makefiles under sw/device folder

Move device makefiles and sw/docs under sw/device folder. Makefile
scaffolding is specific to device code, and thus should go in the new
location.

$(SW_ROOT_DIR) was left pointing to the sw/ root directory since there
is vendor code shared between sw/device and sw/host.

Update documents to call make as `make -C sw/device`.

Update CI and FPGA splicing scripts to support new -C path.

This commit is part of lowrisc/opentitan#27.
diff --git a/ci/run_sw_build.sh b/ci/run_sw_build.sh
index e94a36f..49792a7 100755
--- a/ci/run_sw_build.sh
+++ b/ci/run_sw_build.sh
@@ -38,7 +38,7 @@
 PASS_TARGETS=()
 for target in "${BUILD_TARGETS[@]}"; do
   echo "Building target ${target}"
-  if make -C sw "SW_DIR=device/${target}" "SW_BUILD_DIR=build/${target}"; then
+  if make -C sw/device "SW_DIR=${target}" "SW_BUILD_DIR=../build/${target}"; then
     PASS_TARGETS=("${PASS_TARGETS[@]}" "${target}")
   else
     FAIL_TARGETS=("${FAIL_TARGETS[@]}" "${target}")
diff --git a/doc/ug/getting_started_verilator.md b/doc/ug/getting_started_verilator.md
index 1831e65..c5bde52 100644
--- a/doc/ug/getting_started_verilator.md
+++ b/doc/ug/getting_started_verilator.md
@@ -30,8 +30,8 @@
 
 ```console
 $ cd $REPO_TOP
-$ make -C sw SIM=1 SW_DIR=boot_rom SW_BUILD_DIR=${ROM_BUILD_DIR} clean all
-$ make -C sw SIM=1 SW_DIR=examples/hello_world SW_BUILD_DIR=${SW_BUILD_DIR} clean all
+$ make -C sw/device SIM=1 SW_DIR=boot_rom SW_BUILD_DIR=${ROM_BUILD_DIR} clean all
+$ make -C sw/device SIM=1 SW_DIR=examples/hello_world SW_BUILD_DIR=${SW_BUILD_DIR} clean all
 ```
 
 Now the simulation can be run.
diff --git a/hw/dv/tools/rules.mk b/hw/dv/tools/rules.mk
index b6e6454..19c1899 100644
--- a/hw/dv/tools/rules.mk
+++ b/hw/dv/tools/rules.mk
@@ -48,11 +48,11 @@
 ifneq (${SW_NAME},)
 	rm -rf ${SW_BUILD_DIR}
 	mkdir -p ${SW_BUILD_DIR}
-	$(MAKE) -C $(SW_ROOT_DIR) \
-	  SW_DIR=device/boot_rom \
+	$(MAKE) -C $(SW_ROOT_DIR)/device \
+	  SW_DIR=boot_rom \
 	  SW_BUILD_DIR=$(SW_BUILD_DIR)/rom \
 	  MAKEFLAGS="$(SW_OPTS)"
-	$(MAKE) -C $(SW_ROOT_DIR) \
+	$(MAKE) -C $(SW_ROOT_DIR)/device \
 	  SW_DIR=$(SW_DIR) \
 	  SW_NAME=$(SW_NAME) \
 	  SW_BUILD_DIR=$(SW_BUILD_DIR)/sw \
diff --git a/hw/top_earlgrey/dv/Makefile b/hw/top_earlgrey/dv/Makefile
index 09f49fd..fb166e8 100644
--- a/hw/top_earlgrey/dv/Makefile
+++ b/hw/top_earlgrey/dv/Makefile
@@ -27,30 +27,30 @@
 UVM_TEST_SEQ    ?= chip_base_vseq
 
 ifeq (${TEST_NAME},chip_sanity)
-  SW_DIR         = device/examples/hello_world
+  SW_DIR         = examples/hello_world
   SW_NAME        = hello_world
 endif
 
 ifeq (${TEST_NAME},chip_flash_test)
-  SW_DIR         = device/tests/flash_ctrl
+  SW_DIR         = tests/flash_ctrl
   SW_NAME        = flash_test
   RUN_OPTS      += +cpu_test_timeout_ns=15000000
 endif
 
 ifeq (${TEST_NAME},chip_sha256_test)
-  SW_DIR         = device/tests/hmac
+  SW_DIR         = tests/hmac
   SW_NAME        = sha256_test
   RUN_OPTS      += +cpu_test_timeout_ns=4000000
 endif
 
 ifeq (${TEST_NAME},chip_rv_timer_test)
-  SW_DIR         = device/tests/rv_timer
+  SW_DIR         = tests/rv_timer
   SW_NAME        = rv_timer_test
   RUN_OPTS      += +cpu_test_timeout_ns=4000000
 endif
 
 ifeq (${TEST_NAME},coremark)
-  SW_DIR           = device/benchmarks/coremark
+  SW_DIR           = benchmarks/coremark
   SW_NAME          = coremark
   RUN_OPTS        += +cpu_test_timeout_ns=20000000
   SW_OPTS         += ITERATIONS=1
diff --git a/sw/Makefile b/sw/device/Makefile
similarity index 94%
rename from sw/Makefile
rename to sw/device/Makefile
index 1c55359..1e3f47e 100644
--- a/sw/Makefile
+++ b/sw/device/Makefile
@@ -23,14 +23,14 @@
 
 
 # Generate a baremetal application for the microcontroller
-SW_ROOT_DIR   := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
-SW_DIR        ?= device/examples/hello_world
+SW_ROOT_DIR   := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))/..
+SW_DIR        ?= examples/hello_world
 
 # sources
 STANDALONE_SW ?= 0
 include ${SW_DIR}/srcs.mk
-include device/exts/common/srcs.mk
-include device/lib/srcs.mk
+include exts/common/srcs.mk
+include lib/srcs.mk
 
 # common options and rules
 include opts.mk
diff --git a/sw/doc/sw_build_flow.md b/sw/device/doc/sw_build_flow.md
similarity index 88%
rename from sw/doc/sw_build_flow.md
rename to sw/device/doc/sw_build_flow.md
index 5ff186b..eb2e206 100644
--- a/sw/doc/sw_build_flow.md
+++ b/sw/device/doc/sw_build_flow.md
@@ -50,18 +50,18 @@
 the files listed below for more details.
 
 ## Organization
-The SW build Makefiles are organized as follows:
+The SW device build Makefiles are organized as follows:
 
-- **`sw/Makefile`**: The top level SW build Makefile (`sw/Makefile`). All of the
+- **`sw/device/Makefile`**: The top level SW build Makefile (`sw/device/Makefile`). All of the
   sub-make files are included directly or indirectly into this. This is the
   starting point for compiling any target.
 
-- **`sw/opts.mk`**: All commonly used Make variables in one place. This sub-make
+- **`sw/device/opts.mk`**: All commonly used Make variables in one place. This sub-make
   file is also used to check if certain switches are enabled and further modify /
   customize the flow for target being built. An example of this is using the `TARGET`
   variable to change how SW is built for DV vs FPGA / Verilator / production SW.
 
-- **`sw/rules.mk`**: All rules for generating all the outputs in one place.
+- **`sw/device/rules.mk`**: All rules for generating all the outputs in one place.
 
 These three form the *base-make files* for the SW build. Any directory containing
 sources for building the SW needs to have an associated `srcs.mk` sub-make file
@@ -91,14 +91,14 @@
 
 ## How to build SW
 The examples indicated below assume that the present working directory is
-`SW_ROOT_DIR`. As indicated in the previous sections, `SW_DIR` and `SW_NAME` are
+`$(SW_ROOT_DIR)/device`. As indicated in the previous sections, `SW_DIR` and `SW_NAME` are
 mandatory variables that need to be set correctly on the command line. `SW_NAME`
 is optional if `SW_DIR` has only one SW target and `SW_NAME` is set in
 `$(SW_DIR)/srcs.mk` file. `SW_BUILD_DIR` is optional.
 
 Build boot_rom:
 ```console
-$ make SW_DIR=device/boot_rom SW_NAME=boot_rom
+$ make SW_DIR=boot_rom SW_NAME=boot_rom
 ```
 
 This will build the boot_rom image in the device/boot_rom directly itself. SW_NAME in
@@ -107,15 +107,15 @@
 
 - Build the boot_rom in a separate build directory:
 ```console
-$ make SW_DIR=device/boot_rom SW_BUILD_DIR=path/to/scratch
+$ make SW_DIR=boot_rom SW_BUILD_DIR=path/to/scratch
 ```
 
 - Build hello_world test:
 ```console
-$ make SW_DIR=device/examples/hello_world SW_NAME=hello_world SW_BUILD_DIR=path/to/scratch
+$ make SW_DIR=examples/hello_world SW_NAME=hello_world SW_BUILD_DIR=path/to/scratch
 ```
 
 - Build sha256 test:
 ```console
-$ make SW_DIR=device/tests/hmac SW_NAME=sha256_test
+$ make SW_DIR=tests/hmac SW_NAME=sha256_test
 ```
diff --git a/sw/opts.mk b/sw/device/opts.mk
similarity index 95%
rename from sw/opts.mk
rename to sw/device/opts.mk
index d0d21d8..0b33b0c 100644
--- a/sw/opts.mk
+++ b/sw/device/opts.mk
@@ -21,7 +21,7 @@
 SW_OBJS       += $(addprefix $(SW_BUILD_DIR)/, $(addsuffix .o, $(basename $(notdir $(SW_SRCS)))))
 SW_PPOS       += $(SW_OBJS:.o=.ppo)
 SW_DEPS       ?= lib
-SW_BUILD_DIR  ?= $(SW_ROOT_DIR)/$(SW_DIR)
+SW_BUILD_DIR  ?= $(SW_ROOT_DIR)/device/$(SW_DIR)
 
 LIB_NAME      ?= ot
 LIB_DIR       ?= $(SW_ROOT_DIR)/device/lib
@@ -31,10 +31,10 @@
 LIB_PPOS      += $(LIB_OBJS:.o=.ppo)
 LIB_BUILD_DIR ?= $(SW_BUILD_DIR)/lib
 
-GEN_HDRS_DIR  ?= $(SW_ROOT_DIR)/generated
+GEN_HDRS_DIR  ?= $(SW_ROOT_DIR)/device/generated
 
 DEPS          += $(SW_OBJS:%.o=%.d) $(LIB_OBJS:%.o=%.d)
-INCS          += -I.. -I$(LIB_BUILD_DIR)
+INCS          += -I../.. -I$(LIB_BUILD_DIR)
 
 LINK_OPTS     += -T $(LINKER_SCRIPT)
 LINK_OPTS     += $(SW_OBJS) -L$(LIB_BUILD_DIR) -l$(LIB_NAME)
diff --git a/sw/rules.mk b/sw/device/rules.mk
similarity index 100%
rename from sw/rules.mk
rename to sw/device/rules.mk
diff --git a/sw/host/spiflash/README.md b/sw/host/spiflash/README.md
index e85c361..e113e24 100644
--- a/sw/host/spiflash/README.md
+++ b/sw/host/spiflash/README.md
@@ -33,13 +33,13 @@
 Build `boot_rom`:
 ```console
 $ cd ${REPO_TOP}
-$ make -C sw SW_DIR=boot_rom clean all
+$ make -C sw/device SW_DIR=boot_rom clean all
 ```
 
 Build `hello_world` program:
 ```console
 $ cd ${REPO_TOP}
-$ make -C sw SW_DIR=examples/hello_world clean all
+$ make -C sw/device SW_DIR=examples/hello_world clean all
 ```
 
 ## Run the tool in Verilator
diff --git a/util/fpga/splice_nexysvideo.sh b/util/fpga/splice_nexysvideo.sh
index 062223d..af895fe 100755
--- a/util/fpga/splice_nexysvideo.sh
+++ b/util/fpga/splice_nexysvideo.sh
@@ -19,7 +19,7 @@
 FPGA_BUILD_DIR=build/lowrisc_systems_top_earlgrey_nexysvideo_0.1/synth-vivado/
 FPGA_BIT_NAME=lowrisc_systems_top_earlgrey_nexysvideo_0.1
 
-make -C sw "SW_BUILD_DIR=${BUILD_DIR}" SW_DIR=boot_rom distclean all
+make -C sw/device "SW_BUILD_DIR=../${BUILD_DIR}" SW_DIR=boot_rom distclean all
 
 srec_cat ${TARGET_PREFIX}.bin -binary -offset 0x0 -o ${TARGET_PREFIX}.brammem \
   -vmem -Output_Block_Size 4;