|
|
1.1 root 1: /*
2: * linux/drivers/block/triton.c Version 1.13 Aug 12, 1996
1.1.1.2 ! root 3: * Version 1.13a June 1998 - new chipsets
! 4: * Version 1.13b July 1998 - DMA blacklist
! 5: * Version 1.14 June 22, 1999
1.1 root 6: *
1.1.1.2 ! root 7: * Copyright (c) 1998-1999 Andre Hedrick
1.1 root 8: * Copyright (c) 1995-1996 Mark Lord
9: * May be copied or modified under the terms of the GNU General Public License
10: */
11:
12: /*
1.1.1.2 ! root 13: * This module provides support for Bus Master IDE DMA functions in various
! 14: * motherboard chipsets and PCI controller cards.
! 15: * Please check /Documentation/ide.txt and /Documentation/udma.txt for details.
1.1 root 16: */
1.1.1.2 ! root 17:
1.1 root 18: #include <linux/config.h>
19: #include <linux/types.h>
20: #include <linux/kernel.h>
21: #include <linux/timer.h>
22: #include <linux/mm.h>
23: #include <linux/ioport.h>
24: #include <linux/interrupt.h>
25: #include <linux/blkdev.h>
26: #include <linux/hdreg.h>
27: #include <linux/pci.h>
28: #include <linux/bios32.h>
29:
30: #include <asm/io.h>
31: #include <asm/dma.h>
1.1.1.2 ! root 32: #include <asm/irq.h>
1.1 root 33:
34: #include "ide.h"
35:
36: #undef DISPLAY_TRITON_TIMINGS /* define this to display timings */
1.1.1.2 ! root 37: #undef DISPLAY_APOLLO_TIMINGS /* define this for extensive debugging information */
! 38: #undef DISPLAY_ALI15X3_TIMINGS /* define this for extensive debugging information */
! 39:
! 40: #if defined(CONFIG_PROC_FS)
! 41: #include <linux/stat.h>
! 42: #include <linux/proc_fs.h>
! 43: #ifdef DISPLAY_APOLLO_TIMINGS
! 44: #include <linux/via_ide_dma.h>
! 45: #endif
! 46: #ifdef DISPLAY_ALI15X3_TIMINGS
! 47: #include <linux/ali_ide_dma.h>
! 48: #endif
! 49: #endif
1.1 root 50:
51: /*
52: * good_dma_drives() lists the model names (from "hdparm -i")
53: * of drives which do not support mword2 DMA but which are
54: * known to work fine with this interface under Linux.
55: */
56: const char *good_dma_drives[] = {"Micropolis 2112A",
57: "CONNER CTMA 4000",
58: "CONNER CTT8000-A",
1.1.1.2 ! root 59: "QEMU HARDDISK",
! 60: NULL};
! 61:
! 62: /*
! 63: * bad_dma_drives() lists the model names (from "hdparm -i")
! 64: * of drives which supposedly support (U)DMA but which are
! 65: * known to corrupt data with this interface under Linux.
! 66: *
! 67: * Note: the list was generated by statistical analysis of problem
! 68: * reports. It's not clear if there are problems with the drives,
! 69: * or with some combination of drive/controller or what.
! 70: *
! 71: * You can forcibly override this if you wish. This is the kernel
! 72: * 'Tread carefully' list.
! 73: *
! 74: * Finally see http://www.wdc.com/quality/err-rec.html if you have
! 75: * one of the listed drives.
! 76: */
! 77: const char *bad_dma_drives[] = {"WDC AC11000H",
! 78: "WDC AC22100H",
! 79: "WDC AC32500H",
! 80: "WDC AC33100H",
1.1 root 81: NULL};
82:
83: /*
84: * Our Physical Region Descriptor (PRD) table should be large enough
85: * to handle the biggest I/O request we are likely to see. Since requests
86: * can have no more than 256 sectors, and since the typical blocksize is
87: * two sectors, we could get by with a limit of 128 entries here for the
88: * usual worst case. Most requests seem to include some contiguous blocks,
89: * further reducing the number of table entries required.
90: *
91: * The driver reverts to PIO mode for individual requests that exceed
92: * this limit (possible with 512 byte blocksizes, eg. MSDOS f/s), so handling
93: * 100% of all crazy scenarios here is not necessary.
94: *
95: * As it turns out though, we must allocate a full 4KB page for this,
96: * so the two PRD tables (ide0 & ide1) will each get half of that,
97: * allowing each to have about 256 entries (8 bytes each) from this.
98: */
99: #define PRD_BYTES 8
100: #define PRD_ENTRIES (PAGE_SIZE / (2 * PRD_BYTES))
101: #define DEFAULT_BMIBA 0xe800 /* in case BIOS did not init it */
1.1.1.2 ! root 102: #define DEFAULT_BMCRBA 0xcc00 /* VIA's default value */
! 103: #define DEFAULT_BMALIBA 0xd400 /* ALI's default value */
1.1 root 104:
105: /*
106: * dma_intr() is the handler for disk read/write DMA interrupts
107: */
108: static void dma_intr (ide_drive_t *drive)
109: {
110: byte stat, dma_stat;
111: int i;
112: struct request *rq = HWGROUP(drive)->rq;
113: unsigned short dma_base = HWIF(drive)->dma_base;
114:
115: dma_stat = inb(dma_base+2); /* get DMA status */
116: outb(inb(dma_base)&~1, dma_base); /* stop DMA operation */
117: stat = GET_STAT(); /* get drive status */
118: if (OK_STAT(stat,DRIVE_READY,drive->bad_wstat|DRQ_STAT)) {
119: if ((dma_stat & 7) == 4) { /* verify good DMA status */
120: rq = HWGROUP(drive)->rq;
121: for (i = rq->nr_sectors; i > 0;) {
122: i -= rq->current_nr_sectors;
123: ide_end_request(1, HWGROUP(drive));
124: }
125: return;
126: }
127: printk("%s: bad DMA status: 0x%02x\n", drive->name, dma_stat);
128: }
129: sti();
130: ide_error(drive, "dma_intr", stat);
131: }
132:
133: /*
134: * build_dmatable() prepares a dma request.
135: * Returns 0 if all went okay, returns 1 otherwise.
136: */
137: static int build_dmatable (ide_drive_t *drive)
138: {
139: struct request *rq = HWGROUP(drive)->rq;
140: struct buffer_head *bh = rq->bh;
141: unsigned long size, addr, *table = HWIF(drive)->dmatable;
142: unsigned int count = 0;
143:
144: do {
145: /*
146: * Determine addr and size of next buffer area. We assume that
147: * individual virtual buffers are always composed linearly in
148: * physical memory. For example, we assume that any 8kB buffer
149: * is always composed of two adjacent physical 4kB pages rather
150: * than two possibly non-adjacent physical 4kB pages.
151: */
152: if (bh == NULL) { /* paging and tape requests have (rq->bh == NULL) */
153: addr = virt_to_bus (rq->buffer);
154: #ifdef CONFIG_BLK_DEV_IDETAPE
155: if (drive->media == ide_tape)
156: size = drive->tape.pc->request_transfer;
157: else
158: #endif /* CONFIG_BLK_DEV_IDETAPE */
159: size = rq->nr_sectors << 9;
160: } else {
161: /* group sequential buffers into one large buffer */
162: addr = virt_to_bus (bh->b_data);
163: size = bh->b_size;
164: while ((bh = bh->b_reqnext) != NULL) {
165: if ((addr + size) != virt_to_bus (bh->b_data))
166: break;
167: size += bh->b_size;
168: }
169: }
170:
171: /*
172: * Fill in the dma table, without crossing any 64kB boundaries.
173: * We assume 16-bit alignment of all blocks.
174: */
175: while (size) {
176: if (++count >= PRD_ENTRIES) {
177: printk("%s: DMA table too small\n", drive->name);
178: return 1; /* revert to PIO for this request */
179: } else {
180: unsigned long bcount = 0x10000 - (addr & 0xffff);
181: if (bcount > size)
182: bcount = size;
183: *table++ = addr;
184: *table++ = bcount & 0xffff;
185: addr += bcount;
186: size -= bcount;
187: }
188: }
189: } while (bh != NULL);
190: if (count) {
191: *--table |= 0x80000000; /* set End-Of-Table (EOT) bit */
192: return 0;
193: }
194: printk("%s: empty DMA table?\n", drive->name);
195: return 1; /* let the PIO routines handle this weirdness */
196: }
197:
1.1.1.2 ! root 198: /*
! 199: * We will only enable drives with multi-word (mode2) (U)DMA capabilities,
! 200: * and ignore the very rare cases of drives that can only do single-word
! 201: * (modes 0 & 1) (U)DMA transfers. We also discard "blacklisted" hard disks.
! 202: */
1.1 root 203: static int config_drive_for_dma (ide_drive_t *drive)
204: {
1.1.1.2 ! root 205: #ifndef CONFIG_BLK_DEV_FORCE_DMA
1.1 root 206: const char **list;
207: struct hd_driveid *id = drive->id;
1.1.1.2 ! root 208: #endif
! 209:
! 210: #ifdef CONFIG_BLK_DEV_FORCE_DMA
! 211: drive->using_dma = 1;
! 212: return 0;
! 213: #else
! 214: if (HWIF(drive)->chipset == ide_hpt343) {
! 215: drive->using_dma = 0; /* no DMA */
! 216: return 1; /* DMA disabled */
! 217: }
1.1 root 218:
219: if (id && (id->capability & 1)) {
1.1.1.2 ! root 220: /* Consult the list of known "bad" drives */
! 221: list = bad_dma_drives;
! 222: while (*list) {
! 223: if (!strcmp(*list++,id->model)) {
! 224: drive->using_dma = 0; /* no DMA */
! 225: printk("ide: Disabling DMA modes on %s drive (%s).\n", drive->name, id->model);
! 226: return 1; /* DMA disabled */
! 227: }
! 228: }
! 229: /* Enable DMA on any drive that has mode 4 or 2 UltraDMA enabled */
! 230: if (id->field_valid & 4) { /* UltraDMA */
! 231: /* Enable DMA on any drive that has mode 4 UltraDMA enabled */
! 232: if (((id->dma_ultra & 0x1010) == 0x1010) &&
! 233: (id->word93 & 0x2000) &&
! 234: (HWIF(drive)->chipset == ide_ultra66)) {
! 235: drive->using_dma = 1;
! 236: return 0; /* DMA enabled */
! 237: } else
! 238: /* Enable DMA on any drive that has mode 2 UltraDMA enabled */
! 239: if ((id->dma_ultra & 0x404) == 0x404) {
1.1 root 240: drive->using_dma = 1;
1.1.1.2 ! root 241: return 0; /* DMA enabled */
1.1 root 242: }
1.1.1.2 ! root 243: }
! 244: /* Enable DMA on any drive that has mode2 DMA enabled */
1.1 root 245: if (id->field_valid & 2) /* regular DMA */
1.1.1.2 ! root 246: if ((id->dma_mword & 0x404) == 0x404) {
1.1 root 247: drive->using_dma = 1;
1.1.1.2 ! root 248: return 0; /* DMA enabled */
1.1 root 249: }
250: /* Consult the list of known "good" drives */
251: list = good_dma_drives;
252: while (*list) {
253: if (!strcmp(*list++,id->model)) {
254: drive->using_dma = 1;
255: return 0; /* DMA enabled */
256: }
257: }
258: }
259: return 1; /* DMA not enabled */
1.1.1.2 ! root 260: #endif
1.1 root 261: }
262:
263: /*
264: * triton_dmaproc() initiates/aborts DMA read/write operations on a drive.
265: *
266: * The caller is assumed to have selected the drive and programmed the drive's
267: * sector address using CHS or LBA. All that remains is to prepare for DMA
268: * and then issue the actual read/write DMA/PIO command to the drive.
269: *
270: * For ATAPI devices, we just prepare for DMA and return. The caller should
271: * then issue the packet command to the drive and call us again with
272: * ide_dma_begin afterwards.
273: *
274: * Returns 0 if all went well.
275: * Returns 1 if DMA read/write could not be started, in which case
276: * the caller should revert to PIO for the current request.
277: */
278: static int triton_dmaproc (ide_dma_action_t func, ide_drive_t *drive)
279: {
280: unsigned long dma_base = HWIF(drive)->dma_base;
281: unsigned int reading = (1 << 3);
282:
283: switch (func) {
284: case ide_dma_abort:
285: outb(inb(dma_base)&~1, dma_base); /* stop DMA */
286: return 0;
287: case ide_dma_check:
288: return config_drive_for_dma (drive);
289: case ide_dma_write:
290: reading = 0;
291: case ide_dma_read:
292: break;
293: case ide_dma_status_bad:
294: return ((inb(dma_base+2) & 7) != 4); /* verify good DMA status */
295: case ide_dma_transferred:
296: #if 0
297: return (number of bytes actually transferred);
298: #else
299: return (0);
300: #endif
301: case ide_dma_begin:
302: outb(inb(dma_base)|1, dma_base); /* begin DMA */
303: return 0;
304: default:
305: printk("triton_dmaproc: unsupported func: %d\n", func);
306: return 1;
307: }
308: if (build_dmatable (drive))
309: return 1;
310: outl(virt_to_bus (HWIF(drive)->dmatable), dma_base + 4); /* PRD table */
311: outb(reading, dma_base); /* specify r/w */
312: outb(inb(dma_base+2)|0x06, dma_base+2); /* clear status bits */
313: #ifdef CONFIG_BLK_DEV_IDEATAPI
314: if (drive->media != ide_disk)
315: return 0;
316: #endif /* CONFIG_BLK_DEV_IDEATAPI */
317: ide_set_handler(drive, &dma_intr, WAIT_CMD); /* issue cmd to drive */
318: OUT_BYTE(reading ? WIN_READDMA : WIN_WRITEDMA, IDE_COMMAND_REG);
319: outb(inb(dma_base)|1, dma_base); /* begin DMA */
320: return 0;
321: }
322:
323: #ifdef DISPLAY_TRITON_TIMINGS
324: /*
325: * print_triton_drive_flags() displays the currently programmed options
326: * in the i82371 (Triton) for a given drive.
327: *
328: * If fastDMA is "no", then slow ISA timings are used for DMA data xfers.
329: * If fastPIO is "no", then slow ISA timings are used for PIO data xfers.
330: * If IORDY is "no", then IORDY is assumed to always be asserted.
331: * If PreFetch is "no", then data pre-fetch/post are not used.
332: *
333: * When "fastPIO" and/or "fastDMA" are "yes", then faster PCI timings and
334: * back-to-back 16-bit data transfers are enabled, using the sample_CLKs
335: * and recovery_CLKs (PCI clock cycles) timing parameters for that interface.
336: */
337: static void print_triton_drive_flags (unsigned int unit, byte flags)
338: {
339: printk(" %s ", unit ? "slave :" : "master:");
340: printk( "fastDMA=%s", (flags&9) ? "on " : "off");
341: printk(" PreFetch=%s", (flags&4) ? "on " : "off");
342: printk(" IORDY=%s", (flags&2) ? "on " : "off");
343: printk(" fastPIO=%s\n", ((flags&9)==1) ? "on " : "off");
344: }
345: #endif /* DISPLAY_TRITON_TIMINGS */
346:
347: static void init_triton_dma (ide_hwif_t *hwif, unsigned short base)
348: {
349: static unsigned long dmatable = 0;
350:
351: printk(" %s: BM-DMA at 0x%04x-0x%04x", hwif->name, base, base+7);
352: if (check_region(base, 8)) {
353: printk(" -- ERROR, PORTS ALREADY IN USE");
354: } else {
355: request_region(base, 8, "IDE DMA");
356: hwif->dma_base = base;
357: if (!dmatable) {
358: /*
359: * The BM-DMA uses a full 32-bits, so we can
360: * safely use __get_free_page() here instead
361: * of __get_dma_pages() -- no ISA limitations.
362: */
363: dmatable = __get_free_pages(GFP_KERNEL, 1, 0);
364: }
365: if (dmatable) {
366: hwif->dmatable = (unsigned long *) dmatable;
367: dmatable += (PRD_ENTRIES * PRD_BYTES);
368: outl(virt_to_bus(hwif->dmatable), base + 4);
369: hwif->dmaproc = &triton_dmaproc;
370: }
371: }
372: printk("\n");
373: }
374:
375: /*
1.1.1.2 ! root 376: * Set VIA Chipset Timings for (U)DMA modes enabled.
! 377: */
! 378: static int set_via_timings (byte bus, byte fn, byte post, byte flush)
! 379: {
! 380: byte via_config = 0;
! 381: int rc = 0;
! 382:
! 383: /* setting IDE read prefetch buffer and IDE post write buffer */
! 384: if ((rc = pcibios_read_config_byte(bus, fn, 0x41, &via_config)))
! 385: return (1);
! 386: if ((rc = pcibios_write_config_byte(bus, fn, 0x41, via_config | post)))
! 387: return (1);
! 388:
! 389: /* setting Channel read and End-of-sector FIFO flush: */
! 390: if ((rc = pcibios_read_config_byte(bus, fn, 0x46, &via_config)))
! 391: return (1);
! 392: if ((rc = pcibios_write_config_byte(bus, fn, 0x46, via_config | flush)))
! 393: return (1);
! 394:
! 395: return (0);
! 396: }
! 397:
! 398: static int setup_aladdin (byte bus, byte fn)
! 399: {
! 400: byte confreg0 = 0, confreg1 = 0, progif = 0;
! 401: int errors = 0;
! 402:
! 403: if (pcibios_read_config_byte(bus, fn, 0x50, &confreg1))
! 404: goto veryspecialsettingserror;
! 405: if (!(confreg1 & 0x02))
! 406: if (pcibios_write_config_byte(bus, fn, 0x50, confreg1 | 0x02))
! 407: goto veryspecialsettingserror;
! 408:
! 409: if (pcibios_read_config_byte(bus, fn, 0x09, &progif))
! 410: goto veryspecialsettingserror;
! 411: if (!(progif & 0x40)) {
! 412: /*
! 413: * The way to enable them is to set progif
! 414: * writable at 0x4Dh register, and set bit 6
! 415: * of progif to 1:
! 416: */
! 417: if (pcibios_read_config_byte(bus, fn, 0x4d, &confreg0))
! 418: goto veryspecialsettingserror;
! 419: if (confreg0 & 0x80)
! 420: if (pcibios_write_config_byte(bus, fn, 0x4d, confreg0 & ~0x80))
! 421: goto veryspecialsettingserror;
! 422: if (pcibios_write_config_byte(bus, fn, 0x09, progif | 0x40))
! 423: goto veryspecialsettingserror;
! 424: if (confreg0 & 0x80)
! 425: if (pcibios_write_config_byte(bus, fn, 0x4d, confreg0))
! 426: errors++;
! 427: }
! 428:
! 429: if ((pcibios_read_config_byte(bus, fn, 0x09, &progif)) || (!(progif & 0x40)))
! 430: goto veryspecialsettingserror;
! 431:
! 432: printk("ide: ALI15X3: enabled read of IDE channels state (en/dis-abled) %s.\n",
! 433: errors ? "with Error(s)" : "Succeeded" );
! 434: return 1;
! 435: veryspecialsettingserror:
! 436: printk("ide: ALI15X3: impossible to enable read of IDE channels state (en/dis-abled)!\n");
! 437: return 0;
! 438: }
! 439:
! 440: void set_promise_hpt343_extra (unsigned short device, unsigned int bmiba)
! 441: {
! 442: switch(device) {
! 443: case PCI_DEVICE_ID_PROMISE_20246:
! 444: if(!check_region((bmiba+16), 16))
! 445: request_region((bmiba+16), 16, "PDC20246");
! 446: break;
! 447: case PCI_DEVICE_ID_PROMISE_20262:
! 448: if (!check_region((bmiba+48), 48))
! 449: request_region((bmiba+48), 48, "PDC20262");
! 450: break;
! 451: case PCI_DEVICE_ID_TTI_HPT343:
! 452: if(!check_region((bmiba+16), 16))
! 453: request_region((bmiba+16), 16, "HPT343");
! 454: break;
! 455: default:
! 456: break;
! 457: }
! 458: }
! 459:
! 460: #define HPT343_PCI_INIT_REG 0x80
! 461:
! 462: /*
1.1 root 463: * ide_init_triton() prepares the IDE driver for DMA operation.
464: * This routine is called once, from ide.c during driver initialization,
1.1.1.2 ! root 465: * for each BM-DMA chipset which is found (rarely more than one).
1.1 root 466: */
467: void ide_init_triton (byte bus, byte fn)
468: {
1.1.1.2 ! root 469: byte bridgebus, bridgefn, bridgeset = 0, hpt34x_flag = 0;
! 470: unsigned char irq = 0;
! 471: int dma_enabled = 0, rc = 0, h;
! 472: unsigned short io[6], count = 0, step_count = 0, pass_count = 0;
! 473: unsigned short pcicmd, vendor, device, class;
! 474: unsigned int bmiba, timings, reg, tmp;
! 475: unsigned int addressbios = 0;
! 476: unsigned long flags;
! 477: unsigned index;
! 478:
! 479: #if defined(DISPLAY_APOLLO_TIMINGS) || defined(DISPLAY_ALI15X3_TIMINGS)
! 480: bmide_bus = bus;
! 481: bmide_fn = fn;
! 482: #endif /* DISPLAY_APOLLO_TIMINGS || DISPLAY_ALI15X3_TIMINGS */
! 483:
! 484: /*
! 485: * We pick up the vendor, device, and class info for selecting the correct
! 486: * controller that is supported. Since we can access this routine more than
! 487: * once with the use of onboard and off-board EIDE controllers, a method
! 488: * of determining "who is who for what" is needed.
! 489: */
! 490:
! 491: pcibios_read_config_word (bus, fn, PCI_VENDOR_ID, &vendor);
! 492: pcibios_read_config_word (bus, fn, PCI_DEVICE_ID, &device);
! 493: pcibios_read_config_word (bus, fn, PCI_CLASS_DEVICE, &class);
! 494: pcibios_read_config_byte (bus, fn, PCI_INTERRUPT_LINE, &irq);
! 495:
! 496: switch(vendor) {
! 497: case PCI_VENDOR_ID_INTEL:
! 498: printk("ide: Intel 82371 ");
! 499: switch(device) {
! 500: case PCI_DEVICE_ID_INTEL_82371_0:
! 501: printk("PIIX (single FIFO) ");
! 502: break;
! 503: case PCI_DEVICE_ID_INTEL_82371SB_1:
! 504: printk("PIIX3 (dual FIFO) ");
! 505: break;
! 506: case PCI_DEVICE_ID_INTEL_82371AB:
! 507: printk("PIIX4 (dual FIFO) ");
! 508: break;
! 509: default:
! 510: printk(" (unknown) 0x%04x ", device);
! 511: break;
! 512: }
! 513: printk("DMA Bus Mastering IDE ");
! 514: break;
! 515: case PCI_VENDOR_ID_SI:
! 516: printk("ide: SiS 5513 (dual FIFO) DMA Bus Mastering IDE ");
! 517: break;
! 518: case PCI_VENDOR_ID_VIA:
! 519: printk("ide: VIA VT82C586B (split FIFO) UDMA Bus Mastering IDE ");
! 520: break;
! 521: case PCI_VENDOR_ID_TTI:
! 522: /*PCI_CLASS_STORAGE_UNKNOWN == class */
! 523: if (device == PCI_DEVICE_ID_TTI_HPT343) {
! 524: pcibios_write_config_byte(bus, fn, HPT343_PCI_INIT_REG, 0x00);
! 525: pcibios_read_config_word(bus, fn, PCI_COMMAND, &pcicmd);
! 526: hpt34x_flag = (pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0;
! 527: #if 1
! 528: if (!hpt34x_flag) {
! 529: save_flags(flags);
! 530: cli();
! 531: pcibios_write_config_word(bus, fn, PCI_COMMAND, pcicmd & ~PCI_COMMAND_IO);
! 532: pcibios_read_config_dword(bus, fn, PCI_BASE_ADDRESS_4, &bmiba);
! 533: pcibios_write_config_dword(bus, fn, PCI_BASE_ADDRESS_0, bmiba | 0x20);
! 534: pcibios_write_config_dword(bus, fn, PCI_BASE_ADDRESS_1, bmiba | 0x34);
! 535: pcibios_write_config_dword(bus, fn, PCI_BASE_ADDRESS_2, bmiba | 0x28);
! 536: pcibios_write_config_dword(bus, fn, PCI_BASE_ADDRESS_3, bmiba | 0x3c);
! 537: pcibios_write_config_word(bus, fn, PCI_COMMAND, pcicmd);
! 538: bmiba = 0;
! 539: restore_flags(flags);
! 540: }
! 541: #endif
! 542: pcibios_write_config_byte(bus, fn, PCI_LATENCY_TIMER, 0x20);
! 543: goto hpt343_jump_in;
! 544: } else {
! 545: printk("ide: HPTXXX did == 0x%04X unsupport chipset error.\n", device);
! 546: return;
! 547: }
! 548: case PCI_VENDOR_ID_PROMISE:
! 549: /*
! 550: * I have been able to make my Promise Ultra33 UDMA card change class.
! 551: * It has reported as both PCI_CLASS_STORAGE_RAID and PCI_CLASS_STORAGE_IDE.
! 552: * Since the PCI_CLASS_STORAGE_RAID mode should automatically mirror the
! 553: * two halves of the PCI_CONFIG register data, but sometimes it forgets.
! 554: * Thus we guarantee that they are identical, with a quick check and
! 555: * correction if needed.
! 556: * PDC20246 (primary) PDC20247 (secondary) IDE hwif's.
! 557: *
! 558: * PDC20262 Promise Ultra66 UDMA.
! 559: *
! 560: * Note that Promise "stories,fibs,..." about this device not being
! 561: * capable of ATAPI and AT devices.
! 562: */
! 563: if (class != PCI_CLASS_STORAGE_IDE) {
! 564: unsigned char irq_mirror = 0;
! 565:
! 566: pcibios_read_config_byte(bus, fn, (PCI_INTERRUPT_LINE)|0x80, &irq_mirror);
! 567: if (irq != irq_mirror) {
! 568: pcibios_write_config_byte(bus, fn, (PCI_INTERRUPT_LINE)|0x80, irq);
! 569: }
! 570: }
! 571: case PCI_VENDOR_ID_ARTOP:
! 572: /* PCI_CLASS_STORAGE_SCSI == class */
! 573: /*
! 574: * I have found that by stroking rom_enable_bit on both the AEC6210U/UF and
! 575: * PDC20246 controller cards, the features desired are almost guaranteed
! 576: * to be enabled and compatible. This ROM may not be registered in the
! 577: * config data, but it can be turned on. Registration failure has only
! 578: * been observed if and only if Linux sets up the pci_io_address in the
! 579: * 0x6000 range. If they are setup in the 0xef00 range it is reported.
! 580: * WHY??? got me.........
! 581: */
! 582: hpt343_jump_in:
! 583: printk("ide: %s UDMA Bus Mastering ",
! 584: (device == PCI_DEVICE_ID_ARTOP_ATP850UF) ? "AEC6210" :
! 585: (device == PCI_DEVICE_ID_PROMISE_20246) ? "PDC20246" :
! 586: (device == PCI_DEVICE_ID_PROMISE_20262) ? "PDC20262" :
! 587: (hpt34x_flag && (device == PCI_DEVICE_ID_TTI_HPT343)) ? "HPT345" :
! 588: (device == PCI_DEVICE_ID_TTI_HPT343) ? "HPT343" : "UNKNOWN");
! 589: pcibios_read_config_dword(bus, fn, PCI_ROM_ADDRESS, &addressbios);
! 590: if (addressbios) {
! 591: pcibios_write_config_byte(bus, fn, PCI_ROM_ADDRESS, addressbios | PCI_ROM_ADDRESS_ENABLE);
! 592: printk("with ROM enabled at 0x%08x", addressbios);
! 593: }
! 594: /*
! 595: * This was stripped out of 2.1.XXX kernel code and parts from a patch called
! 596: * promise_update. This finds the PCI_BASE_ADDRESS spaces and makes them
! 597: * available for configuration later.
! 598: * PCI_BASE_ADDRESS_0 hwif0->io_base
! 599: * PCI_BASE_ADDRESS_1 hwif0->ctl_port
! 600: * PCI_BASE_ADDRESS_2 hwif1->io_base
! 601: * PCI_BASE_ADDRESS_3 hwif1->ctl_port
! 602: * PCI_BASE_ADDRESS_4 bmiba
! 603: */
! 604: memset(io, 0, 6 * sizeof(unsigned short));
! 605: for (reg = PCI_BASE_ADDRESS_0; reg <= PCI_BASE_ADDRESS_5; reg += 4) {
! 606: pcibios_read_config_dword(bus, fn, reg, &tmp);
! 607: if (tmp & PCI_BASE_ADDRESS_SPACE_IO)
! 608: io[count++] = tmp & PCI_BASE_ADDRESS_IO_MASK;
! 609: }
! 610: break;
! 611: case PCI_VENDOR_ID_AL:
! 612: save_flags(flags);
! 613: cli();
! 614: for (index = 0; !pcibios_find_device (PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, index, &bridgebus, &bridgefn); ++index) {
! 615: bridgeset = setup_aladdin(bus, fn);
! 616: }
! 617: restore_flags(flags);
! 618: printk("ide: ALI15X3 (dual FIFO) DMA Bus Mastering IDE ");
! 619: break;
! 620: default:
! 621: return;
! 622: }
! 623:
! 624: printk("\n Controller on PCI bus %d function %d\n", bus, fn);
1.1 root 625:
626: /*
627: * See if IDE and BM-DMA features are enabled:
628: */
1.1.1.2 ! root 629: if ((rc = pcibios_read_config_word(bus, fn, PCI_COMMAND, &pcicmd)))
1.1 root 630: goto quit;
631: if ((pcicmd & 1) == 0) {
632: printk("ide: ports are not enabled (BIOS)\n");
633: goto quit;
634: }
635: if ((pcicmd & 4) == 0) {
1.1.1.2 ! root 636: printk("ide: BM-DMA feature is not enabled (BIOS), enabling\n");
! 637: pcicmd |= 4;
! 638: pcibios_write_config_word(bus, fn, 0x04, pcicmd);
! 639: if ((rc = pcibios_read_config_word(bus, fn, 0x04, &pcicmd))) {
! 640: printk("ide: Couldn't read back PCI command\n");
! 641: goto quit;
! 642: }
! 643: }
! 644:
! 645: if ((pcicmd & 4) == 0) {
! 646: printk("ide: BM-DMA feature couldn't be enabled\n");
1.1 root 647: } else {
648: /*
649: * Get the bmiba base address
650: */
651: int try_again = 1;
652: do {
1.1.1.2 ! root 653: if ((rc = pcibios_read_config_dword(bus, fn, PCI_BASE_ADDRESS_4, &bmiba)))
1.1 root 654: goto quit;
655: bmiba &= 0xfff0; /* extract port base address */
656: if (bmiba) {
657: dma_enabled = 1;
658: break;
659: } else {
1.1.1.2 ! root 660: printk("ide: BM-DMA base register is invalid (0x%04x, PnP BIOS problem)\n", bmiba);
! 661: if (inb(((vendor == PCI_VENDOR_ID_AL) ? DEFAULT_BMALIBA :
! 662: (vendor == PCI_VENDOR_ID_VIA) ? DEFAULT_BMCRBA :
! 663: DEFAULT_BMIBA)) != 0xff || !try_again)
1.1 root 664: break;
1.1.1.2 ! root 665: printk("ide: setting BM-DMA base register to 0x%04x\n",
! 666: ((vendor == PCI_VENDOR_ID_AL) ? DEFAULT_BMALIBA :
! 667: (vendor == PCI_VENDOR_ID_VIA) ? DEFAULT_BMCRBA :
! 668: DEFAULT_BMIBA));
! 669: if ((rc = pcibios_write_config_word(bus, fn, PCI_COMMAND, pcicmd&~1)))
1.1 root 670: goto quit;
1.1.1.2 ! root 671: rc = pcibios_write_config_dword(bus, fn, 0x20,
! 672: ((vendor == PCI_VENDOR_ID_AL) ? DEFAULT_BMALIBA :
! 673: (vendor == PCI_VENDOR_ID_VIA) ? DEFAULT_BMCRBA :
! 674: DEFAULT_BMIBA)|1);
! 675: if (pcibios_write_config_word(bus, fn, PCI_COMMAND, pcicmd|5) || rc)
1.1 root 676: goto quit;
677: }
678: } while (try_again--);
679: }
680:
681: /*
682: * See if ide port(s) are enabled
683: */
1.1.1.2 ! root 684: if ((rc = pcibios_read_config_dword(bus, fn,
! 685: (vendor == PCI_VENDOR_ID_PROMISE) ? 0x50 :
! 686: (vendor == PCI_VENDOR_ID_ARTOP) ? 0x54 :
! 687: (vendor == PCI_VENDOR_ID_SI) ? 0x48 :
! 688: (vendor == PCI_VENDOR_ID_AL) ? 0x08 :
! 689: 0x40, &timings)))
1.1 root 690: goto quit;
1.1.1.2 ! root 691: /*
! 692: * We do a vendor check since the Ultra33/66 and AEC6210
! 693: * holds their timings in a different location.
! 694: */
! 695: #if 0
! 696: printk("ide: timings == %08x\n", timings);
! 697: #endif
! 698: /*
! 699: * The switch preserves some stuff that was original.
! 700: */
! 701: switch(vendor) {
! 702: case PCI_VENDOR_ID_INTEL:
! 703: if (!(timings & 0x80008000)) {
! 704: printk("ide: INTEL: neither port is enabled\n");
! 705: goto quit;
! 706: }
! 707: break;
! 708: case PCI_VENDOR_ID_VIA:
! 709: if(!(timings & 0x03)) {
! 710: printk("ide: VIA: neither port is enabled\n");
! 711: goto quit;
! 712: }
! 713: break;
! 714: case PCI_VENDOR_ID_AL:
! 715: timings <<= 16;
! 716: timings >>= 24;
! 717: if (!(timings & 0x30)) {
! 718: printk("ide: ALI15X3: neither port is enabled\n");
! 719: goto quit;
! 720: }
! 721: break;
! 722: case PCI_VENDOR_ID_SI:
! 723: timings <<= 8;
! 724: timings >>= 24;
! 725: if (!(timings & 0x06)) {
! 726: printk("ide: SIS5513: neither port is enabled\n");
! 727: goto quit;
! 728: }
! 729: break;
! 730: case PCI_VENDOR_ID_PROMISE:
! 731: printk(" (U)DMA Burst Bit %sABLED " \
! 732: "Primary %s Mode " \
! 733: "Secondary %s Mode.\n",
! 734: (inb(bmiba + 0x001f) & 1) ? "EN" : "DIS",
! 735: (inb(bmiba + 0x001a) & 1) ? "MASTER" : "PCI",
! 736: (inb(bmiba + 0x001b) & 1) ? "MASTER" : "PCI" );
! 737: #if 0
! 738: if (!(inb(bmiba + 0x001f) & 1)) {
! 739: outb(inb(bmiba + 0x001f)|0x01, (bmiba + 0x001f));
! 740: printk(" (U)DMA Burst Bit Forced %sABLED.\n",
! 741: (inb(bmiba + 0x001f) & 1) ? "EN" : "DIS");
! 742: }
! 743: #endif
! 744: break;
! 745: case PCI_VENDOR_ID_ARTOP:
! 746: case PCI_VENDOR_ID_TTI:
! 747: default:
! 748: break;
! 749: }
1.1 root 750:
751: /*
752: * Save the dma_base port addr for each interface
753: */
754: for (h = 0; h < MAX_HWIFS; ++h) {
1.1.1.2 ! root 755: ide_hwif_t *hwif = &ide_hwifs[h];
! 756: byte channel = ((h == 1) || (h == 3) || (h == 5)) ? 1 : 0;
! 757:
! 758: /*
! 759: * This prevents the first contoller from accidentally
! 760: * initalizing the hwif's that it does not use and block
! 761: * an off-board ide-pci from getting in the game.
! 762: */
! 763: if ((step_count >= 2) || (pass_count >= 2)) {
! 764: goto quit;
! 765: }
! 766:
! 767: #if 0
! 768: if (hwif->chipset == ide_unknown)
! 769: printk("ide: index == %d channel(%d)\n", h, channel);
! 770: #endif
! 771:
! 772: #ifdef CONFIG_BLK_DEV_OFFBOARD
! 773: /*
! 774: * This is a forced override for the onboard ide controller
! 775: * to be enabled, if one chooses to have an offboard ide-pci
! 776: * card as the primary booting device. This beasty is
! 777: * for offboard UDMA upgrades with hard disks, but saving
! 778: * the onboard DMA2 controllers for CDROMS, TAPES, ZIPS, etc...
! 779: */
! 780: if (((vendor == PCI_VENDOR_ID_INTEL) ||
! 781: (vendor == PCI_VENDOR_ID_SI) ||
! 782: (vendor == PCI_VENDOR_ID_VIA) ||
! 783: (vendor == PCI_VENDOR_ID_AL)) && (h >= 2)) {
! 784: hwif->io_base = channel ? 0x170 : 0x1f0;
! 785: hwif->ctl_port = channel ? 0x376 : 0x3f6;
! 786: hwif->irq = channel ? 15 : 14;
! 787: hwif->noprobe = 0;
! 788: }
! 789: #endif /* CONFIG_BLK_DEV_OFFBOARD */
! 790: /*
! 791: * If the chipset is listed as "ide_unknown", lets get a
! 792: * hwif while they last. This does the first check on
! 793: * the current availability of the ide_hwifs[h] in question.
! 794: */
! 795: if (hwif->chipset != ide_unknown) {
! 796: continue;
! 797: } else if (vendor == PCI_VENDOR_ID_INTEL) {
! 798: unsigned short time;
1.1 root 799: #ifdef DISPLAY_TRITON_TIMINGS
1.1.1.2 ! root 800: byte s_clks, r_clks;
! 801: unsigned short devid;
1.1 root 802: #endif /* DISPLAY_TRITON_TIMINGS */
1.1.1.2 ! root 803: pass_count++;
! 804: if (hwif->io_base == 0x1f0) {
! 805: time = timings & 0xffff;
! 806: if ((time & 0x8000) == 0) /* interface enabled? */
! 807: continue;
! 808: hwif->chipset = ide_triton;
! 809: if (dma_enabled)
! 810: init_triton_dma(hwif, bmiba);
! 811: step_count++;
! 812: } else if (hwif->io_base == 0x170) {
! 813: time = timings >> 16;
! 814: if ((time & 0x8000) == 0) /* interface enabled? */
! 815: continue;
! 816: hwif->chipset = ide_triton;
! 817: if (dma_enabled)
! 818: init_triton_dma(hwif, bmiba + 8);
! 819: step_count++;
! 820: } else {
1.1 root 821: continue;
1.1.1.2 ! root 822: }
1.1 root 823: #ifdef DISPLAY_TRITON_TIMINGS
1.1.1.2 ! root 824: s_clks = ((~time >> 12) & 3) + 2;
! 825: r_clks = ((~time >> 8) & 3) + 1;
! 826: printk(" %s timing: (0x%04x) sample_CLKs=%d, recovery_CLKs=%d\n",
! 827: hwif->name, time, s_clks, r_clks);
! 828: if ((time & 0x40) && !pcibios_read_config_word(bus, fn, PCI_DEVICE_ID, &devid)
! 829: && devid == PCI_DEVICE_ID_INTEL_82371SB_1) {
! 830: byte stime;
! 831: if (pcibios_read_config_byte(bus, fn, 0x44, &stime)) {
! 832: if (hwif->io_base == 0x1f0) {
! 833: s_clks = ~stime >> 6;
! 834: r_clks = ~stime >> 4;
! 835: } else {
! 836: s_clks = ~stime >> 2;
! 837: r_clks = ~stime;
! 838: }
! 839: s_clks = (s_clks & 3) + 2;
! 840: r_clks = (r_clks & 3) + 1;
! 841: printk(" slave: sample_CLKs=%d, recovery_CLKs=%d\n",
! 842: s_clks, r_clks);
! 843: }
! 844: }
! 845: print_triton_drive_flags (0, time & 0xf);
! 846: print_triton_drive_flags (1, (time >> 4) & 0xf);
! 847: #endif /* DISPLAY_TRITON_TIMINGS */
! 848: } else if (vendor == PCI_VENDOR_ID_SI) {
! 849: pass_count++;
! 850: if (hwif->io_base == 0x1f0) {
! 851: if ((timings & 0x02) == 0)
! 852: continue;
! 853: hwif->chipset = ide_triton;
! 854: if (dma_enabled)
! 855: init_triton_dma(hwif, bmiba);
! 856: step_count++;
! 857: } else if (hwif->io_base == 0x170) {
! 858: if ((timings & 0x04) == 0)
! 859: continue;
! 860: hwif->chipset = ide_triton;
! 861: if (dma_enabled)
! 862: init_triton_dma(hwif, bmiba + 8);
! 863: step_count++;
! 864: } else {
! 865: continue;
! 866: }
! 867: } else if (vendor == PCI_VENDOR_ID_VIA) {
! 868: pass_count++;
! 869: if (hwif->io_base == 0x1f0) {
! 870: if ((timings & 0x02) == 0)
! 871: continue;
! 872: hwif->chipset = ide_triton;
! 873: if (dma_enabled)
! 874: init_triton_dma(hwif, bmiba);
! 875: if (set_via_timings(bus, fn, 0xc0, 0xa0))
! 876: goto quit;
! 877: #ifdef DISPLAY_APOLLO_TIMINGS
! 878: proc_register_dynamic(&proc_root, &via_proc_entry);
! 879: #endif /* DISPLAY_APOLLO_TIMINGS */
! 880: step_count++;
! 881: } else if (hwif->io_base == 0x170) {
! 882: if ((timings & 0x01) == 0)
! 883: continue;
! 884: hwif->chipset = ide_triton;
! 885: if (dma_enabled)
! 886: init_triton_dma(hwif, bmiba + 8);
! 887: if (set_via_timings(bus, fn, 0x30, 0x50))
! 888: goto quit;
! 889: step_count++;
! 890: } else {
! 891: continue;
! 892: }
! 893: } else if (vendor == PCI_VENDOR_ID_AL) {
! 894: byte ideic, inmir;
! 895: byte irq_routing_table[] = { -1, 9, 3, 10, 4, 5, 7, 6,
! 896: 1, 11, 0, 12, 0, 14, 0, 15 };
! 897:
! 898: if (bridgeset) {
! 899: pcibios_read_config_byte(bridgebus, bridgefn, 0x58, &ideic);
! 900: ideic = ideic & 0x03;
! 901: if ((channel && ideic == 0x03) || (!channel && !ideic)) {
! 902: pcibios_read_config_byte(bridgebus, bridgefn, 0x44, &inmir);
! 903: inmir = inmir & 0x0f;
! 904: hwif->irq = irq_routing_table[inmir];
! 905: } else if (channel && !(ideic & 0x01)) {
! 906: pcibios_read_config_byte(bridgebus, bridgefn, 0x75, &inmir);
! 907: inmir = inmir & 0x0f;
! 908: hwif->irq = irq_routing_table[inmir];
! 909: }
! 910: }
! 911: pass_count++;
! 912: if (hwif->io_base == 0x1f0) {
! 913: if ((timings & 0x20) == 0)
! 914: continue;
! 915: hwif->chipset = ide_triton;
! 916: if (dma_enabled)
! 917: init_triton_dma(hwif, bmiba);
! 918: outb(inb(bmiba+2) & 0x60, bmiba+2);
! 919: if (inb(bmiba+2) & 0x80)
! 920: printk("ALI15X3: simplex device: DMA forced\n");
! 921: #ifdef DISPLAY_ALI15X3_TIMINGS
! 922: proc_register_dynamic(&proc_root, &ali_proc_entry);
! 923: #endif /* DISPLAY_ALI15X3_TIMINGS */
! 924: step_count++;
! 925: } else if (hwif->io_base == 0x170) {
! 926: if ((timings & 0x10) == 0)
! 927: continue;
! 928: hwif->chipset = ide_triton;
! 929: if (dma_enabled)
! 930: init_triton_dma(hwif, bmiba + 8);
! 931: outb(inb(bmiba+10) & 0x60, bmiba+10);
! 932: if (inb(bmiba+10) & 0x80)
! 933: printk("ALI15X3: simplex device: DMA forced\n");
! 934: step_count++;
! 935: } else {
! 936: continue;
! 937: }
! 938: } else if ((vendor == PCI_VENDOR_ID_PROMISE) ||
! 939: (vendor == PCI_VENDOR_ID_ARTOP) ||
! 940: (vendor == PCI_VENDOR_ID_TTI)) {
! 941: pass_count++;
! 942: if (vendor == PCI_VENDOR_ID_TTI) {
! 943: if ((!hpt34x_flag) && (h < 2)) {
! 944: goto quit;
! 945: } else if (hpt34x_flag) {
! 946: hwif->io_base = channel ? (bmiba + 0x28) : (bmiba + 0x20);
! 947: hwif->ctl_port = channel ? (bmiba + 0x3e) : (bmiba + 0x36);
1.1 root 948: } else {
1.1.1.2 ! root 949: goto io_temps;
! 950: }
! 951: } else {
! 952: io_temps:
! 953: tmp = channel ? 2 : 0;
! 954: hwif->io_base = io[tmp];
! 955: hwif->ctl_port = io[tmp + 1] + 2;
! 956: }
! 957: hwif->irq = irq;
! 958: hwif->noprobe = 0;
! 959:
! 960: if (device == PCI_DEVICE_ID_ARTOP_ATP850UF) {
! 961: hwif->serialized = 1;
! 962: }
! 963:
! 964: if ((vendor == PCI_VENDOR_ID_PROMISE) ||
! 965: (vendor == PCI_VENDOR_ID_TTI)) {
! 966: set_promise_hpt343_extra(device, bmiba);
! 967: }
! 968:
! 969: if (dma_enabled) {
! 970: if ((!check_region(bmiba, 8)) && (!channel)) {
! 971: hwif->chipset = ((vendor == PCI_VENDOR_ID_TTI) && !hpt34x_flag) ? ide_hpt343 :
! 972: (device == PCI_DEVICE_ID_PROMISE_20262) ? ide_ultra66 : ide_udma;
! 973: init_triton_dma(hwif, bmiba);
! 974: step_count++;
! 975: } else if ((!check_region((bmiba + 0x08), 8)) && (channel)) {
! 976: hwif->chipset = ((vendor == PCI_VENDOR_ID_TTI) && !hpt34x_flag) ? ide_hpt343 :
! 977: (device == PCI_DEVICE_ID_PROMISE_20262) ? ide_ultra66 : ide_udma;
! 978: init_triton_dma(hwif, bmiba + 8);
! 979: step_count++;
! 980: } else {
! 981: continue;
1.1 root 982: }
983: }
984: }
985: }
986:
1.1.1.2 ! root 987: quit: if (rc) printk("ide: pcibios access failed - %s\n", pcibios_strerror(rc));
1.1 root 988: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.