dslinux/linux-2.6.x/include/asm-arm/arch-nds gbarom-macro.S
amadeus
dslinux_amadeus at user.in-berlin.de
Mon Aug 28 20:43:36 CEST 2006
Update of /cvsroot/dslinux/dslinux/linux-2.6.x/include/asm-arm/arch-nds
In directory antilope:/tmp/cvs-serv16050/linux-2.6.x/include/asm-arm/arch-nds
Modified Files:
gbarom-macro.S
Log Message:
Added macros for switching of supercard and M3
Index: gbarom-macro.S
===================================================================
RCS file: /cvsroot/dslinux/dslinux/linux-2.6.x/include/asm-arm/arch-nds/gbarom-macro.S,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- gbarom-macro.S 27 Aug 2006 16:29:39 -0000 1.1
+++ gbarom-macro.S 28 Aug 2006 18:43:34 -0000 1.2
@@ -88,7 +88,110 @@
.endm
/*****************************************************************************/
+/*
+ * Supercard SD/CF ROM/RAM/IO switching.
+ */
+#define SC_LOCK 0x09FFFFFE
+ /* bit 0: must be 1, unknown */
+ /* bit 1: enable IO interface (SD,CF) */
+ /* bit 2: enable R/W SDRAM access */
+ /* bit 3-7: unknown, 0 */
+#define SC_MODE_ROM 0x01 /* 32 MByte ROM */
+#define SC_MODE_IO 0x03 /* 16 MByte ROM + 16 MByte IO */
+#define SC_MODE_RAM 0x05 /* 32 MByte RAM */
+#define SC_MODE_IORAM 0x07 /* 16 MByte RAM + 16 MByte IO */
+/* NOTE: the Supercard Lite doesn't like WRITE access to lower
+ ===== 16 MByte RAM, while I/O is in progress. */
+#define SC_PATTERN 0xA55A /* Key pattern for SC_LOCK */
+/* sc_setmode: supercard SD/CF GBA ROM/RAM/IO switching.
+ Use only register R3 and IP.
+ NOTE: this macro destroys the RAM contents at address SC_LOCK. */
+ .macro sc_setmode mode
+ ldr r3, =SC_LOCK
+ ldr ip, =SC_PATTERN
+ strh ip, [r3]
+ strh ip, [r3]
+ mov ip, #\mode
+ strh ip, [r3]
+ strh ip, [r3]
+ .endm
+/*****************************************************************************/
+/*
+ * M3 Adapter SD/CF ROM/RAM/IO switching.
+ */
+/*
+ * m3_set_io: M3SD/CF is set to I/O ("MEDIA") mode.
+ * Use only register R3 and IP.
+ */
+ .macro m3_set_io
+ ldr r3, =0x08e00002
+ ldrh ip, [r3]
+ ldr r3, =0x0800000e
+ ldrh ip, [r3]
+ ldr r3, =0x08801ffc
+ ldrh ip, [r3]
+ ldr r3, =0x0800104a
+ ldrh ip, [r3]
+ ldr r3, =0x08800612
+ ldrh ip, [r3]
+ ldr r3, =0x08000000
+ ldrh ip, [r3]
+ ldr r3, =0x08801b66
+ ldrh ip, [r3]
+ ldr r3, =0x08800006
+ ldrh ip, [r3]
+ ldr r3, =0x0800080e
+ ldrh ip, [r3]
+ ldr r3, =0x08000000
+ ldrh ip, [r3]
+ ldr r3, =0x09000000
+ ldrh ip, [r3]
+ .endm
+/*
+ * m3_set_rom: M3SD/CF is set to ROM mode.
+ * Use only register R3 and IP.
+ */
+ .macro m3_set_rom
+ ldr r3, =0x08e00002
+ ldrh ip, [r3]
+ ldr r3, =0x0800000e
+ ldrh ip, [r3]
+ ldr r3, =0x08801ffc
+ ldrh ip, [r3]
+ ldr r3, =0x0800104a
+ ldrh ip, [r3]
+ ldr r3, =0x08800612
+ ldrh ip, [r3]
+ ldr r3, =0x08000000
+ ldrh ip, [r3]
+ ldr r3, =0x08801b66
+ ldrh ip, [r3]
+ ldr r3, =0x08800008
+ ldrh ip, [r3]
+ ldr r3, =0x0800080e
+ ldrh ip, [r3]
+ ldr r3, =0x08000000
+ ldrh ip, [r3]
+ ldr r3, =0x080001e4
+ ldrh ip, [r3]
+ ldrh ip, [r3]
+ ldr r3, =0x08000188
+ ldrh ip, [r3]
+ ldrh ip, [r3]
+ .endm
+/*
+ * m3_set_rw: if the previous mode of M3SD/CF was "ROM",
+ * allow write access. Use only register R3 and IP.
+ */
+ .macro m3_set_rw
+ ldr r3, =0x09FFEFFE
+ ldr ip, =0xAA55
+ swph ip, ip, [r3] @ be carefull not to overwrite memory
+ strh ip, [r3]
+ .endm
+
+/*****************************************************************************/
More information about the dslinux-commit
mailing list