Skip to content

Commit

Permalink
powerpc/85xx: separate cpm2 pic init
Browse files Browse the repository at this point in the history
Separate handling of CPM2 PIC initialization to mpc85xx_cpm2_pic_init()
function.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
  • Loading branch information
Dmitry Eremin-Solenikov authored and Kumar Gala committed Nov 24, 2011
1 parent 5d71349 commit 543a07b
Show file tree
Hide file tree
Showing 16 changed files with 89 additions and 157 deletions.
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/85xx/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#
obj-$(CONFIG_SMP) += smp.o

obj-y += mpc85xx_common.o

obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o
obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o
obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o
Expand Down
29 changes: 2 additions & 27 deletions arch/powerpc/platforms/85xx/ksi8560.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <asm/cpm2.h>
#include <sysdev/cpm2_pic.h>

#include "mpc85xx.h"

#define KSI8560_CPLD_HVR 0x04 /* Hardware Version Register */
#define KSI8560_CPLD_PVR 0x08 /* PLD Version Register */
Expand All @@ -54,25 +55,11 @@ static void machine_restart(char *cmd)
for (;;);
}

static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
{
struct irq_chip *chip = irq_desc_get_chip(desc);
int cascade_irq;

while ((cascade_irq = cpm2_get_irq()) >= 0)
generic_handle_irq(cascade_irq);

chip->irq_eoi(&desc->irq_data);
}

static void __init ksi8560_pic_init(void)
{
struct mpic *mpic;
struct resource r;
struct device_node *np;
#ifdef CONFIG_CPM2
int irq;
#endif

np = of_find_node_by_type(NULL, "open-pic");

Expand All @@ -95,19 +82,7 @@ static void __init ksi8560_pic_init(void)

mpic_init(mpic);

#ifdef CONFIG_CPM2
/* Setup CPM2 PIC */
np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
if (np == NULL) {
printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
return;
}
irq = irq_of_parse_and_map(np, 0);

cpm2_pic_init(np);
of_node_put(np);
irq_set_chained_handler(irq, cpm2_cascade);
#endif
mpc85xx_cpm2_pic_init();
}

#ifdef CONFIG_CPM2
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/85xx/mpc8536_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

#include "mpc85xx.h"

void __init mpc8536_ds_pic_init(void)
{
struct mpic *mpic;
Expand Down
9 changes: 9 additions & 0 deletions arch/powerpc/platforms/85xx/mpc85xx.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#ifndef MPC85xx_H
#define MPC85xx_H
#ifdef CONFIG_CPM2
extern void mpc85xx_cpm2_pic_init(void);
#else
static inline void __init mpc85xx_cpm2_pic_init(void) {}
#endif /* CONFIG_CPM2 */

#endif
34 changes: 3 additions & 31 deletions arch/powerpc/platforms/85xx/mpc85xx_ads.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
#include <sysdev/cpm2_pic.h>
#endif

#include "mpc85xx.h"

#ifdef CONFIG_PCI
static int mpc85xx_exclude_device(struct pci_controller *hose,
u_char bus, u_char devfn)
Expand All @@ -46,29 +48,11 @@ static int mpc85xx_exclude_device(struct pci_controller *hose,
}
#endif /* CONFIG_PCI */

#ifdef CONFIG_CPM2

static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
{
struct irq_chip *chip = irq_desc_get_chip(desc);
int cascade_irq;

while ((cascade_irq = cpm2_get_irq()) >= 0)
generic_handle_irq(cascade_irq);

chip->irq_eoi(&desc->irq_data);
}

#endif /* CONFIG_CPM2 */

static void __init mpc85xx_ads_pic_init(void)
{
struct mpic *mpic;
struct resource r;
struct device_node *np = NULL;
#ifdef CONFIG_CPM2
int irq;
#endif

np = of_find_node_by_type(np, "open-pic");
if (!np) {
Expand All @@ -90,19 +74,7 @@ static void __init mpc85xx_ads_pic_init(void)

mpic_init(mpic);

#ifdef CONFIG_CPM2
/* Setup CPM2 PIC */
np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
if (np == NULL) {
printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
return;
}
irq = irq_of_parse_and_map(np, 0);

cpm2_pic_init(np);
of_node_put(np);
irq_set_chained_handler(irq, cpm2_cascade);
#endif
mpc85xx_cpm2_pic_init();
}

/*
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/85xx/mpc85xx_cds.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

#include "mpc85xx.h"

/* CADMUS info */
/* xxx - galak, move into device tree */
#define CADMUS_BASE (0xf8004000)
Expand Down
49 changes: 49 additions & 0 deletions arch/powerpc/platforms/85xx/mpc85xx_common.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Routines common to most mpc85xx-based boards.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/of_platform.h>

#include <sysdev/cpm2_pic.h>

#include "mpc85xx.h"

#ifdef CONFIG_CPM2
static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
{
struct irq_chip *chip = irq_desc_get_chip(desc);
int cascade_irq;

while ((cascade_irq = cpm2_get_irq()) >= 0)
generic_handle_irq(cascade_irq);

chip->irq_eoi(&desc->irq_data);
}


void __init mpc85xx_cpm2_pic_init(void)
{
struct device_node *np;
int irq;

/* Setup CPM2 PIC */
np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
if (np == NULL) {
printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
return;
}
irq = irq_of_parse_and_map(np, 0);
if (irq == NO_IRQ) {
of_node_put(np);
printk(KERN_ERR "PIC init: got no IRQ for cpm cascade\n");
return;
}

cpm2_pic_init(np);
of_node_put(np);
irq_set_chained_handler(irq, cpm2_cascade);
}
#endif
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/85xx/mpc85xx_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

#include "mpc85xx.h"

#undef DEBUG

#ifdef DEBUG
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/85xx/mpc85xx_mds.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
#include <asm/mpic.h>
#include <asm/swiotlb.h>

#include "mpc85xx.h"

#undef DEBUG
#ifdef DEBUG
#define DBG(fmt...) udbg_printf(fmt)
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/85xx/mpc85xx_rdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

#include "mpc85xx.h"

#undef DEBUG

#ifdef DEBUG
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/85xx/p1022_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
#include <sysdev/fsl_pci.h>
#include <asm/fsl_guts.h>

#include "mpc85xx.h"

#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)

/*
Expand Down
34 changes: 3 additions & 31 deletions arch/powerpc/platforms/85xx/sbc8560.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,34 +32,18 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

#include "mpc85xx.h"

#ifdef CONFIG_CPM2
#include <asm/cpm2.h>
#include <sysdev/cpm2_pic.h>
#endif

#ifdef CONFIG_CPM2

static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
{
struct irq_chip *chip = irq_desc_get_chip(desc);
int cascade_irq;

while ((cascade_irq = cpm2_get_irq()) >= 0)
generic_handle_irq(cascade_irq);

chip->irq_eoi(&desc->irq_data);
}

#endif /* CONFIG_CPM2 */

static void __init sbc8560_pic_init(void)
{
struct mpic *mpic;
struct resource r;
struct device_node *np = NULL;
#ifdef CONFIG_CPM2
int irq;
#endif

np = of_find_node_by_type(np, "open-pic");
if (!np) {
Expand All @@ -81,19 +65,7 @@ static void __init sbc8560_pic_init(void)

mpic_init(mpic);

#ifdef CONFIG_CPM2
/* Setup CPM2 PIC */
np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
if (np == NULL) {
printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
return;
}
irq = irq_of_parse_and_map(np, 0);

cpm2_pic_init(np);
of_node_put(np);
irq_set_chained_handler(irq, cpm2_cascade);
#endif
mpc85xx_cpm2_pic_init();
}

/*
Expand Down
1 change: 1 addition & 0 deletions arch/powerpc/platforms/85xx/socrates.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

#include "mpc85xx.h"
#include "socrates_fpga_pic.h"

static void __init socrates_pic_init(void)
Expand Down
37 changes: 3 additions & 34 deletions arch/powerpc/platforms/85xx/stx_gp3.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,30 +40,17 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

#include "mpc85xx.h"

#ifdef CONFIG_CPM2
#include <asm/cpm2.h>
#include <sysdev/cpm2_pic.h>

static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
{
struct irq_chip *chip = irq_desc_get_chip(desc);
int cascade_irq;

while ((cascade_irq = cpm2_get_irq()) >= 0)
generic_handle_irq(cascade_irq);

chip->irq_eoi(&desc->irq_data);
}
#endif /* CONFIG_CPM2 */

static void __init stx_gp3_pic_init(void)
{
struct mpic *mpic;
struct resource r;
struct device_node *np;
#ifdef CONFIG_CPM2
int irq;
#endif

np = of_find_node_by_type(NULL, "open-pic");
if (!np) {
Expand All @@ -85,25 +72,7 @@ static void __init stx_gp3_pic_init(void)

mpic_init(mpic);

#ifdef CONFIG_CPM2
/* Setup CPM2 PIC */
np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
if (np == NULL) {
printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
return;
}
irq = irq_of_parse_and_map(np, 0);

if (irq == NO_IRQ) {
of_node_put(np);
printk(KERN_ERR "PIC init: got no IRQ for cpm cascade\n");
return;
}

cpm2_pic_init(np);
of_node_put(np);
irq_set_chained_handler(irq, cpm2_cascade);
#endif
mpc85xx_cpm2_pic_init();
}

/*
Expand Down
Loading

0 comments on commit 543a07b

Please sign in to comment.