summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-03-31 01:29:50 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-03-31 01:29:50 +0000
commita65406e3f48daed80f4d1b8627fae38a683fecb6 (patch)
tree0ba581f99dfcf18727fa05152b5a8b25fae86410 /firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c
parent241fd0fbdb218518cabbc6430dc0159b348549bc (diff)
downloadrockbox-a65406e3f48daed80f4d1b8627fae38a683fecb6.tar.gz
rockbox-a65406e3f48daed80f4d1b8627fae38a683fecb6.zip
meg-fx: It's important to make sure certain interrupt-related registers have bits changed atomically.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16894 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c')
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c
index 19e9bed1e1..f789827d80 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c
@@ -104,6 +104,24 @@ void memory_init(void) {
enable_mmu();
}
+void s3c_regmod(volatile int *reg, unsigned int set, unsigned int clr)
+{
+ int oldstatus = disable_interrupt_save(IRQ_FIQ_STATUS);
+ unsigned int val = *reg;
+ *reg = (val | set) & ~clr;
+ restore_interrupt(oldstatus);
+}
+
+void s3c_regset(volatile int *reg, unsigned int mask)
+{
+ s3c_regmod(reg, mask, 0);
+}
+
+void s3c_regclr(volatile int *reg, unsigned int mask)
+{
+ s3c_regmod(reg, 0, mask);
+}
+
void system_init(void)
{
/* Disable interrupts and set all to IRQ mode */
@@ -146,7 +164,7 @@ void system_init(void)
/* Turn off NAND flash controller */
| (1 << 4)
-
+
);
/* Turn off the USB PLL */