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 ;-)
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() 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? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- 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