| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 1 | /* | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 2 |  * MPC85xx/86xx PCI/PCIE support routing. | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 3 |  * | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 4 |  * Copyright 2007 Freescale Semiconductor, Inc | 
 | 5 |  * | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 6 |  * Initial author: Xianghua Xiao <x.xiao@freescale.com> | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 7 |  * Recode: ZHANG WEI <wei.zhang@freescale.com> | 
 | 8 |  * Rewrite the routing for Frescale PCI and PCI Express | 
 | 9 |  * 	Roy Zang <tie-fei.zang@freescale.com> | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 10 |  * | 
 | 11 |  * This program is free software; you can redistribute  it and/or modify it | 
 | 12 |  * under  the terms of  the GNU General  Public License as published by the | 
 | 13 |  * Free Software Foundation;  either version 2 of the  License, or (at your | 
 | 14 |  * option) any later version. | 
 | 15 |  */ | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 16 | #include <linux/kernel.h> | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 17 | #include <linux/pci.h> | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 18 | #include <linux/delay.h> | 
 | 19 | #include <linux/string.h> | 
 | 20 | #include <linux/init.h> | 
 | 21 | #include <linux/bootmem.h> | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 22 |  | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 23 | #include <asm/io.h> | 
 | 24 | #include <asm/prom.h> | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 25 | #include <asm/pci-bridge.h> | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 26 | #include <asm/machdep.h> | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 27 | #include <sysdev/fsl_soc.h> | 
| Roy Zang | 55c4499 | 2007-07-10 18:44:34 +0800 | [diff] [blame] | 28 | #include <sysdev/fsl_pci.h> | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 29 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 30 | /* atmu setup for fsl pci/pcie controller */ | 
 | 31 | void __init setup_pci_atmu(struct pci_controller *hose, struct resource *rsrc) | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 32 | { | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 33 | 	struct ccsr_pci __iomem *pci; | 
 | 34 | 	int i; | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 35 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 36 | 	pr_debug("PCI memory map start 0x%x, size 0x%x\n", rsrc->start, | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 37 | 			rsrc->end - rsrc->start + 1); | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 38 | 	pci = ioremap(rsrc->start, rsrc->end - rsrc->start + 1); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 39 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 40 | 	/* Disable all windows (except powar0 since its ignored) */ | 
 | 41 | 	for(i = 1; i < 5; i++) | 
 | 42 | 		out_be32(&pci->pow[i].powar, 0); | 
 | 43 | 	for(i = 0; i < 3; i++) | 
 | 44 | 		out_be32(&pci->piw[i].piwar, 0); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 45 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 46 | 	/* Setup outbound MEM window */ | 
 | 47 | 	for(i = 0; i < 3; i++) | 
 | 48 | 		if (hose->mem_resources[i].flags & IORESOURCE_MEM){ | 
 | 49 | 			pr_debug("PCI MEM resource start 0x%08x, size 0x%08x.\n", | 
 | 50 | 				hose->mem_resources[i].start, | 
 | 51 | 				hose->mem_resources[i].end | 
 | 52 | 				  - hose->mem_resources[i].start + 1); | 
 | 53 | 			out_be32(&pci->pow[i+1].potar, | 
 | 54 | 				(hose->mem_resources[i].start >> 12) | 
 | 55 | 				& 0x000fffff); | 
 | 56 | 			out_be32(&pci->pow[i+1].potear, 0); | 
 | 57 | 			out_be32(&pci->pow[i+1].powbar, | 
 | 58 | 				(hose->mem_resources[i].start >> 12) | 
 | 59 | 				& 0x000fffff); | 
 | 60 | 			/* Enable, Mem R/W */ | 
 | 61 | 			out_be32(&pci->pow[i+1].powar, 0x80044000 | 
 | 62 | 				| (__ilog2(hose->mem_resources[i].end | 
 | 63 | 				- hose->mem_resources[i].start + 1) - 1)); | 
 | 64 | 		} | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 65 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 66 | 	/* Setup outbound IO window */ | 
 | 67 | 	if (hose->io_resource.flags & IORESOURCE_IO){ | 
 | 68 | 		pr_debug("PCI IO resource start 0x%08x, size 0x%08x, phy base 0x%08x.\n", | 
 | 69 | 			hose->io_resource.start, | 
 | 70 | 			hose->io_resource.end - hose->io_resource.start + 1, | 
 | 71 | 			hose->io_base_phys); | 
 | 72 | 		out_be32(&pci->pow[i+1].potar, (hose->io_resource.start >> 12) | 
 | 73 | 				& 0x000fffff); | 
 | 74 | 		out_be32(&pci->pow[i+1].potear, 0); | 
 | 75 | 		out_be32(&pci->pow[i+1].powbar, (hose->io_base_phys >> 12) | 
 | 76 | 				& 0x000fffff); | 
 | 77 | 		/* Enable, IO R/W */ | 
 | 78 | 		out_be32(&pci->pow[i+1].powar, 0x80088000 | 
 | 79 | 			| (__ilog2(hose->io_resource.end | 
 | 80 | 			- hose->io_resource.start + 1) - 1)); | 
 | 81 | 	} | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 82 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 83 | 	/* Setup 2G inbound Memory Window @ 1 */ | 
 | 84 | 	out_be32(&pci->piw[2].pitar, 0x00000000); | 
 | 85 | 	out_be32(&pci->piw[2].piwbar,0x00000000); | 
 | 86 | 	out_be32(&pci->piw[2].piwar, PIWAR_2G); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 87 | } | 
 | 88 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 89 | void __init setup_pci_cmd(struct pci_controller *hose) | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 90 | { | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 91 | 	u16 cmd; | 
| Kumar Gala | eb12af4 | 2007-07-20 16:29:09 -0500 | [diff] [blame] | 92 | 	int cap_x; | 
 | 93 |  | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 94 | 	early_read_config_word(hose, 0, 0, PCI_COMMAND, &cmd); | 
 | 95 | 	cmd |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 96 | 		| PCI_COMMAND_IO; | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 97 | 	early_write_config_word(hose, 0, 0, PCI_COMMAND, cmd); | 
| Kumar Gala | eb12af4 | 2007-07-20 16:29:09 -0500 | [diff] [blame] | 98 |  | 
 | 99 | 	cap_x = early_find_capability(hose, 0, 0, PCI_CAP_ID_PCIX); | 
 | 100 | 	if (cap_x) { | 
 | 101 | 		int pci_x_cmd = cap_x + PCI_X_CMD; | 
 | 102 | 		cmd = PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ | 
 | 103 | 			| PCI_X_CMD_ERO | PCI_X_CMD_DPERR_E; | 
 | 104 | 		early_write_config_word(hose, 0, 0, pci_x_cmd, cmd); | 
 | 105 | 	} else { | 
 | 106 | 		early_write_config_byte(hose, 0, 0, PCI_LATENCY_TIMER, 0x80); | 
 | 107 | 	} | 
| Kumar Gala | 9ad494f | 2006-06-28 00:37:45 -0500 | [diff] [blame] | 108 | } | 
 | 109 |  | 
| Kumar Gala | 282045b | 2007-07-26 00:16:05 -0500 | [diff] [blame] | 110 | static void __init quirk_fsl_pcie_transparent(struct pci_dev *dev) | 
| Zhang Wei | 20243c7 | 2007-06-26 18:22:40 -0500 | [diff] [blame] | 111 | { | 
 | 112 | 	struct resource *res; | 
 | 113 | 	int i, res_idx = PCI_BRIDGE_RESOURCES; | 
 | 114 | 	struct pci_controller *hose; | 
 | 115 |  | 
| Kumar Gala | 957ecff | 2007-07-11 13:31:58 -0500 | [diff] [blame] | 116 | 	/* if we aren't a PCIe don't bother */ | 
 | 117 | 	if (!pci_find_capability(dev, PCI_CAP_ID_EXP)) | 
 | 118 | 		return ; | 
 | 119 |  | 
| Zhang Wei | 20243c7 | 2007-06-26 18:22:40 -0500 | [diff] [blame] | 120 | 	/* | 
 | 121 | 	 * Make the bridge be transparent. | 
 | 122 | 	 */ | 
 | 123 | 	dev->transparent = 1; | 
 | 124 |  | 
| Kumar Gala | 0b1d40c | 2007-06-27 10:27:33 -0500 | [diff] [blame] | 125 | 	hose = pci_bus_to_host(dev->bus); | 
| Zhang Wei | 20243c7 | 2007-06-26 18:22:40 -0500 | [diff] [blame] | 126 | 	if (!hose) { | 
 | 127 | 		printk(KERN_ERR "Can't find hose for bus %d\n", | 
 | 128 | 		       dev->bus->number); | 
 | 129 | 		return; | 
 | 130 | 	} | 
 | 131 |  | 
| Kumar Gala | 7391ff3 | 2007-07-20 13:49:29 -0500 | [diff] [blame] | 132 | 	/* Clear out any of the virtual P2P bridge registers */ | 
 | 133 | 	pci_write_config_word(dev, PCI_IO_BASE_UPPER16, 0); | 
 | 134 | 	pci_write_config_word(dev, PCI_IO_LIMIT_UPPER16, 0); | 
 | 135 | 	pci_write_config_byte(dev, PCI_IO_BASE, 0x10); | 
 | 136 | 	pci_write_config_byte(dev, PCI_IO_LIMIT, 0); | 
 | 137 | 	pci_write_config_word(dev, PCI_MEMORY_BASE, 0x10); | 
 | 138 | 	pci_write_config_word(dev, PCI_MEMORY_LIMIT, 0); | 
 | 139 | 	pci_write_config_word(dev, PCI_PREF_BASE_UPPER32, 0x0); | 
 | 140 | 	pci_write_config_word(dev, PCI_PREF_LIMIT_UPPER32, 0x0); | 
 | 141 | 	pci_write_config_word(dev, PCI_PREF_MEMORY_BASE, 0x10); | 
 | 142 | 	pci_write_config_word(dev, PCI_PREF_MEMORY_LIMIT, 0); | 
 | 143 |  | 
| Zhang Wei | 20243c7 | 2007-06-26 18:22:40 -0500 | [diff] [blame] | 144 | 	if (hose->io_resource.flags) { | 
 | 145 | 		res = &dev->resource[res_idx++]; | 
 | 146 | 		res->start = hose->io_resource.start; | 
 | 147 | 		res->end = hose->io_resource.end; | 
 | 148 | 		res->flags = hose->io_resource.flags; | 
| Kumar Gala | 7391ff3 | 2007-07-20 13:49:29 -0500 | [diff] [blame] | 149 | 		update_bridge_resource(dev, res); | 
| Zhang Wei | 20243c7 | 2007-06-26 18:22:40 -0500 | [diff] [blame] | 150 | 	} | 
 | 151 |  | 
 | 152 | 	for (i = 0; i < 3; i++) { | 
 | 153 | 		res = &dev->resource[res_idx + i]; | 
 | 154 | 		res->start = hose->mem_resources[i].start; | 
 | 155 | 		res->end = hose->mem_resources[i].end; | 
 | 156 | 		res->flags = hose->mem_resources[i].flags; | 
| Kumar Gala | 7391ff3 | 2007-07-20 13:49:29 -0500 | [diff] [blame] | 157 | 		update_bridge_resource(dev, res); | 
| Zhang Wei | 20243c7 | 2007-06-26 18:22:40 -0500 | [diff] [blame] | 158 | 	} | 
 | 159 | } | 
 | 160 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 161 | int __init fsl_pcie_check_link(struct pci_controller *hose) | 
 | 162 | { | 
| Kumar Gala | 2fce1225 | 2007-10-03 23:37:33 -0500 | [diff] [blame] | 163 | 	u32 val; | 
 | 164 | 	early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val); | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 165 | 	if (val < PCIE_LTSSM_L0) | 
 | 166 | 		return 1; | 
 | 167 | 	return 0; | 
 | 168 | } | 
| Zhang Wei | 20243c7 | 2007-06-26 18:22:40 -0500 | [diff] [blame] | 169 |  | 
| Kumar Gala | 6c0a11c | 2007-07-19 15:29:53 -0500 | [diff] [blame] | 170 | void fsl_pcibios_fixup_bus(struct pci_bus *bus) | 
 | 171 | { | 
 | 172 | 	struct pci_controller *hose = (struct pci_controller *) bus->sysdata; | 
 | 173 | 	int i; | 
 | 174 |  | 
 | 175 | 	/* deal with bogus pci_bus when we don't have anything connected on PCIe */ | 
 | 176 | 	if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK) { | 
 | 177 | 		if (bus->parent) { | 
 | 178 | 			for (i = 0; i < 4; ++i) | 
 | 179 | 				bus->resource[i] = bus->parent->resource[i]; | 
 | 180 | 		} | 
 | 181 | 	} | 
 | 182 | } | 
 | 183 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 184 | int __init fsl_add_bridge(struct device_node *dev, int is_primary) | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 185 | { | 
 | 186 | 	int len; | 
 | 187 | 	struct pci_controller *hose; | 
 | 188 | 	struct resource rsrc; | 
| Jeremy Kerr | 8efca49 | 2006-07-12 15:39:42 +1000 | [diff] [blame] | 189 | 	const int *bus_range; | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 190 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 191 | 	pr_debug("Adding PCI host bridge %s\n", dev->full_name); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 192 |  | 
 | 193 | 	/* Fetch host bridge registers address */ | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 194 | 	if (of_address_to_resource(dev, 0, &rsrc)) { | 
 | 195 | 		printk(KERN_WARNING "Can't get pci register base!"); | 
 | 196 | 		return -ENOMEM; | 
 | 197 | 	} | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 198 |  | 
 | 199 | 	/* Get bus range if any */ | 
| Stephen Rothwell | e2eb639 | 2007-04-03 22:26:41 +1000 | [diff] [blame] | 200 | 	bus_range = of_get_property(dev, "bus-range", &len); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 201 | 	if (bus_range == NULL || len < 2 * sizeof(int)) | 
 | 202 | 		printk(KERN_WARNING "Can't get bus-range for %s, assume" | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 203 | 			" bus 0\n", dev->full_name); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 204 |  | 
| Kumar Gala | 476f577 | 2007-06-26 12:12:55 -0500 | [diff] [blame] | 205 | 	pci_assign_all_buses = 1; | 
| Kumar Gala | dbf8471 | 2007-06-27 01:56:50 -0500 | [diff] [blame] | 206 | 	hose = pcibios_alloc_controller(dev); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 207 | 	if (!hose) | 
 | 208 | 		return -ENOMEM; | 
| Kumar Gala | dbf8471 | 2007-06-27 01:56:50 -0500 | [diff] [blame] | 209 |  | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 210 | 	hose->first_busno = bus_range ? bus_range[0] : 0x0; | 
| Zhang Wei | bf7c036 | 2007-05-22 11:38:26 +0800 | [diff] [blame] | 211 | 	hose->last_busno = bus_range ? bus_range[1] : 0xff; | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 212 |  | 
| Kumar Gala | 2e56ff2 | 2007-07-19 16:07:35 -0500 | [diff] [blame] | 213 | 	setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4, | 
 | 214 | 		PPC_INDIRECT_TYPE_BIG_ENDIAN); | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 215 | 	setup_pci_cmd(hose); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 216 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 217 | 	/* check PCI express link status */ | 
| Kumar Gala | 957ecff | 2007-07-11 13:31:58 -0500 | [diff] [blame] | 218 | 	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) { | 
| Kumar Gala | 7659c03 | 2007-07-25 00:29:53 -0500 | [diff] [blame] | 219 | 		hose->indirect_type |= PPC_INDIRECT_TYPE_EXT_REG | | 
| Kumar Gala | 957ecff | 2007-07-11 13:31:58 -0500 | [diff] [blame] | 220 | 			PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS; | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 221 | 		if (fsl_pcie_check_link(hose)) | 
| Kumar Gala | 957ecff | 2007-07-11 13:31:58 -0500 | [diff] [blame] | 222 | 			hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK; | 
 | 223 | 	} | 
| Zhang Wei | e4725c2 | 2007-06-25 15:21:10 -0500 | [diff] [blame] | 224 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 225 | 	printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx." | 
 | 226 | 		"Firmware bus number: %d->%d\n", | 
 | 227 | 		(unsigned long long)rsrc.start, hose->first_busno, | 
 | 228 | 		hose->last_busno); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 229 |  | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 230 | 	pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n", | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 231 | 		hose, hose->cfg_addr, hose->cfg_data); | 
 | 232 |  | 
 | 233 | 	/* Interpret the "ranges" property */ | 
 | 234 | 	/* This also maps the I/O region and sets isa_io/mem_base */ | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 235 | 	pci_process_bridge_OF_ranges(hose, dev, is_primary); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 236 |  | 
 | 237 | 	/* Setup PEX window registers */ | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 238 | 	setup_pci_atmu(hose, &rsrc); | 
| Jon Loeliger | b809b3e | 2006-06-17 17:52:48 -0500 | [diff] [blame] | 239 |  | 
 | 240 | 	return 0; | 
 | 241 | } | 
| Zang Roy-r61911 | 9ac4dd3 | 2007-07-10 18:46:35 +0800 | [diff] [blame] | 242 |  | 
| Kumar Gala | e587121 | 2007-07-23 15:47:26 -0500 | [diff] [blame] | 243 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8548E, quirk_fsl_pcie_transparent); | 
 | 244 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8548, quirk_fsl_pcie_transparent); | 
 | 245 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8543E, quirk_fsl_pcie_transparent); | 
 | 246 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8543, quirk_fsl_pcie_transparent); | 
 | 247 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8547E, quirk_fsl_pcie_transparent); | 
 | 248 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8545E, quirk_fsl_pcie_transparent); | 
 | 249 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8545, quirk_fsl_pcie_transparent); | 
 | 250 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8568E, quirk_fsl_pcie_transparent); | 
 | 251 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8568, quirk_fsl_pcie_transparent); | 
 | 252 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8567E, quirk_fsl_pcie_transparent); | 
 | 253 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8567, quirk_fsl_pcie_transparent); | 
| Kumar Gala | 15f6ddc | 2007-08-21 19:15:31 -0500 | [diff] [blame] | 254 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8533E, quirk_fsl_pcie_transparent); | 
 | 255 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8533, quirk_fsl_pcie_transparent); | 
| Kumar Gala | e587121 | 2007-07-23 15:47:26 -0500 | [diff] [blame] | 256 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8544E, quirk_fsl_pcie_transparent); | 
 | 257 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8544, quirk_fsl_pcie_transparent); | 
| Tony Li | 01db995 | 2007-10-16 15:15:23 +0800 | [diff] [blame] | 258 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8572E, quirk_fsl_pcie_transparent); | 
| Kumar Gala | 5d54ddc | 2007-09-11 01:25:43 -0500 | [diff] [blame] | 259 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8572, quirk_fsl_pcie_transparent); | 
| Jon Loeliger | c26c372 | 2007-06-04 12:27:14 -0500 | [diff] [blame] | 260 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_transparent); | 
 | 261 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_transparent); | 
| Jason Jin | 61c5d3c | 2007-10-03 15:09:50 -0500 | [diff] [blame] | 262 | DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_transparent); |