ARM: mvebu: add support for Netgear RN2120
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
8aed8106c2
commit
81cabf1274
|
@ -72,6 +72,7 @@ obj-$(CONFIG_MACH_MX28EVK) += freescale-mx28-evk/
|
|||
obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard/
|
||||
obj-$(CONFIG_MACH_NESO) += guf-neso/
|
||||
obj-$(CONFIG_MACH_NETGEAR_RN104) += netgear-rn104/
|
||||
obj-$(CONFIG_MACH_NETGEAR_RN2120) += netgear-rn2120/
|
||||
obj-$(CONFIG_MACH_NOMADIK_8815NHK) += nhk8815/
|
||||
obj-$(CONFIG_MACH_NVIDIA_BEAVER) += nvidia-beaver/
|
||||
obj-$(CONFIG_MACH_NVIDIA_JETSON) += nvidia-jetson-tk1/
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
obj-y += board.o
|
||||
lwl-y += lowlevel.o
|
|
@ -0,0 +1,88 @@
|
|||
#include <clock.h>
|
||||
#include <init.h>
|
||||
#include <of.h>
|
||||
#include <gpio.h>
|
||||
#include <printk.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/armlinux.h>
|
||||
#include <generated/mach-types.h>
|
||||
|
||||
static int rn2120_init(void)
|
||||
{
|
||||
/*
|
||||
* This is the machine type that the kernel shipped by Netgear is using.
|
||||
* It's wrong but a given fact.
|
||||
*/
|
||||
armlinux_set_architecture(MACH_TYPE_ARMADA_XP_DB);
|
||||
|
||||
return 0;
|
||||
}
|
||||
device_initcall(rn2120_init);
|
||||
|
||||
struct hdpower {
|
||||
unsigned gpio_detect;
|
||||
unsigned gpio_power;
|
||||
unsigned gpio_led;
|
||||
};
|
||||
|
||||
/*
|
||||
* It would be nice to have this abstracted in the device tree, but currently
|
||||
* this isn't the case.
|
||||
*/
|
||||
static struct hdpower rn2120_hdpower[] = {
|
||||
{
|
||||
/* sata 1 */
|
||||
.gpio_detect = 32,
|
||||
.gpio_power = 24,
|
||||
.gpio_led = 31,
|
||||
}, {
|
||||
/* sata 2 */
|
||||
.gpio_detect = 33,
|
||||
.gpio_power = 25,
|
||||
.gpio_led = 40,
|
||||
}, {
|
||||
/* sata 3 */
|
||||
.gpio_detect = 34,
|
||||
.gpio_power = 26,
|
||||
.gpio_led = 44,
|
||||
}, {
|
||||
/* sata 4 */
|
||||
.gpio_detect = 35,
|
||||
.gpio_power = 28,
|
||||
.gpio_led = 47,
|
||||
},
|
||||
};
|
||||
|
||||
static int rn2120_hddetect(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!of_machine_is_compatible("netgear,readynas-2120"))
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rn2120_hdpower); ++i) {
|
||||
int ret;
|
||||
ret = gpio_direction_input(rn2120_hdpower[i].gpio_detect);
|
||||
if (ret) {
|
||||
pr_err("Failure to detect hd%d (%d)\n", i, ret);
|
||||
continue;
|
||||
}
|
||||
|
||||
ret = gpio_get_value(rn2120_hdpower[i].gpio_detect);
|
||||
if (ret) {
|
||||
/* no disk present */
|
||||
gpio_direction_output(rn2120_hdpower[i].gpio_power, 0);
|
||||
} else {
|
||||
pr_info("Detected presence of disk #%d\n", i + 1);
|
||||
/* make a pause after powering up 2 disks */
|
||||
if (i && !(i & 1)) {
|
||||
pr_info("Delay power up\n");
|
||||
mdelay(7000);
|
||||
}
|
||||
|
||||
gpio_direction_output(rn2120_hdpower[i].gpio_power, 1);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
device_initcall(rn2120_hddetect);
|
|
@ -0,0 +1,7 @@
|
|||
VERSION 1
|
||||
BOOT_FROM nand
|
||||
DESTADDR 00000000
|
||||
EXECADDR 00000000
|
||||
NAND_BLKSZ 00020000
|
||||
NAND_BADBLK_LOCATION 01
|
||||
BINARY binary.0 0000005b 00000068
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (C) 2015 Pengutronix, Uwe Kleine-König <kernel@pengutronix.de>
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/barebox-arm.h>
|
||||
#include <asm/barebox-arm-head.h>
|
||||
#include <asm/io.h>
|
||||
#include <mach/lowlevel.h>
|
||||
|
||||
extern char __dtb_armada_xp_rn2120_bb_start[];
|
||||
|
||||
ENTRY_FUNCTION(start_netgear_rn2120, r0, r1, r2)
|
||||
{
|
||||
void *fdt;
|
||||
|
||||
arm_cpu_lowlevel_init();
|
||||
|
||||
/*
|
||||
* This is necessary to allow the machine to draw more power. Probably
|
||||
* connected to a TI TPS65251. Without this resetting a phy makes the
|
||||
* SoC reset.
|
||||
* This is effectively gpio_direction_output(42, 1);
|
||||
*/
|
||||
writel((1 << 10) | readl((void *)0xd0018140), (void *)0xd0018140);
|
||||
writel(~(1 << 10) & readl((void *)0xd0018144), (void *)0xd0018144);
|
||||
|
||||
fdt = __dtb_armada_xp_rn2120_bb_start -
|
||||
get_runtime_offset();
|
||||
|
||||
mvebu_barebox_entry(fdt);
|
||||
}
|
|
@ -29,6 +29,7 @@ pbl-dtb-$(CONFIG_MACH_GW_VENTANA) += imx6q-gw54xx.dtb.o
|
|||
pbl-dtb-$(CONFIG_MACH_LENOVO_IX4_300D) += armada-xp-lenovo-ix4-300d-bb.dtb.o
|
||||
pbl-dtb-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += armada-xp-gp-bb.dtb.o
|
||||
pbl-dtb-$(CONFIG_MACH_NETGEAR_RN104) += armada-370-rn104-bb.dtb.o
|
||||
pbl-dtb-$(CONFIG_MACH_NETGEAR_RN2120) += armada-xp-rn2120-bb.dtb.o
|
||||
pbl-dtb-$(CONFIG_MACH_NITROGEN6) += imx6q-nitrogen6x.dtb.o imx6dl-nitrogen6x.dtb.o imx6qp-nitrogen6_max.dtb.o
|
||||
pbl-dtb-$(CONFIG_MACH_NVIDIA_BEAVER) += tegra30-beaver.dtb.o
|
||||
pbl-dtb-$(CONFIG_MACH_NVIDIA_JETSON) += tegra124-jetson-tk1.dtb.o
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
/*
|
||||
* Barebox specific DT overlay for Netgear ReadyNAS 2120
|
||||
*/
|
||||
|
||||
#include "arm/armada-xp-netgear-rn2120.dts"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
stdout-path = "/soc/internal-regs/serial@12000";
|
||||
};
|
||||
};
|
|
@ -55,6 +55,10 @@ config MACH_MARVELL_ARMADA_XP_GP
|
|||
bool "Marvell Armada XP GP"
|
||||
select ARCH_ARMADA_XP
|
||||
|
||||
config MACH_NETGEAR_RN2120
|
||||
bool "Netgear ReadyNAS 2120"
|
||||
select ARCH_ARMADA_XP
|
||||
|
||||
config MACH_PLATHOME_OPENBLOCKS_AX3
|
||||
bool "PlatHome OpenBlocks AX3"
|
||||
select ARCH_ARMADA_XP
|
||||
|
|
|
@ -43,6 +43,14 @@ pblx-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += start_marvell_armada_xp_gp
|
|||
image-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += barebox-marvell-armada-xp-gp.img
|
||||
image-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += barebox-marvell-armada-xp-gp-2nd.img
|
||||
|
||||
NETGEAR_RN2120_KWBOPTS = ${KWBOPTS} -i $(board)/netgear-rn2120/kwbimage.cfg
|
||||
OPTS_start_netgear_rn2120.pblx.kwbimg = $(NETGEAR_RN2120_KWBOPTS)
|
||||
FILE_barebox-netgear-rn2120.img = start_netgear_rn2120.pblx.kwbimg
|
||||
FILE_barebox-netgear-rn2120-2nd.img = start_netgear_rn2120.pblx
|
||||
pblx-$(CONFIG_MACH_NETGEAR_RN2120) += start_netgear_rn2120
|
||||
image-$(CONFIG_MACH_NETGEAR_RN2120) += barebox-netgear-rn2120.img
|
||||
image-$(CONFIG_MACH_NETGEAR_RN2120) += barebox-netgear-rn2120-2nd.img
|
||||
|
||||
PLATHOME_OPENBLOCKS_AX3_KWBOPTS = ${KWBOPTS} -i $(board)/plathome-openblocks-ax3/kwbimage.cfg
|
||||
OPTS_start_plathome_openblocks_ax3.pblx.kwbimg = $(PLATHOME_OPENBLOCKS_AX3_KWBOPTS)
|
||||
FILE_barebox-plathome-openblocks-ax3.img = start_plathome_openblocks_ax3.pblx.kwbimg
|
||||
|
|
Loading…
Reference in New Issue