mirror of
git://projects.qi-hardware.com/xburst-tools.git
synced 2024-11-25 18:05:00 +02:00
add-comments-and-tidy.patch
Push the config options into a config .h, tidy things, add attribution Signed-off-by: Andy Green <andy@openmoko.com>
This commit is contained in:
parent
4391a52819
commit
b8407950d8
15
qiboot/include/device_configuration.h
Normal file
15
qiboot/include/device_configuration.h
Normal file
@ -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)
|
||||||
|
|
@ -29,6 +29,11 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
. = 0x00000000;
|
. = 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);
|
. = ALIGN(4);
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* (C) Copyright 2008 Openmoko, Inc.
|
||||||
|
* Author: Andy Green <andy@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__
|
#ifndef __KBOOT_H__
|
||||||
#define __KBOOT_H__
|
#define __KBOOT_H__
|
||||||
|
@ -1,3 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* (C) Copyright 2008 Openmoko, Inc.
|
||||||
|
* Author: Andy Green <andy@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 "kboot.h"
|
||||||
#include <neo_gta02.h>
|
#include <neo_gta02.h>
|
||||||
#include "blink_led.h"
|
#include "blink_led.h"
|
||||||
@ -12,32 +35,26 @@ typedef unsigned int uint32_t;
|
|||||||
#include <setup.h>
|
#include <setup.h>
|
||||||
#include "nand_read.h"
|
#include "nand_read.h"
|
||||||
|
|
||||||
/* See also ARM920T Technical reference Manual */
|
#include <device_configuration.h>
|
||||||
#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 */
|
|
||||||
|
|
||||||
#define C1_BIG_ENDIAN (1<<7) /* big endian off/on */
|
#define C1_DC (1<<2) /* dcache off/on */
|
||||||
#define C1_SYS_PROT (1<<8) /* system protection */
|
|
||||||
#define C1_ROM_PROT (1<<9) /* ROM protection */
|
|
||||||
#define C1_IC (1<<12) /* icache 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)
|
void bootloader_second_phase(void)
|
||||||
{
|
{
|
||||||
image_header_t *hdr;
|
image_header_t *hdr;
|
||||||
unsigned long i = 0;
|
unsigned long i = 0;
|
||||||
int machid = 1304; /* GTA02 */
|
void (*the_kernel)(int zero, int arch, uint params);
|
||||||
void (*theKernel)(int zero, int arch, uint params);
|
struct tag * params_base = (struct tag *)CFG_LINUX_ATAG_ADDRESS;
|
||||||
struct tag * params_base = (struct tag *)0x30000100; /* atags need to live here */
|
|
||||||
struct tag *params = params_base;
|
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;
|
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... ");
|
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");
|
puts ("Kernel header read failed\n");
|
||||||
goto unhappy;
|
goto unhappy;
|
||||||
}
|
}
|
||||||
@ -54,18 +71,17 @@ void bootloader_second_phase(void)
|
|||||||
|
|
||||||
puts("Fetching kernel...");
|
puts("Fetching kernel...");
|
||||||
|
|
||||||
if (nand_read_ll(kernel_nand, 0x80000, ((32 * 1024) +
|
if (nand_read_ll(kernel_nand, CFG_NAND_OFFSET_FOR_KERNEL_PARTITION,
|
||||||
(_ntohl(hdr->ih_size) +
|
((32 * 1024) + (_ntohl(hdr->ih_size) + sizeof(hdr) + 2048)) &
|
||||||
sizeof(hdr) + 2048)) &
|
~(2048 - 1)) < 0) {
|
||||||
~(2048 - 1)) < 0) {
|
|
||||||
puts ("Kernel body read failed\n");
|
puts ("Kernel body read failed\n");
|
||||||
goto unhappy;
|
goto unhappy;
|
||||||
}
|
}
|
||||||
|
|
||||||
puts(" Done");
|
puts(" Done");
|
||||||
|
|
||||||
theKernel = (void (*)(int, int, uint))
|
the_kernel = (void (*)(int, int, uint))
|
||||||
(((char *)hdr) + sizeof(image_header_t));
|
(((char *)hdr) + sizeof(image_header_t));
|
||||||
|
|
||||||
/* first tag */
|
/* first tag */
|
||||||
params->hdr.tag = ATAG_CORE;
|
params->hdr.tag = ATAG_CORE;
|
||||||
@ -78,14 +94,14 @@ void bootloader_second_phase(void)
|
|||||||
/* revision tag */
|
/* revision tag */
|
||||||
params->hdr.tag = ATAG_REVISION;
|
params->hdr.tag = ATAG_REVISION;
|
||||||
params->hdr.size = tag_size (tag_revision);
|
params->hdr.size = tag_size (tag_revision);
|
||||||
params->u.revision.rev = 0x350;
|
params->u.revision.rev = CFG_MACHINE_REVISION;
|
||||||
params = tag_next (params);
|
params = tag_next (params);
|
||||||
|
|
||||||
/* memory tags */
|
/* memory tags */
|
||||||
params->hdr.tag = ATAG_MEM;
|
params->hdr.tag = ATAG_MEM;
|
||||||
params->hdr.size = tag_size (tag_mem32);
|
params->hdr.size = tag_size (tag_mem32);
|
||||||
params->u.mem.start = 0x30000000;
|
params->u.mem.start = CFG_MEMORY_REGION_START;
|
||||||
params->u.mem.size = 128 * 1024 * 1024;
|
params->u.mem.size = CFG_MEMORY_REGION_SIZE;
|
||||||
params = tag_next (params);
|
params = tag_next (params);
|
||||||
|
|
||||||
/* kernel commandline */
|
/* kernel commandline */
|
||||||
@ -104,7 +120,7 @@ void bootloader_second_phase(void)
|
|||||||
params->hdr.tag = ATAG_NONE;
|
params->hdr.tag = ATAG_NONE;
|
||||||
params->hdr.size = 0;
|
params->hdr.size = 0;
|
||||||
|
|
||||||
puts ("Running Linux...\n\n");
|
puts ("Running Linux --->\n\n");
|
||||||
|
|
||||||
/* trash the cache */
|
/* trash the cache */
|
||||||
|
|
||||||
@ -119,7 +135,7 @@ void bootloader_second_phase(void)
|
|||||||
|
|
||||||
/* ooh that's it, we're gonna try boot this image! */
|
/* 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 */
|
/* that didn't quite pan out */
|
||||||
|
|
||||||
|
@ -74,122 +74,3 @@ void serial_putc (const int uart,const char c)
|
|||||||
break;
|
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 */
|
|
||||||
}
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* (C) Copyright 2007 OpenMoko, Inc.
|
* (C) Copyright 2007 OpenMoko, Inc.
|
||||||
* Author: xiangfu liu <xiangfu@openmoko.org>
|
* Author: xiangfu liu <xiangfu@openmoko.org>
|
||||||
|
* Andy Green <andy@openmoko.com>
|
||||||
*
|
*
|
||||||
* Configuation settings for the OPENMOKO Neo GTA02 Linux GSM phone
|
* Configuation settings for the OPENMOKO Neo GTA02 Linux GSM phone
|
||||||
*
|
*
|
||||||
@ -33,6 +34,121 @@
|
|||||||
|
|
||||||
extern void bootloader_second_phase(void);
|
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 start_kboot(void)
|
||||||
{
|
{
|
||||||
void (*phase2)(void) = (void (*)(void))((int)bootloader_second_phase +
|
void (*phase2)(void) = (void (*)(void))((int)bootloader_second_phase +
|
||||||
@ -45,9 +161,16 @@ void start_kboot(void)
|
|||||||
stringify2(BUILD_VERSION)" "
|
stringify2(BUILD_VERSION)" "
|
||||||
stringify2(BUILD_DATE)"\n");
|
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)
|
if (nand_read_ll((unsigned char *)TEXT_BASE, 0, 24 * 1024) < 0)
|
||||||
while(1)
|
while(1)
|
||||||
blink_led();
|
blink_led();
|
||||||
|
Loading…
Reference in New Issue
Block a user