Re: [PATCH 2/2] m68k/atari - atafb: convert allocation of fb ram to new interface

schmitz
2014-03-20T08:17:54Z

Geert Uytterhoeven wrote:
> On Wed, Mar 19, 2014 at 8:23 AM, Michael Schmitz <schmitzmic@gmail.com> 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