initial commit

This commit is contained in:
Tautvydas Belgeras 2018-06-05 16:16:17 +03:00
commit 60a7afcc83
2528 changed files with 1001987 additions and 0 deletions

View file

@ -0,0 +1,34 @@
include $(MAKE_INCLUDE_GEN)
.PHONY: all clean
#*****************************************************************************#
# Object FILE LIST #
#*****************************************************************************#
OBJS =
#*****************************************************************************#
# RULES TO GENERATE TARGETS #
#*****************************************************************************#
# Define the Rules to build the core targets
all: CORE_TARGETS
make -C src all
#*****************************************************************************#
# GENERATE OBJECT FILE
#*****************************************************************************#
CORE_TARGETS: $(OBJS)
#*****************************************************************************#
# RULES TO CLEAN TARGETS #
#*****************************************************************************#
clean:
make -C src clean

View file

@ -0,0 +1,75 @@
#!/bin/sh
#===============================================================================
CURRENT_UTILITY_DIR=$(pwd)
GDBSCPTFILE="../../../component/soc/realtek/8711b/misc/gnu_utility/flash_download/image/rtl_gdb_jtag_boot_com.txt"
#===============================================================================
RLXSTS=$(ps -W | grep "rlx_probe_driver.exe" | grep -v "grep" | wc -l)
echo $RLXSTS
JLKSTS=$(ps -W | grep "JLinkGDBServer.exe" | grep -v "grep" | wc -l)
echo $JLKSTS
#===============================================================================
#make the new string for being written
if [ $RLXSTS = 1 ]
then
echo "probe get"
#-------------------------------------------
LINE_NUMBER=$(grep -n "monitor reset " $GDBSCPTFILE | awk -F":" '{print $1}')
DEFAULT_STR=$(grep -n "monitor reset " $GDBSCPTFILE | awk -F":" '{print $2}')
#echo $LINE_NUMBER
echo $DEFAULT_STR
STRLEN_DFT=$(expr length "$DEFAULT_STR")
DEFAULT_STR="#monitor reset 1"
echo $DEFAULT_STR
#-------------------------------------------
SED_PARA="$LINE_NUMBER""c""$DEFAULT_STR"
sed -i "$SED_PARA" $GDBSCPTFILE
#===========================================
LINE_NUMBER=$(grep -n "monitor sleep " $GDBSCPTFILE | awk -F":" '{print $1}')
DEFAULT_STR=$(grep -n "monitor sleep " $GDBSCPTFILE | awk -F":" '{print $2}')
#echo $LINE_NUMBER
echo $DEFAULT_STR
STRLEN_DFT=$(expr length "$DEFAULT_STR")
DEFAULT_STR="#monitor sleep 20"
echo $DEFAULT_STR
#-------------------------------------------
SED_PARA="$LINE_NUMBER""c""$DEFAULT_STR"
sed -i "$SED_PARA" $GDBSCPTFILE
else
if [ $JLKSTS = 1 ]
then
echo "jlink get"
echo $CURRENT_UTILITY_DIR
#-------------------------------------------
LINE_NUMBER=$(grep -n "monitor reset " $GDBSCPTFILE | awk -F":" '{print $1}')
DEFAULT_STR=$(grep -n "monitor reset " $GDBSCPTFILE | awk -F":" '{print $2}')
#echo $LINE_NUMBER
echo $DEFAULT_STR
STRLEN_DFT=$(expr length "$DEFAULT_STR")
DEFAULT_STR="monitor reset 1"
echo $DEFAULT_STR
#-------------------------------------------
SED_PARA="$LINE_NUMBER""c""$DEFAULT_STR"
sed -i "$SED_PARA" $GDBSCPTFILE
#===========================================
LINE_NUMBER=$(grep -n "monitor sleep " $GDBSCPTFILE | awk -F":" '{print $1}')
DEFAULT_STR=$(grep -n "monitor sleep " $GDBSCPTFILE | awk -F":" '{print $2}')
#echo $LINE_NUMBER
echo $DEFAULT_STR
STRLEN_DFT=$(expr length "$DEFAULT_STR")
DEFAULT_STR="monitor sleep 20"
echo $DEFAULT_STR
#-------------------------------------------
SED_PARA="$LINE_NUMBER""c""$DEFAULT_STR"
sed -i "$SED_PARA" $GDBSCPTFILE
fi
fi
#===============================================================================

View file

@ -0,0 +1,31 @@
#!/bin/sh
#===============================================================================
CURRENT_UTILITY_DIR=$(pwd)
FLASHDLIMGDIR=$1
IMAGE_TARGET_FOLDER=$CURRENT_UTILITY_DIR/image
echo "..."
echo $CURRENT_UTILITY_DIR
echo $IMAGE_TARGET_FOLDER
GDBSCPTFILE="$FLASHDLIMGDIR/rtl_gdb_flash_write.txt"
#===============================================================================
#set image2 code size
FLASHFILENAME="$IMAGE_TARGET_FOLDER/image2_all_ota1.bin"
FLASH_FILE_SIZE=$(stat -c %s $FLASHFILENAME)
sed -i "s#^set \$FlashFileSize =.*#set \$FlashFileSize =$FLASH_FILE_SIZE#g" $GDBSCPTFILE
#set boot code size
FLASHFILENAME="$IMAGE_TARGET_FOLDER/boot_all.bin"
FLASH_FILE_SIZE=$(stat -c %s $FLASHFILENAME)
sed -i "s#^set \$XIPBootSize =.*#set \$XIPBootSize =$FLASH_FILE_SIZE#g" $GDBSCPTFILE
#set system data size
FLASHFILENAME="$IMAGE_TARGET_FOLDER/system.bin"
FLASH_FILE_SIZE=$(stat -c %s $FLASHFILENAME)
sed -i "s#^set \$SysDataSize =.*#set \$SysDataSize =$FLASH_FILE_SIZE#g" $GDBSCPTFILE
#OTA2 size
FLASHFILENAME="$IMAGE_TARGET_FOLDER/image2_all_ota2.bin"
FLASH_FILE_SIZE=$(stat -c %s $FLASHFILENAME)
sed -i "s#^set \$OTA2Size =.*#set \$OTA2Size =$FLASH_FILE_SIZE#g" $GDBSCPTFILE

View file

@ -0,0 +1,27 @@
#!/bin/sh
#===============================================================================
CURRENT_UTILITY_DIR=$(pwd)
echo "..."
echo $CURRENT_UTILITY_DIR
BOOTALLFILENAME="./application/Debug/bin/boot_all.bin"
RAMFILENAME="./application/Debug/bin/image2_all_ota1.bin"
echo $RAMFILENAME
#RAMFILENAME="ram_2.bin"
GDBSCPTFILE="../../../component/soc/realtek/8711b/misc/gcc_utility/flash_download/rtl_gdb_flash_write.txt"
#===============================================================================
#get file size
BOOTALL_FILE_SIZE=$(stat -c %s $BOOTALLFILENAME)
BOOTALL_FILE_SIZE_HEX=`echo "obase=16; $BOOTALL_FILE_SIZE"|bc`
RAM_FILE_SIZE=$(stat -c %s $RAMFILENAME)
RAM_FILE_SIZE_HEX=`echo "obase=16; $RAM_FILE_SIZE"|bc`
echo "size "$BOOTALL_FILE_SIZE" --> 0x"$BOOTALL_FILE_SIZE_HEX
echo "size "$RAM_FILE_SIZE" --> 0x"$RAM_FILE_SIZE_HEX
echo "set \$BOOTALLFILESize = 0x$BOOTALL_FILE_SIZE_HEX" > BTAsize.gdb
echo "set \$RamFileSize = 0x$RAM_FILE_SIZE_HEX" > fwsize.gdb
exit

View file

@ -0,0 +1,190 @@
# GDB script for loading ram.bin process
source ../../../component/soc/realtek/8711b/misc/gnu_utility/flash_download/image/rtl_gdb_jtag_boot_com.txt
#===============================================================================
#Macro define
set $FLASHDATBUFSIZE = 0x800
set $IMAGE_BOOT = 0x001
set $IMAGE_XIP1 = 0x002
set $IMAGE_XIP2 = 0x003
set $IMAGE_SYSD = 0x004
#===============================================================================
#register define
set $PERI_ON_BASE = 0x40000000
set $REG_SOC_PERI_FUNC0_EN = 0x0210
set $SPI_FLASH_BASE = 0x08000000
#===============================================================================
#Variables declaration (1)
#binary file size
set $BOOTALLFileSize = 0x0000
set $RamFileSize = 0x0000
source BTAsize.gdb
source fwsize.gdb
printf "-------------------------------\n"
printf "BOOTALLFileSize: %x\n",$BOOTALLFILESize
printf "RamFileSize: %x\n",$RamFileSize
printf "-------------------------------\n"
#===============================================================================
#Load flash download file
printf "Load flash loader.\n"
file ../../../component/soc/realtek/8711b/misc/gnu_utility/flash_download/image/target_FPGA.axf
#Load the file
#lo
#restore ./application/Debug/bin/rom.bin binary 0x0
restore ../../../component/soc/realtek/8711b/misc/gnu_utility/flash_download/image/flash_loader_ram_1.bin binary 0x10002000
#===============================================================================
#===============================================================================
#flash write function
define flash_write
printf "flash_write FileName:%x \n", $arg0
printf "flash_write FileSize:%d \n", $arg1
printf "flash_write FlashAddrForWrite:%x \n", FlashAddrForWrite
set $FileName = $arg0
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
if ($FileName == $IMAGE_XIP1)
restore ./application/Debug/bin/image2_all_ota1.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $FLASHDATBUFSIZE)
end
if ($FileName == $IMAGE_XIP2)
restore ./application/Debug/bin/image2_all_ota2.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $FLASHDATBUFSIZE)
end
if ($FileName == $IMAGE_BOOT)
restore ./application/Debug/bin/boot_all.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $FLASHDATBUFSIZE)
end
if ($FileName == $IMAGE_SYSD)
restore ./application/Debug/bin/system.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $FLASHDATBUFSIZE)
end
c
set $Loop = $Loop + 0x01
end
if ( $TailSize > 0)
set $FILESTARTADDR = $FLASHDATBUFSIZE * $Loop
printf "FILESTARTADDR"
p /x $FILESTARTADDR
p /x FlashAddrForWrite
p /x $Loop
if ($FileName == $IMAGE_XIP1)
restore ./application/Debug/bin/image2_all_ota1.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $TailSize)
end
if ($FileName == $IMAGE_XIP2)
restore ./application/Debug/bin/image2_all_ota2.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $TailSize)
end
if ($FileName == $IMAGE_BOOT)
restore ./application/Debug/bin/boot_all.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $TailSize)
end
if ($FileName == $IMAGE_SYSD)
restore ./application/Debug/bin/system.bin binary ($FLASHDATSRC-$FILESTARTADDR) $FILESTARTADDR ($FILESTARTADDR + $TailSize)
end
c
end
end
#===============================================================================
#Set rom boot BIT to flash loader
set $Temp = 0x0
set $Temp = {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN)
p /x $Temp
set $Temp = ($Temp | (0x01 << 26))
set $Temp = ($Temp & ~(0x01 << 27))
set $Temp = ($Temp & ~(0x01 << 28))
p /x $Temp
set {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN) = $Temp
printf "....\n"
printf "wakeup bit(%x):%x\n", ($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN), {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN)
#===============================================================================
#===============================================================================
#b RtlFlashProgram:StartOfFlashBlockWrite
b rtl_flash_download.c:88
#continue
c
#===============================================================================
#===============================================================================
#flash write
#set $XIPBootSize =4324
set $XIPBootSize =$BOOTALLFILESize
set FlashAddrForWrite =0x00000
flash_write $IMAGE_BOOT $XIPBootSize
#dump binary memory dump.bin $SPI_FLASH_BASE ($SPI_FLASH_BASE + $XIPBootSize)
set $SysDataSize =32
set FlashAddrForWrite =0x09000
#flash_write $IMAGE_SYSD $SysDataSize
#set $FlashFileSize =299200
set $FlashFileSize =$RamFileSize
set FlashAddrForWrite =0x0B000
flash_write $IMAGE_XIP1 $FlashFileSize
set $OTA2Size =299200
set FlashAddrForWrite =0x80000
#flash_write $IMAGE_XIP2 $OTA2Size
#Tell flashloader complete flag
set FlashWriteComplete = 0x1
#===============================================================================
#===============================================================================
#dump image from flash
printf "dump for check\n"
info b
delete
info b
quit
c
#delete
quit
#===============================================================================

View file

@ -0,0 +1,36 @@
# GDB script for loading ram.bin process
source gnu_utility/flash_download/image/rtl_gdb_jtag_boot_com.txt
#===============================================================================
#Load the file
file ./image/target.axf
#lo
#restore ./image/rom.bin binary 0x0
restore ./image/ram_1.bin binary 0x10002000
restore ./image/ram_2.bin binary 0x10005000
printf "Load image to sram.\n"
#set $dumpstartaddr = 0x00000000
#set $dumpendaddr = 0x10000
#dump binary memory rom.bin $dumpstartaddr $dumpendaddr
#===============================================================================
set $Temp = 0x0
set $Temp = {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN)
p /x $Temp
set $Temp = ($Temp & ~(0x01 << 26))
set $Temp = ($Temp & ~(0x01 << 27))
set $Temp = ($Temp & ~(0x01 << 28))
set $Temp = ($Temp | (0x01 << 28))
p /x $Temp
set {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN) = $Temp
printf "....\n"
printf "wakeup bit(%x):%x\n", ($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN), {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN)
c
#quit

View file

@ -0,0 +1,55 @@
# GDB script for loading ram.bin process
#===============================================================================
#set GDB connection
set remotetimeout 100000
target remote : 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 JTAG and external SRAM
#source ../../utility/jtag_cfg/J-Link_with_JTAG_and_external_SRAM.txt
monitor reset 1
monitor sleep 20
#===============================================================================
set $FLASHDATBUFSIZE = 0x800
#===============================================================================
#define PERI_ON_BASE 0x40000000
set $PERI_ON_BASE = 0x40000000
#define REG_SOC_PERI_FUNC0_EN 0x0218
set $REG_SOC_PERI_FUNC0_EN = 0x0210
#define SPI_FLASH_BASE 0x4000000
set $SPI_FLASH_BASE = 0x08000000

View file

@ -0,0 +1,55 @@
# GDB script for loading ram.bin process
#===============================================================================
#set GDB connection
set remotetimeout 100000
target remote : 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 JTAG and external SRAM
#source ../../utility/jtag_cfg/J-Link_with_JTAG_and_external_SRAM.txt
monitor reset 1
monitor sleep 20
#===============================================================================
set $FLASHDATBUFSIZE = 0x800
#===============================================================================
#define PERI_ON_BASE 0x40000000
set $PERI_ON_BASE = 0x40000000
#define REG_SOC_PERI_FUNC0_EN 0x0218
set $REG_SOC_PERI_FUNC0_EN = 0x0210
#define SPI_FLASH_BASE 0x4000000
set $SPI_FLASH_BASE = 0x08000000

View file

@ -0,0 +1,59 @@
# GDB script for loading ram.bin process
#===============================================================================
#set GDB connection
set remotetimeout 100000
target remote : 3333
#===============================================================================
#===============================================================================
#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 JTAG and external SRAM
#source ../../utility/jtag_cfg/J-Link_with_JTAG_and_external_SRAM.txt
#monitor reset init
#monitor halt
monitor soft_reset_halt
monitor sleep 20
#===============================================================================
set $FLASHDATBUFSIZE = 0x800
#===============================================================================
#define PERI_ON_BASE 0x40000000
set $PERI_ON_BASE = 0x40000000
#define REG_SOC_PERI_FUNC0_EN 0x0218
set $REG_SOC_PERI_FUNC0_EN = 0x0210
#define SPI_FLASH_BASE 0x4000000
set $SPI_FLASH_BASE = 0x08000000

View file

@ -0,0 +1,31 @@
# GDB script for loading ram.bin process
source gnu_utility/flash_download/image/rtl_gdb_jtag_boot_com.txt
#===============================================================================
#load rom.bin
#restore ./image/rom.bin binary 0x0
printf "Load image to sram.\n"
set $dumpstartaddr = 0x00000000
set $dumpendaddr = 0x10000
dump binary memory rom.bin $dumpstartaddr $dumpendaddr
#===============================================================================
set $Temp = 0x0
set $Temp = {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN)
p /x $Temp
set $Temp = ($Temp & ~(0x01 << 26))
set $Temp = ($Temp & ~(0x01 << 27))
set $Temp = ($Temp & ~(0x01 << 28))
p /x $Temp
set {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN) = $Temp
printf "....\n"
printf "wakeup bit(%x):%x\n", ($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN), {int}($PERI_ON_BASE+$REG_SOC_PERI_FUNC0_EN)
c
#quit

View file

@ -0,0 +1,16 @@
# GDB script for loading ram.bin process
source gnu_utility/flash_download/image/rtl_gdb_jtag_boot_com.txt
#===============================================================================
#Load the file
file ./image/target.axf
restore ./image/rom.bin binary 0x0
#dump binary memory dump.bin 0x00000000 0x00080000
#===============================================================================
#c
quit

View file

@ -0,0 +1,35 @@
include $(MAKE_INCLUDE_GEN)
.PHONY: all clean
MODULE_IFLAGS = -I../include
#*****************************************************************************#
# Object FILE LIST #
#*****************************************************************************#
OBJS = rtl_flash_download.o rtl_flash_download_entry.o
#*****************************************************************************#
# RULES TO GENERATE TARGETS #
#*****************************************************************************#
# Define the Rules to build the core targets
all: CORE_TARGETS RENAME_LOADER_OBJS COPY_RAM_OBJS
#*****************************************************************************#
# GENERATE OBJECT FILE
#*****************************************************************************#
CORE_TARGETS: $(OBJS)
#*****************************************************************************#
# RULES TO CLEAN TARGETS #
#*****************************************************************************#
clean:
$(REMOVE) *.o
$(REMOVE) *.i
$(REMOVE) *.s
$(REMOVE) *.d

View file

@ -0,0 +1,145 @@
#include "rtl8710b.h"
#include "build_info.h"
#define INH_PIN _PA_0
#define CTRL_PIN _PA_5
#define CHN_Y1 0
#define CHN_Y2 1
#define FLASHDATALEN 128*1024
BOOT_RAM_BSS_SECTION volatile u8* FlashDataBuf;
/* channel : the parameter can be CHN_Y1 or CHN_Y2 */
BOOT_RAM_TEXT_SECTION
static VOID SPDT_Switch(u32 channel)
{
GPIO_WriteBit(CTRL_PIN, channel);
}
BOOT_RAM_TEXT_SECTION
static VOID SPDT_Initial_Setup(VOID)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* INH pin: enables or disables the switch. 0: Enable, 1: Disable */
GPIO_InitStruct.GPIO_Pin = INH_PIN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(&GPIO_InitStruct);
/* Enable the switch */
GPIO_WriteBit(INH_PIN, 0);
/* CTRL pin: controls the switch. 0: Y1 channel is on, 1: Y2 channel is on */
GPIO_InitStruct.GPIO_Pin = CTRL_PIN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(&GPIO_InitStruct);
/* Default on-channel is Y1 */
SPDT_Switch(CHN_Y1);
}
BOOT_RAM_TEXT_SECTION
VOID BOOT_RAM_InitFlash(void)
{
u32 Value32;
/* disable cache first */
Cache_Enable(DISABLE); /* cahce enable becuase flash init will flush cahce */
RCC_PeriphClockCmd(APBPeriph_FLASH, APBPeriph_FLASH_CLOCK, DISABLE);
/* set 500MHz Div to gen spic clock 200MHz */
FLASH_ClockDiv(FLASH_CLK_DIV2P5);
RCC_PeriphClockCmd(APBPeriph_FLASH, APBPeriph_FLASH_CLOCK, ENABLE);
PinCtrl(PERIPHERAL_SPI_FLASH, S0, ON);
FLASH_StructInit(&flash_init_para);
flash_init_para.FLASH_cur_cmd = FLASH_CMD_READ;
flash_init_para.FLASH_baud_rate = 1;
flash_init_para.FLASH_baud_boot = 1;
FLASH_Init(SpicOneBitMode);
DBG_8195A("Init flash baudrate: %d\n", flash_init_para.FLASH_baud_rate);
/* enable cache before XIP */
Cache_Enable(ENABLE);
Cache_Flush();
}
BOOT_RAM_TEXT_SECTION
VOID BOOT_RAM_FlashtoFlash(VOID)
{
u32 addr = 0;
u32 image_size = 512; //test size is 512KB
u32 tail_size;
u32 times = image_size / (FLASHDATALEN / 1024);
int i = 0, j = 0;
BOOT_RAM_InitFlash();
DBG_8195A("Flash init done!\n");
FlashDataBuf = __image2_entry_func__;
DBG_8195A("Start copy data from source flash to destination flash...\n");
SPDT_Initial_Setup();
/* Erase Destination flash */
SPDT_Switch(CHN_Y2);
FLASH_Erase(EraseChip, 0);
DBG_8195A("Erase Destination flash done!\n");
for(; i < times; i++){
/* SPDT switch to Source flash */
SPDT_Switch(CHN_Y1);
_memcpy(FlashDataBuf, SPI_FLASH_BASE + addr, FLASHDATALEN);
/* SPDT switch to Destination flash */
SPDT_Switch(CHN_Y2);
for(j = 0; j < FLASHDATALEN; j += 8){
FLASH_TxData12B(addr + j, 8, FlashDataBuf + j);
}
addr += FLASHDATALEN;
DBG_8195A("128KB copied done!\n");
}
tail_size = image_size % (FLASHDATALEN / 1024);
if(tail_size != 0){
/* SPDT switch to Source flash */
SPDT_Switch(CHN_Y1);
_memcpy(FlashDataBuf, SPI_FLASH_BASE + addr, tail_size * 1024);
/* SPDT switch to Destination flash */
SPDT_Switch(CHN_Y2);
for(j = 0; j < tail_size * 1024; j += 4){
FLASH_TxData12B(addr + j, 4, FlashDataBuf + j);
}
addr += tail_size * 1024;
DBG_8195A("%d KB done!\n", tail_size);
}
DBG_8195A("Flash to flash done!\n");
while(1){}
}
IMAGE1_ENTRY_SECTION
RAM_FUNCTION_START_TABLE RamStartTable = {
.RamStartFun = BOOT_RAM_FlashtoFlash,
.RamWakeupFun = NULL, /* init in socps SOCPS_InitSYSIRQ */
.RamPatchFun0 = BOOT_RAM_FlashtoFlash,
.RamPatchFun1 = BOOT_RAM_FlashtoFlash,
.RamPatchFun2 = BOOT_RAM_FlashtoFlash,
.FlashStartFun = NULL
};

View file

@ -0,0 +1,124 @@
/******************************************************************************
*
* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
******************************************************************************/
#include "rtl8710b.h"
#include "build_info.h"
#define FLASHDATALEN 2048
BOOT_RAM_BSS_SECTION volatile u8 FlashDataBuf[FLASHDATALEN];
BOOT_RAM_BSS_SECTION volatile u32 *pFlashDatSrc;
BOOT_RAM_BSS_SECTION volatile u32 FlashBlockWriteSize; //The maximum size of each block write is FLASHDATALEN,
//The actual value MUST be given by GDB.
BOOT_RAM_BSS_SECTION volatile u32 FlashAddrForWrite; //The flash address to be written.
//The actual value MUST be given by GDB.
BOOT_RAM_BSS_SECTION volatile u8 FlashWriteComplete;
BOOT_RAM_BSS_SECTION volatile u32 FlashDatSrc;
BOOT_RAM_BSS_SECTION u32 erase_sector_addr = 0;
extern u8 __rom_bss_start__[];
extern u8 __rom_bss_end__[];
extern u8 __ram_start_table_start__[];
extern u32 ConfigDebugErr;
extern u32 ConfigDebugInfo;
extern u32 ConfigDebugWarn;
void BOOT_RAM_TEXT_SECTION
RtlFlashProgram(VOID)
{
volatile u32 FlashWriteCnt = 0;
u8 flash_ID[3];
//2 Need Modify
VECTOR_TableInit(0x1003EFFC);
DBG_8195A("==========================================================\n");
DBG_8195A("Flash Downloader Build Time: "UTS_VERSION"\n");
DBG_8195A("==========================================================\n");
FlashDatSrc = (u32)&FlashDataBuf;
pFlashDatSrc = (u32 *)&FlashDataBuf;
FlashWriteComplete = 0;
FlashBlockWriteSize = 0;
FlashAddrForWrite = 0;
erase_sector_addr = 0;
Cache_Enable(DISABLE);
RCC_PeriphClockCmd(APBPeriph_FLASH, APBPeriph_FLASH_CLOCK, DISABLE);
/* set 500MHz Div to gen spic clock 200MHz */
FLASH_ClockDiv(FLASH_CLK_DIV2P5);
RCC_PeriphClockCmd(APBPeriph_FLASH, APBPeriph_FLASH_CLOCK, ENABLE);
PinCtrl(PERIPHERAL_SPI_FLASH,S0,ON);
DBG_8195A("Flash init start\n");
FLASH_StructInit(&flash_init_para);
FLASH_Init(SpicOneBitMode);
DBG_8195A("Flash init done\n");
FLASH_RxCmd(flash_init_para.FLASH_cmd_rd_id, 3, flash_ID);
if(flash_ID[0] == 0x20){
flash_init_para.FLASH_cmd_chip_e = 0xC7;}
//4 Erase the flash before writing it
//FLASH_Erase(EraseChip, 0);
//DBG_8195A("Flash erace done\n");
DBG_8195A("Flash download start\n");
//4 Program the flash from memory data
while(1)
{
StartOfFlashBlockWrite:
asm("nop");
asm("nop");
asm("nop");
asm("nop");
FlashWriteCnt = 0;
pFlashDatSrc = (u32 *)&FlashDataBuf[0];
if (FlashWriteComplete == 1)
break;
while (FlashWriteCnt < FlashBlockWriteSize)
{
u32 sector_addr1 = FlashAddrForWrite & 0xFFFFF000; /* sector of first byte */
if(sector_addr1 >= erase_sector_addr) {
FLASH_Erase(EraseSector, sector_addr1);
erase_sector_addr = sector_addr1 + 0x1000; /* next sector we should erase */
}
FLASH_TxData12B(FlashAddrForWrite, 4, pFlashDatSrc);
FlashAddrForWrite += 4;
FlashWriteCnt += 4;
pFlashDatSrc+= 1;
}
goto StartOfFlashBlockWrite;
}
DBG_8195A("Flash download done\n");
while(1){
if (FlashWriteComplete == 1) {
FlashWriteComplete = 0;
}
}
}

View file

@ -0,0 +1,33 @@
/******************************************************************************
*
* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
******************************************************************************/
#include "rtl8710b.h"
#include "build_info.h"
#include "rtl8711b_flash.h"
void RtlFlashProgram(VOID);
IMAGE1_ENTRY_SECTION
RAM_FUNCTION_START_TABLE RamStartTable = {
.RamStartFun = RtlFlashProgram,
.RamWakeupFun = RtlFlashProgram,
.RamPatchFun0 = RtlFlashProgram,
.RamPatchFun1 = RtlFlashProgram,
.RamPatchFun2 = RtlFlashProgram
};