fb->screenbase is an I/O address, so include/linux/fbcon.h cannot
call the normal memmove() on the frame buffer addresses passed
to it.

The traces make it clear that memmove() is being called with
physical I/O addresses:

>>TPC; 0055e3c0 <dest_is_64byte_aligned+48/5c>   <=====

(arch/sparc64/lib/VIScopy.S) dest_is_64byte_aligned:
  ... skip 0x48 bytes ...
        EXVIS1(LDBLK            [%o1 + 0x00] ASIBLK, %f0)       ! LSU   Group

o0: 000001ffe1800000 o1: 000001ffe1ab6600 o2: 0000000000000010 o3: 00000000000000f0
                     ^^^^^^^^^^^^^^^^^^^^

I/O space starts at 0x10000000000 on UltraSparc systems.

One suggestion is to change include/video/fbcon.h to implement
fb_memmove() in terms of fb_read{b,w,l}/fb_write{b,w,l}

This would be correct for all architectures which lack a specific
version in fbcon.h already.  The ix86 version works by accident
because ioremap()'d areas just so happen to be implemented by
virtually mapping them into the kernel.

Even better would be to require that the asm/io.h headers define a
{memcpy,memmove}_io() (ie. where source _and_ destination are I/O
addresses) and then have fbcon.h just define fb_memmove to memmove_io
in the generic cases.

Later,
David S. Miller
[EMAIL PROTECTED]
-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of the message to [EMAIL PROTECTED]

Reply via email to