powerpc/83xx: Fix few build errors with CONFIG_QUICC_ENGINE=n
Subsystems (2)
PATCH 1/1 powerpc/83xx: Fix few build errors with CONFIG_QUICC_ENGINE=n
Some 83xx boards were not ready for the optional QUICC Engine support.
This patch fixes following build errors:
arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb308): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb334): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb408): undefined reference to `qe_ic_get_high_irq'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb478): undefined reference to `qe_ic_get_low_irq'arch/powerpc/platforms/built-in.o: In function `mpc832x_spi_init':
mpc832x_rdb.c:(.init.text+0x574c): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x5768): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x5784): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x57a0): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x57bc): undefined reference to par_io_config_pin' arch/powerpc/platforms/built-in.o:mpc832x_rdb.c:(.init.text+0x57d8): more undefined references to par_io_config_pin' follow arch/powerpc/platforms/built-in.o: In function `mpc836x_rdk_init_IRQ':
mpc836x_rdk.c:(.init.text+0x5e84): undefined reference to qe_ic_init' arch/powerpc/platforms/built-in.o: In function mpc836x_rdk_setup_arch':
mpc836x_rdk.c:(.init.text+0x5f10): undefined reference to `qe_reset'
make: *** [.tmp_vmlinux1] Error 1
---
This patch implements traditional way of !QE case handling. Alternative version is coming (w/o ifdefs in the board files).
p.s. I don't know if it is 2.6.28 material...
arch/powerpc/platforms/83xx/mpc832x_rdb.c | 3 ++- arch/powerpc/platforms/83xx/mpc836x_rdk.c | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-)
arch/powerpc/platforms/83xx/mpc832x_rdb.c +2 -1
@@ -38,6 +38,7 @@ #define DBG(fmt...)#endif +#ifdef CONFIG_QUICC_ENGINE static void mpc83xx_spi_activate_cs (u8 cs,u8 polarity) {pr_debug ("%s %d %d\n" , __func__, cs, polarity);
@@ -77,8 +78,8 @@ static int __init mpc832x_spi_init(void) mpc83xx_spi_activate_cs, mpc83xx_spi_deactivate_cs); } -machine_device_initcall (mpc832x_rdb, mpc832x_spi_init); +#endif /* CONFIG_QUICC_ENGINE */ /* ************************************************************************ *
arch/powerpc/platforms/83xx/mpc836x_rdk.c +4 -2
@@ -51,8 +51,9 @@ static void __init mpc836x_rdk_setup_arch(void)for_each_compatible_node (np,"pci" ,"fsl,mpc8349-pci" )mpc83xx_add_bridge (np);#endif - +#ifdef CONFIG_QUICC_ENGINE qe_reset (); +#endif }static void __init mpc836x_rdk_init_IRQ (void )
@@ -71,13 +72,14 @@ static void __init mpc836x_rdk_init_IRQ(void)*/ ipic_set_default_priority ();of_node_put (np); - +#ifdef CONFIG_QUICC_ENGINE np =of_find_compatible_node (NULL ,NULL ,"fsl,qe-ic" );if (!np)return ;qe_ic_init (np,0 , qe_ic_cascade_low_ipic, qe_ic_cascade_high_ipic);of_node_put (np); +#endif }/*
Signature · 1 line
1.5.6.5
PATCH 1/1 powerpc/qe: Fix few build errors with CONFIG_QUICC_ENGINE=n
Some 83xx boards were not ready for the optional QUICC Engine support.
This patch fixes following build errors:
arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb308): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb334): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb408): undefined reference to `qe_ic_get_high_irq'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb478): undefined reference to `qe_ic_get_low_irq'arch/powerpc/platforms/built-in.o: In function `mpc832x_spi_init':
mpc832x_rdb.c:(.init.text+0x574c): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x5768): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x5784): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x57a0): undefined reference to par_io_config_pin' mpc832x_rdb.c:(.init.text+0x57bc): undefined reference to par_io_config_pin' arch/powerpc/platforms/built-in.o:mpc832x_rdb.c:(.init.text+0x57d8): more undefined references to par_io_config_pin' follow arch/powerpc/platforms/built-in.o: In function `mpc836x_rdk_init_IRQ':
mpc836x_rdk.c:(.init.text+0x5e84): undefined reference to qe_ic_init' arch/powerpc/platforms/built-in.o: In function mpc836x_rdk_setup_arch':
mpc836x_rdk.c:(.init.text+0x5f10): undefined reference to `qe_reset'
make: *** [.tmp_vmlinux1] Error 1
--- arch/powerpc/include/asm/qe.h | 16 ++++++++++++++-- arch/powerpc/include/asm/qe_ic.h | 21 +++++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-)
arch/powerpc/include/asm/qe.h +14 -2
@@ -86,7 +86,11 @@ static inline bool qe_clock_is_brg(enum qe_clock clk)extern spinlock_t cmxgcr_lock;/* Export QE common operations */ +#ifdef CONFIG_QUICC_ENGINE extern void __init qe_reset (void ); +#else +static inline void qe_reset (void ) {} +#endif /* QE PIO */ #define QE_PIO_PINS 32
@@ -103,16 +107,24 @@ struct qe_pio_regs {#endif }; -extern int par_io_init (struct device_node *np); -extern int par_io_of_config (struct device_node *np);#define QE_PIO_DIR_IN 2#define QE_PIO_DIR_OUT 1extern void __par_io_config_pin (struct qe_pio_regs __iomem *par_io,u8 pin,int dir,int open_drain,int assignment,int has_irq); +#ifdef CONFIG_QUICC_ENGINE +extern int par_io_init (struct device_node *np); +extern int par_io_of_config (struct device_node *np);extern int par_io_config_pin (u8 port,u8 pin,int dir,int open_drain,int assignment,int has_irq);extern int par_io_data_set (u8 port,u8 pin,u8 val); +#else +static inline int par_io_init (struct device_node *np) {return -ENOSYS ; } +static inline int par_io_of_config (struct device_node *np) {return -ENOSYS ; } +static inline int par_io_config_pin (u8 port,u8 pin,int dir,int open_drain, +int assignment,int has_irq) {return -ENOSYS ; } +static inline int par_io_data_set (u8 port,u8 pin,u8 val) {return -ENOSYS ; } +#endif /* CONFIG_QUICC_ENGINE */ /* * Pin multiplexing functions.
arch/powerpc/include/asm/qe_ic.h +17 -4
@@ -17,6 +17,9 @@#include <linux/irq.h> +struct device_node ; +struct qe_ic ; +#define NUM_OF_QE_IC_GROUPS 6/* Flags when we init the QE IC */
@@ -54,17 +57,27 @@ enum qe_ic_grp_id {QE_IC_GRP_RISCB /* QE interrupt controller RISC group B */ }; +#ifdef CONFIG_QUICC_ENGINE void qe_ic_init (struct device_node *node,unsigned int flags,void (*low_handler)(unsigned int irq,struct irq_desc *desc),void (*high_handler)(unsigned int irq,struct irq_desc *desc)); +unsigned int qe_ic_get_low_irq (struct qe_ic *qe_ic); +unsigned int qe_ic_get_high_irq (struct qe_ic *qe_ic); +#else +static inline void qe_ic_init (struct device_node *node,unsigned int flags, +void (*low_handler)(unsigned int irq,struct irq_desc *desc), +void (*high_handler)(unsigned int irq,struct irq_desc *desc)) +{} +static inline unsigned int qe_ic_get_low_irq (struct qe_ic *qe_ic) +{return 0 ; } +static inline unsigned int qe_ic_get_high_irq (struct qe_ic *qe_ic) +{return 0 ; } +#endif /* CONFIG_QUICC_ENGINE */ +void qe_ic_set_highest_priority (unsigned int virq,int high);int qe_ic_set_priority (unsigned int virq,unsigned int priority);int qe_ic_set_high_priority (unsigned int virq,unsigned int priority,int high); -struct qe_ic ; -unsigned int qe_ic_get_low_irq (struct qe_ic *qe_ic); -unsigned int qe_ic_get_high_irq (struct qe_ic *qe_ic); -static inline void qe_ic_cascade_low_ipic (unsigned int irq,struct irq_desc *desc) {
Signature · 1 line
1.5.6.5
Kumar Gala
AppliedRe: [PATCH] powerpc/qe: Fix few build errors with CONFIG_QUICC_ENGINE=n
Quoted 25 lines · Anton Vorontsov
Some 83xx boards were not ready for the optional QUICC Engine support.
This patch fixes following build errors:
arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb308): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb334): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb408): undefined reference to `qe_ic_get_high_irq'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb478): undefined reference to `qe_ic_get_low_irq'arch/powerpc/platforms/built-in.o: In function `mpc832x_spi_init':
mpc832x_rdb.c:(.init.text+0x574c): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5768): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5784): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57a0): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57bc): undefined reference topar_io_config_pin' arch/powerpc/platforms/built-in.o:mpc832x_rdb.c:(.init.text+0x57d8): more undefined references topar_io_config_pin' followarch/powerpc/platforms/built-in.o: In function `mpc836x_rdk_init_IRQ':
mpc836x_rdk.c:(.init.text+0x5e84): undefined reference toqe_ic_init' arch/powerpc/platforms/built-in.o: In functionmpc836x_rdk_setup_arch':
mpc836x_rdk.c:(.init.text+0x5f10): undefined reference to `qe_reset'
make: *** [.tmp_vmlinux1] Error 1
Quoted 5 lines
Signed-off-by Anton Vorontsov <[email protected]>---
arch/powerpc/include/asm/qe.h | 16 ++++++++++++++-- arch/powerpc/include/asm/qe_ic.h | 21 +++++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-)
applied to next
- k
Quoted 8 lines · Anton Vorontsov
This patch implements traditional way of !QE case handling. Alternative version is coming (w/o ifdefs in the board files).
p.s. I don't know if it is 2.6.28 material...
arch/powerpc/platforms/83xx/mpc832x_rdb.c | 3 ++- arch/powerpc/platforms/83xx/mpc836x_rdk.c | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-)
this doesn't seem critical right now so I'd say we wait for .29
- k
Quoted 1 line · Kumar Gala
this doesn't seem critical right now so I'd say we wait for .29
I agree. None of the defconfigs or default behavior expose this bug. I don't expect anyone to actually turn off the QE in a real-world situation.
Signature · 2 lines
Timur Tabi Linux kernel developer at Freescale
Quoted 25 lines · Anton Vorontsov
Some 83xx boards were not ready for the optional QUICC Engine support.
This patch fixes following build errors:
arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb308): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb334): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb408): undefined reference to `qe_ic_get_high_irq'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb478): undefined reference to `qe_ic_get_low_irq'arch/powerpc/platforms/built-in.o: In function `mpc832x_spi_init':
mpc832x_rdb.c:(.init.text+0x574c): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5768): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5784): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57a0): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57bc): undefined reference topar_io_config_pin' arch/powerpc/platforms/built-in.o:mpc832x_rdb.c:(.init.text+0x57d8): more undefined references topar_io_config_pin' followarch/powerpc/platforms/built-in.o: In function `mpc836x_rdk_init_IRQ':
mpc836x_rdk.c:(.init.text+0x5e84): undefined reference toqe_ic_init' arch/powerpc/platforms/built-in.o: In functionmpc836x_rdk_setup_arch':
mpc836x_rdk.c:(.init.text+0x5f10): undefined reference to `qe_reset'
make: *** [.tmp_vmlinux1] Error 1
Quoted 7 lines
Signed-off-by Anton Vorontsov <[email protected]>---
This patch implements traditional way of !QE case handling. Alternative version is coming (w/o ifdefs in the board files).
p.s. I don't know if it is 2.6.28 material...
what's the state of this patch vs the alternate version?
- k
On Tue, Dec 16, 2008 at 12:18:07PM -0600, Kumar Gala wrote:
[..]
Quoted 6 lines
Quoted 4 lines
This patch implements traditional way of !QE case handling. Alternative version is coming (w/o ifdefs in the board files).
p.s. I don't know if it is 2.6.28 material...
what's the state of this patch vs the alternate version?
Pros of the alternative version:
- No #ifdefs in .c files.
Cons of the alternative version:
- For this code (assuming QE=n):
if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) par_io_init(np);
GCC can still issue the of_find_node_by_name() call. (I wonder if there is any way to tell gcc that particular function doesn't produce any side-effects so that gcc can optimize it away too).
It's up to you to decide which version you want to merge.
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
Quoted 3 lines · Anton Vorontsov
GCC can still issue the
of_find_node_by_name()call. (I wonder if there is any way to tell gcc that particular function doesn't produce any side-effects so that gcc can optimize it away too).
__attribute__((pure))
-Scott
Quoted 6 lines · Scott Wood
Quoted 3 lines · Anton Vorontsov
GCC can still issue the
of_find_node_by_name()call. (I wonder if there is any way to tell gcc that particular function doesn't produce any side-effects so that gcc can optimize it away too).__attribute__((pure))
Ah, thanks!
But I forgot that of_find_node_by_name() and friends aren't actually "pure", they're getting the node. :-(
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
Quoted 6 lines · Anton Vorontsov
Quoted 5 lines · Scott Wood
Quoted 3 lines · Anton Vorontsov
GCC can still issue the
of_find_node_by_name()call. (I wonder if there is any way to tell gcc that particular function doesn't produce any side-effects so that gcc can optimize it away too).
Quoted 6 lines
Quoted 1 line
__attribute__((pure))
Ah, thanks!
But I forgot that
of_find_node_by_name()and friends aren't actually "pure", they're getting the node. :-(
Looking at include/linux/compiler-gcc.h I'm guessing the proper way to use it is __pure & inclusion of compiler.h
- k
Quoted 25 lines · Anton Vorontsov
Some 83xx boards were not ready for the optional QUICC Engine support.
This patch fixes following build errors:
arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb308): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb334): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb408): undefined reference to `qe_ic_get_high_irq'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb478): undefined reference to `qe_ic_get_low_irq'arch/powerpc/platforms/built-in.o: In function `mpc832x_spi_init':
mpc832x_rdb.c:(.init.text+0x574c): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5768): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5784): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57a0): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57bc): undefined reference topar_io_config_pin' arch/powerpc/platforms/built-in.o:mpc832x_rdb.c:(.init.text+0x57d8): more undefined references topar_io_config_pin' followarch/powerpc/platforms/built-in.o: In function `mpc836x_rdk_init_IRQ':
mpc836x_rdk.c:(.init.text+0x5e84): undefined reference toqe_ic_init' arch/powerpc/platforms/built-in.o: In functionmpc836x_rdk_setup_arch':
mpc836x_rdk.c:(.init.text+0x5f10): undefined reference to `qe_reset'
make: *** [.tmp_vmlinux1] Error 1
Quoted 2 lines
Signed-off-by Anton Vorontsov <[email protected]>---
Kumar,
After all I think we should apply this version.
Soon I'll send cleanup patches for all QE boards to remove need for most #ifdefs.
But so far let's be consistent and do what other boards are doing.
Thanks,
Quoted 68 lines
This patch implements traditional way of !QE case handling. Alternative version is coming (w/o ifdefs in the board files).
p.s. I don't know if it is 2.6.28 material...
arch/powerpc/platforms/83xx/mpc832x_rdb.c | 3 ++- arch/powerpc/platforms/83xx/mpc836x_rdk.c | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-)arch/powerpc/platforms/83xx/mpc832x_rdb.c +2
-1@@ -38,6 +38,7 @@ #define DBG(fmt...)#endif +#ifdef CONFIG_QUICC_ENGINE static void mpc83xx_spi_activate_cs (u8 cs,u8 polarity) {pr_debug ("%s %d %d\n" , __func__, cs, polarity);@@ -77,8 +78,8 @@ static int __init mpc832x_spi_init(void) mpc83xx_spi_activate_cs, mpc83xx_spi_deactivate_cs); } -machine_device_initcall (mpc832x_rdb, mpc832x_spi_init); +#endif /* CONFIG_QUICC_ENGINE */ /* ************************************************************************ * arch/powerpc/platforms/83xx/mpc836x_rdk.c +4
-2@@ -51,8 +51,9 @@ static void __init mpc836x_rdk_setup_arch(void)for_each_compatible_node (np,"pci" ,"fsl,mpc8349-pci" )mpc83xx_add_bridge (np);#endif - +#ifdef CONFIG_QUICC_ENGINE qe_reset (); +#endif }static void __init mpc836x_rdk_init_IRQ (void )@@ -71,13 +72,14 @@ static void __init mpc836x_rdk_init_IRQ(void)*/ ipic_set_default_priority ();of_node_put (np); - +#ifdef CONFIG_QUICC_ENGINE np =of_find_compatible_node (NULL ,NULL ,"fsl,qe-ic" );if (!np)return ;qe_ic_init (np,0 , qe_ic_cascade_low_ipic, qe_ic_cascade_high_ipic);of_node_put (np); +#endif }/* Signature · 5 lines
1.5.6.5 _______________________________________________ Linuxppc-dev mailing list [email protected] https://ozlabs.org/mailman/listinfo/linuxppc-dev
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
Kumar Gala
AppliedQuoted 28 lines · Anton Vorontsov
Some 83xx boards were not ready for the optional QUICC Engine support.
This patch fixes following build errors:
arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb308): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb334): undefined reference to `par_io_data_set'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb408): undefined reference to `qe_ic_get_high_irq'arch/powerpc/platforms/built-in.o: In function `flush_disable_caches':
(.text+0xb478): undefined reference to `qe_ic_get_low_irq'arch/powerpc/platforms/built-in.o: In function `mpc832x_spi_init':
mpc832x_rdb.c:(.init.text+0x574c): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5768): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x5784): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57a0): undefined reference topar_io_config_pin' mpc832x_rdb.c:(.init.text+0x57bc): undefined reference topar_io_config_pin' arch/powerpc/platforms/built-in.o:mpc832x_rdb.c:(.init.text+0x57d8): more undefined references topar_io_config_pin' followarch/powerpc/platforms/built-in.o: In function `mpc836x_rdk_init_IRQ':
mpc836x_rdk.c:(.init.text+0x5e84): undefined reference toqe_ic_init' arch/powerpc/platforms/built-in.o: In functionmpc836x_rdk_setup_arch':
mpc836x_rdk.c:(.init.text+0x5f10): undefined reference to `qe_reset'
make: *** [.tmp_vmlinux1] Error 1Signed-off-by Anton Vorontsov <[email protected]>---
Quoted 8 lines
This patch implements traditional way of !QE case handling. Alternative version is coming (w/o ifdefs in the board files).
p.s. I don't know if it is 2.6.28 material...
arch/powerpc/platforms/83xx/mpc832x_rdb.c | 3 ++- arch/powerpc/platforms/83xx/mpc836x_rdk.c | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-)
applied to next
- k