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

TOMOYO Linux Cross Reference
Linux/arch/mips/mti-malta/malta-int.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/mips/mti-malta/malta-int.c (Version linux-6.12-rc7) and /arch/ppc/mti-malta/malta-int.c (Version linux-4.10.17)


  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  * Carsten Langgaard, carstenl@mips.com           
  7  * Copyright (C) 2000, 2001, 2004 MIPS Technol    
  8  * Copyright (C) 2001 Ralf Baechle                
  9  * Copyright (C) 2013 Imagination Technologies    
 10  *                                                
 11  * Routines for generic manipulation of the in    
 12  * Malta board. The interrupt controller is lo    
 13  * a PIIX4 device with two internal 82C95 inte    
 14  */                                               
 15 #include <linux/init.h>                           
 16 #include <linux/irq.h>                            
 17 #include <linux/irqchip.h>                        
 18 #include <linux/sched.h>                          
 19 #include <linux/smp.h>                            
 20 #include <linux/interrupt.h>                      
 21 #include <linux/io.h>                             
 22 #include <linux/of_irq.h>                         
 23 #include <linux/kernel_stat.h>                    
 24 #include <linux/kernel.h>                         
 25 #include <linux/random.h>                         
 26                                                   
 27 #include <asm/traps.h>                            
 28 #include <asm/i8259.h>                            
 29 #include <asm/irq_cpu.h>                          
 30 #include <asm/irq_regs.h>                         
 31 #include <asm/mips-boards/malta.h>                
 32 #include <asm/mips-boards/maltaint.h>             
 33 #include <asm/mips-cps.h>                         
 34 #include <asm/gt64120.h>                          
 35 #include <asm/mips-boards/generic.h>              
 36 #include <asm/mips-boards/msc01_pci.h>            
 37 #include <asm/msc01_ic.h>                         
 38 #include <asm/setup.h>                            
 39 #include <asm/rtlx.h>                             
 40                                                   
 41 static inline int mips_pcibios_iack(void)         
 42 {                                                 
 43         int irq;                                  
 44                                                   
 45         /*                                        
 46          * Determine highest priority pending     
 47          * a PCI Interrupt Acknowledge cycle.     
 48          */                                       
 49         switch (mips_revision_sconid) {           
 50         case MIPS_REVISION_SCON_SOCIT:            
 51         case MIPS_REVISION_SCON_ROCIT:            
 52         case MIPS_REVISION_SCON_SOCITSC:          
 53         case MIPS_REVISION_SCON_SOCITSCP:         
 54                 MSC_READ(MSC01_PCI_IACK, irq);    
 55                 irq &= 0xff;                      
 56                 break;                            
 57         case MIPS_REVISION_SCON_GT64120:          
 58                 irq = GT_READ(GT_PCI0_IACK_OFS    
 59                 irq &= 0xff;                      
 60                 break;                            
 61         case MIPS_REVISION_SCON_BONITO:           
 62                 /* The following will generate    
 63                  * Bonito controller. It's a l    
 64                  * was the easiest way to impl    
 65                  * the given time.                
 66                  */                               
 67                 BONITO_PCIMAP_CFG = 0x20000;      
 68                                                   
 69                 /* Flush Bonito register block    
 70                 (void) BONITO_PCIMAP_CFG;         
 71                 iob();    /* sync */              
 72                                                   
 73                 irq = __raw_readl((u32 *)_pcic    
 74                 iob();    /* sync */              
 75                 irq &= 0xff;                      
 76                 BONITO_PCIMAP_CFG = 0;            
 77                 break;                            
 78         default:                                  
 79                 pr_emerg("Unknown system contr    
 80                 return -1;                        
 81         }                                         
 82         return irq;                               
 83 }                                                 
 84                                                   
 85 static void corehi_irqdispatch(void)              
 86 {                                                 
 87         unsigned int intedge, intsteer, pcicmd    
 88         unsigned int pcimstat, intisr, inten,     
 89         unsigned int intrcause, datalo, datahi    
 90         struct pt_regs *regs = get_irq_regs();    
 91                                                   
 92         pr_emerg("CoreHI interrupt, shouldn't     
 93         pr_emerg("epc    : %08lx\nStatus: %08l    
 94                  "Cause : %08lx\nbadVaddr : %0    
 95                  regs->cp0_epc, regs->cp0_stat    
 96                  regs->cp0_cause, regs->cp0_ba    
 97                                                   
 98         /* Read all the registers and then pri    
 99            problem with interspersed printk's     
100            Do it for the others too.              
101         */                                        
102                                                   
103         switch (mips_revision_sconid) {           
104         case MIPS_REVISION_SCON_SOCIT:            
105         case MIPS_REVISION_SCON_ROCIT:            
106         case MIPS_REVISION_SCON_SOCITSC:          
107         case MIPS_REVISION_SCON_SOCITSCP:         
108                 ll_msc_irq();                     
109                 break;                            
110         case MIPS_REVISION_SCON_GT64120:          
111                 intrcause = GT_READ(GT_INTRCAU    
112                 datalo = GT_READ(GT_CPUERR_ADD    
113                 datahi = GT_READ(GT_CPUERR_ADD    
114                 pr_emerg("GT_INTRCAUSE = %08x\    
115                 pr_emerg("GT_CPUERR_ADDR = %02    
116                                 datahi, datalo    
117                 break;                            
118         case MIPS_REVISION_SCON_BONITO:           
119                 pcibadaddr = BONITO_PCIBADADDR    
120                 pcimstat = BONITO_PCIMSTAT;       
121                 intisr = BONITO_INTISR;           
122                 inten = BONITO_INTEN;             
123                 intpol = BONITO_INTPOL;           
124                 intedge = BONITO_INTEDGE;         
125                 intsteer = BONITO_INTSTEER;       
126                 pcicmd = BONITO_PCICMD;           
127                 pr_emerg("BONITO_INTISR = %08x    
128                 pr_emerg("BONITO_INTEN = %08x\    
129                 pr_emerg("BONITO_INTPOL = %08x    
130                 pr_emerg("BONITO_INTEDGE = %08    
131                 pr_emerg("BONITO_INTSTEER = %0    
132                 pr_emerg("BONITO_PCICMD = %08x    
133                 pr_emerg("BONITO_PCIBADADDR =     
134                 pr_emerg("BONITO_PCIMSTAT = %0    
135                 break;                            
136         }                                         
137                                                   
138         die("CoreHi interrupt", regs);            
139 }                                                 
140                                                   
141 static irqreturn_t corehi_handler(int irq, voi    
142 {                                                 
143         corehi_irqdispatch();                     
144         return IRQ_HANDLED;                       
145 }                                                 
146                                                   
147 static msc_irqmap_t msc_irqmap[] __initdata =     
148         {MSC01C_INT_TMR,                MSC01_    
149         {MSC01C_INT_PCI,                MSC01_    
150 };                                                
151 static int msc_nr_irqs __initdata = ARRAY_SIZE    
152                                                   
153 static msc_irqmap_t msc_eicirqmap[] __initdata    
154         {MSC01E_INT_SW0,                MSC01_    
155         {MSC01E_INT_SW1,                MSC01_    
156         {MSC01E_INT_I8259A,             MSC01_    
157         {MSC01E_INT_SMI,                MSC01_    
158         {MSC01E_INT_COREHI,             MSC01_    
159         {MSC01E_INT_CORELO,             MSC01_    
160         {MSC01E_INT_TMR,                MSC01_    
161         {MSC01E_INT_PCI,                MSC01_    
162         {MSC01E_INT_PERFCTR,            MSC01_    
163         {MSC01E_INT_CPUCTR,             MSC01_    
164 };                                                
165                                                   
166 static int msc_nr_eicirqs __initdata = ARRAY_S    
167                                                   
168 void __init arch_init_irq(void)                   
169 {                                                 
170         int corehi_irq;                           
171                                                   
172         /*                                        
173          * Preallocate the i8259's expected vi    
174          * will probe the irqchips in hierarch    
175          * If anything allocates a virq before    
176          * be given one of the i8259's expecte    
177          * of the i8259 will fail.                
178          */                                       
179         WARN(irq_alloc_descs(I8259A_IRQ_BASE,     
180                             16, numa_node_id()    
181                 "Cannot reserve i8259 virqs at    
182                                                   
183         i8259_set_poll(mips_pcibios_iack);        
184         irqchip_init();                           
185                                                   
186         switch (mips_revision_sconid) {           
187         case MIPS_REVISION_SCON_SOCIT:            
188         case MIPS_REVISION_SCON_ROCIT:            
189                 if (cpu_has_veic)                 
190                         init_msc_irqs(MIPS_MSC    
191                                         MSC01E    
192                                         msc_nr    
193                 else                              
194                         init_msc_irqs(MIPS_MSC    
195                                         MSC01C    
196                                         msc_nr    
197                 break;                            
198                                                   
199         case MIPS_REVISION_SCON_SOCITSC:          
200         case MIPS_REVISION_SCON_SOCITSCP:         
201                 if (cpu_has_veic)                 
202                         init_msc_irqs(MIPS_SOC    
203                                         MSC01E    
204                                         msc_nr    
205                 else                              
206                         init_msc_irqs(MIPS_SOC    
207                                         MSC01C    
208                                         msc_nr    
209         }                                         
210                                                   
211         if (mips_gic_present()) {                 
212                 corehi_irq = MIPS_CPU_IRQ_BASE    
213         } else if (cpu_has_veic) {                
214                 set_vi_handler(MSC01E_INT_CORE    
215                 corehi_irq = MSC01E_INT_BASE +    
216         } else {                                  
217                 corehi_irq = MIPS_CPU_IRQ_BASE    
218         }                                         
219                                                   
220         if (request_irq(corehi_irq, corehi_han    
221                         NULL))                    
222                 pr_err("Failed to request irq     
223 }                                                 
224                                                   

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