#!/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: ./program_SDRAM input1(memory setup) input2(*\.srec) output\n"); } open(INFILE1, "<$ARGV[0]") || die("\ninput1 open fail\n"); open(INFILE2, "<$ARGV[1]") || die("\ninput2 open fail\n"); open(OUTFILE, ">$ARGV[2]") || die("\nOutput file open fail\n"); $i=0; while ($line = ){ 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=){ $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; } #printf("*** %x != %x\n", $address, $currentaddr) if $address != $currentaddr; } if($currentaddr < $address) { print OUTFILE "00"; addchsum("00"); $count++; $currentaddr++; } else { while($count<64){ $bytes[$i]=~tr/ABCDEF/abcdef/; print OUTFILE "$bytes[$i]"; addchsum($bytes[$i]); $i++; $count++; $currentaddr++; $length--; last if($length==0); } } if($count==64){ print OUTFILE "\n"; #print OUTFILE "\r"; } } } 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 tion value='committer'>committer
blob: 07497cb616fe3462434a093bf7adf673c5cfc414 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/dts-v1/;

/include/ "rt2880.dtsi"

/ {
	compatible = "AR670W", "ralink,rt2880-soc";
	model = "Airlink101 AR670W";

	palmbus@300000 {
		gpio0: gpio@600 {
			status = "okay";
		};
	};

	pinctrl {
		state_default: pinctrl0 {
			gpio {
				ralink,group = "i2c", "spi", "uartlite";
				ralink,function = "gpio";
			};
		};
	};

	ethernet@400000 {
		status = "okay";
		mtd-mac-address = <&factory 0x2004>;

		port@0 {
			phy-handle = <&phy0>;
			phy-mode = "mii";
		};

		mdio-bus {
			status = "okay";
			phy0: ethernet-phy@0 {
				phy-mode = "mii";
				reg = <0>;
			};
		};
	};

	wmac@480000 {
		status = "okay";
		ralink,mtd-eeprom = <&factory 0x2000>;
	};

	cfi@bdc00000 {
		compatible = "cfi-flash";
		reg = <0xbc400000 0x800000>;

		bank-width = <2>;
		#address-cells = <1>;
		#size-cells = <1>;

		u-boot@0 {
			reg = <0x0 0x30000>;
			label = "u-boot";
			read-only;
		};

		factory: factory@30000 {
			reg = <0x30000 0x10000>;
			label = "factory";
			read-only;
		};

		firmware@40000 {
			reg = <0x40000 0x3c0000>;
			label = "firmware";
		};
	};

	gpio-leds {
		compatible = "gpio-leds";

		status {
			label = "ar670w:green:power";
			gpios = <&gpio0 7 1>;
		};

		wpsblue {
			label = "ar670w:blue:wps";
			gpios = <&gpio0 13 1>;
		};
	};

	gpio-keys-polled {
		compatible = "gpio-keys-polled";
		#address-cells = <1>;
		#size-cells = <0>;
		poll-interval = <100>;
		wps {
			label = "wps";
			gpios = <&gpio0 0 1>;
			linux,code = <0x211>;
		};
		reset {
			label = "reset";
			gpios = <&gpio0 9 1>;
			linux,code = <0x198>;
		};
	};
};