Linux Audio

Check our new training course

Loading...
v4.17
   1/*
   2 * MPC83xx/85xx/86xx PCI/PCIE support routing.
   3 *
   4 * Copyright 2007-2012 Freescale Semiconductor, Inc.
   5 * Copyright 2008-2009 MontaVista Software, Inc.
   6 *
   7 * Initial author: Xianghua Xiao <x.xiao@freescale.com>
   8 * Recode: ZHANG WEI <wei.zhang@freescale.com>
   9 * Rewrite the routing for Frescale PCI and PCI Express
  10 * 	Roy Zang <tie-fei.zang@freescale.com>
  11 * MPC83xx PCI-Express support:
  12 * 	Tony Li <tony.li@freescale.com>
  13 * 	Anton Vorontsov <avorontsov@ru.mvista.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#include <linux/kernel.h>
  21#include <linux/pci.h>
  22#include <linux/delay.h>
  23#include <linux/string.h>
  24#include <linux/fsl/edac.h>
  25#include <linux/init.h>
  26#include <linux/interrupt.h>
 
  27#include <linux/memblock.h>
  28#include <linux/log2.h>
  29#include <linux/platform_device.h>
  30#include <linux/slab.h>
  31#include <linux/suspend.h>
  32#include <linux/syscore_ops.h>
  33#include <linux/uaccess.h>
  34
  35#include <asm/io.h>
  36#include <asm/prom.h>
  37#include <asm/pci-bridge.h>
  38#include <asm/ppc-pci.h>
  39#include <asm/machdep.h>
  40#include <asm/mpc85xx.h>
  41#include <asm/disassemble.h>
  42#include <asm/ppc-opcode.h>
  43#include <sysdev/fsl_soc.h>
  44#include <sysdev/fsl_pci.h>
  45
  46static int fsl_pcie_bus_fixup, is_mpc83xx_pci;
  47
  48static void quirk_fsl_pcie_early(struct pci_dev *dev)
  49{
  50	u8 hdr_type;
  51
  52	/* if we aren't a PCIe don't bother */
  53	if (!pci_is_pcie(dev))
  54		return;
  55
  56	/* if we aren't in host mode don't bother */
  57	pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type);
  58	if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE)
  59		return;
  60
  61	dev->class = PCI_CLASS_BRIDGE_PCI << 8;
  62	fsl_pcie_bus_fixup = 1;
  63	return;
  64}
  65
  66static int fsl_indirect_read_config(struct pci_bus *, unsigned int,
  67				    int, int, u32 *);
  68
  69static int fsl_pcie_check_link(struct pci_controller *hose)
  70{
  71	u32 val = 0;
  72
  73	if (hose->indirect_type & PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK) {
  74		if (hose->ops->read == fsl_indirect_read_config)
  75			__indirect_read_config(hose, hose->first_busno, 0,
  76					       PCIE_LTSSM, 4, &val);
  77		else
 
 
 
  78			early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
  79		if (val < PCIE_LTSSM_L0)
  80			return 1;
  81	} else {
  82		struct ccsr_pci __iomem *pci = hose->private_data;
  83		/* for PCIe IP rev 3.0 or greater use CSR0 for link state */
  84		val = (in_be32(&pci->pex_csr0) & PEX_CSR0_LTSSM_MASK)
  85				>> PEX_CSR0_LTSSM_SHIFT;
  86		if (val != PEX_CSR0_LTSSM_L0)
  87			return 1;
  88	}
  89
  90	return 0;
  91}
  92
  93static int fsl_indirect_read_config(struct pci_bus *bus, unsigned int devfn,
  94				    int offset, int len, u32 *val)
  95{
  96	struct pci_controller *hose = pci_bus_to_host(bus);
  97
  98	if (fsl_pcie_check_link(hose))
  99		hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 100	else
 101		hose->indirect_type &= ~PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 102
 103	return indirect_read_config(bus, devfn, offset, len, val);
 104}
 105
 106#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
 107
 108static struct pci_ops fsl_indirect_pcie_ops =
 109{
 110	.read = fsl_indirect_read_config,
 111	.write = indirect_write_config,
 112};
 113
 114static u64 pci64_dma_offset;
 115
 116#ifdef CONFIG_SWIOTLB
 117static void setup_swiotlb_ops(struct pci_controller *hose)
 118{
 119	if (ppc_swiotlb_enable) {
 120		hose->controller_ops.dma_dev_setup = pci_dma_dev_setup_swiotlb;
 121		set_pci_dma_ops(&powerpc_swiotlb_dma_ops);
 122	}
 123}
 124#else
 125static inline void setup_swiotlb_ops(struct pci_controller *hose) {}
 126#endif
 127
 128static int fsl_pci_dma_set_mask(struct device *dev, u64 dma_mask)
 129{
 130	if (!dev->dma_mask || !dma_supported(dev, dma_mask))
 131		return -EIO;
 132
 133	/*
 134	 * Fix up PCI devices that are able to DMA to the large inbound
 135	 * mapping that allows addressing any RAM address from across PCI.
 
 136	 */
 137	if (dev_is_pci(dev) && dma_mask >= pci64_dma_offset * 2 - 1) {
 138		set_dma_ops(dev, &dma_nommu_ops);
 
 139		set_dma_offset(dev, pci64_dma_offset);
 140	}
 141
 142	*dev->dma_mask = dma_mask;
 143	return 0;
 144}
 145
 146static int setup_one_atmu(struct ccsr_pci __iomem *pci,
 147	unsigned int index, const struct resource *res,
 148	resource_size_t offset)
 149{
 150	resource_size_t pci_addr = res->start - offset;
 151	resource_size_t phys_addr = res->start;
 152	resource_size_t size = resource_size(res);
 153	u32 flags = 0x80044000; /* enable & mem R/W */
 154	unsigned int i;
 155
 156	pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n",
 157		(u64)res->start, (u64)size);
 158
 159	if (res->flags & IORESOURCE_PREFETCH)
 160		flags |= 0x10000000; /* enable relaxed ordering */
 161
 162	for (i = 0; size > 0; i++) {
 163		unsigned int bits = min_t(u32, ilog2(size),
 164					__ffs(pci_addr | phys_addr));
 165
 166		if (index + i >= 5)
 167			return -1;
 168
 169		out_be32(&pci->pow[index + i].potar, pci_addr >> 12);
 170		out_be32(&pci->pow[index + i].potear, (u64)pci_addr >> 44);
 171		out_be32(&pci->pow[index + i].powbar, phys_addr >> 12);
 172		out_be32(&pci->pow[index + i].powar, flags | (bits - 1));
 173
 174		pci_addr += (resource_size_t)1U << bits;
 175		phys_addr += (resource_size_t)1U << bits;
 176		size -= (resource_size_t)1U << bits;
 177	}
 178
 179	return i;
 180}
 181
 182static bool is_kdump(void)
 183{
 184	struct device_node *node;
 185
 186	node = of_find_node_by_type(NULL, "memory");
 187	if (!node) {
 188		WARN_ON_ONCE(1);
 189		return false;
 190	}
 191
 192	return of_property_read_bool(node, "linux,usable-memory");
 193}
 194
 195/* atmu setup for fsl pci/pcie controller */
 196static void setup_pci_atmu(struct pci_controller *hose)
 197{
 198	struct ccsr_pci __iomem *pci = hose->private_data;
 199	int i, j, n, mem_log, win_idx = 3, start_idx = 1, end_idx = 4;
 200	u64 mem, sz, paddr_hi = 0;
 201	u64 offset = 0, paddr_lo = ULLONG_MAX;
 202	u32 pcicsrbar = 0, pcicsrbar_sz;
 203	u32 piwar = PIWAR_EN | PIWAR_PF | PIWAR_TGI_LOCAL |
 204			PIWAR_READ_SNOOP | PIWAR_WRITE_SNOOP;
 
 205	const u64 *reg;
 206	int len;
 207	bool setup_inbound;
 208
 209	/*
 210	 * If this is kdump, we don't want to trigger a bunch of PCI
 211	 * errors by closing the window on in-flight DMA.
 212	 *
 213	 * We still run most of the function's logic so that things like
 214	 * hose->dma_window_size still get set.
 215	 */
 216	setup_inbound = !is_kdump();
 217
 218	if (of_device_is_compatible(hose->dn, "fsl,bsc9132-pcie")) {
 219		/*
 220		 * BSC9132 Rev1.0 has an issue where all the PEX inbound
 221		 * windows have implemented the default target value as 0xf
 222		 * for CCSR space.In all Freescale legacy devices the target
 223		 * of 0xf is reserved for local memory space. 9132 Rev1.0
 224		 * now has local mempry space mapped to target 0x0 instead of
 225		 * 0xf. Hence adding a workaround to remove the target 0xf
 226		 * defined for memory space from Inbound window attributes.
 227		 */
 228		piwar &= ~PIWAR_TGI_LOCAL;
 229	}
 230
 231	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 232		if (in_be32(&pci->block_rev1) >= PCIE_IP_REV_2_2) {
 233			win_idx = 2;
 234			start_idx = 0;
 235			end_idx = 3;
 236		}
 237	}
 238
 239	/* Disable all windows (except powar0 since it's ignored) */
 240	for(i = 1; i < 5; i++)
 241		out_be32(&pci->pow[i].powar, 0);
 242
 243	if (setup_inbound) {
 244		for (i = start_idx; i < end_idx; i++)
 245			out_be32(&pci->piw[i].piwar, 0);
 246	}
 247
 248	/* Setup outbound MEM window */
 249	for(i = 0, j = 1; i < 3; i++) {
 250		if (!(hose->mem_resources[i].flags & IORESOURCE_MEM))
 251			continue;
 252
 253		paddr_lo = min(paddr_lo, (u64)hose->mem_resources[i].start);
 254		paddr_hi = max(paddr_hi, (u64)hose->mem_resources[i].end);
 255
 256		/* We assume all memory resources have the same offset */
 257		offset = hose->mem_offset[i];
 258		n = setup_one_atmu(pci, j, &hose->mem_resources[i], offset);
 259
 260		if (n < 0 || j >= 5) {
 261			pr_err("Ran out of outbound PCI ATMUs for resource %d!\n", i);
 262			hose->mem_resources[i].flags |= IORESOURCE_DISABLED;
 263		} else
 264			j += n;
 265	}
 266
 267	/* Setup outbound IO window */
 268	if (hose->io_resource.flags & IORESOURCE_IO) {
 269		if (j >= 5) {
 270			pr_err("Ran out of outbound PCI ATMUs for IO resource\n");
 271		} else {
 272			pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, "
 273				 "phy base 0x%016llx.\n",
 274				 (u64)hose->io_resource.start,
 275				 (u64)resource_size(&hose->io_resource),
 276				 (u64)hose->io_base_phys);
 277			out_be32(&pci->pow[j].potar, (hose->io_resource.start >> 12));
 278			out_be32(&pci->pow[j].potear, 0);
 279			out_be32(&pci->pow[j].powbar, (hose->io_base_phys >> 12));
 280			/* Enable, IO R/W */
 281			out_be32(&pci->pow[j].powar, 0x80088000
 282				| (ilog2(hose->io_resource.end
 283				- hose->io_resource.start + 1) - 1));
 284		}
 285	}
 286
 287	/* convert to pci address space */
 288	paddr_hi -= offset;
 289	paddr_lo -= offset;
 290
 291	if (paddr_hi == paddr_lo) {
 292		pr_err("%pOF: No outbound window space\n", hose->dn);
 293		return;
 294	}
 295
 296	if (paddr_lo == 0) {
 297		pr_err("%pOF: No space for inbound window\n", hose->dn);
 298		return;
 299	}
 300
 301	/* setup PCSRBAR/PEXCSRBAR */
 302	early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, 0xffffffff);
 303	early_read_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, &pcicsrbar_sz);
 304	pcicsrbar_sz = ~pcicsrbar_sz + 1;
 305
 306	if (paddr_hi < (0x100000000ull - pcicsrbar_sz) ||
 307		(paddr_lo > 0x100000000ull))
 308		pcicsrbar = 0x100000000ull - pcicsrbar_sz;
 309	else
 310		pcicsrbar = (paddr_lo - pcicsrbar_sz) & -pcicsrbar_sz;
 311	early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, pcicsrbar);
 312
 313	paddr_lo = min(paddr_lo, (u64)pcicsrbar);
 314
 315	pr_info("%pOF: PCICSRBAR @ 0x%x\n", hose->dn, pcicsrbar);
 316
 317	/* Setup inbound mem window */
 318	mem = memblock_end_of_DRAM();
 319	pr_info("%s: end of DRAM %llx\n", __func__, mem);
 320
 321	/*
 322	 * The msi-address-64 property, if it exists, indicates the physical
 323	 * address of the MSIIR register.  Normally, this register is located
 324	 * inside CCSR, so the ATMU that covers all of CCSR is used. But if
 325	 * this property exists, then we normally need to create a new ATMU
 326	 * for it.  For now, however, we cheat.  The only entity that creates
 327	 * this property is the Freescale hypervisor, and the address is
 328	 * specified in the partition configuration.  Typically, the address
 329	 * is located in the page immediately after the end of DDR.  If so, we
 330	 * can avoid allocating a new ATMU by extending the DDR ATMU by one
 331	 * page.
 332	 */
 333	reg = of_get_property(hose->dn, "msi-address-64", &len);
 334	if (reg && (len == sizeof(u64))) {
 335		u64 address = be64_to_cpup(reg);
 336
 337		if ((address >= mem) && (address < (mem + PAGE_SIZE))) {
 338			pr_info("%pOF: extending DDR ATMU to cover MSIIR", hose->dn);
 339			mem += PAGE_SIZE;
 340		} else {
 341			/* TODO: Create a new ATMU for MSIIR */
 342			pr_warn("%pOF: msi-address-64 address of %llx is "
 343				"unsupported\n", hose->dn, address);
 344		}
 345	}
 346
 347	sz = min(mem, paddr_lo);
 348	mem_log = ilog2(sz);
 349
 350	/* PCIe can overmap inbound & outbound since RX & TX are separated */
 351	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 352		/* Size window to exact size if power-of-two or one size up */
 353		if ((1ull << mem_log) != mem) {
 354			mem_log++;
 355			if ((1ull << mem_log) > mem)
 356				pr_info("%pOF: Setting PCI inbound window "
 357					"greater than memory size\n", hose->dn);
 358		}
 359
 360		piwar |= ((mem_log - 1) & PIWAR_SZ_MASK);
 361
 362		if (setup_inbound) {
 363			/* Setup inbound memory window */
 364			out_be32(&pci->piw[win_idx].pitar,  0x00000000);
 365			out_be32(&pci->piw[win_idx].piwbar, 0x00000000);
 366			out_be32(&pci->piw[win_idx].piwar,  piwar);
 367		}
 368
 369		win_idx--;
 
 370		hose->dma_window_base_cur = 0x00000000;
 371		hose->dma_window_size = (resource_size_t)sz;
 372
 373		/*
 374		 * if we have >4G of memory setup second PCI inbound window to
 375		 * let devices that are 64-bit address capable to work w/o
 376		 * SWIOTLB and access the full range of memory
 377		 */
 378		if (sz != mem) {
 379			mem_log = ilog2(mem);
 380
 381			/* Size window up if we dont fit in exact power-of-2 */
 382			if ((1ull << mem_log) != mem)
 383				mem_log++;
 384
 385			piwar = (piwar & ~PIWAR_SZ_MASK) | (mem_log - 1);
 386			pci64_dma_offset = 1ULL << mem_log;
 387
 388			if (setup_inbound) {
 389				/* Setup inbound memory window */
 390				out_be32(&pci->piw[win_idx].pitar,  0x00000000);
 391				out_be32(&pci->piw[win_idx].piwbear,
 392						pci64_dma_offset >> 44);
 393				out_be32(&pci->piw[win_idx].piwbar,
 394						pci64_dma_offset >> 12);
 395				out_be32(&pci->piw[win_idx].piwar,  piwar);
 396			}
 397
 398			/*
 399			 * install our own dma_set_mask handler to fixup dma_ops
 400			 * and dma_offset
 401			 */
 402			ppc_md.dma_set_mask = fsl_pci_dma_set_mask;
 403
 404			pr_info("%pOF: Setup 64-bit PCI DMA window\n", hose->dn);
 405		}
 406	} else {
 407		u64 paddr = 0;
 408
 409		if (setup_inbound) {
 410			/* Setup inbound memory window */
 411			out_be32(&pci->piw[win_idx].pitar,  paddr >> 12);
 412			out_be32(&pci->piw[win_idx].piwbar, paddr >> 12);
 413			out_be32(&pci->piw[win_idx].piwar,
 414				 (piwar | (mem_log - 1)));
 415		}
 416
 417		win_idx--;
 
 418		paddr += 1ull << mem_log;
 419		sz -= 1ull << mem_log;
 420
 421		if (sz) {
 422			mem_log = ilog2(sz);
 423			piwar |= (mem_log - 1);
 424
 425			if (setup_inbound) {
 426				out_be32(&pci->piw[win_idx].pitar,
 427					 paddr >> 12);
 428				out_be32(&pci->piw[win_idx].piwbar,
 429					 paddr >> 12);
 430				out_be32(&pci->piw[win_idx].piwar, piwar);
 431			}
 432
 433			win_idx--;
 
 434			paddr += 1ull << mem_log;
 435		}
 436
 437		hose->dma_window_base_cur = 0x00000000;
 438		hose->dma_window_size = (resource_size_t)paddr;
 439	}
 440
 441	if (hose->dma_window_size < mem) {
 442#ifdef CONFIG_SWIOTLB
 443		ppc_swiotlb_enable = 1;
 444#else
 445		pr_err("%pOF: ERROR: Memory size exceeds PCI ATMU ability to "
 446			"map - enable CONFIG_SWIOTLB to avoid dma errors.\n",
 447			 hose->dn);
 448#endif
 449		/* adjusting outbound windows could reclaim space in mem map */
 450		if (paddr_hi < 0xffffffffull)
 451			pr_warn("%pOF: WARNING: Outbound window cfg leaves "
 452				"gaps in memory map. Adjusting the memory map "
 453				"could reduce unnecessary bounce buffering.\n",
 454				hose->dn);
 455
 456		pr_info("%pOF: DMA window size is 0x%llx\n", hose->dn,
 457			(u64)hose->dma_window_size);
 458	}
 459}
 460
 461static void __init setup_pci_cmd(struct pci_controller *hose)
 462{
 463	u16 cmd;
 464	int cap_x;
 465
 466	early_read_config_word(hose, 0, 0, PCI_COMMAND, &cmd);
 467	cmd |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY
 468		| PCI_COMMAND_IO;
 469	early_write_config_word(hose, 0, 0, PCI_COMMAND, cmd);
 470
 471	cap_x = early_find_capability(hose, 0, 0, PCI_CAP_ID_PCIX);
 472	if (cap_x) {
 473		int pci_x_cmd = cap_x + PCI_X_CMD;
 474		cmd = PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ
 475			| PCI_X_CMD_ERO | PCI_X_CMD_DPERR_E;
 476		early_write_config_word(hose, 0, 0, pci_x_cmd, cmd);
 477	} else {
 478		early_write_config_byte(hose, 0, 0, PCI_LATENCY_TIMER, 0x80);
 479	}
 480}
 481
 482void fsl_pcibios_fixup_bus(struct pci_bus *bus)
 483{
 484	struct pci_controller *hose = pci_bus_to_host(bus);
 485	int i, is_pcie = 0, no_link;
 486
 487	/* The root complex bridge comes up with bogus resources,
 488	 * we copy the PHB ones in.
 489	 *
 490	 * With the current generic PCI code, the PHB bus no longer
 491	 * has bus->resource[0..4] set, so things are a bit more
 492	 * tricky.
 493	 */
 494
 495	if (fsl_pcie_bus_fixup)
 496		is_pcie = early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP);
 497	no_link = !!(hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK);
 498
 499	if (bus->parent == hose->bus && (is_pcie || no_link)) {
 500		for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; ++i) {
 501			struct resource *res = bus->resource[i];
 502			struct resource *par;
 503
 504			if (!res)
 505				continue;
 506			if (i == 0)
 507				par = &hose->io_resource;
 508			else if (i < 4)
 509				par = &hose->mem_resources[i-1];
 510			else par = NULL;
 511
 512			res->start = par ? par->start : 0;
 513			res->end   = par ? par->end   : 0;
 514			res->flags = par ? par->flags : 0;
 515		}
 516	}
 517}
 518
 519int fsl_add_bridge(struct platform_device *pdev, int is_primary)
 520{
 521	int len;
 522	struct pci_controller *hose;
 523	struct resource rsrc;
 524	const int *bus_range;
 525	u8 hdr_type, progif;
 526	struct device_node *dev;
 527	struct ccsr_pci __iomem *pci;
 528	u16 temp;
 529	u32 svr = mfspr(SPRN_SVR);
 530
 531	dev = pdev->dev.of_node;
 532
 533	if (!of_device_is_available(dev)) {
 534		pr_warn("%pOF: disabled\n", dev);
 535		return -ENODEV;
 536	}
 537
 538	pr_debug("Adding PCI host bridge %pOF\n", dev);
 539
 540	/* Fetch host bridge registers address */
 541	if (of_address_to_resource(dev, 0, &rsrc)) {
 542		printk(KERN_WARNING "Can't get pci register base!");
 543		return -ENOMEM;
 544	}
 545
 546	/* Get bus range if any */
 547	bus_range = of_get_property(dev, "bus-range", &len);
 548	if (bus_range == NULL || len < 2 * sizeof(int))
 549		printk(KERN_WARNING "Can't get bus-range for %pOF, assume"
 550			" bus 0\n", dev);
 551
 552	pci_add_flags(PCI_REASSIGN_ALL_BUS);
 553	hose = pcibios_alloc_controller(dev);
 554	if (!hose)
 555		return -ENOMEM;
 556
 557	/* set platform device as the parent */
 558	hose->parent = &pdev->dev;
 559	hose->first_busno = bus_range ? bus_range[0] : 0x0;
 560	hose->last_busno = bus_range ? bus_range[1] : 0xff;
 561
 562	pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n",
 563		 (u64)rsrc.start, (u64)resource_size(&rsrc));
 564
 565	pci = hose->private_data = ioremap(rsrc.start, resource_size(&rsrc));
 566	if (!hose->private_data)
 567		goto no_bridge;
 568
 569	setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
 570			   PPC_INDIRECT_TYPE_BIG_ENDIAN);
 571
 572	if (in_be32(&pci->block_rev1) < PCIE_IP_REV_3_0)
 573		hose->indirect_type |= PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK;
 574
 575	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 576		/* use fsl_indirect_read_config for PCIe */
 577		hose->ops = &fsl_indirect_pcie_ops;
 578		/* For PCIE read HEADER_TYPE to identify controller mode */
 579		early_read_config_byte(hose, 0, 0, PCI_HEADER_TYPE, &hdr_type);
 580		if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE)
 581			goto no_bridge;
 582
 583	} else {
 584		/* For PCI read PROG to identify controller mode */
 585		early_read_config_byte(hose, 0, 0, PCI_CLASS_PROG, &progif);
 586		if ((progif & 1) &&
 587		    !of_property_read_bool(dev, "fsl,pci-agent-force-enum"))
 588			goto no_bridge;
 589	}
 590
 591	setup_pci_cmd(hose);
 592
 593	/* check PCI express link status */
 594	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 595		hose->indirect_type |= PPC_INDIRECT_TYPE_EXT_REG |
 596			PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS;
 597		if (fsl_pcie_check_link(hose))
 598			hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 599	} else {
 600		/*
 601		 * Set PBFR(PCI Bus Function Register)[10] = 1 to
 602		 * disable the combining of crossing cacheline
 603		 * boundary requests into one burst transaction.
 604		 * PCI-X operation is not affected.
 605		 * Fix erratum PCI 5 on MPC8548
 606		 */
 607#define PCI_BUS_FUNCTION 0x44
 608#define PCI_BUS_FUNCTION_MDS 0x400	/* Master disable streaming */
 609		if (((SVR_SOC_VER(svr) == SVR_8543) ||
 610		     (SVR_SOC_VER(svr) == SVR_8545) ||
 611		     (SVR_SOC_VER(svr) == SVR_8547) ||
 612		     (SVR_SOC_VER(svr) == SVR_8548)) &&
 613		    !early_find_capability(hose, 0, 0, PCI_CAP_ID_PCIX)) {
 614			early_read_config_word(hose, 0, 0,
 615					PCI_BUS_FUNCTION, &temp);
 616			temp |= PCI_BUS_FUNCTION_MDS;
 617			early_write_config_word(hose, 0, 0,
 618					PCI_BUS_FUNCTION, temp);
 619		}
 620	}
 621
 622	printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
 623		"Firmware bus number: %d->%d\n",
 624		(unsigned long long)rsrc.start, hose->first_busno,
 625		hose->last_busno);
 626
 627	pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
 628		hose, hose->cfg_addr, hose->cfg_data);
 629
 630	/* Interpret the "ranges" property */
 631	/* This also maps the I/O region and sets isa_io/mem_base */
 632	pci_process_bridge_OF_ranges(hose, dev, is_primary);
 633
 634	/* Setup PEX window registers */
 635	setup_pci_atmu(hose);
 636
 637	/* Set up controller operations */
 638	setup_swiotlb_ops(hose);
 639
 640	return 0;
 641
 642no_bridge:
 643	iounmap(hose->private_data);
 644	/* unmap cfg_data & cfg_addr separately if not on same page */
 645	if (((unsigned long)hose->cfg_data & PAGE_MASK) !=
 646	    ((unsigned long)hose->cfg_addr & PAGE_MASK))
 647		iounmap(hose->cfg_data);
 648	iounmap(hose->cfg_addr);
 649	pcibios_free_controller(hose);
 650	return -ENODEV;
 651}
 652#endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
 653
 654DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID,
 655			quirk_fsl_pcie_early);
 656
 657#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
 658struct mpc83xx_pcie_priv {
 659	void __iomem *cfg_type0;
 660	void __iomem *cfg_type1;
 661	u32 dev_base;
 662};
 663
 664struct pex_inbound_window {
 665	u32 ar;
 666	u32 tar;
 667	u32 barl;
 668	u32 barh;
 669};
 670
 671/*
 672 * With the convention of u-boot, the PCIE outbound window 0 serves
 673 * as configuration transactions outbound.
 674 */
 675#define PEX_OUTWIN0_BAR		0xCA4
 676#define PEX_OUTWIN0_TAL		0xCA8
 677#define PEX_OUTWIN0_TAH		0xCAC
 678#define PEX_RC_INWIN_BASE	0xE60
 679#define PEX_RCIWARn_EN		0x1
 680
 681static int mpc83xx_pcie_exclude_device(struct pci_bus *bus, unsigned int devfn)
 682{
 683	struct pci_controller *hose = pci_bus_to_host(bus);
 684
 685	if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK)
 686		return PCIBIOS_DEVICE_NOT_FOUND;
 687	/*
 688	 * Workaround for the HW bug: for Type 0 configure transactions the
 689	 * PCI-E controller does not check the device number bits and just
 690	 * assumes that the device number bits are 0.
 691	 */
 692	if (bus->number == hose->first_busno ||
 693			bus->primary == hose->first_busno) {
 694		if (devfn & 0xf8)
 695			return PCIBIOS_DEVICE_NOT_FOUND;
 696	}
 697
 698	if (ppc_md.pci_exclude_device) {
 699		if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
 700			return PCIBIOS_DEVICE_NOT_FOUND;
 701	}
 702
 703	return PCIBIOS_SUCCESSFUL;
 704}
 705
 706static void __iomem *mpc83xx_pcie_remap_cfg(struct pci_bus *bus,
 707					    unsigned int devfn, int offset)
 708{
 709	struct pci_controller *hose = pci_bus_to_host(bus);
 710	struct mpc83xx_pcie_priv *pcie = hose->dn->data;
 711	u32 dev_base = bus->number << 24 | devfn << 16;
 712	int ret;
 713
 714	ret = mpc83xx_pcie_exclude_device(bus, devfn);
 715	if (ret)
 716		return NULL;
 717
 718	offset &= 0xfff;
 719
 720	/* Type 0 */
 721	if (bus->number == hose->first_busno)
 722		return pcie->cfg_type0 + offset;
 723
 724	if (pcie->dev_base == dev_base)
 725		goto mapped;
 726
 727	out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, dev_base);
 728
 729	pcie->dev_base = dev_base;
 730mapped:
 731	return pcie->cfg_type1 + offset;
 732}
 733
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 734static int mpc83xx_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
 735				     int offset, int len, u32 val)
 736{
 737	struct pci_controller *hose = pci_bus_to_host(bus);
 
 
 
 
 
 738
 739	/* PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS */
 740	if (offset == PCI_PRIMARY_BUS && bus->number == hose->first_busno)
 741		val &= 0xffffff00;
 742
 743	return pci_generic_config_write(bus, devfn, offset, len, val);
 
 
 
 
 
 
 
 
 
 
 
 
 744}
 745
 746static struct pci_ops mpc83xx_pcie_ops = {
 747	.map_bus = mpc83xx_pcie_remap_cfg,
 748	.read = pci_generic_config_read,
 749	.write = mpc83xx_pcie_write_config,
 750};
 751
 752static int __init mpc83xx_pcie_setup(struct pci_controller *hose,
 753				     struct resource *reg)
 754{
 755	struct mpc83xx_pcie_priv *pcie;
 756	u32 cfg_bar;
 757	int ret = -ENOMEM;
 758
 759	pcie = zalloc_maybe_bootmem(sizeof(*pcie), GFP_KERNEL);
 760	if (!pcie)
 761		return ret;
 762
 763	pcie->cfg_type0 = ioremap(reg->start, resource_size(reg));
 764	if (!pcie->cfg_type0)
 765		goto err0;
 766
 767	cfg_bar = in_le32(pcie->cfg_type0 + PEX_OUTWIN0_BAR);
 768	if (!cfg_bar) {
 769		/* PCI-E isn't configured. */
 770		ret = -ENODEV;
 771		goto err1;
 772	}
 773
 774	pcie->cfg_type1 = ioremap(cfg_bar, 0x1000);
 775	if (!pcie->cfg_type1)
 776		goto err1;
 777
 778	WARN_ON(hose->dn->data);
 779	hose->dn->data = pcie;
 780	hose->ops = &mpc83xx_pcie_ops;
 781	hose->indirect_type |= PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK;
 782
 783	out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAH, 0);
 784	out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, 0);
 785
 786	if (fsl_pcie_check_link(hose))
 787		hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 788
 789	return 0;
 790err1:
 791	iounmap(pcie->cfg_type0);
 792err0:
 793	kfree(pcie);
 794	return ret;
 795
 796}
 797
 798int __init mpc83xx_add_bridge(struct device_node *dev)
 799{
 800	int ret;
 801	int len;
 802	struct pci_controller *hose;
 803	struct resource rsrc_reg;
 804	struct resource rsrc_cfg;
 805	const int *bus_range;
 806	int primary;
 807
 808	is_mpc83xx_pci = 1;
 809
 810	if (!of_device_is_available(dev)) {
 811		pr_warn("%pOF: disabled by the firmware.\n",
 812			dev);
 813		return -ENODEV;
 814	}
 815	pr_debug("Adding PCI host bridge %pOF\n", dev);
 816
 817	/* Fetch host bridge registers address */
 818	if (of_address_to_resource(dev, 0, &rsrc_reg)) {
 819		printk(KERN_WARNING "Can't get pci register base!\n");
 820		return -ENOMEM;
 821	}
 822
 823	memset(&rsrc_cfg, 0, sizeof(rsrc_cfg));
 824
 825	if (of_address_to_resource(dev, 1, &rsrc_cfg)) {
 826		printk(KERN_WARNING
 827			"No pci config register base in dev tree, "
 828			"using default\n");
 829		/*
 830		 * MPC83xx supports up to two host controllers
 831		 * 	one at 0x8500 has config space registers at 0x8300
 832		 * 	one at 0x8600 has config space registers at 0x8380
 833		 */
 834		if ((rsrc_reg.start & 0xfffff) == 0x8500)
 835			rsrc_cfg.start = (rsrc_reg.start & 0xfff00000) + 0x8300;
 836		else if ((rsrc_reg.start & 0xfffff) == 0x8600)
 837			rsrc_cfg.start = (rsrc_reg.start & 0xfff00000) + 0x8380;
 838	}
 839	/*
 840	 * Controller at offset 0x8500 is primary
 841	 */
 842	if ((rsrc_reg.start & 0xfffff) == 0x8500)
 843		primary = 1;
 844	else
 845		primary = 0;
 846
 847	/* Get bus range if any */
 848	bus_range = of_get_property(dev, "bus-range", &len);
 849	if (bus_range == NULL || len < 2 * sizeof(int)) {
 850		printk(KERN_WARNING "Can't get bus-range for %pOF, assume"
 851		       " bus 0\n", dev);
 852	}
 853
 854	pci_add_flags(PCI_REASSIGN_ALL_BUS);
 855	hose = pcibios_alloc_controller(dev);
 856	if (!hose)
 857		return -ENOMEM;
 858
 859	hose->first_busno = bus_range ? bus_range[0] : 0;
 860	hose->last_busno = bus_range ? bus_range[1] : 0xff;
 861
 862	if (of_device_is_compatible(dev, "fsl,mpc8314-pcie")) {
 863		ret = mpc83xx_pcie_setup(hose, &rsrc_reg);
 864		if (ret)
 865			goto err0;
 866	} else {
 867		setup_indirect_pci(hose, rsrc_cfg.start,
 868				   rsrc_cfg.start + 4, 0);
 869	}
 870
 871	printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
 872	       "Firmware bus number: %d->%d\n",
 873	       (unsigned long long)rsrc_reg.start, hose->first_busno,
 874	       hose->last_busno);
 875
 876	pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
 877	    hose, hose->cfg_addr, hose->cfg_data);
 878
 879	/* Interpret the "ranges" property */
 880	/* This also maps the I/O region and sets isa_io/mem_base */
 881	pci_process_bridge_OF_ranges(hose, dev, primary);
 882
 883	return 0;
 884err0:
 885	pcibios_free_controller(hose);
 886	return ret;
 887}
 888#endif /* CONFIG_PPC_83xx */
 889
 890u64 fsl_pci_immrbar_base(struct pci_controller *hose)
 891{
 892#ifdef CONFIG_PPC_83xx
 893	if (is_mpc83xx_pci) {
 894		struct mpc83xx_pcie_priv *pcie = hose->dn->data;
 895		struct pex_inbound_window *in;
 896		int i;
 897
 898		/* Walk the Root Complex Inbound windows to match IMMR base */
 899		in = pcie->cfg_type0 + PEX_RC_INWIN_BASE;
 900		for (i = 0; i < 4; i++) {
 901			/* not enabled, skip */
 902			if (!(in_le32(&in[i].ar) & PEX_RCIWARn_EN))
 903				continue;
 904
 905			if (get_immrbase() == in_le32(&in[i].tar))
 906				return (u64)in_le32(&in[i].barh) << 32 |
 907					    in_le32(&in[i].barl);
 908		}
 909
 910		printk(KERN_WARNING "could not find PCI BAR matching IMMR\n");
 911	}
 912#endif
 913
 914#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
 915	if (!is_mpc83xx_pci) {
 916		u32 base;
 917
 918		pci_bus_read_config_dword(hose->bus,
 919			PCI_DEVFN(0, 0), PCI_BASE_ADDRESS_0, &base);
 920
 921		/*
 922		 * For PEXCSRBAR, bit 3-0 indicate prefetchable and
 923		 * address type. So when getting base address, these
 924		 * bits should be masked
 925		 */
 926		base &= PCI_BASE_ADDRESS_MEM_MASK;
 927
 928		return base;
 929	}
 930#endif
 931
 932	return 0;
 933}
 934
 935#ifdef CONFIG_E500
 936static int mcheck_handle_load(struct pt_regs *regs, u32 inst)
 937{
 938	unsigned int rd, ra, rb, d;
 939
 940	rd = get_rt(inst);
 941	ra = get_ra(inst);
 942	rb = get_rb(inst);
 943	d = get_d(inst);
 944
 945	switch (get_op(inst)) {
 946	case 31:
 947		switch (get_xop(inst)) {
 948		case OP_31_XOP_LWZX:
 949		case OP_31_XOP_LWBRX:
 950			regs->gpr[rd] = 0xffffffff;
 951			break;
 952
 953		case OP_31_XOP_LWZUX:
 954			regs->gpr[rd] = 0xffffffff;
 955			regs->gpr[ra] += regs->gpr[rb];
 956			break;
 957
 958		case OP_31_XOP_LBZX:
 959			regs->gpr[rd] = 0xff;
 960			break;
 961
 962		case OP_31_XOP_LBZUX:
 963			regs->gpr[rd] = 0xff;
 964			regs->gpr[ra] += regs->gpr[rb];
 965			break;
 966
 967		case OP_31_XOP_LHZX:
 968		case OP_31_XOP_LHBRX:
 969			regs->gpr[rd] = 0xffff;
 970			break;
 971
 972		case OP_31_XOP_LHZUX:
 973			regs->gpr[rd] = 0xffff;
 974			regs->gpr[ra] += regs->gpr[rb];
 975			break;
 976
 977		case OP_31_XOP_LHAX:
 978			regs->gpr[rd] = ~0UL;
 979			break;
 980
 981		case OP_31_XOP_LHAUX:
 982			regs->gpr[rd] = ~0UL;
 983			regs->gpr[ra] += regs->gpr[rb];
 984			break;
 985
 986		default:
 987			return 0;
 988		}
 989		break;
 990
 991	case OP_LWZ:
 992		regs->gpr[rd] = 0xffffffff;
 993		break;
 994
 995	case OP_LWZU:
 996		regs->gpr[rd] = 0xffffffff;
 997		regs->gpr[ra] += (s16)d;
 998		break;
 999
1000	case OP_LBZ:
1001		regs->gpr[rd] = 0xff;
1002		break;
1003
1004	case OP_LBZU:
1005		regs->gpr[rd] = 0xff;
1006		regs->gpr[ra] += (s16)d;
1007		break;
1008
1009	case OP_LHZ:
1010		regs->gpr[rd] = 0xffff;
1011		break;
1012
1013	case OP_LHZU:
1014		regs->gpr[rd] = 0xffff;
1015		regs->gpr[ra] += (s16)d;
1016		break;
1017
1018	case OP_LHA:
1019		regs->gpr[rd] = ~0UL;
1020		break;
1021
1022	case OP_LHAU:
1023		regs->gpr[rd] = ~0UL;
1024		regs->gpr[ra] += (s16)d;
1025		break;
1026
1027	default:
1028		return 0;
1029	}
1030
1031	return 1;
1032}
1033
1034static int is_in_pci_mem_space(phys_addr_t addr)
1035{
1036	struct pci_controller *hose;
1037	struct resource *res;
1038	int i;
1039
1040	list_for_each_entry(hose, &hose_list, list_node) {
1041		if (!(hose->indirect_type & PPC_INDIRECT_TYPE_EXT_REG))
1042			continue;
1043
1044		for (i = 0; i < 3; i++) {
1045			res = &hose->mem_resources[i];
1046			if ((res->flags & IORESOURCE_MEM) &&
1047				addr >= res->start && addr <= res->end)
1048				return 1;
1049		}
1050	}
1051	return 0;
1052}
1053
1054int fsl_pci_mcheck_exception(struct pt_regs *regs)
1055{
1056	u32 inst;
1057	int ret;
1058	phys_addr_t addr = 0;
1059
1060	/* Let KVM/QEMU deal with the exception */
1061	if (regs->msr & MSR_GS)
1062		return 0;
1063
1064#ifdef CONFIG_PHYS_64BIT
1065	addr = mfspr(SPRN_MCARU);
1066	addr <<= 32;
1067#endif
1068	addr += mfspr(SPRN_MCAR);
1069
1070	if (is_in_pci_mem_space(addr)) {
1071		if (user_mode(regs)) {
1072			pagefault_disable();
1073			ret = get_user(inst, (__u32 __user *)regs->nip);
1074			pagefault_enable();
1075		} else {
1076			ret = probe_kernel_address((void *)regs->nip, inst);
1077		}
1078
1079		if (!ret && mcheck_handle_load(regs, inst)) {
1080			regs->nip += 4;
1081			return 1;
1082		}
1083	}
1084
1085	return 0;
1086}
1087#endif
1088
1089#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
1090static const struct of_device_id pci_ids[] = {
1091	{ .compatible = "fsl,mpc8540-pci", },
1092	{ .compatible = "fsl,mpc8548-pcie", },
1093	{ .compatible = "fsl,mpc8610-pci", },
1094	{ .compatible = "fsl,mpc8641-pcie", },
1095	{ .compatible = "fsl,qoriq-pcie", },
1096	{ .compatible = "fsl,qoriq-pcie-v2.1", },
1097	{ .compatible = "fsl,qoriq-pcie-v2.2", },
1098	{ .compatible = "fsl,qoriq-pcie-v2.3", },
1099	{ .compatible = "fsl,qoriq-pcie-v2.4", },
1100	{ .compatible = "fsl,qoriq-pcie-v3.0", },
1101
1102	/*
1103	 * The following entries are for compatibility with older device
1104	 * trees.
1105	 */
1106	{ .compatible = "fsl,p1022-pcie", },
1107	{ .compatible = "fsl,p4080-pcie", },
1108
1109	{},
1110};
1111
1112struct device_node *fsl_pci_primary;
1113
1114void fsl_pci_assign_primary(void)
1115{
1116	struct device_node *np;
1117
1118	/* Callers can specify the primary bus using other means. */
1119	if (fsl_pci_primary)
1120		return;
1121
1122	/* If a PCI host bridge contains an ISA node, it's primary. */
1123	np = of_find_node_by_type(NULL, "isa");
1124	while ((fsl_pci_primary = of_get_parent(np))) {
1125		of_node_put(np);
1126		np = fsl_pci_primary;
1127
1128		if (of_match_node(pci_ids, np) && of_device_is_available(np))
1129			return;
1130	}
1131
1132	/*
1133	 * If there's no PCI host bridge with ISA, arbitrarily
1134	 * designate one as primary.  This can go away once
1135	 * various bugs with primary-less systems are fixed.
1136	 */
1137	for_each_matching_node(np, pci_ids) {
1138		if (of_device_is_available(np)) {
1139			fsl_pci_primary = np;
1140			of_node_put(np);
1141			return;
1142		}
1143	}
1144}
1145
1146#ifdef CONFIG_PM_SLEEP
1147static irqreturn_t fsl_pci_pme_handle(int irq, void *dev_id)
1148{
1149	struct pci_controller *hose = dev_id;
1150	struct ccsr_pci __iomem *pci = hose->private_data;
1151	u32 dr;
1152
1153	dr = in_be32(&pci->pex_pme_mes_dr);
1154	if (!dr)
1155		return IRQ_NONE;
1156
1157	out_be32(&pci->pex_pme_mes_dr, dr);
1158
1159	return IRQ_HANDLED;
1160}
1161
1162static int fsl_pci_pme_probe(struct pci_controller *hose)
1163{
1164	struct ccsr_pci __iomem *pci;
1165	struct pci_dev *dev;
1166	int pme_irq;
1167	int res;
1168	u16 pms;
1169
1170	/* Get hose's pci_dev */
1171	dev = list_first_entry(&hose->bus->devices, typeof(*dev), bus_list);
1172
1173	/* PME Disable */
1174	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pms);
1175	pms &= ~PCI_PM_CTRL_PME_ENABLE;
1176	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pms);
1177
1178	pme_irq = irq_of_parse_and_map(hose->dn, 0);
1179	if (!pme_irq) {
1180		dev_err(&dev->dev, "Failed to map PME interrupt.\n");
1181
1182		return -ENXIO;
1183	}
1184
1185	res = devm_request_irq(hose->parent, pme_irq,
1186			fsl_pci_pme_handle,
1187			IRQF_SHARED,
1188			"[PCI] PME", hose);
1189	if (res < 0) {
1190		dev_err(&dev->dev, "Unable to request irq %d for PME\n", pme_irq);
1191		irq_dispose_mapping(pme_irq);
1192
1193		return -ENODEV;
1194	}
1195
1196	pci = hose->private_data;
1197
1198	/* Enable PTOD, ENL23D & EXL23D */
1199	clrbits32(&pci->pex_pme_mes_disr,
 
1200		  PME_DISR_EN_PTOD | PME_DISR_EN_ENL23D | PME_DISR_EN_EXL23D);
1201
1202	out_be32(&pci->pex_pme_mes_ier, 0);
1203	setbits32(&pci->pex_pme_mes_ier,
1204		  PME_DISR_EN_PTOD | PME_DISR_EN_ENL23D | PME_DISR_EN_EXL23D);
1205
1206	/* PME Enable */
1207	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pms);
1208	pms |= PCI_PM_CTRL_PME_ENABLE;
1209	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pms);
1210
1211	return 0;
1212}
1213
1214static void send_pme_turnoff_message(struct pci_controller *hose)
1215{
1216	struct ccsr_pci __iomem *pci = hose->private_data;
1217	u32 dr;
1218	int i;
1219
1220	/* Send PME_Turn_Off Message Request */
1221	setbits32(&pci->pex_pmcr, PEX_PMCR_PTOMR);
1222
1223	/* Wait trun off done */
1224	for (i = 0; i < 150; i++) {
1225		dr = in_be32(&pci->pex_pme_mes_dr);
1226		if (dr) {
1227			out_be32(&pci->pex_pme_mes_dr, dr);
1228			break;
1229		}
1230
1231		udelay(1000);
1232	}
1233}
1234
1235static void fsl_pci_syscore_do_suspend(struct pci_controller *hose)
1236{
1237	send_pme_turnoff_message(hose);
1238}
1239
1240static int fsl_pci_syscore_suspend(void)
1241{
1242	struct pci_controller *hose, *tmp;
1243
1244	list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
1245		fsl_pci_syscore_do_suspend(hose);
1246
1247	return 0;
1248}
1249
1250static void fsl_pci_syscore_do_resume(struct pci_controller *hose)
1251{
1252	struct ccsr_pci __iomem *pci = hose->private_data;
1253	u32 dr;
1254	int i;
1255
1256	/* Send Exit L2 State Message */
1257	setbits32(&pci->pex_pmcr, PEX_PMCR_EXL2S);
1258
1259	/* Wait exit done */
1260	for (i = 0; i < 150; i++) {
1261		dr = in_be32(&pci->pex_pme_mes_dr);
1262		if (dr) {
1263			out_be32(&pci->pex_pme_mes_dr, dr);
1264			break;
1265		}
1266
1267		udelay(1000);
1268	}
1269
1270	setup_pci_atmu(hose);
1271}
1272
1273static void fsl_pci_syscore_resume(void)
1274{
1275	struct pci_controller *hose, *tmp;
1276
1277	list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
1278		fsl_pci_syscore_do_resume(hose);
1279}
1280
1281static struct syscore_ops pci_syscore_pm_ops = {
1282	.suspend = fsl_pci_syscore_suspend,
1283	.resume = fsl_pci_syscore_resume,
1284};
1285#endif
1286
1287void fsl_pcibios_fixup_phb(struct pci_controller *phb)
1288{
1289#ifdef CONFIG_PM_SLEEP
1290	fsl_pci_pme_probe(phb);
1291#endif
1292}
1293
1294static int add_err_dev(struct platform_device *pdev)
1295{
1296	struct platform_device *errdev;
1297	struct mpc85xx_edac_pci_plat_data pd = {
1298		.of_node = pdev->dev.of_node
1299	};
1300
1301	errdev = platform_device_register_resndata(&pdev->dev,
1302						   "mpc85xx-pci-edac",
1303						   PLATFORM_DEVID_AUTO,
1304						   pdev->resource,
1305						   pdev->num_resources,
1306						   &pd, sizeof(pd));
1307
1308	return PTR_ERR_OR_ZERO(errdev);
1309}
1310
1311static int fsl_pci_probe(struct platform_device *pdev)
1312{
1313	struct device_node *node;
1314	int ret;
1315
1316	node = pdev->dev.of_node;
1317	ret = fsl_add_bridge(pdev, fsl_pci_primary == node);
1318	if (ret)
1319		return ret;
1320
1321	ret = add_err_dev(pdev);
1322	if (ret)
1323		dev_err(&pdev->dev, "couldn't register error device: %d\n",
1324			ret);
1325
1326	return 0;
1327}
1328
1329static struct platform_driver fsl_pci_driver = {
1330	.driver = {
1331		.name = "fsl-pci",
1332		.of_match_table = pci_ids,
1333	},
1334	.probe = fsl_pci_probe,
1335};
1336
1337static int __init fsl_pci_init(void)
1338{
1339#ifdef CONFIG_PM_SLEEP
1340	register_syscore_ops(&pci_syscore_pm_ops);
1341#endif
1342	return platform_driver_register(&fsl_pci_driver);
1343}
1344arch_initcall(fsl_pci_init);
1345#endif
v3.15
   1/*
   2 * MPC83xx/85xx/86xx PCI/PCIE support routing.
   3 *
   4 * Copyright 2007-2012 Freescale Semiconductor, Inc.
   5 * Copyright 2008-2009 MontaVista Software, Inc.
   6 *
   7 * Initial author: Xianghua Xiao <x.xiao@freescale.com>
   8 * Recode: ZHANG WEI <wei.zhang@freescale.com>
   9 * Rewrite the routing for Frescale PCI and PCI Express
  10 * 	Roy Zang <tie-fei.zang@freescale.com>
  11 * MPC83xx PCI-Express support:
  12 * 	Tony Li <tony.li@freescale.com>
  13 * 	Anton Vorontsov <avorontsov@ru.mvista.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#include <linux/kernel.h>
  21#include <linux/pci.h>
  22#include <linux/delay.h>
  23#include <linux/string.h>
 
  24#include <linux/init.h>
  25#include <linux/interrupt.h>
  26#include <linux/bootmem.h>
  27#include <linux/memblock.h>
  28#include <linux/log2.h>
 
  29#include <linux/slab.h>
  30#include <linux/suspend.h>
  31#include <linux/syscore_ops.h>
  32#include <linux/uaccess.h>
  33
  34#include <asm/io.h>
  35#include <asm/prom.h>
  36#include <asm/pci-bridge.h>
  37#include <asm/ppc-pci.h>
  38#include <asm/machdep.h>
 
  39#include <asm/disassemble.h>
  40#include <asm/ppc-opcode.h>
  41#include <sysdev/fsl_soc.h>
  42#include <sysdev/fsl_pci.h>
  43
  44static int fsl_pcie_bus_fixup, is_mpc83xx_pci;
  45
  46static void quirk_fsl_pcie_early(struct pci_dev *dev)
  47{
  48	u8 hdr_type;
  49
  50	/* if we aren't a PCIe don't bother */
  51	if (!pci_is_pcie(dev))
  52		return;
  53
  54	/* if we aren't in host mode don't bother */
  55	pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type);
  56	if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE)
  57		return;
  58
  59	dev->class = PCI_CLASS_BRIDGE_PCI << 8;
  60	fsl_pcie_bus_fixup = 1;
  61	return;
  62}
  63
  64static int fsl_indirect_read_config(struct pci_bus *, unsigned int,
  65				    int, int, u32 *);
  66
  67static int fsl_pcie_check_link(struct pci_controller *hose)
  68{
  69	u32 val = 0;
  70
  71	if (hose->indirect_type & PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK) {
  72		if (hose->ops->read == fsl_indirect_read_config) {
  73			struct pci_bus bus;
  74			bus.number = hose->first_busno;
  75			bus.sysdata = hose;
  76			bus.ops = hose->ops;
  77			indirect_read_config(&bus, 0, PCIE_LTSSM, 4, &val);
  78		} else
  79			early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
  80		if (val < PCIE_LTSSM_L0)
  81			return 1;
  82	} else {
  83		struct ccsr_pci __iomem *pci = hose->private_data;
  84		/* for PCIe IP rev 3.0 or greater use CSR0 for link state */
  85		val = (in_be32(&pci->pex_csr0) & PEX_CSR0_LTSSM_MASK)
  86				>> PEX_CSR0_LTSSM_SHIFT;
  87		if (val != PEX_CSR0_LTSSM_L0)
  88			return 1;
  89	}
  90
  91	return 0;
  92}
  93
  94static int fsl_indirect_read_config(struct pci_bus *bus, unsigned int devfn,
  95				    int offset, int len, u32 *val)
  96{
  97	struct pci_controller *hose = pci_bus_to_host(bus);
  98
  99	if (fsl_pcie_check_link(hose))
 100		hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 101	else
 102		hose->indirect_type &= ~PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 103
 104	return indirect_read_config(bus, devfn, offset, len, val);
 105}
 106
 107#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
 108
 109static struct pci_ops fsl_indirect_pcie_ops =
 110{
 111	.read = fsl_indirect_read_config,
 112	.write = indirect_write_config,
 113};
 114
 115#define MAX_PHYS_ADDR_BITS	40
 116static u64 pci64_dma_offset = 1ull << MAX_PHYS_ADDR_BITS;
 
 
 
 
 
 
 
 
 
 
 
 117
 118static int fsl_pci_dma_set_mask(struct device *dev, u64 dma_mask)
 119{
 120	if (!dev->dma_mask || !dma_supported(dev, dma_mask))
 121		return -EIO;
 122
 123	/*
 124	 * Fixup PCI devices that are able to DMA to above the physical
 125	 * address width of the SoC such that we can address any internal
 126	 * SoC address from across PCI if needed
 127	 */
 128	if ((dev_is_pci(dev)) &&
 129	    dma_mask >= DMA_BIT_MASK(MAX_PHYS_ADDR_BITS)) {
 130		set_dma_ops(dev, &dma_direct_ops);
 131		set_dma_offset(dev, pci64_dma_offset);
 132	}
 133
 134	*dev->dma_mask = dma_mask;
 135	return 0;
 136}
 137
 138static int setup_one_atmu(struct ccsr_pci __iomem *pci,
 139	unsigned int index, const struct resource *res,
 140	resource_size_t offset)
 141{
 142	resource_size_t pci_addr = res->start - offset;
 143	resource_size_t phys_addr = res->start;
 144	resource_size_t size = resource_size(res);
 145	u32 flags = 0x80044000; /* enable & mem R/W */
 146	unsigned int i;
 147
 148	pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n",
 149		(u64)res->start, (u64)size);
 150
 151	if (res->flags & IORESOURCE_PREFETCH)
 152		flags |= 0x10000000; /* enable relaxed ordering */
 153
 154	for (i = 0; size > 0; i++) {
 155		unsigned int bits = min(ilog2(size),
 156					__ffs(pci_addr | phys_addr));
 157
 158		if (index + i >= 5)
 159			return -1;
 160
 161		out_be32(&pci->pow[index + i].potar, pci_addr >> 12);
 162		out_be32(&pci->pow[index + i].potear, (u64)pci_addr >> 44);
 163		out_be32(&pci->pow[index + i].powbar, phys_addr >> 12);
 164		out_be32(&pci->pow[index + i].powar, flags | (bits - 1));
 165
 166		pci_addr += (resource_size_t)1U << bits;
 167		phys_addr += (resource_size_t)1U << bits;
 168		size -= (resource_size_t)1U << bits;
 169	}
 170
 171	return i;
 172}
 173
 
 
 
 
 
 
 
 
 
 
 
 
 
 174/* atmu setup for fsl pci/pcie controller */
 175static void setup_pci_atmu(struct pci_controller *hose)
 176{
 177	struct ccsr_pci __iomem *pci = hose->private_data;
 178	int i, j, n, mem_log, win_idx = 3, start_idx = 1, end_idx = 4;
 179	u64 mem, sz, paddr_hi = 0;
 180	u64 offset = 0, paddr_lo = ULLONG_MAX;
 181	u32 pcicsrbar = 0, pcicsrbar_sz;
 182	u32 piwar = PIWAR_EN | PIWAR_PF | PIWAR_TGI_LOCAL |
 183			PIWAR_READ_SNOOP | PIWAR_WRITE_SNOOP;
 184	const char *name = hose->dn->full_name;
 185	const u64 *reg;
 186	int len;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 187
 188	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 189		if (in_be32(&pci->block_rev1) >= PCIE_IP_REV_2_2) {
 190			win_idx = 2;
 191			start_idx = 0;
 192			end_idx = 3;
 193		}
 194	}
 195
 196	/* Disable all windows (except powar0 since it's ignored) */
 197	for(i = 1; i < 5; i++)
 198		out_be32(&pci->pow[i].powar, 0);
 199	for (i = start_idx; i < end_idx; i++)
 200		out_be32(&pci->piw[i].piwar, 0);
 
 
 
 201
 202	/* Setup outbound MEM window */
 203	for(i = 0, j = 1; i < 3; i++) {
 204		if (!(hose->mem_resources[i].flags & IORESOURCE_MEM))
 205			continue;
 206
 207		paddr_lo = min(paddr_lo, (u64)hose->mem_resources[i].start);
 208		paddr_hi = max(paddr_hi, (u64)hose->mem_resources[i].end);
 209
 210		/* We assume all memory resources have the same offset */
 211		offset = hose->mem_offset[i];
 212		n = setup_one_atmu(pci, j, &hose->mem_resources[i], offset);
 213
 214		if (n < 0 || j >= 5) {
 215			pr_err("Ran out of outbound PCI ATMUs for resource %d!\n", i);
 216			hose->mem_resources[i].flags |= IORESOURCE_DISABLED;
 217		} else
 218			j += n;
 219	}
 220
 221	/* Setup outbound IO window */
 222	if (hose->io_resource.flags & IORESOURCE_IO) {
 223		if (j >= 5) {
 224			pr_err("Ran out of outbound PCI ATMUs for IO resource\n");
 225		} else {
 226			pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, "
 227				 "phy base 0x%016llx.\n",
 228				 (u64)hose->io_resource.start,
 229				 (u64)resource_size(&hose->io_resource),
 230				 (u64)hose->io_base_phys);
 231			out_be32(&pci->pow[j].potar, (hose->io_resource.start >> 12));
 232			out_be32(&pci->pow[j].potear, 0);
 233			out_be32(&pci->pow[j].powbar, (hose->io_base_phys >> 12));
 234			/* Enable, IO R/W */
 235			out_be32(&pci->pow[j].powar, 0x80088000
 236				| (ilog2(hose->io_resource.end
 237				- hose->io_resource.start + 1) - 1));
 238		}
 239	}
 240
 241	/* convert to pci address space */
 242	paddr_hi -= offset;
 243	paddr_lo -= offset;
 244
 245	if (paddr_hi == paddr_lo) {
 246		pr_err("%s: No outbound window space\n", name);
 247		return;
 248	}
 249
 250	if (paddr_lo == 0) {
 251		pr_err("%s: No space for inbound window\n", name);
 252		return;
 253	}
 254
 255	/* setup PCSRBAR/PEXCSRBAR */
 256	early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, 0xffffffff);
 257	early_read_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, &pcicsrbar_sz);
 258	pcicsrbar_sz = ~pcicsrbar_sz + 1;
 259
 260	if (paddr_hi < (0x100000000ull - pcicsrbar_sz) ||
 261		(paddr_lo > 0x100000000ull))
 262		pcicsrbar = 0x100000000ull - pcicsrbar_sz;
 263	else
 264		pcicsrbar = (paddr_lo - pcicsrbar_sz) & -pcicsrbar_sz;
 265	early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, pcicsrbar);
 266
 267	paddr_lo = min(paddr_lo, (u64)pcicsrbar);
 268
 269	pr_info("%s: PCICSRBAR @ 0x%x\n", name, pcicsrbar);
 270
 271	/* Setup inbound mem window */
 272	mem = memblock_end_of_DRAM();
 
 273
 274	/*
 275	 * The msi-address-64 property, if it exists, indicates the physical
 276	 * address of the MSIIR register.  Normally, this register is located
 277	 * inside CCSR, so the ATMU that covers all of CCSR is used. But if
 278	 * this property exists, then we normally need to create a new ATMU
 279	 * for it.  For now, however, we cheat.  The only entity that creates
 280	 * this property is the Freescale hypervisor, and the address is
 281	 * specified in the partition configuration.  Typically, the address
 282	 * is located in the page immediately after the end of DDR.  If so, we
 283	 * can avoid allocating a new ATMU by extending the DDR ATMU by one
 284	 * page.
 285	 */
 286	reg = of_get_property(hose->dn, "msi-address-64", &len);
 287	if (reg && (len == sizeof(u64))) {
 288		u64 address = be64_to_cpup(reg);
 289
 290		if ((address >= mem) && (address < (mem + PAGE_SIZE))) {
 291			pr_info("%s: extending DDR ATMU to cover MSIIR", name);
 292			mem += PAGE_SIZE;
 293		} else {
 294			/* TODO: Create a new ATMU for MSIIR */
 295			pr_warn("%s: msi-address-64 address of %llx is "
 296				"unsupported\n", name, address);
 297		}
 298	}
 299
 300	sz = min(mem, paddr_lo);
 301	mem_log = ilog2(sz);
 302
 303	/* PCIe can overmap inbound & outbound since RX & TX are separated */
 304	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 305		/* Size window to exact size if power-of-two or one size up */
 306		if ((1ull << mem_log) != mem) {
 307			mem_log++;
 308			if ((1ull << mem_log) > mem)
 309				pr_info("%s: Setting PCI inbound window "
 310					"greater than memory size\n", name);
 311		}
 312
 313		piwar |= ((mem_log - 1) & PIWAR_SZ_MASK);
 314
 315		/* Setup inbound memory window */
 316		out_be32(&pci->piw[win_idx].pitar,  0x00000000);
 317		out_be32(&pci->piw[win_idx].piwbar, 0x00000000);
 318		out_be32(&pci->piw[win_idx].piwar,  piwar);
 
 
 
 319		win_idx--;
 320
 321		hose->dma_window_base_cur = 0x00000000;
 322		hose->dma_window_size = (resource_size_t)sz;
 323
 324		/*
 325		 * if we have >4G of memory setup second PCI inbound window to
 326		 * let devices that are 64-bit address capable to work w/o
 327		 * SWIOTLB and access the full range of memory
 328		 */
 329		if (sz != mem) {
 330			mem_log = ilog2(mem);
 331
 332			/* Size window up if we dont fit in exact power-of-2 */
 333			if ((1ull << mem_log) != mem)
 334				mem_log++;
 335
 336			piwar = (piwar & ~PIWAR_SZ_MASK) | (mem_log - 1);
 
 337
 338			/* Setup inbound memory window */
 339			out_be32(&pci->piw[win_idx].pitar,  0x00000000);
 340			out_be32(&pci->piw[win_idx].piwbear,
 341					pci64_dma_offset >> 44);
 342			out_be32(&pci->piw[win_idx].piwbar,
 343					pci64_dma_offset >> 12);
 344			out_be32(&pci->piw[win_idx].piwar,  piwar);
 
 
 345
 346			/*
 347			 * install our own dma_set_mask handler to fixup dma_ops
 348			 * and dma_offset
 349			 */
 350			ppc_md.dma_set_mask = fsl_pci_dma_set_mask;
 351
 352			pr_info("%s: Setup 64-bit PCI DMA window\n", name);
 353		}
 354	} else {
 355		u64 paddr = 0;
 356
 357		/* Setup inbound memory window */
 358		out_be32(&pci->piw[win_idx].pitar,  paddr >> 12);
 359		out_be32(&pci->piw[win_idx].piwbar, paddr >> 12);
 360		out_be32(&pci->piw[win_idx].piwar,  (piwar | (mem_log - 1)));
 
 
 
 
 361		win_idx--;
 362
 363		paddr += 1ull << mem_log;
 364		sz -= 1ull << mem_log;
 365
 366		if (sz) {
 367			mem_log = ilog2(sz);
 368			piwar |= (mem_log - 1);
 369
 370			out_be32(&pci->piw[win_idx].pitar,  paddr >> 12);
 371			out_be32(&pci->piw[win_idx].piwbar, paddr >> 12);
 372			out_be32(&pci->piw[win_idx].piwar,  piwar);
 
 
 
 
 
 373			win_idx--;
 374
 375			paddr += 1ull << mem_log;
 376		}
 377
 378		hose->dma_window_base_cur = 0x00000000;
 379		hose->dma_window_size = (resource_size_t)paddr;
 380	}
 381
 382	if (hose->dma_window_size < mem) {
 383#ifdef CONFIG_SWIOTLB
 384		ppc_swiotlb_enable = 1;
 385#else
 386		pr_err("%s: ERROR: Memory size exceeds PCI ATMU ability to "
 387			"map - enable CONFIG_SWIOTLB to avoid dma errors.\n",
 388			 name);
 389#endif
 390		/* adjusting outbound windows could reclaim space in mem map */
 391		if (paddr_hi < 0xffffffffull)
 392			pr_warning("%s: WARNING: Outbound window cfg leaves "
 393				"gaps in memory map. Adjusting the memory map "
 394				"could reduce unnecessary bounce buffering.\n",
 395				name);
 396
 397		pr_info("%s: DMA window size is 0x%llx\n", name,
 398			(u64)hose->dma_window_size);
 399	}
 400}
 401
 402static void __init setup_pci_cmd(struct pci_controller *hose)
 403{
 404	u16 cmd;
 405	int cap_x;
 406
 407	early_read_config_word(hose, 0, 0, PCI_COMMAND, &cmd);
 408	cmd |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY
 409		| PCI_COMMAND_IO;
 410	early_write_config_word(hose, 0, 0, PCI_COMMAND, cmd);
 411
 412	cap_x = early_find_capability(hose, 0, 0, PCI_CAP_ID_PCIX);
 413	if (cap_x) {
 414		int pci_x_cmd = cap_x + PCI_X_CMD;
 415		cmd = PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ
 416			| PCI_X_CMD_ERO | PCI_X_CMD_DPERR_E;
 417		early_write_config_word(hose, 0, 0, pci_x_cmd, cmd);
 418	} else {
 419		early_write_config_byte(hose, 0, 0, PCI_LATENCY_TIMER, 0x80);
 420	}
 421}
 422
 423void fsl_pcibios_fixup_bus(struct pci_bus *bus)
 424{
 425	struct pci_controller *hose = pci_bus_to_host(bus);
 426	int i, is_pcie = 0, no_link;
 427
 428	/* The root complex bridge comes up with bogus resources,
 429	 * we copy the PHB ones in.
 430	 *
 431	 * With the current generic PCI code, the PHB bus no longer
 432	 * has bus->resource[0..4] set, so things are a bit more
 433	 * tricky.
 434	 */
 435
 436	if (fsl_pcie_bus_fixup)
 437		is_pcie = early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP);
 438	no_link = !!(hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK);
 439
 440	if (bus->parent == hose->bus && (is_pcie || no_link)) {
 441		for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; ++i) {
 442			struct resource *res = bus->resource[i];
 443			struct resource *par;
 444
 445			if (!res)
 446				continue;
 447			if (i == 0)
 448				par = &hose->io_resource;
 449			else if (i < 4)
 450				par = &hose->mem_resources[i-1];
 451			else par = NULL;
 452
 453			res->start = par ? par->start : 0;
 454			res->end   = par ? par->end   : 0;
 455			res->flags = par ? par->flags : 0;
 456		}
 457	}
 458}
 459
 460int fsl_add_bridge(struct platform_device *pdev, int is_primary)
 461{
 462	int len;
 463	struct pci_controller *hose;
 464	struct resource rsrc;
 465	const int *bus_range;
 466	u8 hdr_type, progif;
 467	struct device_node *dev;
 468	struct ccsr_pci __iomem *pci;
 
 
 469
 470	dev = pdev->dev.of_node;
 471
 472	if (!of_device_is_available(dev)) {
 473		pr_warning("%s: disabled\n", dev->full_name);
 474		return -ENODEV;
 475	}
 476
 477	pr_debug("Adding PCI host bridge %s\n", dev->full_name);
 478
 479	/* Fetch host bridge registers address */
 480	if (of_address_to_resource(dev, 0, &rsrc)) {
 481		printk(KERN_WARNING "Can't get pci register base!");
 482		return -ENOMEM;
 483	}
 484
 485	/* Get bus range if any */
 486	bus_range = of_get_property(dev, "bus-range", &len);
 487	if (bus_range == NULL || len < 2 * sizeof(int))
 488		printk(KERN_WARNING "Can't get bus-range for %s, assume"
 489			" bus 0\n", dev->full_name);
 490
 491	pci_add_flags(PCI_REASSIGN_ALL_BUS);
 492	hose = pcibios_alloc_controller(dev);
 493	if (!hose)
 494		return -ENOMEM;
 495
 496	/* set platform device as the parent */
 497	hose->parent = &pdev->dev;
 498	hose->first_busno = bus_range ? bus_range[0] : 0x0;
 499	hose->last_busno = bus_range ? bus_range[1] : 0xff;
 500
 501	pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n",
 502		 (u64)rsrc.start, (u64)resource_size(&rsrc));
 503
 504	pci = hose->private_data = ioremap(rsrc.start, resource_size(&rsrc));
 505	if (!hose->private_data)
 506		goto no_bridge;
 507
 508	setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
 509			   PPC_INDIRECT_TYPE_BIG_ENDIAN);
 510
 511	if (in_be32(&pci->block_rev1) < PCIE_IP_REV_3_0)
 512		hose->indirect_type |= PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK;
 513
 514	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 515		/* use fsl_indirect_read_config for PCIe */
 516		hose->ops = &fsl_indirect_pcie_ops;
 517		/* For PCIE read HEADER_TYPE to identify controler mode */
 518		early_read_config_byte(hose, 0, 0, PCI_HEADER_TYPE, &hdr_type);
 519		if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE)
 520			goto no_bridge;
 521
 522	} else {
 523		/* For PCI read PROG to identify controller mode */
 524		early_read_config_byte(hose, 0, 0, PCI_CLASS_PROG, &progif);
 525		if ((progif & 1) == 1)
 
 526			goto no_bridge;
 527	}
 528
 529	setup_pci_cmd(hose);
 530
 531	/* check PCI express link status */
 532	if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
 533		hose->indirect_type |= PPC_INDIRECT_TYPE_EXT_REG |
 534			PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS;
 535		if (fsl_pcie_check_link(hose))
 536			hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 537	}
 538
 539	printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
 540		"Firmware bus number: %d->%d\n",
 541		(unsigned long long)rsrc.start, hose->first_busno,
 542		hose->last_busno);
 543
 544	pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
 545		hose, hose->cfg_addr, hose->cfg_data);
 546
 547	/* Interpret the "ranges" property */
 548	/* This also maps the I/O region and sets isa_io/mem_base */
 549	pci_process_bridge_OF_ranges(hose, dev, is_primary);
 550
 551	/* Setup PEX window registers */
 552	setup_pci_atmu(hose);
 553
 
 
 
 554	return 0;
 555
 556no_bridge:
 557	iounmap(hose->private_data);
 558	/* unmap cfg_data & cfg_addr separately if not on same page */
 559	if (((unsigned long)hose->cfg_data & PAGE_MASK) !=
 560	    ((unsigned long)hose->cfg_addr & PAGE_MASK))
 561		iounmap(hose->cfg_data);
 562	iounmap(hose->cfg_addr);
 563	pcibios_free_controller(hose);
 564	return -ENODEV;
 565}
 566#endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
 567
 568DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID,
 569			quirk_fsl_pcie_early);
 570
 571#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
 572struct mpc83xx_pcie_priv {
 573	void __iomem *cfg_type0;
 574	void __iomem *cfg_type1;
 575	u32 dev_base;
 576};
 577
 578struct pex_inbound_window {
 579	u32 ar;
 580	u32 tar;
 581	u32 barl;
 582	u32 barh;
 583};
 584
 585/*
 586 * With the convention of u-boot, the PCIE outbound window 0 serves
 587 * as configuration transactions outbound.
 588 */
 589#define PEX_OUTWIN0_BAR		0xCA4
 590#define PEX_OUTWIN0_TAL		0xCA8
 591#define PEX_OUTWIN0_TAH		0xCAC
 592#define PEX_RC_INWIN_BASE	0xE60
 593#define PEX_RCIWARn_EN		0x1
 594
 595static int mpc83xx_pcie_exclude_device(struct pci_bus *bus, unsigned int devfn)
 596{
 597	struct pci_controller *hose = pci_bus_to_host(bus);
 598
 599	if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK)
 600		return PCIBIOS_DEVICE_NOT_FOUND;
 601	/*
 602	 * Workaround for the HW bug: for Type 0 configure transactions the
 603	 * PCI-E controller does not check the device number bits and just
 604	 * assumes that the device number bits are 0.
 605	 */
 606	if (bus->number == hose->first_busno ||
 607			bus->primary == hose->first_busno) {
 608		if (devfn & 0xf8)
 609			return PCIBIOS_DEVICE_NOT_FOUND;
 610	}
 611
 612	if (ppc_md.pci_exclude_device) {
 613		if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
 614			return PCIBIOS_DEVICE_NOT_FOUND;
 615	}
 616
 617	return PCIBIOS_SUCCESSFUL;
 618}
 619
 620static void __iomem *mpc83xx_pcie_remap_cfg(struct pci_bus *bus,
 621					    unsigned int devfn, int offset)
 622{
 623	struct pci_controller *hose = pci_bus_to_host(bus);
 624	struct mpc83xx_pcie_priv *pcie = hose->dn->data;
 625	u32 dev_base = bus->number << 24 | devfn << 16;
 626	int ret;
 627
 628	ret = mpc83xx_pcie_exclude_device(bus, devfn);
 629	if (ret)
 630		return NULL;
 631
 632	offset &= 0xfff;
 633
 634	/* Type 0 */
 635	if (bus->number == hose->first_busno)
 636		return pcie->cfg_type0 + offset;
 637
 638	if (pcie->dev_base == dev_base)
 639		goto mapped;
 640
 641	out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, dev_base);
 642
 643	pcie->dev_base = dev_base;
 644mapped:
 645	return pcie->cfg_type1 + offset;
 646}
 647
 648static int mpc83xx_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
 649				    int offset, int len, u32 *val)
 650{
 651	void __iomem *cfg_addr;
 652
 653	cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
 654	if (!cfg_addr)
 655		return PCIBIOS_DEVICE_NOT_FOUND;
 656
 657	switch (len) {
 658	case 1:
 659		*val = in_8(cfg_addr);
 660		break;
 661	case 2:
 662		*val = in_le16(cfg_addr);
 663		break;
 664	default:
 665		*val = in_le32(cfg_addr);
 666		break;
 667	}
 668
 669	return PCIBIOS_SUCCESSFUL;
 670}
 671
 672static int mpc83xx_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
 673				     int offset, int len, u32 val)
 674{
 675	struct pci_controller *hose = pci_bus_to_host(bus);
 676	void __iomem *cfg_addr;
 677
 678	cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
 679	if (!cfg_addr)
 680		return PCIBIOS_DEVICE_NOT_FOUND;
 681
 682	/* PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS */
 683	if (offset == PCI_PRIMARY_BUS && bus->number == hose->first_busno)
 684		val &= 0xffffff00;
 685
 686	switch (len) {
 687	case 1:
 688		out_8(cfg_addr, val);
 689		break;
 690	case 2:
 691		out_le16(cfg_addr, val);
 692		break;
 693	default:
 694		out_le32(cfg_addr, val);
 695		break;
 696	}
 697
 698	return PCIBIOS_SUCCESSFUL;
 699}
 700
 701static struct pci_ops mpc83xx_pcie_ops = {
 702	.read = mpc83xx_pcie_read_config,
 
 703	.write = mpc83xx_pcie_write_config,
 704};
 705
 706static int __init mpc83xx_pcie_setup(struct pci_controller *hose,
 707				     struct resource *reg)
 708{
 709	struct mpc83xx_pcie_priv *pcie;
 710	u32 cfg_bar;
 711	int ret = -ENOMEM;
 712
 713	pcie = zalloc_maybe_bootmem(sizeof(*pcie), GFP_KERNEL);
 714	if (!pcie)
 715		return ret;
 716
 717	pcie->cfg_type0 = ioremap(reg->start, resource_size(reg));
 718	if (!pcie->cfg_type0)
 719		goto err0;
 720
 721	cfg_bar = in_le32(pcie->cfg_type0 + PEX_OUTWIN0_BAR);
 722	if (!cfg_bar) {
 723		/* PCI-E isn't configured. */
 724		ret = -ENODEV;
 725		goto err1;
 726	}
 727
 728	pcie->cfg_type1 = ioremap(cfg_bar, 0x1000);
 729	if (!pcie->cfg_type1)
 730		goto err1;
 731
 732	WARN_ON(hose->dn->data);
 733	hose->dn->data = pcie;
 734	hose->ops = &mpc83xx_pcie_ops;
 735	hose->indirect_type |= PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK;
 736
 737	out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAH, 0);
 738	out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, 0);
 739
 740	if (fsl_pcie_check_link(hose))
 741		hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
 742
 743	return 0;
 744err1:
 745	iounmap(pcie->cfg_type0);
 746err0:
 747	kfree(pcie);
 748	return ret;
 749
 750}
 751
 752int __init mpc83xx_add_bridge(struct device_node *dev)
 753{
 754	int ret;
 755	int len;
 756	struct pci_controller *hose;
 757	struct resource rsrc_reg;
 758	struct resource rsrc_cfg;
 759	const int *bus_range;
 760	int primary;
 761
 762	is_mpc83xx_pci = 1;
 763
 764	if (!of_device_is_available(dev)) {
 765		pr_warning("%s: disabled by the firmware.\n",
 766			   dev->full_name);
 767		return -ENODEV;
 768	}
 769	pr_debug("Adding PCI host bridge %s\n", dev->full_name);
 770
 771	/* Fetch host bridge registers address */
 772	if (of_address_to_resource(dev, 0, &rsrc_reg)) {
 773		printk(KERN_WARNING "Can't get pci register base!\n");
 774		return -ENOMEM;
 775	}
 776
 777	memset(&rsrc_cfg, 0, sizeof(rsrc_cfg));
 778
 779	if (of_address_to_resource(dev, 1, &rsrc_cfg)) {
 780		printk(KERN_WARNING
 781			"No pci config register base in dev tree, "
 782			"using default\n");
 783		/*
 784		 * MPC83xx supports up to two host controllers
 785		 * 	one at 0x8500 has config space registers at 0x8300
 786		 * 	one at 0x8600 has config space registers at 0x8380
 787		 */
 788		if ((rsrc_reg.start & 0xfffff) == 0x8500)
 789			rsrc_cfg.start = (rsrc_reg.start & 0xfff00000) + 0x8300;
 790		else if ((rsrc_reg.start & 0xfffff) == 0x8600)
 791			rsrc_cfg.start = (rsrc_reg.start & 0xfff00000) + 0x8380;
 792	}
 793	/*
 794	 * Controller at offset 0x8500 is primary
 795	 */
 796	if ((rsrc_reg.start & 0xfffff) == 0x8500)
 797		primary = 1;
 798	else
 799		primary = 0;
 800
 801	/* Get bus range if any */
 802	bus_range = of_get_property(dev, "bus-range", &len);
 803	if (bus_range == NULL || len < 2 * sizeof(int)) {
 804		printk(KERN_WARNING "Can't get bus-range for %s, assume"
 805		       " bus 0\n", dev->full_name);
 806	}
 807
 808	pci_add_flags(PCI_REASSIGN_ALL_BUS);
 809	hose = pcibios_alloc_controller(dev);
 810	if (!hose)
 811		return -ENOMEM;
 812
 813	hose->first_busno = bus_range ? bus_range[0] : 0;
 814	hose->last_busno = bus_range ? bus_range[1] : 0xff;
 815
 816	if (of_device_is_compatible(dev, "fsl,mpc8314-pcie")) {
 817		ret = mpc83xx_pcie_setup(hose, &rsrc_reg);
 818		if (ret)
 819			goto err0;
 820	} else {
 821		setup_indirect_pci(hose, rsrc_cfg.start,
 822				   rsrc_cfg.start + 4, 0);
 823	}
 824
 825	printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
 826	       "Firmware bus number: %d->%d\n",
 827	       (unsigned long long)rsrc_reg.start, hose->first_busno,
 828	       hose->last_busno);
 829
 830	pr_debug(" ->Hose at 0x%p, cfg_addr=0x%p,cfg_data=0x%p\n",
 831	    hose, hose->cfg_addr, hose->cfg_data);
 832
 833	/* Interpret the "ranges" property */
 834	/* This also maps the I/O region and sets isa_io/mem_base */
 835	pci_process_bridge_OF_ranges(hose, dev, primary);
 836
 837	return 0;
 838err0:
 839	pcibios_free_controller(hose);
 840	return ret;
 841}
 842#endif /* CONFIG_PPC_83xx */
 843
 844u64 fsl_pci_immrbar_base(struct pci_controller *hose)
 845{
 846#ifdef CONFIG_PPC_83xx
 847	if (is_mpc83xx_pci) {
 848		struct mpc83xx_pcie_priv *pcie = hose->dn->data;
 849		struct pex_inbound_window *in;
 850		int i;
 851
 852		/* Walk the Root Complex Inbound windows to match IMMR base */
 853		in = pcie->cfg_type0 + PEX_RC_INWIN_BASE;
 854		for (i = 0; i < 4; i++) {
 855			/* not enabled, skip */
 856			if (!in_le32(&in[i].ar) & PEX_RCIWARn_EN)
 857				 continue;
 858
 859			if (get_immrbase() == in_le32(&in[i].tar))
 860				return (u64)in_le32(&in[i].barh) << 32 |
 861					    in_le32(&in[i].barl);
 862		}
 863
 864		printk(KERN_WARNING "could not find PCI BAR matching IMMR\n");
 865	}
 866#endif
 867
 868#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
 869	if (!is_mpc83xx_pci) {
 870		u32 base;
 871
 872		pci_bus_read_config_dword(hose->bus,
 873			PCI_DEVFN(0, 0), PCI_BASE_ADDRESS_0, &base);
 874
 875		/*
 876		 * For PEXCSRBAR, bit 3-0 indicate prefetchable and
 877		 * address type. So when getting base address, these
 878		 * bits should be masked
 879		 */
 880		base &= PCI_BASE_ADDRESS_MEM_MASK;
 881
 882		return base;
 883	}
 884#endif
 885
 886	return 0;
 887}
 888
 889#ifdef CONFIG_E500
 890static int mcheck_handle_load(struct pt_regs *regs, u32 inst)
 891{
 892	unsigned int rd, ra, rb, d;
 893
 894	rd = get_rt(inst);
 895	ra = get_ra(inst);
 896	rb = get_rb(inst);
 897	d = get_d(inst);
 898
 899	switch (get_op(inst)) {
 900	case 31:
 901		switch (get_xop(inst)) {
 902		case OP_31_XOP_LWZX:
 903		case OP_31_XOP_LWBRX:
 904			regs->gpr[rd] = 0xffffffff;
 905			break;
 906
 907		case OP_31_XOP_LWZUX:
 908			regs->gpr[rd] = 0xffffffff;
 909			regs->gpr[ra] += regs->gpr[rb];
 910			break;
 911
 912		case OP_31_XOP_LBZX:
 913			regs->gpr[rd] = 0xff;
 914			break;
 915
 916		case OP_31_XOP_LBZUX:
 917			regs->gpr[rd] = 0xff;
 918			regs->gpr[ra] += regs->gpr[rb];
 919			break;
 920
 921		case OP_31_XOP_LHZX:
 922		case OP_31_XOP_LHBRX:
 923			regs->gpr[rd] = 0xffff;
 924			break;
 925
 926		case OP_31_XOP_LHZUX:
 927			regs->gpr[rd] = 0xffff;
 928			regs->gpr[ra] += regs->gpr[rb];
 929			break;
 930
 931		case OP_31_XOP_LHAX:
 932			regs->gpr[rd] = ~0UL;
 933			break;
 934
 935		case OP_31_XOP_LHAUX:
 936			regs->gpr[rd] = ~0UL;
 937			regs->gpr[ra] += regs->gpr[rb];
 938			break;
 939
 940		default:
 941			return 0;
 942		}
 943		break;
 944
 945	case OP_LWZ:
 946		regs->gpr[rd] = 0xffffffff;
 947		break;
 948
 949	case OP_LWZU:
 950		regs->gpr[rd] = 0xffffffff;
 951		regs->gpr[ra] += (s16)d;
 952		break;
 953
 954	case OP_LBZ:
 955		regs->gpr[rd] = 0xff;
 956		break;
 957
 958	case OP_LBZU:
 959		regs->gpr[rd] = 0xff;
 960		regs->gpr[ra] += (s16)d;
 961		break;
 962
 963	case OP_LHZ:
 964		regs->gpr[rd] = 0xffff;
 965		break;
 966
 967	case OP_LHZU:
 968		regs->gpr[rd] = 0xffff;
 969		regs->gpr[ra] += (s16)d;
 970		break;
 971
 972	case OP_LHA:
 973		regs->gpr[rd] = ~0UL;
 974		break;
 975
 976	case OP_LHAU:
 977		regs->gpr[rd] = ~0UL;
 978		regs->gpr[ra] += (s16)d;
 979		break;
 980
 981	default:
 982		return 0;
 983	}
 984
 985	return 1;
 986}
 987
 988static int is_in_pci_mem_space(phys_addr_t addr)
 989{
 990	struct pci_controller *hose;
 991	struct resource *res;
 992	int i;
 993
 994	list_for_each_entry(hose, &hose_list, list_node) {
 995		if (!(hose->indirect_type & PPC_INDIRECT_TYPE_EXT_REG))
 996			continue;
 997
 998		for (i = 0; i < 3; i++) {
 999			res = &hose->mem_resources[i];
1000			if ((res->flags & IORESOURCE_MEM) &&
1001				addr >= res->start && addr <= res->end)
1002				return 1;
1003		}
1004	}
1005	return 0;
1006}
1007
1008int fsl_pci_mcheck_exception(struct pt_regs *regs)
1009{
1010	u32 inst;
1011	int ret;
1012	phys_addr_t addr = 0;
1013
1014	/* Let KVM/QEMU deal with the exception */
1015	if (regs->msr & MSR_GS)
1016		return 0;
1017
1018#ifdef CONFIG_PHYS_64BIT
1019	addr = mfspr(SPRN_MCARU);
1020	addr <<= 32;
1021#endif
1022	addr += mfspr(SPRN_MCAR);
1023
1024	if (is_in_pci_mem_space(addr)) {
1025		if (user_mode(regs)) {
1026			pagefault_disable();
1027			ret = get_user(regs->nip, &inst);
1028			pagefault_enable();
1029		} else {
1030			ret = probe_kernel_address(regs->nip, inst);
1031		}
1032
1033		if (mcheck_handle_load(regs, inst)) {
1034			regs->nip += 4;
1035			return 1;
1036		}
1037	}
1038
1039	return 0;
1040}
1041#endif
1042
1043#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
1044static const struct of_device_id pci_ids[] = {
1045	{ .compatible = "fsl,mpc8540-pci", },
1046	{ .compatible = "fsl,mpc8548-pcie", },
1047	{ .compatible = "fsl,mpc8610-pci", },
1048	{ .compatible = "fsl,mpc8641-pcie", },
1049	{ .compatible = "fsl,qoriq-pcie", },
1050	{ .compatible = "fsl,qoriq-pcie-v2.1", },
1051	{ .compatible = "fsl,qoriq-pcie-v2.2", },
1052	{ .compatible = "fsl,qoriq-pcie-v2.3", },
1053	{ .compatible = "fsl,qoriq-pcie-v2.4", },
1054	{ .compatible = "fsl,qoriq-pcie-v3.0", },
1055
1056	/*
1057	 * The following entries are for compatibility with older device
1058	 * trees.
1059	 */
1060	{ .compatible = "fsl,p1022-pcie", },
1061	{ .compatible = "fsl,p4080-pcie", },
1062
1063	{},
1064};
1065
1066struct device_node *fsl_pci_primary;
1067
1068void fsl_pci_assign_primary(void)
1069{
1070	struct device_node *np;
1071
1072	/* Callers can specify the primary bus using other means. */
1073	if (fsl_pci_primary)
1074		return;
1075
1076	/* If a PCI host bridge contains an ISA node, it's primary. */
1077	np = of_find_node_by_type(NULL, "isa");
1078	while ((fsl_pci_primary = of_get_parent(np))) {
1079		of_node_put(np);
1080		np = fsl_pci_primary;
1081
1082		if (of_match_node(pci_ids, np) && of_device_is_available(np))
1083			return;
1084	}
1085
1086	/*
1087	 * If there's no PCI host bridge with ISA, arbitrarily
1088	 * designate one as primary.  This can go away once
1089	 * various bugs with primary-less systems are fixed.
1090	 */
1091	for_each_matching_node(np, pci_ids) {
1092		if (of_device_is_available(np)) {
1093			fsl_pci_primary = np;
1094			of_node_put(np);
1095			return;
1096		}
1097	}
1098}
1099
1100#ifdef CONFIG_PM_SLEEP
1101static irqreturn_t fsl_pci_pme_handle(int irq, void *dev_id)
1102{
1103	struct pci_controller *hose = dev_id;
1104	struct ccsr_pci __iomem *pci = hose->private_data;
1105	u32 dr;
1106
1107	dr = in_be32(&pci->pex_pme_mes_dr);
1108	if (!dr)
1109		return IRQ_NONE;
1110
1111	out_be32(&pci->pex_pme_mes_dr, dr);
1112
1113	return IRQ_HANDLED;
1114}
1115
1116static int fsl_pci_pme_probe(struct pci_controller *hose)
1117{
1118	struct ccsr_pci __iomem *pci;
1119	struct pci_dev *dev;
1120	int pme_irq;
1121	int res;
1122	u16 pms;
1123
1124	/* Get hose's pci_dev */
1125	dev = list_first_entry(&hose->bus->devices, typeof(*dev), bus_list);
1126
1127	/* PME Disable */
1128	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pms);
1129	pms &= ~PCI_PM_CTRL_PME_ENABLE;
1130	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pms);
1131
1132	pme_irq = irq_of_parse_and_map(hose->dn, 0);
1133	if (!pme_irq) {
1134		dev_err(&dev->dev, "Failed to map PME interrupt.\n");
1135
1136		return -ENXIO;
1137	}
1138
1139	res = devm_request_irq(hose->parent, pme_irq,
1140			fsl_pci_pme_handle,
1141			IRQF_SHARED,
1142			"[PCI] PME", hose);
1143	if (res < 0) {
1144		dev_err(&dev->dev, "Unable to requiest irq %d for PME\n", pme_irq);
1145		irq_dispose_mapping(pme_irq);
1146
1147		return -ENODEV;
1148	}
1149
1150	pci = hose->private_data;
1151
1152	/* Enable PTOD, ENL23D & EXL23D */
1153	out_be32(&pci->pex_pme_mes_disr, 0);
1154	setbits32(&pci->pex_pme_mes_disr,
1155		  PME_DISR_EN_PTOD | PME_DISR_EN_ENL23D | PME_DISR_EN_EXL23D);
1156
1157	out_be32(&pci->pex_pme_mes_ier, 0);
1158	setbits32(&pci->pex_pme_mes_ier,
1159		  PME_DISR_EN_PTOD | PME_DISR_EN_ENL23D | PME_DISR_EN_EXL23D);
1160
1161	/* PME Enable */
1162	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pms);
1163	pms |= PCI_PM_CTRL_PME_ENABLE;
1164	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pms);
1165
1166	return 0;
1167}
1168
1169static void send_pme_turnoff_message(struct pci_controller *hose)
1170{
1171	struct ccsr_pci __iomem *pci = hose->private_data;
1172	u32 dr;
1173	int i;
1174
1175	/* Send PME_Turn_Off Message Request */
1176	setbits32(&pci->pex_pmcr, PEX_PMCR_PTOMR);
1177
1178	/* Wait trun off done */
1179	for (i = 0; i < 150; i++) {
1180		dr = in_be32(&pci->pex_pme_mes_dr);
1181		if (dr) {
1182			out_be32(&pci->pex_pme_mes_dr, dr);
1183			break;
1184		}
1185
1186		udelay(1000);
1187	}
1188}
1189
1190static void fsl_pci_syscore_do_suspend(struct pci_controller *hose)
1191{
1192	send_pme_turnoff_message(hose);
1193}
1194
1195static int fsl_pci_syscore_suspend(void)
1196{
1197	struct pci_controller *hose, *tmp;
1198
1199	list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
1200		fsl_pci_syscore_do_suspend(hose);
1201
1202	return 0;
1203}
1204
1205static void fsl_pci_syscore_do_resume(struct pci_controller *hose)
1206{
1207	struct ccsr_pci __iomem *pci = hose->private_data;
1208	u32 dr;
1209	int i;
1210
1211	/* Send Exit L2 State Message */
1212	setbits32(&pci->pex_pmcr, PEX_PMCR_EXL2S);
1213
1214	/* Wait exit done */
1215	for (i = 0; i < 150; i++) {
1216		dr = in_be32(&pci->pex_pme_mes_dr);
1217		if (dr) {
1218			out_be32(&pci->pex_pme_mes_dr, dr);
1219			break;
1220		}
1221
1222		udelay(1000);
1223	}
1224
1225	setup_pci_atmu(hose);
1226}
1227
1228static void fsl_pci_syscore_resume(void)
1229{
1230	struct pci_controller *hose, *tmp;
1231
1232	list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
1233		fsl_pci_syscore_do_resume(hose);
1234}
1235
1236static struct syscore_ops pci_syscore_pm_ops = {
1237	.suspend = fsl_pci_syscore_suspend,
1238	.resume = fsl_pci_syscore_resume,
1239};
1240#endif
1241
1242void fsl_pcibios_fixup_phb(struct pci_controller *phb)
1243{
1244#ifdef CONFIG_PM_SLEEP
1245	fsl_pci_pme_probe(phb);
1246#endif
1247}
1248
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1249static int fsl_pci_probe(struct platform_device *pdev)
1250{
1251	struct device_node *node;
1252	int ret;
1253
1254	node = pdev->dev.of_node;
1255	ret = fsl_add_bridge(pdev, fsl_pci_primary == node);
 
 
1256
1257	mpc85xx_pci_err_probe(pdev);
 
 
 
1258
1259	return 0;
1260}
1261
1262static struct platform_driver fsl_pci_driver = {
1263	.driver = {
1264		.name = "fsl-pci",
1265		.of_match_table = pci_ids,
1266	},
1267	.probe = fsl_pci_probe,
1268};
1269
1270static int __init fsl_pci_init(void)
1271{
1272#ifdef CONFIG_PM_SLEEP
1273	register_syscore_ops(&pci_syscore_pm_ops);
1274#endif
1275	return platform_driver_register(&fsl_pci_driver);
1276}
1277arch_initcall(fsl_pci_init);
1278#endif