mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-26 17:50:47 +02:00
bad89a687f
uboot-xburst-avt2 uboot-xburst-n516 uboot-xburst-qi_lb60 uboot-xburst-sakc Signed-off-by: Xiangfu Liu <xiangfu@sharism.cc>
373 lines
12 KiB
Diff
373 lines
12 KiB
Diff
diff --git a/Makefile b/Makefile
|
|
index d7a6921..d57c6ee 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -2647,6 +2647,16 @@ ppmc7xx_config: unconfig
|
|
ZUMA_config: unconfig
|
|
@$(MKCONFIG) $(@:_config=) powerpc 74xx_7xx evb64260
|
|
|
|
+#########################################################################
|
|
+## MIPS32 XBurst jz4740
|
|
+#########################################################################
|
|
+qi_lb60_config : unconfig
|
|
+ @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
|
|
+ @echo "Compile NAND boot image for QI LB60"
|
|
+ @$(MKCONFIG) -a qi_lb60 mips xburst nanonote xburst
|
|
+ @echo "TEXT_BASE = 0x80100000" > $(obj)board/xburst/nanonote/config.tmp
|
|
+ @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
|
|
+
|
|
#========================================================================
|
|
# ARM
|
|
#========================================================================
|
|
diff --git a/arch/mips/include/asm/global_data.h b/arch/mips/include/asm/global_data.h
|
|
index b2c4891..9f93fb4 100644
|
|
--- a/arch/mips/include/asm/global_data.h
|
|
+++ b/arch/mips/include/asm/global_data.h
|
|
@@ -39,6 +39,18 @@
|
|
typedef struct global_data {
|
|
bd_t *bd;
|
|
unsigned long flags;
|
|
+#if defined(CONFIG_JZSOC)
|
|
+ /* There are other clocks in the Jz47xx or Jz5730*/
|
|
+ unsigned long cpu_clk; /* CPU core clock */
|
|
+ unsigned long sys_clk; /* System bus clock */
|
|
+ unsigned long per_clk; /* Peripheral bus clock */
|
|
+ unsigned long mem_clk; /* Memory bus clock */
|
|
+ unsigned long dev_clk; /* Device clock */
|
|
+ unsigned long fb_base; /* base address of framebuffer */
|
|
+#endif
|
|
+#if defined(CONFIG_NANONOTE)
|
|
+ unsigned long boot_option;
|
|
+#endif
|
|
unsigned long baudrate;
|
|
unsigned long have_console; /* serial_init() was called */
|
|
phys_size_t ram_size; /* RAM size */
|
|
diff --git a/arch/mips/lib/board.c b/arch/mips/lib/board.c
|
|
index b2d113e..4774016 100644
|
|
--- a/arch/mips/lib/board.c
|
|
+++ b/arch/mips/lib/board.c
|
|
@@ -144,9 +144,15 @@ static int init_baudrate (void)
|
|
* argument, and returns an integer return code, where 0 means
|
|
* "continue" and != 0 means "fatal error, hang the system".
|
|
*/
|
|
+#if defined(CONFIG_JZSOC)
|
|
+extern int jz_board_init(void);
|
|
+#endif
|
|
typedef int (init_fnc_t) (void);
|
|
|
|
init_fnc_t *init_sequence[] = {
|
|
+#if defined(CONFIG_JZSOC)
|
|
+ jz_board_init, /* init gpio/clocks/dram etc. */
|
|
+#endif
|
|
board_early_init_f,
|
|
timer_init,
|
|
env_init, /* initialize environment */
|
|
@@ -202,6 +208,12 @@ void board_init_f(ulong bootflag)
|
|
addr &= ~(4096 - 1);
|
|
debug ("Top of RAM usable for U-Boot at: %08lx\n", addr);
|
|
|
|
+#ifdef CONFIG_LCD
|
|
+ /* reserve memory for LCD display (always full pages) */
|
|
+ addr = lcd_setmem (addr);
|
|
+ gd->fb_base = addr;
|
|
+#endif /* CONFIG_LCD */
|
|
+
|
|
/* Reserve memory for U-Boot code, data & bss
|
|
* round down to next 16 kB limit
|
|
*/
|
|
@@ -349,9 +361,9 @@ void board_init_r (gd_t *id, ulong dest_addr)
|
|
size = flash_init();
|
|
display_flash_config (size);
|
|
bd->bi_flashsize = size;
|
|
+ bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
|
|
#endif
|
|
|
|
- bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
|
|
#if CONFIG_SYS_MONITOR_BASE == CONFIG_SYS_FLASH_BASE
|
|
bd->bi_flashoffset = monitor_flash_len; /* reserved area for U-Boot */
|
|
#else
|
|
diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
|
|
index 54af24c..24a40cc 100644
|
|
--- a/arch/mips/lib/bootm.c
|
|
+++ b/arch/mips/lib/bootm.c
|
|
@@ -46,10 +46,17 @@ static void linux_env_set (char * env_name, char * env_val);
|
|
int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
|
|
{
|
|
void (*theKernel) (int, char **, char **, int *);
|
|
- char *commandline = getenv ("bootargs");
|
|
+ char *commandline;
|
|
char env_buf[12];
|
|
char *cp;
|
|
|
|
+#if defined(CONFIG_NANONOTE)
|
|
+ if (gd->boot_option & BOOT_FROM_SDCARD)
|
|
+ commandline = getenv ("bootargsfromsd");
|
|
+ else
|
|
+#endif
|
|
+ commandline = getenv ("bootargs");
|
|
+
|
|
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
|
|
return 1;
|
|
|
|
diff --git a/arch/mips/lib/time.c b/arch/mips/lib/time.c
|
|
index 0e66441..653be6c 100644
|
|
--- a/arch/mips/lib/time.c
|
|
+++ b/arch/mips/lib/time.c
|
|
@@ -24,6 +24,7 @@
|
|
#include <common.h>
|
|
#include <asm/mipsregs.h>
|
|
|
|
+#ifndef CONFIG_JZSOC
|
|
static unsigned long timestamp;
|
|
|
|
/* how many counter cycles in a jiffy */
|
|
@@ -96,3 +97,4 @@ ulong get_tbclk(void)
|
|
{
|
|
return CONFIG_SYS_HZ;
|
|
}
|
|
+#endif
|
|
diff --git a/common/env_common.c b/common/env_common.c
|
|
index 439a4a9..7ac2b6b 100644
|
|
--- a/common/env_common.c
|
|
+++ b/common/env_common.c
|
|
@@ -133,6 +133,12 @@ uchar default_environment[] = {
|
|
#if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
|
|
"pcidelay=" MK_STR(CONFIG_PCI_BOOTDELAY) "\0"
|
|
#endif
|
|
+#ifdef CONFIG_BOOTARGSFROMSD
|
|
+ "bootargsfromsd=" CONFIG_BOOTARGSFROMSD "\0"
|
|
+#endif
|
|
+#ifdef CONFIG_BOOTCOMMANDFROMSD
|
|
+ "bootcmdfromsd=" CONFIG_BOOTCOMMANDFROMSD "\0"
|
|
+#endif
|
|
#ifdef CONFIG_EXTRA_ENV_SETTINGS
|
|
CONFIG_EXTRA_ENV_SETTINGS
|
|
#endif
|
|
diff --git a/common/lcd.c b/common/lcd.c
|
|
index 64fb1c6..23d848d 100644
|
|
--- a/common/lcd.c
|
|
+++ b/common/lcd.c
|
|
@@ -253,6 +253,14 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)
|
|
lcd_color_fg : lcd_color_bg;
|
|
bits <<= 1;
|
|
}
|
|
+#elif LCD_BPP == LCD_COLOR32
|
|
+ uint *m = (uint *)d;
|
|
+ for (c=0; c<32; ++c) {
|
|
+ *m++ = (bits & 0x80) ?
|
|
+ lcd_color_fg : lcd_color_bg;
|
|
+ //d+=4;
|
|
+ bits <<= 1;
|
|
+ }
|
|
#endif
|
|
}
|
|
#if LCD_BPP == LCD_MONOCHROME
|
|
@@ -319,6 +327,9 @@ static void test_pattern (void)
|
|
}
|
|
#endif /* LCD_TEST_PATTERN */
|
|
|
|
+#ifdef CONFIG_JzRISC /* JzRISC core */
|
|
+extern int flush_cache_all(void);
|
|
+#endif
|
|
|
|
/************************************************************************/
|
|
/* ** GENERIC Initialization Routines */
|
|
@@ -385,6 +396,7 @@ static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|
COLOR_MASK(lcd_getbgcolor()),
|
|
lcd_line_length*panel_info.vl_row);
|
|
#endif
|
|
+
|
|
/* Paint the logo and retrieve LCD base address */
|
|
debug ("[LCD] Drawing the logo...\n");
|
|
lcd_console_address = lcd_logo ();
|
|
@@ -503,6 +515,7 @@ void bitmap_plot (int x, int y)
|
|
uchar *bmap;
|
|
uchar *fb;
|
|
ushort *fb16;
|
|
+ uint *fb32;
|
|
#if defined(CONFIG_PXA250)
|
|
struct pxafb_info *fbi = &panel_info.pxa;
|
|
#elif defined(CONFIG_MPC823)
|
|
diff --git a/common/main.c b/common/main.c
|
|
index f7e7c1c..c64979f 100644
|
|
--- a/common/main.c
|
|
+++ b/common/main.c
|
|
@@ -372,7 +372,11 @@ void main_loop (void)
|
|
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
|
|
s = getenv ("bootdelay");
|
|
bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;
|
|
-
|
|
+#if defined(CONFIG_NANONOTE)
|
|
+ DECLARE_GLOBAL_DATA_PTR;
|
|
+ if (gd->boot_option & BOOT_WITH_ENABLE_UART)
|
|
+ bootdelay = 3;
|
|
+# endif
|
|
debug ("### main_loop entered: bootdelay=%d\n\n", bootdelay);
|
|
|
|
# ifdef CONFIG_BOOT_RETRY_TIME
|
|
@@ -393,7 +397,12 @@ void main_loop (void)
|
|
}
|
|
else
|
|
#endif /* CONFIG_BOOTCOUNT_LIMIT */
|
|
- s = getenv ("bootcmd");
|
|
+#if defined(CONFIG_NANONOTE)
|
|
+ if (gd->boot_option & BOOT_FROM_SDCARD)
|
|
+ s = getenv ("bootcmdfromsd");
|
|
+ else
|
|
+#endif
|
|
+ s = getenv ("bootcmd");
|
|
|
|
debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
|
|
|
|
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
|
|
index 6fa04b8..b08a800 100644
|
|
--- a/drivers/mmc/Makefile
|
|
+++ b/drivers/mmc/Makefile
|
|
@@ -32,6 +32,7 @@ COBJS-$(CONFIG_OMAP3_MMC) += omap3_mmc.o
|
|
COBJS-$(CONFIG_FSL_ESDHC) += fsl_esdhc.o
|
|
COBJS-$(CONFIG_MXC_MMC) += mxcmmc.o
|
|
COBJS-$(CONFIG_PXA_MMC) += pxa_mmc.o
|
|
+COBJS-$(CONFIG_JZ4740_MMC) += jz_mmc.o
|
|
|
|
COBJS := $(COBJS-y)
|
|
SRCS := $(COBJS:.o=.c)
|
|
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
|
|
index 28f27da..427d963 100644
|
|
--- a/drivers/mtd/nand/Makefile
|
|
+++ b/drivers/mtd/nand/Makefile
|
|
@@ -50,6 +50,7 @@ COBJS-$(CONFIG_NAND_S3C64XX) += s3c64xx.o
|
|
COBJS-$(CONFIG_NAND_SPEAR) += spr_nand.o
|
|
COBJS-$(CONFIG_NAND_OMAP_GPMC) += omap_gpmc.o
|
|
COBJS-$(CONFIG_NAND_PLAT) += nand_plat.o
|
|
+COBJS-$(CONFIG_NAND_JZ4740) += jz4740_nand.o
|
|
endif
|
|
|
|
COBJS := $(COBJS-y)
|
|
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
|
|
index 7d84fc7..39f981d 100644
|
|
--- a/drivers/video/Makefile
|
|
+++ b/drivers/video/Makefile
|
|
@@ -38,6 +38,7 @@ COBJS-$(CONFIG_SED156X) += sed156x.o
|
|
COBJS-$(CONFIG_VIDEO_SM501) += sm501.o
|
|
COBJS-$(CONFIG_VIDEO_SMI_LYNXEM) += smiLynxEM.o videomodes.o
|
|
COBJS-$(CONFIG_VIDEO_VCXK) += bus_vcxk.o
|
|
+COBJS-$(CONFIG_VIDEO_GPM940B0) += nanonote_gpm940b0.o
|
|
|
|
COBJS := $(COBJS-y)
|
|
SRCS := $(COBJS:.o=.c)
|
|
diff --git a/examples/standalone/mips.lds b/examples/standalone/mips.lds
|
|
index 717b201..d4a45f8 100644
|
|
--- a/examples/standalone/mips.lds
|
|
+++ b/examples/standalone/mips.lds
|
|
@@ -23,8 +23,8 @@
|
|
|
|
/*
|
|
OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips")
|
|
-*/
|
|
OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradbigmips")
|
|
+*/
|
|
OUTPUT_ARCH(mips)
|
|
SECTIONS
|
|
{
|
|
diff --git a/include/lcd.h b/include/lcd.h
|
|
index 1f85daa..ff95576 100644
|
|
--- a/include/lcd.h
|
|
+++ b/include/lcd.h
|
|
@@ -181,8 +181,44 @@ typedef struct vidinfo {
|
|
u_long mmio; /* Memory mapped registers */
|
|
} vidinfo_t;
|
|
|
|
-#else
|
|
+#elif defined(CONFIG_JZSOC)
|
|
+/*
|
|
+ * LCD controller stucture for JZSOC: JZ4740
|
|
+ */
|
|
+struct jz_fb_dma_descriptor {
|
|
+ u_long fdadr; /* Frame descriptor address register */
|
|
+ u_long fsadr; /* Frame source address register */
|
|
+ u_long fidr; /* Frame ID register */
|
|
+ u_long ldcmd; /* Command register */
|
|
+};
|
|
|
|
+/*
|
|
+ * Jz LCD info
|
|
+ */
|
|
+struct jz_fb_info {
|
|
+
|
|
+ u_long fdadr0; /* physical address of frame/palette descriptor */
|
|
+ u_long fdadr1; /* physical address of frame descriptor */
|
|
+
|
|
+ /* DMA descriptors */
|
|
+ struct jz_fb_dma_descriptor * dmadesc_fblow;
|
|
+ struct jz_fb_dma_descriptor * dmadesc_fbhigh;
|
|
+ struct jz_fb_dma_descriptor * dmadesc_palette;
|
|
+ u_long screen; /* address of frame buffer */
|
|
+ u_long palette; /* address of palette memory */
|
|
+ u_int palette_size;
|
|
+};
|
|
+typedef struct vidinfo {
|
|
+ ushort vl_col; /* Number of columns (i.e. 640) */
|
|
+ ushort vl_row; /* Number of rows (i.e. 480) */
|
|
+ u_char vl_bpix; /* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8 */
|
|
+
|
|
+ struct jz_fb_info jz_fb;
|
|
+} vidinfo_t;
|
|
+
|
|
+extern vidinfo_t panel_info;
|
|
+
|
|
+#else
|
|
typedef struct vidinfo {
|
|
ushort vl_col; /* Number of columns (i.e. 160) */
|
|
ushort vl_row; /* Number of rows (i.e. 100) */
|
|
@@ -194,7 +230,7 @@ typedef struct vidinfo {
|
|
void *priv; /* Pointer to driver-specific data */
|
|
} vidinfo_t;
|
|
|
|
-#endif /* CONFIG_MPC823, CONFIG_PXA250 or CONFIG_MCC200 or CONFIG_ATMEL_LCD */
|
|
+#endif /* CONFIG_MPC823, CONFIG_PXA250 or CONFIG_MCC200 or CONFIG_ATMEL_LCD CONFIG_JZ4740*/
|
|
|
|
extern vidinfo_t panel_info;
|
|
|
|
@@ -234,6 +270,7 @@ void lcd_show_board_info(void);
|
|
#define LCD_COLOR4 2
|
|
#define LCD_COLOR8 3
|
|
#define LCD_COLOR16 4
|
|
+#define LCD_COLOR32 5
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
#if defined(CONFIG_LCD_INFO_BELOW_LOGO)
|
|
@@ -285,7 +322,7 @@ void lcd_show_board_info(void);
|
|
# define CONSOLE_COLOR_GREY 14
|
|
# define CONSOLE_COLOR_WHITE 15 /* Must remain last / highest */
|
|
|
|
-#else
|
|
+#elif LCD_BPP == LCD_COLOR16
|
|
|
|
/*
|
|
* 16bpp color definitions
|
|
@@ -293,6 +330,15 @@ void lcd_show_board_info(void);
|
|
# define CONSOLE_COLOR_BLACK 0x0000
|
|
# define CONSOLE_COLOR_WHITE 0xffff /* Must remain last / highest */
|
|
|
|
+#elif LCD_BPP == LCD_COLOR32
|
|
+/*
|
|
+ * 18,24,32 bpp color definitions
|
|
+ */
|
|
+# define CONSOLE_COLOR_BLACK 0x00000000
|
|
+# define CONSOLE_COLOR_WHITE 0xffffffff /* Must remain last / highest */
|
|
+
|
|
+#else
|
|
+
|
|
#endif /* color definitions */
|
|
|
|
/************************************************************************/
|
|
@@ -322,7 +368,7 @@ void lcd_show_board_info(void);
|
|
#if LCD_BPP == LCD_MONOCHROME
|
|
# define COLOR_MASK(c) ((c) | (c) << 1 | (c) << 2 | (c) << 3 | \
|
|
(c) << 4 | (c) << 5 | (c) << 6 | (c) << 7)
|
|
-#elif (LCD_BPP == LCD_COLOR8) || (LCD_BPP == LCD_COLOR16)
|
|
+#elif (LCD_BPP == LCD_COLOR8) || (LCD_BPP == LCD_COLOR16) || (LCD_BPP == LCD_COLOR32)
|
|
# define COLOR_MASK(c) (c)
|
|
#else
|
|
# error Unsupported LCD BPP.
|