[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