diff --git a/target/linux/imx6/patches-3.14/0008-ARM-imx-add-speed-grading-check-for-i.mx6-soc.patch b/target/linux/imx6/patches-3.14/0008-ARM-imx-add-speed-grading-check-for-i.mx6-soc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..70b70143149396f18d6d3685747b4a8a49db7b13
--- /dev/null
+++ b/target/linux/imx6/patches-3.14/0008-ARM-imx-add-speed-grading-check-for-i.mx6-soc.patch
@@ -0,0 +1,76 @@
+From c962a0996335fae7f79e64677f47d4784b86f692 Mon Sep 17 00:00:00 2001
+From: Anson Huang <b20788@freescale.com>
+Date: Wed, 12 Feb 2014 17:57:03 +0800
+Subject: [PATCH] ARM: imx: add speed grading check for i.mx6 soc
+
+The fuse map of speed_grading[1:0] defines the max speed
+of ARM, see below the definition:
+
+2b'11: 1200000000Hz;
+2b'10: 996000000Hz;
+2b'01: 852000000Hz; -- i.MX6Q Only, exclusive with 996MHz.
+2b'00: 792000000Hz;
+
+Need to remove all illegal setpoints according to fuse
+map.
+
+Signed-off-by: Anson Huang <b20788@freescale.com>
+Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
+---
+ arch/arm/mach-imx/mach-imx6q.c | 26 +++++++++++++++++++++++---
+ 1 file changed, 23 insertions(+), 3 deletions(-)
+
+--- a/arch/arm/mach-imx/mach-imx6q.c
++++ b/arch/arm/mach-imx/mach-imx6q.c
+@@ -219,8 +219,10 @@ static void __init imx6q_init_machine(vo
+ #define OCOTP_CFG3			0x440
+ #define OCOTP_CFG3_SPEED_SHIFT		16
+ #define OCOTP_CFG3_SPEED_1P2GHZ		0x3
++#define OCOTP_CFG3_SPEED_996MHZ		0x2
++#define OCOTP_CFG3_SPEED_852MHZ		0x1
+ 
+-static void __init imx6q_opp_check_1p2ghz(struct device *cpu_dev)
++static void __init imx6q_opp_check_speed_grading(struct device *cpu_dev)
+ {
+ 	struct device_node *np;
+ 	void __iomem *base;
+@@ -238,11 +240,29 @@ static void __init imx6q_opp_check_1p2gh
+ 		goto put_node;
+ 	}
+ 
++	/*
++	 * SPEED_GRADING[1:0] defines the max speed of ARM:
++	 * 2b'11: 1200000000Hz;
++	 * 2b'10: 996000000Hz;
++	 * 2b'01: 852000000Hz; -- i.MX6Q Only, exclusive with 996MHz.
++	 * 2b'00: 792000000Hz;
++	 * We need to set the max speed of ARM according to fuse map.
++	 */
+ 	val = readl_relaxed(base + OCOTP_CFG3);
+ 	val >>= OCOTP_CFG3_SPEED_SHIFT;
+-	if ((val & 0x3) != OCOTP_CFG3_SPEED_1P2GHZ)
++	val &= 0x3;
++
++	if (val != OCOTP_CFG3_SPEED_1P2GHZ)
+ 		if (dev_pm_opp_disable(cpu_dev, 1200000000))
+ 			pr_warn("failed to disable 1.2 GHz OPP\n");
++	if (val < OCOTP_CFG3_SPEED_996MHZ)
++		if (dev_pm_opp_disable(cpu_dev, 996000000))
++			pr_warn("failed to disable 996 MHz OPP\n");
++	if (cpu_is_imx6q()) {
++		if (val != OCOTP_CFG3_SPEED_852MHZ)
++			if (dev_pm_opp_disable(cpu_dev, 852000000))
++				pr_warn("failed to disable 852 MHz OPP\n");
++	}
+ 
+ put_node:
+ 	of_node_put(np);
+@@ -268,7 +288,7 @@ static void __init imx6q_opp_init(void)
+ 		goto put_node;
+ 	}
+ 
+-	imx6q_opp_check_1p2ghz(cpu_dev);
++	imx6q_opp_check_speed_grading(cpu_dev);
+ 
+ put_node:
+ 	of_node_put(np);