Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

stifb: fix crash A1439A CRX (Rattler) graphics card

Fix kernel crash when stifb driver is used with a A1439A CRX (Rattler)
graphics card. (Reference:
http://thread.gmane.org/gmane.linux.ports.hppa/1834)

Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Helge Deller and committed by
Linus Torvalds
62347218 1039edc9

+15 -7
+15 -7
drivers/video/stifb.c
··· 505 505 static void 506 506 rattlerSetupPlanes(struct stifb_info *fb) 507 507 { 508 + int saved_id, y; 509 + 510 + /* Write RAMDAC pixel read mask register so all overlay 511 + * planes are display-enabled. (CRX24 uses Bt462 pixel 512 + * read mask register for overlay planes, not image planes). 513 + */ 508 514 CRX24_SETUP_RAMDAC(fb); 509 515 510 - /* replacement for: SETUP_FB(fb, CRX24_OVERLAY_PLANES); */ 511 - WRITE_WORD(0x83000300, fb, REG_14); 512 - SETUP_HW(fb); 513 - WRITE_BYTE(1, fb, REG_16b1); 516 + /* change fb->id temporarily to fool SETUP_FB() */ 517 + saved_id = fb->id; 518 + fb->id = CRX24_OVERLAY_PLANES; 519 + SETUP_FB(fb); 520 + fb->id = saved_id; 514 521 515 - fb_memset((void*)fb->info.fix.smem_start, 0xff, 516 - fb->info.var.yres*fb->info.fix.line_length); 517 - 522 + for (y = 0; y < fb->info.var.yres; ++y) 523 + memset(fb->info.screen_base + y * fb->info.fix.line_length, 524 + 0xff, fb->info.var.xres * fb->info.var.bits_per_pixel/8); 525 + 518 526 CRX24_SET_OVLY_MASK(fb); 519 527 SETUP_FB(fb); 520 528 }