~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/microblaze/kernel/reset.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/microblaze/kernel/reset.c (Version linux-6.12-rc7) and /arch/mips/kernel/reset.c (Version linux-5.3.18)


  1 /*                                                  1 /*
  2  * Copyright (C) 2009 Michal Simek <monstr@mon << 
  3  * Copyright (C) 2009 PetaLogix                << 
  4  *                                             << 
  5  * This file is subject to the terms and condi      2  * This file is subject to the terms and conditions of the GNU General Public
  6  * License. See the file "COPYING" in the main !!   3  * License.  See the file "COPYING" in the main directory of this archive
  7  * for more details.                                4  * for more details.
                                                   >>   5  *
                                                   >>   6  * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org)
                                                   >>   7  * Copyright (C) 2001 MIPS Technologies, Inc.
  8  */                                                 8  */
  9                                                !!   9 #include <linux/kernel.h>
 10 #include <linux/init.h>                        !!  10 #include <linux/export.h>
 11 #include <linux/delay.h>                       !!  11 #include <linux/pm.h>
                                                   >>  12 #include <linux/types.h>
 12 #include <linux/reboot.h>                          13 #include <linux/reboot.h>
                                                   >>  14 #include <linux/delay.h>
                                                   >>  15 
                                                   >>  16 #include <asm/compiler.h>
                                                   >>  17 #include <asm/idle.h>
                                                   >>  18 #include <asm/mipsregs.h>
                                                   >>  19 #include <asm/reboot.h>
 13                                                    20 
 14 void machine_shutdown(void)                    !!  21 /*
                                                   >>  22  * Urgs ...  Too many MIPS machines to handle this in a generic way.
                                                   >>  23  * So handle all using function pointers to machine specific
                                                   >>  24  * functions.
                                                   >>  25  */
                                                   >>  26 void (*_machine_restart)(char *command);
                                                   >>  27 void (*_machine_halt)(void);
                                                   >>  28 void (*pm_power_off)(void);
                                                   >>  29 
                                                   >>  30 EXPORT_SYMBOL(pm_power_off);
                                                   >>  31 
                                                   >>  32 static void machine_hang(void)
 15 {                                                  33 {
 16         pr_notice("Machine shutdown...\n");    !!  34         /*
 17         while (1)                              !!  35          * We're hanging the system so we don't want to be interrupted anymore.
 18                 ;                              !!  36          * Any interrupt handlers that ran would at best be useless & at worst
                                                   >>  37          * go awry because the system isn't in a functional state.
                                                   >>  38          */
                                                   >>  39         local_irq_disable();
                                                   >>  40 
                                                   >>  41         /*
                                                   >>  42          * Mask all interrupts, giving us a better chance of remaining in the
                                                   >>  43          * low power wait state.
                                                   >>  44          */
                                                   >>  45         clear_c0_status(ST0_IM);
                                                   >>  46 
                                                   >>  47         while (true) {
                                                   >>  48                 if (cpu_has_mips_r) {
                                                   >>  49                         /*
                                                   >>  50                          * We know that the wait instruction is supported so
                                                   >>  51                          * make use of it directly, leaving interrupts
                                                   >>  52                          * disabled.
                                                   >>  53                          */
                                                   >>  54                         asm volatile(
                                                   >>  55                                 ".set   push\n\t"
                                                   >>  56                                 ".set   " MIPS_ISA_ARCH_LEVEL "\n\t"
                                                   >>  57                                 "wait\n\t"
                                                   >>  58                                 ".set   pop");
                                                   >>  59                 } else if (cpu_wait) {
                                                   >>  60                         /*
                                                   >>  61                          * Try the cpu_wait() callback. This isn't ideal since
                                                   >>  62                          * it'll re-enable interrupts, but that ought to be
                                                   >>  63                          * harmless given that they're all masked.
                                                   >>  64                          */
                                                   >>  65                         cpu_wait();
                                                   >>  66                         local_irq_disable();
                                                   >>  67                 } else {
                                                   >>  68                         /*
                                                   >>  69                          * We're going to burn some power running round the
                                                   >>  70                          * loop, but we don't really have a choice. This isn't
                                                   >>  71                          * a path we should expect to run for long during
                                                   >>  72                          * typical use anyway.
                                                   >>  73                          */
                                                   >>  74                 }
                                                   >>  75 
                                                   >>  76                 /*
                                                   >>  77                  * In most modern MIPS CPUs interrupts will cause the wait
                                                   >>  78                  * instruction to graduate even when disabled, and in some
                                                   >>  79                  * cases even when masked. In order to prevent a timer
                                                   >>  80                  * interrupt from continuously taking us out of the low power
                                                   >>  81                  * wait state, we clear any pending timer interrupt here.
                                                   >>  82                  */
                                                   >>  83                 if (cpu_has_counter)
                                                   >>  84                         write_c0_compare(0);
                                                   >>  85         }
 19 }                                                  86 }
 20                                                    87 
 21 void machine_halt(void)                        !!  88 void machine_restart(char *command)
 22 {                                                  89 {
 23         pr_notice("Machine halt...\n");        !!  90         if (_machine_restart)
 24         while (1)                              !!  91                 _machine_restart(command);
 25                 ;                              !!  92 
                                                   >>  93 #ifdef CONFIG_SMP
                                                   >>  94         preempt_disable();
                                                   >>  95         smp_send_stop();
                                                   >>  96 #endif
                                                   >>  97         do_kernel_restart(command);
                                                   >>  98         mdelay(1000);
                                                   >>  99         pr_emerg("Reboot failed -- System halted\n");
                                                   >> 100         machine_hang();
 26 }                                                 101 }
 27                                                   102 
 28 void machine_power_off(void)                   !! 103 void machine_halt(void)
 29 {                                                 104 {
 30         pr_notice("Machine power off...\n");   !! 105         if (_machine_halt)
 31         while (1)                              !! 106                 _machine_halt();
 32                 ;                              !! 107 
                                                   >> 108 #ifdef CONFIG_SMP
                                                   >> 109         preempt_disable();
                                                   >> 110         smp_send_stop();
                                                   >> 111 #endif
                                                   >> 112         machine_hang();
 33 }                                                 113 }
 34                                                   114 
 35 void machine_restart(char *cmd)                !! 115 void machine_power_off(void)
 36 {                                                 116 {
 37         do_kernel_restart(cmd);                !! 117         if (pm_power_off)
 38         /* Give the restart hook 1 s to take u !! 118                 pm_power_off();
 39         mdelay(1000);                          !! 119 
 40         pr_emerg("Reboot failed -- System halt !! 120 #ifdef CONFIG_SMP
 41         while (1);                             !! 121         preempt_disable();
                                                   >> 122         smp_send_stop();
                                                   >> 123 #endif
                                                   >> 124         machine_hang();
 42 }                                                 125 }
 43                                                   126 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php