On 29/01/13(Tue) 13:34, Jonathan Gray wrote:
> The following changes mostly based on what has happened in
> the upstream drm code seems to resolve problems with screen corruption
> on power saving/dpms on ivy bridge with ums here.  Testing on ironlake/
> sandy bridge/ivy bridge (aka Core i*) to make sure this doesn't break
> anything appreciated.
> 
> - remove a workaround which was in itself causing issues
> - switch the order of disabling fdi rx & tx
> - disable DPLL_SEL when disabling the crtc
> - add a few extra delays

I don't have hardware to test this on, but it looks ok to me. However I
think that now would be the right time to commit it, if you think you
received enough test reports, as we are approaching the release.

> 
> Index: i830_display.c
> ===================================================================
> RCS file: /cvs/xenocara/driver/xf86-video-intel/src/i830_display.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 i830_display.c
> --- i830_display.c    15 Jan 2013 06:31:43 -0000      1.16
> +++ i830_display.c    29 Jan 2013 02:24:21 -0000
> @@ -1535,16 +1535,6 @@ static void ivb_manual_fdi_link_train(xf
>       INREG(fdi_rx_reg);
>  
>       usleep(150);
> -
> -     if (HAS_PCH_CPT(intel)) {
> -             temp = INREG(SOUTH_CHICKEN1);
> -             temp |= FDI_PHASE_SYNC_OVR(pipe);
> -             OUTREG(SOUTH_CHICKEN1, temp); /* once to unlock... */
> -             temp |= FDI_PHASE_SYNC_EN(pipe);
> -             OUTREG(SOUTH_CHICKEN1, temp); /* then again to enable */
> -             INREG(SOUTH_CHICKEN1);
> -             usleep(150);
> -     }
>               
>       for (i = 0; i < 4; i++) {
>               temp = INREG(fdi_tx_reg);
> @@ -1862,11 +1852,6 @@ ironlake_crtc_disable(xf86CrtcPtr crtc)
>       OUTREG(pf_win_size, 0);
>       INREG(pf_win_size);
>  
> -     ErrorF("FDI TX disable\n");
> -     temp = INREG(fdi_tx_reg);
> -     OUTREG(fdi_tx_reg, temp & ~FDI_TX_ENABLE);
> -     INREG(fdi_tx_reg);
> -
>       ErrorF("FDI RX disable\n");
>       temp = INREG(fdi_rx_reg);
>       temp &= ~(0x07 << 16);
> @@ -1876,14 +1861,13 @@ ironlake_crtc_disable(xf86CrtcPtr crtc)
>  
>       usleep(100);
>  
> -     ErrorF("FDI TX train 1 preload\n");
> -     /* still set train pattern 1 */
> +     ErrorF("FDI TX disable\n");
>       temp = INREG(fdi_tx_reg);
> -     temp &= ~FDI_LINK_TRAIN_NONE;
> -     temp |= FDI_LINK_TRAIN_PATTERN_1;
> -     OUTREG(fdi_tx_reg, temp);
> +     OUTREG(fdi_tx_reg, temp & ~FDI_TX_ENABLE);
>       INREG(fdi_tx_reg);
>  
> +     usleep(100);
> +
>       ErrorF("FDI RX train 1 preload\n");
>       temp = INREG(fdi_rx_reg);
>       if (HAS_PCH_CPT(intel)) {
> @@ -1898,6 +1882,16 @@ ironlake_crtc_disable(xf86CrtcPtr crtc)
>  
>       usleep(100);
>  
> +     ErrorF("FDI TX train 1 preload\n");
> +     /* still set train pattern 1 */
> +     temp = INREG(fdi_tx_reg);
> +     temp &= ~FDI_LINK_TRAIN_NONE;
> +     temp |= FDI_LINK_TRAIN_PATTERN_1;
> +     OUTREG(fdi_tx_reg, temp);
> +     INREG(fdi_tx_reg);
> +
> +     usleep(100);
> +
>       if (i830PipeHasType(crtc, I830_OUTPUT_LVDS)) {
>           ErrorF("LVDS port force off\n");
>           while ((temp = INREG(PCH_LVDS)) & PORT_ENABLE) {
> @@ -1933,6 +1927,25 @@ ironlake_crtc_disable(xf86CrtcPtr crtc)
>       OUTREG(transconf_reg, temp);
>       INREG(transconf_reg);
>       usleep(100);
> +
> +     if (HAS_PCH_CPT(intel)) {
> +             /* disable DPLL_SEL */
> +             temp = INREG(PCH_DPLL_SEL);
> +             switch (pipe) {
> +             case 0:
> +                     temp &= ~(TRANSA_DPLL_ENABLE | TRANSA_DPLLB_SEL);
> +                     break;
> +             case 1:
> +                     temp &= ~(TRANSB_DPLL_ENABLE | TRANSB_DPLLB_SEL);
> +                     break;
> +             case 2:
> +                     /* C shares PLL A or B */
> +                     temp &= ~(TRANSC_DPLL_ENABLE | TRANSC_DPLLB_SEL);
> +                     break;
> +             }
> +             OUTREG(PCH_DPLL_SEL, temp);
> +             INREG(PCH_DPLL_SEL);
> +     }
>  
>       ErrorF("PCH DPLL disable\n");
>       /* disable PCH DPLL */
> 

Reply via email to