PageRenderTime 49ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/drivers/pcmcia/ti113x.h

https://bitbucket.org/evzijst/gittest
C Header | 662 lines | 428 code | 107 blank | 127 comment | 69 complexity | c4a63d4af0e92b17a207bfc7d4247786 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, GPL-2.0, LGPL-2.0
  1. /*
  2. * ti113x.h 1.16 1999/10/25 20:03:34
  3. *
  4. * The contents of this file are subject to the Mozilla Public License
  5. * Version 1.1 (the "License"); you may not use this file except in
  6. * compliance with the License. You may obtain a copy of the License
  7. * at http://www.mozilla.org/MPL/
  8. *
  9. * Software distributed under the License is distributed on an "AS IS"
  10. * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  11. * the License for the specific language governing rights and
  12. * limitations under the License.
  13. *
  14. * The initial developer of the original code is David A. Hinds
  15. * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
  16. * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
  17. *
  18. * Alternatively, the contents of this file may be used under the
  19. * terms of the GNU General Public License version 2 (the "GPL"), in which
  20. * case the provisions of the GPL are applicable instead of the
  21. * above. If you wish to allow the use of your version of this file
  22. * only under the terms of the GPL and not to allow others to use
  23. * your version of this file under the MPL, indicate your decision by
  24. * deleting the provisions above and replace them with the notice and
  25. * other provisions required by the GPL. If you do not delete the
  26. * provisions above, a recipient may use your version of this file
  27. * under either the MPL or the GPL.
  28. */
  29. #ifndef _LINUX_TI113X_H
  30. #define _LINUX_TI113X_H
  31. #include <linux/config.h>
  32. /* Register definitions for TI 113X PCI-to-CardBus bridges */
  33. /* System Control Register */
  34. #define TI113X_SYSTEM_CONTROL 0x0080 /* 32 bit */
  35. #define TI113X_SCR_SMIROUTE 0x04000000
  36. #define TI113X_SCR_SMISTATUS 0x02000000
  37. #define TI113X_SCR_SMIENB 0x01000000
  38. #define TI113X_SCR_VCCPROT 0x00200000
  39. #define TI113X_SCR_REDUCEZV 0x00100000
  40. #define TI113X_SCR_CDREQEN 0x00080000
  41. #define TI113X_SCR_CDMACHAN 0x00070000
  42. #define TI113X_SCR_SOCACTIVE 0x00002000
  43. #define TI113X_SCR_PWRSTREAM 0x00000800
  44. #define TI113X_SCR_DELAYUP 0x00000400
  45. #define TI113X_SCR_DELAYDOWN 0x00000200
  46. #define TI113X_SCR_INTERROGATE 0x00000100
  47. #define TI113X_SCR_CLKRUN_SEL 0x00000080
  48. #define TI113X_SCR_PWRSAVINGS 0x00000040
  49. #define TI113X_SCR_SUBSYSRW 0x00000020
  50. #define TI113X_SCR_CB_DPAR 0x00000010
  51. #define TI113X_SCR_CDMA_EN 0x00000008
  52. #define TI113X_SCR_ASYNC_IRQ 0x00000004
  53. #define TI113X_SCR_KEEPCLK 0x00000002
  54. #define TI113X_SCR_CLKRUN_ENA 0x00000001
  55. #define TI122X_SCR_SER_STEP 0xc0000000
  56. #define TI122X_SCR_INTRTIE 0x20000000
  57. #define TI122X_SCR_CBRSVD 0x00400000
  58. #define TI122X_SCR_MRBURSTDN 0x00008000
  59. #define TI122X_SCR_MRBURSTUP 0x00004000
  60. #define TI122X_SCR_RIMUX 0x00000001
  61. /* Multimedia Control Register */
  62. #define TI1250_MULTIMEDIA_CTL 0x0084 /* 8 bit */
  63. #define TI1250_MMC_ZVOUTEN 0x80
  64. #define TI1250_MMC_PORTSEL 0x40
  65. #define TI1250_MMC_ZVEN1 0x02
  66. #define TI1250_MMC_ZVEN0 0x01
  67. #define TI1250_GENERAL_STATUS 0x0085 /* 8 bit */
  68. #define TI1250_GPIO0_CONTROL 0x0088 /* 8 bit */
  69. #define TI1250_GPIO1_CONTROL 0x0089 /* 8 bit */
  70. #define TI1250_GPIO2_CONTROL 0x008a /* 8 bit */
  71. #define TI1250_GPIO3_CONTROL 0x008b /* 8 bit */
  72. #define TI1250_GPIO_MODE_MASK 0xc0
  73. /* IRQMUX/MFUNC Register */
  74. #define TI122X_MFUNC 0x008c /* 32 bit */
  75. #define TI122X_MFUNC0_MASK 0x0000000f
  76. #define TI122X_MFUNC1_MASK 0x000000f0
  77. #define TI122X_MFUNC2_MASK 0x00000f00
  78. #define TI122X_MFUNC3_MASK 0x0000f000
  79. #define TI122X_MFUNC4_MASK 0x000f0000
  80. #define TI122X_MFUNC5_MASK 0x00f00000
  81. #define TI122X_MFUNC6_MASK 0x0f000000
  82. #define TI122X_MFUNC0_INTA 0x00000002
  83. #define TI125X_MFUNC0_INTB 0x00000001
  84. #define TI122X_MFUNC1_INTB 0x00000020
  85. #define TI122X_MFUNC3_IRQSER 0x00001000
  86. /* Retry Status Register */
  87. #define TI113X_RETRY_STATUS 0x0090 /* 8 bit */
  88. #define TI113X_RSR_PCIRETRY 0x80
  89. #define TI113X_RSR_CBRETRY 0x40
  90. #define TI113X_RSR_TEXP_CBB 0x20
  91. #define TI113X_RSR_MEXP_CBB 0x10
  92. #define TI113X_RSR_TEXP_CBA 0x08
  93. #define TI113X_RSR_MEXP_CBA 0x04
  94. #define TI113X_RSR_TEXP_PCI 0x02
  95. #define TI113X_RSR_MEXP_PCI 0x01
  96. /* Card Control Register */
  97. #define TI113X_CARD_CONTROL 0x0091 /* 8 bit */
  98. #define TI113X_CCR_RIENB 0x80
  99. #define TI113X_CCR_ZVENABLE 0x40
  100. #define TI113X_CCR_PCI_IRQ_ENA 0x20
  101. #define TI113X_CCR_PCI_IREQ 0x10
  102. #define TI113X_CCR_PCI_CSC 0x08
  103. #define TI113X_CCR_SPKROUTEN 0x02
  104. #define TI113X_CCR_IFG 0x01
  105. #define TI1220_CCR_PORT_SEL 0x20
  106. #define TI122X_CCR_AUD2MUX 0x04
  107. /* Device Control Register */
  108. #define TI113X_DEVICE_CONTROL 0x0092 /* 8 bit */
  109. #define TI113X_DCR_5V_FORCE 0x40
  110. #define TI113X_DCR_3V_FORCE 0x20
  111. #define TI113X_DCR_IMODE_MASK 0x06
  112. #define TI113X_DCR_IMODE_ISA 0x02
  113. #define TI113X_DCR_IMODE_SERIAL 0x04
  114. #define TI12XX_DCR_IMODE_PCI_ONLY 0x00
  115. #define TI12XX_DCR_IMODE_ALL_SERIAL 0x06
  116. /* Buffer Control Register */
  117. #define TI113X_BUFFER_CONTROL 0x0093 /* 8 bit */
  118. #define TI113X_BCR_CB_READ_DEPTH 0x08
  119. #define TI113X_BCR_CB_WRITE_DEPTH 0x04
  120. #define TI113X_BCR_PCI_READ_DEPTH 0x02
  121. #define TI113X_BCR_PCI_WRITE_DEPTH 0x01
  122. /* Diagnostic Register */
  123. #define TI1250_DIAGNOSTIC 0x0093 /* 8 bit */
  124. #define TI1250_DIAG_TRUE_VALUE 0x80
  125. #define TI1250_DIAG_PCI_IREQ 0x40
  126. #define TI1250_DIAG_PCI_CSC 0x20
  127. #define TI1250_DIAG_ASYNC_CSC 0x01
  128. /* DMA Registers */
  129. #define TI113X_DMA_0 0x0094 /* 32 bit */
  130. #define TI113X_DMA_1 0x0098 /* 32 bit */
  131. /* ExCA IO offset registers */
  132. #define TI113X_IO_OFFSET(map) (0x36+((map)<<1))
  133. /* EnE test register */
  134. #define ENE_TEST_C9 0xc9 /* 8bit */
  135. #define ENE_TEST_C9_TLTENABLE 0x02
  136. #ifdef CONFIG_CARDBUS
  137. /*
  138. * Texas Instruments CardBus controller overrides.
  139. */
  140. #define ti_sysctl(socket) ((socket)->private[0])
  141. #define ti_cardctl(socket) ((socket)->private[1])
  142. #define ti_devctl(socket) ((socket)->private[2])
  143. #define ti_diag(socket) ((socket)->private[3])
  144. #define ti_mfunc(socket) ((socket)->private[4])
  145. #define ene_test_c9(socket) ((socket)->private[5])
  146. /*
  147. * These are the TI specific power management handlers.
  148. */
  149. static void ti_save_state(struct yenta_socket *socket)
  150. {
  151. ti_sysctl(socket) = config_readl(socket, TI113X_SYSTEM_CONTROL);
  152. ti_mfunc(socket) = config_readl(socket, TI122X_MFUNC);
  153. ti_cardctl(socket) = config_readb(socket, TI113X_CARD_CONTROL);
  154. ti_devctl(socket) = config_readb(socket, TI113X_DEVICE_CONTROL);
  155. ti_diag(socket) = config_readb(socket, TI1250_DIAGNOSTIC);
  156. if (socket->dev->vendor == PCI_VENDOR_ID_ENE)
  157. ene_test_c9(socket) = config_readb(socket, ENE_TEST_C9);
  158. }
  159. static void ti_restore_state(struct yenta_socket *socket)
  160. {
  161. config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket));
  162. config_writel(socket, TI122X_MFUNC, ti_mfunc(socket));
  163. config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket));
  164. config_writeb(socket, TI113X_DEVICE_CONTROL, ti_devctl(socket));
  165. config_writeb(socket, TI1250_DIAGNOSTIC, ti_diag(socket));
  166. if (socket->dev->vendor == PCI_VENDOR_ID_ENE)
  167. config_writeb(socket, ENE_TEST_C9, ene_test_c9(socket));
  168. }
  169. /*
  170. * Zoom video control for TI122x/113x chips
  171. */
  172. static void ti_zoom_video(struct pcmcia_socket *sock, int onoff)
  173. {
  174. u8 reg;
  175. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  176. /* If we don't have a Zoom Video switch this is harmless,
  177. we just tristate the unused (ZV) lines */
  178. reg = config_readb(socket, TI113X_CARD_CONTROL);
  179. if (onoff)
  180. /* Zoom zoom, we will all go together, zoom zoom, zoom zoom */
  181. reg |= TI113X_CCR_ZVENABLE;
  182. else
  183. reg &= ~TI113X_CCR_ZVENABLE;
  184. config_writeb(socket, TI113X_CARD_CONTROL, reg);
  185. }
  186. /*
  187. * The 145x series can also use this. They have an additional
  188. * ZV autodetect mode we don't use but don't actually need.
  189. * FIXME: manual says its in func0 and func1 but disagrees with
  190. * itself about this - do we need to force func0, if so we need
  191. * to know a lot more about socket pairings in pcmcia_socket than
  192. * we do now.. uggh.
  193. */
  194. static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff)
  195. {
  196. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  197. int shift = 0;
  198. u8 reg;
  199. ti_zoom_video(sock, onoff);
  200. reg = config_readb(socket, TI1250_MULTIMEDIA_CTL);
  201. reg |= TI1250_MMC_ZVOUTEN; /* ZV bus enable */
  202. if(PCI_FUNC(socket->dev->devfn)==1)
  203. shift = 1;
  204. if(onoff)
  205. {
  206. reg &= ~(1<<6); /* Clear select bit */
  207. reg |= shift<<6; /* Favour our socket */
  208. reg |= 1<<shift; /* Socket zoom video on */
  209. }
  210. else
  211. {
  212. reg &= ~(1<<6); /* Clear select bit */
  213. reg |= (1^shift)<<6; /* Favour other socket */
  214. reg &= ~(1<<shift); /* Socket zoon video off */
  215. }
  216. config_writeb(socket, TI1250_MULTIMEDIA_CTL, reg);
  217. }
  218. static void ti_set_zv(struct yenta_socket *socket)
  219. {
  220. if(socket->dev->vendor == PCI_VENDOR_ID_TI)
  221. {
  222. switch(socket->dev->device)
  223. {
  224. /* There may be more .. */
  225. case PCI_DEVICE_ID_TI_1220:
  226. case PCI_DEVICE_ID_TI_1221:
  227. case PCI_DEVICE_ID_TI_1225:
  228. case PCI_DEVICE_ID_TI_4510:
  229. socket->socket.zoom_video = ti_zoom_video;
  230. break;
  231. case PCI_DEVICE_ID_TI_1250:
  232. case PCI_DEVICE_ID_TI_1251A:
  233. case PCI_DEVICE_ID_TI_1251B:
  234. case PCI_DEVICE_ID_TI_1450:
  235. socket->socket.zoom_video = ti1250_zoom_video;
  236. }
  237. }
  238. }
  239. /*
  240. * Generic TI init - TI has an extension for the
  241. * INTCTL register that sets the PCI CSC interrupt.
  242. * Make sure we set it correctly at open and init
  243. * time
  244. * - override: disable the PCI CSC interrupt. This makes
  245. * it possible to use the CSC interrupt to probe the
  246. * ISA interrupts.
  247. * - init: set the interrupt to match our PCI state.
  248. * This makes us correctly get PCI CSC interrupt
  249. * events.
  250. */
  251. static int ti_init(struct yenta_socket *socket)
  252. {
  253. u8 new, reg = exca_readb(socket, I365_INTCTL);
  254. new = reg & ~I365_INTR_ENA;
  255. if (socket->cb_irq)
  256. new |= I365_INTR_ENA;
  257. if (new != reg)
  258. exca_writeb(socket, I365_INTCTL, new);
  259. return 0;
  260. }
  261. static int ti_override(struct yenta_socket *socket)
  262. {
  263. u8 new, reg = exca_readb(socket, I365_INTCTL);
  264. new = reg & ~I365_INTR_ENA;
  265. if (new != reg)
  266. exca_writeb(socket, I365_INTCTL, new);
  267. ti_set_zv(socket);
  268. return 0;
  269. }
  270. static int ti113x_override(struct yenta_socket *socket)
  271. {
  272. u8 cardctl;
  273. cardctl = config_readb(socket, TI113X_CARD_CONTROL);
  274. cardctl &= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC);
  275. if (socket->cb_irq)
  276. cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;
  277. config_writeb(socket, TI113X_CARD_CONTROL, cardctl);
  278. return ti_override(socket);
  279. }
  280. /* irqrouting for func0, probes PCI interrupt and ISA interrupts */
  281. static void ti12xx_irqroute_func0(struct yenta_socket *socket)
  282. {
  283. u32 mfunc, mfunc_old, devctl;
  284. u8 gpio3, gpio3_old;
  285. int pci_irq_status;
  286. mfunc = mfunc_old = config_readl(socket, TI122X_MFUNC);
  287. devctl = config_readb(socket, TI113X_DEVICE_CONTROL);
  288. printk(KERN_INFO "Yenta TI: socket %s, mfunc 0x%08x, devctl 0x%02x\n",
  289. pci_name(socket->dev), mfunc, devctl);
  290. /* make sure PCI interrupts are enabled before probing */
  291. ti_init(socket);
  292. /* test PCI interrupts first. only try fixing if return value is 0! */
  293. pci_irq_status = yenta_probe_cb_irq(socket);
  294. if (pci_irq_status)
  295. goto out;
  296. /*
  297. * We're here which means PCI interrupts are _not_ delivered. try to
  298. * find the right setting (all serial or parallel)
  299. */
  300. printk(KERN_INFO "Yenta TI: socket %s probing PCI interrupt failed, trying to fix\n",
  301. pci_name(socket->dev));
  302. /* for serial PCI make sure MFUNC3 is set to IRQSER */
  303. if ((devctl & TI113X_DCR_IMODE_MASK) == TI12XX_DCR_IMODE_ALL_SERIAL) {
  304. switch (socket->dev->device) {
  305. case PCI_DEVICE_ID_TI_1250:
  306. case PCI_DEVICE_ID_TI_1251A:
  307. case PCI_DEVICE_ID_TI_1251B:
  308. case PCI_DEVICE_ID_TI_1450:
  309. case PCI_DEVICE_ID_TI_1451A:
  310. case PCI_DEVICE_ID_TI_4450:
  311. case PCI_DEVICE_ID_TI_4451:
  312. /* these chips have no IRQSER setting in MFUNC3 */
  313. break;
  314. default:
  315. mfunc = (mfunc & ~TI122X_MFUNC3_MASK) | TI122X_MFUNC3_IRQSER;
  316. /* write down if changed, probe */
  317. if (mfunc != mfunc_old) {
  318. config_writel(socket, TI122X_MFUNC, mfunc);
  319. pci_irq_status = yenta_probe_cb_irq(socket);
  320. if (pci_irq_status == 1) {
  321. printk(KERN_INFO "Yenta TI: socket %s all-serial interrupts ok\n",
  322. pci_name(socket->dev));
  323. mfunc_old = mfunc;
  324. goto out;
  325. }
  326. /* not working, back to old value */
  327. mfunc = mfunc_old;
  328. config_writel(socket, TI122X_MFUNC, mfunc);
  329. if (pci_irq_status == -1)
  330. goto out;
  331. }
  332. }
  333. /* serial PCI interrupts not working fall back to parallel */
  334. printk(KERN_INFO "Yenta TI: socket %s falling back to parallel PCI interrupts\n",
  335. pci_name(socket->dev));
  336. devctl &= ~TI113X_DCR_IMODE_MASK;
  337. devctl |= TI113X_DCR_IMODE_SERIAL; /* serial ISA could be right */
  338. config_writeb(socket, TI113X_DEVICE_CONTROL, devctl);
  339. }
  340. /* parallel PCI interrupts: route INTA */
  341. switch (socket->dev->device) {
  342. case PCI_DEVICE_ID_TI_1250:
  343. case PCI_DEVICE_ID_TI_1251A:
  344. case PCI_DEVICE_ID_TI_1251B:
  345. case PCI_DEVICE_ID_TI_1450:
  346. /* make sure GPIO3 is set to INTA */
  347. gpio3 = gpio3_old = config_readb(socket, TI1250_GPIO3_CONTROL);
  348. gpio3 &= ~TI1250_GPIO_MODE_MASK;
  349. if (gpio3 != gpio3_old)
  350. config_writeb(socket, TI1250_GPIO3_CONTROL, gpio3);
  351. break;
  352. default:
  353. gpio3 = gpio3_old = 0;
  354. mfunc = (mfunc & ~TI122X_MFUNC0_MASK) | TI122X_MFUNC0_INTA;
  355. if (mfunc != mfunc_old)
  356. config_writel(socket, TI122X_MFUNC, mfunc);
  357. }
  358. /* time to probe again */
  359. pci_irq_status = yenta_probe_cb_irq(socket);
  360. if (pci_irq_status == 1) {
  361. mfunc_old = mfunc;
  362. printk(KERN_INFO "Yenta TI: socket %s parallel PCI interrupts ok\n",
  363. pci_name(socket->dev));
  364. } else {
  365. /* not working, back to old value */
  366. mfunc = mfunc_old;
  367. config_writel(socket, TI122X_MFUNC, mfunc);
  368. if (gpio3 != gpio3_old)
  369. config_writeb(socket, TI1250_GPIO3_CONTROL, gpio3_old);
  370. }
  371. out:
  372. if (pci_irq_status < 1) {
  373. socket->cb_irq = 0;
  374. printk(KERN_INFO "Yenta TI: socket %s no PCI interrupts. Fish. Please report.\n",
  375. pci_name(socket->dev));
  376. }
  377. }
  378. /*
  379. * ties INTA and INTB together. also changes the devices irq to that of
  380. * the function 0 device. call from func1 only.
  381. * returns 1 if INTRTIE changed, 0 otherwise.
  382. */
  383. static int ti12xx_tie_interrupts(struct yenta_socket *socket, int *old_irq)
  384. {
  385. struct pci_dev *func0;
  386. u32 sysctl;
  387. sysctl = config_readl(socket, TI113X_SYSTEM_CONTROL);
  388. if (sysctl & TI122X_SCR_INTRTIE)
  389. return 0;
  390. /* find func0 device */
  391. func0 = pci_get_slot(socket->dev->bus, socket->dev->devfn & ~0x07);
  392. if (!func0)
  393. return 0;
  394. /* change the interrupt to match func0, tie 'em up */
  395. *old_irq = socket->cb_irq;
  396. socket->cb_irq = socket->dev->irq = func0->irq;
  397. sysctl |= TI122X_SCR_INTRTIE;
  398. config_writel(socket, TI113X_SYSTEM_CONTROL, sysctl);
  399. pci_dev_put(func0);
  400. return 1;
  401. }
  402. /* undo what ti12xx_tie_interrupts() did */
  403. static void ti12xx_untie_interrupts(struct yenta_socket *socket, int old_irq)
  404. {
  405. u32 sysctl = config_readl(socket, TI113X_SYSTEM_CONTROL);
  406. sysctl &= ~TI122X_SCR_INTRTIE;
  407. config_writel(socket, TI113X_SYSTEM_CONTROL, sysctl);
  408. socket->cb_irq = socket->dev->irq = old_irq;
  409. }
  410. /*
  411. * irqrouting for func1, plays with INTB routing
  412. * only touches MFUNC for INTB routing. all other bits are taken
  413. * care of in func0 already.
  414. */
  415. static void ti12xx_irqroute_func1(struct yenta_socket *socket)
  416. {
  417. u32 mfunc, mfunc_old, devctl;
  418. int pci_irq_status;
  419. mfunc = mfunc_old = config_readl(socket, TI122X_MFUNC);
  420. devctl = config_readb(socket, TI113X_DEVICE_CONTROL);
  421. printk(KERN_INFO "Yenta TI: socket %s, mfunc 0x%08x, devctl 0x%02x\n",
  422. pci_name(socket->dev), mfunc, devctl);
  423. /* make sure PCI interrupts are enabled before probing */
  424. ti_init(socket);
  425. /* test PCI interrupts first. only try fixing if return value is 0! */
  426. pci_irq_status = yenta_probe_cb_irq(socket);
  427. if (pci_irq_status)
  428. goto out;
  429. /*
  430. * We're here which means PCI interrupts are _not_ delivered. try to
  431. * find the right setting
  432. */
  433. printk(KERN_INFO "Yenta TI: socket %s probing PCI interrupt failed, trying to fix\n",
  434. pci_name(socket->dev));
  435. /* if all serial: set INTRTIE, probe again */
  436. if ((devctl & TI113X_DCR_IMODE_MASK) == TI12XX_DCR_IMODE_ALL_SERIAL) {
  437. int old_irq;
  438. if (ti12xx_tie_interrupts(socket, &old_irq)) {
  439. pci_irq_status = yenta_probe_cb_irq(socket);
  440. if (pci_irq_status == 1) {
  441. printk(KERN_INFO "Yenta TI: socket %s all-serial interrupts, tied ok\n",
  442. pci_name(socket->dev));
  443. goto out;
  444. }
  445. ti12xx_untie_interrupts(socket, old_irq);
  446. }
  447. }
  448. /* parallel PCI: route INTB, probe again */
  449. else {
  450. int old_irq;
  451. switch (socket->dev->device) {
  452. case PCI_DEVICE_ID_TI_1250:
  453. /* the 1250 has one pin for IRQSER/INTB depending on devctl */
  454. break;
  455. case PCI_DEVICE_ID_TI_1251A:
  456. case PCI_DEVICE_ID_TI_1251B:
  457. case PCI_DEVICE_ID_TI_1450:
  458. /*
  459. * those have a pin for IRQSER/INTB plus INTB in MFUNC0
  460. * we alread probed the shared pin, now go for MFUNC0
  461. */
  462. mfunc = (mfunc & ~TI122X_MFUNC0_MASK) | TI125X_MFUNC0_INTB;
  463. break;
  464. default:
  465. mfunc = (mfunc & ~TI122X_MFUNC1_MASK) | TI122X_MFUNC1_INTB;
  466. break;
  467. }
  468. /* write, probe */
  469. if (mfunc != mfunc_old) {
  470. config_writel(socket, TI122X_MFUNC, mfunc);
  471. pci_irq_status = yenta_probe_cb_irq(socket);
  472. if (pci_irq_status == 1) {
  473. printk(KERN_INFO "Yenta TI: socket %s parallel PCI interrupts ok\n",
  474. pci_name(socket->dev));
  475. goto out;
  476. }
  477. mfunc = mfunc_old;
  478. config_writel(socket, TI122X_MFUNC, mfunc);
  479. if (pci_irq_status == -1)
  480. goto out;
  481. }
  482. /* still nothing: set INTRTIE */
  483. if (ti12xx_tie_interrupts(socket, &old_irq)) {
  484. pci_irq_status = yenta_probe_cb_irq(socket);
  485. if (pci_irq_status == 1) {
  486. printk(KERN_INFO "Yenta TI: socket %s parallel PCI interrupts, tied ok\n",
  487. pci_name(socket->dev));
  488. goto out;
  489. }
  490. ti12xx_untie_interrupts(socket, old_irq);
  491. }
  492. }
  493. out:
  494. if (pci_irq_status < 1) {
  495. socket->cb_irq = 0;
  496. printk(KERN_INFO "Yenta TI: socket %s no PCI interrupts. Fish. Please report.\n",
  497. pci_name(socket->dev));
  498. }
  499. }
  500. static int ti12xx_override(struct yenta_socket *socket)
  501. {
  502. u32 val, val_orig;
  503. /* make sure that memory burst is active */
  504. val_orig = val = config_readl(socket, TI113X_SYSTEM_CONTROL);
  505. if (disable_clkrun && PCI_FUNC(socket->dev->devfn) == 0) {
  506. printk(KERN_INFO "Yenta: Disabling CLKRUN feature\n");
  507. val |= TI113X_SCR_KEEPCLK;
  508. }
  509. if (!(val & TI122X_SCR_MRBURSTUP)) {
  510. printk(KERN_INFO "Yenta: Enabling burst memory read transactions\n");
  511. val |= TI122X_SCR_MRBURSTUP;
  512. }
  513. if (val_orig != val)
  514. config_writel(socket, TI113X_SYSTEM_CONTROL, val);
  515. /*
  516. * for EnE bridges only: clear testbit TLTEnable. this makes the
  517. * RME Hammerfall DSP sound card working.
  518. */
  519. if (socket->dev->vendor == PCI_VENDOR_ID_ENE) {
  520. u8 test_c9 = config_readb(socket, ENE_TEST_C9);
  521. test_c9 &= ~ENE_TEST_C9_TLTENABLE;
  522. config_writeb(socket, ENE_TEST_C9, test_c9);
  523. }
  524. /*
  525. * Yenta expects controllers to use CSCINT to route
  526. * CSC interrupts to PCI rather than INTVAL.
  527. */
  528. val = config_readb(socket, TI1250_DIAGNOSTIC);
  529. printk(KERN_INFO "Yenta: Using %s to route CSC interrupts to PCI\n",
  530. (val & TI1250_DIAG_PCI_CSC) ? "CSCINT" : "INTVAL");
  531. printk(KERN_INFO "Yenta: Routing CardBus interrupts to %s\n",
  532. (val & TI1250_DIAG_PCI_IREQ) ? "PCI" : "ISA");
  533. /* do irqrouting, depending on function */
  534. if (PCI_FUNC(socket->dev->devfn) == 0)
  535. ti12xx_irqroute_func0(socket);
  536. else
  537. ti12xx_irqroute_func1(socket);
  538. return ti_override(socket);
  539. }
  540. static int ti1250_override(struct yenta_socket *socket)
  541. {
  542. u8 old, diag;
  543. old = config_readb(socket, TI1250_DIAGNOSTIC);
  544. diag = old & ~(TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ);
  545. if (socket->cb_irq)
  546. diag |= TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ;
  547. if (diag != old) {
  548. printk(KERN_INFO "Yenta: adjusting diagnostic: %02x -> %02x\n",
  549. old, diag);
  550. config_writeb(socket, TI1250_DIAGNOSTIC, diag);
  551. }
  552. return ti12xx_override(socket);
  553. }
  554. #endif /* CONFIG_CARDBUS */
  555. #endif /* _LINUX_TI113X_H */