fixes ifxmips uboot compile, adds uart uploadable image and fix for wippies homebox...
[openwrt.git] / package / uboot-ifxmips / files / gct
diff --git a/package/uboot-ifxmips/files/gct b/package/uboot-ifxmips/files/gct
new file mode 100755 (executable)
index 0000000..09b1261
--- /dev/null
@@ -0,0 +1,157 @@
+#!/usr/bin/perl
+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){
+       print "\n not enough arguments";
+       print "\n Syntax: ./program_SDRAM input output\n";
+}
+
+open(INFILE1, "<$ARGV[0]") || die("\ninput open fail\n");
+open(INFILE2, "<$ARGV[1]") || die("\ninput open fail\n");
+open(OUTFILE, ">$ARGV[2]") || die("\nOutput file open fail\n");
+
+$i=0;
+while ($line = <INFILE1>){
+            if($line=~/\w/){
+            if($line!~/[;#\*]/){
+                  if($i eq 0){
+                 printf OUTFILE ("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 OUTFILE ("%08x%08x",hex($addr),hex($regval));
+                  $i=$i+1;
+                 if($i eq 8)
+                 {
+                      $i=0;
+                     printf OUTFILE ("\n");
+                 }
+
+               }
+             }
+
+           }
+
+        while($i lt 8 && $i gt 0){
+                   printf OUTFILE "00"x8;
+                  $i=$i+1;
+                  }
+        if($i eq 8){
+       printf OUTFILE ("\n");
+        }
+
+while($aline=<INFILE2>){
+       $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 OUTFILE $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 OUTFILE $addstr;
+                               addchsum($addstr);
+                               $count=0;
+                       }
+               }
+               while($count<64){
+                       $bytes[$i]=~tr/ABCDEF/abcdef/;
+                       print OUTFILE "$bytes[$i]";
+                       addchsum($bytes[$i]);
+                       $i++;
+                       $count++;
+                       $length--;
+                       last if($length==0);
+               }
+               if($count==64){
+                       print OUTFILE "\n";
+                       #print OUTFILE "\r";
+                       $currentaddr+=64;
+               }
+       }
+}
+if($count != 64){
+       $tmp = "00";
+       for($i=0;$i<(64-$count);$i++){
+               print OUTFILE "00";
+               addchsum($tmp);
+       }
+       print OUTFILE "\n";
+       #print OUTFILE "\r";
+}
+
+
+print OUTFILE "11"x4;
+use integer;
+$chsum=$chsum & 0xffffffff;
+$chsum = sprintf("%X", $chsum);
+$chsum = "0"x(8-length($chsum)).$chsum;
+$chsum =~tr/ABCDEF/abcdef/;
+print OUTFILE $chsum;
+print OUTFILE "00"x60;
+print OUTFILE "\n";
+#print OUTFILE "\r";
+
+print OUTFILE "99"x4;
+print OUTFILE $loadaddr;
+print OUTFILE "00"x60;
+print OUTFILE "\n";
+#print OUTFILE "\r";
+
+
+close OUTFILE;
+#END of Program
+
+
+
+sub addchsum{
+       my $cc=$_[0];
+       $holder=$holder.$cc;
+       if(length($holder)==8){
+               $holder = hex($holder);
+               $chsum+=$holder;
+               $holder="";
+       }
+}
+#END
+
+