diff options
-rw-r--r-- | drivers/video/via/accel.c | 3 | ||||
-rw-r--r-- | drivers/video/via/chip.h | 3 | ||||
-rw-r--r-- | drivers/video/via/hw.c | 23 | ||||
-rw-r--r-- | drivers/video/via/hw.h | 13 | ||||
-rw-r--r-- | drivers/video/via/lcd.c | 2 | ||||
-rw-r--r-- | drivers/video/via/via-core.c | 10 | ||||
-rw-r--r-- | drivers/video/via/viafbdev.c | 6 |
7 files changed, 56 insertions, 4 deletions
diff --git a/drivers/video/via/accel.c b/drivers/video/via/accel.c index bc4905366726..3c969cdef0af 100644 --- a/drivers/video/via/accel.c +++ b/drivers/video/via/accel.c | |||
@@ -343,6 +343,7 @@ int viafb_setup_engine(struct fb_info *info) | |||
343 | break; | 343 | break; |
344 | case UNICHROME_VX800: | 344 | case UNICHROME_VX800: |
345 | case UNICHROME_VX855: | 345 | case UNICHROME_VX855: |
346 | case UNICHROME_VX900: | ||
346 | viapar->shared->hw_bitblt = hw_bitblt_2; | 347 | viapar->shared->hw_bitblt = hw_bitblt_2; |
347 | break; | 348 | break; |
348 | default: | 349 | default: |
@@ -402,6 +403,7 @@ void viafb_reset_engine(struct viafb_par *viapar) | |||
402 | case UNICHROME_P4M900: | 403 | case UNICHROME_P4M900: |
403 | case UNICHROME_VX800: | 404 | case UNICHROME_VX800: |
404 | case UNICHROME_VX855: | 405 | case UNICHROME_VX855: |
406 | case UNICHROME_VX900: | ||
405 | writel(0x00100000, engine + VIA_REG_CR_TRANSET); | 407 | writel(0x00100000, engine + VIA_REG_CR_TRANSET); |
406 | writel(0x680A0000, engine + VIA_REG_CR_TRANSPACE); | 408 | writel(0x680A0000, engine + VIA_REG_CR_TRANSPACE); |
407 | writel(0x02000000, engine + VIA_REG_CR_TRANSPACE); | 409 | writel(0x02000000, engine + VIA_REG_CR_TRANSPACE); |
@@ -438,6 +440,7 @@ void viafb_reset_engine(struct viafb_par *viapar) | |||
438 | case UNICHROME_P4M900: | 440 | case UNICHROME_P4M900: |
439 | case UNICHROME_VX800: | 441 | case UNICHROME_VX800: |
440 | case UNICHROME_VX855: | 442 | case UNICHROME_VX855: |
443 | case UNICHROME_VX900: | ||
441 | vq_start_low |= 0x20000000; | 444 | vq_start_low |= 0x20000000; |
442 | vq_end_low |= 0x20000000; | 445 | vq_end_low |= 0x20000000; |
443 | vq_high |= 0x20000000; | 446 | vq_high |= 0x20000000; |
diff --git a/drivers/video/via/chip.h b/drivers/video/via/chip.h index ef1f3de2e052..48f1342897bd 100644 --- a/drivers/video/via/chip.h +++ b/drivers/video/via/chip.h | |||
@@ -71,6 +71,9 @@ | |||
71 | #define UNICHROME_VX855 12 | 71 | #define UNICHROME_VX855 12 |
72 | #define UNICHROME_VX855_DID 0x5122 | 72 | #define UNICHROME_VX855_DID 0x5122 |
73 | 73 | ||
74 | #define UNICHROME_VX900 13 | ||
75 | #define UNICHROME_VX900_DID 0x7122 | ||
76 | |||
74 | /**************************************************/ | 77 | /**************************************************/ |
75 | /* Definition TMDS Trasmitter Information */ | 78 | /* Definition TMDS Trasmitter Information */ |
76 | /**************************************************/ | 79 | /**************************************************/ |
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index 7d7010acf148..36d73f940d8b 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c | |||
@@ -1429,6 +1429,15 @@ void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active) | |||
1429 | VX855_IGA1_DISPLAY_QUEUE_EXPIRE_NUM; | 1429 | VX855_IGA1_DISPLAY_QUEUE_EXPIRE_NUM; |
1430 | } | 1430 | } |
1431 | 1431 | ||
1432 | if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_VX900) { | ||
1433 | iga1_fifo_max_depth = VX900_IGA1_FIFO_MAX_DEPTH; | ||
1434 | iga1_fifo_threshold = VX900_IGA1_FIFO_THRESHOLD; | ||
1435 | iga1_fifo_high_threshold = | ||
1436 | VX900_IGA1_FIFO_HIGH_THRESHOLD; | ||
1437 | iga1_display_queue_expire_num = | ||
1438 | VX900_IGA1_DISPLAY_QUEUE_EXPIRE_NUM; | ||
1439 | } | ||
1440 | |||
1432 | /* Set Display FIFO Depath Select */ | 1441 | /* Set Display FIFO Depath Select */ |
1433 | reg_value = IGA1_FIFO_DEPTH_SELECT_FORMULA(iga1_fifo_max_depth); | 1442 | reg_value = IGA1_FIFO_DEPTH_SELECT_FORMULA(iga1_fifo_max_depth); |
1434 | viafb_load_reg_num = | 1443 | viafb_load_reg_num = |
@@ -1569,6 +1578,15 @@ void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active) | |||
1569 | VX855_IGA2_DISPLAY_QUEUE_EXPIRE_NUM; | 1578 | VX855_IGA2_DISPLAY_QUEUE_EXPIRE_NUM; |
1570 | } | 1579 | } |
1571 | 1580 | ||
1581 | if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_VX900) { | ||
1582 | iga2_fifo_max_depth = VX900_IGA2_FIFO_MAX_DEPTH; | ||
1583 | iga2_fifo_threshold = VX900_IGA2_FIFO_THRESHOLD; | ||
1584 | iga2_fifo_high_threshold = | ||
1585 | VX900_IGA2_FIFO_HIGH_THRESHOLD; | ||
1586 | iga2_display_queue_expire_num = | ||
1587 | VX900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM; | ||
1588 | } | ||
1589 | |||
1572 | if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800) { | 1590 | if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800) { |
1573 | /* Set Display FIFO Depath Select */ | 1591 | /* Set Display FIFO Depath Select */ |
1574 | reg_value = | 1592 | reg_value = |
@@ -1689,6 +1707,7 @@ u32 viafb_get_clk_value(int clk) | |||
1689 | break; | 1707 | break; |
1690 | 1708 | ||
1691 | case UNICHROME_VX855: | 1709 | case UNICHROME_VX855: |
1710 | case UNICHROME_VX900: | ||
1692 | value = vx855_encode_pll(pll_value[i].vx855_pll); | 1711 | value = vx855_encode_pll(pll_value[i].vx855_pll); |
1693 | break; | 1712 | break; |
1694 | } | 1713 | } |
@@ -1722,6 +1741,7 @@ void viafb_set_vclock(u32 clk, int set_iga) | |||
1722 | case UNICHROME_P4M900: | 1741 | case UNICHROME_P4M900: |
1723 | case UNICHROME_VX800: | 1742 | case UNICHROME_VX800: |
1724 | case UNICHROME_VX855: | 1743 | case UNICHROME_VX855: |
1744 | case UNICHROME_VX900: | ||
1725 | via_write_reg(VIASR, SR44, (clk & 0x0000FF)); | 1745 | via_write_reg(VIASR, SR44, (clk & 0x0000FF)); |
1726 | via_write_reg(VIASR, SR45, (clk & 0x00FF00) >> 8); | 1746 | via_write_reg(VIASR, SR45, (clk & 0x00FF00) >> 8); |
1727 | via_write_reg(VIASR, SR46, (clk & 0xFF0000) >> 16); | 1747 | via_write_reg(VIASR, SR46, (clk & 0xFF0000) >> 16); |
@@ -1748,6 +1768,7 @@ void viafb_set_vclock(u32 clk, int set_iga) | |||
1748 | case UNICHROME_P4M900: | 1768 | case UNICHROME_P4M900: |
1749 | case UNICHROME_VX800: | 1769 | case UNICHROME_VX800: |
1750 | case UNICHROME_VX855: | 1770 | case UNICHROME_VX855: |
1771 | case UNICHROME_VX900: | ||
1751 | via_write_reg(VIASR, SR4A, (clk & 0x0000FF)); | 1772 | via_write_reg(VIASR, SR4A, (clk & 0x0000FF)); |
1752 | via_write_reg(VIASR, SR4B, (clk & 0x00FF00) >> 8); | 1773 | via_write_reg(VIASR, SR4B, (clk & 0x00FF00) >> 8); |
1753 | via_write_reg(VIASR, SR4C, (clk & 0xFF0000) >> 16); | 1774 | via_write_reg(VIASR, SR4C, (clk & 0xFF0000) >> 16); |
@@ -2179,6 +2200,7 @@ static void __devinit init_gfx_chip_info(int chip_type) | |||
2179 | switch (viaparinfo->chip_info->gfx_chip_name) { | 2200 | switch (viaparinfo->chip_info->gfx_chip_name) { |
2180 | case UNICHROME_VX800: | 2201 | case UNICHROME_VX800: |
2181 | case UNICHROME_VX855: | 2202 | case UNICHROME_VX855: |
2203 | case UNICHROME_VX900: | ||
2182 | viaparinfo->chip_info->twod_engine = VIA_2D_ENG_M1; | 2204 | viaparinfo->chip_info->twod_engine = VIA_2D_ENG_M1; |
2183 | break; | 2205 | break; |
2184 | case UNICHROME_K8M890: | 2206 | case UNICHROME_K8M890: |
@@ -2403,6 +2425,7 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, | |||
2403 | break; | 2425 | break; |
2404 | 2426 | ||
2405 | case UNICHROME_VX855: | 2427 | case UNICHROME_VX855: |
2428 | case UNICHROME_VX900: | ||
2406 | viafb_write_regx(VX855_ModeXregs, NUM_TOTAL_VX855_ModeXregs); | 2429 | viafb_write_regx(VX855_ModeXregs, NUM_TOTAL_VX855_ModeXregs); |
2407 | break; | 2430 | break; |
2408 | } | 2431 | } |
diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h index b76440946771..668d534542ef 100644 --- a/drivers/video/via/hw.h +++ b/drivers/video/via/hw.h | |||
@@ -362,6 +362,17 @@ is reserved, so it may have problem to set 1600x1200 on IGA2. */ | |||
362 | #define VX855_IGA2_FIFO_HIGH_THRESHOLD 160 | 362 | #define VX855_IGA2_FIFO_HIGH_THRESHOLD 160 |
363 | #define VX855_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 320 | 363 | #define VX855_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 320 |
364 | 364 | ||
365 | /* For VT3410 */ | ||
366 | #define VX900_IGA1_FIFO_MAX_DEPTH 400 | ||
367 | #define VX900_IGA1_FIFO_THRESHOLD 320 | ||
368 | #define VX900_IGA1_FIFO_HIGH_THRESHOLD 320 | ||
369 | #define VX900_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 160 | ||
370 | |||
371 | #define VX900_IGA2_FIFO_MAX_DEPTH 192 | ||
372 | #define VX900_IGA2_FIFO_THRESHOLD 160 | ||
373 | #define VX900_IGA2_FIFO_HIGH_THRESHOLD 160 | ||
374 | #define VX900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 320 | ||
375 | |||
365 | #define IGA1_FIFO_DEPTH_SELECT_REG_NUM 1 | 376 | #define IGA1_FIFO_DEPTH_SELECT_REG_NUM 1 |
366 | #define IGA1_FIFO_THRESHOLD_REG_NUM 2 | 377 | #define IGA1_FIFO_THRESHOLD_REG_NUM 2 |
367 | #define IGA1_FIFO_HIGH_THRESHOLD_REG_NUM 2 | 378 | #define IGA1_FIFO_HIGH_THRESHOLD_REG_NUM 2 |
@@ -879,6 +890,8 @@ struct iga2_crtc_timing { | |||
879 | #define VX800_FUNCTION3 0x3353 | 890 | #define VX800_FUNCTION3 0x3353 |
880 | /* VT3409 chipset*/ | 891 | /* VT3409 chipset*/ |
881 | #define VX855_FUNCTION3 0x3409 | 892 | #define VX855_FUNCTION3 0x3409 |
893 | /* VT3410 chipset*/ | ||
894 | #define VX900_FUNCTION3 0x3410 | ||
882 | 895 | ||
883 | #define NUM_TOTAL_PLL_TABLE ARRAY_SIZE(pll_value) | 896 | #define NUM_TOTAL_PLL_TABLE ARRAY_SIZE(pll_value) |
884 | 897 | ||
diff --git a/drivers/video/via/lcd.c b/drivers/video/via/lcd.c index de19e4777daf..3425c3969806 100644 --- a/drivers/video/via/lcd.c +++ b/drivers/video/via/lcd.c | |||
@@ -442,6 +442,7 @@ static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres, | |||
442 | case UNICHROME_CN750: | 442 | case UNICHROME_CN750: |
443 | case UNICHROME_VX800: | 443 | case UNICHROME_VX800: |
444 | case UNICHROME_VX855: | 444 | case UNICHROME_VX855: |
445 | case UNICHROME_VX900: | ||
445 | reg_value = | 446 | reg_value = |
446 | K800_LCD_HOR_SCF_FORMULA(set_hres, panel_hres); | 447 | K800_LCD_HOR_SCF_FORMULA(set_hres, panel_hres); |
447 | /* Horizontal scaling enabled */ | 448 | /* Horizontal scaling enabled */ |
@@ -485,6 +486,7 @@ static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres, | |||
485 | case UNICHROME_CN750: | 486 | case UNICHROME_CN750: |
486 | case UNICHROME_VX800: | 487 | case UNICHROME_VX800: |
487 | case UNICHROME_VX855: | 488 | case UNICHROME_VX855: |
489 | case UNICHROME_VX900: | ||
488 | reg_value = | 490 | reg_value = |
489 | K800_LCD_VER_SCF_FORMULA(set_vres, panel_vres); | 491 | K800_LCD_VER_SCF_FORMULA(set_vres, panel_vres); |
490 | /* Vertical scaling enabled */ | 492 | /* Vertical scaling enabled */ |
diff --git a/drivers/video/via/via-core.c b/drivers/video/via/via-core.c index 9b487a6a8d08..31e30338e893 100644 --- a/drivers/video/via/via-core.c +++ b/drivers/video/via/via-core.c | |||
@@ -333,7 +333,7 @@ EXPORT_SYMBOL_GPL(viafb_dma_copy_out_sg); | |||
333 | static u16 via_function3[] = { | 333 | static u16 via_function3[] = { |
334 | CLE266_FUNCTION3, KM400_FUNCTION3, CN400_FUNCTION3, CN700_FUNCTION3, | 334 | CLE266_FUNCTION3, KM400_FUNCTION3, CN400_FUNCTION3, CN700_FUNCTION3, |
335 | CX700_FUNCTION3, KM800_FUNCTION3, KM890_FUNCTION3, P4M890_FUNCTION3, | 335 | CX700_FUNCTION3, KM800_FUNCTION3, KM890_FUNCTION3, P4M890_FUNCTION3, |
336 | P4M900_FUNCTION3, VX800_FUNCTION3, VX855_FUNCTION3, | 336 | P4M900_FUNCTION3, VX800_FUNCTION3, VX855_FUNCTION3, VX900_FUNCTION3, |
337 | }; | 337 | }; |
338 | 338 | ||
339 | /* Get the BIOS-configured framebuffer size from PCI configuration space | 339 | /* Get the BIOS-configured framebuffer size from PCI configuration space |
@@ -370,6 +370,7 @@ static int viafb_get_fb_size_from_pci(int chip_type) | |||
370 | case P4M900_FUNCTION3: | 370 | case P4M900_FUNCTION3: |
371 | case VX800_FUNCTION3: | 371 | case VX800_FUNCTION3: |
372 | case VX855_FUNCTION3: | 372 | case VX855_FUNCTION3: |
373 | case VX900_FUNCTION3: | ||
373 | /*case CN750_FUNCTION3: */ | 374 | /*case CN750_FUNCTION3: */ |
374 | offset = 0xA0; | 375 | offset = 0xA0; |
375 | break; | 376 | break; |
@@ -474,7 +475,10 @@ static int __devinit via_pci_setup_mmio(struct viafb_dev *vdev) | |||
474 | * Eventually we want to move away from mapping this | 475 | * Eventually we want to move away from mapping this |
475 | * entire region. | 476 | * entire region. |
476 | */ | 477 | */ |
477 | vdev->fbmem_start = pci_resource_start(vdev->pdev, 0); | 478 | if (vdev->chip_type == UNICHROME_VX900) |
479 | vdev->fbmem_start = pci_resource_start(vdev->pdev, 2); | ||
480 | else | ||
481 | vdev->fbmem_start = pci_resource_start(vdev->pdev, 0); | ||
478 | ret = vdev->fbmem_len = viafb_get_fb_size_from_pci(vdev->chip_type); | 482 | ret = vdev->fbmem_len = viafb_get_fb_size_from_pci(vdev->chip_type); |
479 | if (ret < 0) | 483 | if (ret < 0) |
480 | goto out_unmap; | 484 | goto out_unmap; |
@@ -635,6 +639,8 @@ static struct pci_device_id via_pci_table[] __devinitdata = { | |||
635 | .driver_data = UNICHROME_VX800 }, | 639 | .driver_data = UNICHROME_VX800 }, |
636 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX855_DID), | 640 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX855_DID), |
637 | .driver_data = UNICHROME_VX855 }, | 641 | .driver_data = UNICHROME_VX855 }, |
642 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX900_DID), | ||
643 | .driver_data = UNICHROME_VX900 }, | ||
638 | { } | 644 | { } |
639 | }; | 645 | }; |
640 | MODULE_DEVICE_TABLE(pci, via_pci_table); | 646 | MODULE_DEVICE_TABLE(pci, via_pci_table); |
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c index 6c651e401dc6..d298cfccd6fc 100644 --- a/drivers/video/via/viafbdev.c +++ b/drivers/video/via/viafbdev.c | |||
@@ -57,7 +57,7 @@ static int viafb_pan_display(struct fb_var_screeninfo *var, | |||
57 | static struct fb_ops viafb_ops; | 57 | static struct fb_ops viafb_ops; |
58 | 58 | ||
59 | /* supported output devices on each IGP | 59 | /* supported output devices on each IGP |
60 | * only CX700, VX800, VX855 were documented | 60 | * only CX700, VX800, VX855, VX900 were documented |
61 | * VIA_CRT should be everywhere | 61 | * VIA_CRT should be everywhere |
62 | * VIA_6C can be onle pre-CX700 (probably only on CLE266) as 6C is used for PLL | 62 | * VIA_6C can be onle pre-CX700 (probably only on CLE266) as 6C is used for PLL |
63 | * source selection on CX700 and later | 63 | * source selection on CX700 and later |
@@ -80,6 +80,7 @@ static const u32 supported_odev_map[] = { | |||
80 | [UNICHROME_P4M900] = VIA_CRT | VIA_DVP1 | VIA_LVDS1 | VIA_LVDS2, | 80 | [UNICHROME_P4M900] = VIA_CRT | VIA_DVP1 | VIA_LVDS1 | VIA_LVDS2, |
81 | [UNICHROME_VX800] = VIA_CRT | VIA_DVP1 | VIA_LVDS1 | VIA_LVDS2, | 81 | [UNICHROME_VX800] = VIA_CRT | VIA_DVP1 | VIA_LVDS1 | VIA_LVDS2, |
82 | [UNICHROME_VX855] = VIA_CRT | VIA_DVP1 | VIA_LVDS1 | VIA_LVDS2, | 82 | [UNICHROME_VX855] = VIA_CRT | VIA_DVP1 | VIA_LVDS1 | VIA_LVDS2, |
83 | [UNICHROME_VX900] = VIA_CRT | VIA_DVP1 | VIA_LVDS1 | VIA_LVDS2, | ||
83 | }; | 84 | }; |
84 | 85 | ||
85 | static void viafb_fill_var_color_info(struct fb_var_screeninfo *var, u8 depth) | 86 | static void viafb_fill_var_color_info(struct fb_var_screeninfo *var, u8 depth) |
@@ -812,7 +813,8 @@ static int viafb_cursor(struct fb_info *info, struct fb_cursor *cursor) | |||
812 | bg_color = cursor->image.bg_color; | 813 | bg_color = cursor->image.bg_color; |
813 | if (chip_name == UNICHROME_CX700 || | 814 | if (chip_name == UNICHROME_CX700 || |
814 | chip_name == UNICHROME_VX800 || | 815 | chip_name == UNICHROME_VX800 || |
815 | chip_name == UNICHROME_VX855) { | 816 | chip_name == UNICHROME_VX855 || |
817 | chip_name == UNICHROME_VX900) { | ||
816 | fg_color = | 818 | fg_color = |
817 | ((info->cmap.red[fg_color] & 0xFFC0) << 14) | | 819 | ((info->cmap.red[fg_color] & 0xFFC0) << 14) | |
818 | ((info->cmap.green[fg_color] & 0xFFC0) << 4) | | 820 | ((info->cmap.green[fg_color] & 0xFFC0) << 4) | |