[PATCH 1/6] staging/xgifb: fix display on XGI Volari Z11m cards

Dmitry Eremin-Solenikov dbaryshkov at gmail.com
Sun Apr 8 07:47:15 UTC 2012


On Mon, Mar 19, 2012 at 9:50 PM, Dmitry Eremin-Solenikov
<dbaryshkov at gmail.com> wrote:
> Image on Z11m cards was totally garbled due to wrong memory being
> selected. Add a special handling for Z11m cards. Tested on PCIe Z11 and
> Z11m cards.

Any feedback?

>
> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov at gmail.com>
> ---
>  drivers/staging/xgifb/vb_init.c    |    2 +-
>  drivers/staging/xgifb/vb_setmode.c |    7 +++++++
>  drivers/staging/xgifb/vb_table.h   |   11 ++++++++++-
>  3 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/staging/xgifb/vb_init.c b/drivers/staging/xgifb/vb_init.c
> index 94d5c35..3650bbf 100644
> --- a/drivers/staging/xgifb/vb_init.c
> +++ b/drivers/staging/xgifb/vb_init.c
> @@ -61,7 +61,7 @@ XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceExtension,
>                }
>                temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B);
>                /* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */
> -               if ((temp & 0x88) == 0x80)
> +               if (((temp & 0x88) == 0x80) || ((temp & 0x88) == 0x08))
>                        data = 0; /* DDR */
>                else
>                        data = 1; /* DDRII */
> diff --git a/drivers/staging/xgifb/vb_setmode.c b/drivers/staging/xgifb/vb_setmode.c
> index 2919924..60d4adf 100644
> --- a/drivers/staging/xgifb/vb_setmode.c
> +++ b/drivers/staging/xgifb/vb_setmode.c
> @@ -152,6 +152,7 @@ void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
>                pVBInfo->pXGINew_CR97 = &XG20_CR97;
>
>        if (ChipType == XG27) {
> +               unsigned char temp;
>                pVBInfo->MCLKData
>                        = (struct SiS_MCLKData *) XGI27New_MCLKData;
>                pVBInfo->CR40 = XGI27_cr41;
> @@ -162,7 +163,13 @@ void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
>                pVBInfo->pCRDE = XG27_CRDE;
>                pVBInfo->pSR40 = &XG27_SR40;
>                pVBInfo->pSR41 = &XG27_SR41;
> +               pVBInfo->SR15 = XG27_SR13;
>
> +               /*Z11m DDR*/
> +               temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B);
> +               /* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */
> +               if (((temp & 0x88) == 0x80) || ((temp & 0x88) == 0x08))
> +                       pVBInfo->pXGINew_CR97 = &Z11m_CR97;
>        }
>
>        if (ChipType >= XG20) {
> diff --git a/drivers/staging/xgifb/vb_table.h b/drivers/staging/xgifb/vb_table.h
> index dddf261..e8d6f67 100644
> --- a/drivers/staging/xgifb/vb_table.h
> +++ b/drivers/staging/xgifb/vb_table.h
> @@ -33,6 +33,13 @@ static struct XGI_ECLKDataStruct XGI340_ECLKData[] = {
>        {0x5c, 0x23, 0x01, 166}
>  };
>
> +static unsigned char XG27_SR13[4][8] = {
> +       {0x35, 0x45, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR13 */
> +       {0x41, 0x51, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR14 */
> +       {0x32, 0x32, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR18 */
> +       {0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}  /* SR1B */
> +};
> +
>  static unsigned char XGI340_SR13[4][8] = {
>        {0x35, 0x45, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR13 */
>        {0x41, 0x51, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR14 */
> @@ -71,7 +78,7 @@ static unsigned char XGI27_cr41[24][8] = {
>        {0x20, 0x40, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 0 CR41 */
>        {0xC4, 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 1 CR8A */
>        {0xC4, 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 2 CR8B */
> -       {0xB5, 0x13, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 3 CR40[7],
> +       {0xB3, 0x13, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 3 CR40[7],
>                                                               CR99[2:0],
>                                                               CR45[3:0]*/
>        {0xf0, 0xf5, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 4 CR59 */
> @@ -2803,6 +2810,8 @@ static unsigned char XG27_CRDE[2];
>  static unsigned char XG27_SR40 = 0x04 ;
>  static unsigned char XG27_SR41 = 0x00 ;
>
> +static unsigned char Z11m_CR97 = 0x80 ;
> +
>  static struct XGI330_VCLKDataStruct XGI_VCLKData[] = {
>        /* SR2B,SR2C,SR2D */
>        {0x1B, 0xE1,  25}, /* 00 (25.175MHz) */
> --
> 1.7.9.1
>



-- 
With best wishes
Dmitry



More information about the devel mailing list