powerpc/fsl-pci: Unify pci/pcie initialization code

Started by Jia Hongtao on Jul 24, 2012 · 36 messages from 4 authors · Last reply Aug 10, 2012

Subsystems (2)

Maintainers (2)

STALE5206d

open the first message on its own page

  1. [PATCH 2/6] powerpc/fsl-pci: Check swiotlb enable at board setup_arch stage
    Related patches
  2. [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node
    Related patches
  3. [PATCH 4/6] powerpc/mpc85xx_ds: convert to unified PCI init
    Related patches
  4. [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support
    Related patches
  5. [PATCH 6/6] Edac/85xx: Register mpc85xx_pci_err_driver by fsl_pci_driver
    Related patches
Message details and related content
We unified the Freescale pci/pcie initialization by changing the fsl_pci
to a platform driver.

In previous version pci/pcie initialization is in platform code which
Initialize pci bridge base on EP/RC or host/agent settings.

Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/sysdev/fsl_pci.c |   60 +++++++++++++++++++++++++++++++++++++++++
 arch/powerpc/sysdev/fsl_pci.h |    1 +
 2 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index edbf794..feed364 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -807,3 +807,63 @@ u64 fsl_pci_immrbar_base(struct pci_controller *hose)
 
 	return 0;
 }
+
+#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
+static const struct of_device_id pci_ids[] = {
+	{ .compatible = "fsl,mpc8540-pci", },
+	{ .compatible = "fsl,mpc8548-pcie", },
+	{ .compatible = "fsl,mpc8641-pcie", },
+	{ .compatible = "fsl,p1022-pcie", },
+	{ .compatible = "fsl,p1010-pcie", },
+	{ .compatible = "fsl,p1023-pcie", },
+	{ .compatible = "fsl,p4080-pcie", },
+	{ .compatible = "fsl,qoriq-pcie-v2.3", },
+	{ .compatible = "fsl,qoriq-pcie-v2.2", },
+	{},
+};
+
+int primary_phb_addr;
+static int __devinit fsl_pci_probe(struct platform_device *pdev)
+{
+	struct pci_controller *hose;
+	bool is_primary;
+
+	if (of_match_node(pci_ids, pdev->dev.of_node)) {
+		struct resource rsrc;
+		of_address_to_resource(pdev->dev.of_node, 0, &rsrc);
+		is_primary = ((rsrc.start & 0xfffff) == primary_phb_addr);
+		fsl_add_bridge(pdev->dev.of_node, is_primary);
+
+#ifdef CONFIG_SWIOTLB
+		hose = pci_find_hose_for_OF_device(pdev->dev.of_node);
+		/*
+		 * if we couldn't map all of DRAM via the dma windows
+		 * we need SWIOTLB to handle buffers located outside of
+		 * dma capable memory region
+		 */
+		if (memblock_end_of_DRAM() > hose->dma_window_base_cur
+				+ hose->dma_window_size) {
+			ppc_swiotlb_enable = 1;
+			set_pci_dma_ops(&swiotlb_dma_ops);
+			ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
+		}
+#endif
+	}
+
+	return 0;
+}
+
+static struct platform_driver fsl_pci_driver = {
+	.driver = {
+		.name = "fsl-pci",
+		.of_match_table = pci_ids,
+	},
+	.probe = fsl_pci_probe,
+};
+
+static int __init fsl_pci_init(void)
+{
+	return platform_driver_register(&fsl_pci_driver);
+}
+arch_initcall(fsl_pci_init);
+#endif
diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
index a39ed5c..df9fc44 100644
--- a/arch/powerpc/sysdev/fsl_pci.h
+++ b/arch/powerpc/sysdev/fsl_pci.h
@@ -88,6 +88,7 @@ struct ccsr_pci {
 	__be32	pex_err_cap_r3;		/* 0x.e34 - PCIE error capture register 0 */
 };
 
+extern int primary_phb_addr;
 extern int fsl_add_bridge(struct device_node *dev, int is_primary);
 extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
 extern int mpc83xx_add_bridge(struct device_node *dev);
-- 
1.7.5.1

[PATCH 2/6] powerpc/fsl-pci: Check swiotlb enable at board setup_arch stage

Message details and related content
PCI initialization is called later than swiotlb_init() due to PCI controller is
a platform driver now. So we provide a function which called at board setup_arch
stage to address swiotlb enable by parsing pci ranges.

Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/sysdev/fsl_pci.c |  125 ++++++++++++++++++++++++++++++++++++-----
 arch/powerpc/sysdev/fsl_pci.h |    6 ++
 2 files changed, 116 insertions(+), 15 deletions(-)
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index feed364..99a3e78 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -822,6 +822,116 @@ static const struct of_device_id pci_ids[] = {
 	{},
 };
 
+#ifdef CONFIG_SWIOTLB
+void pci_check_swiotlb(void)
+{
+	const u32 *ranges;
+	int rlen;
+	int pna;
+	int np;
+	struct device_node *node;
+	int memno;
+	u32 pci_space;
+	unsigned long long pci_addr, cpu_addr, pci_next, cpu_next, size;
+	unsigned long long pci_addr_lo = ULLONG_MAX;
+	unsigned long long pci_addr_hi = 0x0;
+	dma_addr_t pci_dma_sz;
+
+	for_each_node_by_type(node, "pci") {
+		if (of_match_node(pci_ids, node)) {
+			memno = 0;
+			pna = of_n_addr_cells(node);
+			np = pna + 5;
+			/* Get ranges property */
+			ranges = of_get_property(node, "ranges", &rlen);
+			if (ranges == NULL)
+				return;
+
+			/* Parse outbound MEM window range */
+			while ((rlen -= np * 4) >= 0) {
+				/* Read next ranges element */
+				pci_space = ranges[0];
+				if (!((pci_space >> 24) & 0x2)) {
+					ranges += np;
+					break;
+				}
+				pci_addr = of_read_number(ranges + 1, 2);
+				cpu_addr = of_translate_address(
+						node, ranges + 3);
+				size = of_read_number(ranges + pna + 3, 2);
+				ranges += np;
+
+				/*
+				 * If we failed translation or got a zero-sized
+				 * region (some FW try to feed us with non
+				 * sensical zero sized regions such as power3
+				 * which look like some kind of attempt at
+				 * exposing the VGA memory hole)
+				 */
+				if (cpu_addr == OF_BAD_ADDR || size == 0)
+					continue;
+
+				/*
+				 * Now consume following elements while they
+				 * are contiguous
+				 */
+				for (; rlen >= np * sizeof(u32);
+						ranges += np, rlen -= np * 4) {
+					if (ranges[0] != pci_space)
+						break;
+					pci_next = of_read_number(ranges + 1,
+							2);
+					cpu_next = of_translate_address(node,
+							ranges + 3);
+					if (pci_next != pci_addr + size ||
+						cpu_next != cpu_addr + size)
+						break;
+					size += of_read_number(
+							ranges + pna + 3, 2);
+				}
+
+				/* We support only 3 memory ranges */
+				if (memno >= 3) {
+					printk(KERN_INFO
+							" \\--> Skipped (too many) !\n");
+					continue;
+				}
+
+				pci_addr_lo = min(pci_addr, pci_addr_lo);
+				pci_addr_hi = max(pci_addr + size, pci_addr_hi);
+				memno++;
+			}
+		}
+	}
+
+	/* Get PEXCSRBAR size (equal to CCSR size) */
+	node = of_find_node_by_type(NULL, "soc");
+	ranges = of_get_property(node, "ranges", &rlen);
+	if (ranges == NULL)
+		return;
+
+	size = of_read_number(ranges + 3, 1);
+	of_node_put(node);
+
+	if (pci_addr_hi < (0x100000000ull - size))
+		pci_dma_sz = pci_addr_lo;
+	else
+		pci_dma_sz = pci_addr_lo - size;
+
+	/*
+	 * if we couldn't map all of DRAM via the dma windows
+	 * we need SWIOTLB to handle buffers located outside of
+	 * dma capable memory region
+	 */
+	if (memblock_end_of_DRAM() > pci_dma_sz) {
+		ppc_swiotlb_enable = 1;
+		set_pci_dma_ops(&swiotlb_dma_ops);
+		ppc_md.pci_dma_dev_setup =
+			pci_dma_dev_setup_swiotlb;
+	}
+}
+#endif
+
 int primary_phb_addr;
 static int __devinit fsl_pci_probe(struct platform_device *pdev)
 {
@@ -833,21 +943,6 @@ static int __devinit fsl_pci_probe(struct platform_device *pdev)
 		of_address_to_resource(pdev->dev.of_node, 0, &rsrc);
 		is_primary = ((rsrc.start & 0xfffff) == primary_phb_addr);
 		fsl_add_bridge(pdev->dev.of_node, is_primary);
-
-#ifdef CONFIG_SWIOTLB
-		hose = pci_find_hose_for_OF_device(pdev->dev.of_node);
-		/*
-		 * if we couldn't map all of DRAM via the dma windows
-		 * we need SWIOTLB to handle buffers located outside of
-		 * dma capable memory region
-		 */
-		if (memblock_end_of_DRAM() > hose->dma_window_base_cur
-				+ hose->dma_window_size) {
-			ppc_swiotlb_enable = 1;
-			set_pci_dma_ops(&swiotlb_dma_ops);
-			ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
-		}
-#endif
 	}
 
 	return 0;
diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
index df9fc44..c2c1de5 100644
--- a/arch/powerpc/sysdev/fsl_pci.h
+++ b/arch/powerpc/sysdev/fsl_pci.h
@@ -94,5 +94,11 @@ extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
 extern int mpc83xx_add_bridge(struct device_node *dev);
 u64 fsl_pci_immrbar_base(struct pci_controller *hose);
 
+#ifdef CONFIG_SWIOTLB
+extern void pci_check_swiotlb(void);
+#else
+static inline void pci_check_swiotlb(void) {}
+#endif
+
 #endif /* __POWERPC_FSL_PCI_H */
 #endif /* __KERNEL__ */
-- 
1.7.5.1

[PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
PCI host bridge is primary bus if it contains an ISA node. But not all boards
fit this rule. Device tree should be updated for all these boards.

Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/include/asm/pci-bridge.h |    1 +
 arch/powerpc/sysdev/fsl_pci.c         |   31 ++++++++++++++++++++++++-------
 arch/powerpc/sysdev/fsl_pci.h         |   12 +++++++++++-
 3 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
index ac39e6a..b48fa7f 100644
--- a/arch/powerpc/include/asm/pci-bridge.h
+++ b/arch/powerpc/include/asm/pci-bridge.h
@@ -20,6 +20,7 @@ struct device_node;
 struct pci_controller {
 	struct pci_bus *bus;
 	char is_dynamic;
+	int is_primary;
 #ifdef CONFIG_PPC64
 	int node;
 #endif
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 99a3e78..2a369be 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -453,6 +453,7 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary)
 
 	hose->first_busno = bus_range ? bus_range[0] : 0x0;
 	hose->last_busno = bus_range ? bus_range[1] : 0xff;
+	hose->is_primary = is_primary;
 
 	setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
 		PPC_INDIRECT_TYPE_BIG_ENDIAN);
@@ -932,18 +933,34 @@ void pci_check_swiotlb(void)
 }
 #endif
 
-int primary_phb_addr;
+/*
+ * Recursively scan all the children nodes of parent and find out if there
+ * is "isa" node. Return 1 if parent has isa node otherwise return 0.
+ */
+int has_isa_node(struct device_node *parent)
+{
+	static int result;
+	struct device_node *cur_child;
+
+	cur_child = NULL;
+	result = 0;
+	while (!result && (cur_child = of_get_next_child(parent, cur_child))) {
+		/* Get "isa" node and return 1 */
+		if (of_node_cmp(cur_child->type, "isa") == 0)
+			return result = 1;
+		has_isa_node(cur_child);
+	}
+
+	return result;
+}
+
 static int __devinit fsl_pci_probe(struct platform_device *pdev)
 {
-	struct pci_controller *hose;
 	bool is_primary;
+	is_primary = has_isa_node(pdev->dev.of_node);
 
-	if (of_match_node(pci_ids, pdev->dev.of_node)) {
-		struct resource rsrc;
-		of_address_to_resource(pdev->dev.of_node, 0, &rsrc);
-		is_primary = ((rsrc.start & 0xfffff) == primary_phb_addr);
+	if (of_match_node(pci_ids, pdev->dev.of_node))
 		fsl_add_bridge(pdev->dev.of_node, is_primary);
-	}
 
 	return 0;
 }
diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
index c2c1de5..abbc09d 100644
--- a/arch/powerpc/sysdev/fsl_pci.h
+++ b/arch/powerpc/sysdev/fsl_pci.h
@@ -88,7 +88,17 @@ struct ccsr_pci {
 	__be32	pex_err_cap_r3;		/* 0x.e34 - PCIE error capture register 0 */
 };
 
-extern int primary_phb_addr;
+
+#ifdef CONFIG_SUSPEND
+struct fsl_pci_private_data {
+	int inbound_num;
+	struct pci_outbound_window_regs __iomem *pci_pow;
+	struct pci_inbound_window_regs __iomem *pci_piw;
+	void *saved_regs;
+};
+#endif
+
+extern int is_has_isa_node(struct device_node *parent);
 extern int fsl_add_bridge(struct device_node *dev, int is_primary);
 extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
 extern int mpc83xx_add_bridge(struct device_node *dev);
-- 
1.7.5.1

[PATCH 4/6] powerpc/mpc85xx_ds: convert to unified PCI init

Message details and related content
PCI initialization is now done by PCI controller driver. In board setup_arch
stage we don't need PCI init any more but swiotlb should be determined at this
stage.

Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/platforms/85xx/common.c     |    9 ++++
 arch/powerpc/platforms/85xx/mpc85xx_ds.c |   75 +++--------------------------
 2 files changed, 17 insertions(+), 67 deletions(-)
diff --git a/arch/powerpc/platforms/85xx/common.c b/arch/powerpc/platforms/85xx/common.c
index 67dac22..303fedb 100644
--- a/arch/powerpc/platforms/85xx/common.c
+++ b/arch/powerpc/platforms/85xx/common.c
@@ -27,6 +27,15 @@ static struct of_device_id __initdata mpc85xx_common_ids[] = {
 	{ .compatible = "fsl,mpc8548-guts", },
 	/* Probably unnecessary? */
 	{ .compatible = "gpio-leds", },
+	/* For all PCI controllers */
+	{ .compatible = "fsl,mpc8540-pci", },
+	{ .compatible = "fsl,mpc8548-pcie", },
+	{ .compatible = "fsl,p1022-pcie", },
+	{ .compatible = "fsl,p1010-pcie", },
+	{ .compatible = "fsl,p1023-pcie", },
+	{ .compatible = "fsl,p4080-pcie", },
+	{ .compatible = "fsl,qoriq-pcie-v2.3", },
+	{ .compatible = "fsl,qoriq-pcie-v2.2", },
 	{},
 };
 
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
index d30f6c4..b7ef007 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
@@ -114,22 +114,14 @@ void __init mpc85xx_ds_pic_init(void)
 }
 
 #ifdef CONFIG_PCI
-static int primary_phb_addr;
 extern int uli_exclude_device(struct pci_controller *hose,
 				u_char bus, u_char devfn);
 
 static int mpc85xx_exclude_device(struct pci_controller *hose,
 				   u_char bus, u_char devfn)
 {
-	struct device_node* node;
-	struct resource rsrc;
-
-	node = hose->dn;
-	of_address_to_resource(node, 0, &rsrc);
-
-	if ((rsrc.start & 0xfffff) == primary_phb_addr) {
+	if (hose->is_primary)
 		return uli_exclude_device(hose, bus, devfn);
-	}
 
 	return PCIBIOS_SUCCESSFUL;
 }
@@ -140,46 +132,16 @@ static int mpc85xx_exclude_device(struct pci_controller *hose,
  */
 static void __init mpc85xx_ds_setup_arch(void)
 {
-#ifdef CONFIG_PCI
-	struct device_node *np;
-	struct pci_controller *hose;
-#endif
-	dma_addr_t max = 0xffffffff;
-
 	if (ppc_md.progress)
 		ppc_md.progress("mpc85xx_ds_setup_arch()", 0);
 
 #ifdef CONFIG_PCI
-	for_each_node_by_type(np, "pci") {
-		if (of_device_is_compatible(np, "fsl,mpc8540-pci") ||
-		    of_device_is_compatible(np, "fsl,mpc8548-pcie") ||
-		    of_device_is_compatible(np, "fsl,p2020-pcie")) {
-			struct resource rsrc;
-			of_address_to_resource(np, 0, &rsrc);
-			if ((rsrc.start & 0xfffff) == primary_phb_addr)
-				fsl_add_bridge(np, 1);
-			else
-				fsl_add_bridge(np, 0);
-
-			hose = pci_find_hose_for_OF_device(np);
-			max = min(max, hose->dma_window_base_cur +
-					hose->dma_window_size);
-		}
-	}
-
+	pci_check_swiotlb();
 	ppc_md.pci_exclude_device = mpc85xx_exclude_device;
 #endif
 
 	mpc85xx_smp_init();
 
-#ifdef CONFIG_SWIOTLB
-	if ((memblock_end_of_DRAM() - 1) > max) {
-		ppc_swiotlb_enable = 1;
-		set_pci_dma_ops(&swiotlb_dma_ops);
-		ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
-	}
-#endif
-
 	printk("MPC85xx DS board from Freescale Semiconductor\n");
 }
 
@@ -190,19 +152,12 @@ static int __init mpc8544_ds_probe(void)
 {
 	unsigned long root = of_get_flat_dt_root();
 
-	if (of_flat_dt_is_compatible(root, "MPC8544DS")) {
-#ifdef CONFIG_PCI
-		primary_phb_addr = 0xb000;
-#endif
-		return 1;
-	}
-
-	return 0;
+	return of_flat_dt_is_compatible(root, "MPC8544DS");
 }
 
-machine_device_initcall(mpc8544_ds, mpc85xx_common_publish_devices);
-machine_device_initcall(mpc8572_ds, mpc85xx_common_publish_devices);
-machine_device_initcall(p2020_ds, mpc85xx_common_publish_devices);
+machine_arch_initcall(mpc8544_ds, mpc85xx_common_publish_devices);
+machine_arch_initcall(mpc8572_ds, mpc85xx_common_publish_devices);
+machine_arch_initcall(p2020_ds, mpc85xx_common_publish_devices);
 
 machine_arch_initcall(mpc8544_ds, swiotlb_setup_bus_notifier);
 machine_arch_initcall(mpc8572_ds, swiotlb_setup_bus_notifier);
@@ -215,14 +170,7 @@ static int __init mpc8572_ds_probe(void)
 {
 	unsigned long root = of_get_flat_dt_root();
 
-	if (of_flat_dt_is_compatible(root, "fsl,MPC8572DS")) {
-#ifdef CONFIG_PCI
-		primary_phb_addr = 0x8000;
-#endif
-		return 1;
-	}
-
-	return 0;
+	return of_flat_dt_is_compatible(root, "fsl,MPC8572DS");
 }
 
 /*
@@ -232,14 +180,7 @@ static int __init p2020_ds_probe(void)
 {
 	unsigned long root = of_get_flat_dt_root();
 
-	if (of_flat_dt_is_compatible(root, "fsl,P2020DS")) {
-#ifdef CONFIG_PCI
-		primary_phb_addr = 0x9000;
-#endif
-		return 1;
-	}
-
-	return 0;
+	return of_flat_dt_is_compatible(root, "fsl,P2020DS");
 }
 
 define_machine(mpc8544_ds) {
-- 
1.7.5.1

[PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
Power supply for PCI inbound/outbound window registers is off when system
go to deep-sleep state. We save the values of registers before suspend
and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/include/asm/pci-bridge.h |    2 +-
 arch/powerpc/sysdev/fsl_pci.c         |  121 +++++++++++++++++++++++++++++++++
 2 files changed, 122 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
index b48fa7f..f0f00a7 100644
--- a/arch/powerpc/include/asm/pci-bridge.h
+++ b/arch/powerpc/include/asm/pci-bridge.h
@@ -90,9 +90,9 @@ struct pci_controller {
 
 #ifdef CONFIG_PPC64
 	unsigned long buid;
+#endif	/* CONFIG_PPC64 */
 
 	void *private_data;
-#endif	/* CONFIG_PPC64 */
 };
 
 /* These are used for config access before all the PCI probing
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 2a369be..a14ee6f 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -965,12 +965,133 @@ static int __devinit fsl_pci_probe(struct platform_device *pdev)
 	return 0;
 }
 
+#ifdef CONFIG_SUSPEND
+
+#define PCI_POW_PIW_OFFSET	0xc00
+#define PCI_POW_PIW_SIZE	0x200
+#define PCI_POW_NUMBER		5
+
+static int fsl_pci_suspend(struct platform_device *pdev, pm_message_t state)
+{
+	struct pci_controller *hose;
+	struct pci_outbound_window_regs *pci_saved_pow;
+	struct pci_inbound_window_regs *pci_saved_piw, *temp_piw;
+	struct resource pci_rsrc;
+	unsigned int i;
+	struct fsl_pci_private_data *sus_info;
+
+	hose = pci_find_hose_for_OF_device(pdev->dev.of_node);
+	of_address_to_resource(pdev->dev.of_node, 0, &pci_rsrc);
+
+	sus_info = kmalloc(
+			sizeof(struct fsl_pci_private_data), GFP_KERNEL);
+	if (!sus_info)
+		return -ENOMEM;
+
+	hose->private_data = sus_info;
+
+	sus_info->pci_pow = ioremap(pci_rsrc.start + PCI_POW_PIW_OFFSET,
+			PCI_POW_PIW_SIZE);
+	if (!sus_info->pci_pow) {
+		dev_err(&pdev->dev, "pci outbound/inbound windows ioremap error!\n");
+		goto err1;
+	}
+
+	sus_info->pci_piw = (struct pci_inbound_window_regs *)
+		((void *)sus_info->pci_pow + PCI_POW_PIW_SIZE) - 1;
+
+	if (of_device_is_compatible(pdev->dev.of_node, "fsl,qoriq-pcie-v2.2"))
+		sus_info->inbound_num = 4;
+	else
+		sus_info->inbound_num = 3;
+
+	sus_info->saved_regs = kmalloc(
+		sizeof(struct pci_outbound_window_regs) * PCI_POW_NUMBER +
+		sizeof(struct pci_inbound_window_regs) * sus_info->inbound_num,
+		GFP_KERNEL);
+	if (!sus_info->saved_regs)
+		goto err2;
+
+	pci_saved_pow = sus_info->saved_regs;
+	for (i = 0; i < PCI_POW_NUMBER; i++) {
+		pci_saved_pow[i].potar = in_be32(&sus_info->pci_pow[i].potar);
+		pci_saved_pow[i].potear = in_be32(&sus_info->pci_pow[i].potear);
+		pci_saved_pow[i].powbar = in_be32(&sus_info->pci_pow[i].powbar);
+		pci_saved_pow[i].powar = in_be32(&sus_info->pci_pow[i].powar);
+	}
+
+	pci_saved_piw = (struct pci_inbound_window_regs *)
+		(pci_saved_pow + PCI_POW_NUMBER);
+	temp_piw = sus_info->pci_piw;
+	for (i = 0; i < sus_info->inbound_num; i++, temp_piw--) {
+		pci_saved_piw[i].pitar = in_be32(&temp_piw->pitar);
+		pci_saved_piw[i].piwbar = in_be32(&temp_piw->piwbar);
+		pci_saved_piw[i].piwbear = in_be32(&temp_piw->piwbear);
+		pci_saved_piw[i].piwar = in_be32(&temp_piw->piwar);
+	}
+
+	return 0;
+
+err2:
+	iounmap(sus_info->pci_pow);
+
+err1:
+	kfree(sus_info);
+	return -ENOMEM;
+}
+
+static int fsl_pci_resume(struct platform_device *pdev)
+{
+	struct pci_controller *hose;
+	struct pci_outbound_window_regs *pci_saved_pow;
+	struct pci_inbound_window_regs *pci_saved_piw, *temp_piw;
+	unsigned int i;
+	struct fsl_pci_private_data *sus_info;
+
+	hose = pci_find_hose_for_OF_device(pdev->dev.of_node);
+	sus_info = (struct fsl_pci_private_data *)hose->private_data;
+
+	if (!sus_info->pci_pow || !sus_info->pci_piw || !sus_info->saved_regs)
+		return 0;
+
+	pci_saved_pow = sus_info->saved_regs;
+	for (i = 0; i < PCI_POW_NUMBER; i++) {
+		out_be32(&sus_info->pci_pow[i].potar, pci_saved_pow[i].potar);
+		out_be32(&sus_info->pci_pow[i].potear, pci_saved_pow[i].potear);
+		out_be32(&sus_info->pci_pow[i].powbar, pci_saved_pow[i].powbar);
+		out_be32(&sus_info->pci_pow[i].powar, pci_saved_pow[i].powar);
+	}
+
+	pci_saved_piw = (struct pci_inbound_window_regs *)
+		(pci_saved_pow + PCI_POW_NUMBER);
+	temp_piw = sus_info->pci_piw;
+	for (i = 0; i < sus_info->inbound_num; i++, temp_piw--) {
+		out_be32(&temp_piw->pitar, pci_saved_piw[i].pitar);
+		out_be32(&temp_piw->piwbar, pci_saved_piw[i].piwbar);
+		out_be32(&temp_piw->piwbear, pci_saved_piw[i].piwbear);
+		out_be32(&temp_piw->piwar, pci_saved_piw[i].piwar);
+	}
+	iounmap(sus_info->pci_pow);
+	kfree(sus_info->saved_regs);
+	sus_info->saved_regs = NULL;
+	kfree(sus_info);
+	sus_info = NULL;
+	hose->private_data = NULL;
+
+	return 0;
+}
+#endif
+
 static struct platform_driver fsl_pci_driver = {
 	.driver = {
 		.name = "fsl-pci",
 		.of_match_table = pci_ids,
 	},
 	.probe = fsl_pci_probe,
+#ifdef CONFIG_SUSPEND
+	.suspend	= fsl_pci_suspend,
+	.resume		= fsl_pci_resume,
+#endif
 };
 
 static int __init fsl_pci_init(void)
-- 
1.7.5.1

[PATCH 6/6] Edac/85xx: Register mpc85xx_pci_err_driver by fsl_pci_driver

Message details and related content
From: Chunhe Lan <redacted>

Now we registered pci controllers as platform devices. It will make edac
driver failed to register pci nodes as platform devices too. So we combine
two initialization code as one platform driver.

Signed-off-by: Chunhe Lan <redacted>
Signed-off-by: Li Yang <redacted>
Signed-off-by: Jia Hongtao <redacted>
---
 arch/powerpc/sysdev/fsl_pci.c |    4 +++
 arch/powerpc/sysdev/fsl_pci.h |    4 +++
 drivers/edac/mpc85xx_edac.c   |   43 +++++++++++-----------------------------
 3 files changed, 20 insertions(+), 31 deletions(-)
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index a14ee6f..5bc8222 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -962,6 +962,10 @@ static int __devinit fsl_pci_probe(struct platform_device *pdev)
 	if (of_match_node(pci_ids, pdev->dev.of_node))
 		fsl_add_bridge(pdev->dev.of_node, is_primary);
 
+#ifdef CONFIG_EDAC_MPC85XX
+	mpc85xx_pci_err_probe(pdev);
+#endif
+
 	return 0;
 }
 
diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
index abbc09d..1dfe85d 100644
--- a/arch/powerpc/sysdev/fsl_pci.h
+++ b/arch/powerpc/sysdev/fsl_pci.h
@@ -110,5 +110,9 @@ extern void pci_check_swiotlb(void);
 static inline void pci_check_swiotlb(void) {}
 #endif
 
+#ifdef CONFIG_EDAC_MPC85XX
+extern int mpc85xx_pci_err_probe(struct platform_device *op);
+#endif
+
 #endif /* __POWERPC_FSL_PCI_H */
 #endif /* __KERNEL__ */
diff --git a/drivers/edac/mpc85xx_edac.c b/drivers/edac/mpc85xx_edac.c
index 0e37462..e4b6113 100644
--- a/drivers/edac/mpc85xx_edac.c
+++ b/drivers/edac/mpc85xx_edac.c
@@ -200,7 +200,7 @@ static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
-static int __devinit mpc85xx_pci_err_probe(struct platform_device *op)
+int __devinit mpc85xx_pci_err_probe(struct platform_device *op)
 {
 	struct edac_pci_ctl_info *pci;
 	struct mpc85xx_pci_pdata *pdata;
@@ -214,6 +214,16 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *op)
 	if (!pci)
 		return -ENOMEM;
 
+	/* make sure error reporting method is sane */
+	switch (edac_op_state) {
+	case EDAC_OPSTATE_POLL:
+	case EDAC_OPSTATE_INT:
+		break;
+	default:
+		edac_op_state = EDAC_OPSTATE_INT;
+		break;
+	}
+
 	pdata = pci->pvt_info;
 	pdata->name = "mpc85xx_pci_err";
 	pdata->irq = NO_IRQ;
@@ -303,6 +313,7 @@ err:
 	devres_release_group(&op->dev, mpc85xx_pci_err_probe);
 	return res;
 }
+EXPORT_SYMBOL(mpc85xx_pci_err_probe);
 
 static int mpc85xx_pci_err_remove(struct platform_device *op)
 {
@@ -326,27 +337,6 @@ static int mpc85xx_pci_err_remove(struct platform_device *op)
 	return 0;
 }
 
-static struct of_device_id mpc85xx_pci_err_of_match[] = {
-	{
-	 .compatible = "fsl,mpc8540-pcix",
-	 },
-	{
-	 .compatible = "fsl,mpc8540-pci",
-	},
-	{},
-};
-MODULE_DEVICE_TABLE(of, mpc85xx_pci_err_of_match);
-
-static struct platform_driver mpc85xx_pci_err_driver = {
-	.probe = mpc85xx_pci_err_probe,
-	.remove = __devexit_p(mpc85xx_pci_err_remove),
-	.driver = {
-		.name = "mpc85xx_pci_err",
-		.owner = THIS_MODULE,
-		.of_match_table = mpc85xx_pci_err_of_match,
-	},
-};
-
 #endif				/* CONFIG_PCI */
 
 /**************************** L2 Err device ***************************/
@@ -1193,12 +1183,6 @@ static int __init mpc85xx_mc_init(void)
 	if (res)
 		printk(KERN_WARNING EDAC_MOD_STR "L2 fails to register\n");
 
-#ifdef CONFIG_PCI
-	res = platform_driver_register(&mpc85xx_pci_err_driver);
-	if (res)
-		printk(KERN_WARNING EDAC_MOD_STR "PCI fails to register\n");
-#endif
-
 #ifdef CONFIG_FSL_SOC_BOOKE
 	pvr = mfspr(SPRN_PVR);
 
@@ -1235,9 +1219,6 @@ static void __exit mpc85xx_mc_exit(void)
 		on_each_cpu(mpc85xx_mc_restore_hid1, NULL, 0);
 	}
 #endif
-#ifdef CONFIG_PCI
-	platform_driver_unregister(&mpc85xx_pci_err_driver);
-#endif
 	platform_driver_unregister(&mpc85xx_l2_err_driver);
 	platform_driver_unregister(&mpc85xx_mc_err_driver);
 }
-- 
1.7.5.1
Message details and related content
On 07/24/2012 05:20 AM, Jia Hongtao wrote:
We unified the Freescale pci/pcie initialization by changing the fsl_pci
to a platform driver.

In previous version pci/pcie initialization is in platform code which
Initialize pci bridge base on EP/RC or host/agent settings.
The previous version of what?  This patch, or the PCI code?  What
changed in this patch since the last time you sent it, and where is the
version number?
quoted hunk
+#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
+static const struct of_device_id pci_ids[] = {
+	{ .compatible = "fsl,mpc8540-pci", },
+	{ .compatible = "fsl,mpc8548-pcie", },
+	{ .compatible = "fsl,mpc8641-pcie", },
+	{ .compatible = "fsl,p1022-pcie", },
+	{ .compatible = "fsl,p1010-pcie", },
+	{ .compatible = "fsl,p1023-pcie", },
+	{ .compatible = "fsl,p4080-pcie", },
+	{ .compatible = "fsl,qoriq-pcie-v2.3", },
+	{ .compatible = "fsl,qoriq-pcie-v2.2", },
+	{},
+};
Again, please base this on the latest tree, which has my PCI patches.
This table already exists in this file.  And you're still missing
fsl,mpc8610-pci.
quoted hunk
+int primary_phb_addr;
+static int __devinit fsl_pci_probe(struct platform_device *pdev)
+{
+	struct pci_controller *hose;
+	bool is_primary;
+
+	if (of_match_node(pci_ids, pdev->dev.of_node)) {
+		struct resource rsrc;
+		of_address_to_resource(pdev->dev.of_node, 0, &rsrc);
+		is_primary = ((rsrc.start & 0xfffff) == primary_phb_addr);
+		fsl_add_bridge(pdev->dev.of_node, is_primary);
+
+#ifdef CONFIG_SWIOTLB
+		hose = pci_find_hose_for_OF_device(pdev->dev.of_node);
+		/*
+		 * if we couldn't map all of DRAM via the dma windows
+		 * we need SWIOTLB to handle buffers located outside of
+		 * dma capable memory region
+		 */
+		if (memblock_end_of_DRAM() > hose->dma_window_base_cur
+				+ hose->dma_window_size) {
+			ppc_swiotlb_enable = 1;
+			set_pci_dma_ops(&swiotlb_dma_ops);
+			ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
+		}
+#endif
+	}
It's too late for swiotlb here.  Again, please don't break something in
one patch and then fix it in a later patch.  Use "git rebase -i" to edit
your patchset into a reviewable, bisectable form.

-Scott

Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
On 07/24/2012 05:20 AM, Jia Hongtao wrote:
quoted hunk
PCI host bridge is primary bus if it contains an ISA node. But not all boards
fit this rule. Device tree should be updated for all these boards.

Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/include/asm/pci-bridge.h |    1 +
 arch/powerpc/sysdev/fsl_pci.c         |   31 ++++++++++++++++++++++++-------
 arch/powerpc/sysdev/fsl_pci.h         |   12 +++++++++++-
 3 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
index ac39e6a..b48fa7f 100644
--- a/arch/powerpc/include/asm/pci-bridge.h
+++ b/arch/powerpc/include/asm/pci-bridge.h
@@ -20,6 +20,7 @@ struct device_node;
 struct pci_controller {
 	struct pci_bus *bus;
 	char is_dynamic;
+	int is_primary;
 #ifdef CONFIG_PPC64
 	int node;
 #endif
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 99a3e78..2a369be 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -453,6 +453,7 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary)
 
 	hose->first_busno = bus_range ? bus_range[0] : 0x0;
 	hose->last_busno = bus_range ? bus_range[1] : 0xff;
+	hose->is_primary = is_primary;
 
 	setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
 		PPC_INDIRECT_TYPE_BIG_ENDIAN);
@@ -932,18 +933,34 @@ void pci_check_swiotlb(void)
 }
 #endif
 
-int primary_phb_addr;

20 more quoted lines

Why are you reimplementing this?  It's already in Linus's tree.  See
fsl_pci_init().

Plus, your version is recursive which is unacceptable in kernel code
with a small stack (outside of a few rare examples where the depth has a
small fixed upper bound), and once it finds an ISA node, it returns 1
forever, regardless of what node you pass in in the future.

-Scott
Message details and related content
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDI1LCAyMDEyIDI6NDMgQU0NCj4gVG86IEppYSBI
b25ndGFvLUIzODk1MQ0KPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IGdhbGFr
QGtlcm5lbC5jcmFzaGluZy5vcmc7IFdvb2QgU2NvdHQtDQo+IEIwNzQyMTsgTGkgWWFuZy1SNTg0
NzINCj4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzZdIHBvd2VycGMvZnNsLXBjaTogVW5pZnkgcGNp
L3BjaWUgaW5pdGlhbGl6YXRpb24NCj4gY29kZQ0KPiANCj4gT24gMDcvMjQvMjAxMiAwNToyMCBB
TSwgSmlhIEhvbmd0YW8gd3JvdGU6DQo+ID4gV2UgdW5pZmllZCB0aGUgRnJlZXNjYWxlIHBjaS9w
Y2llIGluaXRpYWxpemF0aW9uIGJ5IGNoYW5naW5nIHRoZQ0KPiBmc2xfcGNpDQo+ID4gdG8gYSBw
bGF0Zm9ybSBkcml2ZXIuDQo+ID4NCj4gPiBJbiBwcmV2aW91cyB2ZXJzaW9uIHBjaS9wY2llIGlu
aXRpYWxpemF0aW9uIGlzIGluIHBsYXRmb3JtIGNvZGUgd2hpY2gNCj4gPiBJbml0aWFsaXplIHBj
aSBicmlkZ2UgYmFzZSBvbiBFUC9SQyBvciBob3N0L2FnZW50IHNldHRpbmdzLg0KPiANCj4gVGhl
IHByZXZpb3VzIHZlcnNpb24gb2Ygd2hhdD8gIFRoaXMgcGF0Y2gsIG9yIHRoZSBQQ0kgY29kZT8g
IFdoYXQNCj4gY2hhbmdlZCBpbiB0aGlzIHBhdGNoIHNpbmNlIHRoZSBsYXN0IHRpbWUgeW91IHNl
bnQgaXQsIGFuZCB3aGVyZSBpcyB0aGUNCj4gdmVyc2lvbiBudW1iZXI/DQo+IA0KPiA+ICsjaWYg
ZGVmaW5lZChDT05GSUdfRlNMX1NPQ19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfUFBDXzg2eHgp
DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBjaV9pZHNbXSA9IHsNCj4g
PiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtcGNpIiwgfSwNCj4gPiArCXsgLmNvbXBh
dGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSIsIH0sDQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImZz
bCxtcGM4NjQxLXBjaWUiLCB9LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wscDEwMjItcGNp
ZSIsIH0sDQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImZzbCxwMTAxMC1wY2llIiwgfSwNCj4gPiAr
CXsgLmNvbXBhdGlibGUgPSAiZnNsLHAxMDIzLXBjaWUiLCB9LA0KPiA+ICsJeyAuY29tcGF0aWJs
ZSA9ICJmc2wscDQwODAtcGNpZSIsIH0sDQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImZzbCxxb3Jp
cS1wY2llLXYyLjMiLCB9LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wscW9yaXEtcGNpZS12
Mi4yIiwgfSwNCj4gPiArCXt9LA0KPiA+ICt9Ow0KPiANCj4gQWdhaW4sIHBsZWFzZSBiYXNlIHRo
aXMgb24gdGhlIGxhdGVzdCB0cmVlLCB3aGljaCBoYXMgbXkgUENJIHBhdGNoZXMuDQo+IFRoaXMg
dGFibGUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBmaWxlLiAgQW5kIHlvdSdyZSBzdGlsbCBtaXNz
aW5nDQo+IGZzbCxtcGM4NjEwLXBjaS4NCg0KU29ycnkgZnNsLG1wYzg2MTAtcGNpIHdpbGwgYmUg
YWRkZWQuDQoNCj4gDQo+ID4gK2ludCBwcmltYXJ5X3BoYl9hZGRyOw0KPiA+ICtzdGF0aWMgaW50
IF9fZGV2aW5pdCBmc2xfcGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+
ID4gK3sNCj4gPiArCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsNCj4gPiArCWJvb2wgaXNf
cHJpbWFyeTsNCj4gPiArDQo+ID4gKwlpZiAob2ZfbWF0Y2hfbm9kZShwY2lfaWRzLCBwZGV2LT5k
ZXYub2Zfbm9kZSkpIHsNCj4gPiArCQlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsNCj4gPiArCQlvZl9h
ZGRyZXNzX3RvX3Jlc291cmNlKHBkZXYtPmRldi5vZl9ub2RlLCAwLCAmcnNyYyk7DQo+ID4gKwkJ
aXNfcHJpbWFyeSA9ICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IHByaW1hcnlfcGhiX2FkZHIp
Ow0KPiA+ICsJCWZzbF9hZGRfYnJpZGdlKHBkZXYtPmRldi5vZl9ub2RlLCBpc19wcmltYXJ5KTsN
Cj4gPiArDQo+ID4gKyNpZmRlZiBDT05GSUdfU1dJT1RMQg0KPiA+ICsJCWhvc2UgPSBwY2lfZmlu
ZF9ob3NlX2Zvcl9PRl9kZXZpY2UocGRldi0+ZGV2Lm9mX25vZGUpOw0KPiA+ICsJCS8qDQo+ID4g
KwkJICogaWYgd2UgY291bGRuJ3QgbWFwIGFsbCBvZiBEUkFNIHZpYSB0aGUgZG1hIHdpbmRvd3MN
Cj4gPiArCQkgKiB3ZSBuZWVkIFNXSU9UTEIgdG8gaGFuZGxlIGJ1ZmZlcnMgbG9jYXRlZCBvdXRz
aWRlIG9mDQo+ID4gKwkJICogZG1hIGNhcGFibGUgbWVtb3J5IHJlZ2lvbg0KPiA+ICsJCSAqLw0K

22 more lines

RE: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDI1LCAyMDEyIDI6NDggQU0NCj4gVG86IEppYSBI
b25ndGFvLUIzODk1MQ0KPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IGdhbGFr
QGtlcm5lbC5jcmFzaGluZy5vcmc7IFdvb2QgU2NvdHQtDQo+IEIwNzQyMTsgTGkgWWFuZy1SNTg0
NzINCj4gU3ViamVjdDogUmU6IFtQQVRDSCAzLzZdIHBvd2VycGMvZnNsLXBjaTogRGV0ZXJtaW5l
IHByaW1hcnkgYnVzIGJ5DQo+IGxvb2tpbmcgZm9yIElTQSBub2RlDQo+IA0KPiBPbiAwNy8yNC8y
MDEyIDA1OjIwIEFNLCBKaWEgSG9uZ3RhbyB3cm90ZToNCj4gPiBQQ0kgaG9zdCBicmlkZ2UgaXMg
cHJpbWFyeSBidXMgaWYgaXQgY29udGFpbnMgYW4gSVNBIG5vZGUuIEJ1dCBub3QgYWxsDQo+IGJv
YXJkcw0KPiA+IGZpdCB0aGlzIHJ1bGUuIERldmljZSB0cmVlIHNob3VsZCBiZSB1cGRhdGVkIGZv
ciBhbGwgdGhlc2UgYm9hcmRzLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhIEhvbmd0YW8g
PEIzODk1MUBmcmVlc2NhbGUuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IExpIFlhbmcgPGxlb2xp
QGZyZWVzY2FsZS5jb20+DQo+ID4gLS0tDQo+ID4gIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9w
Y2ktYnJpZGdlLmggfCAgICAxICsNCj4gPiAgYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMg
ICAgICAgICB8ICAgMzEgKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiAtLS0tLS0NCj4gPiAg
YXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmggICAgICAgICB8ICAgMTIgKysrKysrKysrKyst
DQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkN
Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRn
ZS5oDQo+IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaA0KPiA+IGluZGV4
IGFjMzllNmEuLmI0OGZhN2YgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUv
YXNtL3BjaS1icmlkZ2UuaA0KPiA+ICsrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kt
YnJpZGdlLmgNCj4gPiBAQCAtMjAsNiArMjAsNyBAQCBzdHJ1Y3QgZGV2aWNlX25vZGU7DQo+ID4g
IHN0cnVjdCBwY2lfY29udHJvbGxlciB7DQo+ID4gIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOw0KPiA+
ICAJY2hhciBpc19keW5hbWljOw0KPiA+ICsJaW50IGlzX3ByaW1hcnk7DQo+ID4gICNpZmRlZiBD
T05GSUdfUFBDNjQNCj4gPiAgCWludCBub2RlOw0KPiA+ICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0
IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMNCj4gYi9hcmNoL3Bvd2VycGMvc3lzZGV2
L2ZzbF9wY2kuYw0KPiA+IGluZGV4IDk5YTNlNzguLjJhMzY5YmUgMTAwNjQ0DQo+ID4gLS0tIGEv
YXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMNCj4gPiArKysgYi9hcmNoL3Bvd2VycGMvc3lz
ZGV2L2ZzbF9wY2kuYw0KPiA+IEBAIC00NTMsNiArNDUzLDcgQEAgaW50IF9faW5pdCBmc2xfYWRk
X2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwNCj4gaW50IGlzX3ByaW1hcnkpDQo+ID4N
Cj4gPiAgCWhvc2UtPmZpcnN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzBdIDogMHgw
Ow0KPiA+ICAJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4
ZmY7DQo+ID4gKwlob3NlLT5pc19wcmltYXJ5ID0gaXNfcHJpbWFyeTsNCj4gPg0KPiA+ICAJc2V0
dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmMuc3RhcnQsIHJzcmMuc3RhcnQgKyAweDQsDQo+ID4g
IAkJUFBDX0lORElSRUNUX1RZUEVfQklHX0VORElBTik7DQo+ID4gQEAgLTkzMiwxOCArOTMzLDM0
IEBAIHZvaWQgcGNpX2NoZWNrX3N3aW90bGIodm9pZCkNCj4gPiAgfQ0KPiA+ICAjZW5kaWYNCj4g
Pg0KPiA+IC1pbnQgcHJpbWFyeV9waGJfYWRkcjsNCj4gPiArLyoNCj4gPiArICogUmVjdXJzaXZl
bHkgc2NhbiBhbGwgdGhlIGNoaWxkcmVuIG5vZGVzIG9mIHBhcmVudCBhbmQgZmluZCBvdXQgaWYN
Cj4gdGhlcmUNCj4gPiArICogaXMgImlzYSIgbm9kZS4gUmV0dXJuIDEgaWYgcGFyZW50IGhhcyBp
c2Egbm9kZSBvdGhlcndpc2UgcmV0dXJuIDAuDQo+ID4gKyAqLw0KPiA+ICtpbnQgaGFzX2lzYV9u
b2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KQ0KPiA+ICt7DQo+ID4gKwlzdGF0aWMgaW50

18 more lines

RE: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
PiA+ICsvKg0KPiA+ICsgKiBSZWN1cnNpdmVseSBzY2FuIGFsbCB0aGUgY2hpbGRyZW4gbm9kZXMg
b2YgcGFyZW50IGFuZCBmaW5kIG91dCBpZg0KPiB0aGVyZQ0KPiA+ICsgKiBpcyAiaXNhIiBub2Rl
LiBSZXR1cm4gMSBpZiBwYXJlbnQgaGFzIGlzYSBub2RlIG90aGVyd2lzZSByZXR1cm4gMC4NCj4g
PiArICovDQo+ID4gK2ludCBoYXNfaXNhX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQp
DQo+ID4gK3sNCj4gPiArCXN0YXRpYyBpbnQgcmVzdWx0Ow0KPiA+ICsJc3RydWN0IGRldmljZV9u
b2RlICpjdXJfY2hpbGQ7DQo+ID4gKw0KPiA+ICsJY3VyX2NoaWxkID0gTlVMTDsNCj4gPiArCXJl
c3VsdCA9IDA7DQo+ID4gKwl3aGlsZSAoIXJlc3VsdCAmJiAoY3VyX2NoaWxkID0gb2ZfZ2V0X25l
eHRfY2hpbGQocGFyZW50LA0KPiBjdXJfY2hpbGQpKSkgew0KPiA+ICsJCS8qIEdldCAiaXNhIiBu
b2RlIGFuZCByZXR1cm4gMSAqLw0KPiA+ICsJCWlmIChvZl9ub2RlX2NtcChjdXJfY2hpbGQtPnR5
cGUsICJpc2EiKSA9PSAwKQ0KPiA+ICsJCQlyZXR1cm4gcmVzdWx0ID0gMTsNCj4gPiArCQloYXNf
aXNhX25vZGUoY3VyX2NoaWxkKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcmVzdWx0
Ow0KPiA+ICt9DQo+IA0KPiBXaHkgYXJlIHlvdSByZWltcGxlbWVudGluZyB0aGlzPyAgSXQncyBh
bHJlYWR5IGluIExpbnVzJ3MgdHJlZS4gIFNlZQ0KPiBmc2xfcGNpX2luaXQoKS4NCj4gDQo+IFBs
dXMsIHlvdXIgdmVyc2lvbiBpcyByZWN1cnNpdmUgd2hpY2ggaXMgdW5hY2NlcHRhYmxlIGluIGtl
cm5lbCBjb2RlDQo+IHdpdGggYSBzbWFsbCBzdGFjayAob3V0c2lkZSBvZiBhIGZldyByYXJlIGV4
YW1wbGVzIHdoZXJlIHRoZSBkZXB0aCBoYXMgYQ0KPiBzbWFsbCBmaXhlZCB1cHBlciBib3VuZCks
IGFuZCBvbmNlIGl0IGZpbmRzIGFuIElTQSBub2RlLCBpdCByZXR1cm5zIDENCj4gZm9yZXZlciwg
cmVnYXJkbGVzcyBvZiB3aGF0IG5vZGUgeW91IHBhc3MgaW4gaW4gdGhlIGZ1dHVyZS4NCj4gDQo+
IC1TY290dA0KDQpZZXMsIHJlY3Vyc2l2ZSBmdW5jdGlvbiBpcyBub3QgcmVjb21tZW5kZWQgZm9y
IGtlcm5lbCBidXQgbWF5YmUgaXQncyBub3QgdW5hY2NlcHRhYmxlLg0KVGhpcyBmdW5jdGlvbiBp
cyBub3Qgc28gZGVlcCBzdGFja2VkIGFuZCBzaW1wbGUuIEluIG15IG9waW5pb24gdGhpcyBpcyBh
Y2NlcHRhYmxlLg0KDQpUaGFua3MuDQotSG9uZ3Rhby4NCg0K
Message details and related content
On 07/24/2012 09:35 PM, Jia Hongtao-B38951 wrote:
quoted
-----Original Message-----
From: Wood Scott-B07421
Sent: Wednesday, July 25, 2012 2:43 AM
To: Jia Hongtao-B38951
Cc: <redacted>; <redacted>; Wood Scott-
B07421; Li Yang-R58472
Subject: Re: [PATCH 1/6] powerpc/fsl-pci: Unify pci/pcie initialization
code

On 07/24/2012 05:20 AM, Jia Hongtao wrote:
quoted
We unified the Freescale pci/pcie initialization by changing the
fsl_pci
quoted
to a platform driver.

In previous version pci/pcie initialization is in platform code which
Initialize pci bridge base on EP/RC or host/agent settings.
The previous version of what?  This patch, or the PCI code?  What
changed in this patch since the last time you sent it, and where is the
version number?
quoted
+#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
+static const struct of_device_id pci_ids[] = {
+	{ .compatible = "fsl,mpc8540-pci", },
+	{ .compatible = "fsl,mpc8548-pcie", },
+	{ .compatible = "fsl,mpc8641-pcie", },
+	{ .compatible = "fsl,p1022-pcie", },
+	{ .compatible = "fsl,p1010-pcie", },
+	{ .compatible = "fsl,p1023-pcie", },
+	{ .compatible = "fsl,p4080-pcie", },
+	{ .compatible = "fsl,qoriq-pcie-v2.3", },
+	{ .compatible = "fsl,qoriq-pcie-v2.2", },
+	{},
+};
Again, please base this on the latest tree, which has my PCI patches.
This table already exists in this file.  And you're still missing
fsl,mpc8610-pci.

2 more quoted lines

To what?  The table is already there in Linus's tree, with
fsl,mpc8610-pci.  You don't need to add it again.
quoted
It's too late for swiotlb here.  Again, please don't break something in
one patch and then fix it in a later patch.  Use "git rebase -i" to edit
your patchset into a reviewable, bisectable form.

-Scott
Yes, bisectable requirement is sort of reasonable. 

But I check the SubmittingPatches Doc and it says "If one patch depends on
another patch in order for a change to be complete, that is OK. Simply
note 'this patch depends on patch X' in your patch description". In my
opinion swiotlb is a whole functional patch so I separate them. Maybe
I should add depends description in the next patch.
That's not what that means.  What it means is that if someone else has
already posted a patch, and your patch is supposed to go on top of that
patch, you should mention that.
About all this patch set Leo and I insist to make it as a platform driver
which is architectural better. I didn't base this patch set on the latest
tree and it's unapplicable just because I want to show the whole idea of
this patchset. If the idea is ok for upstream I will rebase the patch set.
If that's the case, you should label it as an [RFC PATCH] (stands for
Request For Comments), and mention under the --- line any known issues,
such as that it doesn't apply to the current tree.

But it would be a lot easier to comment on it if it were based on the
current code, rather than having to speculate what you'd do when you rebase.

-Scott

Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
On 07/24/2012 09:42 PM, Jia Hongtao-B38951 wrote:
quoted
-----Original Message-----
From: Wood Scott-B07421
Sent: Wednesday, July 25, 2012 2:48 AM
To: Jia Hongtao-B38951
Cc: <redacted>; <redacted>; Wood Scott-
B07421; Li Yang-R58472
Subject: Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by
looking for ISA node

On 07/24/2012 05:20 AM, Jia Hongtao wrote:
quoted
PCI host bridge is primary bus if it contains an ISA node. But not all
boards
quoted
fit this rule. Device tree should be updated for all these boards.

Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/include/asm/pci-bridge.h |    1 +
 arch/powerpc/sysdev/fsl_pci.c         |   31 ++++++++++++++++++++++++-
------
quoted
 arch/powerpc/sysdev/fsl_pci.h         |   12 +++++++++++-
 3 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/pci-bridge.h
b/arch/powerpc/include/asm/pci-bridge.h
quoted
index ac39e6a..b48fa7f 100644
--- a/arch/powerpc/include/asm/pci-bridge.h
+++ b/arch/powerpc/include/asm/pci-bridge.h
@@ -20,6 +20,7 @@ struct device_node;
 struct pci_controller {
 	struct pci_bus *bus;
 	char is_dynamic;
+	int is_primary;
 #ifdef CONFIG_PPC64
 	int node;
 #endif
diff --git a/arch/powerpc/sysdev/fsl_pci.c
b/arch/powerpc/sysdev/fsl_pci.c

53 more quoted lines

Sorry, I misread that as an initializer.  Still, it's awkward (why not
just use a return value?) and non-thread-safe (may not matter here, but
it's a bad habit), and it's still an unacceptable use of recursion, and
still a reimplementation of functionality that already exists. :-)

-Scott

Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
On 07/25/2012 04:01 AM, Jia Hongtao-B38951 wrote:
quoted
quoted
+/*
+ * Recursively scan all the children nodes of parent and find out if
there
quoted
+ * is "isa" node. Return 1 if parent has isa node otherwise return 0.
+ */
+int has_isa_node(struct device_node *parent)
+{
+	static int result;
+	struct device_node *cur_child;
+
+	cur_child = NULL;
+	result = 0;
+	while (!result && (cur_child = of_get_next_child(parent,
cur_child))) {
quoted
+		/* Get "isa" node and return 1 */
+		if (of_node_cmp(cur_child->type, "isa") == 0)
+			return result = 1;
+		has_isa_node(cur_child);
+	}
+
+	return result;
+}
Why are you reimplementing this?  It's already in Linus's tree.  See
fsl_pci_init().

Plus, your version is recursive which is unacceptable in kernel code
with a small stack (outside of a few rare examples where the depth has a
small fixed upper bound), and once it finds an ISA node, it returns 1
forever, regardless of what node you pass in in the future.

-Scott
Yes, recursive function is not recommended for kernel but maybe it's not unacceptable.
This function is not so deep stacked and simple. In my opinion this is acceptable.
The depth is limited not by code, but by externally provided data.

Granted a bad device tree can mess the kernel up in far worse ways, but
still it's a bad idea and totally unnecessary.

-Scott
Message details and related content
VGhhbmtzIGZvciBhbGwgeW91ciBjb21tZW50cy4NCkkgc3VibWl0IHRoZSBWMiBvZiB0aGlzIHBh
dGNoIHNldCB3aGljaCBpcyBiYXNlZCBvbiB0aGUgbGF0ZXN0IHRyZWUuDQpQbGVhc2UgaGF2ZSBh
IHJldmlldy4NCg0KVGhhbmtzDQotSG9uZ3Rhby4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut
LS0tLQ0KPiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiBTZW50OiBUaHVyc2RheSwgSnVseSAy
NiwgMjAxMiAxOjI0IEFNDQo+IFRvOiBKaWEgSG9uZ3Rhby1CMzg5NTENCj4gQ2M6IFdvb2QgU2Nv
dHQtQjA3NDIxOyBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsNCj4gZ2FsYWtAa2VybmVs
LmNyYXNoaW5nLm9yZzsgTGkgWWFuZy1SNTg0NzINCj4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzZd
IHBvd2VycGMvZnNsLXBjaTogVW5pZnkgcGNpL3BjaWUgaW5pdGlhbGl6YXRpb24NCj4gY29kZQ0K
PiANCj4gT24gMDcvMjQvMjAxMiAwOTozNSBQTSwgSmlhIEhvbmd0YW8tQjM4OTUxIHdyb3RlOg0K
PiA+DQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogV29v
ZCBTY290dC1CMDc0MjENCj4gPj4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDI1LCAyMDEyIDI6NDMg
QU0NCj4gPj4gVG86IEppYSBIb25ndGFvLUIzODk1MQ0KPiA+PiBDYzogbGludXhwcGMtZGV2QGxp
c3RzLm96bGFicy5vcmc7IGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc7IFdvb2QNCj4gU2NvdHQt
DQo+ID4+IEIwNzQyMTsgTGkgWWFuZy1SNTg0NzINCj4gPj4gU3ViamVjdDogUmU6IFtQQVRDSCAx
LzZdIHBvd2VycGMvZnNsLXBjaTogVW5pZnkgcGNpL3BjaWUNCj4gaW5pdGlhbGl6YXRpb24NCj4g
Pj4gY29kZQ0KPiA+Pg0KPiA+PiBPbiAwNy8yNC8yMDEyIDA1OjIwIEFNLCBKaWEgSG9uZ3RhbyB3
cm90ZToNCj4gPj4+IFdlIHVuaWZpZWQgdGhlIEZyZWVzY2FsZSBwY2kvcGNpZSBpbml0aWFsaXph
dGlvbiBieSBjaGFuZ2luZyB0aGUNCj4gPj4gZnNsX3BjaQ0KPiA+Pj4gdG8gYSBwbGF0Zm9ybSBk
cml2ZXIuDQo+ID4+Pg0KPiA+Pj4gSW4gcHJldmlvdXMgdmVyc2lvbiBwY2kvcGNpZSBpbml0aWFs
aXphdGlvbiBpcyBpbiBwbGF0Zm9ybSBjb2RlIHdoaWNoDQo+ID4+PiBJbml0aWFsaXplIHBjaSBi
cmlkZ2UgYmFzZSBvbiBFUC9SQyBvciBob3N0L2FnZW50IHNldHRpbmdzLg0KPiA+Pg0KPiA+PiBU
aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB3aGF0PyAgVGhpcyBwYXRjaCwgb3IgdGhlIFBDSSBjb2Rl
PyAgV2hhdA0KPiA+PiBjaGFuZ2VkIGluIHRoaXMgcGF0Y2ggc2luY2UgdGhlIGxhc3QgdGltZSB5
b3Ugc2VudCBpdCwgYW5kIHdoZXJlIGlzDQo+IHRoZQ0KPiA+PiB2ZXJzaW9uIG51bWJlcj8NCj4g
Pj4NCj4gPj4+ICsjaWYgZGVmaW5lZChDT05GSUdfRlNMX1NPQ19CT09LRSkgfHwgZGVmaW5lZChD
T05GSUdfUFBDXzg2eHgpDQo+ID4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg
cGNpX2lkc1tdID0gew0KPiA+Pj4gKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLXBjaSIs
IH0sDQo+ID4+PiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSIsIH0sDQo+ID4+
PiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtcGNpZSIsIH0sDQo+ID4+PiArCXsgLmNv
bXBhdGlibGUgPSAiZnNsLHAxMDIyLXBjaWUiLCB9LA0KPiA+Pj4gKwl7IC5jb21wYXRpYmxlID0g
ImZzbCxwMTAxMC1wY2llIiwgfSwNCj4gPj4+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wscDEwMjMt
cGNpZSIsIH0sDQo+ID4+PiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLXBjaWUiLCB9LA0K
PiA+Pj4gKwl7IC5jb21wYXRpYmxlID0gImZzbCxxb3JpcS1wY2llLXYyLjMiLCB9LA0KPiA+Pj4g
Kwl7IC5jb21wYXRpYmxlID0gImZzbCxxb3JpcS1wY2llLXYyLjIiLCB9LA0KPiA+Pj4gKwl7fSwN
Cj4gPj4+ICt9Ow0KPiA+Pg0KPiA+PiBBZ2FpbiwgcGxlYXNlIGJhc2UgdGhpcyBvbiB0aGUgbGF0
ZXN0IHRyZWUsIHdoaWNoIGhhcyBteSBQQ0kgcGF0Y2hlcy4NCj4gPj4gVGhpcyB0YWJsZSBhbHJl
YWR5IGV4aXN0cyBpbiB0aGlzIGZpbGUuICBBbmQgeW91J3JlIHN0aWxsIG1pc3NpbmcNCj4gPj4g
ZnNsLG1wYzg2MTAtcGNpLg0KPiA+DQo+ID4gU29ycnkgZnNsLG1wYzg2MTAtcGNpIHdpbGwgYmUg
YWRkZWQuDQo+IA0KPiBUbyB3aGF0PyAgVGhlIHRhYmxlIGlzIGFscmVhZHkgdGhlcmUgaW4gTGlu
dXMncyB0cmVlLCB3aXRoDQo+IGZzbCxtcGM4NjEwLXBjaS4gIFlvdSBkb24ndCBuZWVkIHRvIGFk

28 more lines

RE: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0K
PiBTZW50OiBUaHVyc2RheSwgSnVseSAyNiwgMjAxMiAxOjI2IEFNDQo+IFRvOiBKaWEgSG9uZ3Rh
by1CMzg5NTENCj4gQ2M6IFdvb2QgU2NvdHQtQjA3NDIxOyBsaW51eHBwYy1kZXZAbGlzdHMub3ps
YWJzLm9yZzsNCj4gZ2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZzsgTGkgWWFuZy1SNTg0NzINCj4g
U3ViamVjdDogUmU6IFtQQVRDSCAzLzZdIHBvd2VycGMvZnNsLXBjaTogRGV0ZXJtaW5lIHByaW1h
cnkgYnVzIGJ5IGxvb2tpbmcNCj4gZm9yIElTQSBub2RlDQo+IA0KPiA+Pj4gKy8qDQo+ID4+PiAr
ICogUmVjdXJzaXZlbHkgc2NhbiBhbGwgdGhlIGNoaWxkcmVuIG5vZGVzIG9mIHBhcmVudCBhbmQg
ZmluZCBvdXQgaWYNCj4gPj4gdGhlcmUNCj4gPj4+ICsgKiBpcyAiaXNhIiBub2RlLiBSZXR1cm4g
MSBpZiBwYXJlbnQgaGFzIGlzYSBub2RlIG90aGVyd2lzZSByZXR1cm4gMC4NCj4gPj4+ICsgKi8N
Cj4gPj4+ICtpbnQgaGFzX2lzYV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KQ0KPiA+
Pj4gK3sNCj4gPj4+ICsJc3RhdGljIGludCByZXN1bHQ7DQo+ID4+PiArCXN0cnVjdCBkZXZpY2Vf
bm9kZSAqY3VyX2NoaWxkOw0KPiA+Pj4gKw0KPiA+Pj4gKwljdXJfY2hpbGQgPSBOVUxMOw0KPiA+
Pj4gKwlyZXN1bHQgPSAwOw0KPiA+Pj4gKwl3aGlsZSAoIXJlc3VsdCAmJiAoY3VyX2NoaWxkID0g
b2ZfZ2V0X25leHRfY2hpbGQocGFyZW50LA0KPiA+PiBjdXJfY2hpbGQpKSkgew0KPiA+Pj4gKwkJ
LyogR2V0ICJpc2EiIG5vZGUgYW5kIHJldHVybiAxICovDQo+ID4+PiArCQlpZiAob2Zfbm9kZV9j
bXAoY3VyX2NoaWxkLT50eXBlLCAiaXNhIikgPT0gMCkNCj4gPj4+ICsJCQlyZXR1cm4gcmVzdWx0
ID0gMTsNCj4gPj4+ICsJCWhhc19pc2Ffbm9kZShjdXJfY2hpbGQpOw0KPiA+Pj4gKwl9DQo+ID4+
PiArDQo+ID4+PiArCXJldHVybiByZXN1bHQ7DQo+ID4+PiArfQ0KPiA+Pg0KPiA+PiBXaHkgYXJl
IHlvdSByZWltcGxlbWVudGluZyB0aGlzPyAgSXQncyBhbHJlYWR5IGluIExpbnVzJ3MgdHJlZS4g
IFNlZQ0KPiA+PiBmc2xfcGNpX2luaXQoKS4NCj4gPj4NCj4gPj4gUGx1cywgeW91ciB2ZXJzaW9u
IGlzIHJlY3Vyc2l2ZSB3aGljaCBpcyB1bmFjY2VwdGFibGUgaW4ga2VybmVsIGNvZGUNCj4gPj4g
d2l0aCBhIHNtYWxsIHN0YWNrIChvdXRzaWRlIG9mIGEgZmV3IHJhcmUgZXhhbXBsZXMgd2hlcmUg
dGhlIGRlcHRoIGhhcw0KPiBhDQo+ID4+IHNtYWxsIGZpeGVkIHVwcGVyIGJvdW5kKSwgYW5kIG9u
Y2UgaXQgZmluZHMgYW4gSVNBIG5vZGUsIGl0IHJldHVybnMgMQ0KPiA+PiBmb3JldmVyLCByZWdh
cmRsZXNzIG9mIHdoYXQgbm9kZSB5b3UgcGFzcyBpbiBpbiB0aGUgZnV0dXJlLg0KPiA+Pg0KPiA+
PiAtU2NvdHQNCj4gPg0KPiA+IEFib3V0IHJlY3Vyc2lvbiBJIHdpbGwgZG8gc29tZSBtb3JlIGlu
dmVzdGlnYXRpb24uDQo+ID4gSWYgaXQgZmluZHMgSVNBIGl0IHJldHVybnMgMS4gQnV0IGZvciBu
ZXh0IFBDSSBub2RlIGl0IHdpbGwgcmV0dXJuIDAgaWYNCj4gPiBubyBJU0EgaXMgZm91bmQgKG5v
dGUgdGhhdCBJIHNldCByZXN1bHQgdG8gMCBhdCB0aGUgYmVnaW5uaW5nKS4NCj4gDQo+IFNvcnJ5
LCBJIG1pc3JlYWQgdGhhdCBhcyBhbiBpbml0aWFsaXplci4gIFN0aWxsLCBpdCdzIGF3a3dhcmQg
KHdoeSBub3QNCj4ganVzdCB1c2UgYSByZXR1cm4gdmFsdWU/KSBhbmQgbm9uLXRocmVhZC1zYWZl
IChtYXkgbm90IG1hdHRlciBoZXJlLCBidXQNCj4gaXQncyBhIGJhZCBoYWJpdCksIGFuZCBpdCdz
IHN0aWxsIGFuIHVuYWNjZXB0YWJsZSB1c2Ugb2YgcmVjdXJzaW9uLCBhbmQNCj4gc3RpbGwgYSBy
ZWltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9uYWxpdHkgdGhhdCBhbHJlYWR5IGV4aXN0cy4gOi0p
DQo+IA0KPiAtU2NvdHQNCg0KQWxsIHRoaXMgcmVjdXJzaW9uIHRoaW5nIEkgd2lsbCB0cnkgYW5v
dGhlciB3YXkuDQoNCkJ1dCB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB5b3UgZGlkLiBJZiB3ZSB1
c2UgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uDQp3aWxsIGJlIGNhbGxlZCBtb3JlIHRo
YW4gb25jZS4gWW91ciBmdW5jdGlvbiBpcyB0byBmaW5kIElTQSBub2RlIGFuZCBjaGVjayBpZg0K
dGhlIHBhcmVudCBlcXVhbCB0byB0aGlzIFBDSSBjb250cm9sbGVyLiBNeSBmdW5jdGlvbiBpcyB0
byBzZWFyY2ggSVNBIHVuZGVyDQplYWNoIFBDSSBjb250cm9sbGVyLiBJZiB0aGUgcGxhdGZvcm0g

2 more lines

Message details and related content
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogVGh1cnNkYXksIEp1bHkgMjYsIDIwMTIgMToyNCBBTQ0KPiBUbzogSmlhIEhv
bmd0YW8tQjM4OTUxDQo+IENjOiBXb29kIFNjb3R0LUIwNzQyMTsgbGludXhwcGMtZGV2QGxpc3Rz
Lm96bGFicy5vcmc7DQo+IGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc7IExpIFlhbmctUjU4NDcy
DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMS82XSBwb3dlcnBjL2ZzbC1wY2k6IFVuaWZ5IHBjaS9w
Y2llIGluaXRpYWxpemF0aW9uDQo+IGNvZGUNCj4gDQo+IE9uIDA3LzI0LzIwMTIgMDk6MzUgUE0s
IEppYSBIb25ndGFvLUIzODk1MSB3cm90ZToNCj4gPg0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4+IFNlbnQ6IFdl
ZG5lc2RheSwgSnVseSAyNSwgMjAxMiAyOjQzIEFNDQo+ID4+IFRvOiBKaWEgSG9uZ3Rhby1CMzg5
NTENCj4gPj4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOyBnYWxha0BrZXJuZWwu
Y3Jhc2hpbmcub3JnOyBXb29kDQo+IFNjb3R0LQ0KPiA+PiBCMDc0MjE7IExpIFlhbmctUjU4NDcy
DQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMS82XSBwb3dlcnBjL2ZzbC1wY2k6IFVuaWZ5IHBj
aS9wY2llDQo+IGluaXRpYWxpemF0aW9uDQo+ID4+IGNvZGUNCj4gPj4NCj4gPj4gT24gMDcvMjQv
MjAxMiAwNToyMCBBTSwgSmlhIEhvbmd0YW8gd3JvdGU6DQo+ID4+PiBXZSB1bmlmaWVkIHRoZSBG
cmVlc2NhbGUgcGNpL3BjaWUgaW5pdGlhbGl6YXRpb24gYnkgY2hhbmdpbmcgdGhlDQo+ID4+IGZz
bF9wY2kNCj4gPj4+IHRvIGEgcGxhdGZvcm0gZHJpdmVyLg0KPiA+Pj4NCj4gPj4+IEluIHByZXZp
b3VzIHZlcnNpb24gcGNpL3BjaWUgaW5pdGlhbGl6YXRpb24gaXMgaW4gcGxhdGZvcm0gY29kZSB3
aGljaA0KPiA+Pj4gSW5pdGlhbGl6ZSBwY2kgYnJpZGdlIGJhc2Ugb24gRVAvUkMgb3IgaG9zdC9h
Z2VudCBzZXR0aW5ncy4NCj4gPj4NCj4gPj4gVGhlIHByZXZpb3VzIHZlcnNpb24gb2Ygd2hhdD8g
IFRoaXMgcGF0Y2gsIG9yIHRoZSBQQ0kgY29kZT8gIFdoYXQNCj4gPj4gY2hhbmdlZCBpbiB0aGlz
IHBhdGNoIHNpbmNlIHRoZSBsYXN0IHRpbWUgeW91IHNlbnQgaXQsIGFuZCB3aGVyZSBpcw0KPiB0
aGUNCj4gPj4gdmVyc2lvbiBudW1iZXI/DQo+ID4+DQo+ID4+PiArI2lmIGRlZmluZWQoQ09ORklH
X0ZTTF9TT0NfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHX1BQQ184Nnh4KQ0KPiA+Pj4gK3N0YXRp
YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBjaV9pZHNbXSA9IHsNCj4gPj4+ICsJeyAuY29t
cGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiLCB9LA0KPiA+Pj4gKwl7IC5jb21wYXRpYmxlID0g
ImZzbCxtcGM4NTQ4LXBjaWUiLCB9LA0KPiA+Pj4gKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4
NjQxLXBjaWUiLCB9LA0KPiA+Pj4gKwl7IC5jb21wYXRpYmxlID0gImZzbCxwMTAyMi1wY2llIiwg
fSwNCj4gPj4+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wscDEwMTAtcGNpZSIsIH0sDQo+ID4+PiAr
CXsgLmNvbXBhdGlibGUgPSAiZnNsLHAxMDIzLXBjaWUiLCB9LA0KPiA+Pj4gKwl7IC5jb21wYXRp
YmxlID0gImZzbCxwNDA4MC1wY2llIiwgfSwNCj4gPj4+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2ws
cW9yaXEtcGNpZS12Mi4zIiwgfSwNCj4gPj4+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wscW9yaXEt
cGNpZS12Mi4yIiwgfSwNCj4gPj4+ICsJe30sDQo+ID4+PiArfTsNCj4gPj4NCj4gPj4gQWdhaW4s
IHBsZWFzZSBiYXNlIHRoaXMgb24gdGhlIGxhdGVzdCB0cmVlLCB3aGljaCBoYXMgbXkgUENJIHBh
dGNoZXMuDQo+ID4+IFRoaXMgdGFibGUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBmaWxlLiAgQW5k
IHlvdSdyZSBzdGlsbCBtaXNzaW5nDQo+ID4+IGZzbCxtcGM4NjEwLXBjaS4NCj4gPg0KPiA+IFNv
cnJ5IGZzbCxtcGM4NjEwLXBjaSB3aWxsIGJlIGFkZGVkLg0KPiANCj4gVG8gd2hhdD8gIFRoZSB0
YWJsZSBpcyBhbHJlYWR5IHRoZXJlIGluIExpbnVzJ3MgdHJlZSwgd2l0aA0KPiBmc2wsbXBjODYx
MC1wY2kuICBZb3UgZG9uJ3QgbmVlZCB0byBhZGQgaXQgYWdhaW4uDQo+IA0KPiA+PiBJdCdzIHRv
byBsYXRlIGZvciBzd2lvdGxiIGhlcmUuICBBZ2FpbiwgcGxlYXNlIGRvbid0IGJyZWFrIHNvbWV0
aGluZw0KPiBpbg0KPiA+PiBvbmUgcGF0Y2ggYW5kIHRoZW4gZml4IGl0IGluIGEgbGF0ZXIgcGF0

24 more lines

Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
On 07/25/2012 09:20 PM, Jia Hongtao-B38951 wrote:
All this recursion thing I will try another way.

But this is not the same as you did. If we use platform driver probe function
will be called more than once. Your function is to find ISA node and check if
the parent equal to this PCI controller. My function is to search ISA under
each PCI controller.
The result is the same -- "does this PCI controller have an ISA node
under it?"

-Scott

RE: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogRnJpZGF5LCBKdWx5IDI3LCAyMDEyIDk6MzQgQU0NCj4gVG86IEppYSBIb25n
dGFvLUIzODk1MQ0KPiBDYzogV29vZCBTY290dC1CMDc0MjE7IGxpbnV4cHBjLWRldkBsaXN0cy5v
emxhYnMub3JnOw0KPiBnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnOyBMaSBZYW5nLVI1ODQ3Mg0K
PiBTdWJqZWN0OiBSZTogW1BBVENIIDMvNl0gcG93ZXJwYy9mc2wtcGNpOiBEZXRlcm1pbmUgcHJp
bWFyeSBidXMgYnkNCj4gbG9va2luZyBmb3IgSVNBIG5vZGUNCj4gDQo+IE9uIDA3LzI1LzIwMTIg
MDk6MjAgUE0sIEppYSBIb25ndGFvLUIzODk1MSB3cm90ZToNCj4gPiBBbGwgdGhpcyByZWN1cnNp
b24gdGhpbmcgSSB3aWxsIHRyeSBhbm90aGVyIHdheS4NCj4gPg0KPiA+IEJ1dCB0aGlzIGlzIG5v
dCB0aGUgc2FtZSBhcyB5b3UgZGlkLiBJZiB3ZSB1c2UgcGxhdGZvcm0gZHJpdmVyIHByb2JlDQo+
IGZ1bmN0aW9uDQo+ID4gd2lsbCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuIFlvdXIgZnVuY3Rp
b24gaXMgdG8gZmluZCBJU0Egbm9kZSBhbmQNCj4gY2hlY2sgaWYNCj4gPiB0aGUgcGFyZW50IGVx
dWFsIHRvIHRoaXMgUENJIGNvbnRyb2xsZXIuIE15IGZ1bmN0aW9uIGlzIHRvIHNlYXJjaCBJU0EN
Cj4gdW5kZXINCj4gPiBlYWNoIFBDSSBjb250cm9sbGVyLg0KPiANCj4gVGhlIHJlc3VsdCBpcyB0
aGUgc2FtZSAtLSAiZG9lcyB0aGlzIFBDSSBjb250cm9sbGVyIGhhdmUgYW4gSVNBIG5vZGUNCj4g
dW5kZXIgaXQ/Ig0KPiANCj4gLVNjb3R0DQoNCg0KVGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBidXQg
YXMgSSBzYWlkIGluIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbiB3aWxsDQpiZSBjYWxs
ZWQgZm9yIGVhY2ggUENJIGNvbnRyb2xsZXIuIFdlIGRvbid0IHdhbnQgSVNBIGlzIHNlYXJjaGVk
IGZvciBtb3JlDQp0aGFuIG9uY2UuIEFsc28gcGxlYXNlIHJlZmVyIHRvIFYzIG9mIHRoaXMgcGF0
Y2ggc2V0IGluIHdoaWNoIEkgcmViYXNlIHRoZW0NCm9uIGxhdGVzdCB0cmVlLiBJIG1hZGUgYSBu
b24tcmVjdXJzaXZlIHZlcnNpb24gb2YgZnVuY3Rpb24gdG8gc2VhcmNoIGZvcg0KSVNBIHVuZGVy
IFBDSSBub2Rlcy4NCg0KLUhvbmd0YW8uDQo=

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
Power supply for PCI inbound/outbound window registers is off when =
system
go to deep-sleep state. We save the values of registers before suspend
and restore to registers after resume.
=20
Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121 =
+++++++++++++++++++++++++++++++++
2 files changed, 122 insertions(+), 1 deletions(-)
Remind me why we need to save/restore PCI ATMUs, why not just re-parse =
the device tree to restore?

- k=

Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking for ISA node

Message details and related content
On 07/26/2012 09:07 PM, Jia Hongtao-B38951 wrote:
quoted
-----Original Message-----
From: Wood Scott-B07421
Sent: Friday, July 27, 2012 9:34 AM
To: Jia Hongtao-B38951
Cc: Wood Scott-B07421; <redacted>;
galak@kernel.crashing.org; Li Yang-R58472
Subject: Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by
looking for ISA node

On 07/25/2012 09:20 PM, Jia Hongtao-B38951 wrote:
quoted
All this recursion thing I will try another way.

But this is not the same as you did. If we use platform driver probe
function
quoted
will be called more than once. Your function is to find ISA node and
check if
quoted
the parent equal to this PCI controller. My function is to search ISA
under
quoted
each PCI controller.
The result is the same -- "does this PCI controller have an ISA node
under it?"

-Scott

The result is the same but as I said in platform driver probe function will
be called for each PCI controller.
So?  Just because you've got a platform device now doesn't mean you
can't do any early global init.  This has to be done globally, so we can
choose a fallback primary bus if there's no ISA in the system.

-Scott

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Friday, July 27, 2012 9:24 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
=20
=20
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
=20
quoted
Power supply for PCI inbound/outbound window registers is off when
system
quoted
go to deep-sleep state. We save the values of registers before suspend
and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
=20
Remind me why we need to save/restore PCI ATMUs, why not just re-parse
the device tree to restore?
=20
- k
Save/restore is the more efficient way. Latency of sleep/wakeup is one of
most important features in power management.

-Hongtao.

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
On Jul 30, 2012, at 1:09 AM, Jia Hongtao-B38951 wrote:
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Friday, July 27, 2012 9:24 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
=20
=20
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
=20
quoted
Power supply for PCI inbound/outbound window registers is off when
system
quoted
go to deep-sleep state. We save the values of registers before =
suspend
quoted
quoted
and restore to registers after resume.
=20
Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
=20
Remind me why we need to save/restore PCI ATMUs, why not just =
re-parse
quoted
the device tree to restore?
=20
- k
=20
Save/restore is the more efficient way. Latency of sleep/wakeup is one =
of
most important features in power management.
=20
-Hongtao.
I don't think the time it takes to run through setup_pci_atmu() is that =
long compared to fsl_pci_resume().

Also, don't you need to setup PCICCSRBAR and do setup_pci_cmd() on =
resume?

- k=

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Tuesday, July 31, 2012 9:37 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
=20
=20
On Jul 30, 2012, at 1:09 AM, Jia Hongtao-B38951 wrote:
=20
quoted
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Friday, July 27, 2012 9:24 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support


On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off when
system
quoted
go to deep-sleep state. We save the values of registers before
suspend
quoted
quoted
quoted
and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
Remind me why we need to save/restore PCI ATMUs, why not just re-parse
the device tree to restore?

12 more quoted lines

?
=20
- k
I will investigate on this and send the patch later.

-Hongtao.

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Tuesday, July 31, 2012 9:37 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
=20
=20
On Jul 30, 2012, at 1:09 AM, Jia Hongtao-B38951 wrote:
=20
quoted
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Friday, July 27, 2012 9:24 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support


On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off when
system
quoted
go to deep-sleep state. We save the values of registers before
suspend and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?

- k

10 more quoted lines

?
=20
- k
Hi Kumar,
I did some tests on P1022DS and found out that PCI_CMD and PCICSRBAR is not
lost when system in deep sleep. We don't need to save it.

I will send PM patch after PCI initialization patch set being accepted.=20

-Hongtao.

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
On 08/07/2012 05:11 AM, Jia Hongtao-B38951 wrote:
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Tuesday, July 31, 2012 9:37 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support


On Jul 30, 2012, at 1:09 AM, Jia Hongtao-B38951 wrote:
quoted
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Friday, July 27, 2012 9:24 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support


On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off when
system
quoted
go to deep-sleep state. We save the values of registers before
suspend and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?

18 more quoted lines

How does the PCI code know you're entering deep sleep and not hibernation?

-Scott

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
On Aug 7, 2012, at 10:34 AM, Scott Wood wrote:
On 08/07/2012 05:11 AM, Jia Hongtao-B38951 wrote:
quoted
=20
=20
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Tuesday, July 31, 2012 9:37 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound =
PM
quoted
quoted
support
=20
=20
On Jul 30, 2012, at 1:09 AM, Jia Hongtao-B38951 wrote:
=20
quoted
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Friday, July 27, 2012 9:24 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li =
Yang-R58472
quoted
quoted
quoted
quoted
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound =
PM
quoted
quoted
quoted
quoted
support
=20
=20
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
=20
quoted
Power supply for PCI inbound/outbound window registers is off =
when
quoted
quoted
quoted
quoted
system
quoted
go to deep-sleep state. We save the values of registers before
suspend and restore to registers after resume.
=20
Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
=20
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?
=20
- k
=20
Save/restore is the more efficient way. Latency of sleep/wakeup is =
one
quoted
quoted
quoted
of most important features in power management.
=20
-Hongtao.
=20
I don't think the time it takes to run through setup_pci_atmu() is =
that
quoted
quoted
long compared to fsl_pci_resume().
=20
Also, don't you need to setup PCICCSRBAR and do setup_pci_cmd() on =
resume?
quoted
quoted
=20
- k
=20
Hi Kumar,
I did some tests on P1022DS and found out that PCI_CMD and PCICSRBAR =
is not
quoted
lost when system in deep sleep. We don't need to save it.
=20
How does the PCI code know you're entering deep sleep and not =
hibernation?
=20
-Scott
=20
Also, are you sure PCICSRBAR does not need restoring?  I'd be surprised =
if PCICSRBAR was ok, but the ATMUs where not.

- k

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Wednesday, August 08, 2012 1:34 AM
To: Wood Scott-B07421
Cc: Jia Hongtao-B38951; <redacted>; Wood Scott-B07421;
Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
=20
=20
On Aug 7, 2012, at 10:34 AM, Scott Wood wrote:
=20
quoted
On 08/07/2012 05:11 AM, Jia Hongtao-B38951 wrote:
quoted
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Tuesday, July 31, 2012 9:37 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound
PM support


On Jul 30, 2012, at 1:09 AM, Jia Hongtao-B38951 wrote:
quoted
quoted
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Friday, July 27, 2012 9:24 PM
To: Jia Hongtao-B38951
Cc: <redacted>; Wood Scott-B07421; Li
Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound
PM support


On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off
when

46 more quoted lines

PEXCSRBAR is in configuration space and ATMUs are memory map registers.
I guess there are different power supplies.

-Hongtao.

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogVHVlc2RheSwgQXVndXN0IDA3LCAyMDEyIDExOjM1IFBNDQo+IFRvOiBKaWEg
SG9uZ3Rhby1CMzg5NTENCj4gQ2M6IEt1bWFyIEdhbGE7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxh
YnMub3JnOyBXb29kIFNjb3R0LUIwNzQyMTsgTGkNCj4gWWFuZy1SNTg0NzINCj4gU3ViamVjdDog
UmU6IFtQQVRDSCA1LzZdIHBvd2VycGMvZnNsLXBjaTogQWRkIHBjaSBpbmJvdW5kL291dGJvdW5k
IFBNDQo+IHN1cHBvcnQNCj4gDQo+IE9uIDA4LzA3LzIwMTIgMDU6MTEgQU0sIEppYSBIb25ndGFv
LUIzODk1MSB3cm90ZToNCj4gPg0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
DQo+ID4+IEZyb206IEt1bWFyIEdhbGEgW21haWx0bzpnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3Jn
XQ0KPiA+PiBTZW50OiBUdWVzZGF5LCBKdWx5IDMxLCAyMDEyIDk6MzcgUE0NCj4gPj4gVG86IEpp
YSBIb25ndGFvLUIzODk1MQ0KPiA+PiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7
IFdvb2QgU2NvdHQtQjA3NDIxOyBMaSBZYW5nLVI1ODQ3Mg0KPiA+PiBTdWJqZWN0OiBSZTogW1BB
VENIIDUvNl0gcG93ZXJwYy9mc2wtcGNpOiBBZGQgcGNpIGluYm91bmQvb3V0Ym91bmQgUE0NCj4g
Pj4gc3VwcG9ydA0KPiA+Pg0KPiA+Pg0KPiA+PiBPbiBKdWwgMzAsIDIwMTIsIGF0IDE6MDkgQU0s
IEppYSBIb25ndGFvLUIzODk1MSB3cm90ZToNCj4gPj4NCj4gPj4+PiAtLS0tLU9yaWdpbmFsIE1l
c3NhZ2UtLS0tLQ0KPiA+Pj4+IEZyb206IEt1bWFyIEdhbGEgW21haWx0bzpnYWxha0BrZXJuZWwu
Y3Jhc2hpbmcub3JnXQ0KPiA+Pj4+IFNlbnQ6IEZyaWRheSwgSnVseSAyNywgMjAxMiA5OjI0IFBN
DQo+ID4+Pj4gVG86IEppYSBIb25ndGFvLUIzODk1MQ0KPiA+Pj4+IENjOiBsaW51eHBwYy1kZXZA
bGlzdHMub3psYWJzLm9yZzsgV29vZCBTY290dC1CMDc0MjE7IExpDQo+ID4+Pj4gWWFuZy1SNTg0
NzINCj4gPj4+PiBTdWJqZWN0OiBSZTogW1BBVENIIDUvNl0gcG93ZXJwYy9mc2wtcGNpOiBBZGQg
cGNpIGluYm91bmQvb3V0Ym91bmQNCj4gPj4+PiBQTSBzdXBwb3J0DQo+ID4+Pj4NCj4gPj4+Pg0K
PiA+Pj4+IE9uIEp1bCAyNCwgMjAxMiwgYXQgNToyMCBBTSwgSmlhIEhvbmd0YW8gd3JvdGU6DQo+
ID4+Pj4NCj4gPj4+Pj4gUG93ZXIgc3VwcGx5IGZvciBQQ0kgaW5ib3VuZC9vdXRib3VuZCB3aW5k
b3cgcmVnaXN0ZXJzIGlzIG9mZiB3aGVuDQo+ID4+Pj4gc3lzdGVtDQo+ID4+Pj4+IGdvIHRvIGRl
ZXAtc2xlZXAgc3RhdGUuIFdlIHNhdmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgYmVmb3JlDQo+
ID4+Pj4+IHN1c3BlbmQgYW5kIHJlc3RvcmUgdG8gcmVnaXN0ZXJzIGFmdGVyIHJlc3VtZS4NCj4g
Pj4+Pj4NCj4gPj4+Pj4gU2lnbmVkLW9mZi1ieTogSmlhbmcgWXV0YW5nIDxiMTQ4OThAZnJlZXNj
YWxlLmNvbT4NCj4gPj4+Pj4gU2lnbmVkLW9mZi1ieTogSmlhIEhvbmd0YW8gPEIzODk1MUBmcmVl
c2NhbGUuY29tPg0KPiA+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBMaSBZYW5nIDxsZW9saUBmcmVlc2Nh
bGUuY29tPg0KPiA+Pj4+PiAtLS0NCj4gPj4+Pj4gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Bj
aS1icmlkZ2UuaCB8ICAgIDIgKy0NCj4gPj4+Pj4gYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNp
LmMgICAgICAgICB8ICAxMjENCj4gPj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysNCj4gPj4+Pj4gMiBmaWxlcyBjaGFuZ2VkLCAxMjIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv
bnMoLSkNCj4gPj4+Pg0KPiA+Pj4+IFJlbWluZCBtZSB3aHkgd2UgbmVlZCB0byBzYXZlL3Jlc3Rv
cmUgUENJIEFUTVVzLCB3aHkgbm90IGp1c3QNCj4gPj4+PiByZS1wYXJzZSB0aGUgZGV2aWNlIHRy
ZWUgdG8gcmVzdG9yZT8NCj4gPj4+Pg0KPiA+Pj4+IC0gaw0KPiA+Pj4NCj4gPj4+IFNhdmUvcmVz
dG9yZSBpcyB0aGUgbW9yZSBlZmZpY2llbnQgd2F5LiBMYXRlbmN5IG9mIHNsZWVwL3dha2V1cCBp
cw0KPiA+Pj4gb25lIG9mIG1vc3QgaW1wb3J0YW50IGZlYXR1cmVzIGluIHBvd2VyIG1hbmFnZW1l
bnQuDQo+ID4+Pg0KPiA+Pj4gLUhvbmd0YW8uDQo+ID4+DQo+ID4+IEkgZG9uJ3QgdGhpbmsgdGhl
IHRpbWUgaXQgdGFrZXMgdG8gcnVuIHRocm91Z2ggc2V0dXBfcGNpX2F0bXUoKSBpcw0KPiA+PiB0
aGF0IGxvbmcgY29tcGFyZWQgdG8gZnNsX3BjaV9yZXN1bWUoKS4NCj4gPj4NCj4gPj4gQWxzbywg

9 more lines

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
quoted
quoted
quoted
quoted
quoted
=20
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
=20
quoted
Power supply for PCI inbound/outbound window registers is off =
when
quoted
quoted
quoted
quoted
quoted
system
quoted
go to deep-sleep state. We save the values of registers before
suspend and restore to registers after resume.
=20
Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
=20
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?
=20
- k
=20
Save/restore is the more efficient way. Latency of sleep/wakeup is
one of most important features in power management.
=20
-Hongtao.
=20
I don't think the time it takes to run through setup_pci_atmu() is
that long compared to fsl_pci_resume().
=20
Also, don't you need to setup PCICCSRBAR and do setup_pci_cmd() on
resume?
quoted
quoted
=20
- k
=20
Hi Kumar,
I did some tests on P1022DS and found out that PCI_CMD and PCICSRBAR
is not lost when system in deep sleep. We don't need to save it.
=20
How does the PCI code know you're entering deep sleep and not =
hibernation?
quoted
=20
-Scott
=20
When system come back from hibernation PCI will be initialized again.
So no need to save PCI_CMD and PEXCSRBAR.
=20
-Hongtao.=20
=20
What do you mean PCI will be initialized again?  What code path are you =
talking about that would set PCI_CMD & PEXCSRBAR?

- k=

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
On 08/08/2012 07:46 AM, Kumar Gala wrote:
quoted
quoted
quoted
quoted
quoted
quoted
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off when
system
quoted
go to deep-sleep state. We save the values of registers before
suspend and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?

- k
Save/restore is the more efficient way. Latency of sleep/wakeup is
one of most important features in power management.

-Hongtao.
I don't think the time it takes to run through setup_pci_atmu() is
that long compared to fsl_pci_resume().

Also, don't you need to setup PCICCSRBAR and do setup_pci_cmd() on
resume?
quoted
quoted
- k
Hi Kumar,
I did some tests on P1022DS and found out that PCI_CMD and PCICSRBAR
is not lost when system in deep sleep. We don't need to save it.
How do you know you're not just getting lucky?  Maybe it only survives
deep sleep up to a certain duration, or under other specific circumstances.

Can you find anywhere that documents what state will be retained during
deep sleep, or ask an appropriate hardware designer?

-Scott

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
-----Original Message-----
From: Linuxppc-dev [mailto:linuxppc-dev-
bounces+b38951=3Dfreescale.com@lists.ozlabs.org] On Behalf Of Kumar Gala
Sent: Wednesday, August 08, 2012 8:47 PM
To: Jia Hongtao-B38951
Cc: Wood Scott-B07421; <redacted>; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
=20
quoted
quoted
quoted
quoted
quoted
quoted
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off
when
system
quoted
go to deep-sleep state. We save the values of registers before
suspend and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?

- k
Save/restore is the more efficient way. Latency of sleep/wakeup is
one of most important features in power management.

-Hongtao.
I don't think the time it takes to run through setup_pci_atmu() is
that long compared to fsl_pci_resume().

24 more quoted lines


In hibernation mode:

When system come back from hibernation kernel will start up again.
Before loading hibernation image PCI initialization has already done.
Some other hardware also re-init again.

-Hongtao.

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
On Thu, Aug 9, 2012 at 10:52 AM, Jia Hongtao-B38951
[off-list ref] wrote:
quoted
-----Original Message-----
From: Linuxppc-dev [mailto:linuxppc-dev-
bounces+b38951=freescale.com@lists.ozlabs.org] On Behalf Of Kumar Gala
Sent: Wednesday, August 08, 2012 8:47 PM
To: Jia Hongtao-B38951
Cc: Wood Scott-B07421; <redacted>; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
quoted
quoted
quoted
quoted
quoted
quoted
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off
when
system
quoted
go to deep-sleep state. We save the values of registers before
suspend and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?

- k
Save/restore is the more efficient way. Latency of sleep/wakeup is
one of most important features in power management.

-Hongtao.
I don't think the time it takes to run through setup_pci_atmu() is

33 more quoted lines

In current Linux implementation, restoring from hibernation image is
using late initcall.  By that time, all the platform devices are
already initialized like a fresh boot.

- Leo

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCAwOSwgMjAxMiA1OjA0IEFNDQo+IFRvOiBLdW1h
ciBHYWxhDQo+IENjOiBKaWEgSG9uZ3Rhby1CMzg5NTE7IFdvb2QgU2NvdHQtQjA3NDIxOyBsaW51
eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsNCj4gTGkgWWFuZy1SNTg0NzINCj4gU3ViamVjdDog
UmU6IFtQQVRDSCA1LzZdIHBvd2VycGMvZnNsLXBjaTogQWRkIHBjaSBpbmJvdW5kL291dGJvdW5k
IFBNDQo+IHN1cHBvcnQNCj4gDQo+IE9uIDA4LzA4LzIwMTIgMDc6NDYgQU0sIEt1bWFyIEdhbGEg
d3JvdGU6DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBPbiBKdWwgMjQsIDIwMTIsIGF0IDU6MjAgQU0s
IEppYSBIb25ndGFvIHdyb3RlOg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4+IFBvd2VyIHN1cHBseSBm
b3IgUENJIGluYm91bmQvb3V0Ym91bmQgd2luZG93IHJlZ2lzdGVycyBpcyBvZmYNCj4gPj4+Pj4+
Pj4gd2hlbg0KPiA+Pj4+Pj4+IHN5c3RlbQ0KPiA+Pj4+Pj4+PiBnbyB0byBkZWVwLXNsZWVwIHN0
YXRlLiBXZSBzYXZlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIGJlZm9yZQ0KPiA+Pj4+Pj4+PiBz
dXNwZW5kIGFuZCByZXN0b3JlIHRvIHJlZ2lzdGVycyBhZnRlciByZXN1bWUuDQo+ID4+Pj4+Pj4+
DQo+ID4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IEppYW5nIFl1dGFuZyA8YjE0ODk4QGZyZWVzY2Fs
ZS5jb20+DQo+ID4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IEppYSBIb25ndGFvIDxCMzg5NTFAZnJl
ZXNjYWxlLmNvbT4NCj4gPj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTGkgWWFuZyA8bGVvbGlAZnJl
ZXNjYWxlLmNvbT4NCj4gPj4+Pj4+Pj4gLS0tDQo+ID4+Pj4+Pj4+IGFyY2gvcG93ZXJwYy9pbmNs
dWRlL2FzbS9wY2ktYnJpZGdlLmggfCAgICAyICstDQo+ID4+Pj4+Pj4+IGFyY2gvcG93ZXJwYy9z
eXNkZXYvZnNsX3BjaS5jICAgICAgICAgfCAgMTIxDQo+ID4+Pj4+Pj4gKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrDQo+ID4+Pj4+Pj4+IDIgZmlsZXMgY2hhbmdlZCwgMTIyIGluc2Vy
dGlvbnMoKyksIDEgZGVsZXRpb25zKC0pDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBSZW1pbmQgbWUg
d2h5IHdlIG5lZWQgdG8gc2F2ZS9yZXN0b3JlIFBDSSBBVE1Vcywgd2h5IG5vdCBqdXN0DQo+ID4+
Pj4+Pj4gcmUtcGFyc2UgdGhlIGRldmljZSB0cmVlIHRvIHJlc3RvcmU/DQo+ID4+Pj4+Pj4NCj4g
Pj4+Pj4+PiAtIGsNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBTYXZlL3Jlc3RvcmUgaXMgdGhlIG1vcmUg
ZWZmaWNpZW50IHdheS4gTGF0ZW5jeSBvZiBzbGVlcC93YWtldXANCj4gPj4+Pj4+IGlzIG9uZSBv
ZiBtb3N0IGltcG9ydGFudCBmZWF0dXJlcyBpbiBwb3dlciBtYW5hZ2VtZW50Lg0KPiA+Pj4+Pj4N
Cj4gPj4+Pj4+IC1Ib25ndGFvLg0KPiA+Pj4+Pg0KPiA+Pj4+PiBJIGRvbid0IHRoaW5rIHRoZSB0
aW1lIGl0IHRha2VzIHRvIHJ1biB0aHJvdWdoIHNldHVwX3BjaV9hdG11KCkgaXMNCj4gPj4+Pj4g
dGhhdCBsb25nIGNvbXBhcmVkIHRvIGZzbF9wY2lfcmVzdW1lKCkuDQo+ID4+Pj4+DQo+ID4+Pj4+
IEFsc28sIGRvbid0IHlvdSBuZWVkIHRvIHNldHVwIFBDSUNDU1JCQVIgYW5kIGRvIHNldHVwX3Bj
aV9jbWQoKSBvbg0KPiA+Pj4gcmVzdW1lPw0KPiA+Pj4+Pg0KPiA+Pj4+PiAtIGsNCj4gPj4+Pg0K
PiA+Pj4+IEhpIEt1bWFyLA0KPiA+Pj4+IEkgZGlkIHNvbWUgdGVzdHMgb24gUDEwMjJEUyBhbmQg
Zm91bmQgb3V0IHRoYXQgUENJX0NNRCBhbmQNCj4gPj4+PiBQQ0lDU1JCQVIgaXMgbm90IGxvc3Qg
d2hlbiBzeXN0ZW0gaW4gZGVlcCBzbGVlcC4gV2UgZG9uJ3QgbmVlZCB0bw0KPiBzYXZlIGl0Lg0K
PiANCj4gSG93IGRvIHlvdSBrbm93IHlvdSdyZSBub3QganVzdCBnZXR0aW5nIGx1Y2t5PyAgTWF5
YmUgaXQgb25seSBzdXJ2aXZlcw0KPiBkZWVwIHNsZWVwIHVwIHRvIGEgY2VydGFpbiBkdXJhdGlv
biwgb3IgdW5kZXIgb3RoZXIgc3BlY2lmaWMNCj4gY2lyY3Vtc3RhbmNlcy4NCg0KSSB0ZXN0ZWQg
Zm9yIG1vcmUgdGhhbiAxMCBtaW5zIGluIGRlZXAgc2xlZXAgYW5kIHRoZSByZXN1bHQgaXMgdGhl
IHNhbWUuDQoNCj4gDQo+IENhbiB5b3UgZmluZCBhbnl3aGVyZSB0aGF0IGRvY3VtZW50cyB3aGF0
IHN0YXRlIHdpbGwgYmUgcmV0YWluZWQgZHVyaW5nDQo+IGRlZXAgc2xlZXAsIG9yIGFzayBhbiBh
cHByb3ByaWF0ZSBoYXJkd2FyZSBkZXNpZ25lcj8NCj4gDQo+IC1TY290dA0KDQpJIGFncmVlIHdp

4 more lines

Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
On Aug 9, 2012, at 12:05 AM, Li Yang wrote:
On Thu, Aug 9, 2012 at 10:52 AM, Jia Hongtao-B38951
[off-list ref] wrote:
quoted
=20
=20
quoted
-----Original Message-----
From: Linuxppc-dev [mailto:linuxppc-dev-
bounces+b38951=3Dfreescale.com@lists.ozlabs.org] On Behalf Of Kumar =
Gala
quoted
quoted
Sent: Wednesday, August 08, 2012 8:47 PM
To: Jia Hongtao-B38951
Cc: Wood Scott-B07421; <redacted>; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound =
PM
quoted
quoted
support
=20
quoted
quoted
quoted
quoted
quoted
quoted
=20
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
=20
quoted
Power supply for PCI inbound/outbound window registers is off
when
system
quoted
go to deep-sleep state. We save the values of registers =
before
quoted
quoted
quoted
quoted
quoted
quoted
quoted
quoted
quoted
suspend and restore to registers after resume.
=20
Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-
arch/powerpc/sysdev/fsl_pci.c         |  121
+++++++++++++++++++++++++++++++++
quoted
2 files changed, 122 insertions(+), 1 deletions(-)
=20
Remind me why we need to save/restore PCI ATMUs, why not just
re-parse the device tree to restore?
=20
- k
=20
Save/restore is the more efficient way. Latency of sleep/wakeup =
is
quoted
quoted
quoted
quoted
quoted
quoted
quoted
one of most important features in power management.
=20
-Hongtao.
=20
I don't think the time it takes to run through setup_pci_atmu() =
is
quoted
quoted
quoted
quoted
quoted
quoted
that long compared to fsl_pci_resume().
=20
Also, don't you need to setup PCICCSRBAR and do setup_pci_cmd() =
on
quoted
quoted
quoted
quoted
resume?
quoted
quoted
=20
- k
=20
Hi Kumar,
I did some tests on P1022DS and found out that PCI_CMD and =
PCICSRBAR
quoted
quoted
quoted
quoted
quoted
is not lost when system in deep sleep. We don't need to save it.
=20
How does the PCI code know you're entering deep sleep and not
hibernation?
quoted
quoted
=20
-Scott
=20
When system come back from hibernation PCI will be initialized =
again.
quoted
quoted
quoted
So no need to save PCI_CMD and PEXCSRBAR.
=20
-Hongtao.
=20
=20
What do you mean PCI will be initialized again?  What code path are =
you
quoted
quoted
talking about that would set PCI_CMD & PEXCSRBAR?
=20
- k
=20
=20
In hibernation mode:
=20
When system come back from hibernation kernel will start up again.
Before loading hibernation image PCI initialization has already done.
Some other hardware also re-init again.
=20
In current Linux implementation, restoring from hibernation image is
using late initcall.  By that time, all the platform devices are
already initialized like a fresh boot.
=20
- Leo
I ask against, what specific code path (I'd like a call trace) would =
cause PCI_CMD and PEXCSRBAR to be set in the wakeup case?

- k=

RE: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM support

Message details and related content
-----Original Message-----
From: Kumar Gala [mailto:<redacted>]
Sent: Thursday, August 09, 2012 9:08 PM
To: Li Yang-R58472
Cc: Jia Hongtao-B38951; Wood Scott-B07421; <redacted>;
Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound PM
support
=20
=20
On Aug 9, 2012, at 12:05 AM, Li Yang wrote:
=20
quoted
On Thu, Aug 9, 2012 at 10:52 AM, Jia Hongtao-B38951
[off-list ref] wrote:
quoted
quoted
-----Original Message-----
From: Linuxppc-dev [mailto:linuxppc-dev-
bounces+b38951=3Dfreescale.com@lists.ozlabs.org] On Behalf Of Kumar
bounces+Gala
Sent: Wednesday, August 08, 2012 8:47 PM
To: Jia Hongtao-B38951
Cc: Wood Scott-B07421; <redacted>; Li Yang-R58472
Subject: Re: [PATCH 5/6] powerpc/fsl-pci: Add pci inbound/outbound
PM support
quoted
quoted
quoted
quoted
quoted
quoted
On Jul 24, 2012, at 5:20 AM, Jia Hongtao wrote:
quoted
Power supply for PCI inbound/outbound window registers is off
when
system
quoted
go to deep-sleep state. We save the values of registers
before suspend and restore to registers after resume.

Signed-off-by: Jiang Yutang <redacted>
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
arch/powerpc/include/asm/pci-bridge.h |    2 +-

34 more quoted lines

.
quoted
quoted
quoted
quoted
So no need to save PCI_CMD and PEXCSRBAR.

-Hongtao.
What do you mean PCI will be initialized again?  What code path are
you talking about that would set PCI_CMD & PEXCSRBAR?

- k

In hibernation mode:

When system come back from hibernation kernel will start up again.
Before loading hibernation image PCI initialization has already done.
Some other hardware also re-init again.
In current Linux implementation, restoring from hibernation image is
using late initcall.  By that time, all the platform devices are
already initialized like a fresh boot.

- Leo
=20
I ask against, what specific code path (I'd like a call trace) would
cause PCI_CMD and PEXCSRBAR to be set in the wakeup case?
=20
- k
The code path is the same as a fresh boot:
fsl_add_bridge()
	-> setup_pci_cmd() [PCI_CMD is set]
	-> setup_pci_atmu() [PEXCSRBAR is set]

- Hongtao.
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help