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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: ide.c,v 1.24 2002/04/22 11:47:21 johana Exp $
  2.  *
  3.  * Etrax specific IDE functions, like init and PIO-mode setting etc.
  4.  * Almost the entire ide.c is used for the rest of the Etrax ATA driver.
  5.  * Copyright (c) 2000, 2001, 2002 Axis Communications AB 
  6.  *
  7.  * Authors:    Bjorn Wesen        (initial version)
  8.  *             Mikael Starvik     (pio setup stuff)
  9.  *
  10.  * $Log: ide.c,v $
  11.  * Revision 1.24  2002/04/22 11:47:21  johana
  12.  * Fix according to 2.4.19-pre7. time_after/time_before and
  13.  * missing end of comment.
  14.  * The patch has a typo for ethernet.c in e100_clear_network_leds(),
  15.  *  that is fixed here.
  16.  *
  17.  * Revision 1.23  2002/03/19 15:35:51  bjornw
  18.  * Cleaned up the bus-reset code a bit and made G27-reset work
  19.  *
  20.  * Revision 1.22  2002/03/19 15:23:05  bjornw
  21.  * Added flush_etrax_cache before starting the receiving DMA
  22.  *
  23.  * Revision 1.21  2002/03/06 15:37:56  hp
  24.  *  * ide.c (OUT_BYTE): If timing out in the first busy-loop, do a
  25.  *  printk, fall through and still do the write.
  26.  *  (IN_BYTE): If timing out in the first loop, and reg indicated it's
  27.  *  the ATA status register in the device being read, return BUSY_STAT.
  28.  *
  29.  * Revision 1.20  2002/02/22 11:47:56  bjornw
  30.  * Added a timeout to IN_BYTE and OUT_BYTE
  31.  *
  32.  * Revision 1.19  2001/05/09 12:53:16  johana
  33.  * Added #include <asm/dma.h>
  34.  *
  35.  * Revision 1.18  2001/05/09 12:37:00  johana
  36.  * Use DMA_NBR macros from dma.h.
  37.  *
  38.  * Revision 1.17  2001/04/23 13:36:30  matsfg
  39.  * Changed CONFIG_IDE_DELAY to CONFIG_ETRAX_IDE_DELAY
  40.  *
  41.  * Revision 1.16  2001/04/05 08:30:07  matsfg
  42.  * Corrected cse1 and csp0 reset.
  43.  *
  44.  * Revision 1.15  2001/04/04 14:34:06  bjornw
  45.  * Re-instated code that mysteriously disappeared during review updates.
  46.  *
  47.  * Revision 1.14  2001/04/04 13:45:12  matsfg
  48.  * Calls REG_SHADOW_SET for cse1 reset so only the resetbit is affected
  49.  *
  50.  * Revision 1.13  2001/04/04 13:26:40  matsfg
  51.  * memmapping is done in init.c
  52.  *
  53.  * Revision 1.12  2001/04/04 11:37:56  markusl
  54.  * Updated according to review remarks
  55.  *
  56.  * Revision 1.11  2001/03/29 12:49:14  matsfg
  57.  * Changed check for ata_tot_size from >= to >.
  58.  * Sets sw_len to 0 if size is exactly 65536.
  59.  *
  60.  * Revision 1.10  2001/03/16 09:39:30  matsfg
  61.  * Support for reset on port CSP0
  62.  *
  63.  * Revision 1.9  2001/03/01 13:11:18  bjornw
  64.  * 100 -> HZ
  65.  *
  66.  * Revision 1.8  2001/03/01 09:32:56  matsfg
  67.  * Moved IDE delay to a CONFIG-parameter instead
  68.  *
  69.  * Revision 1.7  2001/02/23 13:46:38  bjornw
  70.  * Spellling check
  71.  *
  72.  * Revision 1.6  2001/02/22 15:44:30  bjornw
  73.  * * Use ioremap when mapping the CSE1 memory-mapped reset-line for LX v2
  74.  * * sw_len for a 65536 descriptor is 0, not 65536
  75.  * * Express concern for G27 reset code
  76.  *
  77.  * Revision 1.5  2001/02/16 07:35:38  matsfg
  78.  * Now handles DMA request blocks between 64k and 128k by split into two descriptors.
  79.  *
  80.  * Revision 1.4  2001/01/10 21:14:32  bjornw
  81.  * Initialize hwif->ideproc, for the new way of handling ide_xxx_data
  82.  *
  83.  * Revision 1.3  2000/12/01 17:48:18  bjornw
  84.  * - atapi_output_bytes now uses DMA
  85.  * - dma_active check removed - the kernel does proper serializing and it had
  86.  *   a race-condition anyway
  87.  * - ide_build_dmatable had a nameclash
  88.  * - re-added the RESET_DMA thingys because sometimes the interface can get
  89.  *   stuck apparently
  90.  * - added ide_release_dma
  91.  *
  92.  * Revision 1.2  2000/11/29 17:31:29  bjornw
  93.  * 2.4 port
  94.  *
  95.  * - The "register addresses" stored in the hwif are now 32-bit fields that
  96.  *   don't need to be shifted into correct positions in R_ATA_CTRL_DATA
  97.  * - PIO-mode detection temporarily disabled since ide-modes.c is not compiled
  98.  * - All DMA uses virt_to_phys conversions for DMA buffers and descriptor ptrs
  99.  * - Probably correct ide_dma_begin semantics in dmaproc now for ATAPI devices
  100.  * - Removed RESET_DMA when starting a new transfer - why was this necessary ?
  101.  * - Indentation fix
  102.  *
  103.  *
  104.  */
  105. /* Regarding DMA: 
  106.  *
  107.  * There are two forms of DMA - "DMA handshaking" between the interface and the drive,
  108.  * and DMA between the memory and the interface. We can ALWAYS use the latter, since it's
  109.  * something built-in in the Etrax. However only some drives support the DMA-mode handshaking
  110.  * on the ATA-bus. The normal PC driver and Triton interface disables memory-if DMA when the
  111.  * device can't do DMA handshaking for some stupid reason. We don't need to do that.
  112.  */ 
  113. #undef REALLY_SLOW_IO           /* most systems can safely undef this */
  114. #include <linux/config.h>
  115. #include <linux/types.h>
  116. #include <linux/kernel.h>
  117. #include <linux/timer.h>
  118. #include <linux/mm.h>
  119. #include <linux/interrupt.h>
  120. #include <linux/delay.h>
  121. #include <linux/blkdev.h>
  122. #include <linux/hdreg.h>
  123. #include <linux/ide.h>
  124. #include <linux/init.h>
  125. #include <asm/io.h>
  126. #include <asm/svinto.h>
  127. #include <asm/dma.h>
  128. /* number of Etrax DMA descriptors */
  129. #define MAX_DMA_DESCRS 64
  130. /* number of times to retry busy-flags when reading/writing IDE-registers 
  131.  * this can't be too high because a hung harddisk might cause the watchdog
  132.  * to trigger (sometimes IN_BYTE and OUT_BYTE are called with irq's disabled)
  133.  */
  134. #define IDE_REGISTER_TIMEOUT 300
  135. #ifdef CONFIG_ETRAX_IDE_CSE1_16_RESET
  136. /* address where the memory-mapped IDE reset bit lives, if used */
  137. static volatile unsigned long *reset_addr;
  138. #endif
  139. #define LOWDB(x)
  140. #define D(x) 
  141. void 
  142. OUT_BYTE(unsigned char data, ide_ioreg_t reg) {
  143. int timeleft;
  144. LOWDB(printk("ob: data 0x%x, reg 0x%xn", data, reg));
  145. /* note the lack of handling any timeouts. we stop waiting, but we don't
  146.  * really notify anybody.
  147.  */
  148. timeleft = IDE_REGISTER_TIMEOUT;
  149. /* wait for busy flag */
  150. while(timeleft && (*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)))
  151. timeleft--;
  152. /*
  153.  * Fall through at a timeout, so the ongoing command will be
  154.  * aborted by the write below, which is expected to be a dummy
  155.  * command to the command register.  This happens when a faulty
  156.  * drive times out on a command.  See comment on timeout in
  157.  * IN_BYTE.
  158.  */
  159. if(!timeleft)
  160. printk("ATA timeout reg 0x%lx := 0x%xn", reg, data);
  161. *R_ATA_CTRL_DATA = reg | data; /* write data to the drive's register */
  162. timeleft = IDE_REGISTER_TIMEOUT;
  163. /* wait for transmitter ready */
  164. while(timeleft && !(*R_ATA_STATUS_DATA &
  165.     IO_MASK(R_ATA_STATUS_DATA, tr_rdy)))
  166. timeleft--;
  167. }
  168. unsigned char 
  169. IN_BYTE(ide_ioreg_t reg) {
  170. int status;
  171. int timeleft;
  172. timeleft = IDE_REGISTER_TIMEOUT;
  173. /* wait for busy flag */
  174. while(timeleft && (*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)))
  175. timeleft--;
  176. if(!timeleft) {
  177. /*
  178.  * If we're asked to read the status register, like for
  179.  * example when a command does not complete for an
  180.  * extended time, but the ATA interface is stuck in a
  181.  * busy state at the *ETRAX* ATA interface level (as has
  182.  * happened repeatedly with at least one bad disk), then
  183.  * the best thing to do is to pretend that we read
  184.  * "busy" in the status register, so the IDE driver will
  185.  * time-out, abort the ongoing command and perform a
  186.  * reset sequence.  Note that the subsequent OUT_BYTE
  187.  * call will also timeout on busy, but as long as the
  188.  * write is still performed, everything will be fine.
  189.  */
  190. if ((reg & IO_MASK (R_ATA_CTRL_DATA, addr))
  191.     == IO_FIELD (R_ATA_CTRL_DATA, addr, IDE_STATUS_OFFSET))
  192. return BUSY_STAT;
  193. else
  194. /* For other rare cases we assume 0 is good enough.  */
  195. return 0;
  196. }
  197. *R_ATA_CTRL_DATA = reg | IO_STATE(R_ATA_CTRL_DATA, rw, read); /* read data */ 
  198. timeleft = IDE_REGISTER_TIMEOUT;
  199. /* wait for available */
  200. while(timeleft && !((status = *R_ATA_STATUS_DATA) &
  201.     IO_MASK(R_ATA_STATUS_DATA, dav)))
  202. timeleft--;
  203. if(!timeleft)
  204. return 0;
  205. LOWDB(printk("inb: 0x%x from reg 0x%xn", status & 0xff, reg));
  206. return (unsigned char)status; /* data was in the lower 16 bits in the status reg */
  207. }
  208. /* PIO timing (in R_ATA_CONFIG)
  209.  *
  210.  *                        _____________________________
  211.  * ADDRESS :     ________/
  212.  *
  213.  *                            _______________
  214.  * DIOR    :     ____________/               __________
  215.  *
  216.  *                               _______________
  217.  * DATA    :     XXXXXXXXXXXXXXXX_______________XXXXXXXX
  218.  *
  219.  *
  220.  * DIOR is unbuffered while address and data is buffered.
  221.  * This creates two problems:
  222.  * 1. The DIOR pulse is to early (because it is unbuffered)
  223.  * 2. The rise time of DIOR is long
  224.  *
  225.  * There are at least three different plausible solutions
  226.  * 1. Use a pad capable of larger currents in Etrax
  227.  * 2. Use an external buffer
  228.  * 3. Make the strobe pulse longer
  229.  *
  230.  * Some of the strobe timings below are modified to compensate
  231.  * for this. This implies a slight performance decrease.
  232.  *
  233.  * THIS SHOULD NEVER BE CHANGED!
  234.  *
  235.  * TODO: Is this true for the latest LX boards still ?
  236.  */
  237. #define ATA_DMA2_STROBE  4 
  238. #define ATA_DMA2_HOLD    0
  239. #define ATA_DMA1_STROBE  4 
  240. #define ATA_DMA1_HOLD    1
  241. #define ATA_DMA0_STROBE 12 
  242. #define ATA_DMA0_HOLD    9
  243. #define ATA_PIO4_SETUP   1
  244. #define ATA_PIO4_STROBE  5
  245. #define ATA_PIO4_HOLD    0
  246. #define ATA_PIO3_SETUP   1
  247. #define ATA_PIO3_STROBE  5
  248. #define ATA_PIO3_HOLD    1
  249. #define ATA_PIO2_SETUP   1
  250. #define ATA_PIO2_STROBE  6
  251. #define ATA_PIO2_HOLD    2
  252. #define ATA_PIO1_SETUP   2
  253. #define ATA_PIO1_STROBE 11
  254. #define ATA_PIO1_HOLD    4
  255. #define ATA_PIO0_SETUP   4
  256. #define ATA_PIO0_STROBE 19
  257. #define ATA_PIO0_HOLD    4
  258. static int e100_dmaproc (ide_dma_action_t func, ide_drive_t *drive);
  259. static void e100_ideproc (ide_ide_action_t func, ide_drive_t *drive,
  260.   void *buffer, unsigned int length);
  261. /*
  262.  * good_dma_drives() lists the model names (from "hdparm -i")
  263.  * of drives which do not support mword2 DMA but which are
  264.  * known to work fine with this interface under Linux.
  265.  */
  266. const char *good_dma_drives[] = {"Micropolis 2112A",
  267.  "CONNER CTMA 4000",
  268.  "CONNER CTT8000-A",
  269.  NULL};
  270. static void tune_e100_ide(ide_drive_t *drive, byte pio)
  271. {
  272. unsigned long flags;
  273. pio = 4;
  274. /* pio = ide_get_best_pio_mode(drive, pio, 4, NULL); */
  275. save_flags(flags);
  276. cli();
  277. /* set pio mode! */
  278.     
  279. switch(pio) {
  280. case 0:
  281. *R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable,     1 ) |
  282.   IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
  283.   IO_FIELD( R_ATA_CONFIG, dma_hold,   ATA_DMA2_HOLD ) |
  284.   IO_FIELD( R_ATA_CONFIG, pio_setup,  ATA_PIO0_SETUP ) |
  285.   IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO0_STROBE ) |
  286.   IO_FIELD( R_ATA_CONFIG, pio_hold,   ATA_PIO0_HOLD ) );
  287. break;
  288. case 1:
  289. *R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable,     1 ) |
  290.   IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
  291.   IO_FIELD( R_ATA_CONFIG, dma_hold,   ATA_DMA2_HOLD ) |
  292.   IO_FIELD( R_ATA_CONFIG, pio_setup,  ATA_PIO1_SETUP ) |
  293.   IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO1_STROBE ) |
  294.   IO_FIELD( R_ATA_CONFIG, pio_hold,   ATA_PIO1_HOLD ) );
  295. break;
  296. case 2:
  297. *R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable,     1 ) |
  298.   IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
  299.   IO_FIELD( R_ATA_CONFIG, dma_hold,   ATA_DMA2_HOLD ) |
  300.   IO_FIELD( R_ATA_CONFIG, pio_setup,  ATA_PIO2_SETUP ) |
  301.   IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO2_STROBE ) |
  302.   IO_FIELD( R_ATA_CONFIG, pio_hold,   ATA_PIO2_HOLD ) );
  303. break;
  304. case 3:
  305. *R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable,     1 ) |
  306.   IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
  307.   IO_FIELD( R_ATA_CONFIG, dma_hold,   ATA_DMA2_HOLD ) |
  308.   IO_FIELD( R_ATA_CONFIG, pio_setup,  ATA_PIO3_SETUP ) |
  309.   IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO3_STROBE ) |
  310.   IO_FIELD( R_ATA_CONFIG, pio_hold,   ATA_PIO3_HOLD ) );
  311. break;
  312. case 4:
  313. *R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable,     1 ) |
  314.   IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
  315.   IO_FIELD( R_ATA_CONFIG, dma_hold,   ATA_DMA2_HOLD ) |
  316.   IO_FIELD( R_ATA_CONFIG, pio_setup,  ATA_PIO4_SETUP ) |
  317.   IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO4_STROBE ) |
  318.   IO_FIELD( R_ATA_CONFIG, pio_hold,   ATA_PIO4_HOLD ) );
  319. break;
  320. }
  321. restore_flags(flags);
  322. }
  323. void __init 
  324. init_e100_ide (void)
  325. {
  326. volatile unsigned int dummy;
  327. int h;
  328. printk("ide: ETRAX 100LX built-in ATA DMA controllern");
  329. /* first fill in some stuff in the ide_hwifs fields */
  330. for(h = 0; h < MAX_HWIFS; h++) {
  331. ide_hwif_t *hwif = &ide_hwifs[h];
  332. hwif->chipset = ide_etrax100;
  333. hwif->tuneproc = &tune_e100_ide;
  334. hwif->dmaproc = &e100_dmaproc;
  335. hwif->ideproc = &e100_ideproc;
  336. }
  337. /* actually reset and configure the etrax100 ide/ata interface */
  338. *R_ATA_CTRL_DATA = 0;
  339. *R_ATA_TRANSFER_CNT = 0;
  340. *R_ATA_CONFIG = 0;
  341. genconfig_shadow = (genconfig_shadow & 
  342.     ~IO_MASK(R_GEN_CONFIG, dma2) &
  343.     ~IO_MASK(R_GEN_CONFIG, dma3) &
  344.     ~IO_MASK(R_GEN_CONFIG, ata)) | 
  345. ( IO_STATE( R_GEN_CONFIG, dma3, ata    ) |
  346.   IO_STATE( R_GEN_CONFIG, dma2, ata    ) |
  347.   IO_STATE( R_GEN_CONFIG, ata,  select ) );
  348. *R_GEN_CONFIG = genconfig_shadow;
  349.         /* pull the chosen /reset-line low */
  350.         
  351. #ifdef CONFIG_ETRAX_IDE_G27_RESET
  352.         REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, 27, 0);
  353. #endif 
  354. #ifdef CONFIG_ETRAX_IDE_CSE1_16_RESET
  355.         init_ioremap();
  356.         REG_SHADOW_SET(port_cse1_addr, port_cse1_shadow, 16, 0);
  357. #endif
  358. #ifdef CONFIG_ETRAX_IDE_CSP0_8_RESET
  359.         init_ioremap();
  360.         REG_SHADOW_SET(port_csp0_addr, port_csp0_shadow, 8, 0);
  361. #endif
  362. #ifdef CONFIG_ETRAX_IDE_PB7_RESET  
  363. port_pb_dir_shadow = port_pb_dir_shadow | 
  364. IO_STATE(R_PORT_PB_DIR, dir7, output);
  365. *R_PORT_PB_DIR = port_pb_dir_shadow;
  366. REG_SHADOW_SET(R_PORT_PB_DATA, port_pb_data_shadow, 7, 1);
  367. #endif
  368. /* wait some */
  369. udelay(25);
  370. /* de-assert bus-reset */
  371. #ifdef CONFIG_ETRAX_IDE_CSE1_16_RESET
  372. REG_SHADOW_SET(port_cse1_addr, port_cse1_shadow, 16, 1);
  373. #endif
  374. #ifdef CONFIG_ETRAX_IDE_CSP0_8_RESET
  375. REG_SHADOW_SET(port_csp0_addr, port_csp0_shadow, 8, 1);
  376. #endif
  377. #ifdef CONFIG_ETRAX_IDE_G27_RESET
  378. REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, 27, 1);
  379. #endif 
  380. /* make a dummy read to set the ata controller in a proper state */
  381. dummy = *R_ATA_STATUS_DATA;
  382.   
  383. *R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable,     1 ) |
  384.   IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
  385.   IO_FIELD( R_ATA_CONFIG, dma_hold,   ATA_DMA2_HOLD ) |
  386.   IO_FIELD( R_ATA_CONFIG, pio_setup,  ATA_PIO4_SETUP ) |
  387.   IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO4_STROBE ) |
  388.   IO_FIELD( R_ATA_CONFIG, pio_hold,   ATA_PIO4_HOLD ) );
  389. *R_ATA_CTRL_DATA = ( IO_STATE( R_ATA_CTRL_DATA, rw,   read) |
  390.      IO_FIELD( R_ATA_CTRL_DATA, addr, 1   ) );
  391. while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)); /* wait for busy flag*/
  392. *R_IRQ_MASK0_SET = ( IO_STATE( R_IRQ_MASK0_SET, ata_irq0, set ) |
  393.      IO_STATE( R_IRQ_MASK0_SET, ata_irq1, set ) |
  394.      IO_STATE( R_IRQ_MASK0_SET, ata_irq2, set ) |
  395.      IO_STATE( R_IRQ_MASK0_SET, ata_irq3, set ) );
  396. printk("ide: waiting %d seconds for drives to regain consciousnessn",
  397.        CONFIG_ETRAX_IDE_DELAY);
  398. h = jiffies + (CONFIG_ETRAX_IDE_DELAY * HZ);
  399. while(time_before(jiffies, h)) /* nothing */ ;
  400. /* reset the dma channels we will use */
  401. RESET_DMA(ATA_TX_DMA_NBR);
  402. RESET_DMA(ATA_RX_DMA_NBR);
  403. WAIT_DMA(ATA_TX_DMA_NBR);
  404. WAIT_DMA(ATA_RX_DMA_NBR);
  405. }
  406. static etrax_dma_descr mydescr;
  407. /*
  408.  * The following routines are mainly used by the ATAPI drivers.
  409.  *
  410.  * These routines will round up any request for an odd number of bytes,
  411.  * so if an odd bytecount is specified, be sure that there's at least one
  412.  * extra byte allocated for the buffer.
  413.  */
  414. static void 
  415. e100_atapi_input_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount)
  416. {
  417. ide_ioreg_t data_reg = IDE_DATA_REG;
  418. D(printk("atapi_input_bytes, dreg 0x%x, buffer 0x%x, count %dn",
  419.  data_reg, buffer, bytecount));
  420. if(bytecount & 1) {
  421. printk("warning, odd bytecount in cdrom_in_bytes = %d.n", bytecount);
  422. bytecount++; /* to round off */
  423. }
  424. /* make sure the DMA channel is available */
  425. RESET_DMA(ATA_RX_DMA_NBR);
  426. WAIT_DMA(ATA_RX_DMA_NBR); 
  427. /* setup DMA descriptor */
  428. mydescr.sw_len = bytecount;
  429. mydescr.ctrl   = d_eol;
  430. mydescr.buf    = virt_to_phys(buffer);
  431. /* start the dma channel */
  432. *R_DMA_CH3_FIRST = virt_to_phys(&mydescr);
  433. *R_DMA_CH3_CMD   = IO_STATE(R_DMA_CH3_CMD, cmd, start);
  434. /* initiate a multi word dma read using PIO handshaking */
  435. *R_ATA_TRANSFER_CNT = IO_FIELD(R_ATA_TRANSFER_CNT, count, bytecount >> 1);
  436. *R_ATA_CTRL_DATA = data_reg |
  437. IO_STATE(R_ATA_CTRL_DATA, rw,       read) |
  438. IO_STATE(R_ATA_CTRL_DATA, src_dst,  dma) |
  439. IO_STATE(R_ATA_CTRL_DATA, handsh,   pio) |
  440. IO_STATE(R_ATA_CTRL_DATA, multi,    on) |
  441. IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
  442. /* wait for completion */
  443. LED_DISK_READ(1);
  444. WAIT_DMA(ATA_RX_DMA_NBR);
  445. LED_DISK_READ(0);
  446. #if 0
  447.         /* old polled transfer code
  448.  * this should be moved into a new function that can do polled
  449.  * transfers if DMA is not available
  450.  */
  451.         
  452.         /* initiate a multi word read */
  453.         
  454.         *R_ATA_TRANSFER_CNT = wcount << 1;
  455.         
  456.         *R_ATA_CTRL_DATA = data_reg |
  457.                 IO_STATE(R_ATA_CTRL_DATA, rw,       read) |
  458.                 IO_STATE(R_ATA_CTRL_DATA, src_dst,  register) |
  459.                 IO_STATE(R_ATA_CTRL_DATA, handsh,   pio) |
  460.                 IO_STATE(R_ATA_CTRL_DATA, multi,    on) |
  461.                 IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
  462.         
  463.         /* svinto has a latency until the busy bit actually is set */
  464.         
  465.         nop(); nop();
  466.         nop(); nop();
  467.         nop(); nop();
  468.         nop(); nop();
  469.         nop(); nop();
  470.         
  471.         /* unit should be busy during multi transfer */
  472.         while((status = *R_ATA_STATUS_DATA) & IO_MASK(R_ATA_STATUS_DATA, busy)) {
  473.                 while(!(status & IO_MASK(R_ATA_STATUS_DATA, dav)))
  474.                         status = *R_ATA_STATUS_DATA;
  475.                 *ptr++ = (unsigned short)(status & 0xffff);
  476.         }
  477. #endif
  478. }
  479. static void 
  480. e100_atapi_output_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount)
  481. {
  482. ide_ioreg_t data_reg = IDE_DATA_REG;
  483. D(printk("atapi_output_bytes, dreg 0x%x, buffer 0x%x, count %dn",
  484.  data_reg, buffer, bytecount));
  485. if(bytecount & 1) {
  486. printk("odd bytecount %d in atapi_out_bytes!n", bytecount);
  487. bytecount++;
  488. }
  489. /* make sure the DMA channel is available */
  490. RESET_DMA(ATA_TX_DMA_NBR);
  491. WAIT_DMA(ATA_TX_DMA_NBR); 
  492. /* setup DMA descriptor */
  493. mydescr.sw_len = bytecount;
  494. mydescr.ctrl   = d_eol;
  495. mydescr.buf    = virt_to_phys(buffer);
  496. /* start the dma channel */
  497. *R_DMA_CH2_FIRST = virt_to_phys(&mydescr);
  498. *R_DMA_CH2_CMD   = IO_STATE(R_DMA_CH2_CMD, cmd, start);
  499. /* initiate a multi word dma write using PIO handshaking */
  500. *R_ATA_TRANSFER_CNT = IO_FIELD(R_ATA_TRANSFER_CNT, count, bytecount >> 1);
  501. *R_ATA_CTRL_DATA = data_reg |
  502. IO_STATE(R_ATA_CTRL_DATA, rw,       write) |
  503. IO_STATE(R_ATA_CTRL_DATA, src_dst,  dma) |
  504. IO_STATE(R_ATA_CTRL_DATA, handsh,   pio) |
  505. IO_STATE(R_ATA_CTRL_DATA, multi,    on) |
  506. IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
  507. /* wait for completion */
  508. LED_DISK_WRITE(1);
  509. WAIT_DMA(ATA_TX_DMA_NBR);
  510. LED_DISK_WRITE(0);
  511. #if 0
  512.         /* old polled write code - see comment in input_bytes */
  513. /* wait for busy flag */
  514.         while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)); 
  515.         /* initiate a multi word write */
  516.         *R_ATA_TRANSFER_CNT = bytecount >> 1;
  517.         ctrl = data_reg |
  518.                 IO_STATE(R_ATA_CTRL_DATA, rw,       write) |
  519.                 IO_STATE(R_ATA_CTRL_DATA, src_dst,  register) |
  520.                 IO_STATE(R_ATA_CTRL_DATA, handsh,   pio) |
  521.                 IO_STATE(R_ATA_CTRL_DATA, multi,    on) |
  522.                 IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
  523.         
  524.         LED_DISK_WRITE(1);
  525.         
  526.         /* Etrax will set busy = 1 until the multi pio transfer has finished
  527.          * and tr_rdy = 1 after each succesful word transfer. 
  528.          * When the last byte has been transferred Etrax will first set tr_tdy = 1 
  529.          * and then busy = 0 (not in the same cycle). If we read busy before it
  530.          * has been set to 0 we will think that we should transfer more bytes 
  531.          * and then tr_rdy would be 0 forever. This is solved by checking busy
  532.          * in the inner loop.
  533.          */
  534.         
  535.         do {
  536.                 *R_ATA_CTRL_DATA = ctrl | *ptr++;
  537.                 while(!(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, tr_rdy)) &&
  538.                       (*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)));
  539.         } while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy));
  540.         LED_DISK_WRITE(0);
  541. #endif  
  542. }
  543. /*
  544.  * This is used for most PIO data transfers *from* the IDE interface
  545.  */
  546. static void 
  547. e100_ide_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
  548. {
  549. e100_atapi_input_bytes(drive, buffer, wcount << 2);
  550. }
  551. /*
  552.  * This is used for most PIO data transfers *to* the IDE interface
  553.  */
  554. static void
  555. e100_ide_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
  556. {
  557. e100_atapi_output_bytes(drive, buffer, wcount << 2);
  558. }
  559. /*
  560.  * The multiplexor for ide_xxxput_data and atapi calls
  561.  */
  562. static void 
  563. e100_ideproc (ide_ide_action_t func, ide_drive_t *drive,
  564.       void *buffer, unsigned int length)
  565. {
  566. switch (func) {
  567. case ideproc_ide_input_data:
  568. e100_ide_input_data(drive, buffer, length);
  569. break;
  570. case ideproc_ide_output_data:
  571. e100_ide_input_data(drive, buffer, length);
  572. break;
  573. case ideproc_atapi_input_bytes:
  574. e100_atapi_input_bytes(drive, buffer, length);
  575. break;
  576. case ideproc_atapi_output_bytes:
  577. e100_atapi_output_bytes(drive, buffer, length);
  578. break;
  579. default:
  580. printk("e100_ideproc: unsupported func %d!n", func);
  581. break;
  582. }
  583. }
  584. /* we only have one DMA channel on the chip for ATA, so we can keep these statically */
  585. static etrax_dma_descr ata_descrs[MAX_DMA_DESCRS];
  586. static unsigned int ata_tot_size;
  587. /*
  588.  * e100_ide_build_dmatable() prepares a dma request.
  589.  * Returns 0 if all went okay, returns 1 otherwise.
  590.  */
  591. static int e100_ide_build_dmatable (ide_drive_t *drive)
  592. {
  593. struct request *rq = HWGROUP(drive)->rq;
  594. struct buffer_head *bh = rq->bh;
  595. unsigned long size, addr;
  596. unsigned int count = 0;
  597. ata_tot_size = 0;
  598. do {
  599. /*
  600.  * Determine addr and size of next buffer area.  We assume that
  601.  * individual virtual buffers are always composed linearly in
  602.  * physical memory.  For example, we assume that any 8kB buffer
  603.  * is always composed of two adjacent physical 4kB pages rather
  604.  * than two possibly non-adjacent physical 4kB pages.
  605.  */
  606. if (bh == NULL) {  /* paging and tape requests have (rq->bh == NULL) */
  607. addr = virt_to_phys (rq->buffer);
  608. size = rq->nr_sectors << 9;
  609. } else {
  610. /* group sequential buffers into one large buffer */
  611. addr = virt_to_phys (bh->b_data);
  612. size = bh->b_size;
  613. while ((bh = bh->b_reqnext) != NULL) {
  614. if ((addr + size) != virt_to_phys (bh->b_data))
  615. break;
  616. size += bh->b_size;
  617. }
  618. }
  619. /* did we run out of descriptors? */
  620. if(count >= MAX_DMA_DESCRS) {
  621. printk("%s: too few DMA descriptorsn", drive->name);
  622. return 1;
  623. }
  624. /* however, this case is more difficult - R_ATA_TRANSFER_CNT cannot be more
  625.    than 65536 words per transfer, so in that case we need to either 
  626.    1) use a DMA interrupt to re-trigger R_ATA_TRANSFER_CNT and continue with
  627.       the descriptors, or
  628.    2) simply do the request here, and get dma_intr to only ide_end_request on 
  629.       those blocks that were actually set-up for transfer.
  630. */
  631. if(ata_tot_size + size > 131072) {
  632. printk("too large total ATA DMA request, %d + %d!n", ata_tot_size, size);
  633. return 1;
  634. }
  635. /* If size > 65536 it has to be splitted into new descriptors. Since we don't handle 
  636.                    size > 131072 only one split is necessary */
  637. if(size > 65536) {
  638.           /* ok we want to do IO at addr, size bytes. set up a new descriptor entry */
  639.                         ata_descrs[count].sw_len = 0;  /* 0 means 65536, this is a 16-bit field */
  640.                         ata_descrs[count].ctrl = 0;
  641.                         ata_descrs[count].buf = addr;
  642.                         ata_descrs[count].next = virt_to_phys(&ata_descrs[count + 1]);
  643.                         count++;
  644.                         ata_tot_size += 65536;
  645.                         /* size and addr should refere to not handled data */
  646.                         size -= 65536;
  647.                         addr += 65536;
  648.                 }
  649. /* ok we want to do IO at addr, size bytes. set up a new descriptor entry */
  650.                 if(size == 65536) {
  651. ata_descrs[count].sw_len = 0;  /* 0 means 65536, this is a 16-bit field */
  652.                 } else {
  653. ata_descrs[count].sw_len = size;
  654.                 }
  655. ata_descrs[count].ctrl = 0;
  656. ata_descrs[count].buf = addr;
  657. ata_descrs[count].next = virt_to_phys(&ata_descrs[count + 1]);
  658. count++;
  659. ata_tot_size += size;
  660. } while (bh != NULL);
  661. if (count) {
  662. /* set the end-of-list flag on the last descriptor */
  663. ata_descrs[count - 1].ctrl |= d_eol;
  664. /* return and say all is ok */
  665. return 0;
  666. }
  667. printk("%s: empty DMA table?n", drive->name);
  668. return 1; /* let the PIO routines handle this weirdness */
  669. }
  670. static int config_drive_for_dma (ide_drive_t *drive)
  671. {
  672.         const char **list;
  673.         struct hd_driveid *id = drive->id;
  674.         if (id && (id->capability & 1)) {
  675.                 /* Enable DMA on any drive that supports mword2 DMA */
  676.                 if ((id->field_valid & 2) && (id->dma_mword & 0x404) == 0x404) {
  677.                         drive->using_dma = 1;
  678.                         return 0;               /* DMA enabled */
  679.                 }
  680.                 /* Consult the list of known "good" drives */
  681.                 list = good_dma_drives;
  682.                 while (*list) {
  683.                         if (!strcmp(*list++,id->model)) {
  684.                                 drive->using_dma = 1;
  685.                                 return 0;       /* DMA enabled */
  686.                         }
  687.                 }
  688.         }
  689.         return 1;       /* DMA not enabled */
  690. }
  691. /*
  692.  * etrax_dma_intr() is the handler for disk read/write DMA interrupts
  693.  */
  694. static ide_startstop_t etrax_dma_intr (ide_drive_t *drive)
  695. {
  696. int i, dma_stat;
  697. byte stat;
  698. LED_DISK_READ(0);
  699. LED_DISK_WRITE(0);
  700. dma_stat = HWIF(drive)->dmaproc(ide_dma_end, drive);
  701. stat = GET_STAT(); /* get drive status */
  702. if (OK_STAT(stat,DRIVE_READY,drive->bad_wstat|DRQ_STAT)) {
  703. if (!dma_stat) {
  704. struct request *rq;
  705. rq = HWGROUP(drive)->rq;
  706. for (i = rq->nr_sectors; i > 0;) {
  707. i -= rq->current_nr_sectors;
  708. ide_end_request(1, HWGROUP(drive));
  709. }
  710. return ide_stopped;
  711. }
  712. printk("%s: bad DMA statusn", drive->name);
  713. }
  714. return ide_error(drive, "dma_intr", stat);
  715. }
  716. /*
  717.  * e100_dmaproc() initiates/aborts DMA read/write operations on a drive.
  718.  *
  719.  * The caller is assumed to have selected the drive and programmed the drive's
  720.  * sector address using CHS or LBA.  All that remains is to prepare for DMA
  721.  * and then issue the actual read/write DMA/PIO command to the drive.
  722.  *
  723.  * For ATAPI devices, we just prepare for DMA and return. The caller should
  724.  * then issue the packet command to the drive and call us again with
  725.  * ide_dma_begin afterwards.
  726.  *
  727.  * Returns 0 if all went well.
  728.  * Returns 1 if DMA read/write could not be started, in which case
  729.  * the caller should revert to PIO for the current request.
  730.  */
  731. static int e100_dmaproc (ide_dma_action_t func, ide_drive_t *drive)
  732. {
  733.         static unsigned int reading; /* static to support ide_dma_begin semantics */
  734. int atapi = 0;
  735. D(printk("e100_dmaproc func %dn", func));
  736.         switch (func) {
  737. case ide_dma_verbose:
  738. return 0;
  739.                 case ide_dma_check:
  740.                         return config_drive_for_dma (drive);
  741. case ide_dma_off:
  742. case ide_dma_off_quietly:
  743. /* ok.. we don't really need to do anything I think. */
  744. return 0;
  745.                 case ide_dma_write:
  746.                         reading = 0;
  747. break;
  748.                 case ide_dma_read:
  749. reading = 1;
  750.                         break;
  751.                 case ide_dma_begin:
  752. /* begin DMA, used by ATAPI devices which want to issue the 
  753.  * appropriate IDE command themselves.
  754.  *
  755.  * they have already called ide_dma_read/write to set the
  756.  * static reading flag, now they call ide_dma_begin to do
  757.  * the real stuff. we tell our code below not to issue
  758.  * any IDE commands itself and jump into it. 
  759.  */
  760. atapi++;
  761. goto dma_begin;
  762. case ide_dma_end: /* returns 1 on error, 0 otherwise */
  763. /* TODO: check if something went wrong with the DMA */
  764. return 0;
  765.                 default:
  766.                         printk("e100_dmaproc: unsupported func %dn", func);
  767.                         return 1;
  768.         }
  769. /* ATAPI-devices (not disks) first call ide_dma_read/write to set the direction
  770.  * then they call ide_dma_begin after they have issued the appropriate drive command
  771.  * themselves to actually start the chipset DMA. so we just return here if we're
  772.  * not a diskdrive.
  773.  */
  774.         if (drive->media != ide_disk)
  775.                 return 0;
  776.  dma_begin:
  777. if(reading) {
  778. RESET_DMA(ATA_RX_DMA_NBR); /* sometimes the DMA channel get stuck so we need to do this */
  779. WAIT_DMA(ATA_RX_DMA_NBR);
  780. /* set up the Etrax DMA descriptors */
  781. if(e100_ide_build_dmatable (drive))
  782. return 1;
  783. if(!atapi) {
  784. /* set the irq handler which will finish the request when DMA is done */
  785. ide_set_handler(drive, &etrax_dma_intr, WAIT_CMD, NULL);
  786. /* issue cmd to drive */
  787. OUT_BYTE(WIN_READDMA, IDE_COMMAND_REG);
  788. }
  789. /* begin DMA */
  790. /* need to do this before RX DMA due to a chip bug
  791.  * it is enough to just flush the part of the cache that
  792.  * corresponds to the buffers we start, but since HD transfers
  793.  * usually are more than 8 kB, it is easier to optimize for the
  794.  * normal case and just flush the entire cache. its the only
  795.  * way to be sure! (OB movie quote)
  796.  */
  797. flush_etrax_cache();  
  798. *R_DMA_CH3_FIRST = virt_to_phys(ata_descrs);
  799. *R_DMA_CH3_CMD   = IO_STATE(R_DMA_CH3_CMD, cmd, start);
  800. /* initiate a multi word dma read using DMA handshaking */
  801. *R_ATA_TRANSFER_CNT =
  802. IO_FIELD(R_ATA_TRANSFER_CNT, count, ata_tot_size >> 1);
  803. *R_ATA_CTRL_DATA =
  804. IO_FIELD(R_ATA_CTRL_DATA, data, IDE_DATA_REG) |
  805. IO_STATE(R_ATA_CTRL_DATA, rw,       read) |
  806. IO_STATE(R_ATA_CTRL_DATA, src_dst,  dma)  |
  807. IO_STATE(R_ATA_CTRL_DATA, handsh,   dma)  |
  808. IO_STATE(R_ATA_CTRL_DATA, multi,    on)   |
  809. IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
  810. LED_DISK_READ(1);
  811. D(printk("dma read of %d bytes.n", ata_tot_size));
  812.  
  813. } else {
  814. /* writing */
  815. RESET_DMA(ATA_TX_DMA_NBR); /* sometimes the DMA channel get stuck so we need to do this */
  816. WAIT_DMA(ATA_TX_DMA_NBR);
  817. /* set up the Etrax DMA descriptors */
  818. if(e100_ide_build_dmatable (drive))
  819. return 1;
  820. if(!atapi) {
  821. /* set the irq handler which will finish the request when DMA is done */
  822. ide_set_handler(drive, &etrax_dma_intr, WAIT_CMD, NULL);
  823. /* issue cmd to drive */
  824. OUT_BYTE(WIN_WRITEDMA, IDE_COMMAND_REG);
  825. }
  826. /* begin DMA */
  827. *R_DMA_CH2_FIRST = virt_to_phys(ata_descrs);
  828. *R_DMA_CH2_CMD   = IO_STATE(R_DMA_CH2_CMD, cmd, start);
  829. /* initiate a multi word dma write using DMA handshaking */
  830. *R_ATA_TRANSFER_CNT =
  831. IO_FIELD(R_ATA_TRANSFER_CNT, count, ata_tot_size >> 1);
  832. *R_ATA_CTRL_DATA =
  833. IO_FIELD(R_ATA_CTRL_DATA, data,     IDE_DATA_REG) |
  834. IO_STATE(R_ATA_CTRL_DATA, rw,       write) |
  835. IO_STATE(R_ATA_CTRL_DATA, src_dst,  dma) |
  836. IO_STATE(R_ATA_CTRL_DATA, handsh,   dma) |
  837. IO_STATE(R_ATA_CTRL_DATA, multi,    on) |
  838. IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
  839. LED_DISK_WRITE(1);
  840. D(printk("dma write of %d bytes.n", ata_tot_size));
  841. }
  842. /* DMA started successfully */
  843. return 0;
  844. }
  845. /* ide.c calls this, but we don't need to do anything particular */
  846. int ide_release_dma (ide_hwif_t *hwif)
  847. {
  848. return 1;
  849. }