aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/via/accel.c3
-rw-r--r--drivers/video/via/chip.h3
-rw-r--r--drivers/video/via/hw.c23
-rw-r--r--drivers/video/via/hw.h13
-rw-r--r--drivers/video/via/lcd.c2
-rw-r--r--drivers/video/via/via-core.c10
-rw-r--r--drivers/video/via/viafbdev.c6
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);
333static u16 via_function3[] = { 333static 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};
640MODULE_DEVICE_TABLE(pci, via_pci_table); 646MODULE_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,
57static struct fb_ops viafb_ops; 57static 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
85static void viafb_fill_var_color_info(struct fb_var_screeninfo *var, u8 depth) 86static 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) |