Author: ian
Date: Fri Feb 28 00:41:55 2014
New Revision: 262587
URL: http://svnweb.freebsd.org/changeset/base/262587

Log:
  Add an armv7 implementation of cpu_sleep().  The arm11/armv6 implementation
  we've been using was actually just spinning due to ARM having redefined
  the old 'wait for interrupt' operation via the system coprocessor as a nop
  and replacing it with a WFI instruction.

Modified:
  head/sys/arm/arm/cpufunc.c
  head/sys/arm/arm/cpufunc_asm_armv7.S
  head/sys/arm/include/cpufunc.h

Modified: head/sys/arm/arm/cpufunc.c
==============================================================================
--- head/sys/arm/arm/cpufunc.c  Fri Feb 28 00:39:35 2014        (r262586)
+++ head/sys/arm/arm/cpufunc.c  Fri Feb 28 00:41:55 2014        (r262587)
@@ -1107,7 +1107,7 @@ struct cpu_functions cortexa_cpufuncs = 
        cpufunc_nullop,                 /* flush_brnchtgt_C     */
        (void *)cpufunc_nullop,         /* flush_brnchtgt_E     */
        
-       arm11_sleep,                    /* sleep                */
+       armv7_sleep,                    /* sleep                */
        
        /* Soft functions */
        

Modified: head/sys/arm/arm/cpufunc_asm_armv7.S
==============================================================================
--- head/sys/arm/arm/cpufunc_asm_armv7.S        Fri Feb 28 00:39:35 2014        
(r262586)
+++ head/sys/arm/arm/cpufunc_asm_armv7.S        Fri Feb 28 00:41:55 2014        
(r262587)
@@ -343,3 +343,9 @@ ENTRY(armv7_idcache_inv_all)
        bx      lr                      @ return
 END(armv7_l1cache_inv_all)
 
+ENTRY_NP(armv7_sleep)
+       dsb
+       wfi
+       bx      lr
+END(armv7_sleep)
+

Modified: head/sys/arm/include/cpufunc.h
==============================================================================
--- head/sys/arm/include/cpufunc.h      Fri Feb 28 00:39:35 2014        
(r262586)
+++ head/sys/arm/include/cpufunc.h      Fri Feb 28 00:41:55 2014        
(r262587)
@@ -523,6 +523,7 @@ void        armv7_setup                     (char *string);
 void   armv7_context_switch            (void);
 void   armv7_drain_writebuf            (void);
 void   armv7_sev                       (void);
+void   armv7_sleep                     (int unused);
 u_int  armv7_auxctrl                   (u_int, u_int);
 void   pj4bv7_setup                    (char *string);
 void   pj4b_config                     (void);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to