aboutsummaryrefslogtreecommitdiff
path: root/src/southbridge/amd/agesa/hudson/hudson_fwm.py
blob: ad60b3b4e4a8ed6d1065be346df3e51534666148 (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
import sys, os, re
import struct
from Queue import Queue

def main(start_addr, file_name, xhci_name, imc_name, gec_name):
	fwm_sig		= 0x55AA55AA # Hudson-2/3/4 firmware signature
	fwm_header_len	= 0x10       # 55AA55AA, imc_off, gec_off, xhci_off

	if not os.path.exists(xhci_name):
		print "XHCI firmware %s does not exist\n" % xhci_name
		sys.exit(1)
	if not os.path.exists(imc_name):
		print "IMC firmware %s does not exist\n" % imc_name
		sys.exit(1)

	f = open(file_name, "w")
	print "write to file " + file_name

	imc_offset	= 0x10000 # 64K Bytes offset, hardcoded
	imc_addr	= start_addr + imc_offset; #startaddr + 0x10000
	gec_offset	= 0 #TODO
	gec_addr	= 0 #TODO
	xhci_addr	= start_addr + fwm_header_len #ROMSIG take 0x10 bytes

	format="I" # one unsigned integer
	data=struct.pack(format, fwm_sig)
	f.write(data)
	data=struct.pack(format, imc_addr)
	f.write(data)
	data=struct.pack(format, gec_addr)
	f.write(data)
	data=struct.pack(format, xhci_addr)
	f.write(data)

	fwm_content = open(xhci_name).read()
	f.write(fwm_content)

	imc_content = open(imc_name).read()
	f.seek(0)
	f.seek(imc_offset)
	f.write(imc_content)
#	if os.path.exists(gec_name):
#		gec_conent = open(gec_name).read()
#		f.seek(0)
#		f.seek(gec_offset)
#		f.write(gec_content)

	f.close()
	print "done\n"


if __name__ == '__main__':
	if (len(sys.argv) < 6):
		print "\nUsage: %s <rom_addr> <rom_file> <xhci_rom> <imc_rom> <gec_rom>\n" % sys.argv[0]
		print "Example: %s 0xFFF20000 hudson.bin xhci.bin imc.bin gec.bin\n" % sys.argv[0]
		sys.exit(1)
	rom_addr = int(sys.argv[1], 16)
	rom_file = sys.argv[2]
	xhci_file = sys.argv[3]
	imc_file = sys.argv[4]
	gec_file = sys.argv[5]
	print "%x %s %s %s %s" % (rom_addr, rom_file, xhci_file, imc_file, gec_file)

	main(rom_addr, rom_file, xhci_file, imc_file, gec_file)