Index: /trunk/ChangeLog =================================================================== --- /trunk/ChangeLog (revision 830) +++ /trunk/ChangeLog (revision 838) @@ -1,2 +1,11 @@ +2010-02-10 Bartosz Kosiorek + + Fix bug with suspend and VT switch on VX800 and 64bit systems + + * src/via_driver.h: + * src/via_video.c: (viaResetVideo), (viaSaveVideo), + (viaRestoreVideo), (viaExitVideo): + * src/via_video.h: + 2010-01-24 Bartosz Kosiorek Index: /trunk/src/via_video.c =================================================================== --- /trunk/src/via_video.c (revision 826) +++ /trunk/src/via_video.c (revision 838) @@ -467,6 +467,6 @@ viaVidEng->video1_ctl = 0; viaVidEng->video3_ctl = 0; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; + viaVidEng->compose = V1_COMMAND_FIRE; + viaVidEng->compose = V3_COMMAND_FIRE; viaVidEng->color_key = 0x821; viaVidEng->snd_color_key = 0x821; @@ -480,6 +480,6 @@ vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; + DBG_DD(ErrorF(" via_video.c : viaSaveVideo : \n")); /* Save video registers */ - /* TODO: Identify which registers should be saved and restored */ memcpy(pVia->VideoRegs, (void*)viaVidEng, sizeof(video_via_regs)); @@ -488,6 +488,6 @@ viaVidEng->video1_ctl = 0; viaVidEng->video3_ctl = 0; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; + viaVidEng->compose = V1_COMMAND_FIRE; + viaVidEng->compose = V3_COMMAND_FIRE; } @@ -497,14 +497,63 @@ VIAPtr pVia = VIAPTR(pScrn); vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; + video_via_regs *localVidEng = pVia->VideoRegs; + + DBG_DD(ErrorF(" via_video.c : viaRestoreVideo : \n")); /* Restore video registers */ - /* TODO: Identify which registers should be saved and restored */ - memcpy((void*)viaVidEng, pVia->VideoRegs, sizeof(video_via_regs)); - + /* flush restored video engines' setting to VidMapBase */ + + viaVidEng->alphawin_hvstart = localVidEng->alphawin_hvstart; + viaVidEng->alphawin_size = localVidEng->alphawin_size; + viaVidEng->alphawin_ctl = localVidEng->alphawin_ctl; + viaVidEng->alphafb_stride = localVidEng->alphafb_stride; + viaVidEng->color_key = localVidEng->color_key; + viaVidEng->alphafb_addr = localVidEng->alphafb_addr; + viaVidEng->chroma_low = localVidEng->chroma_low; + viaVidEng->chroma_up = localVidEng->chroma_up; + + if (pVia->ChipId != PCI_CHIP_VT3314) + { + /*VT3314 only has V3*/ + viaVidEng->video1_ctl = localVidEng->video1_ctl; + viaVidEng->video1_fetch = localVidEng->video1_fetch; + viaVidEng->video1y_addr1 = localVidEng->video1y_addr1; + viaVidEng->video1_stride = localVidEng->video1_stride; + viaVidEng->video1_hvstart = localVidEng->video1_hvstart; + viaVidEng->video1_size = localVidEng->video1_size; + viaVidEng->video1y_addr2 = localVidEng->video1y_addr2; + viaVidEng->video1_zoom = localVidEng->video1_zoom; + viaVidEng->video1_mictl = localVidEng->video1_mictl; + viaVidEng->video1y_addr0 = localVidEng->video1y_addr0; + viaVidEng->video1_fifo = localVidEng->video1_fifo; + viaVidEng->video1y_addr3 = localVidEng->video1y_addr3; + viaVidEng->v1_source_w_h = localVidEng->v1_source_w_h ; + viaVidEng->video1_CSC1 = localVidEng->video1_CSC1; + viaVidEng->video1_CSC2 = localVidEng->video1_CSC2; + } + viaVidEng->snd_color_key = localVidEng->snd_color_key; + viaVidEng->v3alpha_prefifo = localVidEng->v3alpha_prefifo; + viaVidEng->v3alpha_fifo = localVidEng->v3alpha_fifo; + viaVidEng->video3_CSC2 = localVidEng->video3_CSC2; + viaVidEng->video3_CSC2 = localVidEng->video3_CSC2; + viaVidEng->v3_source_width = localVidEng->v3_source_width; + viaVidEng->video3_ctl = localVidEng->video3_ctl; + viaVidEng->video3_addr0 = localVidEng->video3_addr0; + viaVidEng->video3_addr1 = localVidEng->video3_addr1; + viaVidEng->video3_stride = localVidEng->video3_stride; + viaVidEng->video3_hvstart = localVidEng->video3_hvstart; + viaVidEng->video3_size = localVidEng->video3_size; + viaVidEng->v3alpha_fetch = localVidEng->v3alpha_fetch; + viaVidEng->video3_zoom = localVidEng->video3_zoom; + viaVidEng->video3_mictl = localVidEng->video3_mictl; + viaVidEng->video3_CSC1 = localVidEng->video3_CSC1; + viaVidEng->video3_CSC2 = localVidEng->video3_CSC2; + viaVidEng->compose = localVidEng->compose; + viaVidEng->video1_ctl = pVia->dwV1; viaVidEng->video3_ctl = pVia->dwV3; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; - + if (pVia->ChipId != PCI_CHIP_VT3314) + viaVidEng->compose = V1_COMMAND_FIRE; + viaVidEng->compose = V3_COMMAND_FIRE; } @@ -525,6 +574,6 @@ viaVidEng->video1_ctl = 0; viaVidEng->video3_ctl = 0; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; + viaVidEng->compose = V1_COMMAND_FIRE; + viaVidEng->compose = V3_COMMAND_FIRE; /* Index: /trunk/src/via_video.h =================================================================== --- /trunk/src/via_video.h (revision 415) +++ /trunk/src/via_video.h (revision 838) @@ -45,4 +45,8 @@ #define VIDEO_BPP 2 + +#define V1_COMMAND_FIRE 0x80000000 /* V1 commands fire */ +#define V3_COMMAND_FIRE 0x40000000 /* V3 commands fire */ + typedef struct { @@ -90,5 +94,5 @@ CARD32 video3_addr0; /* 2a4 */ CARD32 video3_addr1; /* 2a8 */ - CARD32 video3_stribe; /* 2ac */ + CARD32 video3_stride; /* 2ac */ CARD32 video3_hvstart; /* 2b0 */ CARD32 video3_size; /* 2b4 */ Index: /trunk/src/via_driver.h =================================================================== --- /trunk/src/via_driver.h (revision 830) +++ /trunk/src/via_driver.h (revision 838) @@ -420,8 +420,8 @@ Bool PrintTVRegs; Bool I2CScan; +#endif /* HAVE_DEBUG */ Bool UseLegacyModeSwitch ; video_via_regs* VideoRegs ; -#endif /* HAVE_DEBUG */ } VIARec, *VIAPtr;