On Friday 17 February 2006 00:54, Edgar Hucek wrote:
> The machine is an Apple Intel iMac 17" Dual Core booted with
> elilo.

Nice work.  I think I could help debug this much better with my own
Intel iMac :-)

Your wiki (http://xbox-linux.org/mactel/index.php/Main_Page) mentions
changes to elilo.  Can you detail those?  The elilo maintainer works
across the aisle and would like to make this work out of the box.  Or
maybe you just had to remove the ExitBootServices call, so the kernel
can keep using the firmware console or something?

If you have a way to capture the EFI memmap, could you post that on
your wiki page as well?  I guess you could collect basically the same
information by turning on EFI_DEBUG in arch/i386/kernel/efi.c.

The memmap I've seen (from another iMac) has a few strange things:

> Type       Start            End               # Pages          Attributes
> reserved   000000000009F000-000000000009FFFF  0000000000000001 
> 000000000000000F
> available  0000000000100000-000000007BD1DFFF  000000000007BC1E 
> 000000000000000F

No MemMapIO region for VGA frame buffer.  Intel ia64 boxes have the
same bug.

> MemMapIO   00000000E00F8000-00000000E00F8FFF  0000000000000001 
> 8000000000000000
> MemMapIO   00000000FED1C000-00000000FED1FFFF  0000000000000004 
> 8000000000000000
> MemMapIO   00000000FFFB0000-00000000FFFDFFFF  0000000000000030 
> 8000000000000000

Marked "runtime", but no access types supported.  I'd expect at least
UC to be set.

And the PCI windows aren't mentioned.  I'd expect 0x80000000-0x88000000
and some other regions to be MemMapIO.  I guess you can learn this from
the ACPI root bridge descriptions, so maybe it's not strictly required.

But as for your specific issue, I'd expect your memmap to show that the
ACPI tables are in memory that supports WB, so acpi_os_map_memory()
will just use phys_to_virt() instead of ioremap(), which is what your
dmesg showed:

>ACPI: XSDT (v001 APPLE   Apple00 0x00000039      0x01000013) @ 0x1fefd120
>...
> iounmap: bad address dfefd000
>  [<c0253684>] acpi_tb_get_table_header+0x67/0x92
>  [<c02536c2>] acpi_tb_get_table+0x13/0x55
>  [<c02538b2>] acpi_tb_get_table_rsdt+0x1f/0x99
>  [<c0253971>] acpi_load_tables+0x45/0xa9
>  [<c0443d56>] acpi_early_init+0x46/0xf6

(0xdfefd000 = 0x1fefd000 + 0xc0000000)

In that case, the iounmap() will certainly fail, as Shaohua points out.
His test patch forces acpi_os_map_memory() to always use ioremap(), but
that didn't help your situation.  My guess is you hit the
"if(!PageReserved(page))" case in __ioremap(), and we're missing
a SetPageReserved() somewhere in the EFI memory initialization, but
I'm not enough of an x86/VM expert propose anything.

Sorry for rambling on so long without contributing anything...  Maybe
Matt will have some ideas.
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to