aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/pdc202xx_new.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/pci/pdc202xx_new.c')
-rw-r--r--drivers/ide/pci/pdc202xx_new.c483
1 files changed, 375 insertions, 108 deletions
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
index 3ca581063f72..7cb48576e479 100644
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -39,6 +39,14 @@
39 39
40#define PDC202_DEBUG_CABLE 0 40#define PDC202_DEBUG_CABLE 0
41 41
42#undef DEBUG
43
44#ifdef DEBUG
45#define DBG(fmt, args...) printk("%s: " fmt, __FUNCTION__, ## args)
46#else
47#define DBG(fmt, args...)
48#endif
49
42static const char *pdc_quirk_drives[] = { 50static const char *pdc_quirk_drives[] = {
43 "QUANTUM FIREBALLlct08 08", 51 "QUANTUM FIREBALLlct08 08",
44 "QUANTUM FIREBALLP KA6.4", 52 "QUANTUM FIREBALLP KA6.4",
@@ -51,37 +59,11 @@ static const char *pdc_quirk_drives[] = {
51 NULL 59 NULL
52}; 60};
53 61
54#define set_2regs(a, b) \ 62static u8 max_dma_rate(struct pci_dev *pdev)
55 do { \
56 hwif->OUTB((a + adj), indexreg); \
57 hwif->OUTB(b, datareg); \
58 } while(0)
59
60#define set_ultra(a, b, c) \
61 do { \
62 set_2regs(0x10,(a)); \
63 set_2regs(0x11,(b)); \
64 set_2regs(0x12,(c)); \
65 } while(0)
66
67#define set_ata2(a, b) \
68 do { \
69 set_2regs(0x0e,(a)); \
70 set_2regs(0x0f,(b)); \
71 } while(0)
72
73#define set_pio(a, b, c) \
74 do { \
75 set_2regs(0x0c,(a)); \
76 set_2regs(0x0d,(b)); \
77 set_2regs(0x13,(c)); \
78 } while(0)
79
80static u8 pdcnew_ratemask (ide_drive_t *drive)
81{ 63{
82 u8 mode; 64 u8 mode;
83 65
84 switch(HWIF(drive)->pci_dev->device) { 66 switch(pdev->device) {
85 case PCI_DEVICE_ID_PROMISE_20277: 67 case PCI_DEVICE_ID_PROMISE_20277:
86 case PCI_DEVICE_ID_PROMISE_20276: 68 case PCI_DEVICE_ID_PROMISE_20276:
87 case PCI_DEVICE_ID_PROMISE_20275: 69 case PCI_DEVICE_ID_PROMISE_20275:
@@ -96,12 +78,21 @@ static u8 pdcnew_ratemask (ide_drive_t *drive)
96 default: 78 default:
97 return 0; 79 return 0;
98 } 80 }
99 if (!eighty_ninty_three(drive)) 81
100 mode = min(mode, (u8)1);
101 return mode; 82 return mode;
102} 83}
103 84
104static int check_in_drive_lists (ide_drive_t *drive, const char **list) 85static u8 pdcnew_ratemask(ide_drive_t *drive)
86{
87 u8 mode = max_dma_rate(HWIF(drive)->pci_dev);
88
89 if (!eighty_ninty_three(drive))
90 mode = min_t(u8, mode, 1);
91
92 return mode;
93}
94
95static int check_in_drive_lists(ide_drive_t *drive, const char **list)
105{ 96{
106 struct hd_driveid *id = drive->id; 97 struct hd_driveid *id = drive->id;
107 98
@@ -121,43 +112,141 @@ static int check_in_drive_lists (ide_drive_t *drive, const char **list)
121 return 0; 112 return 0;
122} 113}
123 114
124static int pdcnew_new_tune_chipset (ide_drive_t *drive, u8 xferspeed) 115/**
116 * get_indexed_reg - Get indexed register
117 * @hwif: for the port address
118 * @index: index of the indexed register
119 */
120static u8 get_indexed_reg(ide_hwif_t *hwif, u8 index)
121{
122 u8 value;
123
124 hwif->OUTB(index, hwif->dma_vendor1);
125 value = hwif->INB(hwif->dma_vendor3);
126
127 DBG("index[%02X] value[%02X]\n", index, value);
128 return value;
129}
130
131/**
132 * set_indexed_reg - Set indexed register
133 * @hwif: for the port address
134 * @index: index of the indexed register
135 */
136static void set_indexed_reg(ide_hwif_t *hwif, u8 index, u8 value)
137{
138 hwif->OUTB(index, hwif->dma_vendor1);
139 hwif->OUTB(value, hwif->dma_vendor3);
140 DBG("index[%02X] value[%02X]\n", index, value);
141}
142
143/*
144 * ATA Timing Tables based on 133 MHz PLL output clock.
145 *
146 * If the PLL outputs 100 MHz clock, the ASIC hardware will set
147 * the timing registers automatically when "set features" command is
148 * issued to the device. However, if the PLL output clock is 133 MHz,
149 * the following tables must be used.
150 */
151static struct pio_timing {
152 u8 reg0c, reg0d, reg13;
153} pio_timings [] = {
154 { 0xfb, 0x2b, 0xac }, /* PIO mode 0, IORDY off, Prefetch off */
155 { 0x46, 0x29, 0xa4 }, /* PIO mode 1, IORDY off, Prefetch off */
156 { 0x23, 0x26, 0x64 }, /* PIO mode 2, IORDY off, Prefetch off */
157 { 0x27, 0x0d, 0x35 }, /* PIO mode 3, IORDY on, Prefetch off */
158 { 0x23, 0x09, 0x25 }, /* PIO mode 4, IORDY on, Prefetch off */
159};
160
161static struct mwdma_timing {
162 u8 reg0e, reg0f;
163} mwdma_timings [] = {
164 { 0xdf, 0x5f }, /* MWDMA mode 0 */
165 { 0x6b, 0x27 }, /* MWDMA mode 1 */
166 { 0x69, 0x25 }, /* MWDMA mode 2 */
167};
168
169static struct udma_timing {
170 u8 reg10, reg11, reg12;
171} udma_timings [] = {
172 { 0x4a, 0x0f, 0xd5 }, /* UDMA mode 0 */
173 { 0x3a, 0x0a, 0xd0 }, /* UDMA mode 1 */
174 { 0x2a, 0x07, 0xcd }, /* UDMA mode 2 */
175 { 0x1a, 0x05, 0xcd }, /* UDMA mode 3 */
176 { 0x1a, 0x03, 0xcd }, /* UDMA mode 4 */
177 { 0x1a, 0x02, 0xcb }, /* UDMA mode 5 */
178 { 0x1a, 0x01, 0xcb }, /* UDMA mode 6 */
179};
180
181static int pdcnew_tune_chipset(ide_drive_t *drive, u8 speed)
125{ 182{
126 ide_hwif_t *hwif = HWIF(drive); 183 ide_hwif_t *hwif = HWIF(drive);
127 unsigned long indexreg = hwif->dma_vendor1; 184 u8 adj = (drive->dn & 1) ? 0x08 : 0x00;
128 unsigned long datareg = hwif->dma_vendor3; 185 int err;
129 u8 thold = 0x10;
130 u8 adj = (drive->dn%2) ? 0x08 : 0x00;
131 u8 speed = ide_rate_filter(pdcnew_ratemask(drive), xferspeed);
132
133 if (speed == XFER_UDMA_2) {
134 hwif->OUTB((thold + adj), indexreg);
135 hwif->OUTB((hwif->INB(datareg) & 0x7f), datareg);
136 }
137 186
138 switch (speed) { 187 speed = ide_rate_filter(pdcnew_ratemask(drive), speed);
139 case XFER_UDMA_7: 188
140 speed = XFER_UDMA_6; 189 /*
141 case XFER_UDMA_6: set_ultra(0x1a, 0x01, 0xcb); break; 190 * Issue SETFEATURES_XFER to the drive first. PDC202xx hardware will
142 case XFER_UDMA_5: set_ultra(0x1a, 0x02, 0xcb); break; 191 * automatically set the timing registers based on 100 MHz PLL output.
143 case XFER_UDMA_4: set_ultra(0x1a, 0x03, 0xcd); break; 192 */
144 case XFER_UDMA_3: set_ultra(0x1a, 0x05, 0xcd); break; 193 err = ide_config_drive_speed(drive, speed);
145 case XFER_UDMA_2: set_ultra(0x2a, 0x07, 0xcd); break; 194
146 case XFER_UDMA_1: set_ultra(0x3a, 0x0a, 0xd0); break; 195 /*
147 case XFER_UDMA_0: set_ultra(0x4a, 0x0f, 0xd5); break; 196 * As we set up the PLL to output 133 MHz for UltraDMA/133 capable
148 case XFER_MW_DMA_2: set_ata2(0x69, 0x25); break; 197 * chips, we must override the default register settings...
149 case XFER_MW_DMA_1: set_ata2(0x6b, 0x27); break; 198 */
150 case XFER_MW_DMA_0: set_ata2(0xdf, 0x5f); break; 199 if (max_dma_rate(hwif->pci_dev) == 4) {
151 case XFER_PIO_4: set_pio(0x23, 0x09, 0x25); break; 200 u8 mode = speed & 0x07;
152 case XFER_PIO_3: set_pio(0x27, 0x0d, 0x35); break; 201
153 case XFER_PIO_2: set_pio(0x23, 0x26, 0x64); break; 202 switch (speed) {
154 case XFER_PIO_1: set_pio(0x46, 0x29, 0xa4); break; 203 case XFER_UDMA_6:
155 case XFER_PIO_0: set_pio(0xfb, 0x2b, 0xac); break; 204 case XFER_UDMA_5:
156 default: 205 case XFER_UDMA_4:
157 ; 206 case XFER_UDMA_3:
158 } 207 case XFER_UDMA_2:
208 case XFER_UDMA_1:
209 case XFER_UDMA_0:
210 set_indexed_reg(hwif, 0x10 + adj,
211 udma_timings[mode].reg10);
212 set_indexed_reg(hwif, 0x11 + adj,
213 udma_timings[mode].reg11);
214 set_indexed_reg(hwif, 0x12 + adj,
215 udma_timings[mode].reg12);
216 break;
217
218 case XFER_MW_DMA_2:
219 case XFER_MW_DMA_1:
220 case XFER_MW_DMA_0:
221 set_indexed_reg(hwif, 0x0e + adj,
222 mwdma_timings[mode].reg0e);
223 set_indexed_reg(hwif, 0x0f + adj,
224 mwdma_timings[mode].reg0f);
225 break;
226 case XFER_PIO_4:
227 case XFER_PIO_3:
228 case XFER_PIO_2:
229 case XFER_PIO_1:
230 case XFER_PIO_0:
231 set_indexed_reg(hwif, 0x0c + adj,
232 pio_timings[mode].reg0c);
233 set_indexed_reg(hwif, 0x0d + adj,
234 pio_timings[mode].reg0d);
235 set_indexed_reg(hwif, 0x13 + adj,
236 pio_timings[mode].reg13);
237 break;
238 default:
239 printk(KERN_ERR "pdc202xx_new: "
240 "Unknown speed %d ignored\n", speed);
241 }
242 } else if (speed == XFER_UDMA_2) {
243 /* Set tHOLD bit to 0 if using UDMA mode 2 */
244 u8 tmp = get_indexed_reg(hwif, 0x10 + adj);
159 245
160 return (ide_config_drive_speed(drive, speed)); 246 set_indexed_reg(hwif, 0x10 + adj, tmp & 0x7f);
247 }
248
249 return err;
161} 250}
162 251
163/* 0 1 2 3 4 5 6 7 8 252/* 0 1 2 3 4 5 6 7 8
@@ -170,36 +259,42 @@ static int pdcnew_new_tune_chipset (ide_drive_t *drive, u8 xferspeed)
170static void pdcnew_tune_drive(ide_drive_t *drive, u8 pio) 259static void pdcnew_tune_drive(ide_drive_t *drive, u8 pio)
171{ 260{
172 pio = ide_get_best_pio_mode(drive, pio, 4, NULL); 261 pio = ide_get_best_pio_mode(drive, pio, 4, NULL);
173 (void)pdcnew_new_tune_chipset(drive, XFER_PIO_0 + pio); 262 (void)pdcnew_tune_chipset(drive, XFER_PIO_0 + pio);
174} 263}
175 264
176static u8 pdcnew_new_cable_detect (ide_hwif_t *hwif) 265static u8 pdcnew_cable_detect(ide_hwif_t *hwif)
177{ 266{
178 hwif->OUTB(0x0b, hwif->dma_vendor1); 267 return get_indexed_reg(hwif, 0x0b) & 0x04;
179 return ((u8)((hwif->INB(hwif->dma_vendor3) & 0x04)));
180} 268}
181static int config_chipset_for_dma (ide_drive_t *drive) 269
270static int config_chipset_for_dma(ide_drive_t *drive)
182{ 271{
183 struct hd_driveid *id = drive->id; 272 struct hd_driveid *id = drive->id;
184 ide_hwif_t *hwif = HWIF(drive); 273 ide_hwif_t *hwif = HWIF(drive);
185 u8 speed = -1; 274 u8 ultra_66 = (id->dma_ultra & 0x0078) ? 1 : 0;
186 u8 cable; 275 u8 cable = pdcnew_cable_detect(hwif);
187 276 u8 speed;
188 u8 ultra_66 = ((id->dma_ultra & 0x0010) ||
189 (id->dma_ultra & 0x0008)) ? 1 : 0;
190
191 cable = pdcnew_new_cable_detect(hwif);
192 277
193 if (ultra_66 && cable) { 278 if (ultra_66 && cable) {
194 printk(KERN_WARNING "Warning: %s channel requires an 80-pin cable for operation.\n", hwif->channel ? "Secondary":"Primary"); 279 printk(KERN_WARNING "Warning: %s channel "
280 "requires an 80-pin cable for operation.\n",
281 hwif->channel ? "Secondary" : "Primary");
195 printk(KERN_WARNING "%s reduced to Ultra33 mode.\n", drive->name); 282 printk(KERN_WARNING "%s reduced to Ultra33 mode.\n", drive->name);
196 } 283 }
197 284
198 if (drive->media != ide_disk) 285 if (drive->media != ide_disk)
199 return 0; 286 return 0;
200 if (id->capability & 4) { /* IORDY_EN & PREFETCH_EN */ 287
201 hwif->OUTB((0x13 + ((drive->dn%2) ? 0x08 : 0x00)), hwif->dma_vendor1); 288 if (id->capability & 4) {
202 hwif->OUTB((hwif->INB(hwif->dma_vendor3)|0x03), hwif->dma_vendor3); 289 /*
290 * Set IORDY_EN & PREFETCH_EN (this seems to have
291 * NO real effect since this register is reloaded
292 * by hardware when the transfer mode is selected)
293 */
294 u8 tmp, adj = (drive->dn & 1) ? 0x08 : 0x00;
295
296 tmp = get_indexed_reg(hwif, 0x13 + adj);
297 set_indexed_reg(hwif, 0x13 + adj, tmp | 0x03);
203 } 298 }
204 299
205 speed = ide_dma_speed(drive, pdcnew_ratemask(drive)); 300 speed = ide_dma_speed(drive, pdcnew_ratemask(drive));
@@ -211,7 +306,7 @@ static int config_chipset_for_dma (ide_drive_t *drive)
211 return ide_dma_enable(drive); 306 return ide_dma_enable(drive);
212} 307}
213 308
214static int pdcnew_config_drive_xfer_rate (ide_drive_t *drive) 309static int pdcnew_config_drive_xfer_rate(ide_drive_t *drive)
215{ 310{
216 ide_hwif_t *hwif = HWIF(drive); 311 ide_hwif_t *hwif = HWIF(drive);
217 struct hd_driveid *id = drive->id; 312 struct hd_driveid *id = drive->id;
@@ -236,9 +331,9 @@ fast_ata_pio:
236 return 0; 331 return 0;
237} 332}
238 333
239static int pdcnew_quirkproc (ide_drive_t *drive) 334static int pdcnew_quirkproc(ide_drive_t *drive)
240{ 335{
241 return ((int) check_in_drive_lists(drive, pdc_quirk_drives)); 336 return check_in_drive_lists(drive, pdc_quirk_drives);
242} 337}
243 338
244static int pdcnew_ide_dma_lostirq(ide_drive_t *drive) 339static int pdcnew_ide_dma_lostirq(ide_drive_t *drive)
@@ -255,21 +350,100 @@ static int pdcnew_ide_dma_timeout(ide_drive_t *drive)
255 return __ide_dma_timeout(drive); 350 return __ide_dma_timeout(drive);
256} 351}
257 352
258static void pdcnew_new_reset (ide_drive_t *drive) 353static void pdcnew_reset(ide_drive_t *drive)
259{ 354{
260 /* 355 /*
261 * Deleted this because it is redundant from the caller. 356 * Deleted this because it is redundant from the caller.
262 */ 357 */
263 printk(KERN_WARNING "PDC202XX: %s channel reset.\n", 358 printk(KERN_WARNING "pdc202xx_new: %s channel reset.\n",
264 HWIF(drive)->channel ? "Secondary" : "Primary"); 359 HWIF(drive)->channel ? "Secondary" : "Primary");
265} 360}
266 361
362/**
363 * read_counter - Read the byte count registers
364 * @dma_base: for the port address
365 */
366static long __devinit read_counter(u32 dma_base)
367{
368 u32 pri_dma_base = dma_base, sec_dma_base = dma_base + 0x08;
369 u8 cnt0, cnt1, cnt2, cnt3;
370 long count = 0, last;
371 int retry = 3;
372
373 do {
374 last = count;
375
376 /* Read the current count */
377 outb(0x20, pri_dma_base + 0x01);
378 cnt0 = inb(pri_dma_base + 0x03);
379 outb(0x21, pri_dma_base + 0x01);
380 cnt1 = inb(pri_dma_base + 0x03);
381 outb(0x20, sec_dma_base + 0x01);
382 cnt2 = inb(sec_dma_base + 0x03);
383 outb(0x21, sec_dma_base + 0x01);
384 cnt3 = inb(sec_dma_base + 0x03);
385
386 count = (cnt3 << 23) | (cnt2 << 15) | (cnt1 << 8) | cnt0;
387
388 /*
389 * The 30-bit decrementing counter is read in 4 pieces.
390 * Incorrect value may be read when the most significant bytes
391 * are changing...
392 */
393 } while (retry-- && (((last ^ count) & 0x3fff8000) || last < count));
394
395 DBG("cnt0[%02X] cnt1[%02X] cnt2[%02X] cnt3[%02X]\n",
396 cnt0, cnt1, cnt2, cnt3);
397
398 return count;
399}
400
401/**
402 * detect_pll_input_clock - Detect the PLL input clock in Hz.
403 * @dma_base: for the port address
404 * E.g. 16949000 on 33 MHz PCI bus, i.e. half of the PCI clock.
405 */
406static long __devinit detect_pll_input_clock(unsigned long dma_base)
407{
408 long start_count, end_count;
409 long pll_input;
410 u8 scr1;
411
412 start_count = read_counter(dma_base);
413
414 /* Start the test mode */
415 outb(0x01, dma_base + 0x01);
416 scr1 = inb(dma_base + 0x03);
417 DBG("scr1[%02X]\n", scr1);
418 outb(scr1 | 0x40, dma_base + 0x03);
419
420 /* Let the counter run for 10 ms. */
421 mdelay(10);
422
423 end_count = read_counter(dma_base);
424
425 /* Stop the test mode */
426 outb(0x01, dma_base + 0x01);
427 scr1 = inb(dma_base + 0x03);
428 DBG("scr1[%02X]\n", scr1);
429 outb(scr1 & ~0x40, dma_base + 0x03);
430
431 /*
432 * Calculate the input clock in Hz
433 * (the clock counter is 30 bit wide and counts down)
434 */
435 pll_input = ((start_count - end_count) & 0x3ffffff) * 100;
436
437 DBG("start[%ld] end[%ld]\n", start_count, end_count);
438
439 return pll_input;
440}
441
267#ifdef CONFIG_PPC_PMAC 442#ifdef CONFIG_PPC_PMAC
268static void __devinit apple_kiwi_init(struct pci_dev *pdev) 443static void __devinit apple_kiwi_init(struct pci_dev *pdev)
269{ 444{
270 struct device_node *np = pci_device_to_OF_node(pdev); 445 struct device_node *np = pci_device_to_OF_node(pdev);
271 unsigned int class_rev = 0; 446 unsigned int class_rev = 0;
272 void __iomem *mmio;
273 u8 conf; 447 u8 conf;
274 448
275 if (np == NULL || !device_is_compatible(np, "kiwi-root")) 449 if (np == NULL || !device_is_compatible(np, "kiwi-root"))
@@ -280,30 +454,20 @@ static void __devinit apple_kiwi_init(struct pci_dev *pdev)
280 454
281 if (class_rev >= 0x03) { 455 if (class_rev >= 0x03) {
282 /* Setup chip magic config stuff (from darwin) */ 456 /* Setup chip magic config stuff (from darwin) */
283 pci_read_config_byte(pdev, 0x40, &conf); 457 pci_read_config_byte (pdev, 0x40, &conf);
284 pci_write_config_byte(pdev, 0x40, conf | 0x01); 458 pci_write_config_byte(pdev, 0x40, (conf | 0x01));
285 }
286 mmio = ioremap(pci_resource_start(pdev, 5),
287 pci_resource_len(pdev, 5));
288
289 /* Setup some PLL stuffs */
290 switch (pdev->device) {
291 case PCI_DEVICE_ID_PROMISE_20270:
292 writew(0x0d2b, mmio + 0x1202);
293 mdelay(30);
294 break;
295 case PCI_DEVICE_ID_PROMISE_20271:
296 writew(0x0826, mmio + 0x1202);
297 mdelay(30);
298 break;
299 } 459 }
300
301 iounmap(mmio);
302} 460}
303#endif /* CONFIG_PPC_PMAC */ 461#endif /* CONFIG_PPC_PMAC */
304 462
305static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev, const char *name) 463static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev, const char *name)
306{ 464{
465 unsigned long dma_base = pci_resource_start(dev, 4);
466 unsigned long sec_dma_base = dma_base + 0x08;
467 long pll_input, pll_output, ratio;
468 int f, r;
469 u8 pll_ctl0, pll_ctl1;
470
307 if (dev->resource[PCI_ROM_RESOURCE].start) { 471 if (dev->resource[PCI_ROM_RESOURCE].start) {
308 pci_write_config_dword(dev, PCI_ROM_ADDRESS, 472 pci_write_config_dword(dev, PCI_ROM_ADDRESS,
309 dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE); 473 dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
@@ -315,6 +479,106 @@ static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev, const cha
315 apple_kiwi_init(dev); 479 apple_kiwi_init(dev);
316#endif 480#endif
317 481
482 /* Calculate the required PLL output frequency */
483 switch(max_dma_rate(dev)) {
484 case 4: /* it's 133 MHz for Ultra133 chips */
485 pll_output = 133333333;
486 break;
487 case 3: /* and 100 MHz for Ultra100 chips */
488 default:
489 pll_output = 100000000;
490 break;
491 }
492
493 /*
494 * Detect PLL input clock.
495 * On some systems, where PCI bus is running at non-standard clock rate
496 * (e.g. 25 or 40 MHz), we have to adjust the cycle time.
497 * PDC20268 and newer chips employ PLL circuit to help correct timing
498 * registers setting.
499 */
500 pll_input = detect_pll_input_clock(dma_base);
501 printk("%s: PLL input clock is %ld kHz\n", name, pll_input / 1000);
502
503 /* Sanity check */
504 if (unlikely(pll_input < 5000000L || pll_input > 70000000L)) {
505 printk(KERN_ERR "%s: Bad PLL input clock %ld Hz, giving up!\n",
506 name, pll_input);
507 goto out;
508 }
509
510#ifdef DEBUG
511 DBG("pll_output is %ld Hz\n", pll_output);
512
513 /* Show the current clock value of PLL control register
514 * (maybe already configured by the BIOS)
515 */
516 outb(0x02, sec_dma_base + 0x01);
517 pll_ctl0 = inb(sec_dma_base + 0x03);
518 outb(0x03, sec_dma_base + 0x01);
519 pll_ctl1 = inb(sec_dma_base + 0x03);
520
521 DBG("pll_ctl[%02X][%02X]\n", pll_ctl0, pll_ctl1);
522#endif
523
524 /*
525 * Calculate the ratio of F, R and NO
526 * POUT = (F + 2) / (( R + 2) * NO)
527 */
528 ratio = pll_output / (pll_input / 1000);
529 if (ratio < 8600L) { /* 8.6x */
530 /* Using NO = 0x01, R = 0x0d */
531 r = 0x0d;
532 } else if (ratio < 12900L) { /* 12.9x */
533 /* Using NO = 0x01, R = 0x08 */
534 r = 0x08;
535 } else if (ratio < 16100L) { /* 16.1x */
536 /* Using NO = 0x01, R = 0x06 */
537 r = 0x06;
538 } else if (ratio < 64000L) { /* 64x */
539 r = 0x00;
540 } else {
541 /* Invalid ratio */
542 printk(KERN_ERR "%s: Bad ratio %ld, giving up!\n", name, ratio);
543 goto out;
544 }
545
546 f = (ratio * (r + 2)) / 1000 - 2;
547
548 DBG("F[%d] R[%d] ratio*1000[%ld]\n", f, r, ratio);
549
550 if (unlikely(f < 0 || f > 127)) {
551 /* Invalid F */
552 printk(KERN_ERR "%s: F[%d] invalid!\n", name, f);
553 goto out;
554 }
555
556 pll_ctl0 = (u8) f;
557 pll_ctl1 = (u8) r;
558
559 DBG("Writing pll_ctl[%02X][%02X]\n", pll_ctl0, pll_ctl1);
560
561 outb(0x02, sec_dma_base + 0x01);
562 outb(pll_ctl0, sec_dma_base + 0x03);
563 outb(0x03, sec_dma_base + 0x01);
564 outb(pll_ctl1, sec_dma_base + 0x03);
565
566 /* Wait the PLL circuit to be stable */
567 mdelay(30);
568
569#ifdef DEBUG
570 /*
571 * Show the current clock value of PLL control register
572 */
573 outb(0x02, sec_dma_base + 0x01);
574 pll_ctl0 = inb(sec_dma_base + 0x03);
575 outb(0x03, sec_dma_base + 0x01);
576 pll_ctl1 = inb(sec_dma_base + 0x03);
577
578 DBG("pll_ctl[%02X][%02X]\n", pll_ctl0, pll_ctl1);
579#endif
580
581 out:
318 return dev->irq; 582 return dev->irq;
319} 583}
320 584
@@ -324,8 +588,8 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif)
324 588
325 hwif->tuneproc = &pdcnew_tune_drive; 589 hwif->tuneproc = &pdcnew_tune_drive;
326 hwif->quirkproc = &pdcnew_quirkproc; 590 hwif->quirkproc = &pdcnew_quirkproc;
327 hwif->speedproc = &pdcnew_new_tune_chipset; 591 hwif->speedproc = &pdcnew_tune_chipset;
328 hwif->resetproc = &pdcnew_new_reset; 592 hwif->resetproc = &pdcnew_reset;
329 593
330 hwif->drives[0].autotune = hwif->drives[1].autotune = 1; 594 hwif->drives[0].autotune = hwif->drives[1].autotune = 1;
331 595
@@ -337,11 +601,14 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif)
337 hwif->ide_dma_check = &pdcnew_config_drive_xfer_rate; 601 hwif->ide_dma_check = &pdcnew_config_drive_xfer_rate;
338 hwif->ide_dma_lostirq = &pdcnew_ide_dma_lostirq; 602 hwif->ide_dma_lostirq = &pdcnew_ide_dma_lostirq;
339 hwif->ide_dma_timeout = &pdcnew_ide_dma_timeout; 603 hwif->ide_dma_timeout = &pdcnew_ide_dma_timeout;
340 if (!(hwif->udma_four)) 604
341 hwif->udma_four = (pdcnew_new_cable_detect(hwif)) ? 0 : 1; 605 if (!hwif->udma_four)
606 hwif->udma_four = pdcnew_cable_detect(hwif) ? 0 : 1;
607
342 if (!noautodma) 608 if (!noautodma)
343 hwif->autodma = 1; 609 hwif->autodma = 1;
344 hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; 610 hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma;
611
345#if PDC202_DEBUG_CABLE 612#if PDC202_DEBUG_CABLE
346 printk(KERN_DEBUG "%s: %s-pin cable\n", 613 printk(KERN_DEBUG "%s: %s-pin cable\n",
347 hwif->name, hwif->udma_four ? "80" : "40"); 614 hwif->name, hwif->udma_four ? "80" : "40");