diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh
index 4720130252fa03aa68c160b1f95da750cfa6b494..5fad72815f736ba21bb3819ef69e195d57a4e27c 100755
--- a/target/linux/ramips/base-files/etc/diag.sh
+++ b/target/linux/ramips/base-files/etc/diag.sh
@@ -39,6 +39,9 @@ get_status_led() {
 	dir-300-b1 | dir-600-b1 | dir-600-b2 | dir-615-h1 | dir-620-a1)
 		status_led="d-link:green:status"
 		;;
+	dir-645)
+		status_led="d-link:green:wps"
+		;;
 	dap-1350)
 		status_led="d-link:blue:power"
 		;;
diff --git a/target/linux/ramips/base-files/etc/uci-defaults/fixseama b/target/linux/ramips/base-files/etc/uci-defaults/fixseama
new file mode 100755
index 0000000000000000000000000000000000000000..d8bed795144986f2c519e5a531fc3f1855f43828
--- /dev/null
+++ b/target/linux/ramips/base-files/etc/uci-defaults/fixseama
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Copyright (C) 2012 OpenWrt.org
+#
+
+. /lib/ramips.sh
+
+fix_seama_header() {
+	local part=$1
+
+	mtd fixseama $part
+}
+
+board=$(ramips_board_name)
+
+case "$board" in
+dir-645)
+	fix_seama_header kernel
+	;;
+esac
diff --git a/target/linux/ramips/base-files/etc/uci-defaults/network b/target/linux/ramips/base-files/etc/uci-defaults/network
index bbb02e8627d160731e39bf49675e25f343424e5b..de33acb44982714119170c7a8fd798204d2bfb7b 100755
--- a/target/linux/ramips/base-files/etc/uci-defaults/network
+++ b/target/linux/ramips/base-files/etc/uci-defaults/network
@@ -63,6 +63,13 @@ ramips_setup_interfaces()
 		ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
 		;;
 
+	dir-645)
+		ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+		ucidef_add_switch "switch0" "1" "1"
+		ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 6t"
+		ucidef_add_switch_vlan "switch0" "2" "0 6t"
+		;;
+
 	f5d8235-v1 | \
 	f5d8235-v2 | \
 	ur-336un)
@@ -159,6 +166,11 @@ ramips_setup_macs()
 		wan_mac=$(/usr/sbin/maccalc add "$lan_mac" 1)
 		;;
 
+	dir-645)
+		lan_mac=$(ramips_get_mac_nvram nvram lanmac)
+		wan_mac=$(ramips_get_mac_nvram nvram wanmac)
+		;;
+
 	esr-9753 | \
 	ur-336un)
 		lan_mac=$(ramips_get_mac_binary devdata 16388)
diff --git a/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac b/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
index 591c549d140db98f3526e7143a9d63672f4988d5..0ff21892d6f5e4a210e6b94ff89b0de8d3173f78 100644
--- a/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
+++ b/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
@@ -30,6 +30,11 @@ preinit_set_mac_address() {
                 mac=$(ramips_get_mac_binary devdata 16388)
                 ifconfig eth0 hw ether $mac 2>/dev/null
                 ;;
+	dir-645)
+		mac=$(ramips_get_mac_nvram nvram lanmac)
+		mac=$(maccalc or "$mac" "02:00:00:00:00:00")
+		ifconfig eth0 hw ether $mac 2>/dev/null
+		;;
 	dap-1350)
 		mac=$(ramips_get_mac_binary devdata 46)
 		ifconfig eth0 hw ether $mac 2>/dev/null
diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh
index 90c28b7ab69f654f055f1269963c75293605e9e2..90afa49bb45d63dcbe14078e9badc239a8a72045 100755
--- a/target/linux/ramips/base-files/lib/ramips.sh
+++ b/target/linux/ramips/base-files/lib/ramips.sh
@@ -92,6 +92,9 @@ ramips_board_name() {
 	*"DIR-615 H1")
 		name="dir-615-h1"
 		;;
+	*"DIR-645")
+		name="dir-645"
+		;;
         *"DAP-1350")
                 name="dap-1350"
                 ;;
diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh
index 2857599d0bfd58298b179039fe0be6fb27a47541..ba04a4a4aa8c58d030b8d4994b25a8f7a133575b 100755
--- a/target/linux/ramips/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh
@@ -57,6 +57,13 @@ platform_check_image() {
 		}
 		return 0
 		;;
+	dir-645)
+		[ "$magic" != "5ea3a417" ] && {
+			echo "Invalid image type."
+			return 1
+		}
+		return 0
+		;;
 	esac
 
 	echo "Sysupgrade is not yet supported on $board."