On Tue, 2010-08-03 at 08:30 -0600, Myles Watson wrote:
Since you have 2G of RAM available according to your boot log, I suspect that you're having a conflict with UMA again. I would start there.
Yes, that seemed to be it.
I added excplicit specification for high tables in mainboard.c as follows:
high_tables_base = uma_memory_base - 0x4000000; high_tables_size = HIGH_TABLES_SIZE * 1024;
I also tried setting uma_memory_base to
uma_memory_base = msr.lo / 2;
instead of
uma_memory_base = msr.lo - uma_memory_size;
With 2048 MB RAM this sets UMA to 0x40000000.
This fixed the seemingly corrupted ACPI DSDT headers, as the vendor and revision strings printed out in Linux boot log looked like random binary garbage.
I also made a custom DSDT source file by disassembling the Asus original DSDT binary, and then hand-picking some parts from there, which seemed to be most essential, such as parts defining processors, links(?), interrupts, and built-in PCI devices. Some parts I could not take, since they contained code that wouldn't compile with current IASL compiler, most notably all of ISA and Super I/O stuff.
By this process I could fix some errors, such as identifier use before definition, simply by reodering code blocks so that definition is always before use.
Some parts of the original DSDT contained executable code, such as if-statements at the module level, i.e. outside method definitions. In some cases I fixed this by executing all the definitions unconditionally, and in some cases just by leaving out that code block. It looks like that executable code outside methods was legal in ACPI 1.0 but no longer in 2.0 and afterwards.
A lot of the original DSDT seemed to describe namespace "ASOC", which seems to contain definitions of how to tweak voltages and frequencies of various mainbaord parts, i.e. overclocking or similar tuning. Those I left out completely.
For some reason, booting after reflashing does not work at the first attempt, but freezes at "Welcome to Grub!" -screen. Cycling power off and on again results in a successful boot to Grub menu.
With the stripped-down DSDT, I can get Grub2 to boot Linux up to login prompt and many devices also work, at least VGA console, IDE disk, and Ethernet. Remote ssh login works also.
However, there are lots of complaints about missing IRQ mapping definitions during boot, and Linux ACPI interpreter cannot load all the definitions, although IASL compiles them without complaint. So far I have not been able to figure out what is wrong there.
Please see the attached Linux boot log for details.
Also, Linux does not seem to know where the UMA is located. I believe it should get this from ACPI tables, but those are not working. Since it does not know where UMA is, Linux is bound to sooner or later corrupt UMA, or vice versa.
By looking at boot logs with original Asus BIOS, it looks like ACPI tables tell Linux that memory 0x70000000 - 0x7fffffff is reserved as "iomem" to device "pnp 00:01".
Now the next step would be to get Linux to accept the ACPI tables, but I do not really know where to begin debugging them.
Best Regards, Juhana Helovuo