diff --git a/arch/mn10300/Makefile b/arch/mn10300/Makefile
index a5985ee9414000b30a851fc7954fcb7d4a111e4b..dd0c8ff52a682b6c622bdc3cd9be939760c0b561 100644
--- a/arch/mn10300/Makefile
+++ b/arch/mn10300/Makefile
@@ -94,42 +94,8 @@ ifdef CONFIG_DEBUG_INFO
 KBUILD_AFLAGS	+= -Wa,--gdwarf2
 endif
 
-###################################################################################################
 #
-# juggle some symlinks in the MN10300 asm include dir
+# include the appropriate processor- and unit-specific headers
 #
-#	Update machine proc and unit symlinks if something which affects
-#	them changed.  We use .proc / .unit to indicate when they were
-#	updated last, otherwise make uses the target directory mtime.
-#
-###################################################################################################
-
-# processor specific definitions
-arch/mn10300/include/asm/.proc: $(wildcard include/config/proc/*.h) include/config/auto.conf
-	@echo '  SYMLINK arch/mn10300/include/asm/proc -> arch/mn10300/include/asm/proc-$(PROCESSOR)'
-ifneq ($(KBUILD_SRC),)
-	$(Q)mkdir -p arch/mn10300/include/asm
-	$(Q)ln -fsn $(srctree)/arch/mn10300/include/asm/proc-$(PROCESSOR) arch/mn10300/include/asm/proc
-else
-	$(Q)ln -fsn proc-$(PROCESSOR) arch/mn10300/include/asm/proc
-endif
-	@touch $@
-
-CLEAN_FILES += arch/mn10300/include/asm/proc arch/mn10300/include/asm/.proc
-
-prepare: arch/mn10300/include/asm/.proc
-
-# unit specific definitions
-arch/mn10300/include/asm/.unit: $(wildcard include/config/unit/*.h) include/config/auto.conf
-	@echo '  SYMLINK arch/mn10300/include/asm/unit -> arch/mn10300/include/asm/unit-$(UNIT)'
-ifneq ($(KBUILD_SRC),)
-	$(Q)mkdir -p arch/mn10300/include/asm
-	$(Q)ln -fsn $(srctree)/arch/mn10300/include/asm/unit-$(UNIT) arch/mn10300/include/asm/unit
-else
-	$(Q)ln -fsn unit-$(UNIT) arch/mn10300/include/asm/unit
-endif
-	@touch $@
-
-CLEAN_FILES += arch/mn10300/include/asm/unit arch/mn10300/include/asm/.unit
-
-prepare: arch/mn10300/include/asm/.unit
+KBUILD_CPPFLAGS += -I$(srctree)/arch/mn10300/proc-$(PROCESSOR)/include
+KBUILD_CPPFLAGS += -I$(srctree)/arch/mn10300/unit-$(UNIT)/include
diff --git a/arch/mn10300/include/asm/cache.h b/arch/mn10300/include/asm/cache.h
index 9e01122208a93fe497e48cf2398699b11874c2dc..e03cfa2e997e7299e1215a3a8c25a516d19d6751 100644
--- a/arch/mn10300/include/asm/cache.h
+++ b/arch/mn10300/include/asm/cache.h
@@ -13,7 +13,7 @@
 #define _ASM_CACHE_H
 
 #include <asm/cpu-regs.h>
-#include <asm/proc/cache.h>
+#include <proc/cache.h>
 
 #ifndef __ASSEMBLY__
 #define L1_CACHE_DISPARITY	(L1_CACHE_NENTRIES * L1_CACHE_BYTES)
diff --git a/arch/mn10300/include/asm/irq.h b/arch/mn10300/include/asm/irq.h
index 53b380116901941719268873414c2302b6648b80..25c045d16d1c49fd2d85be264429c3f2549ccfd9 100644
--- a/arch/mn10300/include/asm/irq.h
+++ b/arch/mn10300/include/asm/irq.h
@@ -16,7 +16,7 @@
 
 #include <asm/intctl-regs.h>
 #include <asm/reset-regs.h>
-#include <asm/proc/irq.h>
+#include <proc/irq.h>
 
 /* this number is used when no interrupt has been assigned */
 #define NO_IRQ		INT_MAX
diff --git a/arch/mn10300/include/asm/serial.h b/arch/mn10300/include/asm/serial.h
index 99785a9deadbb2600f04c56f4d0b6a4b216a49d8..a29445cddd6fc559f631ba9a571aa4fcbbd0dde6 100644
--- a/arch/mn10300/include/asm/serial.h
+++ b/arch/mn10300/include/asm/serial.h
@@ -33,4 +33,4 @@
 #define RS_TABLE_SIZE
 #endif
 
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
diff --git a/arch/mn10300/include/asm/timex.h b/arch/mn10300/include/asm/timex.h
index 3944277dab67f48654d12d7f52b206f73a29322c..8d031f9e117d7db554bf3802cd357d36bbbb110b 100644
--- a/arch/mn10300/include/asm/timex.h
+++ b/arch/mn10300/include/asm/timex.h
@@ -12,7 +12,7 @@
 #define _ASM_TIMEX_H
 
 #include <asm/hardirq.h>
-#include <asm/unit/timex.h>
+#include <unit/timex.h>
 
 #define TICK_SIZE (tick_nsec / 1000)
 
diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S
index ceeaaaa359e231431838c003c5d8cc20f56f7918..34ab5a293153b2eb8637d738faa880dde2a5aeea 100644
--- a/arch/mn10300/kernel/entry.S
+++ b/arch/mn10300/kernel/entry.S
@@ -20,7 +20,7 @@
 #include <asm/intctl-regs.h>
 #include <asm/busctl-regs.h>
 #include <asm/timer-regs.h>
-#include <asm/unit/leds.h>
+#include <unit/leds.h>
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/errno.h>
diff --git a/arch/mn10300/kernel/gdb-io-serial-low.S b/arch/mn10300/kernel/gdb-io-serial-low.S
index c68dcd05220101e91877c05f6825386824bf4b4b..4998b24f5d3a4e2081e3983b3b0e43cdf86bc670 100644
--- a/arch/mn10300/kernel/gdb-io-serial-low.S
+++ b/arch/mn10300/kernel/gdb-io-serial-low.S
@@ -18,7 +18,7 @@
 #include <asm/thread_info.h>
 #include <asm/frame.inc>
 #include <asm/intctl-regs.h>
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
 
 	.text
 
diff --git a/arch/mn10300/kernel/gdb-io-serial.c b/arch/mn10300/kernel/gdb-io-serial.c
index 11584c51acd93669dfe587cd2983ca81663397b5..ae663dc717e94ab807fbeb3169955e8fbaebd04b 100644
--- a/arch/mn10300/kernel/gdb-io-serial.c
+++ b/arch/mn10300/kernel/gdb-io-serial.c
@@ -22,7 +22,7 @@
 #include <asm/gdb-stub.h>
 #include <asm/exceptions.h>
 #include <asm/serial-regs.h>
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
 
 /*
  * initialise the GDB stub
diff --git a/arch/mn10300/kernel/gdb-io-ttysm-low.S b/arch/mn10300/kernel/gdb-io-ttysm-low.S
index 677c7876307ca1abdc2a6dedbe829882894bc599..060b7cca735ddb70291d10d116668a3000a85de7 100644
--- a/arch/mn10300/kernel/gdb-io-ttysm-low.S
+++ b/arch/mn10300/kernel/gdb-io-ttysm-low.S
@@ -18,7 +18,7 @@
 #include <asm/cpu-regs.h>
 #include <asm/frame.inc>
 #include <asm/intctl-regs.h>
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
 #include "mn10300-serial.h"
 
 	.text
diff --git a/arch/mn10300/kernel/gdb-io-ttysm.c b/arch/mn10300/kernel/gdb-io-ttysm.c
index e94c25e8ca058e47d077060a76c3d12c7db7e910..a560bbc3137d3c93fd2a14eddbb79ed5b8abc23f 100644
--- a/arch/mn10300/kernel/gdb-io-ttysm.c
+++ b/arch/mn10300/kernel/gdb-io-ttysm.c
@@ -20,7 +20,7 @@
 #include <asm/system.h>
 #include <asm/gdb-stub.h>
 #include <asm/exceptions.h>
-#include <asm/unit/clock.h>
+#include <unit/clock.h>
 #include "mn10300-serial.h"
 
 #if defined(CONFIG_GDBSTUB_ON_TTYSM0)
diff --git a/arch/mn10300/kernel/gdb-stub.c b/arch/mn10300/kernel/gdb-stub.c
index 0ea7482c1522712d73af221a199f8fa7c0b78738..41b11706c8ed1ee70f0742bec2d9ac301187aea1 100644
--- a/arch/mn10300/kernel/gdb-stub.c
+++ b/arch/mn10300/kernel/gdb-stub.c
@@ -136,8 +136,8 @@
 #include <asm/cacheflush.h>
 #include <asm/serial-regs.h>
 #include <asm/busctl-regs.h>
-#include <asm/unit/leds.h>
-#include <asm/unit/serial.h>
+#include <unit/leds.h>
+#include <unit/serial.h>
 
 /* define to use F7F7 rather than FF which is subverted by JTAG debugger */
 #undef GDBSTUB_USE_F7F7_AS_BREAKPOINT
diff --git a/arch/mn10300/kernel/head.S b/arch/mn10300/kernel/head.S
index 606bd8c6758d011be7ba26039f4039728a095e30..8a8309fbe3c4de9db158920e472ec9a68df7527a 100644
--- a/arch/mn10300/kernel/head.S
+++ b/arch/mn10300/kernel/head.S
@@ -17,7 +17,7 @@
 #include <asm/pgtable.h>
 #include <asm/frame.inc>
 #include <asm/param.h>
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
 
 	.section .text.head,"ax"
 
diff --git a/arch/mn10300/kernel/mn10300-serial-low.S b/arch/mn10300/kernel/mn10300-serial-low.S
index ef3f4c1df2a4cb88fab88a56225f295a751dc0c5..2244853882283a1070e844e8a8ddc088af19e632 100644
--- a/arch/mn10300/kernel/mn10300-serial-low.S
+++ b/arch/mn10300/kernel/mn10300-serial-low.S
@@ -18,8 +18,8 @@
 #include <asm/cpu-regs.h>
 #include <asm/frame.inc>
 #include <asm/timer-regs.h>
-#include <asm/proc/cache.h>
-#include <asm/unit/timex.h>
+#include <proc/cache.h>
+#include <unit/timex.h>
 #include "mn10300-serial.h"
 
 #define	SCxCTR	0x00
diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c
index 59b9c4bf9583a67e8e1467576d6e7fc49125eca7..2fd59664d00ab1b60cd782ab31d4647a559387d6 100644
--- a/arch/mn10300/kernel/mn10300-serial.c
+++ b/arch/mn10300/kernel/mn10300-serial.c
@@ -41,7 +41,7 @@ static const char serial_revdate[] = "2007-11-06";
 #include <asm/irq.h>
 #include <asm/bitops.h>
 #include <asm/serial-regs.h>
-#include <asm/unit/timex.h>
+#include <unit/timex.h>
 #include "mn10300-serial.h"
 
 static inline __attribute__((format(printf, 1, 2)))
diff --git a/arch/mn10300/kernel/mn10300-watchdog.c b/arch/mn10300/kernel/mn10300-watchdog.c
index 2e370d88a87a22d7302f6dd386bf85a7dbe2ae97..f362d9d138f1ad90012d5fa5e69f1f8b387dbcba 100644
--- a/arch/mn10300/kernel/mn10300-watchdog.c
+++ b/arch/mn10300/kernel/mn10300-watchdog.c
@@ -25,7 +25,7 @@
 #include <asm/div64.h>
 #include <asm/smp.h>
 #include <asm/gdb-stub.h>
-#include <asm/proc/clock.h>
+#include <proc/clock.h>
 
 static DEFINE_SPINLOCK(watchdog_print_lock);
 static unsigned int watchdog;
diff --git a/arch/mn10300/kernel/setup.c b/arch/mn10300/kernel/setup.c
index e1d88ab51008896ce6fa423d6e8e1fd1ce5b3672..71414e19fd166441198cd789feaddcbb47c6961a 100644
--- a/arch/mn10300/kernel/setup.c
+++ b/arch/mn10300/kernel/setup.c
@@ -30,7 +30,7 @@
 #include <asm/setup.h>
 #include <asm/io.h>
 #include <asm/smp.h>
-#include <asm/proc/proc.h>
+#include <proc/proc.h>
 #include <asm/busctl-regs.h>
 #include <asm/fpu.h>
 #include <asm/sections.h>
diff --git a/arch/mn10300/kernel/traps.c b/arch/mn10300/kernel/traps.c
index fcb9a03d46a8a33212b852354b9928b9c575a6e0..681ad8c9e4fb68b59eebd992a7ee32f8be747e18 100644
--- a/arch/mn10300/kernel/traps.c
+++ b/arch/mn10300/kernel/traps.c
@@ -37,7 +37,7 @@
 #include <asm/cacheflush.h>
 #include <asm/cpu-regs.h>
 #include <asm/busctl-regs.h>
-#include <asm/unit/leds.h>
+#include <unit/leds.h>
 #include <asm/fpu.h>
 #include <asm/gdb-stub.h>
 #include <asm/sections.h>
diff --git a/arch/mn10300/include/asm/proc-mn103e010/cache.h b/arch/mn10300/proc-mn103e010/include/proc/cache.h
similarity index 100%
rename from arch/mn10300/include/asm/proc-mn103e010/cache.h
rename to arch/mn10300/proc-mn103e010/include/proc/cache.h
diff --git a/arch/mn10300/include/asm/proc-mn103e010/clock.h b/arch/mn10300/proc-mn103e010/include/proc/clock.h
similarity index 94%
rename from arch/mn10300/include/asm/proc-mn103e010/clock.h
rename to arch/mn10300/proc-mn103e010/include/proc/clock.h
index caf9983506338882d943768f87a348861bd29775..aa23e147d620f3d1d3b3fbce9641862d2dcb7e95 100644
--- a/arch/mn10300/include/asm/proc-mn103e010/clock.h
+++ b/arch/mn10300/proc-mn103e010/include/proc/clock.h
@@ -11,7 +11,7 @@
 #ifndef _ASM_PROC_CLOCK_H
 #define _ASM_PROC_CLOCK_H
 
-#include <asm/unit/clock.h>
+#include <unit/clock.h>
 
 #define MN10300_WDCLK		MN10300_IOCLK
 
diff --git a/arch/mn10300/include/asm/proc-mn103e010/irq.h b/arch/mn10300/proc-mn103e010/include/proc/irq.h
similarity index 100%
rename from arch/mn10300/include/asm/proc-mn103e010/irq.h
rename to arch/mn10300/proc-mn103e010/include/proc/irq.h
diff --git a/arch/mn10300/include/asm/proc-mn103e010/proc.h b/arch/mn10300/proc-mn103e010/include/proc/proc.h
similarity index 100%
rename from arch/mn10300/include/asm/proc-mn103e010/proc.h
rename to arch/mn10300/proc-mn103e010/include/proc/proc.h
diff --git a/arch/mn10300/include/asm/unit-asb2303/clock.h b/arch/mn10300/unit-asb2303/include/unit/clock.h
similarity index 100%
rename from arch/mn10300/include/asm/unit-asb2303/clock.h
rename to arch/mn10300/unit-asb2303/include/unit/clock.h
diff --git a/arch/mn10300/include/asm/unit-asb2303/leds.h b/arch/mn10300/unit-asb2303/include/unit/leds.h
similarity index 100%
rename from arch/mn10300/include/asm/unit-asb2303/leds.h
rename to arch/mn10300/unit-asb2303/include/unit/leds.h
diff --git a/arch/mn10300/include/asm/unit-asb2303/serial.h b/arch/mn10300/unit-asb2303/include/unit/serial.h
similarity index 99%
rename from arch/mn10300/include/asm/unit-asb2303/serial.h
rename to arch/mn10300/unit-asb2303/include/unit/serial.h
index 0d55cf5896ac3912bfeee4bb479b0951e9c4a804..047566cd2e36d2677b33803c13384f906f17c0b7 100644
--- a/arch/mn10300/include/asm/unit-asb2303/serial.h
+++ b/arch/mn10300/unit-asb2303/include/unit/serial.h
@@ -13,7 +13,7 @@
 #define _ASM_UNIT_SERIAL_H
 
 #include <asm/cpu-regs.h>
-#include <asm/proc/irq.h>
+#include <proc/irq.h>
 #include <linux/serial_reg.h>
 
 #define SERIAL_PORT0_BASE_ADDRESS	0xA6FB0000
diff --git a/arch/mn10300/include/asm/unit-asb2303/smc91111.h b/arch/mn10300/unit-asb2303/include/unit/smc91111.h
similarity index 100%
rename from arch/mn10300/include/asm/unit-asb2303/smc91111.h
rename to arch/mn10300/unit-asb2303/include/unit/smc91111.h
diff --git a/arch/mn10300/include/asm/unit-asb2303/timex.h b/arch/mn10300/unit-asb2303/include/unit/timex.h
similarity index 98%
rename from arch/mn10300/include/asm/unit-asb2303/timex.h
rename to arch/mn10300/unit-asb2303/include/unit/timex.h
index 7e54b0cfdd0371d225d3ce639bb4fe7b0b660df4..f206b63c95b4f282114315870d12458a19c6a700 100644
--- a/arch/mn10300/include/asm/unit-asb2303/timex.h
+++ b/arch/mn10300/unit-asb2303/include/unit/timex.h
@@ -16,7 +16,7 @@
 #endif /* __ASSEMBLY__ */
 
 #include <asm/timer-regs.h>
-#include <asm/unit/clock.h>
+#include <unit/clock.h>
 
 /*
  * jiffies counter specifications
diff --git a/arch/mn10300/unit-asb2303/leds.c b/arch/mn10300/unit-asb2303/leds.c
index cd4bc78ccfc819f83ebac006d67b93f25cb1ca08..c03839357a140e67ede804f1da357a5f7d0f42a0 100644
--- a/arch/mn10300/unit-asb2303/leds.c
+++ b/arch/mn10300/unit-asb2303/leds.c
@@ -16,7 +16,7 @@
 #include <asm/processor.h>
 #include <asm/intctl-regs.h>
 #include <asm/rtc-regs.h>
-#include <asm/unit/leds.h>
+#include <unit/leds.h>
 
 #if 0
 static const u8 asb2303_led_hex_tbl[16] = {
diff --git a/arch/mn10300/unit-asb2303/smc91111.c b/arch/mn10300/unit-asb2303/smc91111.c
index 30875dd65631859bc79e5aecd45801f4e3510138..43c246439413b8c5f70d9b50d79b733443e42882 100644
--- a/arch/mn10300/unit-asb2303/smc91111.c
+++ b/arch/mn10300/unit-asb2303/smc91111.c
@@ -18,7 +18,7 @@
 #include <asm/timex.h>
 #include <asm/processor.h>
 #include <asm/intctl-regs.h>
-#include <asm/unit/smc91111.h>
+#include <unit/smc91111.h>
 
 static struct resource smc91c111_resources[] = {
 	[0] = {
diff --git a/arch/mn10300/include/asm/unit-asb2305/clock.h b/arch/mn10300/unit-asb2305/include/unit/clock.h
similarity index 100%
rename from arch/mn10300/include/asm/unit-asb2305/clock.h
rename to arch/mn10300/unit-asb2305/include/unit/clock.h
diff --git a/arch/mn10300/include/asm/unit-asb2305/leds.h b/arch/mn10300/unit-asb2305/include/unit/leds.h
similarity index 100%
rename from arch/mn10300/include/asm/unit-asb2305/leds.h
rename to arch/mn10300/unit-asb2305/include/unit/leds.h
diff --git a/arch/mn10300/include/asm/unit-asb2305/serial.h b/arch/mn10300/unit-asb2305/include/unit/serial.h
similarity index 99%
rename from arch/mn10300/include/asm/unit-asb2305/serial.h
rename to arch/mn10300/unit-asb2305/include/unit/serial.h
index 73d31d67bb71f199903bf1f7285751c0b164cf12..3bfc909387873d0586a34a4a1a38541e83eb5dd5 100644
--- a/arch/mn10300/include/asm/unit-asb2305/serial.h
+++ b/arch/mn10300/unit-asb2305/include/unit/serial.h
@@ -12,7 +12,7 @@
 #define _ASM_UNIT_SERIAL_H
 
 #include <asm/cpu/cpu-regs.h>
-#include <asm/proc/irq.h>
+#include <proc/irq.h>
 #include <linux/serial_reg.h>
 
 #define SERIAL_PORT0_BASE_ADDRESS	0xA6FB0000
diff --git a/arch/mn10300/include/asm/unit-asb2305/timex.h b/arch/mn10300/unit-asb2305/include/unit/timex.h
similarity index 98%
rename from arch/mn10300/include/asm/unit-asb2305/timex.h
rename to arch/mn10300/unit-asb2305/include/unit/timex.h
index 10e1bfe344632ee8e03de981bf9b68bbab34a233..a71c49aa85ebff419664b4db389788b8be5ad94f 100644
--- a/arch/mn10300/include/asm/unit-asb2305/timex.h
+++ b/arch/mn10300/unit-asb2305/include/unit/timex.h
@@ -16,7 +16,7 @@
 #endif /* __ASSEMBLY__ */
 
 #include <asm/cpu/timer-regs.h>
-#include <asm/unit/clock.h>
+#include <unit/clock.h>
 
 /*
  * jiffies counter specifications
diff --git a/arch/mn10300/unit-asb2305/leds.c b/arch/mn10300/unit-asb2305/leds.c
index e99dcc9cee1ad072de134f02fe691377b9051df2..d345ff9042d5943853769b581af0301b7ae7936f 100644
--- a/arch/mn10300/unit-asb2305/leds.c
+++ b/arch/mn10300/unit-asb2305/leds.c
@@ -15,7 +15,7 @@
 #include <asm/processor.h>
 #include <asm/cpu/intctl-regs.h>
 #include <asm/cpu/rtc-regs.h>
-#include <asm/unit/leds.h>
+#include <unit/leds.h>
 
 static const u8 asb2305_led_hex_tbl[16] = {
 	0x80, 0xf2, 0x48, 0x60, 0x32, 0x24, 0x04, 0xf0,
diff --git a/arch/mn10300/unit-asb2305/unit-init.c b/arch/mn10300/unit-asb2305/unit-init.c
index 72812a9439ac0d26ea30f4cf2fc62099efc3735c..1c452cc3f6e99c783dd108df11e80ebabd3af4fc 100644
--- a/arch/mn10300/unit-asb2305/unit-init.c
+++ b/arch/mn10300/unit-asb2305/unit-init.c
@@ -18,7 +18,7 @@
 #include <asm/cpu/intctl-regs.h>
 #include <asm/cpu/rtc-regs.h>
 #include <asm/cpu/serial-regs.h>
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
 
 /*
  * initialise some of the unit hardware before gdbstub is set up
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h
index 912308eec8657ed9db7528dff8cb69f37c2f3772..329f890e2903075c23cea798acbb5f79e3f12196 100644
--- a/drivers/net/smc91x.h
+++ b/drivers/net/smc91x.h
@@ -369,7 +369,7 @@ static inline void LPD7_SMC_outsw (unsigned char* a, int r,
  * MN10300/AM33 configuration
  */
 
-#include <asm/unit/smc91111.h>
+#include <unit/smc91111.h>
 
 #else