[PATCH 15/15] add-comments-and-tidy.patch

Andy Green andy at openmoko.com
Wed Aug 13 02:00:05 CEST 2008


Push the config options into a config .h, tidy things, add attribution

Signed-off-by: Andy Green <andy at openmoko.com>
---

 include/device_configuration.h |   15 +++++
 src/kboot-stage1.lds           |    5 ++
 src/kboot.h                    |   19 ++++++
 src/phase2.c                   |   66 +++++++++++++--------
 src/serial.c                   |  119 --------------------------------------
 src/start_kboot.c              |  125 ++++++++++++++++++++++++++++++++++++++++
 6 files changed, 204 insertions(+), 145 deletions(-)
 create mode 100644 include/device_configuration.h

diff --git a/include/device_configuration.h b/include/device_configuration.h
new file mode 100644
index 0000000..69e247c
--- /dev/null
+++ b/include/device_configuration.h
@@ -0,0 +1,15 @@
+/* define the easily changed settings for the device here */
+
+#define CFG_NAND_OFFSET_FOR_KERNEL_PARTITION 0x80000
+#define CFG_LINUX_MACHINE_ID 1304
+#define CFG_LINUX_ATAG_ADDRESS 0x30000100
+#define CFG_LINUX_CMDLINE 	"rootfstype=ext2 " \
+				"root=/dev/mmcblk0p1 " \
+				"console=ttySAC2,115200 " \
+				"loglevel=8 " \
+				"init=/sbin/init ro"
+#define CFG_LINUX_BIGGEST_KERNEL (4 * 1024 * 1024)
+#define CFG_MACHINE_REVISION 0x350
+#define CFG_MEMORY_REGION_START 0x30000000
+#define CFG_MEMORY_REGION_SIZE (128 * 1024 * 1024)
+
diff --git a/src/kboot-stage1.lds b/src/kboot-stage1.lds
index 7987801..5c8d50c 100644
--- a/src/kboot-stage1.lds
+++ b/src/kboot-stage1.lds
@@ -29,6 +29,11 @@ SECTIONS
 {
 	. = 0x00000000;
 
+	/* this is intended to take the first 4KBytes of stuff initially.
+	 * We have to make sure we have .rodata* in there for everything
+	 * because we do not compile PIC.
+	 */
+
 	. = ALIGN(4);
 	.text      :
 	{
diff --git a/src/kboot.h b/src/kboot.h
index 6ad28de..af47a12 100644
--- a/src/kboot.h
+++ b/src/kboot.h
@@ -1,3 +1,22 @@
+/*
+ * (C) Copyright 2008 Openmoko, Inc.
+ * Author: Andy Green <andy at openmoko.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
 
 #ifndef __KBOOT_H__
 #define __KBOOT_H__
diff --git a/src/phase2.c b/src/phase2.c
index 4c4fedf..ac43822 100644
--- a/src/phase2.c
+++ b/src/phase2.c
@@ -1,3 +1,26 @@
+/*
+ * (C) Copyright 2008 Openmoko, Inc.
+ * Author: Andy Green <andy at openmoko.org>
+ *
+ * Parse the U-Boot header and Boot Linux
+ * based on various code from U-Boot
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
 #include "kboot.h"
 #include <neo_gta02.h>
 #include "blink_led.h"
@@ -12,32 +35,26 @@ typedef unsigned int uint32_t;
 #include <setup.h>
 #include "nand_read.h"
 
-/* See also ARM920T    Technical reference Manual */
-#define C1_MMU          (1<<0)          /* mmu off/on */
-#define C1_ALIGN        (1<<1)          /* alignment faults off/on */
-#define C1_DC           (1<<2)          /* dcache off/on */
+#include <device_configuration.h>
 
-#define C1_BIG_ENDIAN   (1<<7)          /* big endian off/on */
-#define C1_SYS_PROT     (1<<8)          /* system protection */
-#define C1_ROM_PROT     (1<<9)          /* ROM protection */
+#define C1_DC           (1<<2)          /* dcache off/on */
 #define C1_IC           (1<<12)         /* icache off/on */
-#define C1_HIGH_VECTORS (1<<13)         /* location of vectors: low/high addresses */
 
 void bootloader_second_phase(void)
 {
 	image_header_t	*hdr;
         unsigned long i = 0;
-	int	machid = 1304; /* GTA02 */
-	void	(*theKernel)(int zero, int arch, uint params);
-	struct tag * params_base = (struct tag *)0x30000100; /* atags need to live here */
+	void	(*the_kernel)(int zero, int arch, uint params);
+	struct tag * params_base = (struct tag *)CFG_LINUX_ATAG_ADDRESS;
 	struct tag *params = params_base;
-	const char * cmdline = "rootfstype=ext2 root=/dev/mmcblk0p1 console=ttySAC2,115200 loglevel=8 init=/sbin/init ro";
+	const char * cmdline = CFG_LINUX_CMDLINE;
 	const char *p = cmdline;
-	void * kernel_nand = (void *)(TEXT_BASE - 4 * 1024 * 1024);
+	void * kernel_nand = (void *)(TEXT_BASE - CFG_LINUX_BIGGEST_KERNEL);
 
 	puts("Checking kernel... ");
 
-	if (nand_read_ll(kernel_nand, 0x80000, 4096) < 0) {
+	if (nand_read_ll(kernel_nand, CFG_NAND_OFFSET_FOR_KERNEL_PARTITION,
+								    4096) < 0) {
 		puts ("Kernel header read failed\n");
 		goto unhappy;
 	}
@@ -54,18 +71,17 @@ void bootloader_second_phase(void)
 
 	puts("Fetching kernel...");
 
-	if (nand_read_ll(kernel_nand, 0x80000, ((32 * 1024) +
-						(_ntohl(hdr->ih_size) +
-						sizeof(hdr) + 2048)) &
-					       ~(2048 - 1)) < 0) {
+	if (nand_read_ll(kernel_nand, CFG_NAND_OFFSET_FOR_KERNEL_PARTITION,
+		((32 * 1024) + (_ntohl(hdr->ih_size) + sizeof(hdr) + 2048)) &
+							     ~(2048 - 1)) < 0) {
 		puts ("Kernel body read failed\n");
 		goto unhappy;
 	}
 
 	puts(" Done");
 
-	theKernel = (void (*)(int, int, uint))
-				(((char *)hdr) + sizeof(image_header_t));
+	the_kernel = (void (*)(int, int, uint))
+				       (((char *)hdr) + sizeof(image_header_t));
 
 	/* first tag */
 	params->hdr.tag = ATAG_CORE;
@@ -78,14 +94,14 @@ void bootloader_second_phase(void)
 	/* revision tag */
 	params->hdr.tag = ATAG_REVISION;
 	params->hdr.size = tag_size (tag_revision);
-	params->u.revision.rev = 0x350;
+	params->u.revision.rev = CFG_MACHINE_REVISION;
 	params = tag_next (params);
 
 	/* memory tags */
 	params->hdr.tag = ATAG_MEM;
 	params->hdr.size = tag_size (tag_mem32);
-	params->u.mem.start = 0x30000000;
-	params->u.mem.size = 128 * 1024 * 1024;
+	params->u.mem.start = CFG_MEMORY_REGION_START;
+	params->u.mem.size = CFG_MEMORY_REGION_SIZE;
 	params = tag_next (params);
 
 	/* kernel commandline */
@@ -104,7 +120,7 @@ void bootloader_second_phase(void)
 	params->hdr.tag = ATAG_NONE;
 	params->hdr.size = 0;
 
-	puts ("Running Linux...\n\n");
+	puts ("Running Linux --->\n\n");
 
 	/* trash the cache */
 
@@ -119,7 +135,7 @@ void bootloader_second_phase(void)
 
 	/* ooh that's it, we're gonna try boot this image! */
 
-	theKernel(0, machid, (unsigned int)params_base);
+	the_kernel(0, CFG_LINUX_MACHINE_ID, (unsigned int)params_base);
 
 	/* that didn't quite pan out */
 
diff --git a/src/serial.c b/src/serial.c
index 7b56fe6..e5b1952 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -74,122 +74,3 @@ void serial_putc (const int uart,const char c)
       break;
     }
 }
-
-
-/*
- * =====================================================================
- * 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/src/start_kboot.c b/src/start_kboot.c
index 2e2c605..51625ca 100644
--- a/src/start_kboot.c
+++ b/src/start_kboot.c
@@ -1,6 +1,7 @@
 /*
  * (C) Copyright 2007 OpenMoko, Inc.
  * Author: xiangfu liu <xiangfu at openmoko.org>
+ *         Andy Green <andy at openmoko.com>
  *
  * Configuation settings for the OPENMOKO Neo GTA02 Linux GSM phone
  *
@@ -33,6 +34,121 @@
 
 extern void bootloader_second_phase(void);
 
+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 */
+}
+
+
+
 void start_kboot(void)
 {
 	void (*phase2)(void) = (void (*)(void))((int)bootloader_second_phase +
@@ -45,9 +161,16 @@ void start_kboot(void)
 			      stringify2(BUILD_VERSION)" "
 			      stringify2(BUILD_DATE)"\n");
 	/*
-	 * pull the whole bootloader image into SDRAM
+	 * We got the first 4KBytes of the bootloader pulled into the
+	 * steppingstone SRAM for free.  Now we pull the whole bootloader
+	 * image into SDRAM.
+	 *
+	 * So this doesn't trash position-dependent code, we took care in the
+	 * linker script to arrange all rodata* segment content to be in the
+	 * first 4K region.
 	 */
 
+	/* We randomly pull 24KBytes of bootloader */
 	if (nand_read_ll((unsigned char *)TEXT_BASE, 0, 24 * 1024) < 0)
 		while(1)
 			blink_led();





More information about the openmoko-kernel mailing list