From f410b994a908c53f3e0b3a0136d4f0956c3a2000 Mon Sep 17 00:00:00 2001 From: xiangfu Date: Wed, 30 Jul 2008 08:32:03 -0400 Subject: [PATCH] the serial console begin output something --- qiboot/Makefile | 2 +- qiboot/include/serial.h | 41 +++++++++++++ qiboot/src/serial.c | 129 ++++++++++++++++++++++++++++++++++++++- qiboot/src/start.S | 12 ++-- qiboot/src/start_kboot.c | 3 +- 5 files changed, 178 insertions(+), 9 deletions(-) diff --git a/qiboot/Makefile b/qiboot/Makefile index bfd6245..515553b 100644 --- a/qiboot/Makefile +++ b/qiboot/Makefile @@ -56,4 +56,4 @@ blink_led:src/led_on.S $(OBJCOPY) -O binary -S led_on_temp.o $(IMAGE)/led_on clean: - rm -f src/*.o src/*~ ${IMAGE}* ${TARGET} + rm -f src/*.o src/*~ include/*~ ${IMAGE}* ${TARGET} diff --git a/qiboot/include/serial.h b/qiboot/include/serial.h index fb740ef..1a773eb 100644 --- a/qiboot/include/serial.h +++ b/qiboot/include/serial.h @@ -24,6 +24,8 @@ #define UART1 1 #define UART2 2 +#define rGPHCON (*(volatile unsigned *)0x56000070) /*UART 0 Line control*/ + #define rULCON0 (*(volatile unsigned *)0x50000000) /*UART 0 Line control*/ #define rUCON0 (*(volatile unsigned *)0x50000004) /*UART 0 Control*/ #define rUFCON0 (*(volatile unsigned *)0x50000008) /*UART 0 FIFO control*/ @@ -59,5 +61,44 @@ #define WrUTXH2(ch) (*(volatile unsigned char *)0x50008020)=(unsigned char)(ch) #define RdURXH2() (*(volatile unsigned char *)0x50008024) + + +// I/O PORT +#define rGPACON (*(volatile unsigned *)0x56000000) +#define rGPADAT (*(volatile unsigned *)0x56000004) + +#define rGPBCON (*(volatile unsigned *)0x56000010) +#define rGPBDAT (*(volatile unsigned *)0x56000014) +#define rGPBUP (*(volatile unsigned *)0x56000018) + +#define rGPCCON (*(volatile unsigned *)0x56000020) +#define rGPCDAT (*(volatile unsigned *)0x56000024) +#define rGPCUP (*(volatile unsigned *)0x56000028) + +#define rGPDCON (*(volatile unsigned *)0x56000030) +#define rGPDDAT (*(volatile unsigned *)0x56000034) +#define rGPDUP (*(volatile unsigned *)0x56000038) + +#define rGPECON (*(volatile unsigned *)0x56000040) +#define rGPEDAT (*(volatile unsigned *)0x56000044) +#define rGPEUP (*(volatile unsigned *)0x56000048) + +#define rGPFCON (*(volatile unsigned *)0x56000050) +#define rGPFDAT (*(volatile unsigned *)0x56000054) +#define rGPFUP (*(volatile unsigned *)0x56000058) + +#define rGPGCON (*(volatile unsigned *)0x56000060) +#define rGPGDAT (*(volatile unsigned *)0x56000064) +#define rGPGUP (*(volatile unsigned *)0x56000068) + +#define rGPHCON (*(volatile unsigned *)0x56000070) +#define rGPHDAT (*(volatile unsigned *)0x56000074) +#define rGPHUP (*(volatile unsigned *)0x56000078) + +#define rGPJCON (*(volatile unsigned *)0x560000d0) //Port J control +#define rGPJDAT (*(volatile unsigned *)0x560000d4) //Port J data +#define rGPJUP (*(volatile unsigned *)0x560000d8) //Port J data + +void port_init(void); void serial_init (const int ubrdiv_val,const int uart); void serial_putc (const int uart,const char c); diff --git a/qiboot/src/serial.c b/qiboot/src/serial.c index 840a9d8..23d6747 100644 --- a/qiboot/src/serial.c +++ b/qiboot/src/serial.c @@ -30,6 +30,9 @@ void serial_init (const int ubrdiv_val,const int uart) case UART0: rULCON0 = 0x3; rUCON0 = 0x245; + rGPHCON = rGPHCON & ~(3 << 16); + delay(1); + rGPHCON = rGPHCON & ~(3 << 16)|(1 << 17); rUFCON0 = 0x0; rUMCON0 = 0x0; rUBRDIV0 = ubrdiv_val; @@ -44,6 +47,9 @@ void serial_init (const int ubrdiv_val,const int uart) case UART2: rULCON2 = 0x3; rUCON2 = 0x245; + rGPHCON = rGPHCON & ~(3 << 16); + delay(1); + rGPHCON = rGPHCON & ~(3 << 16)|(1 << 17); rUFCON2 = 0x0; rUBRDIV2 = ubrdiv_val; break; @@ -60,16 +66,17 @@ void serial_putc (const int uart,const char c) { case UART0: while ( !( rUTRSTAT0 & 0x2 ) ); - delay(10); + delay(1); WrUTXH0(c); break; case UART1: while ( !( rUTRSTAT1 & 0x2 ) ); - delay(10); + delay(1); WrUTXH1(c); break; case UART2: while ( !( rUTRSTAT2 & 0x2 ) ); + delay(1); WrUTXH2(c); break; default: @@ -77,3 +84,121 @@ void serial_putc (const int uart,const char c) } } + +/* + * ===================================================================== + * PORTS Librarues + * ===================================================================== + */ +void port_init(void) +{ + //CAUTION:Follow the configuration order for setting the ports. + // 1) setting value(GPnDAT) + // 2) setting control register (GPnCON) + // 3) configure pull-up resistor(GPnUP) + + /* 32bit data bus configuration */ + /* + * === PORT A GROUP + * Ports : GPA22 GPA21 GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12 + * Signal : nFCE nRSTOUT nFRE nFWE ALE CLE nGCS5 nGCS4 nGCS3 nGCS2 nGCS1 + * Binary : 1 1 1 , 1 1 1 1 , 1 1 1 1 + * Ports : GPA11 GPA10 GPA9 GPA8 GPA7 GPA6 GPA5 GPA4 GPA3 GPA2 GPA1 GPA0 + * Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0 + * Binary : 1 1 1 1 , 1 1 1 1 , 1 1 1 1 + */ + rGPACON = 0x007E5FFF; + rGPADAT |= (1 << 16); /* Set GPA16 to high (nNAND_WP) */ + /* + * ===* PORT B GROUP + * Ports : GPB10 GPB9 GPB8 GPB7 GPB6 GPB5 GPB4 GPB3 GPB2 GPB1 GPB0 + * Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard + * Setting: INPUT OUTPUT INPUT OUTPUT INPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT + * Binary : 00 , 01 00 , 01 00 , 01 01 , 01 01 , 01 01 + */ + rGPBCON = 0x00155555; + rGPBUP = 0x000007FF; + /* + * === PORT C GROUP + * Ports : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8 GPC7 GPC6 GPC5 GPC4 GPC3 GPC2 GPC1 GPC0 + * Signal : VD7 VD6 VD5 VD4 VD3 VD2 VD1 VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND + * Binary : 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 + */ + rGPCCON = 0x55555155; + rGPCUP = 0x0000FFFF & ~(1 << 5); + rGPCDAT |= (1 << 13) | (1 << 15); /* index detect -> hi */ + /* + * === PORT D GROUP + * Ports : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0 + * Signal : VD23 VD22 VD21 VD20 VD19 VD18 VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9 VD8 + * Binary : 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 ,10 10 + */ + rGPDCON = 0x55555555; + rGPDUP = 0x0000FFFF; + rGPDDAT |= (1 << 0) | (1 << 3) | (1 << 4); /* index detect -> hi */ + /* + * === PORT E GROUP + * Ports : GPE15 GPE14 GPE13 GPE12 GPE11 GPE10 GPE9 GPE8 GPE7 GPE6 GPE5 GPE4 + * Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK I2SSDO + * Binary : 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , + * ------------------------------------------------------------------------------------------------------- + * Ports : GPE3 GPE2 GPE1 GPE0 + * Signal : I2SSDI CDCLK I2SSCLK I2SLRCK + * Binary : 10 10 , 10 10 + */ + rGPECON = 0xAAAAAAAA; + rGPEUP = 0x0000FFFF & ~(1 << 11); + /* + * === PORT F GROUP + * Ports : GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0 + * Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0 + * Setting: Output Output Output Output EINT3 EINT2 EINT1 EINT0 + * Binary : 01 01 , 01 01 , 10 10 , 10 10 + */ + /* pulldown on GPF03: TP-4705+debug - debug conn will float */ + rGPFCON = 0x0000AAAA; + rGPFUP = 0x000000FF & ~(1 << 3); + + + /* + * === PORT G GROUP + * Ports : GPG15 GPG14 GPG13 GPG12 GPG11 GPG10 GPG9 GPG8 GPG7 GPG6 + * Signal : nYPON YMON nXPON XMON EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI + * Setting: nYPON YMON nXPON XMON EINT19 Output Output Output SPICLK1 SPIMOSI1 + * Binary : 11 11 , 11 11 , 10 01 , 01 01 , 11 11 + * ----------------------------------------------------------------------------------------- + * Ports : GPG5 GPG4 GPG3 GPG2 GPG1 GPG0 + * Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI IRQ_LAN IRQ_PCMCIA + * Setting: SPIMISO1 LCD_PWRDN EINT11 nSS0 EINT9 EINT8 + * Binary : 11 11 , 10 11 , 10 10 + */ + rGPGCON = 0x01AAFE79; + rGPGUP = 0x0000FFFF; + /* + * === PORT H GROUP + * Ports : GPH10 GPH9 GPH8 GPH7 GPH6 GPH5 GPH4 GPH3 GPH2 GPH1 GPH0 + * Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0 + * Binary : 10 , 10 10 , 11 11 , 10 10 , 10 10 , 10 10 + */ + /* pulldown on GPH08: UEXTCLK, just floats! + * pulldown GPH0 -- nCTS0 / RTS_MODEM -- floats when GSM off + * pulldown GPH3 -- RXD[0] / TX_MODEM -- floats when GSM off + */ + rGPHCON = 0x001AAAAA; + rGPHUP = 0x000007FF & ~(1 << 8) & ~(1 << 0) & ~(1 << 3); + + /* pulldown on GPJ00: input, just floats! */ + /* pulldown on GPJ07: WLAN module WLAN_GPIO0, no ext pull */ + rGPJCON = 0x1551544; + rGPJUP = 0x1ffff & ~(1 << 0) & ~(1 << 7); + rGPJDAT |= (1 << 4) | (1 << 6); + /* Set GPJ4 to high (nGSM_EN) */ + /* Set GPJ6 to high (nDL_GSM) */ + rGPJDAT &= ~(1 << 5); /* Set GPJ5 to low 3D RST */ + + /* leaving Glamo forced to Reset# active here killed + * U-Boot when you touched the memory region + */ + + rGPJDAT |= (1 << 5); /* Set GPJ5 to high 3D RST */ +} diff --git a/qiboot/src/start.S b/qiboot/src/start.S index b7934ea..b92ccc7 100644 --- a/qiboot/src/start.S +++ b/qiboot/src/start.S @@ -85,11 +85,13 @@ start_code: ldr r0, =LOCKTIME mov r1, #0xffffff str r1, [r0] - -# define MPLLCON_val ((142 << 12) + (7 << 4) + 1) + # define UPLLCON 0x4c000008 +# define MPLLCON_val ((142 << 12) + (7 << 4) + 1) # define UPLLCON_val (( 88 << 12) + (8 << 4) + 2) - +/*# define MPLLCON_val ((0x7d << 12) + (0x2 << 4) + 0x1) +# define UPLLCON_val ((0x38 << 12) + (0x2 << 4) + 0x2)*/ + ldr r0, =UPLLCON ldr r1, =UPLLCON_val str r1, [r0] @@ -116,7 +118,7 @@ start_code: /* enable uart */ ldr r0, =0x4c00000c /* clkcon */ - ldr r1, =0xffff0 /* all clocks on */ + ldr r1, =0x7fff0 /* all clocks on */ str r1, [r0] /* gpio UART0 init */ @@ -134,7 +136,7 @@ start_code: str r1, [r0, #0x08] mov r1, #0x00 str r1, [r0, #0x0c] - mov r1, #0x11 + mov r1, #0x7 str r1, [r0, #0x28] */ bl cpu_init_crit diff --git a/qiboot/src/start_kboot.c b/qiboot/src/start_kboot.c index ab5e115..7d41e9f 100644 --- a/qiboot/src/start_kboot.c +++ b/qiboot/src/start_kboot.c @@ -39,7 +39,8 @@ unsigned char buf[2*1024]; int start_kboot(void) { - serial_init(0x11,UART0); + port_init(); + serial_init(0x7,UART0); while(1){ serial_putc (UART0,'0'); blue_on(1);