CoreValidation: Added test case for __FPU_Enable.

Change-Id: I7d478282cb0f85a348866b411ae0a3db724b4f5c
diff --git a/CMSIS/CoreValidation/Include/cmsis_cv.h b/CMSIS/CoreValidation/Include/cmsis_cv.h
index 8a2660b..e310874 100644
--- a/CMSIS/CoreValidation/Include/cmsis_cv.h
+++ b/CMSIS/CoreValidation/Include/cmsis_cv.h
@@ -102,6 +102,7 @@
   extern void TC_CoreAFunc_MPIDR (void);
   extern void TC_CoreAFunc_VBAR (void);
   extern void TC_CoreAFunc_MVBAR (void);
+  extern void TC_CoreAFunc_FPU_Enable (void);
 #endif
 
 extern void TC_MPU_SetClear (void);
diff --git a/CMSIS/CoreValidation/Source/CV_CoreAFunc.c b/CMSIS/CoreValidation/Source/CV_CoreAFunc.c
index 07cfdf9..cb8559a 100644
--- a/CMSIS/CoreValidation/Source/CV_CoreAFunc.c
+++ b/CMSIS/CoreValidation/Source/CV_CoreAFunc.c
@@ -245,3 +245,25 @@
   
   __set_MVBAR(mvbar);
 }
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+
+void TC_CoreAFunc_FPU_Enable(void) {
+  uint32_t fpexc = __get_FPEXC();
+  __set_FPEXC(fpexc & ~0x40000000u); // disable FPU
+  
+  uint32_t cp15;
+  __get_CP(15, 0, cp15, 1, 0, 2);
+  
+  cp15 &= ~0x00F00000u;
+  __set_CP(15, 0, cp15, 1, 0, 2); // disable FPU access
+  
+  __FPU_Enable();
+    
+  __get_CP(15, 0, cp15, 1, 0, 2);
+  ASSERT_TRUE((cp15 & 0x00F00000u) == 0x00F00000u);
+
+  fpexc = __get_FPEXC();  
+  ASSERT_TRUE((fpexc & 0x40000000u) == 0x40000000u);
+}
+
diff --git a/CMSIS/CoreValidation/Source/ConfigA/CV_Config.h b/CMSIS/CoreValidation/Source/ConfigA/CV_Config.h
index 5551b62..a31a72b 100644
--- a/CMSIS/CoreValidation/Source/ConfigA/CV_Config.h
+++ b/CMSIS/CoreValidation/Source/ConfigA/CV_Config.h
@@ -64,6 +64,7 @@
 // <q25> TC_CoreAFunc_MPIDR
 // <q26> TC_CoreAFunc_VBAR
 // <q27> TC_CoreAFunc_MVBAR
+// <q28> TC_CoreAFunc_FPU_Enable
 
 #define TC_COREAFUNC_IRQ                    1
 #define TC_COREAFUNC_FPSCR                  1
@@ -85,12 +86,13 @@
 #define TC_COREAFUNC_MPIDR                  1
 #define TC_COREAFUNC_VBAR                   1
 #define TC_COREAFUNC_MVBAR                  1
+#define TC_COREAFUNC_FPU_ENABLE             1
 
-// <q28> TC_GenTimer_CNTFRQ
-// <q29> TC_GenTimer_CNTP_TVAL
-// <q30> TC_GenTimer_CNTP_CTL
-// <q31> TC_GenTimer_CNTPCT
-// <q32> TC_GenTimer_CNTP_CVAL
+// <q29> TC_GenTimer_CNTFRQ
+// <q30> TC_GenTimer_CNTP_TVAL
+// <q31> TC_GenTimer_CNTP_CTL
+// <q32> TC_GenTimer_CNTPCT
+// <q33> TC_GenTimer_CNTP_CVAL
 
 #define TC_GENTIMER_CNTFRQ                  1
 #define TC_GENTIMER_CNTP_TVAL               1
@@ -98,12 +100,12 @@
 #define TC_GENTIMER_CNTPCT                  1
 #define TC_GENTIMER_CNTP_CVAL               1
 
-// <q33> TC_L1Cache_EnDisable
-// <q34> TC_L1Cache_EnDisableBTAC
-// <q35> TC_L1Cache_log2_up
-// <q36> TC_L1Cache_InvalidateDCacheAll
-// <q37> TC_L1Cache_CleanDCacheAll
-// <q38> TC_L1Cache_CleanInvalidateDCacheAll
+// <q34> TC_L1Cache_EnDisable
+// <q35> TC_L1Cache_EnDisableBTAC
+// <q36> TC_L1Cache_log2_up
+// <q37> TC_L1Cache_InvalidateDCacheAll
+// <q38> TC_L1Cache_CleanDCacheAll
+// <q39> TC_L1Cache_CleanInvalidateDCacheAll
 
 #define TC_L1CACHE_ENDISABLE                1
 #define TC_L1CACHE_ENDISABLEBTAC            1
diff --git a/CMSIS/CoreValidation/Source/cmsis_cv.c b/CMSIS/CoreValidation/Source/cmsis_cv.c
index 9c46627..30b6e9a 100644
--- a/CMSIS/CoreValidation/Source/cmsis_cv.c
+++ b/CMSIS/CoreValidation/Source/cmsis_cv.c
@@ -135,6 +135,7 @@
     TCD ( TC_CoreAFunc_MPIDR,                      TC_COREAFUNC_MPIDR                        ),
     TCD ( TC_CoreAFunc_VBAR,                       TC_COREAFUNC_VBAR                         ),
     TCD ( TC_CoreAFunc_MVBAR,                      TC_COREAFUNC_MVBAR                        ),
+    TCD ( TC_CoreAFunc_FPU_Enable,                 TC_COREAFUNC_FPU_ENABLE                   ),
   #endif
 #endif /* RTE_CV_COREFUNC */
 
diff --git a/CMSIS/CoreValidation/Tests/config/core_a/CV_Config.h b/CMSIS/CoreValidation/Tests/config/core_a/CV_Config.h
index 48b4760..397ae38 100644
--- a/CMSIS/CoreValidation/Tests/config/core_a/CV_Config.h
+++ b/CMSIS/CoreValidation/Tests/config/core_a/CV_Config.h
@@ -70,6 +70,7 @@
 // <q25> TC_CoreAFunc_MPIDR
 // <q26> TC_CoreAFunc_VBAR
 // <q27> TC_CoreAFunc_MVBAR
+// <q28> TC_CoreAFunc_FPU_Enable
 
 #define TC_COREAFUNC_IRQ                    1
 #define TC_COREAFUNC_FPSCR                  1
@@ -91,12 +92,13 @@
 #define TC_COREAFUNC_MPIDR                  1
 #define TC_COREAFUNC_VBAR                   1
 #define TC_COREAFUNC_MVBAR                  1
+#define TC_COREAFUNC_FPU_ENABLE             1
 
-// <q28> TC_GenTimer_CNTFRQ
-// <q29> TC_GenTimer_CNTP_TVAL
-// <q30> TC_GenTimer_CNTP_CTL
-// <q31> TC_GenTimer_CNTPCT
-// <q32> TC_GenTimer_CNTP_CVAL
+// <q29> TC_GenTimer_CNTFRQ
+// <q30> TC_GenTimer_CNTP_TVAL
+// <q31> TC_GenTimer_CNTP_CTL
+// <q32> TC_GenTimer_CNTPCT
+// <q33> TC_GenTimer_CNTP_CVAL
 
 #define TC_GENTIMER_CNTFRQ                  1
 #define TC_GENTIMER_CNTP_TVAL               1
@@ -104,12 +106,12 @@
 #define TC_GENTIMER_CNTPCT                  1
 #define TC_GENTIMER_CNTP_CVAL               1
 
-// <q33> TC_L1Cache_EnDisable
-// <q34> TC_L1Cache_EnDisableBTAC
-// <q35> TC_L1Cache_log2_up
-// <q36> TC_L1Cache_InvalidateDCacheAll
-// <q37> TC_L1Cache_CleanDCacheAll
-// <q38> TC_L1Cache_CleanInvalidateDCacheAll
+// <q34> TC_L1Cache_EnDisable
+// <q35> TC_L1Cache_EnDisableBTAC
+// <q36> TC_L1Cache_log2_up
+// <q37> TC_L1Cache_InvalidateDCacheAll
+// <q38> TC_L1Cache_CleanDCacheAll
+// <q39> TC_L1Cache_CleanInvalidateDCacheAll
 
 #define TC_L1CACHE_ENDISABLE                1
 #define TC_L1CACHE_ENDISABLEBTAC            1