# GDB script for loading ram.bin process #=============================================================================== #set GDB connection set remotetimeout 5000 target remote localhost:2331 #=============================================================================== #=============================================================================== #Message display setting #disable all messages set verbose off set complaints 0 set confirm off set exec-done-display off show exec-done-display set trace-commands off #set debug aix-thread off #set debug dwarf2-die 0 set debug displaced off set debug expression 0 set debug frame 0 set debug infrun 0 set debug observer 0 set debug overload 0 #set debugvarobj 0 set pagination off set print address off set print symbol-filename off set print symbol off set print pretty off set print object off #set debug notification off set debug parser off set debug remote 0 #=============================================================================== set $FLASHDATBUFSIZE = 0x800 #=============================================================================== set $PERI_ON_BASE = 0x48000000 set $REG_BOOT_CFG = 0x03F8 #=============================================================================== #set $CUT_VERSION = {char}($PERI_ON_BASE+$REG_BOOT_CFG) set $CUT_VERSION = 1 monitor reset 1 monitor sleep 20 #monitor reset halt file gnu_utility/gnu_script/target_FPGA.axf restore gnu_utility/gnu_script/flash_loader_ram_1.bin binary 0x00082000 #flash write function define flash_write printf "flash_write FileSize:%d \n", $arg1 printf "flash_write FlashAddrForWrite:%x \n", FlashAddrForWrite set $FileSize = $arg1 set $Loopnumber = ($FileSize / $FLASHDATBUFSIZE) set $TailSize = ($FileSize % $FLASHDATBUFSIZE) printf "FileSize: %x\n",$FileSize printf "Loopnumber = %d\n", $Loopnumber printf "TailSize = %d\n", $TailSize printf "global variables\n" set $FILESTARTADDR = 0 set $FLASHDATSRC = FlashDatSrc if( $FileSize < $FLASHDATBUFSIZE ) set FlashBlockWriteSize = $FileSize else set FlashBlockWriteSize = $FLASHDATBUFSIZE end printf "FlashDatSrc:%x\n", $FLASHDATSRC printf "FlashBlockWriteSize " printf "FlashBlockWriteSize:%x\n", FlashBlockWriteSize printf "FlashAddrForWrite:%x", FlashAddrForWrite printf "Flash write start...\n" set $Loop = 0 while ($Loop < $Loopnumber) set $FILESTARTADDR = $FLASHDATBUFSIZE * $Loop printf "FILESTARTADDR" p /x $FILESTARTADDR p /x FlashAddrForWrite p /x $Loop restore $arg0 binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $FLASHDATBUFSIZE) c set $Loop = $Loop + 0x01 end if ( $TailSize > 0) set $FILESTARTADDR = $FLASHDATBUFSIZE * $Loop printf "FILESTARTADDR" p /x $FILESTARTADDR p /x FlashAddrForWrite p /x $Loop restore $arg0 binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $TailSize) c end end #=============================================================================== #Set rom boot BIT to flash loader set $Temp = 0x0 set $Temp = {int}($PERI_ON_BASE+$REG_BOOT_CFG) p /x $Temp set $Temp = ($Temp & ~(0xFFFF << 16)) set $Temp = ($Temp | (0x01 << 26)) p /x $Temp set {int}($PERI_ON_BASE+$REG_BOOT_CFG) = $Temp printf "....\n" printf "wakeup bit(%x):%x\n", ($PERI_ON_BASE+$REG_BOOT_CFG), {int}($PERI_ON_BASE+$REG_BOOT_CFG) #=============================================================================== #Stop KM4 when download flash set $Temp = 0x0 set $Temp = {int}($PERI_ON_BASE+0x21C) p /x $Temp set $Temp = ($Temp & ~(1 << 3)) set $Temp = ($Temp & ~(1 << 24)) p /x $Temp set {int}($PERI_ON_BASE+0x21C) = $Temp printf "....\n" printf "wakeup bit(%x):%x\n", ($PERI_ON_BASE+$REG_BOOT_CFG), {int}($PERI_ON_BASE+0x21C) #=============================================================================== #b RtlFlashProgram:StartOfFlashBlockWrite b rtl_flash_download.c:88 b rtl_flash_download.c:118 set $pc = 0x04 #continue c #=============================================================================== #=============================================================================== #flash write #application image set $KM0_KM4_IMAGE2_SIZE =0 set FlashAddrForWrite =0x188000 flash_write ./image/image.bin $KM0_KM4_IMAGE2_SIZE #audio image #set $AUDIO_IMAGE_SIZE =0 #set FlashAddrForWrite =0x300000 #flash_write ../image/audio.bin $AUDIO_IMAGE_SIZE #Tell flashloader complete flag set FlashWriteComplete = 0x1 #=============================================================================== #=============================================================================== #dump image from flash printf "dump for check\n" #Enable HW reset when download finish set $Temp = {int}(0x1298) if ($Temp != 0) set $Temp = 0x0 set $Temp = {int}($PERI_ON_BASE+0x54) set $Temp = ($Temp | (1 << 1)) p /x $Temp set {int}($PERI_ON_BASE+0x54) = $Temp end c #delete #=============================================================================== quit #===============================================================================