staging/xgifb: fix display on XGI Volari Z11m cards
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. Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5d92f71e68
commit
6490311f42
|
@ -61,7 +61,7 @@ XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceExtension,
|
||||||
}
|
}
|
||||||
temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B);
|
temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B);
|
||||||
/* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */
|
/* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */
|
||||||
if ((temp & 0x88) == 0x80)
|
if (((temp & 0x88) == 0x80) || ((temp & 0x88) == 0x08))
|
||||||
data = 0; /* DDR */
|
data = 0; /* DDR */
|
||||||
else
|
else
|
||||||
data = 1; /* DDRII */
|
data = 1; /* DDRII */
|
||||||
|
|
|
@ -152,6 +152,7 @@ void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
|
||||||
pVBInfo->pXGINew_CR97 = &XG20_CR97;
|
pVBInfo->pXGINew_CR97 = &XG20_CR97;
|
||||||
|
|
||||||
if (ChipType == XG27) {
|
if (ChipType == XG27) {
|
||||||
|
unsigned char temp;
|
||||||
pVBInfo->MCLKData
|
pVBInfo->MCLKData
|
||||||
= (struct SiS_MCLKData *) XGI27New_MCLKData;
|
= (struct SiS_MCLKData *) XGI27New_MCLKData;
|
||||||
pVBInfo->CR40 = XGI27_cr41;
|
pVBInfo->CR40 = XGI27_cr41;
|
||||||
|
@ -162,7 +163,13 @@ void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
|
||||||
pVBInfo->pCRDE = XG27_CRDE;
|
pVBInfo->pCRDE = XG27_CRDE;
|
||||||
pVBInfo->pSR40 = &XG27_SR40;
|
pVBInfo->pSR40 = &XG27_SR40;
|
||||||
pVBInfo->pSR41 = &XG27_SR41;
|
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) {
|
if (ChipType >= XG20) {
|
||||||
|
|
|
@ -33,6 +33,13 @@ static struct XGI_ECLKDataStruct XGI340_ECLKData[] = {
|
||||||
{0x5c, 0x23, 0x01, 166}
|
{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] = {
|
static unsigned char XGI340_SR13[4][8] = {
|
||||||
{0x35, 0x45, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR13 */
|
{0x35, 0x45, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR13 */
|
||||||
{0x41, 0x51, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SR14 */
|
{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 */
|
{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}, /* 1 CR8A */
|
||||||
{0xC4, 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 2 CR8B */
|
{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],
|
CR99[2:0],
|
||||||
CR45[3:0]*/
|
CR45[3:0]*/
|
||||||
{0xf0, 0xf5, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00}, /* 4 CR59 */
|
{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_SR40 = 0x04 ;
|
||||||
static unsigned char XG27_SR41 = 0x00 ;
|
static unsigned char XG27_SR41 = 0x00 ;
|
||||||
|
|
||||||
|
static unsigned char Z11m_CR97 = 0x80 ;
|
||||||
|
|
||||||
static struct XGI330_VCLKDataStruct XGI_VCLKData[] = {
|
static struct XGI330_VCLKDataStruct XGI_VCLKData[] = {
|
||||||
/* SR2B,SR2C,SR2D */
|
/* SR2B,SR2C,SR2D */
|
||||||
{0x1B, 0xE1, 25}, /* 00 (25.175MHz) */
|
{0x1B, 0xE1, 25}, /* 00 (25.175MHz) */
|
||||||
|
|
Loading…
Reference in a new issue