Index: bootloader/meizu_m3.c =================================================================== --- bootloader/meizu_m3.c (revision 18789) +++ bootloader/meizu_m3.c (working copy) @@ -106,41 +106,31 @@ char mystring[64]; int tmpval; - /* set fclk = 200MHz, hclk = 100MHz, pclk = 50MHz, others off */ - CLKCON = 0x00800080; - PLLCON = 0; - PLL0PMS = 0x1ad200; - PLL0LCNT = 8100; - PLLCON = 1; - while (!(PLLLOCK & 1)) ; - CLKCON2= 0x80; - CLKCON = 0x20803180; - - /* mask all interrupts - this is done, because the lcd framebuffer - overwrites some stuff, which leads to a freeze - when an irq is generated after the dfu upload. - crt0 should have disabled irqs, - but the bootrom hands us execution in - user mode so we can't switch interrupts off */ - INTMSK = 0; - //Set backlight pin to output and enable int oldval = PCON0; PCON0 = ((oldval & ~(3 << 4)) | (1 << 4)); PDAT0 |= (1 << 2); - //Set PLAY to input + //power on +// oldval = PCON1; +// PCON1 = ((oldval & ~(0xf << 12)) | (1 << 12)); +// PDAT1|=(1<<3); + + //Set PLAY to EINT4 oldval = PCON1; - PCON1 = ((oldval & ~(0xf << 16)) | (0 << 16)); + PCON1 = ((oldval & ~(0xf << 16)) | (2 << 16)); - asm volatile("mrs %0, cpsr \n\t" - : "=r" (tmpval) - ); + //Set MENU to EINT0 + oldval = PCON1; + PCON1 = (oldval & ~(0xf)) | 2; + // enable external interrupts + EINTPOL = 0x11; + INTMSK = 0x11; + EINTMSK = 0x11; + asm volatile("msr cpsr_c, #0x13\n\t"); // enable interrupts + lcd_init(); - snprintf(mystring, 64, "tmpval: %x", tmpval); - lcd_puts(0,0,mystring); lcd_update(); init_qt1106(); Index: firmware/target/arm/s5l8700/boot.lds =================================================================== --- firmware/target/arm/s5l8700/boot.lds (revision 18789) +++ firmware/target/arm/s5l8700/boot.lds (working copy) @@ -1,12 +1,12 @@ #include "config.h" -ENTRY(start) +ENTRY(_start) OUTPUT_FORMAT(elf32-bigarm) OUTPUT_ARCH(arm) STARTUP(target/arm/crt0.o) /* DRAMORIG is in fact 0x8000000 but remapped to 0x0 */ -#define DRAMORIG 0x0 +#define DRAMORIG 0x8000000 #define DRAMSIZE 16M #define IRAMORIG 0x22000000 @@ -22,41 +22,67 @@ #define FLASHORIG 0x24000000 #define FLASHSIZE 1M +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE + FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE +} + + SECTIONS { - /*. = IRAMORIG; */ - /* As long as we don't flash the code, use the DFU load address */ - . = DFULOADADDR; + .intvect : { + _intvectstart = . ; + *(.intvect) + _intvectend = _newstart ; + } >IRAM AT> FLASH + _intvectcopy = LOADADDR(.intvect) ; .text : { *(.init.text) *(.text*) - } + *(.glue_7*) + } > FLASH + .rodata : { + *(.rodata*) + . = ALIGN(0x4); + } > FLASH + .data : { + _datastart = . ; + *(.irodata) *(.icode) - *(.irodata) *(.idata) *(.data*) *(.ncdata*); + . = ALIGN(0x4); _dataend = . ; - } + } > IRAM AT> FLASH + _datacopy = LOADADDR(.data) ; .stack : { *(.stack) _stackbegin = .; - stackbegin = .; - . += 0x1000; + . += 0x2000; _stackend = .; - stackend = .; - } + _irqstackbegin = .; + . += 0x400; + _irqstackend = .; + _fiqstackbegin = .; + . += 0x400; + _fiqstackend = .; + } > IRAM .bss : { _edata = .; *(.bss*); *(.ibss); *(.ncbss*); + *(COMMON); + . = ALIGN(0x4); _end = .; - } + } > IRAM } Index: firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c =================================================================== --- firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c (revision 18789) +++ firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c (working copy) @@ -69,7 +69,7 @@ static void lcd_sleep(uint32_t t) { volatile uint32_t i; - for(i=0;i 22 us + delay(13*100); // > 22 us for (i = 0; i < 24; i++) { @@ -90,14 +90,14 @@ CLRMOSI(); output <<= 1; - delay(20); // >> 6.7 us + delay(20*100); // >> 6.7 us SETCLK(); input <<= 1; input |= MISO; - delay(20); // >> 6.7 us + delay(20*100); // >> 6.7 us } SETSS();