[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