Date: | 2012-06-16 21:17:33 (10 years 11 months ago) |
---|---|
Author: | Maarten ter Huurne |
Commit: | 939c3e51dd77d23649fe511311f33d3cc698ced8 |
Message: | MIPS: JZ4740: Work around fbcon logo crash with SLCD The logo data is in the init section. However, when using the SLCD driver, the fbcon code will try to fetch the logo data after the init section has already been freed, potentially crashing the kernel. This is a workaround because we have to release a stable kernel now. The root cause should be found and fixed later. |
Files: |
drivers/video/console/fbcon.c (2 diffs) drivers/video/jz4740_slcd_fb.c (4 diffs) |
Change Details
drivers/video/console/fbcon.c | ||
---|---|---|
2330 | 2330 | fbcon_set_palette(vc, color_table); |
2331 | 2331 | fbcon_clear_margins(vc, 0); |
2332 | 2332 | |
2333 | /* TODO: Figure out why the logo gets accessed after the init phase ends | |
2334 | * when using the JZ4740 SLCD driver. | |
2335 | */ | |
2336 | #ifndef CONFIG_FB_JZ4740_SLCD | |
2333 | 2337 | if (logo_shown == FBCON_LOGO_DRAW) { |
2334 | 2338 | |
2335 | 2339 | logo_shown = fg_console; |
... | ... | |
2341 | 2345 | vc->vc_top) / 2); |
2342 | 2346 | return 0; |
2343 | 2347 | } |
2348 | #endif | |
2344 | 2349 | return 1; |
2345 | 2350 | } |
2346 | 2351 |
drivers/video/jz4740_slcd_fb.c | ||
---|---|---|
416 | 416 | |
417 | 417 | mutex_lock(&jzfb->lock); |
418 | 418 | if (!jzfb->is_enabled) |
419 | clk_enable(jzfb->ldclk); | |
419 | clk_prepare_enable(jzfb->ldclk); | |
420 | 420 | |
421 | 421 | // TODO(MtH): We should not change config while DMA might be running. |
422 | 422 | writew(slcd_cfg, jzfb->base + JZ_REG_SLCD_CFG); |
423 | 423 | |
424 | 424 | if (!jzfb->is_enabled) |
425 | clk_disable(jzfb->ldclk); | |
425 | clk_disable_unprepare(jzfb->ldclk); | |
426 | 426 | mutex_unlock(&jzfb->lock); |
427 | 427 | |
428 | 428 | // TODO(MtH): Use maximum transfer speed that panel can handle. |
... | ... | |
437 | 437 | { |
438 | 438 | uint32_t ctrl; |
439 | 439 | |
440 | clk_enable(jzfb->ldclk); | |
440 | clk_prepare_enable(jzfb->ldclk); | |
441 | 441 | |
442 | 442 | jz_gpio_bulk_resume(jz_slcd_ctrl_pins, jzfb_num_ctrl_pins(jzfb)); |
443 | 443 | if (jzfb->pdata->lcd_type & (1 << 6)) { |
... | ... | |
481 | 481 | jzfb_num_data_pins(jzfb)); |
482 | 482 | } |
483 | 483 | |
484 | clk_disable(jzfb->ldclk); | |
484 | clk_disable_unprepare(jzfb->ldclk); | |
485 | 485 | } |
486 | 486 | |
487 | 487 | static int jzfb_blank(int blank_mode, struct fb_info *info) |
... | ... | |
933 | 933 | |
934 | 934 | mutex_init(&jzfb->lock); |
935 | 935 | |
936 | clk_enable(jzfb->ldclk); | |
936 | clk_prepare_enable(jzfb->ldclk); | |
937 | 937 | jzfb->is_enabled = 1; |
938 | 938 | |
939 | 939 | writel(JZ_LCD_CFG_SLCD, jzfb->base + JZ_REG_LCD_CFG); |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9