123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477 |
- From 1da5479d59b39d7931a2b0efabdfa314f6788b6d Mon Sep 17 00:00:00 2001
- From: Luka Perkov <luka@openwrt.org>
- Date: Sat, 2 Mar 2013 23:34:00 +0100
- Subject: tools: add some helper tools for Lantiq SoCs
- Signed-off-by: Luka Perkov Luka Perkov <luka@openwrt.org>
- Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
- --- /dev/null
- +++ b/tools/gct.pl
- @@ -0,0 +1,155 @@
- +#!/usr/bin/perl
- +
- +#use strict;
- +#use Cwd;
- +#use Env;
- +
- +my $aline;
- +my $lineid;
- +my $length;
- +my $address;
- +my @bytes;
- +my $addstr;
- +my $chsum=0;
- +my $count=0;
- +my $firstime=1;
- +my $i;
- +my $currentaddr;
- +my $tmp;
- +my $holder="";
- +my $loadaddr;
- +
- +if(@ARGV < 2){
- + die("\n Syntax: perl gct.pl uart_ddr_settings.conf u-boot.srec u-boot.asc\n");
- +}
- +
- +open(IN_UART_DDR_SETTINGS, "<$ARGV[0]") || die("failed to open uart_ddr_settings.conf\n");
- +open(IN_UART_SREC, "<$ARGV[1]") || die("failed to open u-boot.srec\n");
- +open(OUT_UBOOT_ASC, ">$ARGV[2]") || die("failed to open u-boot.asc\n");
- +
- +$i=0;
- +while ($line = <IN_UART_DDR_SETTINGS>){
- + if($line=~/\w/){
- + if($line!~/[;#\*]/){
- + if($i eq 0){
- + printf OUT_UBOOT_ASC ("33333333");
- + }
- + chomp($line);
- + $line=~s/\t//;
- + @array=split(/ +/,$line);
- + $j=0;
- + while(@array[$j]!~/\w/){
- + $j=$j+1;
- + }
- + $addr=@array[$j];
- + $regval=@array[$j+1];
- + $addr=~s/0x//;
- + $regval=~s/0x//;
- + printf OUT_UBOOT_ASC ("%08x%08x",hex($addr),hex($regval));
- + $i=$i+1;
- + if($i eq 8){
- + $i=0;
- + printf OUT_UBOOT_ASC ("\n");
- + }
- + }
- + }
- +}
- +
- +while($i lt 8 && $i gt 0){
- + printf OUT_UBOOT_ASC "00"x8;
- + $i=$i+1;
- +}
- +
- +if($i eq 8){
- + printf OUT_UBOOT_ASC ("\n");
- +}
- +
- +while($aline=<IN_UART_SREC>){
- + $aline=uc($aline);
- + chomp($aline);
- + next if(($aline=~/^S0/) || ($aline=~/^S7/));
- + ($lineid, $length, $address, @bytes) = unpack"A2A2A8"."A2"x300, $aline;
- + $length = hex($length);
- + $address = hex($address);
- + $length -=5;
- + $i=0;
- +
- + while($length>0){
- + if($firstime==1){
- + $addstr = sprintf("%x", $address);
- + $addstr = "0"x(8-length($addstr)).$addstr;
- + print OUT_UBOOT_ASC $addstr;
- + addchsum($addstr);
- + $firstime=0;
- + $currentaddr=$address;
- + $loadaddr = $addstr;
- + }
- + else{
- + if($count==64){
- + $addstr = sprintf("%x", $currentaddr);
- + $addstr = "0"x(8-length($addstr)).$addstr;
- + print OUT_UBOOT_ASC $addstr;
- + addchsum($addstr);
- + $count=0;
- + }
- +#printf("*** %x != %x\n", $address, $currentaddr) if $address != $currentaddr;
- + }
- + if($currentaddr < $address) {
- + print OUT_UBOOT_ASC "00";
- + addchsum("00");
- + $count++;
- + $currentaddr++;
- + }
- + else {
- + while($count<64){
- + $bytes[$i]=~tr/ABCDEF/abcdef/;
- + print OUT_UBOOT_ASC "$bytes[$i]";
- + addchsum($bytes[$i]);
- + $i++;
- + $count++;
- + $currentaddr++;
- + $length--;
- + last if($length==0);
- + }
- + }
- + if($count==64){
- + print OUT_UBOOT_ASC "\n";
- + }
- + }
- +}
- +if($count != 64){
- + $tmp = "00";
- + for($i=0;$i<(64-$count);$i++){
- + print OUT_UBOOT_ASC "00";
- + addchsum($tmp);
- + }
- + print OUT_UBOOT_ASC "\n";
- +}
- +
- +
- +print OUT_UBOOT_ASC "11"x4;
- +use integer;
- +$chsum=$chsum & 0xffffffff;
- +$chsum = sprintf("%X", $chsum);
- +$chsum = "0"x(8-length($chsum)).$chsum;
- +$chsum =~tr/ABCDEF/abcdef/;
- +print OUT_UBOOT_ASC $chsum;
- +print OUT_UBOOT_ASC "00"x60;
- +print OUT_UBOOT_ASC "\n";
- +
- +print OUT_UBOOT_ASC "99"x4;
- +print OUT_UBOOT_ASC $loadaddr;
- +print OUT_UBOOT_ASC "00"x60;
- +print OUT_UBOOT_ASC "\n";
- +
- +close OUT_UBOOT_ASC;
- +
- +sub addchsum{
- + my $cc=$_[0];
- + $holder=$holder.$cc;
- + if(length($holder)==8){
- + $holder = hex($holder);
- + $chsum+=$holder;
- + $holder="";
- + }
- +}
- --- /dev/null
- +++ b/tools/lantiq_bdi_conf.awk
- @@ -0,0 +1,116 @@
- +#!/usr/bin/awk -f
- +#
- +# Copyright (C) 2013 Luka Perkov <luka@openwrt.org>
- +# Copyright (C) 2013 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
- +#
- +# Usage:
- +# awk -f lantiq_bdi_conf.awk -v soc=ar9 board=<name> PATH_TO_BOARD/ddr_settings.h
- +#
- +# Additional information:
- +# http://www.abatron.ch/fileadmin/user_upload/products/pdf/ManGDBR4K-3000.pdf
- +#
- +# SPDX-License-Identifier: GPL-2.0+
- +#
- +
- +function print_header()
- +{
- + print "; "
- + print "; Copyright (C) 2013 Luka Perkov <luka@openwrt.org> "
- + print "; Copyright (C) 2013 Daniel Schwierzeck <daniel.schwierzeck@gmail.com> "
- + print "; "
- + print "; This file has been generated with lantiq_bdi_conf.awk script. "
- + print "; "
- + print "; SPDX-License-Identifier: GPL-2.0+ "
- + print "; "
- + print ""
- +}
- +
- +function init_ar9_prologue()
- +{
- + print "WM32 0xBF103010 0x80 ; CGU for CPU 333Mhz, DDR 167Mhz"
- + print "WM32 0xBF103014 0x01 ; CGU update"
- + print "WM32 0xBF800010 0x0 ; Clear error access log register"
- + print "WM32 0xBF800020 0x0 ; Clear error access log register"
- + print "WM32 0xBF800060 0xD ; Enable FPI, DDR and SRAM module in memory controller"
- + print "WM32 0xBF801030 0x0 ; Clear start bit of DDR memory controller"
- +}
- +
- +function init_ar9_epilogue()
- +{
- + print "WM32 0xBE105360 0x4001D7FF ; EBU setup"
- +}
- +
- +function init_ddr1_epilogue()
- +{
- + print "WM32 0xBF801030 0x100 ; Set start bit of DDR memory controller"
- +}
- +
- +function ar9_target()
- +{
- + print "CPUTYPE M34K"
- + print "ENDIAN BIG"
- + print "JTAGCLOCK 1"
- + print "BDIMODE AGENT ; [ LOADONLY, AGENT ]"
- + print "RESET JTAG ; [ NONE, JTAG, HARD ]"
- + print "POWERUP 100"
- + print "WAKEUP 100"
- + print "BREAKMODE HARD ; [ SOFT, HARD ]"
- + print "STEPMODE SWBP ; [ JTAG, HWBP, SWBP ]"
- + print "VECTOR CATCH"
- + print "SCANSUCC 1 5"
- +}
- +
- +function flash_p2601hnfx()
- +{
- + print "CHIPTYPE MIRRORX16"
- + print "CHIPSIZE 0x1000000"
- + print "BUSWIDTH 16"
- +}
- +
- +BEGIN {
- + switch (soc) {
- + case "ar9":
- + reg_base = 0xbf801000
- + print_header()
- + print "[INIT]"
- + init_ar9_prologue()
- + break
- + default:
- + print "Invalid or no value for SoC specified!"
- + exit 1
- + }
- +}
- +
- +/^#define/ {
- + /* DC03 contains MC enable bit and must not be set here */
- + if (tolower($2) != "mc_dc03_value")
- + printf("WM32 0x%x %s\n", reg_base, tolower($3))
- +
- + reg_base += 0x10
- +}
- +
- +END {
- + switch (soc) {
- + case "ar9":
- + init_ddr1_epilogue()
- + init_ar9_epilogue()
- + print ""
- + print "[TARGET]"
- + ar9_target()
- + print ""
- + print "[HOST]"
- + print "PROMPT \"ar9> \""
- + print ""
- + break
- + default:
- + }
- +
- + switch (board) {
- + case "p2601hnfx":
- + print "[FLASH]"
- + flash_p2601hnfx()
- + print ""
- + break
- + default:
- + }
- +}
- --- /dev/null
- +++ b/tools/lantiq_ram_extract_magic.awk
- @@ -0,0 +1,69 @@
- +#
- +# Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org>
- +#
- +# Usage:
- +# mips-openwrt-linux-objdump -EB -b binary -m mips:isa32r2 -D YOUR_IMAGE_DUMP | awk -f lantiq_ram_extract_magic.awk
- +#
- +# SPDX-License-Identifier: GPL-2.0+
- +#
- +
- +BEGIN {
- + print "/* "
- + print " * Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org> "
- + print " * "
- + print " * This file has been generated with lantiq_ram_extract_magic.awk script. "
- + print " * "
- + print " * SPDX-License-Identifier: GPL-2.0+ "
- + print " */ "
- + print ""
- +
- + mc_dc_value=0
- + mc_dc_number=0
- + right_section=0
- + mc_dc_value_print=0
- + mc_dc_number_print=0
- +}
- +
- +/t2,[0-9]+$/ {
- + if (right_section) {
- + split($4, tmp, ",")
- + mc_dc_value=sprintf("%X", tmp[2])
- + mc_dc_value_print=1
- + }
- +}
- +
- +/t2,0x[0-9a-f]+$/ {
- + if (right_section) {
- + split($4, tmp, ",0x")
- + mc_dc_value=sprintf("%s", tmp[2])
- + mc_dc_value=toupper(mc_dc_value)
- + mc_dc_value_print=1
- + }
- +}
- +
- +/t2,[0-9]+\(t1\)$/ {
- + if (right_section) {
- + split($4, tmp, ",")
- + split(tmp[2], tmp, "(")
- + mc_dc_number=tmp[1]/16
- + mc_dc_number_print=1
- + }
- +}
- +
- +{
- + if (right_section && mc_dc_number_print && mc_dc_value_print) {
- + if (mc_dc_number < 10)
- + print "#define MC_DC0" mc_dc_number "_VALUE\t0x" mc_dc_value
- + else
- + print "#define MC_DC" mc_dc_number "_VALUE\t0x" mc_dc_value
- + mc_dc_value_print=0
- + mc_dc_number_print=0
- + }
- +
- + if ($4 == "t1,t1,0x1000")
- + right_section=1
- +
- +
- + if ($4 == "t2,736(t1)")
- + right_section=0
- +}
- --- /dev/null
- +++ b/tools/lantiq_ram_init_uart.awk
- @@ -0,0 +1,117 @@
- +#!/usr/bin/awk -f
- +#
- +# Copyright (C) 2011-2012 Luka Perkov <luka@openwrt.org>
- +# Copyright (C) 2012 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
- +#
- +# Usage:
- +# awk -f lantiq_ram_init_uart.awk -v soc=<danube|ar9|vr9> PATH_TO_BOARD/ddr_settings.h
- +#
- +# SPDX-License-Identifier: GPL-2.0+
- +#
- +
- +function print_header()
- +{
- + print "; "
- + print "; Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org> "
- + print "; Copyright (C) 2012-2013 Daniel Schwierzeck <daniel.schwierzeck@gmail.com> "
- + print "; "
- + print "; This file has been generated with lantiq_ram_init_uart.awk script. "
- + print "; "
- + print "; SPDX-License-Identifier: GPL-2.0+ "
- + print ""
- +}
- +
- +function mc_danube_prologue()
- +{
- + /* Clear access error log registers */
- + print "0xbf800010", "0x0"
- + print "0xbf800020", "0x0"
- +
- + /* Enable DDR and SRAM module in memory controller */
- + print "0xbf800060", "0x5"
- +
- + /* Clear start bit of DDR memory controller */
- + print "0xbf801030", "0x0"
- +}
- +
- +function mc_ar9_prologue()
- +{
- + /* Clear access error log registers */
- + print "0xbf800010", "0x0"
- + print "0xbf800020", "0x0"
- +
- + /* Enable FPI, DDR and SRAM module in memory controller */
- + print "0xbf800060", "0xD"
- +
- + /* Clear start bit of DDR memory controller */
- + print "0xbf801030", "0x0"
- +}
- +
- +function mc_ddr1_epilogue()
- +{
- + /* Set start bit of DDR memory controller */
- + print "0xbf801030", "0x100"
- +}
- +
- +function mc_ddr2_prologue()
- +{
- + /* Put memory controller in inactive mode */
- + print "0xbf401070", "0x0"
- +}
- +
- +function mc_ddr2_epilogue(mc_ccr07_value)
- +{
- + /* Put memory controller in active mode */
- + mc_ccr07_value = or(mc_ccr07_value, 0x100)
- + printf("0xbf401070 0x%x\n", mc_ccr07_value)
- +}
- +
- +BEGIN {
- + switch (soc) {
- + case "danube":
- + reg_base = 0xbf801000
- + print_header()
- + mc_danube_prologue()
- + break
- + case "ar9":
- + reg_base = 0xbf801000
- + print_header()
- + mc_ar9_prologue()
- + break
- + case "vr9":
- + reg_base = 0xbf401000
- + print_header()
- + mc_ddr2_prologue()
- + break
- + default:
- + print "Invalid or no value for soc specified!"
- + exit 1
- + }
- +
- + mc_ccr07_value = 0
- +}
- +
- +/^#define/ {
- + /* CCR07 contains MC enable bit and must not be set here */
- + if (tolower($2) == "mc_ccr07_value")
- + mc_ccr07_value = strtonum($3)
- + if (tolower($2) == "mc_dc03_value")
- + /* CCR07 contains MC enable bit and must not be set here */
- + else
- + printf("0x%x %s\n", reg_base, tolower($3))
- +
- + reg_base += 0x10
- +}
- +
- +END {
- + switch (soc) {
- + case "danube":
- + case "ar9":
- + mc_ddr1_epilogue()
- + break
- + case "vr9":
- + mc_ddr2_epilogue(mc_ccr07_value)
- + break
- + default:
- + }
- +}
|