Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72c916ae authored by Xie Xiaobo's avatar Xie Xiaobo Committed by Scott Wood
Browse files

powerpc/85xx: Add QE common init function



Define a QE init function in common file, and avoid
the same codes being duplicated in board files.

Signed-off-by: default avatarXie Xiaobo <X.Xie@freescale.com>
Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
parent 3d73eb69
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/of_irq.h>
#include <linux/of_platform.h>

#include <asm/qe.h>
#include <sysdev/cpm2_pic.h>

#include "mpc85xx.h"
@@ -82,3 +83,40 @@ void __init mpc85xx_cpm2_pic_init(void)
	irq_set_chained_handler(irq, cpm2_cascade);
}
#endif

#ifdef CONFIG_QUICC_ENGINE
void __init mpc85xx_qe_init(void)
{
	struct device_node *np;

	np = of_find_compatible_node(NULL, NULL, "fsl,qe");
	if (!np) {
		np = of_find_node_by_name(NULL, "qe");
		if (!np) {
			pr_err("%s: Could not find Quicc Engine node\n",
					__func__);
			return;
		}
	}

	if (!of_device_is_available(np)) {
		of_node_put(np);
		return;
	}

	qe_reset();
	of_node_put(np);

	np = of_find_node_by_name(NULL, "par_io");
	if (np) {
		struct device_node *ucc;

		par_io_init(np);
		of_node_put(np);

		for_each_node_by_name(ucc, "ucc")
			par_io_of_config(ucc);

	}
}
#endif
+6 −0
Original line number Diff line number Diff line
@@ -8,4 +8,10 @@ extern void mpc85xx_cpm2_pic_init(void);
static inline void __init mpc85xx_cpm2_pic_init(void) {}
#endif /* CONFIG_CPM2 */

#ifdef CONFIG_QUICC_ENGINE
extern void mpc85xx_qe_init(void);
#else
static inline void __init mpc85xx_qe_init(void) {}
#endif

#endif
+2 −27
Original line number Diff line number Diff line
/*
 * Copyright (C) 2006-2010, 2012 Freescale Semiconductor, Inc.
 * Copyright (C) 2006-2010, 2012-2013 Freescale Semiconductor, Inc.
 * All rights reserved.
 *
 * Author: Andy Fleming <afleming@freescale.com>
@@ -238,32 +238,7 @@ static void __init mpc85xx_mds_qe_init(void)
{
	struct device_node *np;

	np = of_find_compatible_node(NULL, NULL, "fsl,qe");
	if (!np) {
		np = of_find_node_by_name(NULL, "qe");
		if (!np)
			return;
	}

	if (!of_device_is_available(np)) {
		of_node_put(np);
		return;
	}

	qe_reset();
	of_node_put(np);

	np = of_find_node_by_name(NULL, "par_io");
	if (np) {
		struct device_node *ucc;

		par_io_init(np);
		of_node_put(np);

		for_each_node_by_name(ucc, "ucc")
			par_io_of_config(ucc);
	}

	mpc85xx_qe_init();
	mpc85xx_mds_reset_ucc_phys();

	if (machine_is(p1021_mds)) {
+2 −23
Original line number Diff line number Diff line
/*
 * MPC85xx RDB Board Setup
 *
 * Copyright 2009,2012 Freescale Semiconductor Inc.
 * Copyright 2009,2012-2013 Freescale Semiconductor Inc.
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
@@ -98,26 +98,7 @@ static void __init mpc85xx_rdb_setup_arch(void)
	fsl_pci_assign_primary();

#ifdef CONFIG_QUICC_ENGINE
	np = of_find_compatible_node(NULL, NULL, "fsl,qe");
	if (!np) {
		pr_err("%s: Could not find Quicc Engine node\n", __func__);
		goto qe_fail;
	}

	qe_reset();
	of_node_put(np);

	np = of_find_node_by_name(NULL, "par_io");
	if (np) {
		struct device_node *ucc;

		par_io_init(np);
		of_node_put(np);

		for_each_node_by_name(ucc, "ucc")
			par_io_of_config(ucc);

	}
	mpc85xx_qe_init();
#if defined(CONFIG_UCC_GETH) || defined(CONFIG_SERIAL_QE)
	if (machine_is(p1025_rdb)) {

@@ -148,8 +129,6 @@ static void __init mpc85xx_rdb_setup_arch(void)

	}
#endif

qe_fail:
#endif	/* CONFIG_QUICC_ENGINE */

	printk(KERN_INFO "MPC85xx RDB board from Freescale Semiconductor\n");