Browse Source

of: Only compile OF_DYNAMIC on PowerPC pseries and iseries

Only two architectures use the OF node reference counting and reclaim bits.
There is no need to compile it for the rest of the PowerPC platforms or for
any of the other architectures.  This patch makes iseries and pseries
select CONFIG_OF_DYNAMIC, and makes it default to off for everything else.

It is still safe to turn on CONFIG_OF_DYNAMIC on all architectures, it just
isn't necessary.

v2: Also select OF_DYNAMIC for PPC_CHROMA and MPC885ADS as reported by Michael
    Meuling

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Jimi Xenidis <jimix@pobox.com> (for PPC_CHROMA bug fix)
Cc: Rob Herring <rob.herring@calxeda.com>
Grant Likely 13 years ago
parent
commit
0f22dd395f

+ 1 - 0
arch/powerpc/platforms/8xx/Kconfig

@@ -26,6 +26,7 @@ config MPC86XADS
 config MPC885ADS
 config MPC885ADS
 	bool "MPC885ADS"
 	bool "MPC885ADS"
 	select CPM1
 	select CPM1
+	select OF_DYNAMIC
 	help
 	help
 	  Freescale Semiconductor MPC885 Application Development System (ADS).
 	  Freescale Semiconductor MPC885 Application Development System (ADS).
 	  Also known as DUET.
 	  Also known as DUET.

+ 1 - 0
arch/powerpc/platforms/iseries/Kconfig

@@ -1,6 +1,7 @@
 config PPC_ISERIES
 config PPC_ISERIES
 	bool "IBM Legacy iSeries"
 	bool "IBM Legacy iSeries"
 	depends on PPC64 && PPC_BOOK3S
 	depends on PPC64 && PPC_BOOK3S
+	select OF_DYNAMIC
 	select PPC_SMP_MUXED_IPI
 	select PPC_SMP_MUXED_IPI
 	select PPC_INDIRECT_PIO
 	select PPC_INDIRECT_PIO
 	select PPC_INDIRECT_MMIO
 	select PPC_INDIRECT_MMIO

+ 1 - 0
arch/powerpc/platforms/pseries/Kconfig

@@ -3,6 +3,7 @@ config PPC_PSERIES
 	bool "IBM pSeries & new (POWER5-based) iSeries"
 	bool "IBM pSeries & new (POWER5-based) iSeries"
 	select HAVE_PCSPKR_PLATFORM
 	select HAVE_PCSPKR_PLATFORM
 	select MPIC
 	select MPIC
+	select OF_DYNAMIC
 	select PCI_MSI
 	select PCI_MSI
 	select PPC_XICS
 	select PPC_XICS
 	select PPC_ICP_NATIVE
 	select PPC_ICP_NATIVE

+ 1 - 0
arch/powerpc/platforms/wsp/Kconfig

@@ -25,6 +25,7 @@ config PPC_CHROMA
 	bool "PowerEN PCIe Chroma Card"
 	bool "PowerEN PCIe Chroma Card"
 	select EPAPR_BOOT
 	select EPAPR_BOOT
 	select PPC_WSP
 	select PPC_WSP
+	select OF_DYNAMIC
 	default y
 	default y
 
 
 endmenu
 endmenu

+ 3 - 2
drivers/of/Kconfig

@@ -35,9 +35,10 @@ config OF_EARLY_FLATTREE
 config OF_PROMTREE
 config OF_PROMTREE
 	bool
 	bool
 
 
+# Hardly any platforms need this.  It is safe to select, but only do so if you
+# need it.
 config OF_DYNAMIC
 config OF_DYNAMIC
-	def_bool y
-	depends on PPC_OF
+	bool
 
 
 config OF_ADDRESS
 config OF_ADDRESS
 	def_bool y
 	def_bool y

+ 2 - 2
drivers/of/base.c

@@ -88,7 +88,7 @@ int of_n_size_cells(struct device_node *np)
 }
 }
 EXPORT_SYMBOL(of_n_size_cells);
 EXPORT_SYMBOL(of_n_size_cells);
 
 
-#if !defined(CONFIG_SPARC)   /* SPARC doesn't do ref counting (yet) */
+#if defined(CONFIG_OF_DYNAMIC)
 /**
 /**
  *	of_node_get - Increment refcount of a node
  *	of_node_get - Increment refcount of a node
  *	@node:	Node to inc refcount, NULL is supported to
  *	@node:	Node to inc refcount, NULL is supported to
@@ -161,7 +161,7 @@ void of_node_put(struct device_node *node)
 		kref_put(&node->kref, of_node_release);
 		kref_put(&node->kref, of_node_release);
 }
 }
 EXPORT_SYMBOL(of_node_put);
 EXPORT_SYMBOL(of_node_put);
-#endif /* !CONFIG_SPARC */
+#endif /* CONFIG_OF_DYNAMIC */
 
 
 struct property *of_find_property(const struct device_node *np,
 struct property *of_find_property(const struct device_node *np,
 				  const char *name,
 				  const char *name,

+ 6 - 8
include/linux/of.h

@@ -72,19 +72,17 @@ struct of_phandle_args {
 	uint32_t args[MAX_PHANDLE_ARGS];
 	uint32_t args[MAX_PHANDLE_ARGS];
 };
 };
 
 
-#if defined(CONFIG_SPARC) || !defined(CONFIG_OF)
+#ifdef CONFIG_OF_DYNAMIC
+extern struct device_node *of_node_get(struct device_node *node);
+extern void of_node_put(struct device_node *node);
+#else /* CONFIG_OF_DYNAMIC */
 /* Dummy ref counting routines - to be implemented later */
 /* Dummy ref counting routines - to be implemented later */
 static inline struct device_node *of_node_get(struct device_node *node)
 static inline struct device_node *of_node_get(struct device_node *node)
 {
 {
 	return node;
 	return node;
 }
 }
-static inline void of_node_put(struct device_node *node)
-{
-}
-#else
-extern struct device_node *of_node_get(struct device_node *node);
-extern void of_node_put(struct device_node *node);
-#endif
+static inline void of_node_put(struct device_node *node) { }
+#endif /* !CONFIG_OF_DYNAMIC */
 
 
 #ifdef CONFIG_OF
 #ifdef CONFIG_OF