2012-02-28 00:07:13 +08:00
|
|
|
/*
|
|
|
|
* Copyright 2012 (C), Jason Cooper <jason@lakedaemon.net>
|
|
|
|
*
|
|
|
|
* arch/arm/mach-kirkwood/board-dt.c
|
|
|
|
*
|
2012-03-15 08:52:31 +08:00
|
|
|
* Flattened Device Tree board initialization
|
2012-02-28 00:07:13 +08:00
|
|
|
*
|
|
|
|
* This file is licensed under the terms of the GNU General Public
|
|
|
|
* License version 2. This program is licensed "as is" without any
|
|
|
|
* warranty of any kind, whether express or implied.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/of.h>
|
|
|
|
#include <linux/of_platform.h>
|
2012-11-17 22:22:28 +08:00
|
|
|
#include <linux/clk-provider.h>
|
|
|
|
#include <linux/clk/mvebu.h>
|
2012-04-29 21:40:42 +08:00
|
|
|
#include <linux/kexec.h>
|
2012-02-28 00:07:13 +08:00
|
|
|
#include <asm/mach/arch.h>
|
2012-03-01 01:39:08 +08:00
|
|
|
#include <asm/mach/map.h>
|
|
|
|
#include <mach/bridge-regs.h>
|
2012-11-17 22:22:28 +08:00
|
|
|
#include <linux/platform_data/usb-ehci-orion.h>
|
2012-06-27 19:40:04 +08:00
|
|
|
#include <plat/irq.h>
|
2012-11-17 22:22:28 +08:00
|
|
|
#include <plat/common.h>
|
2012-02-28 00:07:13 +08:00
|
|
|
#include "common.h"
|
|
|
|
|
2012-11-17 22:22:28 +08:00
|
|
|
/*
|
|
|
|
* There are still devices that doesn't know about DT yet. Get clock
|
|
|
|
* gates here and add a clock lookup alias, so that old platform
|
|
|
|
* devices still work.
|
|
|
|
*/
|
|
|
|
|
|
|
|
static void __init kirkwood_legacy_clk_init(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
struct device_node *np = of_find_compatible_node(
|
|
|
|
NULL, NULL, "marvell,kirkwood-gating-clock");
|
|
|
|
struct of_phandle_args clkspec;
|
2013-01-31 04:29:58 +08:00
|
|
|
struct clk *clk;
|
2012-11-17 22:22:28 +08:00
|
|
|
|
|
|
|
clkspec.np = np;
|
|
|
|
clkspec.args_count = 1;
|
|
|
|
|
|
|
|
clkspec.args[0] = CGC_BIT_PEX0;
|
|
|
|
orion_clkdev_add("0", "pcie",
|
|
|
|
of_clk_get_from_provider(&clkspec));
|
|
|
|
|
|
|
|
clkspec.args[0] = CGC_BIT_PEX1;
|
|
|
|
orion_clkdev_add("1", "pcie",
|
|
|
|
of_clk_get_from_provider(&clkspec));
|
|
|
|
|
2013-01-31 04:29:58 +08:00
|
|
|
clkspec.args[0] = CGC_BIT_SDIO;
|
|
|
|
orion_clkdev_add(NULL, "mvsdio",
|
2012-11-17 22:22:28 +08:00
|
|
|
of_clk_get_from_provider(&clkspec));
|
2013-01-31 04:29:58 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* The ethernet interfaces forget the MAC address assigned by
|
|
|
|
* u-boot if the clocks are turned off. Until proper DT support
|
|
|
|
* is available we always enable them for now.
|
|
|
|
*/
|
|
|
|
clkspec.args[0] = CGC_BIT_GE0;
|
|
|
|
clk = of_clk_get_from_provider(&clkspec);
|
|
|
|
orion_clkdev_add(NULL, "mv643xx_eth_port.0", clk);
|
|
|
|
clk_prepare_enable(clk);
|
|
|
|
|
|
|
|
clkspec.args[0] = CGC_BIT_GE1;
|
|
|
|
clk = of_clk_get_from_provider(&clkspec);
|
|
|
|
orion_clkdev_add(NULL, "mv643xx_eth_port.1", clk);
|
|
|
|
clk_prepare_enable(clk);
|
2012-11-17 22:22:28 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void __init kirkwood_of_clk_init(void)
|
|
|
|
{
|
|
|
|
mvebu_clocks_init();
|
|
|
|
kirkwood_legacy_clk_init();
|
|
|
|
}
|
2012-06-07 02:30:57 +08:00
|
|
|
|
2012-02-28 00:07:13 +08:00
|
|
|
static void __init kirkwood_dt_init(void)
|
|
|
|
{
|
2012-03-01 01:39:08 +08:00
|
|
|
pr_info("Kirkwood: %s, TCLK=%d.\n", kirkwood_id(), kirkwood_tclk);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Disable propagation of mbus errors to the CPU local bus,
|
|
|
|
* as this causes mbus errors (which can occur for example
|
|
|
|
* for PCI aborts) to throw CPU aborts, which we're not set
|
|
|
|
* up to deal with.
|
|
|
|
*/
|
|
|
|
writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG);
|
|
|
|
|
2013-03-22 00:59:16 +08:00
|
|
|
kirkwood_setup_wins();
|
2012-03-01 01:39:08 +08:00
|
|
|
|
|
|
|
kirkwood_l2_init();
|
|
|
|
|
2011-12-15 15:15:07 +08:00
|
|
|
/* Setup root of clk tree */
|
2012-11-17 22:22:28 +08:00
|
|
|
kirkwood_of_clk_init();
|
2012-03-01 01:39:08 +08:00
|
|
|
|
2013-01-09 20:22:15 +08:00
|
|
|
kirkwood_cpuidle_init();
|
|
|
|
|
2012-03-01 01:39:08 +08:00
|
|
|
#ifdef CONFIG_KEXEC
|
|
|
|
kexec_reinit = kirkwood_enable_pcie;
|
|
|
|
#endif
|
2012-02-28 00:07:13 +08:00
|
|
|
|
|
|
|
if (of_machine_is_compatible("globalscale,dreamplug"))
|
|
|
|
dreamplug_init();
|
|
|
|
|
2012-12-10 02:40:04 +08:00
|
|
|
if (of_machine_is_compatible("globalscale,guruplug"))
|
|
|
|
guruplug_dt_init();
|
|
|
|
|
2012-04-18 18:06:40 +08:00
|
|
|
if (of_machine_is_compatible("dlink,dns-kirkwood"))
|
|
|
|
dnskw_init();
|
|
|
|
|
2012-04-19 05:16:41 +08:00
|
|
|
if (of_machine_is_compatible("iom,iconnect"))
|
|
|
|
iconnect_init();
|
|
|
|
|
2012-05-01 05:55:17 +08:00
|
|
|
if (of_machine_is_compatible("raidsonic,ib-nas62x0"))
|
|
|
|
ib62x0_init();
|
|
|
|
|
2012-05-12 20:57:59 +08:00
|
|
|
if (of_machine_is_compatible("qnap,ts219"))
|
|
|
|
qnap_dt_ts219_init();
|
|
|
|
|
2012-08-15 04:43:41 +08:00
|
|
|
if (of_machine_is_compatible("seagate,dockstar"))
|
|
|
|
dockstar_dt_init();
|
|
|
|
|
2012-07-16 17:52:50 +08:00
|
|
|
if (of_machine_is_compatible("seagate,goflexnet"))
|
|
|
|
goflexnet_init();
|
|
|
|
|
2012-07-17 13:25:55 +08:00
|
|
|
if (of_machine_is_compatible("buffalo,lsxl"))
|
|
|
|
lsxl_init();
|
|
|
|
|
2012-08-20 22:29:07 +08:00
|
|
|
if (of_machine_is_compatible("iom,ix2-200"))
|
|
|
|
iomega_ix2_200_init();
|
|
|
|
|
2012-09-04 17:55:02 +08:00
|
|
|
if (of_machine_is_compatible("keymile,km_kirkwood"))
|
|
|
|
km_kirkwood_init();
|
|
|
|
|
2013-04-09 06:41:28 +08:00
|
|
|
if (of_machine_is_compatible("lacie,cloudbox") ||
|
|
|
|
of_machine_is_compatible("lacie,inetspace_v2") ||
|
2012-10-17 18:09:06 +08:00
|
|
|
of_machine_is_compatible("lacie,netspace_lite_v2") ||
|
2013-04-09 06:41:28 +08:00
|
|
|
of_machine_is_compatible("lacie,netspace_max_v2") ||
|
|
|
|
of_machine_is_compatible("lacie,netspace_mini_v2") ||
|
|
|
|
of_machine_is_compatible("lacie,netspace_v2"))
|
2012-10-17 18:09:04 +08:00
|
|
|
ns2_init();
|
|
|
|
|
2012-11-18 23:46:16 +08:00
|
|
|
if (of_machine_is_compatible("mpl,cec4"))
|
|
|
|
mplcec4_init();
|
|
|
|
|
2013-03-20 06:28:06 +08:00
|
|
|
if (of_machine_is_compatible("netgear,readynas-duo-v2"))
|
|
|
|
netgear_readynas_init();
|
|
|
|
|
2012-11-13 15:43:09 +08:00
|
|
|
if (of_machine_is_compatible("plathome,openblocks-a6"))
|
|
|
|
openblocks_a6_init();
|
|
|
|
|
2012-10-22 10:15:35 +08:00
|
|
|
if (of_machine_is_compatible("usi,topkick"))
|
|
|
|
usi_topkick_init();
|
|
|
|
|
2013-05-15 22:04:59 +08:00
|
|
|
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
|
2012-02-28 00:07:13 +08:00
|
|
|
}
|
|
|
|
|
2012-10-20 19:23:16 +08:00
|
|
|
static const char * const kirkwood_dt_board_compat[] = {
|
2012-02-28 00:07:13 +08:00
|
|
|
"globalscale,dreamplug",
|
2012-12-10 02:40:04 +08:00
|
|
|
"globalscale,guruplug",
|
2012-04-18 18:06:40 +08:00
|
|
|
"dlink,dns-320",
|
|
|
|
"dlink,dns-325",
|
2012-04-19 05:16:41 +08:00
|
|
|
"iom,iconnect",
|
2012-05-01 05:55:17 +08:00
|
|
|
"raidsonic,ib-nas62x0",
|
2012-05-12 20:57:59 +08:00
|
|
|
"qnap,ts219",
|
2012-08-15 04:43:41 +08:00
|
|
|
"seagate,dockstar",
|
2012-07-16 17:52:50 +08:00
|
|
|
"seagate,goflexnet",
|
2012-07-17 13:25:55 +08:00
|
|
|
"buffalo,lsxl",
|
2012-08-20 22:29:07 +08:00
|
|
|
"iom,ix2-200",
|
2012-09-04 17:55:02 +08:00
|
|
|
"keymile,km_kirkwood",
|
2013-04-09 06:41:28 +08:00
|
|
|
"lacie,cloudbox",
|
2012-10-17 18:09:04 +08:00
|
|
|
"lacie,inetspace_v2",
|
2012-10-17 18:09:05 +08:00
|
|
|
"lacie,netspace_lite_v2",
|
2013-04-09 06:41:28 +08:00
|
|
|
"lacie,netspace_max_v2",
|
2012-10-17 18:09:06 +08:00
|
|
|
"lacie,netspace_mini_v2",
|
2013-04-09 06:41:28 +08:00
|
|
|
"lacie,netspace_v2",
|
2012-11-18 23:46:16 +08:00
|
|
|
"mpl,cec4",
|
2013-03-20 06:28:06 +08:00
|
|
|
"netgear,readynas-duo-v2",
|
2012-11-13 15:43:09 +08:00
|
|
|
"plathome,openblocks-a6",
|
2012-10-22 10:15:35 +08:00
|
|
|
"usi,topkick",
|
arm: kirkwood: add support for ZyXEL NSA310
Hello, Andrew
> > +#define NSA310_GPIO_LED_ESATA_GREEN 12
> > <..>
> > +#define NSA310_GPIO_POWER_OFF 48
>
> It looks like most of these are not used. Please remove them.
True. Fixed.
> > +static struct mtd_partition nsa310_mtd_parts[] = {
> > + {
> > + .name = "uboot",
> > + .offset = 0,
> > + .size = 0x100000,
> > + .mask_flags = MTD_WRITEABLE,
> > + }, {
> > <..>
> You should be able to put all that into DT. Take a look at
Correct. I did the conversion and tested that the partitions
can be read with dd and produce exactly the same data before and
after conversion. So, the partition offsets at least should be fine.
> > +static struct i2c_board_info __initdata nsa310_i2c_info[] = {
> > + { I2C_BOARD_INFO("adt7476", 0x2e) },
> > +};
>
> You can also do this in DT as well. kirkwood-ts219.dtsi has
>
> i2c@11000 {
> status = "okay";
> clock-frequency = <400000>;
Ok, I did convert the i2c definition to use the devicetree.
The adt7476 device itself is not at reach of device tree,
AFAIK and requires more work at there?
Thanks for your valuable comments. Following is a new patch that
should address the problems and mistakes you pointed and also
some of the pointed by Jason Cooper. The nand and i2c are now
defined at DT and I also removed the pointless defines and
ARM_APPENDED_DTB. It is based against the Linus' official
3.6 version.
Best regards,
Tero
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
2012-10-26 23:56:16 +08:00
|
|
|
"zyxel,nsa310",
|
2012-02-28 00:07:13 +08:00
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
|
|
|
DT_MACHINE_START(KIRKWOOD_DT, "Marvell Kirkwood (Flattened Device Tree)")
|
|
|
|
/* Maintainer: Jason Cooper <jason@lakedaemon.net> */
|
|
|
|
.map_io = kirkwood_map_io,
|
|
|
|
.init_early = kirkwood_init_early,
|
2012-06-27 19:40:04 +08:00
|
|
|
.init_irq = orion_dt_init_irq,
|
2012-11-09 03:40:59 +08:00
|
|
|
.init_time = kirkwood_timer_init,
|
2012-02-28 00:07:13 +08:00
|
|
|
.init_machine = kirkwood_dt_init,
|
|
|
|
.restart = kirkwood_restart,
|
|
|
|
.dt_compat = kirkwood_dt_board_compat,
|
|
|
|
MACHINE_END
|