summaryrefslogtreecommitdiffstats
path: root/firmware/target/mips
diff options
context:
space:
mode:
authorMarcin Bukat <marcin.bukat@gmail.com>2012-10-26 12:55:13 +0200
committerMarcin Bukat <marcin.bukat@gmail.com>2013-03-11 08:33:18 +0100
commit027c035a4e4b24e64bbb4d907f143a208c68675b (patch)
tree1e5107d50fb49c9eb74dc2689eadaf826340b553 /firmware/target/mips
parent44c32f84051549454cc1dfdc2ceb2191266b857f (diff)
downloadrockbox-027c035a4e4b24e64bbb4d907f143a208c68675b.tar.gz
rockbox-027c035a4e4b24e64bbb4d907f143a208c68675b.zip
jz4740: a few minor fixes
This was spotted while playing with qemu-jz: 1) rockbox reads TECR and TESR which are described as write-only registers. Datasheet doesn't mention what happens if they are readed. Apparently this doesn't have fatal side effects. It comes down to two defines from jz4740.h __tcu_stop_counter(n) and __tcu_start_counter(n) which use read-modify-write sequence. 2) rockbox accesses out of bound offset 0xd4 in DMA memspace. It comes from dis_irq() in system-jz4740.c. NUM_DMA is 6 but DMA channels are 0-5 so (irq <= IRQ_DMA_0 + NUM_DMA)) bound check is wrong. This are *NOT* tested on device. Change-Id: I29dff6a4f828030877b7d50fbcc98866478b9e3d Reviewed-on: http://gerrit.rockbox.org/338 Reviewed-by: Bertrik Sikken <bertrik@sikken.nl> Tested-by: Purling Nayuki <cyq.yzfl@gmail.com> Reviewed-by: Marcin Bukat <marcin.bukat@gmail.com>
Diffstat (limited to 'firmware/target/mips')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/system-jz4740.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/system-jz4740.c b/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
index f7df690dd5..ab232baf65 100644
--- a/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
@@ -137,7 +137,7 @@ static void dis_irq(unsigned int irq)
if (!gpio_irq_mask[t])
__intc_mask_irq(IRQ_GPIO0 - t);
}
- else if ((irq >= IRQ_DMA_0) && (irq <= IRQ_DMA_0 + NUM_DMA))
+ else if ((irq >= IRQ_DMA_0) && (irq < IRQ_DMA_0 + NUM_DMA))
{
__dmac_channel_disable_irq(irq - IRQ_DMA_0);
dma_irq_mask &= ~(1 << (irq - IRQ_DMA_0));