From 7bb65fb9d7860faa4b9b1e07790fb5823a0249e2 Mon Sep 17 00:00:00 2001 From: Imre Kaloz Date: Wed, 4 Jun 2008 13:51:17 +0000 Subject: add preliminary Marvell Orion support SVN-Revision: 11352 --- .../018-add_hp_media_vault_mv2120_support.patch | 263 +++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 target/linux/orion/patches/018-add_hp_media_vault_mv2120_support.patch (limited to 'target/linux/orion/patches/018-add_hp_media_vault_mv2120_support.patch') diff --git a/target/linux/orion/patches/018-add_hp_media_vault_mv2120_support.patch b/target/linux/orion/patches/018-add_hp_media_vault_mv2120_support.patch new file mode 100644 index 0000000000..02a93c95c5 --- /dev/null +++ b/target/linux/orion/patches/018-add_hp_media_vault_mv2120_support.patch @@ -0,0 +1,263 @@ +From: Martin Michlmayr + +Signed-off-by: Lennert Buytenhek +--- + arch/arm/mach-orion5x/Kconfig | 6 + + arch/arm/mach-orion5x/Makefile | 1 + + arch/arm/mach-orion5x/mv2120-setup.c | 228 ++++++++++++++++++++++++++++++++++ + 3 files changed, 235 insertions(+), 0 deletions(-) + create mode 100644 arch/arm/mach-orion5x/mv2120-setup.c + +--- a/arch/arm/mach-orion5x/Kconfig ++++ b/arch/arm/mach-orion5x/Kconfig +@@ -56,6 +56,12 @@ + Say 'Y' here if you want your kernel to support the + Linksys WRT350N v2 platform. + ++config MACH_MV2120 ++ bool "HP Media Vault mv2120" ++ help ++ Say 'Y' here if you want your kernel to support the ++ HP Media Vault mv2120 or mv5100. ++ + endmenu + + endif +--- a/arch/arm/mach-orion5x/Makefile ++++ b/arch/arm/mach-orion5x/Makefile +@@ -7,3 +7,4 @@ + obj-$(CONFIG_MACH_TS209) += ts209-setup.o + obj-$(CONFIG_MACH_TS409) += ts409-setup.o + obj-$(CONFIG_MACH_WRT350N_V2) += wrt350n-v2-setup.o ++obj-$(CONFIG_MACH_MV2120) += mv2120-setup.o +--- /dev/null ++++ b/arch/arm/mach-orion5x/mv2120-setup.c +@@ -0,0 +1,228 @@ ++/* ++ * Copyright (C) 2007 Herbert Valerio Riedel ++ * Copyright (C) 2008 Martin Michlmayr ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU Lesser General Public License as ++ * published by the Free Software Foundation; either version 2 of the ++ * License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++#define MV2120_NOR_BOOT_BASE 0xf4000000 ++#define MV2120_NOR_BOOT_SIZE SZ_512K ++ ++#define MV2120_GPIO_RTC_IRQ 3 ++#define MV2120_GPIO_KEY_RESET 17 ++#define MV2120_GPIO_KEY_POWER 18 ++#define MV2120_GPIO_POWER_OFF 19 ++ ++ ++/**************************************************************************** ++ * PCI setup ++ ****************************************************************************/ ++static int __init mv2120_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) ++{ ++ int irq; ++ ++ /* ++ * Check for devices with hard-wired IRQs. ++ */ ++ irq = orion5x_pci_map_irq(dev, slot, pin); ++ if (irq != -1) ++ return irq; ++ ++ pr_err("%s: requested mapping for unknown bus\n", __func__); ++ ++ return -1; ++} ++ ++static struct hw_pci mv2120_pci __initdata = { ++ .nr_controllers = 2, ++ .swizzle = pci_std_swizzle, ++ .setup = orion5x_pci_sys_setup, ++ .scan = orion5x_pci_sys_scan_bus, ++ .map_irq = mv2120_pci_map_irq, ++}; ++ ++static int __init mv2120_pci_init(void) ++{ ++ if (machine_is_mv2120()) ++ pci_common_init(&mv2120_pci); ++ ++ return 0; ++} ++subsys_initcall(mv2120_pci_init); ++ ++ ++/***************************************************************************** ++ * Ethernet ++ ****************************************************************************/ ++static struct mv643xx_eth_platform_data mv2120_eth_data = { ++ .phy_addr = 8, ++}; ++ ++static struct mv_sata_platform_data mv2120_sata_data = { ++ .n_ports = 2, ++}; ++ ++static struct mtd_partition mv2120_partitions[] = { ++ { ++ .name = "firmware", ++ .size = 0x00080000, ++ .offset = 0, ++ }, ++}; ++ ++static struct physmap_flash_data mv2120_nor_flash_data = { ++ .width = 1, ++ .parts = mv2120_partitions, ++ .nr_parts = ARRAY_SIZE(mv2120_partitions) ++}; ++ ++static struct resource mv2120_nor_flash_resource = { ++ .flags = IORESOURCE_MEM, ++ .start = MV2120_NOR_BOOT_BASE, ++ .end = MV2120_NOR_BOOT_BASE + MV2120_NOR_BOOT_SIZE - 1, ++}; ++ ++static struct platform_device mv2120_nor_flash = { ++ .name = "physmap-flash", ++ .id = 0, ++ .dev = { ++ .platform_data = &mv2120_nor_flash_data, ++ }, ++ .resource = &mv2120_nor_flash_resource, ++ .num_resources = 1, ++}; ++ ++static struct gpio_keys_button mv2120_buttons[] = { ++ { ++ .code = KEY_RESTART, ++ .gpio = MV2120_GPIO_KEY_RESET, ++ .desc = "Reset Button", ++ .active_low = 1, ++ }, { ++ .code = KEY_POWER, ++ .gpio = MV2120_GPIO_KEY_POWER, ++ .desc = "Power Button", ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_keys_platform_data mv2120_button_data = { ++ .buttons = mv2120_buttons, ++ .nbuttons = ARRAY_SIZE(mv2120_buttons), ++}; ++ ++static struct platform_device mv2120_button_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .num_resources = 0, ++ .dev = { ++ .platform_data = &mv2120_button_data, ++ }, ++}; ++ ++ ++/**************************************************************************** ++ * General Setup ++ ****************************************************************************/ ++static struct i2c_board_info __initdata mv2120_i2c_rtc = { ++ I2C_BOARD_INFO("rtc-pcf8563", 0x51), ++ .irq = 0, ++}; ++ ++static void mv2120_power_off(void) ++{ ++ pr_info("%s: triggering power-off...\n", __func__); ++ gpio_set_value(MV2120_GPIO_POWER_OFF, 0); ++} ++ ++static void __init mv2120_init(void) ++{ ++ /* Setup basic Orion functions. Need to be called early. */ ++ orion5x_init(); ++ ++ orion5x_mpp_conf(0, MPP_GPIO); /* Sys status LED */ ++ orion5x_mpp_conf(1, MPP_GPIO); /* Sys error LED */ ++ orion5x_mpp_conf(2, MPP_GPIO); /* OverTemp interrupt */ ++ orion5x_mpp_conf(3, MPP_GPIO); /* RTC interrupt */ ++ orion5x_mpp_conf(4, MPP_GPIO); /* V_LED 5V */ ++ orion5x_mpp_conf(5, MPP_GPIO); /* V_LED 3.3V */ ++ orion5x_mpp_conf(6, MPP_UNUSED); ++ orion5x_mpp_conf(7, MPP_UNUSED); ++ orion5x_mpp_conf(8, MPP_GPIO); /* SATA 0 fail LED */ ++ orion5x_mpp_conf(9, MPP_GPIO); /* SATA 1 fail LED */ ++ orion5x_mpp_conf(10, MPP_UNUSED); ++ orion5x_mpp_conf(11, MPP_UNUSED); ++ orion5x_mpp_conf(12, MPP_SATA_LED); /* SATA 0 presence */ ++ orion5x_mpp_conf(13, MPP_SATA_LED); /* SATA 1 presence */ ++ orion5x_mpp_conf(14, MPP_SATA_LED); /* SATA 0 active */ ++ orion5x_mpp_conf(15, MPP_SATA_LED); /* SATA 1 active */ ++ orion5x_mpp_conf(16, MPP_UNUSED); ++ orion5x_mpp_conf(17, MPP_GPIO); /* Reset button */ ++ orion5x_mpp_conf(18, MPP_GPIO); /* Power button */ ++ orion5x_mpp_conf(19, MPP_GPIO); /* Power off */ ++ ++ /* ++ * Configure peripherals. ++ */ ++ orion5x_ehci0_init(); ++ orion5x_ehci1_init(); ++ orion5x_eth_init(&mv2120_eth_data); ++ orion5x_i2c_init(); ++ orion5x_sata_init(&mv2120_sata_data); ++ orion5x_uart0_init(); ++ ++ orion5x_setup_dev_boot_win(MV2120_NOR_BOOT_BASE, MV2120_NOR_BOOT_SIZE); ++ platform_device_register(&mv2120_nor_flash); ++ ++ platform_device_register(&mv2120_button_device); ++ ++ if (gpio_request(MV2120_GPIO_RTC_IRQ, "rtc") == 0) { ++ if (gpio_direction_input(MV2120_GPIO_RTC_IRQ) == 0) ++ mv2120_i2c_rtc.irq = gpio_to_irq(MV2120_GPIO_RTC_IRQ); ++ else ++ gpio_free(MV2120_GPIO_RTC_IRQ); ++ } ++ i2c_register_board_info(0, &mv2120_i2c_rtc, 1); ++ ++ /* register mv2120 specific power-off method */ ++ if (gpio_request(MV2120_GPIO_POWER_OFF, "POWEROFF") != 0 || ++ gpio_direction_output(MV2120_GPIO_POWER_OFF, 1) != 0) ++ pr_err("mv2120: failed to setup power-off GPIO\n"); ++ pm_power_off = mv2120_power_off; ++} ++ ++/* Warning: HP uses a wrong mach-type (=526) in their bootloader */ ++MACHINE_START(MV2120, "HP Media Vault mv2120") ++ /* Maintainer: Martin Michlmayr */ ++ .phys_io = ORION5X_REGS_PHYS_BASE, ++ .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, ++ .boot_params = 0x00000100, ++ .init_machine = mv2120_init, ++ .map_io = orion5x_map_io, ++ .init_irq = orion5x_init_irq, ++ .timer = &orion5x_timer, ++ .fixup = tag_fixup_mem32 ++MACHINE_END -- cgit v1.2.3