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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * BRIEF MODULE DESCRIPTION
  3.  * Galileo Evaluation Boards PCI support.
  4.  *
  5.  * The general-purpose functions to read/write and configure the GT64120A's
  6.  * PCI registers (function names start with pci0 or pci1) are either direct
  7.  * copies of functions written by Galileo Technology, or are modifications
  8.  * of their functions to work with Linux 2.4 vs Linux 2.2.  These functions
  9.  * are Copyright - Galileo Technology.
  10.  *
  11.  * Other functions are derived from other MIPS PCI implementations, or were
  12.  * written by RidgeRun, Inc,  Copyright (C) 2000 RidgeRun, Inc.
  13.  *   glonnon@ridgerun.com, skranz@ridgerun.com, stevej@ridgerun.com
  14.  *
  15.  * Copyright 2001 MontaVista Software Inc.
  16.  * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
  17.  *
  18.  *  This program is free software; you can redistribute  it and/or modify it
  19.  *  under  the terms of  the GNU General  Public License as published by the
  20.  *  Free Software Foundation;  either version 2 of the  License, or (at your
  21.  *  option) any later version.
  22.  *
  23.  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
  24.  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
  25.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
  26.  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
  27.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  28.  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
  29.  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  30.  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
  31.  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  32.  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33.  *
  34.  *  You should have received a copy of the  GNU General Public License along
  35.  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  36.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  37.  */
  38. #include <linux/config.h>
  39. #include <linux/types.h>
  40. #include <linux/pci.h>
  41. #include <linux/kernel.h>
  42. #include <linux/slab.h>
  43. #include <linux/version.h>
  44. #include <asm/pci.h>
  45. #include <asm/io.h>
  46. #include <asm/gt64120/gt64120.h>
  47. #include <linux/init.h>
  48. #ifdef CONFIG_PCI
  49. #define SELF 0
  50. /*
  51.  * These functions and structures provide the BIOS scan and mapping of the PCI
  52.  * devices.
  53.  */
  54. #define MAX_PCI_DEVS 10
  55. struct pci_device {
  56. u32 slot;
  57. u32 BARtype[6];
  58. u32 BARsize[6];
  59. };
  60. static void __init scan_and_initialize_pci(void);
  61. static u32 __init scan_pci_bus(struct pci_device *pci_devices);
  62. static void __init allocate_pci_space(struct pci_device *pci_devices);
  63. /*
  64.  * The functions that actually read and write to the controller.
  65.  *
  66.  *  Copied from or modified from Galileo Technology code.
  67.  */
  68. static unsigned int pci0ReadConfigReg(int offset, struct pci_dev *device);
  69. static void pci0WriteConfigReg(unsigned int offset,
  70.        struct pci_dev *device, unsigned int data);
  71. static unsigned int pci1ReadConfigReg(int offset, struct pci_dev *device);
  72. static void pci1WriteConfigReg(unsigned int offset,
  73.        struct pci_dev *device, unsigned int data);
  74. static void pci0MapIOspace(unsigned int pci0IoBase,
  75.    unsigned int pci0IoLength);
  76. static void pci1MapIOspace(unsigned int pci1IoBase,
  77.    unsigned int pci1IoLength);
  78. static void pci0MapMemory0space(unsigned int pci0Mem0Base,
  79. unsigned int pci0Mem0Length);
  80. static void pci1MapMemory0space(unsigned int pci1Mem0Base,
  81. unsigned int pci1Mem0Length);
  82. static void pci0MapMemory1space(unsigned int pci0Mem1Base,
  83. unsigned int pci0Mem1Length);
  84. static void pci1MapMemory1space(unsigned int pci1Mem1Base,
  85. unsigned int pci1Mem1Length);
  86. static unsigned int pci0GetIOspaceBase(void);
  87. static unsigned int pci0GetIOspaceSize(void);
  88. static unsigned int pci0GetMemory0Base(void);
  89. static unsigned int pci0GetMemory0Size(void);
  90. static unsigned int pci0GetMemory1Base(void);
  91. static unsigned int pci0GetMemory1Size(void);
  92. static unsigned int pci1GetIOspaceBase(void);
  93. static unsigned int pci1GetIOspaceSize(void);
  94. static unsigned int pci1GetMemory0Base(void);
  95. static unsigned int pci1GetMemory0Size(void);
  96. static unsigned int pci1GetMemory1Base(void);
  97. static unsigned int pci1GetMemory1Size(void);
  98. /*  Functions to implement "pci ops"  */
  99. static int galileo_pcibios_read_config_word(struct pci_dev *dev,
  100.     int offset, u16 * val);
  101. static int galileo_pcibios_read_config_byte(struct pci_dev *dev,
  102.     int offset, u8 * val);
  103. static int galileo_pcibios_read_config_dword(struct pci_dev *dev,
  104.      int offset, u32 * val);
  105. static int galileo_pcibios_write_config_byte(struct pci_dev *dev,
  106.      int offset, u8 val);
  107. static int galileo_pcibios_write_config_word(struct pci_dev *dev,
  108.      int offset, u16 val);
  109. static int galileo_pcibios_write_config_dword(struct pci_dev *dev,
  110.       int offset, u32 val);
  111. static void galileo_pcibios_set_master(struct pci_dev *dev);
  112. /*
  113.  *  General-purpose PCI functions.
  114.  */
  115. /*
  116.  * pci0MapIOspace - Maps PCI0 IO space for the master.
  117.  * Inputs: base and length of pci0Io
  118.  */
  119. static void pci0MapIOspace(unsigned int pci0IoBase,
  120.    unsigned int pci0IoLength)
  121. {
  122. unsigned int pci0IoTop =
  123.     (unsigned int) (pci0IoBase + pci0IoLength);
  124. if (pci0IoLength == 0)
  125. pci0IoTop++;
  126. pci0IoBase = (unsigned int) (pci0IoBase >> 21);
  127. pci0IoTop = (unsigned int) (((pci0IoTop - 1) & 0x0fffffff) >> 21);
  128. GT_WRITE(GT_PCI0IOLD_OFS, pci0IoBase);
  129. GT_WRITE(GT_PCI0IOHD_OFS, pci0IoTop);
  130. }
  131. /*
  132.  * pci1MapIOspace - Maps PCI1 IO space for the master.
  133.  * Inputs: base and length of pci1Io
  134.  */
  135. static void pci1MapIOspace(unsigned int pci1IoBase,
  136.    unsigned int pci1IoLength)
  137. {
  138. unsigned int pci1IoTop =
  139.     (unsigned int) (pci1IoBase + pci1IoLength);
  140. if (pci1IoLength == 0)
  141. pci1IoTop++;
  142. pci1IoBase = (unsigned int) (pci1IoBase >> 21);
  143. pci1IoTop = (unsigned int) (((pci1IoTop - 1) & 0x0fffffff) >> 21);
  144. GT_WRITE(GT_PCI1IOLD_OFS, pci1IoBase);
  145. GT_WRITE(GT_PCI1IOHD_OFS, pci1IoTop);
  146. }
  147. /*
  148.  * pci0MapMemory0space - Maps PCI0 memory0 space for the master.
  149.  * Inputs: base and length of pci0Mem0
  150.  */
  151. static void pci0MapMemory0space(unsigned int pci0Mem0Base,
  152. unsigned int pci0Mem0Length)
  153. {
  154. unsigned int pci0Mem0Top = pci0Mem0Base + pci0Mem0Length;
  155. if (pci0Mem0Length == 0)
  156. pci0Mem0Top++;
  157. pci0Mem0Base = pci0Mem0Base >> 21;
  158. pci0Mem0Top = ((pci0Mem0Top - 1) & 0x0fffffff) >> 21;
  159. GT_WRITE(GT_PCI0M0LD_OFS, pci0Mem0Base);
  160. GT_WRITE(GT_PCI0M0HD_OFS, pci0Mem0Top);
  161. }
  162. /*
  163.  * pci1MapMemory0space - Maps PCI1 memory0 space for the master.
  164.  * Inputs: base and length of pci1Mem0
  165.  */
  166. static void pci1MapMemory0space(unsigned int pci1Mem0Base,
  167. unsigned int pci1Mem0Length)
  168. {
  169. unsigned int pci1Mem0Top = pci1Mem0Base + pci1Mem0Length;
  170. if (pci1Mem0Length == 0)
  171. pci1Mem0Top++;
  172. pci1Mem0Base = pci1Mem0Base >> 21;
  173. pci1Mem0Top = ((pci1Mem0Top - 1) & 0x0fffffff) >> 21;
  174. GT_WRITE(GT_PCI1M0LD_OFS, pci1Mem0Base);
  175. GT_WRITE(GT_PCI1M0HD_OFS, pci1Mem0Top);
  176. }
  177. /*
  178.  * pci0MapMemory1space - Maps PCI0 memory1 space for the master.
  179.  * Inputs: base and length of pci0Mem1
  180.  */
  181. static void pci0MapMemory1space(unsigned int pci0Mem1Base,
  182. unsigned int pci0Mem1Length)
  183. {
  184. unsigned int pci0Mem1Top = pci0Mem1Base + pci0Mem1Length;
  185. if (pci0Mem1Length == 0)
  186. pci0Mem1Top++;
  187. pci0Mem1Base = pci0Mem1Base >> 21;
  188. pci0Mem1Top = ((pci0Mem1Top - 1) & 0x0fffffff) >> 21;
  189. GT_WRITE(GT_PCI0M1LD_OFS, pci0Mem1Base);
  190. GT_WRITE(GT_PCI0M1HD_OFS, pci0Mem1Top);
  191. }
  192. /*
  193.  * pci1MapMemory1space - Maps PCI1 memory1 space for the master.
  194.  * Inputs: base and length of pci1Mem1
  195.  */
  196. static void pci1MapMemory1space(unsigned int pci1Mem1Base,
  197. unsigned int pci1Mem1Length)
  198. {
  199. unsigned int pci1Mem1Top = pci1Mem1Base + pci1Mem1Length;
  200. if (pci1Mem1Length == 0)
  201. pci1Mem1Top++;
  202. pci1Mem1Base = pci1Mem1Base >> 21;
  203. pci1Mem1Top = ((pci1Mem1Top - 1) & 0x0fffffff) >> 21;
  204. GT_WRITE(GT_PCI1M1LD_OFS, pci1Mem1Base);
  205. GT_WRITE(GT_PCI1M1HD_OFS, pci1Mem1Top);
  206. }
  207. /*
  208.  * pci0GetIOspaceBase - Return PCI0 IO Base Address.
  209.  * Inputs: N/A
  210.  * Returns: PCI0 IO Base Address.
  211.  */
  212. static unsigned int pci0GetIOspaceBase(void)
  213. {
  214. unsigned int base;
  215. GT_READ(GT_PCI0IOLD_OFS, &base);
  216. base = base << 21;
  217. return base;
  218. }
  219. /*
  220.  * pci0GetIOspaceSize - Return PCI0 IO Bar Size.
  221.  * Inputs: N/A
  222.  * Returns: PCI0 IO Bar Size.
  223.  */
  224. static unsigned int pci0GetIOspaceSize(void)
  225. {
  226. unsigned int top, base, size;
  227. GT_READ(GT_PCI0IOLD_OFS, &base);
  228. base = base << 21;
  229. GT_READ(GT_PCI0IOHD_OFS, &top);
  230. top = (top << 21);
  231. size = ((top - base) & 0xfffffff);
  232. size = size | 0x1fffff;
  233. return (size + 1);
  234. }
  235. /*
  236.  * pci0GetMemory0Base - Return PCI0 Memory 0 Base Address.
  237.  * Inputs: N/A
  238.  * Returns: PCI0 Memory 0 Base Address.
  239.  */
  240. static unsigned int pci0GetMemory0Base(void)
  241. {
  242. unsigned int base;
  243. GT_READ(GT_PCI0M0LD_OFS, &base);
  244. base = base << 21;
  245. return base;
  246. }
  247. /*
  248.  * pci0GetMemory0Size - Return PCI0 Memory 0 Bar Size.
  249.  * Inputs: N/A
  250.  * Returns: PCI0 Memory 0 Bar Size.
  251.  */
  252. static unsigned int pci0GetMemory0Size(void)
  253. {
  254. unsigned int top, base, size;
  255. GT_READ(GT_PCI0M0LD_OFS, &base);
  256. base = base << 21;
  257. GT_READ(GT_PCI0M0HD_OFS, &top);
  258. top = (top << 21);
  259. size = ((top - base) & 0xfffffff);
  260. size = size | 0x1fffff;
  261. return (size + 1);
  262. }
  263. /*
  264.  * pci0GetMemory1Base - Return PCI0 Memory 1 Base Address.
  265.  * Inputs: N/A
  266.  * Returns: PCI0 Memory 1 Base Address.
  267.  */
  268. static unsigned int pci0GetMemory1Base(void)
  269. {
  270. unsigned int base;
  271. GT_READ(GT_PCI0M1LD_OFS, &base);
  272. base = base << 21;
  273. return base;
  274. }
  275. /*
  276.  * pci0GetMemory1Size - Return PCI0 Memory 1 Bar Size.
  277.  * Inputs: N/A
  278.  * Returns: PCI0 Memory 1 Bar Size.
  279.  */
  280. static unsigned int pci0GetMemory1Size(void)
  281. {
  282. unsigned int top, base, size;
  283. GT_READ(GT_PCI0M1LD_OFS, &base);
  284. base = base << 21;
  285. GT_READ(GT_PCI0M1HD_OFS, &top);
  286. top = (top << 21);
  287. size = ((top - base) & 0xfffffff);
  288. size = size | 0x1fffff;
  289. return (size + 1);
  290. }
  291. /*
  292.  * pci1GetIOspaceBase - Return PCI1 IO Base Address.
  293.  * Inputs: N/A
  294.  * Returns: PCI1 IO Base Address.
  295.  */
  296. static unsigned int pci1GetIOspaceBase(void)
  297. {
  298. unsigned int base;
  299. GT_READ(GT_PCI1IOLD_OFS, &base);
  300. base = base << 21;
  301. return base;
  302. }
  303. /*
  304.  * pci1GetIOspaceSize - Return PCI1 IO Bar Size.
  305.  * Inputs: N/A
  306.  * Returns: PCI1 IO Bar Size.
  307.  */
  308. static unsigned int pci1GetIOspaceSize(void)
  309. {
  310. unsigned int top, base, size;
  311. GT_READ(GT_PCI1IOLD_OFS, &base);
  312. base = base << 21;
  313. GT_READ(GT_PCI1IOHD_OFS, &top);
  314. top = (top << 21);
  315. size = ((top - base) & 0xfffffff);
  316. size = size | 0x1fffff;
  317. return (size + 1);
  318. }
  319. /*
  320.  * pci1GetMemory0Base - Return PCI1 Memory 0 Base Address.
  321.  * Inputs: N/A
  322.  * Returns: PCI1 Memory 0 Base Address.
  323.  */
  324. static unsigned int pci1GetMemory0Base(void)
  325. {
  326. unsigned int base;
  327. GT_READ(GT_PCI1M0LD_OFS, &base);
  328. base = base << 21;
  329. return base;
  330. }
  331. /*
  332.  * pci1GetMemory0Size - Return PCI1 Memory 0 Bar Size.
  333.  * Inputs: N/A
  334.  * Returns: PCI1 Memory 0 Bar Size.
  335.  */
  336. static unsigned int pci1GetMemory0Size(void)
  337. {
  338. unsigned int top, base, size;
  339. GT_READ(GT_PCI1M1LD_OFS, &base);
  340. base = base << 21;
  341. GT_READ(GT_PCI1M1HD_OFS, &top);
  342. top = (top << 21);
  343. size = ((top - base) & 0xfffffff);
  344. size = size | 0x1fffff;
  345. return (size + 1);
  346. }
  347. /*
  348.  * pci1GetMemory1Base - Return PCI1 Memory 1 Base Address.
  349.  * Inputs: N/A
  350.  * Returns: PCI1 Memory 1 Base Address.
  351.  */
  352. static unsigned int pci1GetMemory1Base(void)
  353. {
  354. unsigned int base;
  355. GT_READ(GT_PCI1M1LD_OFS, &base);
  356. base = base << 21;
  357. return base;
  358. }
  359. /*
  360.  * pci1GetMemory1Size - Return PCI1 Memory 1 Bar Size.
  361.  * Inputs: N/A
  362.  * Returns: PCI1 Memory 1 Bar Size.
  363.  */
  364. static unsigned int pci1GetMemory1Size(void)
  365. {
  366. unsigned int top, base, size;
  367. GT_READ(GT_PCI1M1LD_OFS, &base);
  368. base = base << 21;
  369. GT_READ(GT_PCI1M1HD_OFS, &top);
  370. top = (top << 21);
  371. size = ((top - base) & 0xfffffff);
  372. size = size | 0x1fffff;
  373. return (size + 1);
  374. }
  375. /*
  376.  * pci_range_ck -
  377.  *
  378.  * Check if the pci device that are trying to access does really exists
  379.  * on the evaluation board.  
  380.  *
  381.  * Inputs :
  382.  * bus - bus number (0 for PCI 0 ; 1 for PCI 1)
  383.  * dev - number of device on the specific pci bus
  384.  *
  385.  * Outpus :
  386.  * 0 - if OK , 1 - if failure
  387.  */
  388. static __inline__ int pci_range_ck(unsigned char bus, unsigned char dev)
  389. {
  390. /*
  391.  * We don't even pretend to handle other busses than bus 0 correctly.
  392.  * Accessing device 31 crashes the CP7000 for some reason.
  393.  */
  394. if ((bus == 0) && (dev != 31))
  395. return 0;
  396. return -1;
  397. }
  398. /*
  399.  * pciXReadConfigReg  - Read from a PCI configuration register
  400.  *                    - Make sure the GT is configured as a master before 
  401.  *                      reading from another device on the PCI.
  402.  *                   - The function takes care of Big/Little endian conversion.
  403.  * INPUTS:   regOffset: The register offset as it apears in the GT spec (or PCI
  404.  *                        spec)
  405.  *           pciDevNum: The device number needs to be addressed.                
  406.  * RETURNS: data , if the data == 0xffffffff check the master abort bit in the 
  407.  *                 cause register to make sure the data is valid
  408.  *
  409.  *  Configuration Address 0xCF8:
  410.  *
  411.  *       31 30    24 23  16 15  11 10     8 7      2  0     <=bit Number
  412.  *  |congif|Reserved|  Bus |Device|Function|Register|00|
  413.  *  |Enable|        |Number|Number| Number | Number |  |    <=field Name
  414.  *
  415.  */
  416. static unsigned int pci0ReadConfigReg(int offset, struct pci_dev *device)
  417. {
  418. unsigned int DataForRegCf8;
  419. unsigned int data;
  420. DataForRegCf8 = ((PCI_SLOT(device->devfn) << 11) |
  421.  (PCI_FUNC(device->devfn) << 8) |
  422.  (offset & ~0x3)) | 0x80000000;
  423. GT_WRITE(GT_PCI0_CFGADDR_OFS, DataForRegCf8);
  424. /*
  425.  * The casual observer might wonder why the READ is duplicated here,
  426.  * rather than immediately following the WRITE, and just have the swap
  427.  * in the "if".  That's because there is a latency problem with trying
  428.  * to read immediately after setting up the address register.  The "if"
  429.  * check gives enough time for the address to stabilize, so the READ
  430.  * can work.
  431.  */
  432. if (PCI_SLOT(device->devfn) == SELF) { /* This board */
  433. GT_READ(GT_PCI0_CFGDATA_OFS, &data);
  434. return data;
  435. } else { /* The PCI is working in LE Mode so swap the Data. */
  436. GT_READ(GT_PCI0_CFGDATA_OFS, &data);
  437. return cpu_to_le32(data);
  438. }
  439. }
  440. static unsigned int pci1ReadConfigReg(int offset, struct pci_dev *device)
  441. {
  442. unsigned int DataForRegCf8;
  443. unsigned int data;
  444. DataForRegCf8 = ((PCI_SLOT(device->devfn) << 11) |
  445.  (PCI_FUNC(device->devfn) << 8) |
  446.  (offset & ~0x3)) | 0x80000000;
  447. /*
  448.  * The casual observer might wonder why the READ is duplicated here,
  449.  * rather than immediately following the WRITE, and just have the
  450.  * swap in the "if".  That's because there is a latency problem
  451.  * with trying to read immediately after setting up the address
  452.  * register.  The "if" check gives enough time for the address
  453.  * to stabilize, so the READ can work.
  454.  */
  455. if (PCI_SLOT(device->devfn) == SELF) { /* This board */
  456. /* when configurating our own PCI 1 L-unit the access is through  
  457.    the PCI 0 interface with reg number = reg number + 0x80 */
  458. DataForRegCf8 |= 0x80;
  459. GT_WRITE(GT_PCI0_CFGADDR_OFS, DataForRegCf8);
  460. } else { /* The PCI is working in LE Mode so swap the Data. */
  461. GT_WRITE(GT_PCI1_CFGADDR_OFS, DataForRegCf8);
  462. }
  463. if (PCI_SLOT(device->devfn) == SELF) { /* This board */
  464. GT_READ(GT_PCI0_CFGDATA_OFS, &data);
  465. return data;
  466. } else {
  467. GT_READ(GT_PCI1_CFGDATA_OFS, &data);
  468. return cpu_to_le32(data);
  469. }
  470. }
  471. /*
  472.  * pciXWriteConfigReg - Write to a PCI configuration register
  473.  *                    - Make sure the GT is configured as a master before 
  474.  *                      writingto another device on the PCI.
  475.  *                    - The function takes care of Big/Little endian conversion.
  476.  * Inputs:   unsigned int regOffset: The register offset as it apears in the
  477.  *           GT spec 
  478.  *                   (or any other PCI device spec)
  479.  *           pciDevNum: The device number needs to be addressed.                
  480.  *
  481.  *  Configuration Address 0xCF8:
  482.  *
  483.  *       31 30    24 23  16 15  11 10     8 7      2  0     <=bit Number
  484.  *  |congif|Reserved|  Bus |Device|Function|Register|00|
  485.  *  |Enable|        |Number|Number| Number | Number |  |    <=field Name
  486.  *
  487.  */
  488. static void pci0WriteConfigReg(unsigned int offset,
  489.        struct pci_dev *device, unsigned int data)
  490. {
  491. unsigned int DataForRegCf8;
  492. DataForRegCf8 = ((PCI_SLOT(device->devfn) << 11) |
  493.  (PCI_FUNC(device->devfn) << 8) |
  494.  (offset & ~0x3)) | 0x80000000;
  495. GT_WRITE(GT_PCI0_CFGADDR_OFS, DataForRegCf8);
  496. if (PCI_SLOT(device->devfn) == SELF) { /* This board */
  497. GT_WRITE(GT_PCI0_CFGDATA_OFS, data);
  498. } else { /* configuration Transaction over the pci. */
  499. /* The PCI is working in LE Mode so swap the Data. */
  500. GT_WRITE(GT_PCI0_CFGDATA_OFS, le32_to_cpu(data));
  501. }
  502. }
  503. static void pci1WriteConfigReg(unsigned int offset,
  504.        struct pci_dev *device, unsigned int data)
  505. {
  506. unsigned int DataForRegCf8;
  507. DataForRegCf8 = ((PCI_SLOT(device->devfn) << 11) |
  508.  (PCI_FUNC(device->devfn) << 8) |
  509.  (offset & ~0x3)) | 0x80000000;
  510. /*
  511.  * There is a latency problem
  512.  * with trying to read immediately after setting up the address
  513.  * register.  The "if" check gives enough time for the address
  514.  * to stabilize, so the WRITE can work.
  515.  */
  516. if (PCI_SLOT(device->devfn) == SELF) { /* This board */
  517. /*
  518.  * when configurating our own PCI 1 L-unit the access is through
  519.  * the PCI 0 interface with reg number = reg number + 0x80
  520.  */
  521. DataForRegCf8 |= 0x80;
  522. GT_WRITE(GT_PCI0_CFGADDR_OFS, DataForRegCf8);
  523. } else { /* configuration Transaction over the pci. */
  524. /* The PCI is working in LE Mode so swap the Data. */
  525. GT_WRITE(GT_PCI1_CFGADDR_OFS, DataForRegCf8);
  526. }
  527. if (PCI_SLOT(device->devfn) == SELF) { /* This board */
  528. GT_WRITE(GT_PCI0_CFGDATA_OFS, data);
  529. } else { /* configuration Transaction over the pci. */
  530. GT_WRITE(GT_PCI1_CFGADDR_OFS, le32_to_cpu(data));
  531. }
  532. }
  533. /*
  534.  * galileo_pcibios_(read/write)_config_(dword/word/byte) -
  535.  *
  536.  * reads/write a dword/word/byte register from the configuration space
  537.  * of a device.
  538.  *
  539.  * Inputs :
  540.  * bus - bus number
  541.  * dev - device number
  542.  * offset - register offset in the configuration space
  543.  * val - value to be written / read
  544.  *
  545.  * Outputs :
  546.  * PCIBIOS_SUCCESSFUL when operation was succesfull
  547.  * PCIBIOS_DEVICE_NOT_FOUND when the bus or dev is errorneous
  548.  * PCIBIOS_BAD_REGISTER_NUMBER when accessing non aligned
  549.  */
  550. static int galileo_pcibios_read_config_dword(struct pci_dev *device,
  551.      int offset, u32 * val)
  552. {
  553. int dev, bus;
  554. bus = device->bus->number;
  555. dev = PCI_SLOT(device->devfn);
  556. if (pci_range_ck(bus, dev)) {
  557. *val = 0xffffffff;
  558. return PCIBIOS_DEVICE_NOT_FOUND;
  559. }
  560. if (offset & 0x3)
  561. return PCIBIOS_BAD_REGISTER_NUMBER;
  562. if (bus == 0)
  563. *val = pci0ReadConfigReg(offset, device);
  564. /*  This is so that the upper PCI layer will get the correct return value if
  565.    we're not attached to anything.  */
  566. if ((offset == 0) && (*val == 0xffffffff)) {
  567. return PCIBIOS_DEVICE_NOT_FOUND;
  568. }
  569. return PCIBIOS_SUCCESSFUL;
  570. }
  571. static int galileo_pcibios_read_config_word(struct pci_dev *device,
  572.     int offset, u16 * val)
  573. {
  574. int dev, bus;
  575. bus = device->bus->number;
  576. dev = PCI_SLOT(device->devfn);
  577. if (pci_range_ck(bus, dev)) {
  578. *val = 0xffff;
  579. return PCIBIOS_DEVICE_NOT_FOUND;
  580. }
  581. if (offset & 0x1)
  582. return PCIBIOS_BAD_REGISTER_NUMBER;
  583. if (bus == 0)
  584. *val =
  585.     (unsigned short) (pci0ReadConfigReg(offset, device) >>
  586.       ((offset & ~0x3) * 8));
  587. return PCIBIOS_SUCCESSFUL;
  588. }
  589. static int galileo_pcibios_read_config_byte(struct pci_dev *device,
  590.     int offset, u8 * val)
  591. {
  592. int dev, bus;
  593. bus = device->bus->number;
  594. dev = PCI_SLOT(device->devfn);
  595. if (pci_range_ck(bus, dev)) {
  596. *val = 0xff;
  597. return PCIBIOS_DEVICE_NOT_FOUND;
  598. }
  599. if (bus == 0)
  600. *val =
  601.     (unsigned char) (pci0ReadConfigReg(offset, device) >>
  602.      ((offset & ~0x3) * 8));
  603. /*
  604.  *  This is so that the upper PCI layer will get the correct return
  605.  * value if we're not attached to anything.
  606.  */
  607. if ((offset == 0xe) && (*val == 0xff)) {
  608. u32 MasterAbort;
  609. GT_READ(GT_INTRCAUSE_OFS, &MasterAbort);
  610. if (MasterAbort & 0x40000) {
  611. GT_WRITE(GT_INTRCAUSE_OFS,
  612.  (MasterAbort & 0xfffbffff));
  613. return PCIBIOS_DEVICE_NOT_FOUND;
  614. }
  615. }
  616. return PCIBIOS_SUCCESSFUL;
  617. }
  618. static int galileo_pcibios_write_config_dword(struct pci_dev *device,
  619.       int offset, u32 val)
  620. {
  621. int dev, bus;
  622. bus = device->bus->number;
  623. dev = PCI_SLOT(device->devfn);
  624. if (pci_range_ck(bus, dev))
  625. return PCIBIOS_DEVICE_NOT_FOUND;
  626. if (offset & 0x3)
  627. return PCIBIOS_BAD_REGISTER_NUMBER;
  628. if (bus == 0)
  629. pci0WriteConfigReg(offset, device, val);
  630. //  if (bus == 1) pci1WriteConfigReg (offset,device,val);
  631. return PCIBIOS_SUCCESSFUL;
  632. }
  633. static int galileo_pcibios_write_config_word(struct pci_dev *device,
  634.      int offset, u16 val)
  635. {
  636. int dev, bus;
  637. unsigned long tmp;
  638. bus = device->bus->number;
  639. dev = PCI_SLOT(device->devfn);
  640. if (pci_range_ck(bus, dev))
  641. return PCIBIOS_DEVICE_NOT_FOUND;
  642. if (offset & 0x1)
  643. return PCIBIOS_BAD_REGISTER_NUMBER;
  644. if (bus == 0)
  645. tmp = pci0ReadConfigReg(offset, device);
  646. //  if (bus == 1) tmp = pci1ReadConfigReg (offset,device);
  647. if ((offset % 4) == 0)
  648. tmp = (tmp & 0xffff0000) | (val & 0xffff);
  649. if ((offset % 4) == 2)
  650. tmp = (tmp & 0x0000ffff) | ((val & 0xffff) << 16);
  651. if (bus == 0)
  652. pci0WriteConfigReg(offset, device, tmp);
  653. //  if (bus == 1) pci1WriteConfigReg (offset,device,tmp);
  654. return PCIBIOS_SUCCESSFUL;
  655. }
  656. static int galileo_pcibios_write_config_byte(struct pci_dev *device,
  657.      int offset, u8 val)
  658. {
  659. int dev, bus;
  660. unsigned long tmp;
  661. bus = device->bus->number;
  662. dev = PCI_SLOT(device->devfn);
  663. if (pci_range_ck(bus, dev))
  664. return PCIBIOS_DEVICE_NOT_FOUND;
  665. if (bus == 0)
  666. tmp = pci0ReadConfigReg(offset, device);
  667. //  if (bus == 1) tmp = pci1ReadConfigReg (offset,device);
  668. if ((offset % 4) == 0)
  669. tmp = (tmp & 0xffffff00) | (val & 0xff);
  670. if ((offset % 4) == 1)
  671. tmp = (tmp & 0xffff00ff) | ((val & 0xff) << 8);
  672. if ((offset % 4) == 2)
  673. tmp = (tmp & 0xff00ffff) | ((val & 0xff) << 16);
  674. if ((offset % 4) == 3)
  675. tmp = (tmp & 0x00ffffff) | ((val & 0xff) << 24);
  676. if (bus == 0)
  677. pci0WriteConfigReg(offset, device, tmp);
  678. //  if (bus == 1) pci1WriteConfigReg (offset,device,tmp);
  679. return PCIBIOS_SUCCESSFUL;
  680. }
  681. static void galileo_pcibios_set_master(struct pci_dev *dev)
  682. {
  683. u16 cmd;
  684. galileo_pcibios_read_config_word(dev, PCI_COMMAND, &cmd);
  685. cmd |= PCI_COMMAND_MASTER;
  686. galileo_pcibios_write_config_word(dev, PCI_COMMAND, cmd);
  687. }
  688. /*  Externally-expected functions.  Do not change function names  */
  689. int pcibios_enable_resources(struct pci_dev *dev)
  690. {
  691. u16 cmd, old_cmd;
  692. u8 tmp1;
  693. int idx;
  694. struct resource *r;
  695. galileo_pcibios_read_config_word(dev, PCI_COMMAND, &cmd);
  696. old_cmd = cmd;
  697. for (idx = 0; idx < 6; idx++) {
  698. r = &dev->resource[idx];
  699. if (!r->start && r->end) {
  700. printk(KERN_ERR
  701.        "PCI: Device %s not available because of "
  702.        "resource collisionsn", dev->slot_name);
  703. return -EINVAL;
  704. }
  705. if (r->flags & IORESOURCE_IO)
  706. cmd |= PCI_COMMAND_IO;
  707. if (r->flags & IORESOURCE_MEM)
  708. cmd |= PCI_COMMAND_MEMORY;
  709. }
  710. if (cmd != old_cmd) {
  711. galileo_pcibios_write_config_word(dev, PCI_COMMAND, cmd);
  712. }
  713. /*
  714.  * Let's fix up the latency timer and cache line size here.  Cache
  715.  * line size = 32 bytes / sizeof dword (4) = 8.
  716.  * Latency timer must be > 8.  32 is random but appears to work.
  717.  */
  718. galileo_pcibios_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &tmp1);
  719. if (tmp1 != 8) {
  720. printk(KERN_WARNING "PCI setting cache line size to 8 from "
  721.        "%dn", tmp1);
  722. galileo_pcibios_write_config_byte(dev, PCI_CACHE_LINE_SIZE,
  723.   8);
  724. }
  725. galileo_pcibios_read_config_byte(dev, PCI_LATENCY_TIMER, &tmp1);
  726. if (tmp1 < 32) {
  727. printk(KERN_WARNING "PCI setting latency timer to 32 from %dn",
  728.        tmp1);
  729. galileo_pcibios_write_config_byte(dev, PCI_LATENCY_TIMER,
  730.   32);
  731. }
  732. return 0;
  733. }
  734. int pcibios_enable_device(struct pci_dev *dev)
  735. {
  736. return pcibios_enable_resources(dev);
  737. }
  738. void pcibios_update_resource(struct pci_dev *dev, struct resource *root,
  739.      struct resource *res, int resource)
  740. {
  741. u32 new, check;
  742. int reg;
  743. return;
  744. new = res->start | (res->flags & PCI_REGION_FLAG_MASK);
  745. if (resource < 6) {
  746. reg = PCI_BASE_ADDRESS_0 + 4 * resource;
  747. } else if (resource == PCI_ROM_RESOURCE) {
  748. res->flags |= PCI_ROM_ADDRESS_ENABLE;
  749. reg = dev->rom_base_reg;
  750. } else {
  751. /*
  752.  * Somebody might have asked allocation of a non-standard
  753.  * resource
  754.  */
  755. return;
  756. }
  757. pci_write_config_dword(dev, reg, new);
  758. pci_read_config_dword(dev, reg, &check);
  759. if ((new ^ check) &
  760.     ((new & PCI_BASE_ADDRESS_SPACE_IO) ? PCI_BASE_ADDRESS_IO_MASK :
  761.      PCI_BASE_ADDRESS_MEM_MASK)) {
  762. printk(KERN_ERR "PCI: Error while updating region "
  763.        "%s/%d (%08x != %08x)n", dev->slot_name, resource,
  764.        new, check);
  765. }
  766. }
  767. void pcibios_align_resource(void *data, struct resource *res,
  768.     unsigned long size, unsigned long align)
  769. {
  770. struct pci_dev *dev = data;
  771. if (res->flags & IORESOURCE_IO) {
  772. unsigned long start = res->start;
  773. /* We need to avoid collisions with `mirrored' VGA ports
  774.    and other strange ISA hardware, so we always want the
  775.    addresses kilobyte aligned.  */
  776. if (size > 0x100) {
  777. printk(KERN_ERR "PCI: I/O Region %s/%d too large"
  778.        " (%ld bytes)n", dev->slot_name,
  779.         dev->resource - res, size);
  780. }
  781. start = (start + 1024 - 1) & ~(1024 - 1);
  782. res->start = start;
  783. }
  784. }
  785. struct pci_ops galileo_pci_ops = {
  786. galileo_pcibios_read_config_byte,
  787. galileo_pcibios_read_config_word,
  788. galileo_pcibios_read_config_dword,
  789. galileo_pcibios_write_config_byte,
  790. galileo_pcibios_write_config_word,
  791. galileo_pcibios_write_config_dword
  792. };
  793. struct pci_fixup pcibios_fixups[] = {
  794. {0}
  795. };
  796. void __init pcibios_fixup_bus(struct pci_bus *c)
  797. {
  798. gt64120_board_pcibios_fixup_bus(c);
  799. }
  800. /*
  801.  * This code was derived from Galileo Technology's example
  802.  * and significantly reworked.
  803.  *
  804.  * This is very simple.  It does not scan multiple function devices.  It does
  805.  * not scan behind bridges.  Those would be simple to implement, but we don't
  806.  * currently need this.
  807.  */
  808. static void __init scan_and_initialize_pci(void)
  809. {
  810. struct pci_device pci_devices[MAX_PCI_DEVS];
  811. if (scan_pci_bus(pci_devices)) {
  812. allocate_pci_space(pci_devices);
  813. }
  814. }
  815. /*
  816.  * This is your basic PCI scan.  It goes through each slot and checks to
  817.  * see if there's something that responds.  If so, then get the size and
  818.  * type of each of the responding BARs.  Save them for later.
  819.  */
  820. static u32 __init scan_pci_bus(struct pci_device *pci_devices)
  821. {
  822. u32 arrayCounter = 0;
  823. u32 memType;
  824. u32 memSize;
  825. u32 pci_slot, bar;
  826. u32 id;
  827. u32 c18RegValue;
  828. struct pci_dev device;
  829. /*
  830.  * According to PCI REV 2.1 MAX agents on the bus are 21.
  831.  * We don't bother scanning ourselves (slot 0).
  832.  */
  833. for (pci_slot = 1; pci_slot < 22; pci_slot++) {
  834. device.devfn = PCI_DEVFN(pci_slot, 0);
  835. id = pci0ReadConfigReg(PCI_VENDOR_ID, &device);
  836. /*
  837.  *  Check for a PCI Master Abort (nothing responds in the
  838.  * slot)
  839.  */
  840. GT_READ(GT_INTRCAUSE_OFS, &c18RegValue);
  841. /*
  842.  * Clearing bit 18 of in the Cause Register 0xc18 by
  843.  * writting 0.
  844.  */
  845. GT_WRITE(GT_INTRCAUSE_OFS, (c18RegValue & 0xfffbffff));
  846. if ((id != 0xffffffff) && !(c18RegValue & 0x40000)) {
  847. pci_devices[arrayCounter].slot = pci_slot;
  848. for (bar = 0; bar < 6; bar++) {
  849. memType =
  850.     pci0ReadConfigReg(PCI_BASE_ADDRESS_0 +
  851.       (bar * 4), &device);
  852. pci_devices[arrayCounter].BARtype[bar] =
  853.     memType & 1;
  854. pci0WriteConfigReg(PCI_BASE_ADDRESS_0 +
  855.    (bar * 4), &device,
  856.    0xffffffff);
  857. memSize =
  858.     pci0ReadConfigReg(PCI_BASE_ADDRESS_0 +
  859.       (bar * 4), &device);
  860. if (memType & 1) { /*  IO space  */
  861. pci_devices[arrayCounter].
  862.     BARsize[bar] =
  863.     ~(memSize & 0xfffffffc) + 1;
  864. } else { /*  memory space */
  865. pci_devices[arrayCounter].
  866.     BARsize[bar] =
  867.     ~(memSize & 0xfffffff0) + 1;
  868. }
  869. } /*  BAR counter  */
  870. arrayCounter++;
  871. }
  872. /*  found a device  */
  873. } /*  slot counter  */
  874. if (arrayCounter < MAX_PCI_DEVS)
  875. pci_devices[arrayCounter].slot = -1;
  876. return arrayCounter;
  877. }
  878. #define ALIGN(val,align)        (((val) + ((align) - 1)) & ~((align) - 1))
  879. #define MAX(val1, val2) ((val1) > (val2) ? (val1) : (val2))
  880. /*
  881.  * This function goes through the list of devices and allocates the BARs in
  882.  * either IO or MEM space.  It does it in order of size, which will limit the
  883.  * amount of fragmentation we have in the IO and MEM spaces.
  884.  */
  885. static void __init allocate_pci_space(struct pci_device *pci_devices)
  886. {
  887. u32 count, maxcount, bar;
  888. u32 maxSize, maxDevice, maxBAR;
  889. u32 alignto;
  890. u32 base;
  891. u32 pci0_mem_base = pci0GetMemory0Base();
  892. u32 pci0_io_base = pci0GetIOspaceBase();
  893. struct pci_dev device;
  894. /*  How many PCI devices do we have?  */
  895. maxcount = MAX_PCI_DEVS;
  896. for (count = 0; count < MAX_PCI_DEVS; count++) {
  897. if (pci_devices[count].slot == -1) {
  898. maxcount = count;
  899. break;
  900. }
  901. }
  902. do {
  903. /*  Find the largest size BAR we need to allocate  */
  904. maxSize = 0;
  905. for (count = 0; count < maxcount; count++) {
  906. for (bar = 0; bar < 6; bar++) {
  907. if (pci_devices[count].BARsize[bar] >
  908.     maxSize) {
  909. maxSize =
  910.     pci_devices[count].
  911.     BARsize[bar];
  912. maxDevice = count;
  913. maxBAR = bar;
  914. }
  915. }
  916. }
  917. /*
  918.  * We've found the largest BAR.  Allocate it into IO or
  919.  * mem space.  We don't idiot check the bases to make
  920.  * sure they haven't overflowed the current size for that
  921.  * aperture.  
  922.  * Don't bother to enable the device's IO or MEM space here.
  923.  * That will be done in pci_enable_resources if the device is
  924.  * activated by a driver.
  925.  */
  926. if (maxSize) {
  927. device.devfn =
  928.     PCI_DEVFN(pci_devices[maxDevice].slot, 0);
  929. if (pci_devices[maxDevice].BARtype[maxBAR] == 1) {
  930. alignto = MAX(0x1000, maxSize);
  931. base = ALIGN(pci0_io_base, alignto);
  932. pci0WriteConfigReg(PCI_BASE_ADDRESS_0 +
  933.    (maxBAR * 4), &device,
  934.    base | 0x1);
  935. pci0_io_base = base + alignto;
  936. } else {
  937. alignto = MAX(0x1000, maxSize);
  938. base = ALIGN(pci0_mem_base, alignto);
  939. pci0WriteConfigReg(PCI_BASE_ADDRESS_0 +
  940.    (maxBAR * 4), &device,
  941.    base);
  942. pci0_mem_base = base + alignto;
  943. }
  944. /*
  945.  * This entry is finished.  Remove it from the list
  946.  * we'll scan.
  947.  */
  948. pci_devices[maxDevice].BARsize[maxBAR] = 0;
  949. }
  950. } while (maxSize);
  951. }
  952. void __init pcibios_init(void)
  953. {
  954. u32 tmp;
  955. struct pci_dev controller;
  956. controller.devfn = SELF;
  957. GT_READ(GT_PCI0_CMD_OFS, &tmp);
  958. GT_READ(GT_PCI0_BARE_OFS, &tmp);
  959. /*
  960.  * You have to enable bus mastering to configure any other
  961.  * card on the bus.
  962.  */
  963. tmp = pci0ReadConfigReg(PCI_COMMAND, &controller);
  964. tmp |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_SERR;
  965. pci0WriteConfigReg(PCI_COMMAND, &controller, tmp);
  966. /*  This scans the PCI bus and sets up initial values.  */
  967. scan_and_initialize_pci();
  968. /*
  969.  *  Reset PCI I/O and PCI MEM values to ones supported by EVM.
  970.  */
  971. ioport_resource.start = GT_PCI_IO_BASE;
  972. ioport_resource.end   = GT_PCI_IO_BASE + GT_PCI_IO_SIZE - 1;
  973. iomem_resource.start  = GT_PCI_MEM_BASE;
  974. iomem_resource.end    = GT_PCI_MEM_BASE + GT_PCI_MEM_BASE - 1;
  975. pci_scan_bus(0, &galileo_pci_ops, NULL);
  976. }
  977. /*
  978.  * for parsing "pci=" kernel boot arguments.
  979.  */
  980. char *pcibios_setup(char *str)
  981. {
  982.         printk(KERN_INFO "rr: pcibios_setupn");
  983.         /* Nothing to do for now.  */
  984.         return str;
  985. }
  986. unsigned __init int pcibios_assign_all_busses(void)
  987. {
  988. return 1;
  989. }
  990. #endif /* CONFIG_PCI */