[PATCH] add gta03 board specific support
Matt Hsu
matt_hsu at openmoko.org
Tue Aug 19 10:59:24 CEST 2008
---
include/neo_gta03.h | 32 ++++++++
src/gta03/gta03.c | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++
src/start_qi.c | 4 +-
3 files changed, 235 insertions(+), 1 deletions(-)
create mode 100644 include/neo_gta03.h
create mode 100644 src/gta03/gta03.c
diff --git a/include/neo_gta03.h b/include/neo_gta03.h
new file mode 100644
index 0000000..a01972e
--- /dev/null
+++ b/include/neo_gta03.h
@@ -0,0 +1,32 @@
+/*
+ * (C) Copyright 2008 OpenMoko, Inc.
+ * Author: Matt Hsu <matt_hsu at openmoko.org>
+ *
+ * Configuation settings for the Openmoko GTA03 Linux GSM phone
+ *
+ * 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 __CONFIG_GTA03_H
+#define __CONFIG_GTA03_H
+#ifndef __ASM_MODE__
+#include <qi.h>
+extern const struct board_api board_api_gta03;
+#endif
+
+#define TEXT_BASE 0x33000000
+
+#endif /* __CONFIG_GTA03_H */
diff --git a/src/gta03/gta03.c b/src/gta03/gta03.c
new file mode 100644
index 0000000..a69fc71
--- /dev/null
+++ b/src/gta03/gta03.c
@@ -0,0 +1,200 @@
+#include <qi.h>
+#include <neo_gta03.h>
+
+static const struct board_variant board_variants[] = {
+ [0] = {
+ .name = "EVB PCB",
+ .machine_revision = 0x010,
+ },
+};
+
+void port_init_gta03(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 = 0x007F8FFF;
+ /*
+ * ===* 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 = 0x00145554;
+ rGPBDAT |= (1 <<9 ); /* USB_PULLUP */
+ 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 = 0xAAA776E9;
+ rGPCUP = 0x0000FFFF;
+ rGPCDAT |= (1 << 9); /* WLAN_nRESET pull high */
+ /*
+ * === 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 = 0xAAA0AAA5;
+ rGPDUP = 0x0000FFFF;
+ /*
+ * === 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;
+ /*
+ * === 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
+ */
+ rGPFCON = 0x0000AAAA;
+ rGPFUP = 0x000000FF;
+
+ /*
+ * === 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 = 0x02A9FE5A;
+ rGPGUP = 0x0000FFFF;
+
+ /*
+ * === PORT H GROUP
+ * Ports : GPH10 GPH9 GPH8 GPH7 GPH6 GPH5 GPH4 GPH3 GPH2 GPH1 GPH0
+ * Signal : CLKOUT1 CLKOUT0 UCLK RXD2 TXD2 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 = 0x0019A0AA;
+ rGPHUP = 0x000007FF;
+
+ /* pulldown on GPJ00: input, just floats! */
+ /* pulldown on GPJ07: WLAN module WLAN_GPIO0, no ext pull */
+ rGPJCON = 0x02AAAAAA;
+ rGPJUP = 0x1FFFF;
+
+ serial_init(UART2, 0x11);
+}
+
+/**
+ * returns PCB revision information in b0, d8, d9
+ * GTA03 EVB returns 0x000
+ * GTA03 returns 0x001
+ */
+
+int gta03_get_pcb_revision(void)
+{
+ int n;
+ u32 u;
+
+ /* make B0 inputs */
+ rGPBCON &= ~0x00000003;
+ /* D8 and D9 inputs */
+ rGPDCON &= ~0x000f0000;
+
+ /* delay after changing pulldowns */
+ u = rGPBDAT;
+ u = rGPDDAT;
+
+ /* read the version info */
+ u = rGPBDAT;
+ n = (u >> (0 - 0))& 0x001;
+ u = rGPDDAT;
+ n |= (u >> (8 -1)) & 0x002;
+ n |= (u >> (9 - 2)) & 0x004;
+
+ /*
+ * when not being interrogated, all of the revision GPIO
+ * are set to output
+ */
+ /* make B0 high ouput */
+ rGPBCON |= 0x00000001;
+ /* D8 and D9 high ouputs */
+ rGPDCON |= 0x00050000;
+
+ return n;
+
+}
+
+const struct board_variant const * get_board_variant_gta03(void)
+{
+ return &board_variants[gta03_get_pcb_revision()];
+}
+
+int is_this_board_gta03(void)
+{
+ /* FIXME: find something gta03 specific */
+ return 1;
+}
+/*
+ * our API for bootloader on this machine
+ */
+const struct board_api board_api_gta03 = {
+ .name = "GTA03",
+ .debug_serial_port = 2,
+ .linux_machine_id = 1808,
+ .linux_mem_start = 0x30000000,
+ .linux_mem_size = (128 * 1024 * 1024),
+ .linux_tag_placement = 0x30000000 + 0x100,
+ .get_board_variant = get_board_variant_gta03,
+ .is_this_board = is_this_board_gta03,
+ .port_init = port_init_gta03,
+ /* these are the ways we could boot GTA03 in order to try */
+ .kernel_source = {
+ [0] = {
+ .name = "NAND Kernel",
+ .block_read = nand_read_ll,
+ .partition_index = -1,
+ .offset_if_no_partition = 0x80000,
+ .filesystem = FS_RAW,
+ .commandline = "neo1973-nand:" \
+ "0x00040000(qi)," \
+ "0x00040000(cmdline)," \
+ "0x00800000(backupkernel)," \
+ "0x000a0000(extra)," \
+ "0x00040000(identity)," \
+ "0x0f6a0000(backuprootfs) " \
+ "rootfstype=jffs2 " \
+ "root=/dev/mtdblock6 " \
+ "console=ttySAC2,115200 " \
+ "loglevel=4 " \
+ "init=/sbin/init "\
+ "ro"
+ },
+ },
+};
diff --git a/src/start_qi.c b/src/start_qi.c
index f0cdeaf..de5abd4 100644
--- a/src/start_qi.c
+++ b/src/start_qi.c
@@ -28,6 +28,7 @@
#include "blink_led.h"
#include "nand_read.h"
#include <neo_gta02.h>
+#include <neo_gta03.h>
#define stringify2(s) stringify1(s)
#define stringify1(s) #s
@@ -35,7 +36,8 @@
extern void bootloader_second_phase(void);
const struct board_api * boards[] = {
- &board_api_gta02
+ &board_api_gta02,
+ &board_api_gta03,
};
struct board_api const * this_board;
--
1.5.5.1
--------------000503010700000708060602--
More information about the openmoko-kernel
mailing list