diff options
Diffstat (limited to 'arch/powerpc/sysdev/cpm_common.c')
| -rw-r--r-- | arch/powerpc/sysdev/cpm_common.c | 22 | 
1 files changed, 17 insertions, 5 deletions
diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_common.c index 0ac12e5fd8ab..911456d17713 100644 --- a/arch/powerpc/sysdev/cpm_common.c +++ b/arch/powerpc/sysdev/cpm_common.c @@ -28,6 +28,7 @@  #include <asm/udbg.h>  #include <asm/io.h>  #include <asm/cpm.h> +#include <asm/fixmap.h>  #include <soc/fsl/qe/qe.h>  #include <mm/mmu_decl.h> @@ -37,25 +38,36 @@  #endif  #ifdef CONFIG_PPC_EARLY_DEBUG_CPM -static u32 __iomem *cpm_udbg_txdesc = -	(u32 __iomem __force *)CONFIG_PPC_EARLY_DEBUG_CPM_ADDR; +static u32 __iomem *cpm_udbg_txdesc; +static u8 __iomem *cpm_udbg_txbuf;  static void udbg_putc_cpm(char c)  { -	u8 __iomem *txbuf = (u8 __iomem __force *)in_be32(&cpm_udbg_txdesc[1]); -  	if (c == '\n')  		udbg_putc_cpm('\r');  	while (in_be32(&cpm_udbg_txdesc[0]) & 0x80000000)  		; -	out_8(txbuf, c); +	out_8(cpm_udbg_txbuf, c);  	out_be32(&cpm_udbg_txdesc[0], 0xa0000001);  }  void __init udbg_init_cpm(void)  { +#ifdef CONFIG_PPC_8xx +	cpm_udbg_txdesc = (u32 __iomem __force *) +			  (CONFIG_PPC_EARLY_DEBUG_CPM_ADDR - PHYS_IMMR_BASE + +			   VIRT_IMMR_BASE); +	cpm_udbg_txbuf = (u8 __iomem __force *) +			 (in_be32(&cpm_udbg_txdesc[1]) - PHYS_IMMR_BASE + +			  VIRT_IMMR_BASE); +#else +	cpm_udbg_txdesc = (u32 __iomem __force *) +			  CONFIG_PPC_EARLY_DEBUG_CPM_ADDR; +	cpm_udbg_txbuf = (u8 __iomem __force *)in_be32(&cpm_udbg_txdesc[1]); +#endif +  	if (cpm_udbg_txdesc) {  #ifdef CONFIG_CPM2  		setbat(1, 0xf0000000, 0xf0000000, 1024*1024, PAGE_KERNEL_NCG);  |