Geert Uytterhoeven wrote:
On Wed, Mar 19, 2014 at 8:23 AM, Michael Schmitz <schmitzmic@xxxxxxxxx> wrote:
@@ -3166,7 +3166,7 @@ int __init atafb_init(void)
memset(screen_base, 0, mem_req);
pad = -(unsigned long)screen_base & (PAGE_SIZE - 1);
screen_base += pad;
- real_screen_base = screen_base + ovsc_offset;
+ real_screen_base = atari_stram_to_phys((unsigned long) (screen_base + ovsc_offset));
This triggered my eye, but it's actually correct, as it's stored in
fix->smem_start,
which should be the physical address.
But the external_addr case is wrong ;-)
Haven't touched that at all yet.
screen_len = (mem_req - pad - ovsc_offset) & PAGE_MASK;
st_ovsc_switch();
if (CPU_IS_040_OR_060) {
Starting here, you have:
cache_push(virt_to_phys(screen_base), screen_len);
atari_stram_to_phys()
Well spotted - I'm sure I searched for to_phys, must have missed that
somehow
kernel_set_cachemode(screen_base, screen_len,
IOMAP_WRITETHROUGH);
woops, that won't work with the virt_to_phys() above, nor with transparent
translation. I guess it writes to a non-existent pointer table,
causing the crash?
You mean kernel_set_cachemode wants a physical address?
Not sure the mapping in head.S is actually per transparent translation
for 040 or 060. But I'll try with that chunk of code disabled (the early
mapping is done as NOCACHE_SER so we don't really need all of that if
the kernel is not in ST-RAM).
The last log line I get is:
atafb_init: start
atafb_init: initializing Falcon hw
atafb: screen_base ff001000 real_screen_base 00001000 screen_len 69632
Determined 640x400, depth 1
virtual 640x870
which is a bit further down.
I guess it dies in register_framebuffer() - the next log entry is missing:
fb_info(&fb_info, "frame buffer device, using %dK of video
memory\n",
screen_len >> 10);
Cheers,
Michael
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html