Difference between revisions of "User:GNUtoo"

From coreboot
Jump to: navigation, search
(How to get rid of the vbios of the x60 [New Version])
 
(23 intermediate revisions by one user not shown)
Line 2: Line 2:
 
* I've an x60
 
* I've an x60
 
* I've an alix.1C
 
* I've an alix.1C
 +
 +
== scripts to help getting rid of the vbios of the x60 ==
 +
=== Script 1: generate the io access for the coreboot driver ===
 +
* follow "Case study: new laptop (not complete, sorry)" in https://docs.google.com/document/d/1g8FMob25VZYxbWri2iFB8YiSL8gwF9vKJH3HGxr0xQU/edit?pli=1
 +
* pacman -S plan9port
 +
* cp /opt/plan9/bin/ssam ./
 +
* replace the following line in ./ssam:
 +
#!/usr/local/plan9/bin/rc
 +
by the following line:
 +
#!/opt/plan9/bin/rc
 +
* create the ssamfix file with:
 +
  ,s/\[ *[0-9]+\..[0-9]+\]//g
 +
  ,s/^ *//g
 +
y/^[RWU]/s/^/M /g
 +
  ,s/\nU/ ;;;UDELAY/g
 +
  ,|uniq -c
 +
  ,s/^ *//g
 +
  ,s/(^[0-9]+) ([MRW])/\2 \1/g
 +
  ,s/"/\\"/g
 +
  ,s/^M ([0-9]+) *(\[.*)/{M, \1, "\2"},/g
 +
  ,s/^M ([0-9]+) *(.*)/{M, \1, "\2"},/g
 +
  ,s/:  */:/g
 +
  ,s/...UDELAY *([0-9]+)/\1/g
 +
  ,s/^([RW]) ([0-9]+) (.*):0x([0-9a-f]+)(.*)/{\1, \2, "", \3, 0x\4, \5},/g
 +
* run the following commands:
 +
. /etc/profile.d/plan9.sh
 +
cat dmesg| ./ssam  -f ssamfix > foo.c
 +
 +
=== Script2: compare the io access that were too fast ===
 +
* Replace {V,0,}, with {V,7,}, in src/mainboard/vendor/device/i915io.c
 +
* cat /dev/ttyUSB0 > accesses.txt
 +
* Use that script against accesses.txt to find the guilty accesses:
 +
#!/usr/bin/env python2
 +
import sys,re
 +
 
 +
def main(args):
 +
try:
 +
f = open(args[1],'ro')
 +
except:
 +
print args[0], " <file>"
 +
 +
for line in f:
 +
if re.match("0x[0-9]*: Got .*, expect .*",line):
 +
line = line.replace('\r\n','').replace(", expect ",':').replace(": Got ",':')
 +
split = line.split(':')
 +
#print split
 +
if split[1] != split[2]:
 +
print line
 +
if __name__ == '__main__':
 +
main(sys.argv)
 +
 +
== How to get semantic IOs ==
 +
In i915tool:
 +
* import your IOs in prettyregs.c
 +
* compile prettyregs.c
 +
* run prettyregs
 +
 +
== How to get rid of the vbios of the x60 [New Version] ==
 +
Apply the coreboot patches, or re-do them for your mainboard
 +
 +
Then configure coreboot with:
 +
[*] Output verbose x86emu debug messages
 +
[ ]  Trace JMP/RETF
 +
[ ]  Trace all opcodes
 +
[ ]  Log Plug&Play accesses
 +
[ ]  Log Disk I/O
 +
[ ]  Log PMM
 +
[ ]  Debug VESA BIOS Extensions
 +
[ ]  Redirect INT10 output to console
 +
[ ]  Log intXX calls
 +
[ ]  Log special memory accesses
 +
[ ]  Log all memory accesses
 +
[*]  Log IO accesses
 +
Build and flash coreboot.
 +
 +
git clone [https://code.google.com/p/i915tool/ i915tool].
 +
 +
Get the tarball that contains the generated code, extract it.
 +
 +
Also get the i915_regs.h header and put it in final/
 +
 +
Then go into i915tool and apply some patches for the x60 or redo them for your mainboard.
 +
 +
$ cd i915tool/x60
 +
use picocom -b 115200 /dev/ttyUSB0 or stty to set the bauds of the Serial port.
 +
Then get logs:
 +
$ cat /dev/ttyUSB0 | tee coreboot.log
 +
Then remove the binary symbols, dos2unix will help identifying where they are:
 +
$ dos2unix coreboot.log
 +
dos2unix: Binary symbol found at line 136332
 +
dos2unix: Skipping binary file coreboot.log
 +
Then do:
 +
$ dos2unix coreboot.log
 +
Then remove the lines before and after the log, the log looks like that:
 +
[0047229e]c000:51cb outl(0x80001014, 0x0cf8)
 +
[0047325f]c000:51d4 inw(0x0cfc) = 0x50a1
 +
Then run make and fix the errors:
 +
$ make
 +
Then copy to coreboot as it says.
 +
Then if necessary try to compact the source code a bit, here for me I have a really long list of:
 +
io_i915_write32(0xcffbe001,0x8001);
 +
io_i915_write32(0xcffbe001,0x8005);
 +
io_i915_write32(0xcffbe001,0x8009);
 +
io_i915_write32(0xcffbe001,0x800d);
 +
io_i915_write32(0xcffbe001,0x8011);
 +
That can be replaced with:
 +
int i = 0;
 +
for (i=0x8001;i<0x3fffa;i+=4){
 +
io_i915_write32(0xcffbe001,i);
 +
}

Latest revision as of 12:23, 21 May 2013

  • I did the port to the M4A785T-M
  • I've an x60
  • I've an alix.1C

Contents

[edit] scripts to help getting rid of the vbios of the x60

[edit] Script 1: generate the io access for the coreboot driver

#!/usr/local/plan9/bin/rc

by the following line:

#!/opt/plan9/bin/rc
  • create the ssamfix file with:
 ,s/\[ *[0-9]+\..[0-9]+\]//g
 ,s/^ *//g
y/^[RWU]/s/^/M /g
 ,s/\nU/ ;;;UDELAY/g
 ,|uniq -c
 ,s/^ *//g
 ,s/(^[0-9]+) ([MRW])/\2 \1/g
 ,s/"/\\"/g
 ,s/^M ([0-9]+) *(\[.*)/{M, \1, "\2"},/g
 ,s/^M ([0-9]+) *(.*)/{M, \1, "\2"},/g
 ,s/:  */:/g
 ,s/...UDELAY *([0-9]+)/\1/g
 ,s/^([RW]) ([0-9]+) (.*):0x([0-9a-f]+)(.*)/{\1, \2, "", \3, 0x\4, \5},/g
  • run the following commands:
. /etc/profile.d/plan9.sh
cat dmesg| ./ssam  -f ssamfix > foo.c

[edit] Script2: compare the io access that were too fast

  • Replace {V,0,}, with {V,7,}, in src/mainboard/vendor/device/i915io.c
  • cat /dev/ttyUSB0 > accesses.txt
  • Use that script against accesses.txt to find the guilty accesses:
#!/usr/bin/env python2
import sys,re
 
def main(args):
	try:
		f = open(args[1],'ro')
	except:
		print args[0], " <file>"

	for line in f:
		if re.match("0x[0-9]*: Got .*, expect .*",line):
			line = line.replace('\r\n',).replace(", expect ",':').replace(": Got ",':')
			split = line.split(':')
			#print split
			if split[1] != split[2]:
				print line
if __name__ == '__main__':
	main(sys.argv)

[edit] How to get semantic IOs

In i915tool:

  • import your IOs in prettyregs.c
  • compile prettyregs.c
  • run prettyregs

[edit] How to get rid of the vbios of the x60 [New Version]

Apply the coreboot patches, or re-do them for your mainboard

Then configure coreboot with:

[*] Output verbose x86emu debug messages
[ ]   Trace JMP/RETF
[ ]   Trace all opcodes
[ ]   Log Plug&Play accesses
[ ]   Log Disk I/O
[ ]   Log PMM
[ ]   Debug VESA BIOS Extensions
[ ]   Redirect INT10 output to console
[ ]   Log intXX calls
[ ]   Log special memory accesses
[ ]   Log all memory accesses
[*]   Log IO accesses

Build and flash coreboot.

git clone i915tool.

Get the tarball that contains the generated code, extract it.

Also get the i915_regs.h header and put it in final/

Then go into i915tool and apply some patches for the x60 or redo them for your mainboard.

$ cd i915tool/x60

use picocom -b 115200 /dev/ttyUSB0 or stty to set the bauds of the Serial port. Then get logs:

$ cat /dev/ttyUSB0 | tee coreboot.log

Then remove the binary symbols, dos2unix will help identifying where they are:

$ dos2unix coreboot.log 
dos2unix: Binary symbol found at line 136332
dos2unix: Skipping binary file coreboot.log

Then do:

$ dos2unix coreboot.log

Then remove the lines before and after the log, the log looks like that:

[0047229e]c000:51cb outl(0x80001014, 0x0cf8)
[0047325f]c000:51d4 inw(0x0cfc) = 0x50a1

Then run make and fix the errors:

$ make

Then copy to coreboot as it says. Then if necessary try to compact the source code a bit, here for me I have a really long list of:

io_i915_write32(0xcffbe001,0x8001);
io_i915_write32(0xcffbe001,0x8005);
io_i915_write32(0xcffbe001,0x8009);
io_i915_write32(0xcffbe001,0x800d);
io_i915_write32(0xcffbe001,0x8011);

That can be replaced with:

int i = 0;
for (i=0x8001;i<0x3fffa;i+=4){
io_i915_write32(0xcffbe001,i);
}
Personal tools
Namespaces

Variants
Actions
Status
Support
Development / QA
Toolbox