Module Name: src
Committed By: matt
Date: Fri Jan 24 05:14:11 UTC 2014
Modified Files:
src/sys/arch/arm/cortex: a9_mpsubr.S
Log Message:
Deal with writing bswapped com registers at COM_MULT register widths.
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/cortex/a9_mpsubr.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/cortex/a9_mpsubr.S
diff -u src/sys/arch/arm/cortex/a9_mpsubr.S:1.11 src/sys/arch/arm/cortex/a9_mpsubr.S:1.12
--- src/sys/arch/arm/cortex/a9_mpsubr.S:1.11 Thu Dec 26 00:19:07 2013
+++ src/sys/arch/arm/cortex/a9_mpsubr.S Fri Jan 24 05:14:11 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: a9_mpsubr.S,v 1.11 2013/12/26 00:19:07 joerg Exp $ */
+/* $NetBSD: a9_mpsubr.S,v 1.12 2014/01/24 05:14:11 matt Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -227,16 +227,51 @@ xputc:
mov r2, #TIMO
ldr r3, .Luart0
-1: ldrb r1, [r3, #(COM_LSR*COM_MULT)]
+1:
+#if COM_MULT == 1
+ ldrb r1, [r3, #(COM_LSR*COM_MULT)]
+#else
+#if COM_MULT == 2
+ ldrh r1, [r3, #(COM_LSR*COM_MULT)]
+#elif COM_MULT == 4
+ ldr r1, [r3, #(COM_LSR*COM_MULT)]
+#endif
+#ifdef COM_BSWAP
+ lsr r1, r1, #(COM_MULT-1)*8
+#endif
+#endif
tst r1, #LSR_TXRDY
bne 2f
subs r2, r2, #1
bne 1b
2:
+#if COM_MULT == 1
strb r0, [r3, #COM_DATA]
+#else
+#ifdef COM_BSWAP
+ lsl r0, r0, #(COM_MULT-1)*8
+#endif
+#if COM_MULT == 2
+ strh r0, [r3, #COM_DATA]
+#else
+ str r0, [r3, #COM_DATA]
+#endif
+#endif
mov r2, #TIMO
-3: ldrb r1, [r3, #(COM_LSR*COM_MULT)]
+3:
+#if COM_MULT == 1
+ ldrb r1, [r3, #(COM_LSR*COM_MULT)]
+#else
+#if COM_MULT == 2
+ ldrh r1, [r3, #(COM_LSR*COM_MULT)]
+#elif COM_MULT == 4
+ ldr r1, [r3, #(COM_LSR*COM_MULT)]
+#endif
+#ifdef COM_BSWAP
+ lsr r1, r1, #(COM_MULT-1)*8
+#endif
+#endif
tst r1, #LSR_TSRE
bne 4f
subs r2, r2, #1