summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/mips/ingenic_jz47xx/system-jz4760.c39
1 files changed, 29 insertions, 10 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/system-jz4760.c b/firmware/target/mips/ingenic_jz47xx/system-jz4760.c
index 73bd31c72c..78f9fc6cab 100644
--- a/firmware/target/mips/ingenic_jz47xx/system-jz4760.c
+++ b/firmware/target/mips/ingenic_jz47xx/system-jz4760.c
@@ -87,19 +87,20 @@ intr(GPIO187);intr(GPIO188);intr(GPIO189);intr(GPIO190);intr(GPIO191);
87 87
88static void (* const irqvector[])(void) = 88static void (* const irqvector[])(void) =
89{ 89{
90 // @0
90 I2C1,I2C0,UART3,UART2,UART1,UART0,GPU,SSI1, 91 I2C1,I2C0,UART3,UART2,UART1,UART0,GPU,SSI1,
91 SSI0,TSSI,UIRQ,KBC,UIRQ,UIRQ,UIRQ,UIRQ, 92 SSI0,TSSI,UIRQ,KBC,UIRQ,UIRQ,UIRQ,UIRQ,
92 UIRQ,UIRQ,SADC,ETH,UHC,OTG,UIRQ,UIRQ, 93 UIRQ,UIRQ,SADC,ETH,UHC,OTG,UIRQ,UIRQ,
93 UIRQ,TCU2,TCU1,TCU0,GPS,IPU,CIM,LCD, 94 UIRQ,TCU2,TCU1,TCU0,GPS,IPU,CIM,LCD,
94 95 // @32
95 RTC,OWI,AIC,MSC2,MSC1,MSC0,SCC,BCH, // 32 96 RTC,OWI,AIC,MSC2,MSC1,MSC0,SCC,BCH,
96 PCM,HARB0,HARB2,AOSD,CPM,UIRQ, 97 PCM,HARB0,HARB2,AOSD,CPM, // end of HW IRQs, everything else is SW
97 98 // @45
98 DMA0,DMA1,DMA2,DMA3,DMA4,DMA5,DMA6,DMA7, // 46 99 UIRQ,DMA0,DMA1,DMA2,DMA3,DMA4,DMA5,
99 DMA8,DMA9,DMA10,DMA11,MDMA0,MDMA1,MDMA2,BDMA0, 100 DMA6,DMA7,DMA8,DMA9,DMA10,DMA11,MDMA0,MDMA1,
100 BDMA1,BDMA2, 101 MDMA2,BDMA0,BDMA1,BDMA2,
101 102 // @64
102 GPIO0,GPIO1,GPIO2,GPIO3,GPIO4,GPIO5,GPIO6,GPIO7, // 64 103 GPIO0,GPIO1,GPIO2,GPIO3,GPIO4,GPIO5,GPIO6,GPIO7,
103 GPIO8,GPIO9,GPIO10,GPIO11,GPIO12,GPIO13,GPIO14,GPIO15, 104 GPIO8,GPIO9,GPIO10,GPIO11,GPIO12,GPIO13,GPIO14,GPIO15,
104 GPIO16,GPIO17,GPIO18,GPIO19,GPIO20,GPIO21,GPIO22,GPIO23, 105 GPIO16,GPIO17,GPIO18,GPIO19,GPIO20,GPIO21,GPIO22,GPIO23,
105 GPIO24,GPIO25,GPIO26,GPIO27,GPIO28,GPIO29,GPIO30,GPIO31, 106 GPIO24,GPIO25,GPIO26,GPIO27,GPIO28,GPIO29,GPIO30,GPIO31,
@@ -243,6 +244,23 @@ static int get_irq_number(void)
243 if (UNLIKELY(irq0 < 0) && UNLIKELY(irq1 < 0)) 244 if (UNLIKELY(irq0 < 0) && UNLIKELY(irq1 < 0))
244 return -1; 245 return -1;
245 246
247#if 1
248 // Prioritze AIC and SADC, then everything on ipl1 (ie MSC mostly)
249 if (ipl1 & 1<<(IRQ_AIC-32)) {
250 irq = IRQ_AIC;
251 ipl1 &= ~(1<<(IRQ_AIC-32));
252 } else if (ipl0 & 1<<IRQ_SADC) {
253 irq = IRQ_SADC;
254 ipl0 &= ~(1<<IRQ_SADC);
255 } else if (ipl1) {
256 irq = irq1 + 32;
257 ipl1 &= ~(1<<irq1);
258 } else {
259 irq = irq0;
260 ipl0 &= ~(1<<irq0);
261 }
262#else
263 // Prioritize I2C0, I2C1, IPL0, and finally IPL1
246 if (!(ipl0 & 3)) { 264 if (!(ipl0 & 3)) {
247 if (ipl0) { 265 if (ipl0) {
248 irq = irq0; 266 irq = irq0;
@@ -251,7 +269,7 @@ static int get_irq_number(void)
251 irq = irq1 + 32; 269 irq = irq1 + 32;
252 ipl1 &= ~(1<<irq1); 270 ipl1 &= ~(1<<irq1);
253 } 271 }
254 } else { 272 } else {
255 if (ipl0 & 2) { 273 if (ipl0 & 2) {
256 irq = 1; 274 irq = 1;
257 ipl0 &= ~(1<<irq); 275 ipl0 &= ~(1<<irq);
@@ -260,6 +278,7 @@ static int get_irq_number(void)
260 ipl0 &= ~(1<<irq); 278 ipl0 &= ~(1<<irq);
261 } 279 }
262 } 280 }
281#endif
263 282
264 switch (irq) 283 switch (irq)
265 { 284 {