diff options
| author | Jens Arnold <amiconn@rockbox.org> | 2007-11-02 00:24:20 +0000 |
|---|---|---|
| committer | Jens Arnold <amiconn@rockbox.org> | 2007-11-02 00:24:20 +0000 |
| commit | c888a9bebef0c631db744ee12fda34eea07b7b1c (patch) | |
| tree | 518392b449a070ea5dc8cb71aa29bb19bda48830 | |
| parent | ef8a7eaf2a17045429af27ad7be44ea99f467816 (diff) | |
| download | rockbox-c888a9bebef0c631db744ee12fda34eea07b7b1c.zip rockbox-c888a9bebef0c631db744ee12fda34eea07b7b1c.tar.gz rockbox-c888a9bebef0c631db744ee12fda34eea07b7b1c.tar.bz2 rockbox-c888a9bebef0c631db744ee12fda34eea07b7b1c.tar.xz | |
Bootloaders are single core... (aka fix red)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15398 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/target/arm/ipod/video/lcd-video.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/firmware/target/arm/ipod/video/lcd-video.c b/firmware/target/arm/ipod/video/lcd-video.c index 232458e..8caa1b9 100644 --- a/firmware/target/arm/ipod/video/lcd-video.c +++ b/firmware/target/arm/ipod/video/lcd-video.c @@ -65,7 +65,9 @@ struct { long update_timeout; enum lcd_status state; bool blocked; +#if NUM_CORES > 1 struct corelock cl; /* inter-core sync */ +#endif } lcd_state IBSS_ATTR; @@ -108,7 +110,9 @@ static void bcm_setup_rect(unsigned x, unsigned y, static void lcd_tick(void) { /* No set_irq_level - already in interrupt context */ +#if NUM_CORES > 1 corelock_lock(&lcd_state.cl); +#endif if (!lcd_state.blocked && lcd_state.state >= LCD_NEED_UPDATE) { @@ -131,17 +135,22 @@ static void lcd_tick(void) lcd_state.state = LCD_IDLE; } } +#if NUM_CORES > 1 corelock_unlock(&lcd_state.cl); +#endif } static inline void lcd_block_tick(void) { int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); +#if NUM_CORES > 1 corelock_lock(&lcd_state.cl); lcd_state.blocked = true; corelock_unlock(&lcd_state.cl); - +#else + lcd_state.blocked = true; +#endif set_irq_level(oldlevel); } @@ -151,8 +160,9 @@ static void lcd_unblock_and_update(void) bool bcm_is_busy; int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); +#if NUM_CORES > 1 corelock_lock(&lcd_state.cl); - +#endif data = bcm_read32(0x1F8); bcm_is_busy = (data == 0xFFFA0005 || data == 0xFFFF); @@ -169,8 +179,10 @@ static void lcd_unblock_and_update(void) lcd_state.state = LCD_NEED_UPDATE; /* Post update request */ } lcd_state.blocked = false; + +#if NUM_CORES > 1 corelock_unlock(&lcd_state.cl); - +#endif set_irq_level(oldlevel); } |