diff options
author | Kenji Toyama <kenji.toyama@gmail.com> | 2011-04-23 00:11:16 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-04-25 20:29:27 -0400 |
commit | bf32fcb9fe0aec95c2fac78edee3e39d7e98a1b1 (patch) | |
tree | 5dfcdb3b854e2f36164b17bcc17a14bf17714006 /drivers/staging/xgifb/vb_init.c | |
parent | 6622995b3212e3c5b39b2ef0dd4d2b02ed183aa5 (diff) |
Staging: xgifb: Fixed lots of coding style issues.
There were hundreds of warnings, but now there's only four. These are
related to the 'volatile' keyword and printk(), which I think should be
left to the maintainers to modify if deemed necessary.
Signed-off-by: Daniel Kenji Toyama <kenji.toyama@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/xgifb/vb_init.c')
-rw-r--r-- | drivers/staging/xgifb/vb_init.c | 527 |
1 files changed, 366 insertions, 161 deletions
diff --git a/drivers/staging/xgifb/vb_init.c b/drivers/staging/xgifb/vb_init.c index 61d137098aa..33c6876d2a8 100644 --- a/drivers/staging/xgifb/vb_init.c +++ b/drivers/staging/xgifb/vb_init.c | |||
@@ -13,7 +13,7 @@ | |||
13 | #include "vb_ext.h" | 13 | #include "vb_ext.h" |
14 | 14 | ||
15 | 15 | ||
16 | #include <asm/io.h> | 16 | #include <linux/io.h> |
17 | 17 | ||
18 | static unsigned char XGINew_ChannelAB, XGINew_DataBusWidth; | 18 | static unsigned char XGINew_ChannelAB, XGINew_DataBusWidth; |
19 | 19 | ||
@@ -39,8 +39,9 @@ static unsigned short XGINew_DDRDRAM_TYPE20[12][5] = { | |||
39 | 39 | ||
40 | static int XGINew_RAMType; | 40 | static int XGINew_RAMType; |
41 | 41 | ||
42 | static unsigned char XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceExtension, | 42 | static unsigned char |
43 | struct vb_device_info *pVBInfo) | 43 | XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceExtension, |
44 | struct vb_device_info *pVBInfo) | ||
44 | { | 45 | { |
45 | unsigned char data, temp; | 46 | unsigned char data, temp; |
46 | 47 | ||
@@ -50,10 +51,9 @@ static unsigned char XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceE | |||
50 | return data; | 51 | return data; |
51 | } else { | 52 | } else { |
52 | data = xgifb_reg_get(pVBInfo->P3c4, 0x39) & 0x02; | 53 | data = xgifb_reg_get(pVBInfo->P3c4, 0x39) & 0x02; |
53 | |||
54 | if (data == 0) | 54 | if (data == 0) |
55 | data = (xgifb_reg_get(pVBInfo->P3c4, 0x3A) & 0x02) >> 1; | 55 | data = (xgifb_reg_get(pVBInfo->P3c4, 0x3A) & |
56 | 56 | 0x02) >> 1; | |
57 | return data; | 57 | return data; |
58 | } | 58 | } |
59 | } else if (HwDeviceExtension->jChipType == XG27) { | 59 | } else if (HwDeviceExtension->jChipType == XG27) { |
@@ -62,19 +62,22 @@ static unsigned char XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceE | |||
62 | return data; | 62 | return data; |
63 | } | 63 | } |
64 | temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B); | 64 | temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B); |
65 | 65 | /* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */ | |
66 | if ((temp & 0x88) == 0x80) /* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */ | 66 | if ((temp & 0x88) == 0x80) |
67 | data = 0; /* DDR */ | 67 | data = 0; /* DDR */ |
68 | else | 68 | else |
69 | data = 1; /* DDRII */ | 69 | data = 1; /* DDRII */ |
70 | return data; | 70 | return data; |
71 | } else if (HwDeviceExtension->jChipType == XG21) { | 71 | } else if (HwDeviceExtension->jChipType == XG21) { |
72 | xgifb_reg_and(pVBInfo->P3d4, 0xB4, ~0x02); /* Independent GPIO control */ | 72 | /* Independent GPIO control */ |
73 | xgifb_reg_and(pVBInfo->P3d4, 0xB4, ~0x02); | ||
73 | udelay(800); | 74 | udelay(800); |
74 | xgifb_reg_or(pVBInfo->P3d4, 0x4A, 0x80); /* Enable GPIOH read */ | 75 | xgifb_reg_or(pVBInfo->P3d4, 0x4A, 0x80); /* Enable GPIOH read */ |
75 | temp = xgifb_reg_get(pVBInfo->P3d4, 0x48); /* GPIOF 0:DVI 1:DVO */ | 76 | /* GPIOF 0:DVI 1:DVO */ |
77 | temp = xgifb_reg_get(pVBInfo->P3d4, 0x48); | ||
76 | /* HOTPLUG_SUPPORT */ | 78 | /* HOTPLUG_SUPPORT */ |
77 | /* for current XG20 & XG21, GPIOH is floating, driver will fix DDR temporarily */ | 79 | /* for current XG20 & XG21, GPIOH is floating, driver will |
80 | * fix DDR temporarily */ | ||
78 | if (temp & 0x01) /* DVI read GPIOH */ | 81 | if (temp & 0x01) /* DVI read GPIOH */ |
79 | data = 1; /* DDRII */ | 82 | data = 1; /* DDRII */ |
80 | else | 83 | else |
@@ -92,7 +95,8 @@ static unsigned char XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceE | |||
92 | } | 95 | } |
93 | } | 96 | } |
94 | 97 | ||
95 | static void XGINew_DDR1x_MRS_340(unsigned long P3c4, struct vb_device_info *pVBInfo) | 98 | static void XGINew_DDR1x_MRS_340(unsigned long P3c4, |
99 | struct vb_device_info *pVBInfo) | ||
96 | { | 100 | { |
97 | xgifb_reg_set(P3c4, 0x18, 0x01); | 101 | xgifb_reg_set(P3c4, 0x18, 0x01); |
98 | xgifb_reg_set(P3c4, 0x19, 0x20); | 102 | xgifb_reg_set(P3c4, 0x19, 0x20); |
@@ -126,24 +130,42 @@ static void XGINew_SetMemoryClock(struct xgi_hw_device_info *HwDeviceExtension, | |||
126 | struct vb_device_info *pVBInfo) | 130 | struct vb_device_info *pVBInfo) |
127 | { | 131 | { |
128 | 132 | ||
129 | xgifb_reg_set(pVBInfo->P3c4, 0x28, pVBInfo->MCLKData[XGINew_RAMType].SR28); | 133 | xgifb_reg_set(pVBInfo->P3c4, |
130 | xgifb_reg_set(pVBInfo->P3c4, 0x29, pVBInfo->MCLKData[XGINew_RAMType].SR29); | 134 | 0x28, |
131 | xgifb_reg_set(pVBInfo->P3c4, 0x2A, pVBInfo->MCLKData[XGINew_RAMType].SR2A); | 135 | pVBInfo->MCLKData[XGINew_RAMType].SR28); |
132 | 136 | xgifb_reg_set(pVBInfo->P3c4, | |
133 | xgifb_reg_set(pVBInfo->P3c4, 0x2E, pVBInfo->ECLKData[XGINew_RAMType].SR2E); | 137 | 0x29, |
134 | xgifb_reg_set(pVBInfo->P3c4, 0x2F, pVBInfo->ECLKData[XGINew_RAMType].SR2F); | 138 | pVBInfo->MCLKData[XGINew_RAMType].SR29); |
135 | xgifb_reg_set(pVBInfo->P3c4, 0x30, pVBInfo->ECLKData[XGINew_RAMType].SR30); | 139 | xgifb_reg_set(pVBInfo->P3c4, |
136 | 140 | 0x2A, | |
137 | /* [Vicent] 2004/07/07, When XG42 ECLK = MCLK = 207MHz, Set SR32 D[1:0] = 10b */ | 141 | pVBInfo->MCLKData[XGINew_RAMType].SR2A); |
138 | /* [Hsuan] 2004/08/20, Modify SR32 value, when MCLK=207MHZ, ELCK=250MHz, Set SR32 D[1:0] = 10b */ | 142 | |
143 | xgifb_reg_set(pVBInfo->P3c4, | ||
144 | 0x2E, | ||
145 | pVBInfo->ECLKData[XGINew_RAMType].SR2E); | ||
146 | xgifb_reg_set(pVBInfo->P3c4, | ||
147 | 0x2F, | ||
148 | pVBInfo->ECLKData[XGINew_RAMType].SR2F); | ||
149 | xgifb_reg_set(pVBInfo->P3c4, | ||
150 | 0x30, | ||
151 | pVBInfo->ECLKData[XGINew_RAMType].SR30); | ||
152 | |||
153 | /* [Vicent] 2004/07/07, | ||
154 | * When XG42 ECLK = MCLK = 207MHz, Set SR32 D[1:0] = 10b */ | ||
155 | /* [Hsuan] 2004/08/20, | ||
156 | * Modify SR32 value, when MCLK=207MHZ, ELCK=250MHz, | ||
157 | * Set SR32 D[1:0] = 10b */ | ||
139 | if (HwDeviceExtension->jChipType == XG42) { | 158 | if (HwDeviceExtension->jChipType == XG42) { |
140 | if ((pVBInfo->MCLKData[XGINew_RAMType].SR28 == 0x1C) | 159 | if ((pVBInfo->MCLKData[XGINew_RAMType].SR28 == 0x1C) && |
141 | && (pVBInfo->MCLKData[XGINew_RAMType].SR29 == 0x01) | 160 | (pVBInfo->MCLKData[XGINew_RAMType].SR29 == 0x01) && |
142 | && (((pVBInfo->ECLKData[XGINew_RAMType].SR2E == 0x1C) | 161 | (((pVBInfo->ECLKData[XGINew_RAMType].SR2E == 0x1C) && |
143 | && (pVBInfo->ECLKData[XGINew_RAMType].SR2F == 0x01)) | 162 | (pVBInfo->ECLKData[XGINew_RAMType].SR2F == 0x01)) || |
144 | || ((pVBInfo->ECLKData[XGINew_RAMType].SR2E == 0x22) | 163 | ((pVBInfo->ECLKData[XGINew_RAMType].SR2E == 0x22) && |
145 | && (pVBInfo->ECLKData[XGINew_RAMType].SR2F == 0x01)))) | 164 | (pVBInfo->ECLKData[XGINew_RAMType].SR2F == 0x01)))) |
146 | xgifb_reg_set(pVBInfo->P3c4, 0x32, ((unsigned char) xgifb_reg_get(pVBInfo->P3c4, 0x32) & 0xFC) | 0x02); | 165 | xgifb_reg_set(pVBInfo->P3c4, |
166 | 0x32, | ||
167 | ((unsigned char) xgifb_reg_get( | ||
168 | pVBInfo->P3c4, 0x32) & 0xFC) | 0x02); | ||
147 | } | 169 | } |
148 | } | 170 | } |
149 | 171 | ||
@@ -152,7 +174,8 @@ static void XGINew_DDRII_Bootup_XG27( | |||
152 | unsigned long P3c4, struct vb_device_info *pVBInfo) | 174 | unsigned long P3c4, struct vb_device_info *pVBInfo) |
153 | { | 175 | { |
154 | unsigned long P3d4 = P3c4 + 0x10; | 176 | unsigned long P3d4 = P3c4 + 0x10; |
155 | XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); | 177 | XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, |
178 | pVBInfo); | ||
156 | XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); | 179 | XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); |
157 | 180 | ||
158 | /* Set Double Frequency */ | 181 | /* Set Double Frequency */ |
@@ -216,7 +239,8 @@ static void XGINew_DDRII_Bootup_XG27( | |||
216 | xgifb_reg_set(P3c4, 0x16, 0xA0); /* Set SR16 */ | 239 | xgifb_reg_set(P3c4, 0x16, 0xA0); /* Set SR16 */ |
217 | udelay(15); | 240 | udelay(15); |
218 | 241 | ||
219 | xgifb_reg_set(P3c4, 0x1B, 0x04); /* Set SR1B refresh control 000:close; 010:open */ | 242 | /* Set SR1B refresh control 000:close; 010:open */ |
243 | xgifb_reg_set(P3c4, 0x1B, 0x04); | ||
220 | udelay(200); | 244 | udelay(200); |
221 | 245 | ||
222 | } | 246 | } |
@@ -226,7 +250,8 @@ static void XGINew_DDR2_MRS_XG20(struct xgi_hw_device_info *HwDeviceExtension, | |||
226 | { | 250 | { |
227 | unsigned long P3d4 = P3c4 + 0x10; | 251 | unsigned long P3d4 = P3c4 + 0x10; |
228 | 252 | ||
229 | XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); | 253 | XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, |
254 | pVBInfo); | ||
230 | XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); | 255 | XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); |
231 | 256 | ||
232 | xgifb_reg_set(P3d4, 0x97, 0x11); /* CR97 */ | 257 | xgifb_reg_set(P3d4, 0x97, 0x11); /* CR97 */ |
@@ -268,9 +293,9 @@ static void XGINew_DDR2_MRS_XG20(struct xgi_hw_device_info *HwDeviceExtension, | |||
268 | udelay(200); | 293 | udelay(200); |
269 | } | 294 | } |
270 | 295 | ||
271 | static void XGINew_DDR1x_MRS_XG20(unsigned long P3c4, struct vb_device_info *pVBInfo) | 296 | static void XGINew_DDR1x_MRS_XG20(unsigned long P3c4, |
297 | struct vb_device_info *pVBInfo) | ||
272 | { | 298 | { |
273 | |||
274 | xgifb_reg_set(P3c4, 0x18, 0x01); | 299 | xgifb_reg_set(P3c4, 0x18, 0x01); |
275 | xgifb_reg_set(P3c4, 0x19, 0x40); | 300 | xgifb_reg_set(P3c4, 0x19, 0x40); |
276 | xgifb_reg_set(P3c4, 0x16, 0x00); | 301 | xgifb_reg_set(P3c4, 0x16, 0x00); |
@@ -306,9 +331,15 @@ static void XGINew_DDR1x_DefaultRegister( | |||
306 | 331 | ||
307 | if (HwDeviceExtension->jChipType >= XG20) { | 332 | if (HwDeviceExtension->jChipType >= XG20) { |
308 | XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); | 333 | XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); |
309 | xgifb_reg_set(P3d4, 0x82, pVBInfo->CR40[11][XGINew_RAMType]); /* CR82 */ | 334 | xgifb_reg_set(P3d4, |
310 | xgifb_reg_set(P3d4, 0x85, pVBInfo->CR40[12][XGINew_RAMType]); /* CR85 */ | 335 | 0x82, |
311 | xgifb_reg_set(P3d4, 0x86, pVBInfo->CR40[13][XGINew_RAMType]); /* CR86 */ | 336 | pVBInfo->CR40[11][XGINew_RAMType]); /* CR82 */ |
337 | xgifb_reg_set(P3d4, | ||
338 | 0x85, | ||
339 | pVBInfo->CR40[12][XGINew_RAMType]); /* CR85 */ | ||
340 | xgifb_reg_set(P3d4, | ||
341 | 0x86, | ||
342 | pVBInfo->CR40[13][XGINew_RAMType]); /* CR86 */ | ||
312 | 343 | ||
313 | xgifb_reg_set(P3d4, 0x98, 0x01); | 344 | xgifb_reg_set(P3d4, 0x98, 0x01); |
314 | xgifb_reg_set(P3d4, 0x9A, 0x02); | 345 | xgifb_reg_set(P3d4, 0x9A, 0x02); |
@@ -320,24 +351,46 @@ static void XGINew_DDR1x_DefaultRegister( | |||
320 | switch (HwDeviceExtension->jChipType) { | 351 | switch (HwDeviceExtension->jChipType) { |
321 | case XG41: | 352 | case XG41: |
322 | case XG42: | 353 | case XG42: |
323 | xgifb_reg_set(P3d4, 0x82, pVBInfo->CR40[11][XGINew_RAMType]); /* CR82 */ | 354 | /* CR82 */ |
324 | xgifb_reg_set(P3d4, 0x85, pVBInfo->CR40[12][XGINew_RAMType]); /* CR85 */ | 355 | xgifb_reg_set(P3d4, |
325 | xgifb_reg_set(P3d4, 0x86, pVBInfo->CR40[13][XGINew_RAMType]); /* CR86 */ | 356 | 0x82, |
357 | pVBInfo->CR40[11][XGINew_RAMType]); | ||
358 | /* CR85 */ | ||
359 | xgifb_reg_set(P3d4, | ||
360 | 0x85, | ||
361 | pVBInfo->CR40[12][XGINew_RAMType]); | ||
362 | /* CR86 */ | ||
363 | xgifb_reg_set(P3d4, | ||
364 | 0x86, | ||
365 | pVBInfo->CR40[13][XGINew_RAMType]); | ||
326 | break; | 366 | break; |
327 | default: | 367 | default: |
328 | xgifb_reg_set(P3d4, 0x82, 0x88); | 368 | xgifb_reg_set(P3d4, 0x82, 0x88); |
329 | xgifb_reg_set(P3d4, 0x86, 0x00); | 369 | xgifb_reg_set(P3d4, 0x86, 0x00); |
330 | xgifb_reg_get(P3d4, 0x86); /* Insert read command for delay */ | 370 | /* Insert read command for delay */ |
371 | xgifb_reg_get(P3d4, 0x86); | ||
331 | xgifb_reg_set(P3d4, 0x86, 0x88); | 372 | xgifb_reg_set(P3d4, 0x86, 0x88); |
332 | xgifb_reg_get(P3d4, 0x86); | 373 | xgifb_reg_get(P3d4, 0x86); |
333 | xgifb_reg_set(P3d4, 0x86, pVBInfo->CR40[13][XGINew_RAMType]); | 374 | xgifb_reg_set(P3d4, |
375 | 0x86, | ||
376 | pVBInfo->CR40[13][XGINew_RAMType]); | ||
334 | xgifb_reg_set(P3d4, 0x82, 0x77); | 377 | xgifb_reg_set(P3d4, 0x82, 0x77); |
335 | xgifb_reg_set(P3d4, 0x85, 0x00); | 378 | xgifb_reg_set(P3d4, 0x85, 0x00); |
336 | xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */ | 379 | |
380 | /* Insert read command for delay */ | ||
381 | xgifb_reg_get(P3d4, 0x85); | ||
337 | xgifb_reg_set(P3d4, 0x85, 0x88); | 382 | xgifb_reg_set(P3d4, 0x85, 0x88); |
338 | xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */ | 383 | |
339 | xgifb_reg_set(P3d4, 0x85, pVBInfo->CR40[12][XGINew_RAMType]); /* CR85 */ | 384 | /* Insert read command for delay */ |
340 | xgifb_reg_set(P3d4, 0x82, pVBInfo->CR40[11][XGINew_RAMType]); /* CR82 */ | 385 | xgifb_reg_get(P3d4, 0x85); |
386 | /* CR85 */ | ||
387 | xgifb_reg_set(P3d4, | ||
388 | 0x85, | ||
389 | pVBInfo->CR40[12][XGINew_RAMType]); | ||
390 | /* CR82 */ | ||
391 | xgifb_reg_set(P3d4, | ||
392 | 0x82, | ||
393 | pVBInfo->CR40[11][XGINew_RAMType]); | ||
341 | break; | 394 | break; |
342 | } | 395 | } |
343 | 396 | ||
@@ -354,13 +407,15 @@ static void XGINew_DDR2_DefaultRegister( | |||
354 | { | 407 | { |
355 | unsigned long P3d4 = Port, P3c4 = Port - 0x10; | 408 | unsigned long P3d4 = Port, P3c4 = Port - 0x10; |
356 | 409 | ||
357 | /* keep following setting sequence, each setting in the same reg insert idle */ | 410 | /* keep following setting sequence, each setting in |
411 | * the same reg insert idle */ | ||
358 | xgifb_reg_set(P3d4, 0x82, 0x77); | 412 | xgifb_reg_set(P3d4, 0x82, 0x77); |
359 | xgifb_reg_set(P3d4, 0x86, 0x00); | 413 | xgifb_reg_set(P3d4, 0x86, 0x00); |
360 | xgifb_reg_get(P3d4, 0x86); /* Insert read command for delay */ | 414 | xgifb_reg_get(P3d4, 0x86); /* Insert read command for delay */ |
361 | xgifb_reg_set(P3d4, 0x86, 0x88); | 415 | xgifb_reg_set(P3d4, 0x86, 0x88); |
362 | xgifb_reg_get(P3d4, 0x86); /* Insert read command for delay */ | 416 | xgifb_reg_get(P3d4, 0x86); /* Insert read command for delay */ |
363 | xgifb_reg_set(P3d4, 0x86, pVBInfo->CR40[13][XGINew_RAMType]); /* CR86 */ | 417 | /* CR86 */ |
418 | xgifb_reg_set(P3d4, 0x86, pVBInfo->CR40[13][XGINew_RAMType]); | ||
364 | xgifb_reg_set(P3d4, 0x82, 0x77); | 419 | xgifb_reg_set(P3d4, 0x82, 0x77); |
365 | xgifb_reg_set(P3d4, 0x85, 0x00); | 420 | xgifb_reg_set(P3d4, 0x85, 0x00); |
366 | xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */ | 421 | xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */ |
@@ -368,7 +423,8 @@ static void XGINew_DDR2_DefaultRegister( | |||
368 | xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */ | 423 | xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */ |
369 | xgifb_reg_set(P3d4, 0x85, pVBInfo->CR40[12][XGINew_RAMType]); /* CR85 */ | 424 | xgifb_reg_set(P3d4, 0x85, pVBInfo->CR40[12][XGINew_RAMType]); /* CR85 */ |
370 | if (HwDeviceExtension->jChipType == XG27) | 425 | if (HwDeviceExtension->jChipType == XG27) |
371 | xgifb_reg_set(P3d4, 0x82, pVBInfo->CR40[11][XGINew_RAMType]); /* CR82 */ | 426 | /* CR82 */ |
427 | xgifb_reg_set(P3d4, 0x82, pVBInfo->CR40[11][XGINew_RAMType]); | ||
372 | else | 428 | else |
373 | xgifb_reg_set(P3d4, 0x82, 0xA8); /* CR82 */ | 429 | xgifb_reg_set(P3d4, 0x82, 0xA8); /* CR82 */ |
374 | 430 | ||
@@ -395,12 +451,14 @@ static void XGINew_SetDRAMDefaultRegister340( | |||
395 | 451 | ||
396 | temp2 = 0; | 452 | temp2 = 0; |
397 | for (i = 0; i < 4; i++) { | 453 | for (i = 0; i < 4; i++) { |
398 | temp = pVBInfo->CR6B[XGINew_RAMType][i]; /* CR6B DQS fine tune delay */ | 454 | /* CR6B DQS fine tune delay */ |
455 | temp = pVBInfo->CR6B[XGINew_RAMType][i]; | ||
399 | for (j = 0; j < 4; j++) { | 456 | for (j = 0; j < 4; j++) { |
400 | temp1 = ((temp >> (2 * j)) & 0x03) << 2; | 457 | temp1 = ((temp >> (2 * j)) & 0x03) << 2; |
401 | temp2 |= temp1; | 458 | temp2 |= temp1; |
402 | xgifb_reg_set(P3d4, 0x6B, temp2); | 459 | xgifb_reg_set(P3d4, 0x6B, temp2); |
403 | xgifb_reg_get(P3d4, 0x6B); /* Insert read command for delay */ | 460 | /* Insert read command for delay */ |
461 | xgifb_reg_get(P3d4, 0x6B); | ||
404 | temp2 &= 0xF0; | 462 | temp2 &= 0xF0; |
405 | temp2 += 0x10; | 463 | temp2 += 0x10; |
406 | } | 464 | } |
@@ -408,12 +466,14 @@ static void XGINew_SetDRAMDefaultRegister340( | |||
408 | 466 | ||
409 | temp2 = 0; | 467 | temp2 = 0; |
410 | for (i = 0; i < 4; i++) { | 468 | for (i = 0; i < 4; i++) { |
411 | temp = pVBInfo->CR6E[XGINew_RAMType][i]; /* CR6E DQM fine tune delay */ | 469 | /* CR6E DQM fine tune delay */ |
470 | temp = pVBInfo->CR6E[XGINew_RAMType][i]; | ||
412 | for (j = 0; j < 4; j++) { | 471 | for (j = 0; j < 4; j++) { |
413 | temp1 = ((temp >> (2 * j)) & 0x03) << 2; | 472 | temp1 = ((temp >> (2 * j)) & 0x03) << 2; |
414 | temp2 |= temp1; | 473 | temp2 |= temp1; |
415 | xgifb_reg_set(P3d4, 0x6E, temp2); | 474 | xgifb_reg_set(P3d4, 0x6E, temp2); |
416 | xgifb_reg_get(P3d4, 0x6E); /* Insert read command for delay */ | 475 | /* Insert read command for delay */ |
476 | xgifb_reg_get(P3d4, 0x6E); | ||
417 | temp2 &= 0xF0; | 477 | temp2 &= 0xF0; |
418 | temp2 += 0x10; | 478 | temp2 += 0x10; |
419 | } | 479 | } |
@@ -421,15 +481,18 @@ static void XGINew_SetDRAMDefaultRegister340( | |||
421 | 481 | ||
422 | temp3 = 0; | 482 | temp3 = 0; |
423 | for (k = 0; k < 4; k++) { | 483 | for (k = 0; k < 4; k++) { |
424 | xgifb_reg_and_or(P3d4, 0x6E, 0xFC, temp3); /* CR6E_D[1:0] select channel */ | 484 | /* CR6E_D[1:0] select channel */ |
485 | xgifb_reg_and_or(P3d4, 0x6E, 0xFC, temp3); | ||
425 | temp2 = 0; | 486 | temp2 = 0; |
426 | for (i = 0; i < 8; i++) { | 487 | for (i = 0; i < 8; i++) { |
427 | temp = pVBInfo->CR6F[XGINew_RAMType][8 * k + i]; /* CR6F DQ fine tune delay */ | 488 | /* CR6F DQ fine tune delay */ |
489 | temp = pVBInfo->CR6F[XGINew_RAMType][8 * k + i]; | ||
428 | for (j = 0; j < 4; j++) { | 490 | for (j = 0; j < 4; j++) { |
429 | temp1 = (temp >> (2 * j)) & 0x03; | 491 | temp1 = (temp >> (2 * j)) & 0x03; |
430 | temp2 |= temp1; | 492 | temp2 |= temp1; |
431 | xgifb_reg_set(P3d4, 0x6F, temp2); | 493 | xgifb_reg_set(P3d4, 0x6F, temp2); |
432 | xgifb_reg_get(P3d4, 0x6F); /* Insert read command for delay */ | 494 | /* Insert read command for delay */ |
495 | xgifb_reg_get(P3d4, 0x6F); | ||
433 | temp2 &= 0xF8; | 496 | temp2 &= 0xF8; |
434 | temp2 += 0x08; | 497 | temp2 += 0x08; |
435 | } | 498 | } |
@@ -441,7 +504,8 @@ static void XGINew_SetDRAMDefaultRegister340( | |||
441 | xgifb_reg_set(P3d4, 0x81, pVBInfo->CR40[10][XGINew_RAMType]); /* CR81 */ | 504 | xgifb_reg_set(P3d4, 0x81, pVBInfo->CR40[10][XGINew_RAMType]); /* CR81 */ |
442 | 505 | ||
443 | temp2 = 0x80; | 506 | temp2 = 0x80; |
444 | temp = pVBInfo->CR89[XGINew_RAMType][0]; /* CR89 terminator type select */ | 507 | /* CR89 terminator type select */ |
508 | temp = pVBInfo->CR89[XGINew_RAMType][0]; | ||
445 | for (j = 0; j < 4; j++) { | 509 | for (j = 0; j < 4; j++) { |
446 | temp1 = (temp >> (2 * j)) & 0x03; | 510 | temp1 = (temp >> (2 * j)) & 0x03; |
447 | temp2 |= temp1; | 511 | temp2 |= temp1; |
@@ -468,19 +532,20 @@ static void XGINew_SetDRAMDefaultRegister340( | |||
468 | if (HwDeviceExtension->jChipType == XG27) | 532 | if (HwDeviceExtension->jChipType == XG27) |
469 | xgifb_reg_set(P3d4, 0x8F, *pVBInfo->pCR8F); /* CR8F */ | 533 | xgifb_reg_set(P3d4, 0x8F, *pVBInfo->pCR8F); /* CR8F */ |
470 | 534 | ||
471 | for (j = 0; j <= 6; j++) | 535 | for (j = 0; j <= 6; j++) /* CR90 - CR96 */ |
472 | xgifb_reg_set(P3d4, (0x90 + j), | 536 | xgifb_reg_set(P3d4, (0x90 + j), |
473 | pVBInfo->CR40[14 + j][XGINew_RAMType]); /* CR90 - CR96 */ | 537 | pVBInfo->CR40[14 + j][XGINew_RAMType]); |
474 | 538 | ||
475 | for (j = 0; j <= 2; j++) | 539 | for (j = 0; j <= 2; j++) /* CRC3 - CRC5 */ |
476 | xgifb_reg_set(P3d4, (0xC3 + j), | 540 | xgifb_reg_set(P3d4, (0xC3 + j), |
477 | pVBInfo->CR40[21 + j][XGINew_RAMType]); /* CRC3 - CRC5 */ | 541 | pVBInfo->CR40[21 + j][XGINew_RAMType]); |
478 | 542 | ||
479 | for (j = 0; j < 2; j++) | 543 | for (j = 0; j < 2; j++) /* CR8A - CR8B */ |
480 | xgifb_reg_set(P3d4, (0x8A + j), | 544 | xgifb_reg_set(P3d4, (0x8A + j), |
481 | pVBInfo->CR40[1 + j][XGINew_RAMType]); /* CR8A - CR8B */ | 545 | pVBInfo->CR40[1 + j][XGINew_RAMType]); |
482 | 546 | ||
483 | if ((HwDeviceExtension->jChipType == XG41) || (HwDeviceExtension->jChipType == XG42)) | 547 | if ((HwDeviceExtension->jChipType == XG41) || |
548 | (HwDeviceExtension->jChipType == XG42)) | ||
484 | xgifb_reg_set(P3d4, 0x8C, 0x87); | 549 | xgifb_reg_set(P3d4, 0x8C, 0x87); |
485 | 550 | ||
486 | xgifb_reg_set(P3d4, 0x59, pVBInfo->CR40[4][XGINew_RAMType]); /* CR59 */ | 551 | xgifb_reg_set(P3d4, 0x59, pVBInfo->CR40[4][XGINew_RAMType]); /* CR59 */ |
@@ -550,7 +615,10 @@ static unsigned short XGINew_SetDRAMSizeReg(int index, | |||
550 | memsize = data >> 4; | 615 | memsize = data >> 4; |
551 | 616 | ||
552 | /* [2004/03/25] Vicent, Fix DRAM Sizing Error */ | 617 | /* [2004/03/25] Vicent, Fix DRAM Sizing Error */ |
553 | xgifb_reg_set(pVBInfo->P3c4, 0x14, (xgifb_reg_get(pVBInfo->P3c4, 0x14) & 0x0F) | (data & 0xF0)); | 618 | xgifb_reg_set(pVBInfo->P3c4, |
619 | 0x14, | ||
620 | (xgifb_reg_get(pVBInfo->P3c4, 0x14) & 0x0F) | | ||
621 | (data & 0xF0)); | ||
554 | 622 | ||
555 | /* data |= XGINew_ChannelAB << 2; */ | 623 | /* data |= XGINew_ChannelAB << 2; */ |
556 | /* data |= (XGINew_DataBusWidth / 64) << 1; */ | 624 | /* data |= (XGINew_DataBusWidth / 64) << 1; */ |
@@ -591,7 +659,10 @@ static unsigned short XGINew_SetDRAMSize20Reg(int index, | |||
591 | memsize = data >> 4; | 659 | memsize = data >> 4; |
592 | 660 | ||
593 | /* [2004/03/25] Vicent, Fix DRAM Sizing Error */ | 661 | /* [2004/03/25] Vicent, Fix DRAM Sizing Error */ |
594 | xgifb_reg_set(pVBInfo->P3c4, 0x14, (xgifb_reg_get(pVBInfo->P3c4, 0x14) & 0x0F) | (data & 0xF0)); | 662 | xgifb_reg_set(pVBInfo->P3c4, |
663 | 0x14, | ||
664 | (xgifb_reg_get(pVBInfo->P3c4, 0x14) & 0x0F) | | ||
665 | (data & 0xF0)); | ||
595 | udelay(15); | 666 | udelay(15); |
596 | 667 | ||
597 | /* data |= XGINew_ChannelAB << 2; */ | 668 | /* data |= XGINew_ChannelAB << 2; */ |
@@ -617,7 +688,8 @@ static int XGINew_ReadWriteRest(unsigned short StopAddr, | |||
617 | *((unsigned long *) (pVBInfo->FBAddr + Position)) = Position; | 688 | *((unsigned long *) (pVBInfo->FBAddr + Position)) = Position; |
618 | } | 689 | } |
619 | 690 | ||
620 | udelay(500); /* [Vicent] 2004/04/16. Fix #1759 Memory Size error in Multi-Adapter. */ | 691 | udelay(500); /* [Vicent] 2004/04/16. |
692 | Fix #1759 Memory Size error in Multi-Adapter. */ | ||
621 | 693 | ||
622 | Position = 0; | 694 | Position = 0; |
623 | 695 | ||
@@ -626,7 +698,8 @@ static int XGINew_ReadWriteRest(unsigned short StopAddr, | |||
626 | 698 | ||
627 | for (i = StartAddr; i <= StopAddr; i++) { | 699 | for (i = StartAddr; i <= StopAddr; i++) { |
628 | Position = 1 << i; | 700 | Position = 1 << i; |
629 | if ((*(unsigned long *) (pVBInfo->FBAddr + Position)) != Position) | 701 | if ((*(unsigned long *) (pVBInfo->FBAddr + Position)) != |
702 | Position) | ||
630 | return 0; | 703 | return 0; |
631 | } | 704 | } |
632 | return 1; | 705 | return 1; |
@@ -665,67 +738,96 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, | |||
665 | > 0x1000000) { | 738 | > 0x1000000) { |
666 | 739 | ||
667 | XGINew_DataBusWidth = 32; /* 32 bits */ | 740 | XGINew_DataBusWidth = 32; /* 32 bits */ |
668 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); /* 22bit + 2 rank + 32bit */ | 741 | /* 22bit + 2 rank + 32bit */ |
742 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); | ||
669 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x52); | 743 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x52); |
670 | udelay(15); | 744 | udelay(15); |
671 | 745 | ||
672 | if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) | 746 | if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) |
673 | return; | 747 | return; |
674 | 748 | ||
675 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x800000) { | 749 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > |
676 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x31); /* 22bit + 1 rank + 32bit */ | 750 | 0x800000) { |
677 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x42); | 751 | /* 22bit + 1 rank + 32bit */ |
752 | xgifb_reg_set(pVBInfo->P3c4, | ||
753 | 0x13, | ||
754 | 0x31); | ||
755 | xgifb_reg_set(pVBInfo->P3c4, | ||
756 | 0x14, | ||
757 | 0x42); | ||
678 | udelay(15); | 758 | udelay(15); |
679 | 759 | ||
680 | if (XGINew_ReadWriteRest(23, 23, pVBInfo) == 1) | 760 | if (XGINew_ReadWriteRest(23, |
761 | 23, | ||
762 | pVBInfo) == 1) | ||
681 | return; | 763 | return; |
682 | } | 764 | } |
683 | } | 765 | } |
684 | 766 | ||
685 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x800000) { | 767 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > |
768 | 0x800000) { | ||
686 | XGINew_DataBusWidth = 16; /* 16 bits */ | 769 | XGINew_DataBusWidth = 16; /* 16 bits */ |
687 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); /* 22bit + 2 rank + 16bit */ | 770 | /* 22bit + 2 rank + 16bit */ |
771 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); | ||
688 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x41); | 772 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x41); |
689 | udelay(15); | 773 | udelay(15); |
690 | 774 | ||
691 | if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1) | 775 | if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1) |
692 | return; | 776 | return; |
693 | else | 777 | else |
694 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x31); | 778 | xgifb_reg_set(pVBInfo->P3c4, |
779 | 0x13, | ||
780 | 0x31); | ||
695 | udelay(15); | 781 | udelay(15); |
696 | } | 782 | } |
697 | 783 | ||
698 | } else { /* Dual_16_8 */ | 784 | } else { /* Dual_16_8 */ |
699 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x800000) { | 785 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > |
700 | 786 | 0x800000) { | |
701 | XGINew_DataBusWidth = 16; /* 16 bits */ | 787 | XGINew_DataBusWidth = 16; /* 16 bits */ |
702 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); /* (0x31:12x8x2) 22bit + 2 rank */ | 788 | /* (0x31:12x8x2) 22bit + 2 rank */ |
703 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x41); /* 0x41:16Mx16 bit*/ | 789 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); |
790 | /* 0x41:16Mx16 bit*/ | ||
791 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x41); | ||
704 | udelay(15); | 792 | udelay(15); |
705 | 793 | ||
706 | if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1) | 794 | if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1) |
707 | return; | 795 | return; |
708 | 796 | ||
709 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x400000) { | 797 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > |
710 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x31); /* (0x31:12x8x2) 22bit + 1 rank */ | 798 | 0x400000) { |
711 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x31); /* 0x31:8Mx16 bit*/ | 799 | /* (0x31:12x8x2) 22bit + 1 rank */ |
800 | xgifb_reg_set(pVBInfo->P3c4, | ||
801 | 0x13, | ||
802 | 0x31); | ||
803 | /* 0x31:8Mx16 bit*/ | ||
804 | xgifb_reg_set(pVBInfo->P3c4, | ||
805 | 0x14, | ||
806 | 0x31); | ||
712 | udelay(15); | 807 | udelay(15); |
713 | 808 | ||
714 | if (XGINew_ReadWriteRest(22, 22, pVBInfo) == 1) | 809 | if (XGINew_ReadWriteRest(22, |
810 | 22, | ||
811 | pVBInfo) == 1) | ||
715 | return; | 812 | return; |
716 | } | 813 | } |
717 | } | 814 | } |
718 | 815 | ||
719 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x400000) { | 816 | if ((HwDeviceExtension->ulVideoMemorySize - 1) > |
817 | 0x400000) { | ||
720 | XGINew_DataBusWidth = 8; /* 8 bits */ | 818 | XGINew_DataBusWidth = 8; /* 8 bits */ |
721 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); /* (0x31:12x8x2) 22bit + 2 rank */ | 819 | /* (0x31:12x8x2) 22bit + 2 rank */ |
722 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x30); /* 0x30:8Mx8 bit*/ | 820 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); |
821 | /* 0x30:8Mx8 bit*/ | ||
822 | xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x30); | ||
723 | udelay(15); | 823 | udelay(15); |
724 | 824 | ||
725 | if (XGINew_ReadWriteRest(22, 21, pVBInfo) == 1) | 825 | if (XGINew_ReadWriteRest(22, 21, pVBInfo) == 1) |
726 | return; | 826 | return; |
727 | else | 827 | else /* (0x31:12x8x2) 22bit + 1 rank */ |
728 | xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x31); /* (0x31:12x8x2) 22bit + 1 rank */ | 828 | xgifb_reg_set(pVBInfo->P3c4, |
829 | 0x13, | ||
830 | 0x31); | ||
729 | udelay(15); | 831 | udelay(15); |
730 | } | 832 | } |
731 | } | 833 | } |
@@ -911,13 +1013,18 @@ static int XGINew_DDRSizing340(struct xgi_hw_device_info *HwDeviceExtension, | |||
911 | 1013 | ||
912 | if (HwDeviceExtension->jChipType >= XG20) { | 1014 | if (HwDeviceExtension->jChipType >= XG20) { |
913 | for (i = 0; i < 12; i++) { | 1015 | for (i = 0; i < 12; i++) { |
914 | XGINew_SetDRAMSizingType(i, XGINew_DDRDRAM_TYPE20, pVBInfo); | 1016 | XGINew_SetDRAMSizingType(i, |
915 | memsize = XGINew_SetDRAMSize20Reg(i, XGINew_DDRDRAM_TYPE20, pVBInfo); | 1017 | XGINew_DDRDRAM_TYPE20, |
1018 | pVBInfo); | ||
1019 | memsize = XGINew_SetDRAMSize20Reg(i, | ||
1020 | XGINew_DDRDRAM_TYPE20, | ||
1021 | pVBInfo); | ||
916 | if (memsize == 0) | 1022 | if (memsize == 0) |
917 | continue; | 1023 | continue; |
918 | 1024 | ||
919 | addr = memsize + (XGINew_ChannelAB - 2) + 20; | 1025 | addr = memsize + (XGINew_ChannelAB - 2) + 20; |
920 | if ((HwDeviceExtension->ulVideoMemorySize - 1) < (unsigned long) (1 << addr)) | 1026 | if ((HwDeviceExtension->ulVideoMemorySize - 1) < |
1027 | (unsigned long) (1 << addr)) | ||
921 | continue; | 1028 | continue; |
922 | 1029 | ||
923 | if (XGINew_ReadWriteRest(addr, 5, pVBInfo) == 1) | 1030 | if (XGINew_ReadWriteRest(addr, 5, pVBInfo) == 1) |
@@ -925,14 +1032,19 @@ static int XGINew_DDRSizing340(struct xgi_hw_device_info *HwDeviceExtension, | |||
925 | } | 1032 | } |
926 | } else { | 1033 | } else { |
927 | for (i = 0; i < 4; i++) { | 1034 | for (i = 0; i < 4; i++) { |
928 | XGINew_SetDRAMSizingType(i, XGINew_DDRDRAM_TYPE340, pVBInfo); | 1035 | XGINew_SetDRAMSizingType(i, |
929 | memsize = XGINew_SetDRAMSizeReg(i, XGINew_DDRDRAM_TYPE340, pVBInfo); | 1036 | XGINew_DDRDRAM_TYPE340, |
1037 | pVBInfo); | ||
1038 | memsize = XGINew_SetDRAMSizeReg(i, | ||
1039 | XGINew_DDRDRAM_TYPE340, | ||
1040 | pVBInfo); | ||
930 | 1041 | ||
931 | if (memsize == 0) | 1042 | if (memsize == 0) |
932 | continue; | 1043 | continue; |
933 | 1044 | ||
934 | addr = memsize + (XGINew_ChannelAB - 2) + 20; | 1045 | addr = memsize + (XGINew_ChannelAB - 2) + 20; |
935 | if ((HwDeviceExtension->ulVideoMemorySize - 1) < (unsigned long) (1 << addr)) | 1046 | if ((HwDeviceExtension->ulVideoMemorySize - 1) < |
1047 | (unsigned long) (1 << addr)) | ||
936 | continue; | 1048 | continue; |
937 | 1049 | ||
938 | if (XGINew_ReadWriteRest(addr, 9, pVBInfo) == 1) | 1050 | if (XGINew_ReadWriteRest(addr, 9, pVBInfo) == 1) |
@@ -953,7 +1065,8 @@ static void XGINew_SetDRAMSize_340(struct xgi_hw_device_info *HwDeviceExtension, | |||
953 | XGISetModeNew(HwDeviceExtension, 0x2e); | 1065 | XGISetModeNew(HwDeviceExtension, 0x2e); |
954 | 1066 | ||
955 | data = xgifb_reg_get(pVBInfo->P3c4, 0x21); | 1067 | data = xgifb_reg_get(pVBInfo->P3c4, 0x21); |
956 | xgifb_reg_set(pVBInfo->P3c4, 0x21, (unsigned short) (data & 0xDF)); /* disable read cache */ | 1068 | /* disable read cache */ |
1069 | xgifb_reg_set(pVBInfo->P3c4, 0x21, (unsigned short) (data & 0xDF)); | ||
957 | XGI_DisplayOff(HwDeviceExtension, pVBInfo); | 1070 | XGI_DisplayOff(HwDeviceExtension, pVBInfo); |
958 | 1071 | ||
959 | /* data = xgifb_reg_get(pVBInfo->P3c4, 0x1); */ | 1072 | /* data = xgifb_reg_get(pVBInfo->P3c4, 0x1); */ |
@@ -961,12 +1074,15 @@ static void XGINew_SetDRAMSize_340(struct xgi_hw_device_info *HwDeviceExtension, | |||
961 | /* xgifb_reg_set(pVBInfo->P3c4, 0x01, data); *//* Turn OFF Display */ | 1074 | /* xgifb_reg_set(pVBInfo->P3c4, 0x01, data); *//* Turn OFF Display */ |
962 | XGINew_DDRSizing340(HwDeviceExtension, pVBInfo); | 1075 | XGINew_DDRSizing340(HwDeviceExtension, pVBInfo); |
963 | data = xgifb_reg_get(pVBInfo->P3c4, 0x21); | 1076 | data = xgifb_reg_get(pVBInfo->P3c4, 0x21); |
964 | xgifb_reg_set(pVBInfo->P3c4, 0x21, (unsigned short) (data | 0x20)); /* enable read cache */ | 1077 | /* enable read cache */ |
1078 | xgifb_reg_set(pVBInfo->P3c4, 0x21, (unsigned short) (data | 0x20)); | ||
965 | } | 1079 | } |
966 | 1080 | ||
967 | static void ReadVBIOSTablData(unsigned char ChipType, struct vb_device_info *pVBInfo) | 1081 | static void ReadVBIOSTablData(unsigned char ChipType, |
1082 | struct vb_device_info *pVBInfo) | ||
968 | { | 1083 | { |
969 | volatile unsigned char *pVideoMemory = (unsigned char *) pVBInfo->ROMAddr; | 1084 | volatile unsigned char *pVideoMemory = |
1085 | (unsigned char *) pVBInfo->ROMAddr; | ||
970 | unsigned long i; | 1086 | unsigned long i; |
971 | unsigned char j, k; | 1087 | unsigned char j, k; |
972 | /* Volari customize data area end */ | 1088 | /* Volari customize data area end */ |
@@ -980,24 +1096,34 @@ static void ReadVBIOSTablData(unsigned char ChipType, struct vb_device_info *pVB | |||
980 | if (j != 0xff) { | 1096 | if (j != 0xff) { |
981 | k = 0; | 1097 | k = 0; |
982 | do { | 1098 | do { |
983 | pVBInfo->XG21_LVDSCapList[k].LVDS_Capability | 1099 | pVBInfo->XG21_LVDSCapList[k]. |
984 | = pVideoMemory[i] | (pVideoMemory[i + 1] << 8); | 1100 | LVDS_Capability |
1101 | = pVideoMemory[i] | | ||
1102 | (pVideoMemory[i + 1] << 8); | ||
985 | pVBInfo->XG21_LVDSCapList[k].LVDSHT | 1103 | pVBInfo->XG21_LVDSCapList[k].LVDSHT |
986 | = pVideoMemory[i + 2] | (pVideoMemory[i + 3] << 8); | 1104 | = pVideoMemory[i + 2] | |
1105 | (pVideoMemory[i + 3] << 8); | ||
987 | pVBInfo->XG21_LVDSCapList[k].LVDSVT | 1106 | pVBInfo->XG21_LVDSCapList[k].LVDSVT |
988 | = pVideoMemory[i + 4] | (pVideoMemory[i + 5] << 8); | 1107 | = pVideoMemory[i + 4] | |
1108 | (pVideoMemory[i + 5] << 8); | ||
989 | pVBInfo->XG21_LVDSCapList[k].LVDSHDE | 1109 | pVBInfo->XG21_LVDSCapList[k].LVDSHDE |
990 | = pVideoMemory[i + 6] | (pVideoMemory[i + 7] << 8); | 1110 | = pVideoMemory[i + 6] | |
1111 | (pVideoMemory[i + 7] << 8); | ||
991 | pVBInfo->XG21_LVDSCapList[k].LVDSVDE | 1112 | pVBInfo->XG21_LVDSCapList[k].LVDSVDE |
992 | = pVideoMemory[i + 8] | (pVideoMemory[i + 9] << 8); | 1113 | = pVideoMemory[i + 8] | |
1114 | (pVideoMemory[i + 9] << 8); | ||
993 | pVBInfo->XG21_LVDSCapList[k].LVDSHFP | 1115 | pVBInfo->XG21_LVDSCapList[k].LVDSHFP |
994 | = pVideoMemory[i + 10] | (pVideoMemory[i + 11] << 8); | 1116 | = pVideoMemory[i + 10] | |
1117 | (pVideoMemory[i + 11] << 8); | ||
995 | pVBInfo->XG21_LVDSCapList[k].LVDSVFP | 1118 | pVBInfo->XG21_LVDSCapList[k].LVDSVFP |
996 | = pVideoMemory[i + 12] | (pVideoMemory[i + 13] << 8); | 1119 | = pVideoMemory[i + 12] | |
1120 | (pVideoMemory[i + 13] << 8); | ||
997 | pVBInfo->XG21_LVDSCapList[k].LVDSHSYNC | 1121 | pVBInfo->XG21_LVDSCapList[k].LVDSHSYNC |
998 | = pVideoMemory[i + 14] | (pVideoMemory[i + 15] << 8); | 1122 | = pVideoMemory[i + 14] | |
1123 | (pVideoMemory[i + 15] << 8); | ||
999 | pVBInfo->XG21_LVDSCapList[k].LVDSVSYNC | 1124 | pVBInfo->XG21_LVDSCapList[k].LVDSVSYNC |
1000 | = pVideoMemory[i + 16] | (pVideoMemory[i + 17] << 8); | 1125 | = pVideoMemory[i + 16] | |
1126 | (pVideoMemory[i + 17] << 8); | ||
1001 | pVBInfo->XG21_LVDSCapList[k].VCLKData1 | 1127 | pVBInfo->XG21_LVDSCapList[k].VCLKData1 |
1002 | = pVideoMemory[i + 18]; | 1128 | = pVideoMemory[i + 18]; |
1003 | pVBInfo->XG21_LVDSCapList[k].VCLKData2 | 1129 | pVBInfo->XG21_LVDSCapList[k].VCLKData2 |
@@ -1015,26 +1141,38 @@ static void ReadVBIOSTablData(unsigned char ChipType, struct vb_device_info *pVB | |||
1015 | i += 25; | 1141 | i += 25; |
1016 | j--; | 1142 | j--; |
1017 | k++; | 1143 | k++; |
1018 | } while ((j > 0) && (k < (sizeof(XGI21_LCDCapList) / sizeof(struct XGI21_LVDSCapStruct)))); | 1144 | } while ((j > 0) && |
1145 | (k < (sizeof(XGI21_LCDCapList) / | ||
1146 | sizeof(struct | ||
1147 | XGI21_LVDSCapStruct)))); | ||
1019 | } else { | 1148 | } else { |
1020 | pVBInfo->XG21_LVDSCapList[0].LVDS_Capability | 1149 | pVBInfo->XG21_LVDSCapList[0].LVDS_Capability |
1021 | = pVideoMemory[i] | (pVideoMemory[i + 1] << 8); | 1150 | = pVideoMemory[i] | |
1151 | (pVideoMemory[i + 1] << 8); | ||
1022 | pVBInfo->XG21_LVDSCapList[0].LVDSHT | 1152 | pVBInfo->XG21_LVDSCapList[0].LVDSHT |
1023 | = pVideoMemory[i + 2] | (pVideoMemory[i + 3] << 8); | 1153 | = pVideoMemory[i + 2] | |
1154 | (pVideoMemory[i + 3] << 8); | ||
1024 | pVBInfo->XG21_LVDSCapList[0].LVDSVT | 1155 | pVBInfo->XG21_LVDSCapList[0].LVDSVT |
1025 | = pVideoMemory[i + 4] | (pVideoMemory[i + 5] << 8); | 1156 | = pVideoMemory[i + 4] | |
1157 | (pVideoMemory[i + 5] << 8); | ||
1026 | pVBInfo->XG21_LVDSCapList[0].LVDSHDE | 1158 | pVBInfo->XG21_LVDSCapList[0].LVDSHDE |
1027 | = pVideoMemory[i + 6] | (pVideoMemory[i + 7] << 8); | 1159 | = pVideoMemory[i + 6] | |
1160 | (pVideoMemory[i + 7] << 8); | ||
1028 | pVBInfo->XG21_LVDSCapList[0].LVDSVDE | 1161 | pVBInfo->XG21_LVDSCapList[0].LVDSVDE |
1029 | = pVideoMemory[i + 8] | (pVideoMemory[i + 9] << 8); | 1162 | = pVideoMemory[i + 8] | |
1163 | (pVideoMemory[i + 9] << 8); | ||
1030 | pVBInfo->XG21_LVDSCapList[0].LVDSHFP | 1164 | pVBInfo->XG21_LVDSCapList[0].LVDSHFP |
1031 | = pVideoMemory[i + 10] | (pVideoMemory[i + 11] << 8); | 1165 | = pVideoMemory[i + 10] | |
1166 | (pVideoMemory[i + 11] << 8); | ||
1032 | pVBInfo->XG21_LVDSCapList[0].LVDSVFP | 1167 | pVBInfo->XG21_LVDSCapList[0].LVDSVFP |
1033 | = pVideoMemory[i + 12] | (pVideoMemory[i + 13] << 8); | 1168 | = pVideoMemory[i + 12] | |
1169 | (pVideoMemory[i + 13] << 8); | ||
1034 | pVBInfo->XG21_LVDSCapList[0].LVDSHSYNC | 1170 | pVBInfo->XG21_LVDSCapList[0].LVDSHSYNC |
1035 | = pVideoMemory[i + 14] | (pVideoMemory[i + 15] << 8); | 1171 | = pVideoMemory[i + 14] | |
1172 | (pVideoMemory[i + 15] << 8); | ||
1036 | pVBInfo->XG21_LVDSCapList[0].LVDSVSYNC | 1173 | pVBInfo->XG21_LVDSCapList[0].LVDSVSYNC |
1037 | = pVideoMemory[i + 16] | (pVideoMemory[i + 17] << 8); | 1174 | = pVideoMemory[i + 16] | |
1175 | (pVideoMemory[i + 17] << 8); | ||
1038 | pVBInfo->XG21_LVDSCapList[0].VCLKData1 | 1176 | pVBInfo->XG21_LVDSCapList[0].VCLKData1 |
1039 | = pVideoMemory[i + 18]; | 1177 | = pVideoMemory[i + 18]; |
1040 | pVBInfo->XG21_LVDSCapList[0].VCLKData2 | 1178 | pVBInfo->XG21_LVDSCapList[0].VCLKData2 |
@@ -1197,21 +1335,31 @@ static void XGINew_GetXG21Sense(struct xgi_hw_device_info *HwDeviceExtension, | |||
1197 | if ((pVideoMemory[0x65] & 0x01)) { /* For XG21 LVDS */ | 1335 | if ((pVideoMemory[0x65] & 0x01)) { /* For XG21 LVDS */ |
1198 | pVBInfo->IF_DEF_LVDS = 1; | 1336 | pVBInfo->IF_DEF_LVDS = 1; |
1199 | xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense); | 1337 | xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense); |
1200 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xC0); /* LVDS on chip */ | 1338 | /* LVDS on chip */ |
1339 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xC0); | ||
1201 | } else { | 1340 | } else { |
1202 | #endif | 1341 | #endif |
1203 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x03, 0x03); /* Enable GPIOA/B read */ | 1342 | /* Enable GPIOA/B read */ |
1343 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x03, 0x03); | ||
1204 | Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0xC0; | 1344 | Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0xC0; |
1205 | if (Temp == 0xC0) { /* DVI & DVO GPIOA/B pull high */ | 1345 | if (Temp == 0xC0) { /* DVI & DVO GPIOA/B pull high */ |
1206 | XGINew_SenseLCD(HwDeviceExtension, pVBInfo); | 1346 | XGINew_SenseLCD(HwDeviceExtension, pVBInfo); |
1207 | xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense); | 1347 | xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense); |
1208 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x20, 0x20); /* Enable read GPIOF */ | 1348 | /* Enable read GPIOF */ |
1349 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x20, 0x20); | ||
1209 | Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0x04; | 1350 | Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0x04; |
1210 | if (!Temp) | 1351 | if (!Temp) |
1211 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0x80); /* TMDS on chip */ | 1352 | xgifb_reg_and_or(pVBInfo->P3d4, |
1353 | 0x38, | ||
1354 | ~0xE0, | ||
1355 | 0x80); /* TMDS on chip */ | ||
1212 | else | 1356 | else |
1213 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xA0); /* Only DVO on chip */ | 1357 | xgifb_reg_and_or(pVBInfo->P3d4, |
1214 | xgifb_reg_and(pVBInfo->P3d4, 0x4A, ~0x20); /* Disable read GPIOF */ | 1358 | 0x38, |
1359 | ~0xE0, | ||
1360 | 0xA0); /* Only DVO on chip */ | ||
1361 | /* Disable read GPIOF */ | ||
1362 | xgifb_reg_and(pVBInfo->P3d4, 0x4A, ~0x20); | ||
1215 | } | 1363 | } |
1216 | #if 1 | 1364 | #if 1 |
1217 | } | 1365 | } |
@@ -1225,16 +1373,19 @@ static void XGINew_GetXG27Sense(struct xgi_hw_device_info *HwDeviceExtension, | |||
1225 | 1373 | ||
1226 | pVBInfo->IF_DEF_LVDS = 0; | 1374 | pVBInfo->IF_DEF_LVDS = 0; |
1227 | bCR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A); | 1375 | bCR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A); |
1228 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x07, 0x07); /* Enable GPIOA/B/C read */ | 1376 | /* Enable GPIOA/B/C read */ |
1377 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x07, 0x07); | ||
1229 | Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0x07; | 1378 | Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0x07; |
1230 | xgifb_reg_set(pVBInfo->P3d4, 0x4A, bCR4A); | 1379 | xgifb_reg_set(pVBInfo->P3d4, 0x4A, bCR4A); |
1231 | 1380 | ||
1232 | if (Temp <= 0x02) { | 1381 | if (Temp <= 0x02) { |
1233 | pVBInfo->IF_DEF_LVDS = 1; | 1382 | pVBInfo->IF_DEF_LVDS = 1; |
1234 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xC0); /* LVDS setting */ | 1383 | /* LVDS setting */ |
1384 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xC0); | ||
1235 | xgifb_reg_set(pVBInfo->P3d4, 0x30, 0x21); | 1385 | xgifb_reg_set(pVBInfo->P3d4, 0x30, 0x21); |
1236 | } else { | 1386 | } else { |
1237 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xA0); /* TMDS/DVO setting */ | 1387 | /* TMDS/DVO setting */ |
1388 | xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xA0); | ||
1238 | } | 1389 | } |
1239 | xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense); | 1390 | xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense); |
1240 | 1391 | ||
@@ -1245,7 +1396,8 @@ static unsigned char GetXG21FPBits(struct vb_device_info *pVBInfo) | |||
1245 | unsigned char CR38, CR4A, temp; | 1396 | unsigned char CR38, CR4A, temp; |
1246 | 1397 | ||
1247 | CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A); | 1398 | CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A); |
1248 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x10, 0x10); /* enable GPIOE read */ | 1399 | /* enable GPIOE read */ |
1400 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x10, 0x10); | ||
1249 | CR38 = xgifb_reg_get(pVBInfo->P3d4, 0x38); | 1401 | CR38 = xgifb_reg_get(pVBInfo->P3d4, 0x38); |
1250 | temp = 0; | 1402 | temp = 0; |
1251 | if ((CR38 & 0xE0) > 0x80) { | 1403 | if ((CR38 & 0xE0) > 0x80) { |
@@ -1264,7 +1416,8 @@ static unsigned char GetXG27FPBits(struct vb_device_info *pVBInfo) | |||
1264 | unsigned char CR4A, temp; | 1416 | unsigned char CR4A, temp; |
1265 | 1417 | ||
1266 | CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A); | 1418 | CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A); |
1267 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x03, 0x03); /* enable GPIOA/B/C read */ | 1419 | /* enable GPIOA/B/C read */ |
1420 | xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x03, 0x03); | ||
1268 | temp = xgifb_reg_get(pVBInfo->P3d4, 0x48); | 1421 | temp = xgifb_reg_get(pVBInfo->P3d4, 0x48); |
1269 | if (temp <= 2) | 1422 | if (temp <= 2) |
1270 | temp &= 0x03; | 1423 | temp &= 0x03; |
@@ -1344,7 +1497,8 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1344 | printk("5"); | 1497 | printk("5"); |
1345 | 1498 | ||
1346 | if (HwDeviceExtension->jChipType < XG20) /* kuku 2004/06/25 */ | 1499 | if (HwDeviceExtension->jChipType < XG20) /* kuku 2004/06/25 */ |
1347 | XGI_GetVBType(pVBInfo); /* Run XGI_GetVBType before InitTo330Pointer */ | 1500 | /* Run XGI_GetVBType before InitTo330Pointer */ |
1501 | XGI_GetVBType(pVBInfo); | ||
1348 | 1502 | ||
1349 | InitTo330Pointer(HwDeviceExtension->jChipType, pVBInfo); | 1503 | InitTo330Pointer(HwDeviceExtension->jChipType, pVBInfo); |
1350 | 1504 | ||
@@ -1381,7 +1535,8 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1381 | xgifb_reg_set(pVBInfo->P3c4, i, 0); | 1535 | xgifb_reg_set(pVBInfo->P3c4, i, 0); |
1382 | printk("9"); | 1536 | printk("9"); |
1383 | 1537 | ||
1384 | if (HwDeviceExtension->jChipType == XG42) /* [Hsuan] 2004/08/20 Auto over driver for XG42 */ | 1538 | /* [Hsuan] 2004/08/20 Auto over driver for XG42 */ |
1539 | if (HwDeviceExtension->jChipType == XG42) | ||
1385 | xgifb_reg_set(pVBInfo->P3c4, 0x3B, 0xC0); | 1540 | xgifb_reg_set(pVBInfo->P3c4, 0x3B, 0xC0); |
1386 | 1541 | ||
1387 | /* for (i = 0x30; i <= 0x3F; i++) */ | 1542 | /* for (i = 0x30; i <= 0x3F; i++) */ |
@@ -1397,7 +1552,8 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1397 | 1552 | ||
1398 | /* 3.SetMemoryClock | 1553 | /* 3.SetMemoryClock |
1399 | 1554 | ||
1400 | XGINew_RAMType = (int)XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); | 1555 | XGINew_RAMType = (int)XGINew_GetXG20DRAMType(HwDeviceExtension, |
1556 | pVBInfo); | ||
1401 | */ | 1557 | */ |
1402 | 1558 | ||
1403 | printk("11"); | 1559 | printk("11"); |
@@ -1411,8 +1567,10 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1411 | xgifb_reg_set(pVBInfo->P3c4, 0x11, 0x0F); | 1567 | xgifb_reg_set(pVBInfo->P3c4, 0x11, 0x0F); |
1412 | xgifb_reg_set(pVBInfo->P3c4, 0x1F, *pVBInfo->pSR1F); | 1568 | xgifb_reg_set(pVBInfo->P3c4, 0x1F, *pVBInfo->pSR1F); |
1413 | /* xgifb_reg_set(pVBInfo->P3c4, 0x20, 0x20); */ | 1569 | /* xgifb_reg_set(pVBInfo->P3c4, 0x20, 0x20); */ |
1414 | xgifb_reg_set(pVBInfo->P3c4, 0x20, 0xA0); /* alan, 2001/6/26 Frame buffer can read/write SR20 */ | 1570 | /* alan, 2001/6/26 Frame buffer can read/write SR20 */ |
1415 | xgifb_reg_set(pVBInfo->P3c4, 0x36, 0x70); /* Hsuan, 2006/01/01 H/W request for slow corner chip */ | 1571 | xgifb_reg_set(pVBInfo->P3c4, 0x20, 0xA0); |
1572 | /* Hsuan, 2006/01/01 H/W request for slow corner chip */ | ||
1573 | xgifb_reg_set(pVBInfo->P3c4, 0x36, 0x70); | ||
1416 | if (HwDeviceExtension->jChipType == XG27) /* Alan 12/07/2006 */ | 1574 | if (HwDeviceExtension->jChipType == XG27) /* Alan 12/07/2006 */ |
1417 | xgifb_reg_set(pVBInfo->P3c4, 0x36, *pVBInfo->pSR36); | 1575 | xgifb_reg_set(pVBInfo->P3c4, 0x36, *pVBInfo->pSR36); |
1418 | 1576 | ||
@@ -1441,14 +1599,24 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1441 | 1599 | ||
1442 | ChipsetID &= 0x0000FFFF; | 1600 | ChipsetID &= 0x0000FFFF; |
1443 | 1601 | ||
1444 | if ((ChipsetID == 0x700E) || (ChipsetID == 0x1022) || (ChipsetID == 0x1106) || (ChipsetID == 0x10DE)) { | 1602 | if ((ChipsetID == 0x700E) || |
1603 | (ChipsetID == 0x1022) || | ||
1604 | (ChipsetID == 0x1106) || | ||
1605 | (ChipsetID == 0x10DE)) { | ||
1445 | if (ChipsetID == 0x1106) { | 1606 | if (ChipsetID == 0x1106) { |
1446 | if ((VendorID == 0x1019) && (GraphicVendorID == 0x1019)) | 1607 | if ((VendorID == 0x1019) && |
1447 | xgifb_reg_set(pVBInfo->P3d4, 0x5F, 0x0D); | 1608 | (GraphicVendorID == 0x1019)) |
1609 | xgifb_reg_set(pVBInfo->P3d4, | ||
1610 | 0x5F, | ||
1611 | 0x0D); | ||
1448 | else | 1612 | else |
1449 | xgifb_reg_set(pVBInfo->P3d4, 0x5F, 0x0B); | 1613 | xgifb_reg_set(pVBInfo->P3d4, |
1614 | 0x5F, | ||
1615 | 0x0B); | ||
1450 | } else { | 1616 | } else { |
1451 | xgifb_reg_set(pVBInfo->P3d4, 0x5F, 0x0B); | 1617 | xgifb_reg_set(pVBInfo->P3d4, |
1618 | 0x5F, | ||
1619 | 0x0B); | ||
1452 | } | 1620 | } |
1453 | } | 1621 | } |
1454 | } | 1622 | } |
@@ -1458,13 +1626,19 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1458 | 1626 | ||
1459 | /* Set AGP customize registers (in SetDefAGPRegs) Start */ | 1627 | /* Set AGP customize registers (in SetDefAGPRegs) Start */ |
1460 | for (i = 0x47; i <= 0x4C; i++) | 1628 | for (i = 0x47; i <= 0x4C; i++) |
1461 | xgifb_reg_set(pVBInfo->P3d4, i, pVBInfo->AGPReg[i - 0x47]); | 1629 | xgifb_reg_set(pVBInfo->P3d4, |
1630 | i, | ||
1631 | pVBInfo->AGPReg[i - 0x47]); | ||
1462 | 1632 | ||
1463 | for (i = 0x70; i <= 0x71; i++) | 1633 | for (i = 0x70; i <= 0x71; i++) |
1464 | xgifb_reg_set(pVBInfo->P3d4, i, pVBInfo->AGPReg[6 + i - 0x70]); | 1634 | xgifb_reg_set(pVBInfo->P3d4, |
1635 | i, | ||
1636 | pVBInfo->AGPReg[6 + i - 0x70]); | ||
1465 | 1637 | ||
1466 | for (i = 0x74; i <= 0x77; i++) | 1638 | for (i = 0x74; i <= 0x77; i++) |
1467 | xgifb_reg_set(pVBInfo->P3d4, i, pVBInfo->AGPReg[8 + i - 0x74]); | 1639 | xgifb_reg_set(pVBInfo->P3d4, |
1640 | i, | ||
1641 | pVBInfo->AGPReg[8 + i - 0x74]); | ||
1468 | /* Set AGP customize registers (in SetDefAGPRegs) End */ | 1642 | /* Set AGP customize registers (in SetDefAGPRegs) End */ |
1469 | /* [Hsuan]2004/12/14 AGP Input Delay Adjustment on 850 */ | 1643 | /* [Hsuan]2004/12/14 AGP Input Delay Adjustment on 850 */ |
1470 | /* outl(0x80000000, 0xcf8); */ | 1644 | /* outl(0x80000000, 0xcf8); */ |
@@ -1472,7 +1646,10 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1472 | /* if (ChipsetID == 0x25308086) */ | 1646 | /* if (ChipsetID == 0x25308086) */ |
1473 | /* xgifb_reg_set(pVBInfo->P3d4, 0x77, 0xF0); */ | 1647 | /* xgifb_reg_set(pVBInfo->P3d4, 0x77, 0xF0); */ |
1474 | 1648 | ||
1475 | HwDeviceExtension->pQueryVGAConfigSpace(HwDeviceExtension, 0x50, 0, &Temp); /* Get */ | 1649 | HwDeviceExtension->pQueryVGAConfigSpace(HwDeviceExtension, |
1650 | 0x50, | ||
1651 | 0, | ||
1652 | &Temp); /* Get */ | ||
1476 | Temp >>= 20; | 1653 | Temp >>= 20; |
1477 | Temp &= 0xF; | 1654 | Temp &= 0xF; |
1478 | 1655 | ||
@@ -1490,12 +1667,16 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1490 | if (HwDeviceExtension->jChipType < XG20) { /* kuku 2004/06/25 */ | 1667 | if (HwDeviceExtension->jChipType < XG20) { /* kuku 2004/06/25 */ |
1491 | /* Set VB */ | 1668 | /* Set VB */ |
1492 | XGI_UnLockCRT2(HwDeviceExtension, pVBInfo); | 1669 | XGI_UnLockCRT2(HwDeviceExtension, pVBInfo); |
1493 | xgifb_reg_and_or(pVBInfo->Part0Port, 0x3F, 0xEF, 0x00); /* alan, disable VideoCapture */ | 1670 | /* alan, disable VideoCapture */ |
1671 | xgifb_reg_and_or(pVBInfo->Part0Port, 0x3F, 0xEF, 0x00); | ||
1494 | xgifb_reg_set(pVBInfo->Part1Port, 0x00, 0x00); | 1672 | xgifb_reg_set(pVBInfo->Part1Port, 0x00, 0x00); |
1495 | temp1 = (unsigned char) xgifb_reg_get(pVBInfo->P3d4, 0x7B); /* chk if BCLK>=100MHz */ | 1673 | /* chk if BCLK>=100MHz */ |
1674 | temp1 = (unsigned char) xgifb_reg_get(pVBInfo->P3d4, 0x7B); | ||
1496 | temp = (unsigned char) ((temp1 >> 4) & 0x0F); | 1675 | temp = (unsigned char) ((temp1 >> 4) & 0x0F); |
1497 | 1676 | ||
1498 | xgifb_reg_set(pVBInfo->Part1Port, 0x02, (*pVBInfo->pCRT2Data_1_2)); | 1677 | xgifb_reg_set(pVBInfo->Part1Port, |
1678 | 0x02, | ||
1679 | (*pVBInfo->pCRT2Data_1_2)); | ||
1499 | 1680 | ||
1500 | printk("16"); | 1681 | printk("16"); |
1501 | 1682 | ||
@@ -1504,10 +1685,15 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1504 | 1685 | ||
1505 | xgifb_reg_set(pVBInfo->P3c4, 0x27, 0x1F); | 1686 | xgifb_reg_set(pVBInfo->P3c4, 0x27, 0x1F); |
1506 | 1687 | ||
1507 | if ((HwDeviceExtension->jChipType == XG42) | 1688 | if ((HwDeviceExtension->jChipType == XG42) && |
1508 | && XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo) != 0) { /* Not DDR */ | 1689 | XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo) != 0) { |
1509 | xgifb_reg_set(pVBInfo->P3c4, 0x31, (*pVBInfo->pSR31 & 0x3F) | 0x40); | 1690 | /* Not DDR */ |
1510 | xgifb_reg_set(pVBInfo->P3c4, 0x32, (*pVBInfo->pSR32 & 0xFC) | 0x01); | 1691 | xgifb_reg_set(pVBInfo->P3c4, |
1692 | 0x31, | ||
1693 | (*pVBInfo->pSR31 & 0x3F) | 0x40); | ||
1694 | xgifb_reg_set(pVBInfo->P3c4, | ||
1695 | 0x32, | ||
1696 | (*pVBInfo->pSR32 & 0xFC) | 0x01); | ||
1511 | } else { | 1697 | } else { |
1512 | xgifb_reg_set(pVBInfo->P3c4, 0x31, *pVBInfo->pSR31); | 1698 | xgifb_reg_set(pVBInfo->P3c4, 0x31, *pVBInfo->pSR31); |
1513 | xgifb_reg_set(pVBInfo->P3c4, 0x32, *pVBInfo->pSR32); | 1699 | xgifb_reg_set(pVBInfo->P3c4, 0x32, *pVBInfo->pSR32); |
@@ -1522,9 +1708,15 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1522 | if (XGI_BridgeIsOn(pVBInfo) == 1) { | 1708 | if (XGI_BridgeIsOn(pVBInfo) == 1) { |
1523 | if (pVBInfo->IF_DEF_LVDS == 0) { | 1709 | if (pVBInfo->IF_DEF_LVDS == 0) { |
1524 | xgifb_reg_set(pVBInfo->Part2Port, 0x00, 0x1C); | 1710 | xgifb_reg_set(pVBInfo->Part2Port, 0x00, 0x1C); |
1525 | xgifb_reg_set(pVBInfo->Part4Port, 0x0D, *pVBInfo->pCRT2Data_4_D); | 1711 | xgifb_reg_set(pVBInfo->Part4Port, |
1526 | xgifb_reg_set(pVBInfo->Part4Port, 0x0E, *pVBInfo->pCRT2Data_4_E); | 1712 | 0x0D, |
1527 | xgifb_reg_set(pVBInfo->Part4Port, 0x10, *pVBInfo->pCRT2Data_4_10); | 1713 | *pVBInfo->pCRT2Data_4_D); |
1714 | xgifb_reg_set(pVBInfo->Part4Port, | ||
1715 | 0x0E, | ||
1716 | *pVBInfo->pCRT2Data_4_E); | ||
1717 | xgifb_reg_set(pVBInfo->Part4Port, | ||
1718 | 0x10, | ||
1719 | *pVBInfo->pCRT2Data_4_10); | ||
1528 | xgifb_reg_set(pVBInfo->Part4Port, 0x0F, 0x3F); | 1720 | xgifb_reg_set(pVBInfo->Part4Port, 0x0F, 0x3F); |
1529 | } | 1721 | } |
1530 | 1722 | ||
@@ -1542,31 +1734,42 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1542 | printk("183"); | 1734 | printk("183"); |
1543 | /* XGINew_DetectMonitor(HwDeviceExtension); */ | 1735 | /* XGINew_DetectMonitor(HwDeviceExtension); */ |
1544 | pVBInfo->IF_DEF_CH7007 = 0; | 1736 | pVBInfo->IF_DEF_CH7007 = 0; |
1545 | if ((HwDeviceExtension->jChipType == XG21) && (pVBInfo->IF_DEF_CH7007)) { | 1737 | if ((HwDeviceExtension->jChipType == XG21) && |
1738 | (pVBInfo->IF_DEF_CH7007)) { | ||
1546 | printk("184"); | 1739 | printk("184"); |
1547 | XGI_GetSenseStatus(HwDeviceExtension, pVBInfo); /* sense CRT2 */ | 1740 | /* sense CRT2 */ |
1741 | XGI_GetSenseStatus(HwDeviceExtension, pVBInfo); | ||
1548 | printk("185"); | 1742 | printk("185"); |
1549 | 1743 | ||
1550 | } | 1744 | } |
1551 | if (HwDeviceExtension->jChipType == XG21) { | 1745 | if (HwDeviceExtension->jChipType == XG21) { |
1552 | printk("186"); | 1746 | printk("186"); |
1553 | 1747 | ||
1554 | xgifb_reg_and_or(pVBInfo->P3d4, 0x32, ~Monitor1Sense, Monitor1Sense); /* Z9 default has CRT */ | 1748 | xgifb_reg_and_or(pVBInfo->P3d4, |
1749 | 0x32, | ||
1750 | ~Monitor1Sense, | ||
1751 | Monitor1Sense); /* Z9 default has CRT */ | ||
1555 | temp = GetXG21FPBits(pVBInfo); | 1752 | temp = GetXG21FPBits(pVBInfo); |
1556 | xgifb_reg_and_or(pVBInfo->P3d4, 0x37, ~0x01, temp); | 1753 | xgifb_reg_and_or(pVBInfo->P3d4, 0x37, ~0x01, temp); |
1557 | printk("187"); | 1754 | printk("187"); |
1558 | 1755 | ||
1559 | } | 1756 | } |
1560 | if (HwDeviceExtension->jChipType == XG27) { | 1757 | if (HwDeviceExtension->jChipType == XG27) { |
1561 | xgifb_reg_and_or(pVBInfo->P3d4, 0x32, ~Monitor1Sense, Monitor1Sense); /* Z9 default has CRT */ | 1758 | xgifb_reg_and_or(pVBInfo->P3d4, |
1759 | 0x32, | ||
1760 | ~Monitor1Sense, | ||
1761 | Monitor1Sense); /* Z9 default has CRT */ | ||
1562 | temp = GetXG27FPBits(pVBInfo); | 1762 | temp = GetXG27FPBits(pVBInfo); |
1563 | xgifb_reg_and_or(pVBInfo->P3d4, 0x37, ~0x03, temp); | 1763 | xgifb_reg_and_or(pVBInfo->P3d4, 0x37, ~0x03, temp); |
1564 | } | 1764 | } |
1565 | printk("19"); | 1765 | printk("19"); |
1566 | 1766 | ||
1567 | XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); | 1767 | XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, |
1768 | pVBInfo); | ||
1568 | 1769 | ||
1569 | XGINew_SetDRAMDefaultRegister340(HwDeviceExtension, pVBInfo->P3d4, pVBInfo); | 1770 | XGINew_SetDRAMDefaultRegister340(HwDeviceExtension, |
1771 | pVBInfo->P3d4, | ||
1772 | pVBInfo); | ||
1570 | 1773 | ||
1571 | printk("20"); | 1774 | printk("20"); |
1572 | XGINew_SetDRAMSize_340(HwDeviceExtension, pVBInfo); | 1775 | XGINew_SetDRAMSize_340(HwDeviceExtension, pVBInfo); |
@@ -1594,7 +1797,9 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) | |||
1594 | /* OutPortLong(0xcf8, base); */ | 1797 | /* OutPortLong(0xcf8, base); */ |
1595 | /* Temp = (InPortLong(0xcfc) & 0xFFFF); */ | 1798 | /* Temp = (InPortLong(0xcfc) & 0xFFFF); */ |
1596 | /* if (Temp == 0x1039) { */ | 1799 | /* if (Temp == 0x1039) { */ |
1597 | xgifb_reg_set(pVBInfo->P3c4, 0x22, (unsigned char) ((*pVBInfo->pSR22) & 0xFE)); | 1800 | xgifb_reg_set(pVBInfo->P3c4, |
1801 | 0x22, | ||
1802 | (unsigned char) ((*pVBInfo->pSR22) & 0xFE)); | ||
1598 | /* } else { */ | 1803 | /* } else { */ |
1599 | /* xgifb_reg_set(pVBInfo->P3c4, 0x22, *pVBInfo->pSR22); */ | 1804 | /* xgifb_reg_set(pVBInfo->P3c4, 0x22, *pVBInfo->pSR22); */ |
1600 | /* } */ | 1805 | /* } */ |