diff --git a/toolchain/musl/patches/010-Add-PowerPC-soft-float-support.patch b/toolchain/musl/patches/010-Add-PowerPC-soft-float-support.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7dfb7ed0196abcce9d835bd0fb1ef0f0e6a1d21a
--- /dev/null
+++ b/toolchain/musl/patches/010-Add-PowerPC-soft-float-support.patch
@@ -0,0 +1,141 @@
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Wed, 8 Jul 2015 13:56:37 +0200
+Subject: [PATCH] Add PowerPC soft-float support
+
+Some PowerPC CPUs (e.g. Freescale MPC85xx) have a completely different
+instruction set for floating point operations (SPE).
+Executing regular PowerPC floating point instructions results in
+"Illegal instruction" errors.
+
+Until support for SPE FPU is added, make it possible to run these
+devices in soft-float mode.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+---
+ create mode 100644 src/fenv/powerpc-sf/fenv.sub
+ create mode 100644 src/setjmp/powerpc-sf/longjmp.s
+ create mode 100644 src/setjmp/powerpc-sf/longjmp.sub
+ create mode 100644 src/setjmp/powerpc-sf/setjmp.s
+ create mode 100644 src/setjmp/powerpc-sf/setjmp.sub
+
+--- a/configure
++++ b/configure
+@@ -498,6 +498,10 @@ trycppif "_MIPSEL || __MIPSEL || __MIPSE
+ trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
+ fi
+ 
++if test "$ARCH" = "powerpc" ; then
++trycppif _SOFT_FLOAT "$t" && SUBARCH=${SUBARCH}-sf
++fi
++
+ test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \
+ && SUBARCH=${SUBARCH}el
+ 
+--- /dev/null
++++ b/src/fenv/powerpc-sf/fenv.sub
+@@ -0,0 +1 @@
++../fenv.c
+--- /dev/null
++++ b/src/setjmp/powerpc-sf/longjmp.s
+@@ -0,0 +1,47 @@
++	.global _longjmp
++	.global longjmp
++	.type   _longjmp,@function
++	.type   longjmp,@function
++_longjmp:
++longjmp:
++# void longjmp(jmp_buf env, int val);
++# put val into return register and restore the env saved in setjmp
++# if val(r4) is 0, put 1 there.
++	# 0) move old return address into r0
++	lwz 0, 0(3)
++	# 1) put it into link reg
++	mtlr 0
++	#2 ) restore stack ptr
++	lwz 1, 4(3)
++	#3) restore control reg
++	lwz 0, 8(3)
++	mtcr 0
++	#4) restore r14-r31
++	lwz 14, 12(3)
++	lwz 15, 16(3)
++	lwz 16, 20(3)
++	lwz 17, 24(3)
++	lwz 18, 28(3)
++	lwz 19, 32(3)
++	lwz 20, 36(3)
++	lwz 21, 40(3)
++	lwz 22, 44(3)
++	lwz 23, 48(3)
++	lwz 24, 52(3)
++	lwz 25, 56(3)
++	lwz 26, 60(3)
++	lwz 27, 64(3)
++	lwz 28, 68(3)
++	lwz 29, 72(3)
++	lwz 30, 76(3)
++	lwz 31, 80(3)
++	#5) put val into return reg r3
++	mr 3, 4
++
++	#6) check if return value is 0, make it 1 in that case
++	cmpwi cr7, 4, 0
++	bne cr7, 1f
++	li 3, 1
++1:
++	blr
++
+--- /dev/null
++++ b/src/setjmp/powerpc-sf/longjmp.sub
+@@ -0,0 +1 @@
++longjmp.s
+--- /dev/null
++++ b/src/setjmp/powerpc-sf/setjmp.s
+@@ -0,0 +1,43 @@
++	.global ___setjmp
++	.hidden ___setjmp
++	.global __setjmp
++	.global _setjmp
++	.global setjmp
++	.type   __setjmp,@function
++	.type   _setjmp,@function
++	.type   setjmp,@function
++___setjmp:
++__setjmp:
++_setjmp:
++setjmp:
++	# 0) store IP int 0, then into the jmpbuf pointed to by r3 (first arg)
++	mflr 0
++	stw 0, 0(3)
++	# 1) store reg1 (SP)
++	stw 1, 4(3)
++	# 2) store cr
++	mfcr 0
++	stw 0, 8(3)
++	# 3) store r14-31
++	stw 14, 12(3)
++	stw 15, 16(3)
++	stw 16, 20(3)
++	stw 17, 24(3)
++	stw 18, 28(3)
++	stw 19, 32(3)
++	stw 20, 36(3)
++	stw 21, 40(3)
++	stw 22, 44(3)
++	stw 23, 48(3)
++	stw 24, 52(3)
++	stw 25, 56(3)
++	stw 26, 60(3)
++	stw 27, 64(3)
++	stw 28, 68(3)
++	stw 29, 72(3)
++	stw 30, 76(3)
++	stw 31, 80(3)
++	# 4) set return value to 0
++	li 3, 0
++	# 5) return
++	blr
+--- /dev/null
++++ b/src/setjmp/powerpc-sf/setjmp.sub
+@@ -0,0 +1 @@
++setjmp.s