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

TOMOYO Linux Cross Reference
Linux/arch/mips/sgi-ip22/ip22-time.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/mips/sgi-ip22/ip22-time.c (Version linux-6.11-rc3) and /arch/m68k/sgi-ip22/ip22-time.c (Version linux-4.17.19)


  1 /*                                                  1 
  2  * This file is subject to the terms and condi    
  3  * License.  See the file "COPYING" in the mai    
  4  * for more details.                              
  5  *                                                
  6  * Time operations for IP22 machines. Original    
  7  * Ralf Baechle or David S. Miller (sorry guys    
  8  *                                                
  9  * Copyright (C) 2001 by Ladislav Michl           
 10  * Copyright (C) 2003, 06 Ralf Baechle (ralf@l    
 11  */                                               
 12 #include <linux/bcd.h>                            
 13 #include <linux/i8253.h>                          
 14 #include <linux/init.h>                           
 15 #include <linux/irq.h>                            
 16 #include <linux/kernel.h>                         
 17 #include <linux/interrupt.h>                      
 18 #include <linux/kernel_stat.h>                    
 19 #include <linux/time.h>                           
 20 #include <linux/ftrace.h>                         
 21                                                   
 22 #include <asm/cpu.h>                              
 23 #include <asm/mipsregs.h>                         
 24 #include <asm/io.h>                               
 25 #include <asm/irq.h>                              
 26 #include <asm/time.h>                             
 27 #include <asm/sgialib.h>                          
 28 #include <asm/sgi/ioc.h>                          
 29 #include <asm/sgi/hpc3.h>                         
 30 #include <asm/sgi/ip22.h>                         
 31                                                   
 32 static unsigned long dosample(void)               
 33 {                                                 
 34         u32 ct0, ct1;                             
 35         u8 msb;                                   
 36                                                   
 37         /* Start the counter. */                  
 38         sgint->tcword = (SGINT_TCWORD_CNT2 | S    
 39                          SGINT_TCWORD_MRGEN);     
 40         sgint->tcnt2 = SGINT_TCSAMP_COUNTER &     
 41         sgint->tcnt2 = SGINT_TCSAMP_COUNTER >>    
 42                                                   
 43         /* Get initial counter invariant */       
 44         ct0 = read_c0_count();                    
 45                                                   
 46         /* Latch and spin until top byte of co    
 47         do {                                      
 48                 writeb(SGINT_TCWORD_CNT2 | SGI    
 49                 (void) readb(&sgint->tcnt2);      
 50                 msb = readb(&sgint->tcnt2);       
 51                 ct1 = read_c0_count();            
 52         } while (msb);                            
 53                                                   
 54         /* Stop the counter. */                   
 55         writeb(SGINT_TCWORD_CNT2 | SGINT_TCWOR    
 56                &sgint->tcword);                   
 57         /*                                        
 58          * Return the difference, this is how     
 59          * for every 1/HZ seconds. We round of    
 60          * clock (= 1000000 / HZ / 2).            
 61          */                                       
 62                                                   
 63         return (ct1 - ct0) / (500000/HZ) * (50    
 64 }                                                 
 65                                                   
 66 /*                                                
 67  * Here we need to calibrate the cycle counter    
 68  */                                               
 69 __init void plat_time_init(void)                  
 70 {                                                 
 71         unsigned long r4k_ticks[3];               
 72         unsigned long r4k_tick;                   
 73                                                   
 74         /*                                        
 75          * Figure out the r4k offset, the algo    
 76          * _all_ cases as long as the 8254 cou    
 77          * an interrupt driving timer it does     
 78          * we are using the onchip r4k counter    
 79          * purpose, but for r4k_offset calcula    
 80          * There are other very complicated wa    
 81          * but this one works just fine so I a    
 82          */                                       
 83         printk(KERN_INFO "Calibrating system t    
 84         dosample();     /* Prime cache. */        
 85         dosample();     /* Prime cache. */        
 86         /* Zero is NOT an option. */              
 87         do {                                      
 88                 r4k_ticks[0] = dosample();        
 89         } while (!r4k_ticks[0]);                  
 90         do {                                      
 91                 r4k_ticks[1] = dosample();        
 92         } while (!r4k_ticks[1]);                  
 93                                                   
 94         if (r4k_ticks[0] != r4k_ticks[1]) {       
 95                 printk("warning: timer counts     
 96                 r4k_ticks[2] = dosample();        
 97                 if (r4k_ticks[2] == r4k_ticks[    
 98                     || r4k_ticks[2] == r4k_tic    
 99                         r4k_tick = r4k_ticks[2    
100                 else {                            
101                         printk("disagreement,     
102                         r4k_tick = (r4k_ticks[    
103                                    + r4k_ticks    
104                 }                                 
105         } else                                    
106                 r4k_tick = r4k_ticks[0];          
107                                                   
108         printk("%d [%d.%04d MHz CPU]\n", (int)    
109                 (int) (r4k_tick / (500000 / HZ    
110                 (int) (r4k_tick % (500000 / HZ    
111                                                   
112         mips_hpt_frequency = r4k_tick * HZ;       
113                                                   
114         if (ip22_is_fullhouse())                  
115                 setup_pit_timer();                
116 }                                                 
117                                                   
118 /* Generic SGI handler for (spurious) 8254 int    
119 void __irq_entry indy_8254timer_irq(void)         
120 {                                                 
121         int irq = SGI_8254_0_IRQ;                 
122         ULONG cnt;                                
123         char c;                                   
124                                                   
125         irq_enter();                              
126         kstat_incr_irq_this_cpu(irq);             
127         printk(KERN_ALERT "Oops, got 8254 inte    
128         ArcRead(0, &c, 1, &cnt);                  
129         ArcEnterInteractiveMode();                
130         irq_exit();                               
131 }                                                 
132                                                   

~ [ 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