--- /dev/null
+From 5e32033e14ca9c7f7341cb383f5a05699b0b5382 Mon Sep 17 00:00:00 2001
+From: James Hogan <james.hogan@imgtec.com>
+Date: Fri, 30 Jan 2015 15:40:19 +0000
+Subject: MIPS: mipsregs.h: Add write_32bit_cp1_register()
+
+From: James Hogan <james.hogan@imgtec.com>
+
+commit 5e32033e14ca9c7f7341cb383f5a05699b0b5382 upstream.
+
+Add a write_32bit_cp1_register() macro to compliment the
+read_32bit_cp1_register() macro. This is to abstract whether .set
+hardfloat needs to be used based on GAS_HAS_SET_HARDFLOAT.
+
+The implementation of _read_32bit_cp1_register() .sets mips1 due to
+failure of gas v2.19 to assemble cfc1 for Octeon (see commit
+25c300030016 ("MIPS: Override assembler target architecture for
+octeon.")). I haven't copied this over to _write_32bit_cp1_register() as
+I'm uncertain whether it applies to ctc1 too, or whether anybody cares
+about that version of binutils any longer.
+
+Signed-off-by: James Hogan <james.hogan@imgtec.com>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: Paul Burton <paul.burton@imgtec.com>
+Cc: David Daney <david.daney@cavium.com>
+Cc: linux-mips@linux-mips.org
+Patchwork: https://patchwork.linux-mips.org/patch/9172/
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Cc: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/include/asm/mipsregs.h | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+--- a/arch/mips/include/asm/mipsregs.h
++++ b/arch/mips/include/asm/mipsregs.h
+@@ -1343,12 +1343,27 @@ do { \
+ __res; \
+ })
+
++#define _write_32bit_cp1_register(dest, val, gas_hardfloat) \
++do { \
++ __asm__ __volatile__( \
++ " .set push \n" \
++ " .set reorder \n" \
++ " "STR(gas_hardfloat)" \n" \
++ " ctc1 %0,"STR(dest)" \n" \
++ " .set pop \n" \
++ : : "r" (val)); \
++} while (0)
++
+ #ifdef GAS_HAS_SET_HARDFLOAT
+ #define read_32bit_cp1_register(source) \
+ _read_32bit_cp1_register(source, .set hardfloat)
++#define write_32bit_cp1_register(dest, val) \
++ _write_32bit_cp1_register(dest, val, .set hardfloat)
+ #else
+ #define read_32bit_cp1_register(source) \
+ _read_32bit_cp1_register(source, )
++#define write_32bit_cp1_register(dest, val) \
++ _write_32bit_cp1_register(dest, val, )
+ #endif
+
+ #ifdef HAVE_AS_DSP