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
 
 #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)
 
 
 #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
 
 #define RS_TABLE_SIZE
 #endif
 
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
 
 #define _ASM_TIMEX_H
 
 #include <asm/hardirq.h>
-#include <asm/unit/timex.h>
+#include <unit/timex.h>
 
 #define TICK_SIZE (tick_nsec / 1000)
 
 
 #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>
 
 #include <asm/thread_info.h>
 #include <asm/frame.inc>
 #include <asm/intctl-regs.h>
-#include <asm/unit/serial.h>
+#include <unit/serial.h>
 
        .text
 
 
 #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
 
 #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
 
 #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)
 
 #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
 
 #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"
 
 
 #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
 
 #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)))
 
 #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;
 
 #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>
 
 #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>
 
 #ifndef _ASM_PROC_CLOCK_H
 #define _ASM_PROC_CLOCK_H
 
-#include <asm/unit/clock.h>
+#include <unit/clock.h>
 
 #define MN10300_WDCLK          MN10300_IOCLK
 
 
 #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
 
 #endif /* __ASSEMBLY__ */
 
 #include <asm/timer-regs.h>
-#include <asm/unit/clock.h>
+#include <unit/clock.h>
 
 /*
  * jiffies counter specifications
 
 #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] = {
 
 #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] = {
 
 #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
 
 #endif /* __ASSEMBLY__ */
 
 #include <asm/cpu/timer-regs.h>
-#include <asm/unit/clock.h>
+#include <unit/clock.h>
 
 /*
  * jiffies counter specifications
 
 #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,
 
 #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
 
  * MN10300/AM33 configuration
  */
 
-#include <asm/unit/smc91111.h>
+#include <unit/smc91111.h>
 
 #else