it8213.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. /*
  2. * ITE 8213 IDE driver
  3. *
  4. * Copyright (C) 2006 Jack Lee
  5. * Copyright (C) 2006 Alan Cox
  6. * Copyright (C) 2007 Bartlomiej Zolnierkiewicz
  7. */
  8. #include <linux/kernel.h>
  9. #include <linux/types.h>
  10. #include <linux/module.h>
  11. #include <linux/pci.h>
  12. #include <linux/delay.h>
  13. #include <linux/hdreg.h>
  14. #include <linux/ide.h>
  15. #include <linux/init.h>
  16. #include <asm/io.h>
  17. /**
  18. * it8213_set_pio_mode - set host controller for PIO mode
  19. * @drive: drive
  20. * @pio: PIO mode number
  21. *
  22. * Set the interface PIO mode.
  23. */
  24. static void it8213_set_pio_mode(ide_drive_t *drive, const u8 pio)
  25. {
  26. ide_hwif_t *hwif = HWIF(drive);
  27. struct pci_dev *dev = hwif->pci_dev;
  28. int is_slave = drive->dn & 1;
  29. int master_port = 0x40;
  30. int slave_port = 0x44;
  31. unsigned long flags;
  32. u16 master_data;
  33. u8 slave_data;
  34. static DEFINE_SPINLOCK(tune_lock);
  35. int control = 0;
  36. static const u8 timings[][2]= {
  37. { 0, 0 },
  38. { 0, 0 },
  39. { 1, 0 },
  40. { 2, 1 },
  41. { 2, 3 }, };
  42. spin_lock_irqsave(&tune_lock, flags);
  43. pci_read_config_word(dev, master_port, &master_data);
  44. if (pio > 1)
  45. control |= 1; /* Programmable timing on */
  46. if (drive->media != ide_disk)
  47. control |= 4; /* ATAPI */
  48. if (pio > 2)
  49. control |= 2; /* IORDY */
  50. if (is_slave) {
  51. master_data |= 0x4000;
  52. master_data &= ~0x0070;
  53. if (pio > 1)
  54. master_data = master_data | (control << 4);
  55. pci_read_config_byte(dev, slave_port, &slave_data);
  56. slave_data = slave_data & 0xf0;
  57. slave_data = slave_data | (timings[pio][0] << 2) | timings[pio][1];
  58. } else {
  59. master_data &= ~0x3307;
  60. if (pio > 1)
  61. master_data = master_data | control;
  62. master_data = master_data | (timings[pio][0] << 12) | (timings[pio][1] << 8);
  63. }
  64. pci_write_config_word(dev, master_port, master_data);
  65. if (is_slave)
  66. pci_write_config_byte(dev, slave_port, slave_data);
  67. spin_unlock_irqrestore(&tune_lock, flags);
  68. }
  69. /**
  70. * it8213_set_dma_mode - set host controller for DMA mode
  71. * @drive: drive
  72. * @speed: DMA mode
  73. *
  74. * Tune the ITE chipset for the DMA mode.
  75. */
  76. static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed)
  77. {
  78. ide_hwif_t *hwif = HWIF(drive);
  79. struct pci_dev *dev = hwif->pci_dev;
  80. u8 maslave = 0x40;
  81. int a_speed = 3 << (drive->dn * 4);
  82. int u_flag = 1 << drive->dn;
  83. int v_flag = 0x01 << drive->dn;
  84. int w_flag = 0x10 << drive->dn;
  85. int u_speed = 0;
  86. u16 reg4042, reg4a;
  87. u8 reg48, reg54, reg55;
  88. pci_read_config_word(dev, maslave, &reg4042);
  89. pci_read_config_byte(dev, 0x48, &reg48);
  90. pci_read_config_word(dev, 0x4a, &reg4a);
  91. pci_read_config_byte(dev, 0x54, &reg54);
  92. pci_read_config_byte(dev, 0x55, &reg55);
  93. switch(speed) {
  94. case XFER_UDMA_6:
  95. case XFER_UDMA_4:
  96. case XFER_UDMA_2: u_speed = 2 << (drive->dn * 4); break;
  97. case XFER_UDMA_5:
  98. case XFER_UDMA_3:
  99. case XFER_UDMA_1: u_speed = 1 << (drive->dn * 4); break;
  100. case XFER_UDMA_0: u_speed = 0 << (drive->dn * 4); break;
  101. break;
  102. case XFER_MW_DMA_2:
  103. case XFER_MW_DMA_1:
  104. case XFER_SW_DMA_2:
  105. break;
  106. default:
  107. return;
  108. }
  109. if (speed >= XFER_UDMA_0) {
  110. if (!(reg48 & u_flag))
  111. pci_write_config_byte(dev, 0x48, reg48 | u_flag);
  112. if (speed >= XFER_UDMA_5) {
  113. pci_write_config_byte(dev, 0x55, (u8) reg55|w_flag);
  114. } else {
  115. pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
  116. }
  117. if ((reg4a & a_speed) != u_speed)
  118. pci_write_config_word(dev, 0x4a, (reg4a & ~a_speed) | u_speed);
  119. if (speed > XFER_UDMA_2) {
  120. if (!(reg54 & v_flag))
  121. pci_write_config_byte(dev, 0x54, reg54 | v_flag);
  122. } else
  123. pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
  124. } else {
  125. const u8 mwdma_to_pio[] = { 0, 3, 4 };
  126. u8 pio;
  127. if (reg48 & u_flag)
  128. pci_write_config_byte(dev, 0x48, reg48 & ~u_flag);
  129. if (reg4a & a_speed)
  130. pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
  131. if (reg54 & v_flag)
  132. pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
  133. if (reg55 & w_flag)
  134. pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
  135. if (speed >= XFER_MW_DMA_0)
  136. pio = mwdma_to_pio[speed - XFER_MW_DMA_0];
  137. else
  138. pio = 2; /* only SWDMA2 is allowed */
  139. it8213_set_pio_mode(drive, pio);
  140. }
  141. }
  142. /**
  143. * init_hwif_it8213 - set up hwif structs
  144. * @hwif: interface to set up
  145. *
  146. * We do the basic set up of the interface structure.
  147. */
  148. static void __devinit init_hwif_it8213(ide_hwif_t *hwif)
  149. {
  150. u8 reg42h = 0;
  151. hwif->set_dma_mode = &it8213_set_dma_mode;
  152. hwif->set_pio_mode = &it8213_set_pio_mode;
  153. if (!hwif->dma_base)
  154. return;
  155. pci_read_config_byte(hwif->pci_dev, 0x42, &reg42h);
  156. if (hwif->cbl != ATA_CBL_PATA40_SHORT)
  157. hwif->cbl = (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
  158. }
  159. #define DECLARE_ITE_DEV(name_str) \
  160. { \
  161. .name = name_str, \
  162. .init_hwif = init_hwif_it8213, \
  163. .enablebits = {{0x41,0x80,0x80}}, \
  164. .host_flags = IDE_HFLAG_SINGLE | \
  165. IDE_HFLAG_BOOTABLE, \
  166. .pio_mask = ATA_PIO4, \
  167. .swdma_mask = ATA_SWDMA2_ONLY, \
  168. .mwdma_mask = ATA_MWDMA12_ONLY, \
  169. .udma_mask = ATA_UDMA6, \
  170. }
  171. static const struct ide_port_info it8213_chipsets[] __devinitdata = {
  172. /* 0 */ DECLARE_ITE_DEV("IT8213"),
  173. };
  174. /**
  175. * it8213_init_one - pci layer discovery entry
  176. * @dev: PCI device
  177. * @id: ident table entry
  178. *
  179. * Called by the PCI code when it finds an ITE8213 controller. As
  180. * this device follows the standard interfaces we can use the
  181. * standard helper functions to do almost all the work for us.
  182. */
  183. static int __devinit it8213_init_one(struct pci_dev *dev, const struct pci_device_id *id)
  184. {
  185. ide_setup_pci_device(dev, &it8213_chipsets[id->driver_data]);
  186. return 0;
  187. }
  188. static const struct pci_device_id it8213_pci_tbl[] = {
  189. { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8213), 0 },
  190. { 0, },
  191. };
  192. MODULE_DEVICE_TABLE(pci, it8213_pci_tbl);
  193. static struct pci_driver driver = {
  194. .name = "ITE8213_IDE",
  195. .id_table = it8213_pci_tbl,
  196. .probe = it8213_init_one,
  197. };
  198. static int __init it8213_ide_init(void)
  199. {
  200. return ide_pci_register_driver(&driver);
  201. }
  202. module_init(it8213_ide_init);
  203. MODULE_AUTHOR("Jack Lee, Alan Cox");
  204. MODULE_DESCRIPTION("PCI driver module for the ITE 8213");
  205. MODULE_LICENSE("GPL");