ide-pmac.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:44k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * linux/drivers/ide/ide-pmac.c
  3.  *
  4.  * Support for IDE interfaces on PowerMacs.
  5.  * These IDE interfaces are memory-mapped and have a DBDMA channel
  6.  * for doing DMA.
  7.  *
  8.  *  Copyright (C) 1998-2001 Paul Mackerras & Ben. Herrenschmidt
  9.  *
  10.  *  This program is free software; you can redistribute it and/or
  11.  *  modify it under the terms of the GNU General Public License
  12.  *  as published by the Free Software Foundation; either version
  13.  *  2 of the License, or (at your option) any later version.
  14.  *
  15.  * Some code taken from drivers/ide/ide-dma.c:
  16.  *
  17.  *  Copyright (c) 1995-1998  Mark Lord
  18.  *
  19.  */
  20. #include <linux/config.h>
  21. #include <linux/types.h>
  22. #include <linux/kernel.h>
  23. #include <linux/sched.h>
  24. #include <linux/init.h>
  25. #include <linux/delay.h>
  26. #include <linux/ide.h>
  27. #include <linux/notifier.h>
  28. #include <linux/reboot.h>
  29. #include <asm/prom.h>
  30. #include <asm/io.h>
  31. #include <asm/dbdma.h>
  32. #include <asm/ide.h>
  33. #include <asm/mediabay.h>
  34. #include <asm/machdep.h>
  35. #include <asm/pmac_feature.h>
  36. #include <asm/sections.h>
  37. #include <asm/irq.h>
  38. #ifdef CONFIG_PMAC_PBOOK
  39. #include <linux/adb.h>
  40. #include <linux/pmu.h>
  41. #endif
  42. #include "ide_modes.h"
  43. extern char *ide_dmafunc_verbose(ide_dma_action_t dmafunc);
  44. extern void ide_do_request(ide_hwgroup_t *hwgroup, int masked_irq);
  45. #define IDE_PMAC_DEBUG
  46. #define DMA_WAIT_TIMEOUT 500
  47. struct pmac_ide_hwif {
  48. ide_ioreg_t regbase;
  49. int irq;
  50. int kind;
  51. int aapl_bus_id;
  52. struct device_node* node;
  53. u32 timings[2];
  54. struct resource* reg_resource;
  55. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
  56. volatile struct dbdma_regs* dma_regs;
  57. struct dbdma_cmd* dma_table;
  58. struct resource* dma_resource;
  59. #endif
  60. } pmac_ide[MAX_HWIFS] __pmacdata;
  61. static int pmac_ide_count;
  62. enum {
  63. controller_ohare, /* OHare based */
  64. controller_heathrow, /* Heathrow/Paddington */
  65. controller_kl_ata3, /* KeyLargo ATA-3 */
  66. controller_kl_ata4, /* KeyLargo ATA-4 */
  67. controller_kl_ata4_80 /* KeyLargo ATA-4 with 80 conductor cable */
  68. };
  69. /*
  70.  * Extra registers, both 32-bit little-endian
  71.  */
  72. #define IDE_TIMING_CONFIG 0x200
  73. #define IDE_INTERRUPT 0x300
  74. /*
  75.  * Timing configuration register definitions
  76.  */
  77. /* Number of IDE_SYSCLK_NS ticks, argument is in nanoseconds */
  78. #define SYSCLK_TICKS(t) (((t) + IDE_SYSCLK_NS - 1) / IDE_SYSCLK_NS)
  79. #define SYSCLK_TICKS_66(t) (((t) + IDE_SYSCLK_66_NS - 1) / IDE_SYSCLK_66_NS)
  80. #define IDE_SYSCLK_NS 30 /* 33Mhz cell */
  81. #define IDE_SYSCLK_66_NS 15 /* 66Mhz cell */
  82. /* 66Mhz cell, found in KeyLargo. Can do ultra mode 0 to 2 on
  83.  * 40 connector cable and to 4 on 80 connector one.
  84.  * Clock unit is 15ns (66Mhz)
  85.  * 
  86.  * 3 Values can be programmed:
  87.  *  - Write data setup, which appears to match the cycle time. They
  88.  *    also call it DIOW setup.
  89.  *  - Ready to pause time (from spec)
  90.  *  - Address setup. That one is weird. I don't see where exactly
  91.  *    it fits in UDMA cycles, I got it's name from an obscure piece
  92.  *    of commented out code in Darwin. They leave it to 0, we do as
  93.  *    well, despite a comment that would lead to think it has a
  94.  *    min value of 45ns.
  95.  * Apple also add 60ns to the write data setup (or cycle time ?) on
  96.  * reads. I can't explain that, I tried it and it broke everything
  97.  * here.
  98.  */
  99. #define TR_66_UDMA_MASK 0xfff00000
  100. #define TR_66_UDMA_EN 0x00100000 /* Enable Ultra mode for DMA */
  101. #define TR_66_UDMA_ADDRSETUP_MASK 0xe0000000 /* Address setup */
  102. #define TR_66_UDMA_ADDRSETUP_SHIFT 29
  103. #define TR_66_UDMA_RDY2PAUS_MASK 0x1e000000 /* Ready 2 pause time */
  104. #define TR_66_UDMA_RDY2PAUS_SHIFT 25
  105. #define TR_66_UDMA_WRDATASETUP_MASK 0x01e00000 /* Write data setup time */
  106. #define TR_66_UDMA_WRDATASETUP_SHIFT 21
  107. #define TR_66_MDMA_MASK 0x000ffc00
  108. #define TR_66_MDMA_RECOVERY_MASK 0x000f8000
  109. #define TR_66_MDMA_RECOVERY_SHIFT 15
  110. #define TR_66_MDMA_ACCESS_MASK 0x00007c00
  111. #define TR_66_MDMA_ACCESS_SHIFT 10
  112. #define TR_66_PIO_MASK 0x000003ff
  113. #define TR_66_PIO_RECOVERY_MASK 0x000003e0
  114. #define TR_66_PIO_RECOVERY_SHIFT 5
  115. #define TR_66_PIO_ACCESS_MASK 0x0000001f
  116. #define TR_66_PIO_ACCESS_SHIFT 0
  117. /* 33Mhz cell, found in OHare, Heathrow (& Paddington) and KeyLargo
  118.  * Can do pio & mdma modes, clock unit is 30ns (33Mhz)
  119.  * 
  120.  * The access time and recovery time can be programmed. Some older
  121.  * Darwin code base limit OHare to 150ns cycle time. I decided to do
  122.  * the same here fore safety against broken old hardware ;)
  123.  * The HalfTick bit, when set, adds half a clock (15ns) to the access
  124.  * time and removes one from recovery. It's not supported on KeyLargo
  125.  * implementation afaik. The E bit appears to be set for PIO mode 0 and
  126.  * is used to reach long timings used in this mode.
  127.  */
  128. #define TR_33_MDMA_MASK 0x003ff800
  129. #define TR_33_MDMA_RECOVERY_MASK 0x001f0000
  130. #define TR_33_MDMA_RECOVERY_SHIFT 16
  131. #define TR_33_MDMA_ACCESS_MASK 0x0000f800
  132. #define TR_33_MDMA_ACCESS_SHIFT 11
  133. #define TR_33_MDMA_HALFTICK 0x00200000
  134. #define TR_33_PIO_MASK 0x000007ff
  135. #define TR_33_PIO_E 0x00000400
  136. #define TR_33_PIO_RECOVERY_MASK 0x000003e0
  137. #define TR_33_PIO_RECOVERY_SHIFT 5
  138. #define TR_33_PIO_ACCESS_MASK 0x0000001f
  139. #define TR_33_PIO_ACCESS_SHIFT 0
  140. /*
  141.  * Interrupt register definitions
  142.  */
  143. #define IDE_INTR_DMA 0x80000000
  144. #define IDE_INTR_DEVICE 0x40000000
  145. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
  146. /* Rounded Multiword DMA timings
  147.  * 
  148.  * I gave up finding a generic formula for all controller
  149.  * types and instead, built tables based on timing values
  150.  * used by Apple in Darwin's implementation.
  151.  */
  152. struct mdma_timings_t {
  153. int accessTime;
  154. int recoveryTime;
  155. int cycleTime;
  156. };
  157. struct mdma_timings_t mdma_timings_33[] __pmacdata =
  158. {
  159.     { 240, 240, 480 },
  160.     { 180, 180, 360 },
  161.     { 135, 135, 270 },
  162.     { 120, 120, 240 },
  163.     { 105, 105, 210 },
  164.     {  90,  90, 180 },
  165.     {  75,  75, 150 },
  166.     {  75,  45, 120 },
  167.     {   0,   0,   0 }
  168. };
  169. struct mdma_timings_t mdma_timings_33k[] __pmacdata =
  170. {
  171.     { 240, 240, 480 },
  172.     { 180, 180, 360 },
  173.     { 150, 150, 300 },
  174.     { 120, 120, 240 },
  175.     {  90, 120, 210 },
  176.     {  90,  90, 180 },
  177.     {  90,  60, 150 },
  178.     {  90,  30, 120 },
  179.     {   0,   0,   0 }
  180. };
  181. struct mdma_timings_t mdma_timings_66[] __pmacdata =
  182. {
  183.     { 240, 240, 480 },
  184.     { 180, 180, 360 },
  185.     { 135, 135, 270 },
  186.     { 120, 120, 240 },
  187.     { 105, 105, 210 },
  188.     {  90,  90, 180 },
  189.     {  90,  75, 165 },
  190.     {  75,  45, 120 },
  191.     {   0,   0,   0 }
  192. };
  193. /* Ultra DMA timings (rounded) */
  194. struct {
  195. int addrSetup; /* ??? */
  196. int rdy2pause;
  197. int wrDataSetup;
  198. } udma_timings[] __pmacdata =
  199. {
  200.     {   0, 180,  120 }, /* Mode 0 */
  201.     {   0, 150,  90 }, /*      1 */
  202.     {   0, 120,  60 }, /*      2 */
  203.     {   0, 90,   45 }, /*      3 */
  204.     {   0, 90,   30 } /*      4 */
  205. };
  206. /* allow up to 256 DBDMA commands per xfer */
  207. #define MAX_DCMDS 256
  208. /* Wait 2s for disk to answer on IDE bus after
  209.  * enable operation.
  210.  * NOTE: There is at least one case I know of a disk that needs about 10sec
  211.  *       before anwering on the bus. I beleive we could add a kernel command
  212.  *       line arg to override this delay for such cases.
  213.  */
  214. #define IDE_WAKEUP_DELAY_MS 2000
  215. static void pmac_ide_setup_dma(struct device_node *np, int ix);
  216. static int pmac_ide_dmaproc(ide_dma_action_t func, ide_drive_t *drive);
  217. static int pmac_ide_build_dmatable(ide_drive_t *drive, int ix, int wr);
  218. static int pmac_ide_tune_chipset(ide_drive_t *drive, byte speed);
  219. static void pmac_ide_tuneproc(ide_drive_t *drive, byte pio);
  220. static void pmac_ide_selectproc(ide_drive_t *drive);
  221. #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
  222. #ifdef CONFIG_PMAC_PBOOK
  223. static int idepmac_notify_sleep(struct pmu_sleep_notifier *self, int when);
  224. struct pmu_sleep_notifier idepmac_sleep_notifier = {
  225. idepmac_notify_sleep, SLEEP_LEVEL_BLOCK,
  226. };
  227. #endif /* CONFIG_PMAC_PBOOK */
  228. static int pmac_ide_notify_reboot(struct notifier_block *, unsigned long, void *);
  229. static struct notifier_block pmac_ide_reboot_notifier = {
  230. pmac_ide_notify_reboot,
  231. NULL,
  232. 0
  233. };
  234. static int __pmac
  235. pmac_ide_find(ide_drive_t *drive)
  236. {
  237. ide_hwif_t *hwif = HWIF(drive);
  238. ide_ioreg_t base;
  239. int i;
  240. for (i=0; i<pmac_ide_count; i++) {
  241. base = pmac_ide[i].regbase;
  242. if (base && base == hwif->io_ports[0])
  243. return i;
  244. }
  245. return -1;
  246. }
  247. /*
  248.  * N.B. this can't be an initfunc, because the media-bay task can
  249.  * call ide_[un]register at any time.
  250.  */
  251. void __pmac
  252. pmac_ide_init_hwif_ports(hw_regs_t *hw,
  253.       ide_ioreg_t data_port, ide_ioreg_t ctrl_port,
  254.       int *irq)
  255. {
  256. int i, ix;
  257. if (data_port == 0)
  258. return;
  259. for (ix = 0; ix < MAX_HWIFS; ++ix)
  260. if (data_port == pmac_ide[ix].regbase)
  261. break;
  262. if (ix >= MAX_HWIFS) {
  263. /* Probably a PCI interface... */
  264. for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; ++i)
  265. hw->io_ports[i] = data_port + i - IDE_DATA_OFFSET;
  266. hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
  267. return;
  268. }
  269. for (i = 0; i < 8; ++i)
  270. hw->io_ports[i] = data_port + i * 0x10;
  271. hw->io_ports[8] = data_port + 0x160;
  272. if (irq != NULL)
  273. *irq = pmac_ide[ix].irq;
  274. ide_hwifs[ix].tuneproc = pmac_ide_tuneproc;
  275. ide_hwifs[ix].selectproc = pmac_ide_selectproc;
  276. ide_hwifs[ix].speedproc = &pmac_ide_tune_chipset;
  277. if (pmac_ide[ix].dma_regs && pmac_ide[ix].dma_table) {
  278. ide_hwifs[ix].dmaproc = &pmac_ide_dmaproc;
  279. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC_AUTO
  280. if (!noautodma)
  281. ide_hwifs[ix].autodma = 1;
  282. #endif
  283. }
  284. }
  285. #if 0
  286. /* This one could be later extended to handle CMD IDE and be used by some kind
  287.  * of /proc interface. I want to be able to get the devicetree path of a block
  288.  * device for yaboot configuration
  289.  */
  290. struct device_node*
  291. pmac_ide_get_devnode(ide_drive_t *drive)
  292. {
  293. int i = pmac_ide_find(drive);
  294. if (i < 0)
  295. return NULL;
  296. return pmac_ide[i].node;
  297. }
  298. #endif
  299. /* Setup timings for the selected drive (master/slave). I still need to verify if this
  300.  * is enough, I beleive selectproc will be called whenever an IDE command is started,
  301.  * but... */
  302. static void __pmac
  303. pmac_ide_selectproc(ide_drive_t *drive)
  304. {
  305. int i = pmac_ide_find(drive);
  306. if (i < 0)
  307. return;
  308. if (drive->select.b.unit & 0x01)
  309. out_le32((unsigned *)(IDE_DATA_REG + IDE_TIMING_CONFIG + _IO_BASE),
  310. pmac_ide[i].timings[1]);
  311. else
  312. out_le32((unsigned *)(IDE_DATA_REG + IDE_TIMING_CONFIG + _IO_BASE),
  313. pmac_ide[i].timings[0]);
  314. (void)in_le32((unsigned *)(IDE_DATA_REG + IDE_TIMING_CONFIG + _IO_BASE));
  315. }
  316. /* Note: We don't use the generic routine here because for some
  317.  * yet unexplained reasons, it cause some media-bay CD-ROMs to
  318.  * lockup the bus. Strangely, this new version of the code is
  319.  * almost identical to the generic one and works, I've not yet
  320.  * managed to figure out what bit is causing the lockup in the
  321.  * generic code, possibly a timing issue...
  322.  * 
  323.  * --BenH
  324.  */
  325. static int __pmac
  326. wait_for_ready(ide_drive_t *drive)
  327. {
  328. /* Timeout bumped for some powerbooks */
  329. int timeout = 2000;
  330. byte stat;
  331. while(--timeout) {
  332. stat = GET_STAT();
  333. if(!(stat & BUSY_STAT)) {
  334. if (drive->ready_stat == 0)
  335. break;
  336. else if((stat & drive->ready_stat) || (stat & ERR_STAT))
  337. break;
  338. }
  339. mdelay(1);
  340. }
  341. if((stat & ERR_STAT) || timeout <= 0) {
  342. if (stat & ERR_STAT) {
  343. printk(KERN_ERR "ide_pmac: wait_for_ready, error status: %xn", stat);
  344. }
  345. return 1;
  346. }
  347. return 0;
  348. }
  349. static int __pmac
  350. pmac_ide_do_setfeature(ide_drive_t *drive, byte command)
  351. {
  352. int result = 1;
  353. unsigned long flags;
  354. ide_hwif_t *hwif = HWIF(drive);
  355. disable_irq(hwif->irq); /* disable_irq_nosync ?? */
  356. udelay(1);
  357. SELECT_DRIVE(HWIF(drive), drive);
  358. SELECT_MASK(HWIF(drive), drive, 0);
  359. udelay(1);
  360. (void)GET_STAT(); /* Get rid of pending error state */
  361. if(wait_for_ready(drive)) {
  362. printk(KERN_ERR "pmac_ide_do_setfeature disk not ready before SET_FEATURE!n");
  363. goto out;
  364. }
  365. udelay(10);
  366. OUT_BYTE(drive->ctl | 2, IDE_CONTROL_REG);
  367. OUT_BYTE(command, IDE_NSECTOR_REG);
  368. OUT_BYTE(SETFEATURES_XFER, IDE_FEATURE_REG);
  369. OUT_BYTE(WIN_SETFEATURES, IDE_COMMAND_REG);
  370. udelay(1);
  371. __save_flags(flags); /* local CPU only */
  372. ide__sti(); /* local CPU only -- for jiffies */
  373. result = wait_for_ready(drive);
  374. __restore_flags(flags); /* local CPU only */
  375. OUT_BYTE(drive->ctl, IDE_CONTROL_REG);
  376. if (result)
  377. printk(KERN_ERR "pmac_ide_do_setfeature disk not ready after SET_FEATURE !n");
  378. out:
  379. SELECT_MASK(HWIF(drive), drive, 0);
  380. if (result == 0) {
  381. drive->id->dma_ultra &= ~0xFF00;
  382. drive->id->dma_mword &= ~0x0F00;
  383. drive->id->dma_1word &= ~0x0F00;
  384. switch(command) {
  385. case XFER_UDMA_7:   drive->id->dma_ultra |= 0x8080; break;
  386. case XFER_UDMA_6:   drive->id->dma_ultra |= 0x4040; break;
  387. case XFER_UDMA_5:   drive->id->dma_ultra |= 0x2020; break;
  388. case XFER_UDMA_4:   drive->id->dma_ultra |= 0x1010; break;
  389. case XFER_UDMA_3:   drive->id->dma_ultra |= 0x0808; break;
  390. case XFER_UDMA_2:   drive->id->dma_ultra |= 0x0404; break;
  391. case XFER_UDMA_1:   drive->id->dma_ultra |= 0x0202; break;
  392. case XFER_UDMA_0:   drive->id->dma_ultra |= 0x0101; break;
  393. case XFER_MW_DMA_2: drive->id->dma_mword |= 0x0404; break;
  394. case XFER_MW_DMA_1: drive->id->dma_mword |= 0x0202; break;
  395. case XFER_MW_DMA_0: drive->id->dma_mword |= 0x0101; break;
  396. case XFER_SW_DMA_2: drive->id->dma_1word |= 0x0404; break;
  397. case XFER_SW_DMA_1: drive->id->dma_1word |= 0x0202; break;
  398. case XFER_SW_DMA_0: drive->id->dma_1word |= 0x0101; break;
  399. default: break;
  400. }
  401. }
  402. enable_irq(hwif->irq);
  403. return result;
  404. }
  405. /* Calculate PIO timings */
  406. static void __pmac
  407. pmac_ide_tuneproc(ide_drive_t *drive, byte pio)
  408. {
  409. ide_pio_data_t d;
  410. int i;
  411. u32 *timings;
  412. unsigned accessTicks, recTicks;
  413. unsigned accessTime, recTime;
  414. i = pmac_ide_find(drive);
  415. if (i < 0)
  416. return;
  417. pio = ide_get_best_pio_mode(drive, pio, 4, &d);
  418. accessTicks = SYSCLK_TICKS(ide_pio_timings[pio].active_time);
  419. if (drive->select.b.unit & 0x01)
  420. timings = &pmac_ide[i].timings[1];
  421. else
  422. timings = &pmac_ide[i].timings[0];
  423. recTime = d.cycle_time - ide_pio_timings[pio].active_time
  424. - ide_pio_timings[pio].setup_time;
  425. recTime = max(recTime, 150U);
  426. accessTime = ide_pio_timings[pio].active_time;
  427. accessTime = max(accessTime, 150U);
  428. if (pmac_ide[i].kind == controller_kl_ata4 ||
  429. pmac_ide[i].kind == controller_kl_ata4_80) {
  430. /* 66Mhz cell */
  431. accessTicks = SYSCLK_TICKS_66(accessTime);
  432. accessTicks = min(accessTicks, 0x1fU);
  433. recTicks = SYSCLK_TICKS_66(recTime);
  434. recTicks = min(recTicks, 0x1fU);
  435. *timings = ((*timings) & ~TR_66_PIO_MASK) |
  436. (accessTicks << TR_66_PIO_ACCESS_SHIFT) |
  437. (recTicks << TR_66_PIO_RECOVERY_SHIFT);
  438. } else {
  439. /* 33Mhz cell */
  440. int ebit = 0;
  441. accessTicks = SYSCLK_TICKS(accessTime);
  442. accessTicks = min(accessTicks, 0x1fU);
  443. accessTicks = max(accessTicks, 4U);
  444. recTicks = SYSCLK_TICKS(recTime);
  445. recTicks = min(recTicks, 0x1fU);
  446. recTicks = max(recTicks, 5U) - 4;
  447. if (recTicks > 9) {
  448. recTicks--; /* guess, but it's only for PIO0, so... */
  449. ebit = 1;
  450. }
  451. *timings = ((*timings) & ~TR_33_PIO_MASK) |
  452. (accessTicks << TR_33_PIO_ACCESS_SHIFT) |
  453. (recTicks << TR_33_PIO_RECOVERY_SHIFT);
  454. if (ebit)
  455. *timings |= TR_33_PIO_E;
  456. }
  457. #ifdef IDE_PMAC_DEBUG
  458. printk(KERN_ERR "ide_pmac: Set PIO timing for mode %d, reg: 0x%08xn",
  459. pio,  *timings);
  460. #endif
  461. if (drive->select.all == IN_BYTE(IDE_SELECT_REG))
  462. pmac_ide_selectproc(drive);
  463. }
  464. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
  465. static int __pmac
  466. set_timings_udma(u32 *timings, byte speed)
  467. {
  468. unsigned rdyToPauseTicks, wrDataSetupTicks, addrTicks;
  469. rdyToPauseTicks = SYSCLK_TICKS_66(udma_timings[speed & 0xf].rdy2pause);
  470. wrDataSetupTicks = SYSCLK_TICKS_66(udma_timings[speed & 0xf].wrDataSetup);
  471. addrTicks = SYSCLK_TICKS_66(udma_timings[speed & 0xf].addrSetup);
  472. *timings = ((*timings) & ~(TR_66_UDMA_MASK | TR_66_MDMA_MASK)) |
  473. (wrDataSetupTicks << TR_66_UDMA_WRDATASETUP_SHIFT) | 
  474. (rdyToPauseTicks << TR_66_UDMA_RDY2PAUS_SHIFT) |
  475. (addrTicks <<TR_66_UDMA_ADDRSETUP_SHIFT) |
  476. TR_66_UDMA_EN;
  477. #ifdef IDE_PMAC_DEBUG
  478. printk(KERN_ERR "ide_pmac: Set UDMA timing for mode %d, reg: 0x%08xn",
  479. speed & 0xf,  *timings);
  480. #endif
  481. return 0;
  482. }
  483. static int __pmac
  484. set_timings_mdma(int intf_type, u32 *timings, byte speed, int drive_cycle_time)
  485. {
  486. int cycleTime, accessTime, recTime;
  487. unsigned accessTicks, recTicks;
  488. struct mdma_timings_t* tm;
  489. int i;
  490. /* Get default cycle time for mode */
  491. switch(speed & 0xf) {
  492. case 0: cycleTime = 480; break;
  493. case 1: cycleTime = 150; break;
  494. case 2: cycleTime = 120; break;
  495. default:
  496. return -1;
  497. }
  498. /* Adjust for drive */
  499. if (drive_cycle_time && drive_cycle_time > cycleTime)
  500. cycleTime = drive_cycle_time;
  501. /* OHare limits according to some old Apple sources */
  502. if ((intf_type == controller_ohare) && (cycleTime < 150))
  503. cycleTime = 150;
  504. /* Get the proper timing array for this controller */
  505. switch(intf_type) {
  506. case controller_kl_ata4:
  507. case controller_kl_ata4_80:
  508. tm = mdma_timings_66;
  509. break;
  510. case controller_kl_ata3:
  511. tm = mdma_timings_33k;
  512. break;
  513. default:
  514. tm = mdma_timings_33;
  515. break;
  516. }
  517. /* Lookup matching access & recovery times */
  518. i = -1;
  519. for (;;) {
  520. if (tm[i+1].cycleTime < cycleTime)
  521. break;
  522. i++;
  523. }
  524. if (i < 0)
  525. return -1;
  526. cycleTime = tm[i].cycleTime;
  527. accessTime = tm[i].accessTime;
  528. recTime = tm[i].recoveryTime;
  529. #ifdef IDE_PMAC_DEBUG
  530. printk(KERN_ERR "ide_pmac: MDMA, cycleTime: %d, accessTime: %d, recTime: %dn",
  531. cycleTime, accessTime, recTime);
  532. #endif
  533. if (intf_type == controller_kl_ata4 || intf_type == controller_kl_ata4_80) {
  534. /* 66Mhz cell */
  535. accessTicks = SYSCLK_TICKS_66(accessTime);
  536. accessTicks = min(accessTicks, 0x1fU);
  537. accessTicks = max(accessTicks, 0x1U);
  538. recTicks = SYSCLK_TICKS_66(recTime);
  539. recTicks = min(recTicks, 0x1fU);
  540. recTicks = max(recTicks, 0x3U);
  541. /* Clear out mdma bits and disable udma */
  542. *timings = ((*timings) & ~(TR_66_MDMA_MASK | TR_66_UDMA_MASK)) |
  543. (accessTicks << TR_66_MDMA_ACCESS_SHIFT) |
  544. (recTicks << TR_66_MDMA_RECOVERY_SHIFT);
  545. } else if (intf_type == controller_kl_ata3) {
  546. /* 33Mhz cell on KeyLargo */
  547. accessTicks = SYSCLK_TICKS(accessTime);
  548. accessTicks = max(accessTicks, 1U);
  549. accessTicks = min(accessTicks, 0x1fU);
  550. accessTime = accessTicks * IDE_SYSCLK_NS;
  551. recTicks = SYSCLK_TICKS(recTime);
  552. recTicks = max(recTicks, 1U);
  553. recTicks = min(recTicks, 0x1fU);
  554. *timings = ((*timings) & ~TR_33_MDMA_MASK) |
  555. (accessTicks << TR_33_MDMA_ACCESS_SHIFT) |
  556. (recTicks << TR_33_MDMA_RECOVERY_SHIFT);
  557. } else {
  558. /* 33Mhz cell on others */
  559. int halfTick = 0;
  560. int origAccessTime = accessTime;
  561. int origRecTime = recTime;
  562. accessTicks = SYSCLK_TICKS(accessTime);
  563. accessTicks = max(accessTicks, 1U);
  564. accessTicks = min(accessTicks, 0x1fU);
  565. accessTime = accessTicks * IDE_SYSCLK_NS;
  566. recTicks = SYSCLK_TICKS(recTime);
  567. recTicks = max(recTicks, 2U) - 1;
  568. recTicks = min(recTicks, 0x1fU);
  569. recTime = (recTicks + 1) * IDE_SYSCLK_NS;
  570. if ((accessTicks > 1) &&
  571.     ((accessTime - IDE_SYSCLK_NS/2) >= origAccessTime) &&
  572.     ((recTime - IDE_SYSCLK_NS/2) >= origRecTime)) {
  573.              halfTick = 1;
  574. accessTicks--;
  575. }
  576. *timings = ((*timings) & ~TR_33_MDMA_MASK) |
  577. (accessTicks << TR_33_MDMA_ACCESS_SHIFT) |
  578. (recTicks << TR_33_MDMA_RECOVERY_SHIFT);
  579. if (halfTick)
  580. *timings |= TR_33_MDMA_HALFTICK;
  581. }
  582. #ifdef IDE_PMAC_DEBUG
  583. printk(KERN_ERR "ide_pmac: Set MDMA timing for mode %d, reg: 0x%08xn",
  584. speed & 0xf,  *timings);
  585. #endif
  586. return 0;
  587. }
  588. #endif /* #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC */
  589. /* You may notice we don't use this function on normal operation,
  590.  * our, normal mdma function is supposed to be more precise
  591.  */
  592. static int __pmac
  593. pmac_ide_tune_chipset (ide_drive_t *drive, byte speed)
  594. {
  595. int intf = pmac_ide_find(drive);
  596. int unit = (drive->select.b.unit & 0x01);
  597. int ret = 0;
  598. u32 *timings;
  599. if (intf < 0)
  600. return 1;
  601. timings = &pmac_ide[intf].timings[unit];
  602. switch(speed) {
  603. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
  604. case XFER_UDMA_4:
  605. case XFER_UDMA_3:
  606. if (pmac_ide[intf].kind != controller_kl_ata4_80)
  607. return 1;
  608. case XFER_UDMA_2:
  609. case XFER_UDMA_1:
  610. case XFER_UDMA_0:
  611. if (pmac_ide[intf].kind != controller_kl_ata4 &&
  612. pmac_ide[intf].kind != controller_kl_ata4_80)
  613. return 1;
  614. ret = set_timings_udma(timings, speed);
  615. break;
  616. case XFER_MW_DMA_2:
  617. case XFER_MW_DMA_1:
  618. case XFER_MW_DMA_0:
  619. ret = set_timings_mdma(pmac_ide[intf].kind, timings, speed, 0);
  620. break;
  621. case XFER_SW_DMA_2:
  622. case XFER_SW_DMA_1:
  623. case XFER_SW_DMA_0:
  624. return 1;
  625. #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
  626. case XFER_PIO_4:
  627. case XFER_PIO_3:
  628. case XFER_PIO_2:
  629. case XFER_PIO_1:
  630. case XFER_PIO_0:
  631. pmac_ide_tuneproc(drive, speed & 0x07);
  632. break;
  633. default:
  634. ret = 1;
  635. }
  636. if (ret)
  637. return ret;
  638. ret = pmac_ide_do_setfeature(drive, speed);
  639. if (ret)
  640. return ret;
  641. pmac_ide_selectproc(drive);
  642. drive->current_speed = speed;
  643. return 0;
  644. }
  645. static void __pmac
  646. sanitize_timings(int i)
  647. {
  648. unsigned value;
  649. switch(pmac_ide[i].kind) {
  650. case controller_kl_ata4:
  651. case controller_kl_ata4_80:
  652. value = 0x0008438c;
  653. break;
  654. case controller_kl_ata3:
  655. value = 0x00084526;
  656. break;
  657. case controller_heathrow:
  658. case controller_ohare:
  659. default:
  660. value = 0x00074526;
  661. break;
  662. }
  663. pmac_ide[i].timings[0] = pmac_ide[i].timings[1] = value;
  664. }
  665. ide_ioreg_t __pmac
  666. pmac_ide_get_base(int index)
  667. {
  668. return pmac_ide[index].regbase;
  669. }
  670. int __pmac
  671. pmac_ide_check_base(ide_ioreg_t base)
  672. {
  673. int ix;
  674.   for (ix = 0; ix < MAX_HWIFS; ++ix)
  675. if (base == pmac_ide[ix].regbase)
  676. return ix;
  677. return -1;
  678. }
  679. int __pmac
  680. pmac_ide_get_irq(ide_ioreg_t base)
  681. {
  682. int ix;
  683. for (ix = 0; ix < MAX_HWIFS; ++ix)
  684. if (base == pmac_ide[ix].regbase)
  685. return pmac_ide[ix].irq;
  686. return 0;
  687. }
  688. static int ide_majors[]  __pmacdata = { 3, 22, 33, 34, 56, 57 };
  689. kdev_t __init
  690. pmac_find_ide_boot(char *bootdevice, int n)
  691. {
  692. int i;
  693. /*
  694.  * Look through the list of IDE interfaces for this one.
  695.  */
  696. for (i = 0; i < pmac_ide_count; ++i) {
  697. char *name;
  698. if (!pmac_ide[i].node || !pmac_ide[i].node->full_name)
  699. continue;
  700. name = pmac_ide[i].node->full_name;
  701. if (memcmp(name, bootdevice, n) == 0 && name[n] == 0) {
  702. /* XXX should cope with the 2nd drive as well... */
  703. return MKDEV(ide_majors[i], 0);
  704. }
  705. }
  706. return 0;
  707. }
  708. void __init
  709. pmac_ide_probe(void)
  710. {
  711. struct device_node *np;
  712. int i;
  713. struct device_node *atas;
  714. struct device_node *p, **pp, *removables, **rp;
  715. unsigned long base;
  716. int irq, big_delay;
  717. ide_hwif_t *hwif;
  718. if (_machine != _MACH_Pmac)
  719. return;
  720. pp = &atas;
  721. rp = &removables;
  722. p = find_devices("ATA");
  723. if (p == NULL)
  724. p = find_devices("IDE");
  725. if (p == NULL)
  726. p = find_type_devices("ide");
  727. if (p == NULL)
  728. p = find_type_devices("ata");
  729. /* Move removable devices such as the media-bay CDROM
  730.    on the PB3400 to the end of the list. */
  731. for (; p != NULL; p = p->next) {
  732. if (p->parent && p->parent->type
  733.     && strcasecmp(p->parent->type, "media-bay") == 0) {
  734. *rp = p;
  735. rp = &p->next;
  736. } else {
  737. *pp = p;
  738. pp = &p->next;
  739. }
  740. }
  741. *rp = NULL;
  742. *pp = removables;
  743. big_delay = 0;
  744. for (i = 0, np = atas; i < MAX_HWIFS && np != NULL; np = np->next) {
  745. struct device_node *tp;
  746. struct pmac_ide_hwif* pmhw;
  747. int *bidp;
  748. int in_bay = 0;
  749. /*
  750.  * If this node is not under a mac-io or dbdma node,
  751.  * leave it to the generic PCI driver.
  752.  */
  753. for (tp = np->parent; tp != 0; tp = tp->parent)
  754. if (tp->type && (strcmp(tp->type, "mac-io") == 0
  755.  || strcmp(tp->type, "dbdma") == 0))
  756. break;
  757. if (tp == 0)
  758. continue;
  759. if (np->n_addrs == 0) {
  760. printk(KERN_WARNING "ide: no address for device %sn",
  761.        np->full_name);
  762. continue;
  763. }
  764. /*
  765.  * If this slot is taken (e.g. by ide-pci.c) try the next one.
  766.  */
  767. while (i < MAX_HWIFS
  768.        && ide_hwifs[i].io_ports[IDE_DATA_OFFSET] != 0)
  769. ++i;
  770. if (i >= MAX_HWIFS)
  771. break;
  772. pmhw = &pmac_ide[i];
  773. /*
  774.  * Some older OFs have bogus sizes, causing request_OF_resource
  775.  * to fail. We fix them up here
  776.  */
  777. if (np->addrs[0].size > 0x1000)
  778. np->addrs[0].size = 0x1000;
  779. if (np->n_addrs > 1 && np->addrs[1].size > 0x100)
  780. np->addrs[1].size = 0x100;
  781. pmhw->reg_resource = request_OF_resource(np, 0, "  (mac-io IDE IO)");
  782. if (!pmhw->reg_resource) {
  783. printk(KERN_ERR "ide-pmac(%s): can't request IO resource !n", np->name);
  784. continue;
  785. }
  786. base = (unsigned long) ioremap(np->addrs[0].address, 0x400) - _IO_BASE;
  787. /* XXX This is bogus. Should be fixed in the registry by checking
  788.    the kind of host interrupt controller, a bit like gatwick
  789.    fixes in irq.c
  790.  */
  791. if (np->n_intrs == 0) {
  792. printk(KERN_WARNING "ide: no intrs for device %s, using 13n",
  793.        np->full_name);
  794. irq = 13;
  795. } else {
  796. irq = np->intrs[0].line;
  797. }
  798. pmhw->regbase = base;
  799. pmhw->irq = irq;
  800. pmhw->node = np;
  801. if (device_is_compatible(np, "keylargo-ata")) {
  802. if (strcmp(np->name, "ata-4") == 0)
  803. pmhw->kind = controller_kl_ata4;
  804. else
  805. pmhw->kind = controller_kl_ata3;
  806. } else if (device_is_compatible(np, "heathrow-ata"))
  807. pmhw->kind = controller_heathrow;
  808. else
  809. pmhw->kind = controller_ohare;
  810. bidp = (int *)get_property(np, "AAPL,bus-id", NULL);
  811. pmhw->aapl_bus_id =  bidp ? *bidp : 0;
  812. if (pmhw->kind == controller_kl_ata4) {
  813. char* cable = get_property(np, "cable-type", NULL);
  814. if (cable && !strncmp(cable, "80-", 3))
  815. pmhw->kind = controller_kl_ata4_80;
  816. }
  817. /* Make sure we have sane timings */
  818. sanitize_timings(i);
  819. if (np->parent && np->parent->name
  820.     && strcasecmp(np->parent->name, "media-bay") == 0) {
  821. #ifdef CONFIG_PMAC_PBOOK
  822. media_bay_set_ide_infos(np->parent,base,irq,i);
  823. #endif /* CONFIG_PMAC_PBOOK */
  824. in_bay = 1;
  825. if (!bidp)
  826. pmhw->aapl_bus_id = 1;
  827. } else if (pmhw->kind == controller_ohare) {
  828. /* The code below is having trouble on some ohare machines
  829.  * (timing related ?). Until I can put my hand on one of these
  830.  * units, I keep the old way
  831.  */
  832. ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, np, 0, 1);
  833. } else {
  834.   /* This is necessary to enable IDE when net-booting */
  835. printk(KERN_INFO "pmac_ide: enabling IDE bus ID %dn",
  836. pmhw->aapl_bus_id);
  837. ppc_md.feature_call(PMAC_FTR_IDE_RESET, np, pmhw->aapl_bus_id, 1);
  838. ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, np, pmhw->aapl_bus_id, 1);
  839. mdelay(10);
  840. ppc_md.feature_call(PMAC_FTR_IDE_RESET, np, pmhw->aapl_bus_id, 0);
  841. big_delay = 1;
  842. }
  843. hwif = &ide_hwifs[i];
  844. pmac_ide_init_hwif_ports(&hwif->hw, base, 0, &hwif->irq);
  845. memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
  846. hwif->chipset = ide_pmac;
  847. hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET] || in_bay;
  848. hwif->udma_four = (pmhw->kind == controller_kl_ata4_80);
  849. #ifdef CONFIG_PMAC_PBOOK
  850. if (in_bay && check_media_bay_by_base(base, MB_CD) == 0)
  851. hwif->noprobe = 0;
  852. #endif /* CONFIG_PMAC_PBOOK */
  853. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
  854. if (np->n_addrs >= 2) {
  855. /* has a DBDMA controller channel */
  856. pmac_ide_setup_dma(np, i);
  857. }
  858. #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
  859. ++i;
  860. }
  861. pmac_ide_count = i;
  862. if (big_delay)
  863. mdelay(IDE_WAKEUP_DELAY_MS);
  864. #ifdef CONFIG_PMAC_PBOOK
  865. pmu_register_sleep_notifier(&idepmac_sleep_notifier);
  866. #endif /* CONFIG_PMAC_PBOOK */
  867. register_reboot_notifier(&pmac_ide_reboot_notifier);
  868. }
  869. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
  870. static void __init 
  871. pmac_ide_setup_dma(struct device_node *np, int ix)
  872. {
  873. pmac_ide[ix].dma_resource = request_OF_resource(np, 1, " (mac-io IDE DMA)");
  874. if (!pmac_ide[ix].dma_resource) {
  875. printk(KERN_ERR "ide-pmac(%s): can't request DMA resource !n", np->name);
  876. return;
  877. }
  878. pmac_ide[ix].dma_regs =
  879. (volatile struct dbdma_regs*)ioremap(np->addrs[1].address, 0x200);
  880. /*
  881.  * Allocate space for the DBDMA commands.
  882.  * The +2 is +1 for the stop command and +1 to allow for
  883.  * aligning the start address to a multiple of 16 bytes.
  884.  */
  885. pmac_ide[ix].dma_table = (struct dbdma_cmd*)
  886.        kmalloc((MAX_DCMDS + 2) * sizeof(struct dbdma_cmd), GFP_KERNEL);
  887. if (pmac_ide[ix].dma_table == 0) {
  888. printk(KERN_ERR "%s: unable to allocate DMA command listn",
  889.        ide_hwifs[ix].name);
  890. return;
  891. }
  892. ide_hwifs[ix].dmaproc = &pmac_ide_dmaproc;
  893. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC_AUTO
  894. if (!noautodma)
  895. ide_hwifs[ix].autodma = 1;
  896. #endif
  897. }
  898. /*
  899.  * pmac_ide_build_dmatable builds the DBDMA command list
  900.  * for a transfer and sets the DBDMA channel to point to it.
  901.  */
  902. static int __pmac
  903. pmac_ide_build_dmatable(ide_drive_t *drive, int ix, int wr)
  904. {
  905. struct dbdma_cmd *table, *tstart;
  906. int count = 0;
  907. struct request *rq = HWGROUP(drive)->rq;
  908. struct buffer_head *bh = rq->bh;
  909. unsigned int size, addr;
  910. volatile struct dbdma_regs *dma = pmac_ide[ix].dma_regs;
  911. table = tstart = (struct dbdma_cmd *) DBDMA_ALIGN(pmac_ide[ix].dma_table);
  912. #ifdef IDE_PMAC_DEBUG
  913. if (in_le32(&dma->status) & (RUN|ACTIVE))
  914. printk("ide-pmac: channel status not stopped ! (%x)n",
  915. in_le32(&dma->status));
  916. #endif
  917. /* Make sure channel is stopped and all error conditions are clear */
  918. out_le32(&dma->control, (RUN|PAUSE|FLUSH|WAKE|DEAD) << 16);
  919. while (in_le32(&dma->status) & RUN)
  920. udelay(1);
  921. do {
  922. /*
  923.  * Determine addr and size of next buffer area.  We assume that
  924.  * individual virtual buffers are always composed linearly in
  925.  * physical memory.  For example, we assume that any 8kB buffer
  926.  * is always composed of two adjacent physical 4kB pages rather
  927.  * than two possibly non-adjacent physical 4kB pages.
  928.  */
  929. if (bh == NULL) {  /* paging requests have (rq->bh == NULL) */
  930. addr = virt_to_bus(rq->buffer);
  931. size = rq->nr_sectors << 9;
  932. } else {
  933. /* group sequential buffers into one large buffer */
  934. addr = virt_to_bus(bh->b_data);
  935. size = bh->b_size;
  936. while ((bh = bh->b_reqnext) != NULL) {
  937. if ((addr + size) != virt_to_bus(bh->b_data))
  938. break;
  939. size += bh->b_size;
  940. }
  941. }
  942. /*
  943.  * Fill in the next DBDMA command block.
  944.  * Note that one DBDMA command can transfer
  945.  * at most 65535 bytes.
  946.  */
  947. #ifdef IDE_PMAC_DEBUG
  948. if (size & 0x01)
  949. printk("ide-pmac: odd size transfer ! (%d)n", size);
  950. #endif
  951. while (size) {
  952. unsigned int tc = (size < 0xfe00)? size: 0xfe00;
  953. if (++count >= MAX_DCMDS) {
  954. printk(KERN_WARNING "%s: DMA table too smalln",
  955.        drive->name);
  956. return 0; /* revert to PIO for this request */
  957. }
  958. st_le16(&table->command, wr? OUTPUT_MORE: INPUT_MORE);
  959. st_le16(&table->req_count, tc);
  960. st_le32(&table->phy_addr, addr);
  961. table->cmd_dep = 0;
  962. table->xfer_status = 0;
  963. table->res_count = 0;
  964. addr += tc;
  965. size -= tc;
  966. ++table;
  967. }
  968. } while (bh != NULL);
  969. /* convert the last command to an input/output last command */
  970. if (count)
  971. st_le16(&table[-1].command, wr? OUTPUT_LAST: INPUT_LAST);
  972. else
  973. printk(KERN_DEBUG "%s: empty DMA table?n", drive->name);
  974. /* add the stop command to the end of the list */
  975. memset(table, 0, sizeof(struct dbdma_cmd));
  976. out_le16(&table->command, DBDMA_STOP);
  977. out_le32(&dma->cmdptr, virt_to_bus(tstart));
  978. return 1;
  979. }
  980. static __inline__ unsigned char
  981. dma_bits_to_command(unsigned char bits)
  982. {
  983. if(bits & 0x04)
  984. return XFER_MW_DMA_2;
  985. if(bits & 0x02)
  986. return XFER_MW_DMA_1;
  987. if(bits & 0x01)
  988. return XFER_MW_DMA_0;
  989. return 0;
  990. }
  991. static __inline__ unsigned char
  992. udma_bits_to_command(unsigned char bits, int high_speed)
  993. {
  994. if (high_speed) {
  995. if(bits & 0x10)
  996. return XFER_UDMA_4;
  997. if(bits & 0x08)
  998. return XFER_UDMA_3;
  999. }
  1000. if(bits & 0x04)
  1001. return XFER_UDMA_2;
  1002. if(bits & 0x02)
  1003. return XFER_UDMA_1;
  1004. if(bits & 0x01)
  1005. return XFER_UDMA_0;
  1006. return 0;
  1007. }
  1008. /* Calculate MultiWord DMA timings */
  1009. static int __pmac
  1010. pmac_ide_mdma_enable(ide_drive_t *drive, int idx)
  1011. {
  1012. byte bits = drive->id->dma_mword & 0x07;
  1013. byte feature = dma_bits_to_command(bits);
  1014. u32 *timings;
  1015. int drive_cycle_time;
  1016. struct hd_driveid *id = drive->id;
  1017. int ret;
  1018. /* Set feature on drive */
  1019.      printk(KERN_INFO "%s: Enabling MultiWord DMA %dn", drive->name, feature & 0xf);
  1020. ret = pmac_ide_do_setfeature(drive, feature);
  1021. if (ret) {
  1022.      printk(KERN_WARNING "%s: Failed !n", drive->name);
  1023.      return 0;
  1024. }
  1025. if (!drive->init_speed)
  1026. drive->init_speed = feature;
  1027. /* which drive is it ? */
  1028. if (drive->select.b.unit & 0x01)
  1029. timings = &pmac_ide[idx].timings[1];
  1030. else
  1031. timings = &pmac_ide[idx].timings[0];
  1032. /* Check if drive provide explicit cycle time */
  1033. if ((id->field_valid & 2) && (id->eide_dma_time))
  1034. drive_cycle_time = id->eide_dma_time;
  1035. else
  1036. drive_cycle_time = 0;
  1037. /* Calculate controller timings */
  1038. set_timings_mdma(pmac_ide[idx].kind, timings, feature, drive_cycle_time);
  1039. drive->current_speed = feature;
  1040. return 1;
  1041. }
  1042. /* Calculate Ultra DMA timings */
  1043. static int __pmac
  1044. pmac_ide_udma_enable(ide_drive_t *drive, int idx, int high_speed)
  1045. {
  1046. byte bits = drive->id->dma_ultra & 0x1f;
  1047. byte feature = udma_bits_to_command(bits, high_speed);
  1048. u32 *timings;
  1049. int ret;
  1050. /* Set feature on drive */
  1051.      printk(KERN_INFO "%s: Enabling Ultra DMA %dn", drive->name, feature & 0xf);
  1052. ret = pmac_ide_do_setfeature(drive, feature);
  1053. if (ret) {
  1054. printk(KERN_WARNING "%s: Failed !n", drive->name);
  1055. return 0;
  1056. }
  1057. if (!drive->init_speed)
  1058. drive->init_speed = feature;
  1059. /* which drive is it ? */
  1060. if (drive->select.b.unit & 0x01)
  1061. timings = &pmac_ide[idx].timings[1];
  1062. else
  1063. timings = &pmac_ide[idx].timings[0];
  1064. set_timings_udma(timings, feature);
  1065. drive->current_speed = feature;
  1066. return 1;
  1067. }
  1068. static int __pmac
  1069. pmac_ide_check_dma(ide_drive_t *drive)
  1070. {
  1071. int ata4, udma, idx;
  1072. struct hd_driveid *id = drive->id;
  1073. int enable = 1;
  1074. drive->using_dma = 0;
  1075. idx = pmac_ide_find(drive);
  1076. if (idx < 0)
  1077. return 0;
  1078. if (drive->media == ide_floppy)
  1079. enable = 0;
  1080. if (((id->capability & 1) == 0) && !check_drive_lists(drive, GOOD_DMA_DRIVE))
  1081. enable = 0;
  1082. if (check_drive_lists(drive, BAD_DMA_DRIVE))
  1083. enable = 0;
  1084. udma = 0;
  1085. ata4 = (pmac_ide[idx].kind == controller_kl_ata4 ||
  1086. pmac_ide[idx].kind == controller_kl_ata4_80);
  1087. if(enable) {
  1088. if (ata4 && (drive->media == ide_disk) &&
  1089.     (id->field_valid & 0x0004) && (id->dma_ultra & 0x1f)) {
  1090. /* UltraDMA modes. */
  1091. drive->using_dma = pmac_ide_udma_enable(drive, idx,
  1092. pmac_ide[idx].kind == controller_kl_ata4_80);
  1093. }
  1094. if (!drive->using_dma && (id->dma_mword & 0x0007)) {
  1095. /* Normal MultiWord DMA modes. */
  1096. drive->using_dma = pmac_ide_mdma_enable(drive, idx);
  1097. }
  1098. OUT_BYTE(0, IDE_CONTROL_REG);
  1099. /* Apply settings to controller */
  1100. pmac_ide_selectproc(drive);
  1101. }
  1102. return 0;
  1103. }
  1104. static int __pmac
  1105. pmac_ide_dmaproc(ide_dma_action_t func, ide_drive_t *drive)
  1106. {
  1107. int ix, dstat;
  1108. volatile struct dbdma_regs *dma;
  1109. byte unit = (drive->select.b.unit & 0x01);
  1110. byte ata4;
  1111. /* Can we stuff a pointer to our intf structure in config_data
  1112.  * or select_data in hwif ?
  1113.  */
  1114. ix = pmac_ide_find(drive);
  1115. if (ix < 0)
  1116. return 0;
  1117. dma = pmac_ide[ix].dma_regs;
  1118. ata4 = (pmac_ide[ix].kind == controller_kl_ata4 ||
  1119. pmac_ide[ix].kind == controller_kl_ata4_80);
  1120. switch (func) {
  1121. case ide_dma_off:
  1122. printk(KERN_INFO "%s: DMA disabledn", drive->name);
  1123. case ide_dma_off_quietly:
  1124. drive->using_dma = 0;
  1125. break;
  1126. case ide_dma_on:
  1127. case ide_dma_check:
  1128. pmac_ide_check_dma(drive);
  1129. break;
  1130. case ide_dma_read:
  1131. case ide_dma_write:
  1132. if (!pmac_ide_build_dmatable(drive, ix, func==ide_dma_write))
  1133. return 1;
  1134. /* Apple adds 60ns to wrDataSetup on reads */
  1135. if (ata4 && (pmac_ide[ix].timings[unit] & TR_66_UDMA_EN)) {
  1136. out_le32((unsigned *)(IDE_DATA_REG + IDE_TIMING_CONFIG + _IO_BASE),
  1137. pmac_ide[ix].timings[unit] + 
  1138. ((func == ide_dma_read) ? 0x00800000UL : 0));
  1139. (void)in_le32((unsigned *)(IDE_DATA_REG + IDE_TIMING_CONFIG + _IO_BASE));
  1140. }
  1141. drive->waiting_for_dma = 1;
  1142. if (drive->media != ide_disk)
  1143. return 0;
  1144. ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL);
  1145. OUT_BYTE(func==ide_dma_write? WIN_WRITEDMA: WIN_READDMA,
  1146.  IDE_COMMAND_REG);
  1147. case ide_dma_begin:
  1148. out_le32(&dma->control, (RUN << 16) | RUN);
  1149. /* Make sure it gets to the controller right now */
  1150. (void)in_le32(&dma->control);
  1151. break;
  1152. case ide_dma_end: /* returns 1 on error, 0 otherwise */
  1153. drive->waiting_for_dma = 0;
  1154. dstat = in_le32(&dma->status);
  1155. out_le32(&dma->control, ((RUN|WAKE|DEAD) << 16));
  1156. /* verify good dma status */
  1157. return (dstat & (RUN|DEAD|ACTIVE)) != RUN;
  1158. case ide_dma_test_irq: /* returns 1 if dma irq issued, 0 otherwise */
  1159. /* We have to things to deal with here:
  1160.  * 
  1161.  * - The dbdma won't stop if the command was started
  1162.  * but completed with an error without transfering all
  1163.  * datas. This happens when bad blocks are met during
  1164.  * a multi-block transfer.
  1165.  * 
  1166.  * - The dbdma fifo hasn't yet finished flushing to
  1167.  * to system memory when the disk interrupt occurs.
  1168.  * 
  1169.  * The trick here is to increment drive->waiting_for_dma,
  1170.  * and return as if no interrupt occured. If the counter
  1171.  * reach a certain timeout value, we then return 1. If
  1172.  * we really got the interrupt, it will happen right away
  1173.  * again.
  1174.  * Apple's solution here may be more elegant. They issue
  1175.  * a DMA channel interrupt (a separate irq line) via a DBDMA
  1176.  * NOP command just before the STOP, and wait for both the
  1177.  * disk and DBDMA interrupts to have completed.
  1178.  */
  1179.  
  1180. /* If ACTIVE is cleared, the STOP command have passed and
  1181.  * transfer is complete.
  1182.  */
  1183. if (!(in_le32(&dma->status) & ACTIVE))
  1184. return 1;
  1185. if (!drive->waiting_for_dma)
  1186. printk(KERN_WARNING "ide%d, ide_dma_test_irq 
  1187. called while not waitingn", ix);
  1188. /* If dbdma didn't execute the STOP command yet, the
  1189.  * active bit is still set */
  1190. drive->waiting_for_dma++;
  1191. if (drive->waiting_for_dma >= DMA_WAIT_TIMEOUT) {
  1192. printk(KERN_WARNING "ide%d, timeout waiting 
  1193. for dbdma command stopn", ix);
  1194. return 1;
  1195. }
  1196. udelay(1);
  1197. return 0;
  1198. /* Let's implement tose just in case someone wants them */
  1199. case ide_dma_bad_drive:
  1200. case ide_dma_good_drive:
  1201. return check_drive_lists(drive, (func == ide_dma_good_drive));
  1202. case ide_dma_verbose:
  1203. return report_drive_dmaing(drive);
  1204. case ide_dma_retune:
  1205. case ide_dma_lostirq:
  1206. case ide_dma_timeout:
  1207. printk(KERN_WARNING "ide_pmac_dmaproc: chipset supported %s func only: %dn", ide_dmafunc_verbose(func),  func);
  1208. return 1;
  1209. default:
  1210. printk(KERN_WARNING "ide_pmac_dmaproc: unsupported %s func: %dn", ide_dmafunc_verbose(func), func);
  1211. return 1;
  1212. }
  1213. return 0;
  1214. }
  1215. #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
  1216. static void __pmac
  1217. idepmac_sleep_device(ide_drive_t *drive, int i, unsigned base)
  1218. {
  1219. int j;
  1220. /* FIXME: We only handle the master IDE disk, we shoud
  1221.  *        try to fix CD-ROMs here
  1222.  */
  1223. switch (drive->media) {
  1224. case ide_disk:
  1225. /* Spin down the drive */
  1226. outb(drive->select.all, base+0x60);
  1227. (void)inb(base+0x60);
  1228. udelay(100);
  1229. outb(0x0, base+0x30);
  1230. outb(0x0, base+0x20);
  1231. outb(0x0, base+0x40);
  1232. outb(0x0, base+0x50);
  1233. outb(0xe0, base+0x70);
  1234. outb(0x2, base+0x160);   
  1235. for (j = 0; j < 10; j++) {
  1236. int status;
  1237. mdelay(100);
  1238. status = inb(base+0x70);
  1239. if (!(status & BUSY_STAT) && (status & DRQ_STAT))
  1240. break;
  1241. }
  1242. break;
  1243. case ide_cdrom:
  1244. // todo
  1245. break;
  1246. case ide_floppy:
  1247. // todo
  1248. break;
  1249. }
  1250. }
  1251. #ifdef CONFIG_PMAC_PBOOK
  1252. static void __pmac
  1253. idepmac_wake_device(ide_drive_t *drive, int used_dma)
  1254. {
  1255. /* We force the IDE subdriver to check for a media change
  1256.  * This must be done first or we may lost the condition
  1257.  *
  1258.  * Problem: This can schedule. I moved the block device
  1259.  * wakeup almost late by priority because of that.
  1260.  */
  1261. if (DRIVER(drive) && DRIVER(drive)->media_change)
  1262. DRIVER(drive)->media_change(drive);
  1263. /* We kick the VFS too (see fix in ide.c revalidate) */
  1264. check_disk_change(MKDEV(HWIF(drive)->major, (drive->select.b.unit) << PARTN_BITS));
  1265. #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
  1266. /* We re-enable DMA on the drive if it was active. */
  1267. /* This doesn't work with the CD-ROM in the media-bay, probably
  1268.  * because of a pending unit attention. The problem if that if I
  1269.  * clear the error, the filesystem dies.
  1270.  */
  1271. if (used_dma && !ide_spin_wait_hwgroup(drive)) {
  1272. /* Lock HW group */
  1273. HWGROUP(drive)->busy = 1;
  1274. pmac_ide_check_dma(drive);
  1275. HWGROUP(drive)->busy = 0;
  1276. if (!list_empty(&drive->queue.queue_head))
  1277. ide_do_request(HWGROUP(drive), 0);
  1278. spin_unlock_irq(&io_request_lock);
  1279. }
  1280. #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
  1281. }
  1282. static void __pmac
  1283. idepmac_sleep_interface(int i, unsigned base, int mediabay)
  1284. {
  1285. struct device_node* np = pmac_ide[i].node;
  1286. /* We clear the timings */
  1287. pmac_ide[i].timings[0] = 0;
  1288. pmac_ide[i].timings[1] = 0;
  1289. /* The media bay will handle itself just fine */
  1290. if (mediabay)
  1291. return;
  1292. /* Disable the bus */
  1293. ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, np, pmac_ide[i].aapl_bus_id, 0);
  1294. }
  1295. static void __pmac
  1296. idepmac_wake_interface(int i, unsigned long base, int mediabay)
  1297. {
  1298. struct device_node* np = pmac_ide[i].node;
  1299. if (!mediabay) {
  1300. /* Revive IDE disk and controller */
  1301. ppc_md.feature_call(PMAC_FTR_IDE_RESET, np, pmac_ide[i].aapl_bus_id, 1);
  1302. ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, np, pmac_ide[i].aapl_bus_id, 1);
  1303. mdelay(10);
  1304. ppc_md.feature_call(PMAC_FTR_IDE_RESET, np, pmac_ide[i].aapl_bus_id, 0);
  1305. }
  1306. }
  1307. static void
  1308. idepmac_sleep_drive(ide_drive_t *drive, int idx, unsigned long base)
  1309. {
  1310. int unlock = 0;
  1311. /* Wait for HW group to complete operations */
  1312. if (ide_spin_wait_hwgroup(drive)) {
  1313. // What can we do here ? Wake drive we had already
  1314. // put to sleep and return an error ?
  1315. } else {
  1316. unlock = 1;
  1317. /* Lock HW group */
  1318. HWGROUP(drive)->busy = 1;
  1319. /* Stop the device */
  1320. idepmac_sleep_device(drive, idx, base);
  1321. }
  1322. if (unlock)
  1323. spin_unlock_irq(&io_request_lock);
  1324. }
  1325. static void
  1326. idepmac_wake_drive(ide_drive_t *drive, unsigned long base)
  1327. {
  1328. unsigned long flags;
  1329. int j;
  1330. /* Reset timings */
  1331. pmac_ide_selectproc(drive);
  1332. mdelay(10);
  1333. /* Wait up to 20 seconds for the drive to be ready */
  1334. for (j = 0; j < 200; j++) {
  1335. int status;
  1336. mdelay(100);
  1337. outb(drive->select.all, base + 0x60);
  1338. if (inb(base + 0x60) != drive->select.all)
  1339. continue;
  1340. status = inb(base + 0x70);
  1341. if (!(status & BUSY_STAT))
  1342. break;
  1343. }
  1344. /* We resume processing on the HW group */
  1345. spin_lock_irqsave(&io_request_lock, flags);
  1346. HWGROUP(drive)->busy = 0;
  1347. if (!list_empty(&drive->queue.queue_head))
  1348. ide_do_request(HWGROUP(drive), 0);
  1349. spin_unlock_irqrestore(&io_request_lock, flags);
  1350. }
  1351. /* Note: We support only master drives for now. This will have to be
  1352.  * improved if we want to handle sleep on the iMacDV where the CD-ROM
  1353.  * is a slave
  1354.  */
  1355. static int __pmac
  1356. idepmac_notify_sleep(struct pmu_sleep_notifier *self, int when)
  1357. {
  1358. int i, ret;
  1359. unsigned long base;
  1360. int big_delay;
  1361.  
  1362. switch (when) {
  1363. case PBOOK_SLEEP_REQUEST:
  1364. break;
  1365. case PBOOK_SLEEP_REJECT:
  1366. break;
  1367. case PBOOK_SLEEP_NOW:
  1368. for (i = 0; i < pmac_ide_count; ++i) {
  1369. ide_hwif_t *hwif;
  1370. int dn;
  1371. if ((base = pmac_ide[i].regbase) == 0)
  1372. continue;
  1373. hwif = &ide_hwifs[i];
  1374. for (dn=0; dn<MAX_DRIVES; dn++) {
  1375. if (!hwif->drives[dn].present)
  1376. continue;
  1377. idepmac_sleep_drive(&hwif->drives[dn], i, base);
  1378. }
  1379. /* Disable irq during sleep */
  1380. disable_irq(pmac_ide[i].irq);
  1381. /* Check if this is a media bay with an IDE device or not
  1382.  * a media bay.
  1383.  */
  1384. ret = check_media_bay_by_base(base, MB_CD);
  1385. if ((ret == 0) || (ret == -ENODEV))
  1386. idepmac_sleep_interface(i, base, (ret == 0));
  1387. }
  1388. break;
  1389. case PBOOK_WAKE:
  1390. big_delay = 0;
  1391. for (i = 0; i < pmac_ide_count; ++i) {
  1392. if ((base = pmac_ide[i].regbase) == 0)
  1393. continue;
  1394. /* Make sure we have sane timings */
  1395. sanitize_timings(i);
  1396. /* Check if this is a media bay with an IDE device or not
  1397.  * a media bay
  1398.  */
  1399. ret = check_media_bay_by_base(base, MB_CD);
  1400. if ((ret == 0) || (ret == -ENODEV)) {
  1401. idepmac_wake_interface(i, base, (ret == 0));
  1402. big_delay = 1;
  1403. }
  1404. }
  1405. /* Let hardware get up to speed */
  1406. if (big_delay)
  1407. mdelay(IDE_WAKEUP_DELAY_MS);
  1408. for (i = 0; i < pmac_ide_count; ++i) {
  1409. ide_hwif_t *hwif;
  1410. int used_dma, dn;
  1411. int irq_on = 0;
  1412. if ((base = pmac_ide[i].regbase) == 0)
  1413. continue;
  1414. hwif = &ide_hwifs[i];
  1415. for (dn=0; dn<MAX_DRIVES; dn++) {
  1416. ide_drive_t *drive = &hwif->drives[dn];
  1417. if (!drive->present)
  1418. continue;
  1419. /* We don't have re-configured DMA yet */
  1420. used_dma = drive->using_dma;
  1421. drive->using_dma = 0;
  1422. idepmac_wake_drive(drive, base);
  1423. if (!irq_on) {
  1424. enable_irq(pmac_ide[i].irq);
  1425. irq_on = 1;
  1426. }
  1427. idepmac_wake_device(drive, used_dma);
  1428. }
  1429. if (!irq_on)
  1430. enable_irq(pmac_ide[i].irq);
  1431. }
  1432. break;
  1433. }
  1434. return PBOOK_SLEEP_OK;
  1435. }
  1436. #endif /* CONFIG_PMAC_PBOOK */
  1437. static int __pmac
  1438. pmac_ide_notify_reboot(struct notifier_block *this, unsigned long code, void *x)
  1439. {
  1440. int i, gotone;
  1441. unsigned long base;
  1442. if (code != SYS_HALT && code != SYS_POWER_OFF)
  1443. return 0;
  1444. gotone = 0;
  1445. for (i = 0; i < pmac_ide_count; ++i) {
  1446. ide_hwif_t *hwif;
  1447. ide_drive_t *drive;
  1448. int unlock = 0;
  1449. int dn;
  1450. if ((base = pmac_ide[i].regbase) == 0)
  1451. continue;
  1452. hwif = &ide_hwifs[i];
  1453. for (dn=0; dn<MAX_DRIVES; dn++) {
  1454. drive = &hwif->drives[dn];
  1455. if (drive->present) {
  1456. gotone = 1;
  1457. /* Wait for HW group to complete operations */
  1458. if (ide_spin_wait_hwgroup(drive)) {
  1459. // What can we do here ? Wake drive we had already
  1460. // put to sleep and return an error ?
  1461. } else {
  1462. unlock = 1;
  1463. /* Lock HW group */
  1464. HWGROUP(drive)->busy = 1;
  1465. /* Stop the device */
  1466. idepmac_sleep_device(drive, i, base);
  1467. }
  1468. }
  1469. if (unlock)
  1470. spin_unlock_irq(&io_request_lock);
  1471. }
  1472. }
  1473. if (gotone)
  1474. mdelay(1000);
  1475. return NOTIFY_DONE;
  1476. }