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

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