9
0
Fork 0

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:
Uwe Kleine-König 2016-10-04 21:13:05 +02:00 committed by Sascha Hauer
parent 8aed8106c2
commit 81cabf1274
9 changed files with 163 additions and 0 deletions

View File

@ -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/

View File

@ -0,0 +1,2 @@
obj-y += board.o
lwl-y += lowlevel.o

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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";
};
};

View File

@ -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

View File

@ -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