Hi,
I am trying to port SerialICE to my Geode GX2 board and wanted to use rdmsr /
wrmsr for serial init but they seem a little different to the Coreboot
versions.
Am i right that the extra "key" value always has to be: 9c5a203a and acts as a
extra safety measure ?
Thanks , Nils.
Hi Stefan,
Thanks for your reply and the hint!
After some googling i came up with the following patch:
>function SerialICE_register_manipulation(data)
> -- **********************************************************
> --
> -- Wyse S50 skip TSC calibration loop
> if ( SerialICE_mainboard == "WYSE S50" and
> regs.cs == 0xf000 and regs.eip == 0x8978 ) then
> -- f000:8978
> printf("Skipping TSC calibration loop...\n")
> regs.eip = 0xa1c0
> end
>end
Unfortunately it doesn't work either.
I encountered something that might be a bug in SerialICE.
I enabled "log_rom_access = true" and "ip_logging = true" in serialice.lua .
It seems to me that the eip is not updated frequently enough before printing
See for instance f000:8960 in the following snippet of output:
[f000:a1f1] -- MEM: readb 000fa1f1 => 8b
[f000:a1f1] -- MEM: readw 000fa1ff => 7654
[f000:a1a4] -- MEM: readw 000fa1af => a1b4
[f000:8960] -- MEM: readw 000f896d => 01f4
[f000:8960] -- IO: outb 0043 <= 56
[f000:8960] -- IO: outb 0041 <= ee
[f000:8960] -- IO: inb 0061 => 10
[f000:8971] -- IO: inb 0061 => 10
[f000:8974] -- IO: inb 0061 => 00
[f000:897f] -- IO: inb 0061 => 00
[f000:897c] -- IO: inb 0061 => 10
[f000:8971] -- IO: inb 0061 => 10
[f000:8974] -- IO: inb 0061 => 00
[f000:897f] -- IO: inb 0061 => 00
[f000:897c] -- IO: inb 0061 => 10
[f000:8971] -- IO: inb 0061 => 10
[f000:8974] -- IO: inb 0061 => 00
[f000:897f] -- IO: inb 0061 => 00
[f000:897c] -- IO: inb 0061 => 00
[f000:8974] -- IO: inb 0061 => 10
I think that the instruction "MEM: readw 000f896d => 01f4" should come after
the "IO: outb 0043 <= 56" and "IO: outb 0041 <= ee" on f000:896c .
And the inb 0061 is according to GDB on f000:8974 not on the other addresses.
I'l sent you the corresponding snippet of assembler in private.
I'm not an experienced programmer so excuse me if i'm totally wrong here.
Thanks, Nils.
Hi,
I have been trying to run my Wyse S50 rom in SerialICE and i have been able to
pass Warm Reset with the following patch in serialice.lua
(SerialICE_msr_write_filter):
> -- **********************************************************
> --
> -- Wyse S50 WARM_RESET filter
>
> if addr == 0x4c000014 then
> lo = bit.band(0x00000001, lo);
> if lo == 0x00000001 then
> printf("WARM_RESET (filtered)\n")
> SerialICE_system_reset()
> return false, hi, lo
> end
> end
But i have some troubles further on in a loop in what i think is a TSC
calibration routine.
I think there is a speed problem that prohibits leaving the loop.
I would like to skip the loop and tried with the following patch in
SerialICE_memory_read_filter :
> if addr == 0x000f8978 then
> -- **********************************************************
> --
> -- Wyse S50 skip TSC calibration loop
> printf("Skipping TSC calibration loop...\n")
> regs.eip = 0xa1c0
> return false, true, 0
> elseif addr >= 0xfff00000 and addr <= 0xffffffff then
> -- ROM accesses go to Qemu only
> return false, true, 0
I want to skip from 0x000f8978 to 0x000fa1c0 (adresses taken from GDB
debugging) but the printf never shows.
Could someone give me a hint at what i am doing wrong?
Thanks ,Nils.