On Mon, Mar 19, 2012 at 9:50 PM, Dmitry Eremin-Solenikov <dbaryshkov@xxxxxxxxx> 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@xxxxxxxxx> > --- > 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 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel