xtensa: extract common CPU reset code into separate function
authorMax Filippov <jcmvbkbc@gmail.com>
Wed, 7 Sep 2016 20:33:47 +0000 (13:33 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 12 Sep 2016 06:53:22 +0000 (23:53 -0700)
platform_restart implementatations do the same thing to reset CPU.
Don't duplicate that code, move it to a function and call it from
platform_restart.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/include/asm/platform.h
arch/xtensa/kernel/setup.c
arch/xtensa/platforms/iss/setup.c
arch/xtensa/platforms/xt2000/setup.c
arch/xtensa/platforms/xtfpga/setup.c

index 32e98f2..f8fbef6 100644 (file)
@@ -69,4 +69,10 @@ extern int platform_pcibios_fixup (void);
  */
 extern void platform_calibrate_ccount (void);
 
+/*
+ * Flush and reset the mmu, simulate a processor reset, and
+ * jump to the reset vector.
+ */
+void cpu_reset(void) __attribute__((noreturn));
+
 #endif /* _XTENSA_PLATFORM_H */
index 393206b..868b54f 100644 (file)
@@ -549,6 +549,29 @@ static int __init topology_init(void)
 }
 subsys_initcall(topology_init);
 
+void cpu_reset(void)
+{
+       __asm__ __volatile__ ("movi     a2, 15\n\t"
+                             "wsr      a2, icountlevel\n\t"
+                             "movi     a2, 0\n\t"
+                             "wsr      a2, icount\n\t"
+#if XCHAL_NUM_IBREAK > 0
+                             "wsr      a2, ibreakenable\n\t"
+#endif
+#if XCHAL_HAVE_LOOPS
+                             "wsr      a2, lcount\n\t"
+#endif
+                             "movi     a2, 0x1f\n\t"
+                             "wsr      a2, ps\n\t"
+                             "isync\n\t"
+                             "jx       %0\n\t"
+                             :
+                             : "a" (XCHAL_RESET_VECTOR_VADDR)
+                             : "a2");
+       for (;;)
+               ;
+}
+
 void machine_restart(char * cmd)
 {
        platform_restart();
index 3918205..e29e1b4 100644 (file)
@@ -53,25 +53,7 @@ void platform_restart(void)
 {
        /* Flush and reset the mmu, simulate a processor reset, and
         * jump to the reset vector. */
-
-       __asm__ __volatile__("movi      a2, 15\n\t"
-                            "wsr       a2, icountlevel\n\t"
-                            "movi      a2, 0\n\t"
-                            "wsr       a2, icount\n\t"
-#if XCHAL_NUM_IBREAK > 0
-                            "wsr       a2, ibreakenable\n\t"
-#endif
-#if XCHAL_HAVE_LOOPS
-                            "wsr       a2, lcount\n\t"
-#endif
-                            "movi      a2, 0x1f\n\t"
-                            "wsr       a2, ps\n\t"
-                            "isync\n\t"
-                            "jx        %0\n\t"
-                            :
-                            : "a" (XCHAL_RESET_VECTOR_VADDR)
-                            : "a2");
-
+       cpu_reset();
        /* control never gets here */
 }
 
index 5f4bd71..11b91d6 100644 (file)
@@ -64,26 +64,7 @@ void platform_restart(void)
 {
        /* Flush and reset the mmu, simulate a processor reset, and
         * jump to the reset vector. */
-
-       __asm__ __volatile__ ("movi     a2, 15\n\t"
-                             "wsr      a2, icountlevel\n\t"
-                             "movi     a2, 0\n\t"
-                             "wsr      a2, icount\n\t"
-#if XCHAL_NUM_IBREAK > 0
-                             "wsr      a2, ibreakenable\n\t"
-#endif
-#if XCHAL_HAVE_LOOPS
-                             "wsr      a2, lcount\n\t"
-#endif
-                             "movi     a2, 0x1f\n\t"
-                             "wsr      a2, ps\n\t"
-                             "isync\n\t"
-                             "jx       %0\n\t"
-                             :
-                             : "a" (XCHAL_RESET_VECTOR_VADDR)
-                             : "a2"
-                             );
-
+       cpu_reset();
        /* control never gets here */
 }
 
index b509d1f..f0b753f 100644 (file)
@@ -54,27 +54,7 @@ void platform_restart(void)
 {
        /* Flush and reset the mmu, simulate a processor reset, and
         * jump to the reset vector. */
-
-
-       __asm__ __volatile__ ("movi     a2, 15\n\t"
-                             "wsr      a2, icountlevel\n\t"
-                             "movi     a2, 0\n\t"
-                             "wsr      a2, icount\n\t"
-#if XCHAL_NUM_IBREAK > 0
-                             "wsr      a2, ibreakenable\n\t"
-#endif
-#if XCHAL_HAVE_LOOPS
-                             "wsr      a2, lcount\n\t"
-#endif
-                             "movi     a2, 0x1f\n\t"
-                             "wsr      a2, ps\n\t"
-                             "isync\n\t"
-                             "jx       %0\n\t"
-                             :
-                             : "a" (XCHAL_RESET_VECTOR_VADDR)
-                             : "a2"
-                             );
-
+       cpu_reset();
        /* control never gets here */
 }