|
@@ -41,13 +41,21 @@
|
|
|
|
|
|
|
|
|
#define DELAY udelay(10000)
|
|
|
+ /* Sometimes the store word instruction hangs while writing to one
|
|
|
+ * of the Switch registers. Moving the instruction into a separate
|
|
|
+ * function somehow makes the problem go away.
|
|
|
+ */
|
|
|
+static void SWORD(volatile u32 * reg, u32 value)
|
|
|
+{
|
|
|
+ *reg = value;
|
|
|
+}
|
|
|
|
|
|
#define DMA_WRITE_REG(reg, value) *((volatile u32 *)reg) = (u32)value;
|
|
|
#define DMA_READ_REG(reg, value) value = (u32)*((volatile u32*)reg)
|
|
|
#define SW_WRITE_REG(reg, value) \
|
|
|
- *((volatile u32*)reg) = (u32)value;\
|
|
|
+ SWORD(reg, value);\
|
|
|
DELAY;\
|
|
|
- *((volatile u32*)reg) = (u32)value;
|
|
|
+ SWORD(reg, value);
|
|
|
|
|
|
#define SW_READ_REG(reg, value) \
|
|
|
value = (u32)*((volatile u32*)reg);\
|