X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fppc%2Fboot%2Fsimple%2Fmv64x60_tty.c;h=5b45eb46b669335482fd7354aeff34191a69eab8;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=de260eafdd31d7272cac9b8f9b28f93ff52156a9;hpb=6a77f38946aaee1cd85eeec6cf4229b204c15071;p=linux-2.6.git diff --git a/arch/ppc/boot/simple/mv64x60_tty.c b/arch/ppc/boot/simple/mv64x60_tty.c index de260eafd..5b45eb46b 100644 --- a/arch/ppc/boot/simple/mv64x60_tty.c +++ b/arch/ppc/boot/simple/mv64x60_tty.c @@ -18,36 +18,18 @@ #include #include #include +#include #include #include +u32 mv64x60_console_baud = 9600; +u32 mv64x60_mpsc_clk_src = 8; /* TCLK */ +u32 mv64x60_mpsc_clk_freq = 100000000; + extern void udelay(long); static void stop_dma(int chan); -static u32 mv64x60_base = CONFIG_MV64X60_NEW_BASE; - -inline unsigned -mv64x60_in_le32(volatile unsigned *addr) -{ - unsigned ret; - - __asm__ __volatile__("lwbrx %0,0,%1; eieio" : "=r" (ret) : - "r" (addr), "m" (*addr)); - return ret; -} - -inline void -mv64x60_out_le32(volatile unsigned *addr, int val) -{ - __asm__ __volatile__("stwbrx %1,0,%2; eieio" : "=m" (*addr) : - "r" (val), "r" (addr)); -} - -#define MV64x60_REG_READ(offs) \ - (mv64x60_in_le32((volatile uint *)(mv64x60_base + (offs)))) -#define MV64x60_REG_WRITE(offs, d) \ - (mv64x60_out_le32((volatile uint *)(mv64x60_base + (offs)), (int)(d))) - +static void __iomem *mv64x60_base = (void __iomem *)CONFIG_MV64X60_NEW_BASE; struct sdma_regs { u32 sdc; @@ -142,9 +124,6 @@ serial_init(int chan, void *ignored) { u32 mpsc_routing_base, sdma_base, brg_bcr, cdv; int i; - extern long mv64x60_console_baud; - extern long mv64x60_mpsc_clk_src; - extern long mv64x60_mpsc_clk_freq; chan = (chan == 1); /* default to chan 0 if anything but 1 */ @@ -157,8 +136,7 @@ serial_init(int chan, void *ignored) sdma_base = MV64x60_SDMA_0_OFFSET; brg_bcr = MV64x60_BRG_0_OFFSET + BRG_BCR; SDMA_REGS_INIT(&sdma_regs[0], MV64x60_SDMA_0_OFFSET); - } - else { + } else { sdma_base = MV64x60_SDMA_1_OFFSET; brg_bcr = MV64x60_BRG_1_OFFSET + BRG_BCR; SDMA_REGS_INIT(&sdma_regs[0], MV64x60_SDMA_1_OFFSET); @@ -186,10 +164,10 @@ serial_init(int chan, void *ignored) td[chan][TX_NUM_DESC - 1].next_desc_ptr = (u32)&td[chan][0]; /* Set MPSC Routing */ - MV64x60_REG_WRITE(mpsc_routing_base + MPSC_MRR, 0x3ffffe38); + out_le32(mv64x60_base + mpsc_routing_base + MPSC_MRR, 0x3ffffe38); #ifdef CONFIG_GT64260 - MV64x60_REG_WRITE(GT64260_MPP_SERIAL_PORTS_MULTIPLEX, 0x00001102); + out_le32(mv64x60_base + GT64260_MPP_SERIAL_PORTS_MULTIPLEX, 0x00001102); #else /* Must be MV64360 or MV64460 */ { u32 enables, prot_bits, v; @@ -197,68 +175,70 @@ serial_init(int chan, void *ignored) /* Set up comm unit to memory mapping windows */ /* Note: Assumes MV64x60_CPU2MEM_WINDOWS == 4 */ - enables = MV64x60_REG_READ(MV64360_CPU_BAR_ENABLE) & 0xf; + enables = in_le32(mv64x60_base + MV64360_CPU_BAR_ENABLE) & 0xf; prot_bits = 0; for (i=0; icmd_stat = SDMA_DESC_CMDSTAT_L | SDMA_DESC_CMDSTAT_F | SDMA_DESC_CMDSTAT_O; - MV64x60_REG_WRITE(sdma_regs[com_port].sctdp, tdp); - MV64x60_REG_WRITE(sdma_regs[com_port].sftdp, tdp); - MV64x60_REG_WRITE(sdma_regs[com_port].sdcm, - MV64x60_REG_READ(sdma_regs[com_port].sdcm) | SDMA_SDCM_TXD); - - return; + out_le32(mv64x60_base + sdma_regs[com_port].sctdp, (int)tdp); + out_le32(mv64x60_base + sdma_regs[com_port].sftdp, (int)tdp); + out_le32(mv64x60_base + sdma_regs[com_port].sdcm, + in_le32(mv64x60_base + sdma_regs[com_port].sdcm) | + SDMA_SDCM_TXD); } unsigned char @@ -366,8 +344,7 @@ serial_tstc(unsigned long com_port) if (++cur_rd[com_port] >= RX_NUM_DESC) cur_rd[com_port] = 0; rdp = (struct mv64x60_rx_desc *)rdp->next_desc_ptr; - } - else { + } else { rc = 1; break; } @@ -380,5 +357,4 @@ void serial_close(unsigned long com_port) { stop_dma(com_port); - return; }