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 #include +#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 : ""); 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.