Add ramdisk storage driver. It will be useful for developing multi-driver storage
[kugel-rb.git] / bootloader / ondavx747.c
blob13c537b9be08dda9bfa14ca4477fc76fa09aaaff
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2008 by Maurus Cuelenaere
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include <stdio.h>
23 #include <stdarg.h>
24 #include "config.h"
25 #include "jz4740.h"
26 #include "backlight.h"
27 #include "font.h"
28 #include "lcd.h"
29 #include "system.h"
30 #include "button.h"
31 #include "timefuncs.h"
32 #include "rtc.h"
33 #include "common.h"
34 #include "mipsregs.h"
36 static void audiotest(void)
38 __i2s_internal_codec();
39 __aic_enable();
40 __aic_reset();
41 __aic_select_i2s();
42 __aic_enable_loopback();
45 int main(void)
47 kernel_init();
48 lcd_init();
49 font_init();
50 lcd_setfont(FONT_SYSFIXED);
51 button_init();
52 rtc_init();
53 usb_init();
55 backlight_init();
57 storage_init();
59 int touch, btn;
60 char datetime[30];
61 reset_screen();
62 printf("Rockbox bootloader v0.000001");
63 printf("REG_EMC_SACR0: 0x%x", REG_EMC_SACR0);
64 printf("REG_EMC_SACR1: 0x%x", REG_EMC_SACR1);
65 printf("REG_EMC_SACR2: 0x%x", REG_EMC_SACR2);
66 printf("REG_EMC_SACR3: 0x%x", REG_EMC_SACR3);
67 printf("REG_EMC_SACR4: 0x%x", REG_EMC_SACR4);
68 printf("REG_EMC_DMAR0: 0x%x", REG_EMC_DMAR0);
69 unsigned int cpu_id = read_c0_prid();
70 printf("CPU_ID: 0x%x", cpu_id);
71 printf(" * Company ID: 0x%x", (cpu_id >> 16) & 7);
72 printf(" * Processor ID: 0x%x", (cpu_id >> 8) & 7);
73 printf(" * Revision ID: 0x%x", cpu_id & 7);
74 unsigned int config_data = read_c0_config();
75 printf("C0_CONFIG: 0x%x", config_data);
76 printf(" * Architecture type: 0x%x", (config_data >> 13) & 3);
77 printf(" * Architecture revision: 0x%x", (config_data >> 10) & 7);
78 printf(" * MMU type: 0x%x", (config_data >> 7) & 7);
79 printf("C0_CONFIG1: 0x%x", read_c0_config1());
80 if(read_c0_config1() & (1 << 0)) printf(" * FP available");
81 if(read_c0_config1() & (1 << 1)) printf(" * EJTAG available");
82 if(read_c0_config1() & (1 << 2)) printf(" * MIPS-16 available");
83 if(read_c0_config1() & (1 << 4)) printf(" * Performace counters available");
84 if(read_c0_config1() & (1 << 5)) printf(" * MDMX available");
85 if(read_c0_config1() & (1 << 6)) printf(" * CP2 available");
86 printf("C0_STATUS: 0x%x", read_c0_status());
88 #if 0
89 unsigned char testdata[4096];
90 char msg[30];
91 int j = 1;
92 while(1)
94 memset(testdata, 0, 4096);
95 reset_screen();
96 jz_nand_read(0, j, &testdata);
97 printf("Page %d", j);
98 int i;
99 for(i=0; i<768; i+=16)
101 snprintf(msg, 30, "%02x%02x%02x%02x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x",
102 testdata[i], testdata[i+1], testdata[i+2], testdata[i+3], testdata[i+4], testdata[i+5], testdata[i+6], testdata[i+7],
103 testdata[i+8], testdata[i+9], testdata[i+10], testdata[i+11], testdata[i+12], testdata[i+13], testdata[i+14], testdata[i+15]
105 printf(msg);
107 while(!((btn = button_read_device(&touch)) & (BUTTON_VOL_UP|BUTTON_VOL_DOWN)));
108 if(btn & BUTTON_VOL_UP)
109 j++;
110 if(btn & BUTTON_VOL_DOWN)
111 j--;
112 if(j<0)
113 j = 0;
115 #endif
116 while(1)
118 #ifdef ONDA_VX747
119 #if 1
120 btn = button_get(false);
121 touch = button_get_data();
122 #else
123 btn = button_read_device(&touch);
124 #endif
125 #else
126 btn = button_read_device();
127 #endif
128 #define KNOP(x,y) lcd_set_foreground(LCD_BLACK); \
129 if(btn & x) \
130 lcd_set_foreground(LCD_WHITE); \
131 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(#x), SYSFONT_HEIGHT*y, #x);
132 KNOP(BUTTON_VOL_UP, 0);
133 KNOP(BUTTON_VOL_DOWN, 1);
134 KNOP(BUTTON_MENU, 2);
135 KNOP(BUTTON_POWER, 3);
136 lcd_set_foreground(LCD_WHITE);
137 if(button_hold())
139 printf("BUTTON_HOLD");
140 asm("break 0x7");
142 if(btn & BUTTON_POWER)
144 power_off();
146 #ifdef ONDA_VX747
147 if(btn & BUTTON_TOUCH)
149 lcd_set_foreground(LCD_RGBPACK(touch & 0xFF, (touch >> 8)&0xFF, (touch >> 16)&0xFF));
150 lcd_fillrect((touch>>16)-10, (touch&0xFFFF)-5, 10, 10);
151 lcd_update();
152 lcd_set_foreground(LCD_WHITE);
154 #endif
155 snprintf(datetime, 30, "%02d/%02d/%04d %02d:%02d:%02d", get_time()->tm_mday, get_time()->tm_mon, get_time()->tm_year,
156 get_time()->tm_hour, get_time()->tm_min, get_time()->tm_sec);
157 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT, datetime);
158 snprintf(datetime, 30, "%d", current_tick);
159 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*2, datetime);
160 snprintf(datetime, 30, "X: %03d Y: %03d", touch>>16, touch & 0xFFFF);
161 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*3, datetime);
162 snprintf(datetime, 30, "PIN3: 0x%08x", REG_GPIO_PXPIN(3));
163 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*4, datetime);
164 snprintf(datetime, 30, "PIN2: 0x%08x", REG_GPIO_PXPIN(2));
165 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*5, datetime);
166 snprintf(datetime, 30, "PIN1: 0x%08x", REG_GPIO_PXPIN(1));
167 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*6, datetime);
168 snprintf(datetime, 30, "PIN0: 0x%08x", REG_GPIO_PXPIN(0));
169 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*7, datetime);
170 snprintf(datetime, 30, "BadVAddr: 0x%08x", read_c0_badvaddr());
171 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*8, datetime);
172 snprintf(datetime, 30, "ICSR: 0x%08x", REG_INTC_ISR);
173 lcd_putsxy(LCD_WIDTH-SYSFONT_WIDTH*strlen(datetime), LCD_HEIGHT-SYSFONT_HEIGHT*9, datetime);
174 lcd_update();
175 yield();
178 return 0;