Replace SP804 timer by generic delay timer on FVP
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Tue, 17 May 2016 08:48:10 +0000 (09:48 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Fri, 20 May 2016 14:29:30 +0000 (15:29 +0100)
Added a build flag to select the generic delay timer on FVP instead
of the SP804 timer. By default, the generic one will be selected. The
user guide has been updated.

Change-Id: Ica34425c6d4ed95a187b529c612f6d3b26b78bc6

docs/user-guide.md
plat/arm/board/fvp/fvp_bl2_setup.c
plat/arm/board/fvp/platform.mk

index 2bb9eac4a62e2b2b0bacdd21204f89a4cc0490e3..cd9c8c33e1af5e9281274a734168c3c723e76d64 100644 (file)
@@ -492,6 +492,9 @@ map is explained in the [Firmware Design].
      Trusted Firmware is configured for dual cluster topology and this option
      can be used to override the default value.
 
+*   `FVP_USE_SP804_TIMER`  : Use the SP804 timer instead of the Generic Timer
+     for functions that wait for an arbitrary time length (udelay and mdelay).
+     The default value is 0.
 
 ### Debugging options
 
index 305309ab0a0171144ed44a3458b420bdfc2031fb..ee49c3029ef33e35cf6d348a00b55340a856b6c3 100644 (file)
@@ -28,6 +28,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <generic_delay_timer.h>
 #include <mmio.h>
 #include <plat_arm.h>
 #include <sp804_delay_timer.h>
@@ -48,6 +49,7 @@ void bl2_platform_setup(void)
 {
        arm_bl2_platform_setup();
 
+#if FVP_USE_SP804_TIMER
        /* Enable the clock override for SP804 timer 0, which means that no
         * clock dividers are applied and the raw (35 MHz) clock will be used */
        mmio_write_32(V2M_SP810_BASE, FVP_SP810_CTRL_TIM0_OV);
@@ -55,4 +57,7 @@ void bl2_platform_setup(void)
        /* Initialize delay timer driver using SP804 dual timer 0 */
        sp804_timer_init(V2M_SP804_TIMER0_BASE,
                        SP804_TIMER_CLKMULT, SP804_TIMER_CLKDIV);
+#else
+       generic_delay_timer_init();
+#endif /* FVP_USE_SP804_TIMER */
 }
index eecb5977987031ff263cb2965b0b93df8b42a959..c0fe662e08d3b03f0bea47c705182512b563ed72 100644 (file)
 
 # Use the GICv3 driver on the FVP by default
 FVP_USE_GIC_DRIVER     := FVP_GICV3
+# Use the SP804 timer instead of the generic one
+FVP_USE_SP804_TIMER    := 0
+
+$(eval $(call assert_boolean,FVP_USE_SP804_TIMER))
+$(eval $(call add_define,FVP_USE_SP804_TIMER))
 
 # The FVP platform depends on this macro to build with correct GIC driver.
 $(eval $(call add_define,FVP_USE_GIC_DRIVER))
@@ -92,8 +97,7 @@ BL1_SOURCES           +=      drivers/io/io_semihosting.c                     \
                                ${FVP_INTERCONNECT_SOURCES}
 
 
-BL2_SOURCES            +=      drivers/arm/sp804/sp804_delay_timer.c           \
-                               drivers/io/io_semihosting.c                     \
+BL2_SOURCES            +=      drivers/io/io_semihosting.c                     \
                                drivers/delay_timer/delay_timer.c               \
                                lib/semihosting/semihosting.c                   \
                                lib/semihosting/aarch64/semihosting_call.S      \
@@ -102,6 +106,12 @@ BL2_SOURCES                +=      drivers/arm/sp804/sp804_delay_timer.c           \
                                plat/arm/board/fvp/fvp_io_storage.c             \
                                ${FVP_SECURITY_SOURCES}
 
+ifeq (${FVP_USE_SP804_TIMER},1)
+BL2_SOURCES            +=      drivers/arm/sp804/sp804_delay_timer.c
+else
+BL2_SOURCES            +=      drivers/delay_timer/generic_delay_timer.c
+endif
+
 BL2U_SOURCES           +=      plat/arm/board/fvp/fvp_bl2u_setup.c             \
                                ${FVP_SECURITY_SOURCES}