On 06/01/2010 08:43 AM, Martyn Welch wrote:
diff --git a/arch/powerpc/kernel/head_32.S
b/arch/powerpc/kernel/head_32.S
index e025e89..861cace 100644
--- a/arch/powerpc/kernel/head_32.S
+++ b/arch/powerpc/kernel/head_32.S
@@ -1194,12 +1194,13 @@ setup_disp_bat:
   #endif /* CONFIG_BOOTX_TEXT */

   #ifdef CONFIG_PPC_EARLY_DEBUG_CPM
+#define PPC_EARLY_DEBUG_CPM_ADDR
ASM_CONST(CONFIG_PPC_EARLY_DEBUG_CPM_ADDR)
   setup_cpm_bat:
-    lis    r8, 0xf000
+    lis    r8, ppc_early_debug_cpm_a...@ha
       ori    r8, r8,    0x002a
       mtspr    SPRN_DBAT1L, r8

-    lis    r11, 0xf000
+    lis    r11, ppc_early_debug_cpm_a...@ha
       ori    r11, r11, (BL_1M<<  2) | 2
       mtspr    SPRN_DBAT1U, r11

Only the physical address should depend on where IMMR is.  We should
use fixmap instead of an arbitrary address for the effective address.
There's a existing FIX_EARLY_DEBUG_BASE, but it's only 128 KiB so
we'll have to either grow it, or map only a subset of IMMR.



I think that's a more fundamental change to CPM early debug than I can
handle right now.

Is IMMRBASE on your board at some address that has a low likelihood of conflicting when treated as a kernel effective address?

Plus, CONFIG_PPC_EARLY_DEBUG_CPM_ADDR points to the TX descriptor, not
to the beginning of IMMR, so you should mask off the lower 20 bits
(the offset is probably less than 64K, and the BAT might just ignore
the extra bits anyway, but why take chances?).



I assume that an extra instruction "andi   r8, r8, 0xfff0" after each
"lis" instruction  would be what you are looking for?


"andis" even.

"lis r8, (PPC_EARLY_DEBUG_CPM_ADDR & 0xfff00000)@h" should work too.

-Scott
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to