diff options
Diffstat (limited to 'drivers/video/via')
-rw-r--r-- | drivers/video/via/accel.c | 43 | ||||
-rw-r--r-- | drivers/video/via/accel.h | 3 | ||||
-rw-r--r-- | drivers/video/via/viafbdev.c | 4 |
3 files changed, 31 insertions, 19 deletions
diff --git a/drivers/video/via/accel.c b/drivers/video/via/accel.c index c2f4e6e166f1..bc4905366726 100644 --- a/drivers/video/via/accel.c +++ b/drivers/video/via/accel.c | |||
@@ -315,13 +315,11 @@ static int hw_bitblt_2(void __iomem *engine, u8 op, u32 width, u32 height, | |||
315 | return 0; | 315 | return 0; |
316 | } | 316 | } |
317 | 317 | ||
318 | int viafb_init_engine(struct fb_info *info) | 318 | int viafb_setup_engine(struct fb_info *info) |
319 | { | 319 | { |
320 | struct viafb_par *viapar = info->par; | 320 | struct viafb_par *viapar = info->par; |
321 | void __iomem *engine; | 321 | void __iomem *engine; |
322 | int highest_reg, i; | 322 | u32 chip_name = viapar->shared->chip_info.gfx_chip_name; |
323 | u32 vq_start_addr, vq_end_addr, vq_start_low, vq_end_low, vq_high, | ||
324 | vq_len, chip_name = viapar->shared->chip_info.gfx_chip_name; | ||
325 | 323 | ||
326 | engine = viapar->shared->vdev->engine_mmio; | 324 | engine = viapar->shared->vdev->engine_mmio; |
327 | if (!engine) { | 325 | if (!engine) { |
@@ -330,18 +328,6 @@ int viafb_init_engine(struct fb_info *info) | |||
330 | return -ENOMEM; | 328 | return -ENOMEM; |
331 | } | 329 | } |
332 | 330 | ||
333 | /* Initialize registers to reset the 2D engine */ | ||
334 | switch (viapar->shared->chip_info.twod_engine) { | ||
335 | case VIA_2D_ENG_M1: | ||
336 | highest_reg = 0x5c; | ||
337 | break; | ||
338 | default: | ||
339 | highest_reg = 0x40; | ||
340 | break; | ||
341 | } | ||
342 | for (i = 0; i <= highest_reg; i += 4) | ||
343 | writel(0x0, engine + i); | ||
344 | |||
345 | switch (chip_name) { | 331 | switch (chip_name) { |
346 | case UNICHROME_CLE266: | 332 | case UNICHROME_CLE266: |
347 | case UNICHROME_K400: | 333 | case UNICHROME_K400: |
@@ -387,6 +373,29 @@ int viafb_init_engine(struct fb_info *info) | |||
387 | viapar->shared->vdev->camera_fbmem_offset = viapar->fbmem_free; | 373 | viapar->shared->vdev->camera_fbmem_offset = viapar->fbmem_free; |
388 | #endif | 374 | #endif |
389 | 375 | ||
376 | viafb_reset_engine(viapar); | ||
377 | return 0; | ||
378 | } | ||
379 | |||
380 | void viafb_reset_engine(struct viafb_par *viapar) | ||
381 | { | ||
382 | void __iomem *engine = viapar->shared->vdev->engine_mmio; | ||
383 | int highest_reg, i; | ||
384 | u32 vq_start_addr, vq_end_addr, vq_start_low, vq_end_low, vq_high, | ||
385 | vq_len, chip_name = viapar->shared->chip_info.gfx_chip_name; | ||
386 | |||
387 | /* Initialize registers to reset the 2D engine */ | ||
388 | switch (viapar->shared->chip_info.twod_engine) { | ||
389 | case VIA_2D_ENG_M1: | ||
390 | highest_reg = 0x5c; | ||
391 | break; | ||
392 | default: | ||
393 | highest_reg = 0x40; | ||
394 | break; | ||
395 | } | ||
396 | for (i = 0; i <= highest_reg; i += 4) | ||
397 | writel(0x0, engine + i); | ||
398 | |||
390 | /* Init AGP and VQ regs */ | 399 | /* Init AGP and VQ regs */ |
391 | switch (chip_name) { | 400 | switch (chip_name) { |
392 | case UNICHROME_K8M890: | 401 | case UNICHROME_K8M890: |
@@ -474,7 +483,7 @@ int viafb_init_engine(struct fb_info *info) | |||
474 | writel(0x0, engine + VIA_REG_CURSOR_ORG); | 483 | writel(0x0, engine + VIA_REG_CURSOR_ORG); |
475 | writel(0x0, engine + VIA_REG_CURSOR_BG); | 484 | writel(0x0, engine + VIA_REG_CURSOR_BG); |
476 | writel(0x0, engine + VIA_REG_CURSOR_FG); | 485 | writel(0x0, engine + VIA_REG_CURSOR_FG); |
477 | return 0; | 486 | return; |
478 | } | 487 | } |
479 | 488 | ||
480 | void viafb_show_hw_cursor(struct fb_info *info, int Status) | 489 | void viafb_show_hw_cursor(struct fb_info *info, int Status) |
diff --git a/drivers/video/via/accel.h b/drivers/video/via/accel.h index 2c122d292365..79d5e10cc835 100644 --- a/drivers/video/via/accel.h +++ b/drivers/video/via/accel.h | |||
@@ -203,7 +203,8 @@ | |||
203 | #define VIA_BITBLT_MONO 2 | 203 | #define VIA_BITBLT_MONO 2 |
204 | #define VIA_BITBLT_FILL 3 | 204 | #define VIA_BITBLT_FILL 3 |
205 | 205 | ||
206 | int viafb_init_engine(struct fb_info *info); | 206 | int viafb_setup_engine(struct fb_info *info); |
207 | void viafb_reset_engine(struct viafb_par *viapar); | ||
207 | void viafb_show_hw_cursor(struct fb_info *info, int Status); | 208 | void viafb_show_hw_cursor(struct fb_info *info, int Status); |
208 | void viafb_wait_engine_idle(struct fb_info *info); | 209 | void viafb_wait_engine_idle(struct fb_info *info); |
209 | 210 | ||
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c index 4e9e105a6c78..6c651e401dc6 100644 --- a/drivers/video/via/viafbdev.c +++ b/drivers/video/via/viafbdev.c | |||
@@ -1695,6 +1695,8 @@ int viafb_resume(struct pci_dev *pdev) | |||
1695 | if (pci_enable_device(pdev)) | 1695 | if (pci_enable_device(pdev)) |
1696 | goto fail; | 1696 | goto fail; |
1697 | pci_set_master(pdev); | 1697 | pci_set_master(pdev); |
1698 | if (viaparinfo->shared->vdev->engine_mmio) | ||
1699 | viafb_reset_engine(viaparinfo); | ||
1698 | viafb_set_par(viafbinfo); | 1700 | viafb_set_par(viafbinfo); |
1699 | if (viafb_dual_fb) | 1701 | if (viafb_dual_fb) |
1700 | viafb_set_par(viafbinfo1); | 1702 | viafb_set_par(viafbinfo1); |
@@ -1766,7 +1768,7 @@ int __devinit via_fb_pci_probe(struct viafb_dev *vdev) | |||
1766 | viafbinfo->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; | 1768 | viafbinfo->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; |
1767 | 1769 | ||
1768 | viafbinfo->pseudo_palette = pseudo_pal; | 1770 | viafbinfo->pseudo_palette = pseudo_pal; |
1769 | if (viafb_accel && !viafb_init_engine(viafbinfo)) { | 1771 | if (viafb_accel && !viafb_setup_engine(viafbinfo)) { |
1770 | viafbinfo->flags |= FBINFO_HWACCEL_COPYAREA | | 1772 | viafbinfo->flags |= FBINFO_HWACCEL_COPYAREA | |
1771 | FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_IMAGEBLIT; | 1773 | FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_IMAGEBLIT; |
1772 | default_var.accel_flags = FB_ACCELF_TEXT; | 1774 | default_var.accel_flags = FB_ACCELF_TEXT; |