pdc202xx.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:37k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/ide/pdc202xx.c Version 0.32 Feb. 27, 2002
  3.  *
  4.  *  Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org>
  5.  *  May be copied or modified under the terms of the GNU General Public License
  6.  *
  7.  *  Promise Ultra66 cards with BIOS v1.11 this
  8.  *  compiled into the kernel if you have more than one card installed.
  9.  *
  10.  *  Promise Ultra100 cards with BIOS v2.01 this
  11.  *  compiled into the kernel if you have more than one card installed.
  12.  *
  13.  *  Promise Ultra100TX2 with BIOS v2.10 & Ultra133TX2 with BIOS v2.20
  14.  *  support 8 hard drives on UDMA mode.
  15.  *
  16.  *  Linux kernel will misunderstand FastTrak ATA-RAID series as Ultra
  17.  *  IDE Controller, UNLESS you enable "CONFIG_PDC202XX_FORCE"
  18.  *  That's you can use FastTrak ATA-RAID controllers as IDE controllers.
  19.  *
  20.  *  History :
  21.  *  05/22/01    v1.20 b1
  22.  *           (1) support PDC20268
  23.  *           (2) fix cable judge function
  24.  *  08/22/01    v1.20 b2
  25.  *           (1) support ATA-133 PDC20269/75
  26.  *           (2) support UDMA Mode 6
  27.  *           (3) fix proc report information
  28.  *           (4) set ATA133 timing
  29.  *           (5) fix ultra dma bit 14 selectable
  30.  *           (6) support 32bit LBA
  31.  *  09/11/01    v1.20 b3 
  32.  *           (1) fix eighty_ninty_three()
  33.  *           (2) fix offset address 0x1c~0x1f
  34.  *  10/30/01    v1.20 b4
  35.  *           (1) fix 48bit LBA HOB bit
  36.  *           (2) force rescan drive under PIO modes if need
  37.  *  11/02/01    v1.20.0.5
  38.  *           (1) could be patched with ext3 filesystem code
  39.  *  11/06/01    v1.20.0.6
  40.  *           (1) fix LBA48 drive running without Promise controllers
  41.  *           (2) fix LBA48 drive running under PIO modes
  42.  *  01/28/02    v1.20.0.6
  43.  *           (1) release for linux IDE Group kernel 2.4.18
  44.  *           (2) add version and controller info to proc
  45.  *  05/23/02    v1.20.0.7
  46.  *           (1) disable PDC20262 running with 48bit
  47.  *           (2) Add quirk drive lists for PDC20265/67
  48.  *
  49.  *  Copyright (C) 1999-2002 Promise Technology, Inc.
  50.  *  Author: Frank Tiernan <frankt@promise.com>
  51.  *          PROMISE pdc202xx IDE Controller driver MAINTAINERS
  52.  *  Released under terms of General Public License
  53.  */
  54.  
  55. #define VERSION "1.20.0.7"
  56. #define VERDATE "2002-05-23"
  57. #include <linux/config.h>
  58. #include <linux/types.h>
  59. #include <linux/kernel.h>
  60. #include <linux/delay.h>
  61. #include <linux/timer.h>
  62. #include <linux/mm.h>
  63. #include <linux/ioport.h>
  64. #include <linux/blkdev.h>
  65. #include <linux/hdreg.h>
  66. #include <linux/interrupt.h>
  67. #include <linux/pci.h>
  68. #include <linux/init.h>
  69. #include <linux/ide.h>
  70. #include <asm/io.h>
  71. #include <asm/irq.h>
  72. #include "ide_modes.h"
  73. #define PDC202XX_DEBUG_DRIVE_INFO 0
  74. #define PDC202XX_DECODE_REGISTER_INFO 0
  75. #define DISPLAY_PDC202XX_TIMINGS
  76. #ifndef SPLIT_BYTE
  77. #define SPLIT_BYTE(B,H,L) ((H)=(B>>4), (L)=(B-((B>>4)<<4)))
  78. #endif
  79. #if defined(DISPLAY_PDC202XX_TIMINGS) && defined(CONFIG_PROC_FS)
  80. #include <linux/stat.h>
  81. #include <linux/proc_fs.h>
  82. static int pdc202xx_get_info(char *, char **, off_t, int);
  83. extern int (*pdc202xx_display_info)(char *, char **, off_t, int); /* ide-proc.c */
  84. extern char *ide_media_verbose(ide_drive_t *);
  85. static struct pci_dev *bmide_dev;
  86. static struct hd_driveid *id[4];
  87. static int speed_rate[4];
  88. static char * pdc202xx_info (char *buf, struct pci_dev *dev)
  89. {
  90. char *p = buf;
  91. u32 bibma  = pci_resource_start(dev, 4);
  92. u32 reg60h = 0, reg64h = 0, reg68h = 0, reg6ch = 0;
  93. u16 reg50h = 0;
  94. u16 word88 = 0;
  95. int udmasel[4] = {0,0,0,0}, piosel[4] = {0,0,0,0};
  96. int i = 0, hd = 0;
  97.         /*
  98.          * at that point bibma+0x2 et bibma+0xa are byte registers
  99.          * to investigate:
  100.          */
  101. u8 c0 = inb_p((unsigned short)bibma + 0x02);
  102. u8 c1 = inb_p((unsigned short)bibma + 0x0a);
  103. u8 sc11 = inb_p((unsigned short)bibma + 0x11);
  104. u8 sc1a = inb_p((unsigned short)bibma + 0x1a);
  105. u8 sc1b = inb_p((unsigned short)bibma + 0x1b);
  106. /* u8 sc1c = inb_p((unsigned short)bibma + 0x1c); 
  107. u8 sc1d = inb_p((unsigned short)bibma + 0x1d);
  108. u8 sc1e = inb_p((unsigned short)bibma + 0x1e);
  109. u8 sc1f = inb_p((unsigned short)bibma + 0x1f); */
  110. pci_read_config_word(dev, 0x50, &reg50h);
  111. pci_read_config_dword(dev, 0x60, &reg60h);
  112. pci_read_config_dword(dev, 0x64, &reg64h);
  113. pci_read_config_dword(dev, 0x68, &reg68h);
  114. pci_read_config_dword(dev, 0x6c, &reg6ch);
  115. p+=sprintf(p, "nPROMISE Ultra series driver Ver %s %s Adapter: ", VERSION, VERDATE);
  116. switch(dev->device) {
  117. case PCI_DEVICE_ID_PROMISE_20275:
  118. p += sprintf(p, "MBUltra133n");
  119. break;
  120. case PCI_DEVICE_ID_PROMISE_20269:
  121. p += sprintf(p, "Ultra133 TX2n");
  122. break;
  123. case PCI_DEVICE_ID_PROMISE_20268:
  124. p += sprintf(p, "Ultra100 TX2n");
  125. break;
  126. case PCI_DEVICE_ID_PROMISE_20267:
  127. p += sprintf(p, "Ultra100n");
  128. break;
  129. case PCI_DEVICE_ID_PROMISE_20265:
  130. p += sprintf(p, "Ultra100 on M/Bn");
  131. break;
  132. case PCI_DEVICE_ID_PROMISE_20262:
  133. p += sprintf(p, "Ultra66n");
  134. break;
  135. case PCI_DEVICE_ID_PROMISE_20246:
  136. p += sprintf(p, "Ultra33n");
  137. reg50h |= 0x0c00;
  138. break;
  139. default:
  140. p += sprintf(p, "Ultra Seriesn");
  141. break;
  142. }
  143. p += sprintf(p, "--------------- Primary Channel ---------------- Secondary Channel -------------n");
  144. p += sprintf(p, "                %s                         %sn",
  145. (c0&0x80)?"disabled":"enabled ",
  146. (c1&0x80)?"disabled":"enabled ");
  147. p += sprintf(p, "66 Clocking     %s                         %sn",
  148. (sc11&0x02)?"enabled ":"disabled",
  149. (sc11&0x08)?"enabled ":"disabled");
  150. p += sprintf(p, "Mode            %s                           %sn",
  151. (sc1a & 0x01) ? "MASTER" : "PCI   ",
  152. (sc1b & 0x01) ? "MASTER" : "PCI   ");
  153. p += sprintf(p, "--------------- drive0 --------- drive1 -------- drive0 ---------- drive1 ------n");
  154. p += sprintf(p, "DMA enabled:    %s              %s             %s               %sn",
  155. (id[0]!=NULL && (c0&0x20))?"yes":"no ",(id[1]!=NULL && (c0&0x40))?"yes":"no ",
  156. (id[2]!=NULL && (c1&0x20))?"yes":"no ",(id[3]!=NULL && (c1&0x40))?"yes":"no ");
  157. for( hd = 0; hd < 4 ; hd++) {
  158. if (id[hd] == NULL)
  159. continue;
  160. word88 = id[hd]->dma_ultra;
  161. for ( i = 7 ; i >= 0 ; i--)
  162. if (word88 >> (i+8)) {
  163. udmasel[hd] = i; /* get select UDMA mode */
  164. break;
  165. }
  166. piosel[hd] = (id[hd]->eide_pio_modes >= 0x02) ? 4 : 3;
  167.         }
  168. p += sprintf(p, "UDMA Mode:      %d                %d               %d                 %dn",
  169. udmasel[0], udmasel[1], udmasel[2], udmasel[3]);
  170. p += sprintf(p, "PIO Mode:       %d                %d               %d                 %dn",
  171. piosel[0], piosel[1], piosel[2], piosel[3]);
  172. #if 0
  173. p += sprintf(p, "--------------- Can ATAPI DMA ---------------n");
  174. #endif
  175. return (char *)p;
  176. }
  177. static int pdc202xx_get_info (char *buffer, char **addr, off_t offset, int count)
  178. {
  179. char *p = buffer;
  180. p = pdc202xx_info(buffer, bmide_dev);
  181. return p-buffer; /* => must be less than 4k! */
  182. }
  183. #endif  /* defined(DISPLAY_PDC202XX_TIMINGS) && defined(CONFIG_PROC_FS) */
  184. byte pdc202xx_proc = 0;
  185. const char *pdc_quirk_drives[] = {
  186. "QUANTUM FIREBALLlct08 08",
  187. "QUANTUM FIREBALLP KA6.4",
  188. "QUANTUM FIREBALLP KA9.1",
  189. "QUANTUM FIREBALLP LM20.4",
  190. "QUANTUM FIREBALLP KX13.6",
  191. "QUANTUM FIREBALLP KX20.5",
  192. "QUANTUM FIREBALLP KX27.3",
  193. "QUANTUM FIREBALLP LM20.5",
  194. NULL
  195. };
  196. extern char *ide_xfer_verbose (byte xfer_rate);
  197. /* A Register */
  198. #define SYNC_ERRDY_EN 0xC0
  199. #define SYNC_IN 0x80 /* control bit, different for master vs. slave drives */
  200. #define ERRDY_EN 0x40 /* control bit, different for master vs. slave drives */
  201. #define IORDY_EN 0x20 /* PIO: IOREADY */
  202. #define PREFETCH_EN 0x10 /* PIO: PREFETCH */
  203. #define PA3 0x08 /* PIO"A" timing */
  204. #define PA2 0x04 /* PIO"A" timing */
  205. #define PA1 0x02 /* PIO"A" timing */
  206. #define PA0 0x01 /* PIO"A" timing */
  207. /* B Register */
  208. #define MB2 0x80 /* DMA"B" timing */
  209. #define MB1 0x40 /* DMA"B" timing */
  210. #define MB0 0x20 /* DMA"B" timing */
  211. #define PB4 0x10 /* PIO_FORCE 1:0 */
  212. #define PB3 0x08 /* PIO"B" timing */ /* PIO flow Control mode */
  213. #define PB2 0x04 /* PIO"B" timing */ /* PIO 4 */
  214. #define PB1 0x02 /* PIO"B" timing */ /* PIO 3 half */
  215. #define PB0 0x01 /* PIO"B" timing */ /* PIO 3 other half */
  216. /* C Register */
  217. #define IORDYp_NO_SPEED 0x4F
  218. #define SPEED_DIS 0x0F
  219. #define DMARQp 0x80
  220. #define IORDYp 0x40
  221. #define DMAR_EN 0x20
  222. #define DMAW_EN 0x10
  223. #define MC3 0x08 /* DMA"C" timing */
  224. #define MC2 0x04 /* DMA"C" timing */
  225. #define MC1 0x02 /* DMA"C" timing */
  226. #define MC0 0x01 /* DMA"C" timing */
  227. #if PDC202XX_DECODE_REGISTER_INFO
  228. #define REG_A 0x01
  229. #define REG_B 0x02
  230. #define REG_C 0x04
  231. #define REG_D 0x08
  232. static void decode_registers (byte registers, byte value)
  233. {
  234. byte bit = 0, bit1 = 0, bit2 = 0;
  235. switch(registers) {
  236. case REG_A:
  237. bit2 = 0;
  238. printk("A Register ");
  239. if (value & 0x80) printk("SYNC_IN ");
  240. if (value & 0x40) printk("ERRDY_EN ");
  241. if (value & 0x20) printk("IORDY_EN ");
  242. if (value & 0x10) printk("PREFETCH_EN ");
  243. if (value & 0x08) { printk("PA3 ");bit2 |= 0x08; }
  244. if (value & 0x04) { printk("PA2 ");bit2 |= 0x04; }
  245. if (value & 0x02) { printk("PA1 ");bit2 |= 0x02; }
  246. if (value & 0x01) { printk("PA0 ");bit2 |= 0x01; }
  247. printk("PIO(A) = %d ", bit2);
  248. break;
  249. case REG_B:
  250. bit1 = 0;bit2 = 0;
  251. printk("B Register ");
  252. if (value & 0x80) { printk("MB2 ");bit1 |= 0x80; }
  253. if (value & 0x40) { printk("MB1 ");bit1 |= 0x40; }
  254. if (value & 0x20) { printk("MB0 ");bit1 |= 0x20; }
  255. printk("DMA(B) = %d ", bit1 >> 5);
  256. if (value & 0x10) printk("PIO_FORCED/PB4 ");
  257. if (value & 0x08) { printk("PB3 ");bit2 |= 0x08; }
  258. if (value & 0x04) { printk("PB2 ");bit2 |= 0x04; }
  259. if (value & 0x02) { printk("PB1 ");bit2 |= 0x02; }
  260. if (value & 0x01) { printk("PB0 ");bit2 |= 0x01; }
  261. printk("PIO(B) = %d ", bit2);
  262. break;
  263. case REG_C:
  264. bit2 = 0;
  265. printk("C Register ");
  266. if (value & 0x80) printk("DMARQp ");
  267. if (value & 0x40) printk("IORDYp ");
  268. if (value & 0x20) printk("DMAR_EN ");
  269. if (value & 0x10) printk("DMAW_EN ");
  270. if (value & 0x08) { printk("MC3 ");bit2 |= 0x08; }
  271. if (value & 0x04) { printk("MC2 ");bit2 |= 0x04; }
  272. if (value & 0x02) { printk("MC1 ");bit2 |= 0x02; }
  273. if (value & 0x01) { printk("MC0 ");bit2 |= 0x01; }
  274. printk("DMA(C) = %d ", bit2);
  275. break;
  276. case REG_D:
  277. printk("D Register ");
  278. break;
  279. default:
  280. return;
  281. }
  282. printk("n        %s ", (registers & REG_D) ? "DP" :
  283. (registers & REG_C) ? "CP" :
  284. (registers & REG_B) ? "BP" :
  285. (registers & REG_A) ? "AP" : "ERROR");
  286. for (bit=128;bit>0;bit/=2)
  287. printk("%s", (value & bit) ? "1" : "0");
  288. printk("n");
  289. }
  290. #endif /* PDC202XX_DECODE_REGISTER_INFO */
  291. static int check_in_drive_lists (ide_drive_t *drive, const char **list)
  292. {
  293. struct hd_driveid *id = drive->id;
  294. if (pdc_quirk_drives == list) {
  295. while (*list) {
  296. if (strstr(id->model, *list++)) {
  297. return 2;
  298. }
  299. }
  300. } else {
  301. while (*list) {
  302. if (!strcmp(*list++,id->model)) {
  303. return 1;
  304. }
  305. }
  306. }
  307. return 0;
  308. }
  309. static int pdc202xx_tune_chipset (ide_drive_t *drive, byte speed)
  310. {
  311. ide_hwif_t *hwif = HWIF(drive);
  312. struct pci_dev *dev = hwif->pci_dev;
  313. unsigned int drive_conf;
  314. int err = 0, i = 0, j = hwif->channel ? 2 : 0 ;
  315. byte drive_pci, AP, BP, CP, DP;
  316. byte TA = 0, TB = 0, TC = 0;
  317. switch (drive->dn) {
  318. case 0: drive_pci = 0x60; break;
  319. case 1: drive_pci = 0x64; break;
  320. case 2: drive_pci = 0x68; break;
  321. case 3: drive_pci = 0x6c; break;
  322. default: return -1;
  323. }
  324. if ((drive->media != ide_disk) && (speed < XFER_SW_DMA_0)) return -1;
  325. pci_read_config_dword(dev, drive_pci, &drive_conf);
  326. pci_read_config_byte(dev, (drive_pci), &AP);
  327. pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
  328. pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
  329. pci_read_config_byte(dev, (drive_pci)|0x03, &DP);
  330. #ifdef CONFIG_BLK_DEV_IDEDMA
  331. if (speed >= XFER_SW_DMA_0) {
  332. if ((BP & 0xF0) && (CP & 0x0F)) {
  333. /* clear DMA modes of upper 842 bits of B Register */
  334. /* clear PIO forced mode upper 1 bit of B Register */
  335. pci_write_config_byte(dev, (drive_pci)|0x01, BP & ~0xF0);
  336. pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
  337. /* clear DMA modes of lower 8421 bits of C Register */
  338. pci_write_config_byte(dev, (drive_pci)|0x02, CP & ~0x0F);
  339. pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
  340. }
  341. } else {
  342. #else
  343. {
  344. #endif /* CONFIG_BLK_DEV_IDEDMA */
  345. if ((AP & 0x0F) || (BP & 0x07)) {
  346. /* clear PIO modes of lower 8421 bits of A Register */
  347. pci_write_config_byte(dev, (drive_pci), AP & ~0x0F);
  348. pci_read_config_byte(dev, (drive_pci), &AP);
  349. /* clear PIO modes of lower 421 bits of B Register */
  350. pci_write_config_byte(dev, (drive_pci)|0x01, BP & ~0x07);
  351. pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
  352. pci_read_config_byte(dev, (drive_pci), &AP);
  353. pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
  354. }
  355. }
  356. pci_read_config_byte(dev, (drive_pci), &AP);
  357. pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
  358. pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
  359. for ( i = 0; i < 2; i++)
  360. if (hwif->drives[i].present)
  361.    id[i+j] = hwif->drives[i].id; /* get identify structs */
  362. switch(speed) {
  363. #ifdef CONFIG_BLK_DEV_IDEDMA
  364. /* case XFER_UDMA_6: */
  365. case XFER_UDMA_5:
  366. case XFER_UDMA_4: TB = 0x20; TC = 0x01; break; /* speed 8 == UDMA mode 4 */
  367. case XFER_UDMA_3: TB = 0x40; TC = 0x02; break; /* speed 7 == UDMA mode 3 */
  368. case XFER_UDMA_2: TB = 0x20; TC = 0x01; break; /* speed 6 == UDMA mode 2 */
  369. case XFER_UDMA_1: TB = 0x40; TC = 0x02; break; /* speed 5 == UDMA mode 1 */
  370. case XFER_UDMA_0: TB = 0x60; TC = 0x03; break; /* speed 4 == UDMA mode 0 */
  371. case XFER_MW_DMA_2: TB = 0x60; TC = 0x03; break; /* speed 4 == MDMA mode 2 */
  372. case XFER_MW_DMA_1: TB = 0x60; TC = 0x04; break; /* speed 3 == MDMA mode 1 */
  373. case XFER_MW_DMA_0: TB = 0x60; TC = 0x05; break; /* speed 2 == MDMA mode 0 */
  374. case XFER_SW_DMA_2: TB = 0x60; TC = 0x05; break; /* speed 0 == SDMA mode 2 */
  375. case XFER_SW_DMA_1: TB = 0x80; TC = 0x06; break; /* speed 1 == SDMA mode 1 */
  376. case XFER_SW_DMA_0: TB = 0xC0; TC = 0x0B; break; /* speed 0 == SDMA mode 0 */
  377. #endif /* CONFIG_BLK_DEV_IDEDMA */
  378. case XFER_PIO_4: TA = 0x01; TB = 0x04; break;
  379. case XFER_PIO_3: TA = 0x02; TB = 0x06; break;
  380. case XFER_PIO_2: TA = 0x03; TB = 0x08; break;
  381. case XFER_PIO_1: TA = 0x05; TB = 0x0C; break;
  382. case XFER_PIO_0:
  383. default: TA = 0x09; TB = 0x13; break;
  384. }
  385. #ifdef CONFIG_BLK_DEV_IDEDMA
  386.         if (speed >= XFER_SW_DMA_0) {
  387. pci_write_config_byte(dev, (drive_pci)|0x01, BP|TB);
  388. pci_write_config_byte(dev, (drive_pci)|0x02, CP|TC);
  389. } else {
  390. #else
  391. {
  392. #endif /* CONFIG_BLK_DEV_IDEDMA */
  393. pci_write_config_byte(dev, (drive_pci), AP|TA);
  394. pci_write_config_byte(dev, (drive_pci)|0x01, BP|TB);
  395. }
  396. #if PDC202XX_DECODE_REGISTER_INFO
  397. pci_read_config_byte(dev, (drive_pci), &AP);
  398. pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
  399. pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
  400. pci_read_config_byte(dev, (drive_pci)|0x03, &DP);
  401. decode_registers(REG_A, AP);
  402. decode_registers(REG_B, BP);
  403. decode_registers(REG_C, CP);
  404. decode_registers(REG_D, DP);
  405. #endif /* PDC202XX_DECODE_REGISTER_INFO */
  406. if (!drive->init_speed)
  407. drive->init_speed = speed;
  408. err = ide_config_drive_speed(drive, speed);
  409. drive->current_speed = speed;
  410. #if PDC202XX_DEBUG_DRIVE_INFO
  411. printk("%s: %s drive%d 0x%08x ",
  412. drive->name, ide_xfer_verbose(speed),
  413. drive->dn, drive_conf);
  414. pci_read_config_dword(dev, drive_pci, &drive_conf);
  415. printk("0x%08xn", drive_conf);
  416. #endif /* PDC202XX_DEBUG_DRIVE_INFO */
  417. return err;
  418. }
  419. static int pdc202xx_new_tune_chipset (ide_drive_t *drive, byte speed)
  420. {
  421. ide_hwif_t *hwif = HWIF(drive);
  422. #ifdef CONFIG_BLK_DEV_IDEDMA
  423. unsigned long indexreg = (hwif->dma_base + 1);
  424. unsigned long datareg = (hwif->dma_base + 3);
  425. #else
  426. struct pci_dev *dev = hwif->pci_dev;
  427. unsigned long high_16 = pci_resource_start(dev, 4);
  428. unsigned long indexreg = high_16 + (hwif->channel ? 0x09 : 0x01);
  429. unsigned long datareg = (indexreg + 2);
  430. #endif /* CONFIG_BLK_DEV_IDEDMA */
  431. byte thold = 0x10;
  432. byte adj = (drive->dn%2) ? 0x08 : 0x00;
  433. int set_speed = 0, i=0, j=hwif->channel ? 2:0;
  434. int                     err;
  435. /* Setting tHOLD bit to 0 if using UDMA mode 2 */
  436. if (speed == XFER_UDMA_2) {
  437. OUT_BYTE((thold + adj), indexreg);
  438. OUT_BYTE((IN_BYTE(datareg) & 0x7f), datareg);
  439. }
  440. /* We need to set ATA133 timing if ATA133 drives exist */
  441. if (speed>=XFER_UDMA_6)
  442. set_speed=1;
  443. if (!drive->init_speed)
  444. drive->init_speed = speed;
  445. #if PDC202XX_DEBUG_DRIVE_INFO
  446. printk("%s: Before set_feature = %s, word88 = %#xn",
  447. drive->name, ide_xfer_verbose(speed), drive->id->dma_ultra );
  448. #endif /* PDC202XX_DEBUG_DRIVE_INFO */
  449. err = ide_config_drive_speed(drive, speed);
  450. drive->current_speed = speed;
  451. for ( i = 0 ; i < 2 ; i++)
  452. if (hwif->drives[i].present) {
  453.    id[i+j] = hwif->drives[i].id; /* get identify structs */
  454.   speed_rate[i+j] = speed; /* get current speed */
  455.   }
  456. if (set_speed) {
  457. for (i=0; i<4; i++) {
  458. if (id[i]==NULL)
  459. continue;
  460. switch(speed_rate[i]) {
  461. #ifdef CONFIG_BLK_DEV_IDEDMA
  462. case XFER_UDMA_6:
  463. OUT_BYTE((0x10 + adj), indexreg);
  464. OUT_BYTE(0x1a, datareg);
  465. OUT_BYTE((0x11 + adj), indexreg);
  466. OUT_BYTE(0x01, datareg);
  467. OUT_BYTE((0x12 + adj), indexreg);
  468. OUT_BYTE(0xcb, datareg);
  469. break;
  470. case XFER_UDMA_5:
  471. OUT_BYTE((0x10 + adj), indexreg);
  472. OUT_BYTE(0x1a, datareg);
  473. OUT_BYTE((0x11 + adj), indexreg);
  474. OUT_BYTE(0x02, datareg);
  475. OUT_BYTE((0x12 + adj), indexreg);
  476. OUT_BYTE(0xcb, datareg);
  477. break;
  478. case XFER_UDMA_4:
  479. OUT_BYTE((0x10 + adj), indexreg);
  480. OUT_BYTE(0x1a, datareg);
  481. OUT_BYTE((0x11 + adj), indexreg);
  482. OUT_BYTE(0x03, datareg);
  483. OUT_BYTE((0x12 + adj), indexreg);
  484. OUT_BYTE(0xcd, datareg);
  485. break;
  486. case XFER_UDMA_3:
  487. OUT_BYTE((0x10 + adj), indexreg);
  488. OUT_BYTE(0x1a, datareg);
  489. OUT_BYTE((0x11 + adj), indexreg);
  490. OUT_BYTE(0x05, datareg);
  491. OUT_BYTE((0x12 + adj), indexreg);
  492. OUT_BYTE(0xcd, datareg);
  493. break;
  494. case XFER_UDMA_2:
  495. OUT_BYTE((0x10 + adj), indexreg);
  496. OUT_BYTE(0x2a, datareg);
  497. OUT_BYTE((0x11 + adj), indexreg);
  498. OUT_BYTE(0x07, datareg);
  499. OUT_BYTE((0x12 + adj), indexreg);
  500. OUT_BYTE(0xcd, datareg);
  501. break;
  502. case XFER_UDMA_1:
  503. OUT_BYTE((0x10 + adj), indexreg);
  504. OUT_BYTE(0x3a, datareg);
  505. OUT_BYTE((0x11 + adj), indexreg);
  506. OUT_BYTE(0x0a, datareg);
  507. OUT_BYTE((0x12 + adj), indexreg);
  508. OUT_BYTE(0xd0, datareg);
  509. break;
  510. case XFER_UDMA_0:
  511. OUT_BYTE((0x10 + adj), indexreg);
  512. OUT_BYTE(0x4a, datareg);
  513. OUT_BYTE((0x11 + adj), indexreg);
  514. OUT_BYTE(0x0f, datareg);
  515. OUT_BYTE((0x12 + adj), indexreg);
  516. OUT_BYTE(0xd5, datareg);
  517. break;
  518. case XFER_MW_DMA_2:
  519. OUT_BYTE((0x0e + adj), indexreg);
  520. OUT_BYTE(0x69, datareg);
  521. OUT_BYTE((0x0f + adj), indexreg);
  522. OUT_BYTE(0x25, datareg);
  523. break;
  524. case XFER_MW_DMA_1:
  525. OUT_BYTE((0x0e + adj), indexreg);
  526. OUT_BYTE(0x6b, datareg);
  527. OUT_BYTE((0x0f+ adj), indexreg);
  528. OUT_BYTE(0x27, datareg);
  529. break;
  530. case XFER_MW_DMA_0:
  531. OUT_BYTE((0x0e + adj), indexreg);
  532. OUT_BYTE(0xdf, datareg);
  533. OUT_BYTE((0x0f + adj), indexreg);
  534. OUT_BYTE(0x5f, datareg);
  535. break;
  536. #endif /* CONFIG_BLK_DEV_IDEDMA */
  537. case XFER_PIO_4:
  538. OUT_BYTE((0x0c + adj), indexreg);
  539. OUT_BYTE(0x23, datareg);
  540. OUT_BYTE((0x0d + adj), indexreg);
  541. OUT_BYTE(0x09, datareg);
  542. OUT_BYTE((0x13 + adj), indexreg);
  543. OUT_BYTE(0x25, datareg);
  544. break;
  545. case XFER_PIO_3:
  546. OUT_BYTE((0x0c + adj), indexreg);
  547. OUT_BYTE(0x27, datareg);
  548. OUT_BYTE((0x0d + adj), indexreg);
  549. OUT_BYTE(0x0d, datareg);
  550. OUT_BYTE((0x13 + adj), indexreg);
  551. OUT_BYTE(0x35, datareg);
  552. break;
  553. case XFER_PIO_2:
  554. OUT_BYTE((0x0c + adj), indexreg);
  555. OUT_BYTE(0x23, datareg);
  556. OUT_BYTE((0x0d + adj), indexreg);
  557. OUT_BYTE(0x26, datareg);
  558. OUT_BYTE((0x13 + adj), indexreg);
  559. OUT_BYTE(0x64, datareg);
  560. break;
  561. case XFER_PIO_1:
  562. OUT_BYTE((0x0c + adj), indexreg);
  563. OUT_BYTE(0x46, datareg);
  564. OUT_BYTE((0x0d + adj), indexreg);
  565. OUT_BYTE(0x29, datareg);
  566. OUT_BYTE((0x13 + adj), indexreg);
  567. OUT_BYTE(0xa4, datareg);
  568. break;
  569. case XFER_PIO_0:
  570. OUT_BYTE((0x0c + adj), indexreg);
  571. OUT_BYTE(0xfb, datareg);
  572. OUT_BYTE((0x0d + adj), indexreg);
  573. OUT_BYTE(0x2b, datareg);
  574. OUT_BYTE((0x13 + adj), indexreg);
  575. OUT_BYTE(0xac, datareg);
  576. break;
  577. default:
  578. }
  579. }
  580. }
  581. return err;
  582. }
  583. /*   0    1    2    3    4    5    6   7   8
  584.  * 960, 480, 390, 300, 240, 180, 120, 90, 60
  585.  *           180, 150, 120,  90,  60
  586.  * DMA_Speed
  587.  * 180, 120,  90,  90,  90,  60,  30
  588.  *  11,   5,   4,   3,   2,   1,   0
  589.  */
  590. static int config_chipset_for_pio (ide_drive_t *drive, byte pio)
  591. {
  592. byte speed = 0x00;
  593. pio = (pio == 5) ? 4 : pio;
  594. speed = XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, pio, NULL);
  595.         
  596. return ((int) pdc202xx_tune_chipset(drive, speed));
  597. }
  598. static void pdc202xx_tune_drive (ide_drive_t *drive, byte pio)
  599. {
  600. (void) config_chipset_for_pio(drive, pio);
  601. }
  602. #ifdef CONFIG_BLK_DEV_IDEDMA
  603. static int config_chipset_for_dma (ide_drive_t *drive, byte ultra)
  604. {
  605. struct hd_driveid *id = drive->id;
  606. ide_hwif_t *hwif = HWIF(drive);
  607. struct pci_dev *dev = hwif->pci_dev;
  608. unsigned long high_16   = pci_resource_start(dev, 4);
  609. unsigned long dma_base  = hwif->dma_base;
  610. unsigned long indexreg = dma_base + 1;
  611. unsigned long datareg = dma_base + 3;
  612. byte iordy = 0x13;
  613. byte adj = (drive->dn%2) ? 0x08 : 0x00;
  614. byte cable = 0;
  615. byte new_chip = 0;
  616. byte unit = (drive->select.b.unit & 0x01);
  617. unsigned int drive_conf;
  618. byte drive_pci = 0;
  619. byte test1, test2, speed = -1;
  620. byte AP;
  621. unsigned short EP;
  622. byte CLKSPD = 0;
  623. byte clockreg = high_16 + 0x11;
  624. byte udma_33 = ultra;
  625. byte udma_66 = ((eighty_ninty_three(drive)) && udma_33) ? 1 : 0;
  626. byte udma_100 = 0;
  627. byte udma_133 = 0;
  628. byte mask = hwif->channel ? 0x08 : 0x02;
  629. unsigned short c_mask = hwif->channel ? (1<<11) : (1<<10);
  630. byte ultra_66 = ((id->dma_ultra & 0x0010) ||
  631.    (id->dma_ultra & 0x0008)) ? 1 : 0;
  632. byte ultra_100 = ((id->dma_ultra & 0x0020) ||
  633.    (ultra_66)) ? 1 : 0;
  634. byte ultra_133 = ((id->dma_ultra & 0x0040) ||
  635.    (ultra_100)) ? 1 : 0;
  636. switch(dev->device) {
  637. case PCI_DEVICE_ID_PROMISE_20276:
  638. case PCI_DEVICE_ID_PROMISE_20275:
  639. case PCI_DEVICE_ID_PROMISE_20269:
  640. udma_133 = (udma_66) ? 1 : 0;
  641. udma_100 = (udma_66) ? 1 : 0;
  642. OUT_BYTE(0x0b, (hwif->dma_base + 1));
  643. cable = ((IN_BYTE((hwif->dma_base + 3)) & 0x04));
  644. new_chip = 1;
  645. break;
  646. case PCI_DEVICE_ID_PROMISE_20268:
  647. case PCI_DEVICE_ID_PROMISE_20270:
  648. udma_100 = (udma_66) ? 1 : 0;
  649. OUT_BYTE(0x0b, (hwif->dma_base + 1));
  650. cable = ((IN_BYTE((hwif->dma_base + 3)) & 0x04));
  651. new_chip = 1;
  652. break;
  653. case PCI_DEVICE_ID_PROMISE_20267:
  654. case PCI_DEVICE_ID_PROMISE_20265:
  655. udma_100 = (udma_66) ? 1 : 0;
  656. pci_read_config_word(dev, 0x50, &EP);
  657. cable = (EP & c_mask);
  658. new_chip = 0;
  659. CLKSPD = IN_BYTE(clockreg);
  660. break;
  661. case PCI_DEVICE_ID_PROMISE_20262:
  662. pci_read_config_word(dev, 0x50, &EP);
  663. cable = (EP & c_mask);
  664. new_chip = 0;
  665. CLKSPD = IN_BYTE(clockreg);
  666. break;
  667. default:
  668. udma_100 = 0; udma_133 = 0; cable = 0; new_chip = 1;
  669. break;
  670. }
  671. /*
  672.  * Set the control register to use the 66Mhz system
  673.  * clock for UDMA 3/4 mode operation. If one drive on
  674.  * a channel is U66 capable but the other isn't we
  675.  * fall back to U33 mode. The BIOS INT 13 hooks turn
  676.  * the clock on then off for each read/write issued. I don't
  677.  * do that here because it would require modifying the
  678.  * kernel, seperating the fop routines from the kernel or
  679.  * somehow hooking the fops calls. It may also be possible to
  680.  * leave the 66Mhz clock on and readjust the timing
  681.  * parameters.
  682.  */
  683. if (((ultra_66) || (ultra_100) || (ultra_133)) && (cable)) {
  684. #ifdef DEBUG
  685. printk("ULTRA66: %s channel of Ultra 66 requires an 80-pin cable for Ultra66 operation.n", hwif->channel ? "Secondary" : "Primary");
  686. printk("         Switching to Ultra33 mode.n");
  687. #endif /* DEBUG */
  688. /* Primary   : zero out second bit */
  689. /* Secondary : zero out fourth bit */
  690. //if (!new_chip)
  691. OUT_BYTE(CLKSPD & ~mask, clockreg);
  692. printk("Warning: %s channel requires an 80-pin cable for operation.n", hwif->channel ? "Secondary":"Primary");
  693. printk("%s reduced to Ultra33 mode.n", drive->name);
  694. udma_66 = 0; udma_100 = 0; udma_133 = 0;
  695. } else {
  696. if ((ultra_66) || (ultra_100) || (ultra_133)) {
  697. /*
  698.  * check to make sure drive on same channel
  699.  * is u66 capable
  700.  */
  701. if (hwif->drives[!(drive->dn%2)].id) {
  702. if ((hwif->drives[!(drive->dn%2)].id->dma_ultra & 0x0040) ||
  703.     (hwif->drives[!(drive->dn%2)].id->dma_ultra
  704. & 0x0020) ||
  705.     (hwif->drives[!(drive->dn%2)].id->dma_ultra & 0x0010) ||
  706.     (hwif->drives[!(drive->dn%2)].id->dma_ultra & 0x0008)) {
  707. OUT_BYTE(CLKSPD | mask, clockreg);
  708. } else {
  709. OUT_BYTE(CLKSPD & ~mask, clockreg);
  710. }
  711. } else { /* udma4 drive by itself */
  712. OUT_BYTE(CLKSPD | mask, clockreg);
  713. }
  714. }
  715. }
  716. if (new_chip) goto chipset_is_set;
  717. switch(drive->dn) {
  718. case 0: drive_pci = 0x60;
  719. pci_read_config_dword(dev, drive_pci, &drive_conf);
  720. if ((drive_conf != 0x004ff304) && (drive_conf != 0x004ff3c4))
  721. goto chipset_is_set;
  722. pci_read_config_byte(dev, (drive_pci), &test1);
  723. if (!(test1 & SYNC_ERRDY_EN))
  724. pci_write_config_byte(dev, (drive_pci), test1|SYNC_ERRDY_EN);
  725. break;
  726. case 1: drive_pci = 0x64;
  727. pci_read_config_dword(dev, drive_pci, &drive_conf);
  728. if ((drive_conf != 0x004ff304) && (drive_conf != 0x004ff3c4))
  729. goto chipset_is_set;
  730. pci_read_config_byte(dev, 0x60, &test1);
  731. pci_read_config_byte(dev, (drive_pci), &test2);
  732. if ((test1 & SYNC_ERRDY_EN) && !(test2 & SYNC_ERRDY_EN))
  733. pci_write_config_byte(dev, (drive_pci), test2|SYNC_ERRDY_EN);
  734. break;
  735. case 2: drive_pci = 0x68;
  736. pci_read_config_dword(dev, drive_pci, &drive_conf);
  737. if ((drive_conf != 0x004ff304) && (drive_conf != 0x004ff3c4))
  738. goto chipset_is_set;
  739. pci_read_config_byte(dev, (drive_pci), &test1);
  740. if (!(test1 & SYNC_ERRDY_EN))
  741. pci_write_config_byte(dev, (drive_pci), test1|SYNC_ERRDY_EN);
  742. break;
  743. case 3: drive_pci = 0x6c;
  744. pci_read_config_dword(dev, drive_pci, &drive_conf);
  745. if ((drive_conf != 0x004ff304) && (drive_conf != 0x004ff3c4))
  746. goto chipset_is_set;
  747. pci_read_config_byte(dev, 0x68, &test1);
  748. pci_read_config_byte(dev, (drive_pci), &test2);
  749. if ((test1 & SYNC_ERRDY_EN) && !(test2 & SYNC_ERRDY_EN))
  750. pci_write_config_byte(dev, (drive_pci), test2|SYNC_ERRDY_EN);
  751. break;
  752. default:
  753. return ide_dma_off;
  754. }
  755. chipset_is_set:
  756. if (drive->media != ide_disk)
  757. return ide_dma_off_quietly;
  758. if (new_chip) {
  759. if (id->capability & 4) { /* IORDY_EN & PREFETCH_EN */
  760. OUT_BYTE((iordy + adj), indexreg);
  761. OUT_BYTE((IN_BYTE(datareg)|0x03), datareg);
  762. }
  763. }
  764. else {
  765. pci_read_config_byte(dev, (drive_pci), &AP);
  766. if (id->capability & 4) /* IORDY_EN */
  767. pci_write_config_byte(dev, (drive_pci), AP|IORDY_EN);
  768. pci_read_config_byte(dev, (drive_pci), &AP);
  769. if (drive->media == ide_disk) /* PREFETCH_EN */
  770. pci_write_config_byte(dev, (drive_pci), AP|PREFETCH_EN);
  771. }
  772. if ((id->dma_ultra & 0x0040)&&(udma_133)) speed = XFER_UDMA_6;
  773. else if ((id->dma_ultra & 0x0020)&&(udma_100)) speed = XFER_UDMA_5;
  774. else if ((id->dma_ultra & 0x0010)&&(udma_66)) speed = XFER_UDMA_4;
  775. else if ((id->dma_ultra & 0x0008)&&(udma_66)) speed = XFER_UDMA_3;
  776. else if ((id->dma_ultra & 0x0004)&&(udma_33)) speed = XFER_UDMA_2;
  777. else if ((id->dma_ultra & 0x0002)&&(udma_33)) speed = XFER_UDMA_1;
  778. else if ((id->dma_ultra & 0x0001)&&(udma_33)) speed = XFER_UDMA_0;
  779. else if (id->dma_mword & 0x0004) speed = XFER_MW_DMA_2;
  780. else if (id->dma_mword & 0x0002) speed = XFER_MW_DMA_1;
  781. else if (id->dma_mword & 0x0001) speed = XFER_MW_DMA_0;
  782. else if ((id->dma_1word & 0x0004)&&(!new_chip)) speed = XFER_SW_DMA_2;
  783. else if ((id->dma_1word & 0x0002)&&(!new_chip)) speed = XFER_SW_DMA_1;
  784. else if ((id->dma_1word & 0x0001)&&(!new_chip)) speed = XFER_SW_DMA_0;
  785. else {
  786. /* restore original pci-config space */
  787. if (!new_chip)
  788. pci_write_config_dword(dev, drive_pci, drive_conf);
  789. return ide_dma_off_quietly;
  790. }
  791. outb(inb(dma_base+2) & ~(1<<(5+unit)), dma_base+2);
  792. (void) hwif->speedproc(drive, speed);
  793. return ((int) ((id->dma_ultra >> 14) & 3) ? ide_dma_on :
  794. ((id->dma_ultra >> 11) & 7) ? ide_dma_on :
  795. ((id->dma_ultra >> 8) & 7) ? ide_dma_on :
  796. ((id->dma_mword >> 8) & 7) ? ide_dma_on : 
  797. ((id->dma_1word >> 8) & 7) ? ide_dma_on :
  798.      ide_dma_off_quietly);
  799. }
  800. static int config_drive_xfer_rate (ide_drive_t *drive)
  801. {
  802. struct hd_driveid *id = drive->id;
  803. ide_hwif_t *hwif = HWIF(drive);
  804. ide_dma_action_t dma_func = ide_dma_off_quietly;
  805. if (id && (id->capability & 1) && hwif->autodma) {
  806. /* Consult the list of known "bad" drives */
  807. if (ide_dmaproc(ide_dma_bad_drive, drive)) {
  808. dma_func = ide_dma_off;
  809. goto fast_ata_pio;
  810. }
  811. dma_func = ide_dma_off_quietly;
  812. if (id->field_valid & 4) {
  813. if (id->dma_ultra & 0x007F) {
  814. /* Force if Capable UltraDMA */
  815. dma_func = config_chipset_for_dma(drive, 1);
  816. if ((id->field_valid & 2) &&
  817.     (dma_func != ide_dma_on))
  818. goto try_dma_modes;
  819. }
  820. } else if (id->field_valid & 2) {
  821. try_dma_modes:
  822. if ((id->dma_mword & 0x0007) ||
  823.     (id->dma_1word & 0x0007)) {
  824. /* Force if Capable regular DMA modes */
  825. dma_func = config_chipset_for_dma(drive, 0);
  826. if (dma_func != ide_dma_on)
  827. goto no_dma_set;
  828. }
  829. } else if (ide_dmaproc(ide_dma_good_drive, drive)) {
  830. if (id->eide_dma_time > 150) {
  831. goto no_dma_set;
  832. }
  833. /* Consult the list of known "good" drives */
  834. dma_func = config_chipset_for_dma(drive, 0);
  835. if (dma_func != ide_dma_on)
  836. goto no_dma_set;
  837. } else {
  838. goto fast_ata_pio;
  839. }
  840. } else if ((id->capability & 8) || (id->field_valid & 2)) {
  841. fast_ata_pio:
  842. dma_func = ide_dma_off_quietly;
  843. no_dma_set:
  844. (void) config_chipset_for_pio(drive, 5);
  845. }
  846. return HWIF(drive)->dmaproc(dma_func, drive);
  847. }
  848. int pdc202xx_quirkproc (ide_drive_t *drive)
  849. {
  850. return ((int) check_in_drive_lists(drive, pdc_quirk_drives));
  851. }
  852. /*
  853.  * pdc202xx_dmaproc() initiates/aborts (U)DMA read/write operations on a drive.
  854.  */
  855. int pdc202xx_dmaproc (ide_dma_action_t func, ide_drive_t *drive)
  856. {
  857. byte dma_stat = 0;
  858. byte sc1d = 0;
  859. byte newchip = 0;
  860. byte clock = 0;
  861. byte hardware48fix = 0;
  862. ide_hwif_t *hwif = HWIF(drive);
  863. struct pci_dev *dev = hwif->pci_dev;
  864. unsigned long high_16 = pci_resource_start(dev, 4);
  865. unsigned long dma_base = hwif->dma_base;
  866. unsigned long atapi_port= hwif->channel ? high_16+0x24 : high_16+0x20;
  867. switch (dev->device) {
  868. case PCI_DEVICE_ID_PROMISE_20276:
  869. case PCI_DEVICE_ID_PROMISE_20275:
  870. case PCI_DEVICE_ID_PROMISE_20269:
  871. case PCI_DEVICE_ID_PROMISE_20268:
  872. case PCI_DEVICE_ID_PROMISE_20270:
  873. newchip = 1;
  874. break;
  875. case PCI_DEVICE_ID_PROMISE_20267:
  876. case PCI_DEVICE_ID_PROMISE_20265:
  877. hardware48fix = 1;
  878. clock = IN_BYTE(high_16 + 0x11);
  879. default:
  880. break;
  881. }
  882. switch (func) {
  883. case ide_dma_check:
  884. return config_drive_xfer_rate(drive);
  885. case ide_dma_begin:
  886. /* Note that this is done *after* the cmd has
  887.  * been issued to the drive, as per the BM-IDE spec.
  888.  * The Promise Ultra33 doesn't work correctly when
  889.  * we do this part before issuing the drive cmd.
  890.  */
  891. /* Enable ATAPI UDMA port for 48bit data on PDC20267 */
  892. if ((drive->addressing) && (hardware48fix)) {
  893. struct request *rq = HWGROUP(drive)->rq;
  894. unsigned long word_count = 0;
  895. unsigned long hankval = 0;
  896. byte clockreg = high_16 + 0x11;
  897. OUT_BYTE(clock|(hwif->channel ? 0x08:0x02), clockreg);
  898. word_count = (rq->nr_sectors << 8);
  899. hankval = (rq->cmd == READ) ? 0x05<<24 : 0x06<<24;
  900. hankval = hankval | word_count ;
  901. outl(hankval, atapi_port);
  902. }  
  903. break;
  904. case ide_dma_end:
  905. /* Disable ATAPI UDMA port for 48bit data on PDC20267 */
  906. if ((drive->addressing) && (hardware48fix)) {
  907. unsigned long hankval = 0;
  908. byte clockreg = high_16 + 0x11;
  909.      outl(hankval, atapi_port); /* zero out extra */
  910. clock = IN_BYTE(clockreg);
  911. OUT_BYTE(clock & ~(hwif->channel ? 0x08:0x02), clockreg);
  912. }
  913. break;
  914. case ide_dma_test_irq: /* returns 1 if dma irq issued, 0 otherwise */
  915. dma_stat = IN_BYTE(dma_base+2);
  916. if (newchip)
  917. return (dma_stat & 4) == 4;
  918. sc1d = IN_BYTE(high_16 + 0x001d);
  919. if (HWIF(drive)->channel) {
  920. if ((sc1d & 0x50) == 0x50) goto somebody_else;
  921. else if ((sc1d & 0x40) == 0x40)
  922. return (dma_stat & 4) == 4;
  923. } else {
  924. if ((sc1d & 0x05) == 0x05) goto somebody_else;
  925. else if ((sc1d & 0x04) == 0x04)
  926. return (dma_stat & 4) == 4;
  927. }
  928. somebody_else:
  929. return (dma_stat & 4) == 4; /* return 1 if INTR asserted */
  930. case ide_dma_lostirq:
  931. case ide_dma_timeout:
  932. if (HWIF(drive)->resetproc != NULL)
  933. HWIF(drive)->resetproc(drive);
  934. default:
  935. break;
  936. }
  937. return ide_dmaproc(func, drive); /* use standard DMA stuff */
  938. }
  939. #endif /* CONFIG_BLK_DEV_IDEDMA */
  940. void pdc202xx_reset (ide_drive_t *drive)
  941. {
  942. OUT_BYTE(0x04,IDE_CONTROL_REG);
  943. mdelay(1000);
  944. OUT_BYTE(0x00,IDE_CONTROL_REG);
  945. mdelay(1000);
  946. printk("PDC202XX: %s channel reset.n",
  947. HWIF(drive)->channel ? "Secondary" : "Primary");
  948. }
  949. /*
  950.  * Since SUN Cobalt is attempting to do this operation, I should disclose
  951.  * this has been a long time ago Thu Jul 27 16:40:57 2000 was the patch date
  952.  * HOTSWAP ATA Infrastructure.
  953.  */
  954. static int pdc202xx_tristate (ide_drive_t * drive, int state)
  955. {
  956. #if 0
  957. ide_hwif_t *hwif = HWIF(drive);
  958. unsigned long high_16 = pci_resource_start(hwif->pci_dev, 4);
  959. byte sc1f = inb(high_16 + 0x001f);
  960. if (!hwif)
  961. return -EINVAL;
  962. // hwif->bus_state = state;
  963. if (state) {
  964. outb(sc1f | 0x08, high_16 + 0x001f);
  965. } else {
  966. outb(sc1f & ~0x08, high_16 + 0x001f);
  967. }
  968. #endif
  969. return 0;
  970. }
  971. unsigned int __init pci_init_pdc202xx (struct pci_dev *dev, const char *name)
  972. {
  973. unsigned long high_16 = pci_resource_start(dev, 4);
  974. byte udma_speed_flag = IN_BYTE(high_16 + 0x001f);
  975. byte primary_mode = IN_BYTE(high_16 + 0x001a);
  976. byte secondary_mode = IN_BYTE(high_16 + 0x001b);
  977. OUT_BYTE(udma_speed_flag | 0x10, high_16 + 0x001f);
  978. mdelay(100);
  979. OUT_BYTE(udma_speed_flag & ~0x10, high_16 + 0x001f);
  980. mdelay(2000); /* 2 seconds ?! */
  981. if (dev->resource[PCI_ROM_RESOURCE].start) {
  982. pci_write_config_dword(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
  983. printk("%s: ROM enabled at 0x%08lxn", name, dev->resource[PCI_ROM_RESOURCE].start);
  984. }
  985. printk("%s: (U)DMA Burst Bit %sABLED " 
  986. "Primary %s Mode " 
  987. "Secondary %s Mode.n",
  988. name,
  989. (udma_speed_flag & 1) ? "EN" : "DIS",
  990. (primary_mode & 1) ? "MASTER" : "PCI",
  991. (secondary_mode & 1) ? "MASTER" : "PCI" );
  992. #ifdef CONFIG_PDC202XX_BURST
  993. if (!(udma_speed_flag & 1)) {
  994. printk("%s: FORCING BURST BIT 0x%02x -> 0x%02x ", name, udma_speed_flag, (udma_speed_flag|1));
  995. OUT_BYTE(udma_speed_flag|1, high_16 + 0x001f);
  996. printk("%sCTIVEn", (IN_BYTE(high_16 + 0x001f) & 1) ? "A" : "INA");
  997. }
  998. #endif /* CONFIG_PDC202XX_BURST */
  999. #ifdef CONFIG_PDC202XX_MASTER
  1000. if (!(primary_mode & 1)) {
  1001. printk("%s: FORCING PRIMARY MODE BIT 0x%02x -> 0x%02x ",
  1002. name, primary_mode, (primary_mode|1));
  1003. OUT_BYTE(primary_mode|1, high_16 + 0x001a);
  1004. printk("%sn", (IN_BYTE(high_16 + 0x001a) & 1) ? "MASTER" : "PCI");
  1005. }
  1006. if (!(secondary_mode & 1)) {
  1007. printk("%s: FORCING SECONDARY MODE BIT 0x%02x -> 0x%02x ",
  1008. name, secondary_mode, (secondary_mode|1));
  1009. OUT_BYTE(secondary_mode|1, high_16 + 0x001b);
  1010. printk("%sn", (IN_BYTE(high_16 + 0x001b) & 1) ? "MASTER" : "PCI");
  1011. }
  1012. #endif /* CONFIG_PDC202XX_MASTER */
  1013. #if defined(DISPLAY_PDC202XX_TIMINGS) && defined(CONFIG_PROC_FS)
  1014. if (!pdc202xx_proc) {
  1015. pdc202xx_proc = 1;
  1016. bmide_dev = dev;
  1017. pdc202xx_display_info = &pdc202xx_get_info;
  1018. }
  1019. #endif /* DISPLAY_PDC202XX_TIMINGS && CONFIG_PROC_FS */
  1020. return dev->irq;
  1021. }
  1022. unsigned int __init ata66_pdc202xx (ide_hwif_t *hwif)
  1023. {
  1024. unsigned short mask = (hwif->channel) ? (1<<11) : (1<<10);
  1025. unsigned short CIS;
  1026.          switch(hwif->pci_dev->device) {
  1027. case PCI_DEVICE_ID_PROMISE_20276:
  1028. case PCI_DEVICE_ID_PROMISE_20275:
  1029. case PCI_DEVICE_ID_PROMISE_20269:
  1030. case PCI_DEVICE_ID_PROMISE_20268:
  1031. case PCI_DEVICE_ID_PROMISE_20270:
  1032. OUT_BYTE(0x0b, (hwif->dma_base + 1));
  1033. return (!(IN_BYTE((hwif->dma_base + 3)) & 0x04));
  1034. /* check 80pin cable */
  1035. default:
  1036. pci_read_config_word(hwif->pci_dev, 0x50, &CIS);
  1037. return (!(CIS & mask));
  1038. /* check 80pin cable */
  1039. }
  1040. }
  1041. void __init ide_init_pdc202xx (ide_hwif_t *hwif)
  1042. {
  1043. hwif->tuneproc  = &pdc202xx_tune_drive;
  1044. hwif->quirkproc = &pdc202xx_quirkproc;
  1045. hwif->resetproc = &pdc202xx_reset;
  1046.         switch(hwif->pci_dev->device) {
  1047. case PCI_DEVICE_ID_PROMISE_20276:
  1048. case PCI_DEVICE_ID_PROMISE_20275:
  1049. case PCI_DEVICE_ID_PROMISE_20269:
  1050. case PCI_DEVICE_ID_PROMISE_20268:
  1051. case PCI_DEVICE_ID_PROMISE_20270:
  1052. hwif->speedproc = &pdc202xx_new_tune_chipset;
  1053. break;
  1054. case PCI_DEVICE_ID_PROMISE_20267:
  1055. case PCI_DEVICE_ID_PROMISE_20265:
  1056. case PCI_DEVICE_ID_PROMISE_20262:
  1057. hwif->busproc   = &pdc202xx_tristate;
  1058. case PCI_DEVICE_ID_PROMISE_20246:
  1059. hwif->speedproc = &pdc202xx_tune_chipset;
  1060. default:
  1061. break;
  1062. }
  1063. #undef CONFIG_PDC202XX_32_UNMASK
  1064. #ifdef CONFIG_PDC202XX_32_UNMASK
  1065. hwif->drives[0].io_32bit = 1;
  1066. hwif->drives[1].io_32bit = 1;
  1067. hwif->drives[0].unmask = 1;
  1068. hwif->drives[1].unmask = 1;
  1069. #endif /* CONFIG_PDC202XX_32_UNMASK */
  1070. #ifdef CONFIG_BLK_DEV_IDEDMA
  1071. if (hwif->dma_base) {
  1072. hwif->dmaproc = &pdc202xx_dmaproc;
  1073. if (!noautodma)
  1074. hwif->autodma = 1;
  1075. } else {
  1076. hwif->drives[0].autotune = 1;
  1077. hwif->drives[1].autotune = 1;
  1078. hwif->autodma = 0;
  1079. }
  1080. #else /* !CONFIG_BLK_DEV_IDEDMA */
  1081. hwif->drives[0].autotune = 1;
  1082. hwif->drives[1].autotune = 1;
  1083. hwif->autodma = 0;
  1084. #endif /* CONFIG_BLK_DEV_IDEDMA */
  1085. }