diff options
Diffstat (limited to 'roms/u-boot/board/LaCie/wireless_space')
| -rw-r--r-- | roms/u-boot/board/LaCie/wireless_space/Makefile | 12 | ||||
| -rw-r--r-- | roms/u-boot/board/LaCie/wireless_space/kwbimage.cfg | 71 | ||||
| -rw-r--r-- | roms/u-boot/board/LaCie/wireless_space/wireless_space.c | 165 | 
3 files changed, 248 insertions, 0 deletions
diff --git a/roms/u-boot/board/LaCie/wireless_space/Makefile b/roms/u-boot/board/LaCie/wireless_space/Makefile new file mode 100644 index 00000000..90a84f48 --- /dev/null +++ b/roms/u-boot/board/LaCie/wireless_space/Makefile @@ -0,0 +1,12 @@ +# +# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com> +# +# Based on Kirkwood support: +# (C) Copyright 2009 +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar <prafulla@marvell.com> +# +# SPDX-License-Identifier:	GPL-2.0+ +# + +obj-y	:= wireless_space.o ../common/common.o diff --git a/roms/u-boot/board/LaCie/wireless_space/kwbimage.cfg b/roms/u-boot/board/LaCie/wireless_space/kwbimage.cfg new file mode 100644 index 00000000..037248b3 --- /dev/null +++ b/roms/u-boot/board/LaCie/wireless_space/kwbimage.cfg @@ -0,0 +1,71 @@ +# +# Copyright (C) 2012 Albert ARIBAUD <albert.u.boot@aribaud.net> +# +# Based on netspace_v2 kwbimage.cfg: +# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com> +# +# Based on Kirkwood support: +# (C) Copyright 2009 +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar <prafulla@marvell.com> +# +# SPDX-License-Identifier:	GPL-2.0+ +# +# Refer doc/README.kwbimage for more details about how-to configure +# and create kirkwood boot image +# + +# Boot Media configurations +BOOT_FROM	nand	# Boot from NAND flash +NAND_PAGE_SIZE 800 + +# SOC registers configuration using bootrom header extension +# Maximum KWBIMAGE_MAX_CONFIG configurations allowed + +# Values taken from image original LaCie U-Boot header dump! + +# Configure RGMII-0 interface pad voltage to 1.8V +DATA 0xFFD100e0 0x1B1B1B9B + +#Dram initalization for SINGLE x16 CL=5 @ 400MHz +DATA 0xFFD01400 0x43000c30	# DDR Configuration register + +DATA 0xFFD01404 0x37743000	# DDR Controller Control Low + +DATA 0xFFD01408 0x11012228	# DDR Timing (Low) (active cycles value +1) + +DATA 0xFFD0140C 0x00000A19	#  DDR Timing (High) + +DATA 0xFFD01410 0x0000CCCC	#  DDR Address Control + +DATA 0xFFD01414 0x00000000	#  DDR Open Pages Control + +DATA 0xFFD01418 0x00000000	#  DDR Operation + +DATA 0xFFD0141C 0x00000662	#  DDR Mode + +DATA 0xFFD01420 0x00000004	#  DDR Extended Mode + +DATA 0xFFD01424 0x0000F07F	#  DDR Controller Control High + +DATA 0xFFD01428 0x00096630	# DDR2 ODT Read Timing (default values) + +DATA 0xFFD0147C 0x00009663	# DDR2 ODT Write Timing (default values) + +DATA 0xFFD01504 0x0FFFFFF1	# CS[0]n Size +DATA 0xFFD01508 0x00000000	# CS[1]n Base address to 0x0 +DATA 0xFFD0150C 0x00000000	# CS[1]n Size, window disabled +DATA 0xFFD01514 0x00000000	# CS[2]n Size, window disabled +DATA 0xFFD0151C 0x00000000	# CS[3]n Size, window disabled +DATA 0xFFD01494 0x00120012	#  DDR ODT Control (Low) +DATA 0xFFD01498 0x00000000	#  DDR ODT Control (High) +DATA 0xFFD0149C 0x0000E40F	# CPU ODT Control +DATA 0xFFD01480 0x00000001	# DDR Initialization Control +DATA 0xFFD20134 0x66666666 +DATA 0xFFD20138 0x66666666 +DATA 0xFFD10000 0x01112222 +DATA 0xFFD1000C 0x00000000 +DATA 0xFFD10104 0x00000000 +DATA 0xFFD10100 0x40000000 +# End of Header extension +DATA 0x0 0x0 diff --git a/roms/u-boot/board/LaCie/wireless_space/wireless_space.c b/roms/u-boot/board/LaCie/wireless_space/wireless_space.c new file mode 100644 index 00000000..2dc50185 --- /dev/null +++ b/roms/u-boot/board/LaCie/wireless_space/wireless_space.c @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2011 Simon Guinot <sguinot@lacie.com> + * + * Based on Kirkwood support: + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.com> + * Written-by: Prafulla Wadaskar <prafulla@marvell.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <command.h> +#include <asm/arch/cpu.h> +#include <asm/arch/kirkwood.h> +#include <asm/arch/mpp.h> +#include <asm/arch/gpio.h> + +#include "../common/common.h" +#include "netdev.h" + +DECLARE_GLOBAL_DATA_PTR; + +/* GPIO configuration: start FAN at low speed, USB and HDD */ + +#define WIRELESS_SPACE_OE_LOW		0xFF006808 +#define WIRELESS_SPACE_OE_HIGH		0x0000F989 +#define WIRELESS_SPACE_OE_VAL_LOW	0x00010080 +#define WIRELESS_SPACE_OE_VAL_HIGH	0x00000240 + +#define WIRELESS_SPACE_REAR_BUTTON	13 +#define WIRELESS_SPACE_FRONT_BUTTON	43 + +const u32 kwmpp_config[] = { +	MPP0_NF_IO2, +	MPP1_NF_IO3, +	MPP2_NF_IO4, +	MPP3_NF_IO5, +	MPP4_NF_IO6, +	MPP5_NF_IO7, +	MPP6_SYSRST_OUTn, +	MPP7_GPO,		/* Fan speed (bit 1) */ +	MPP8_TW_SDA, +	MPP9_TW_SCK, +	MPP10_UART0_TXD, +	MPP11_UART0_RXD, +	MPP13_GPIO,		/* Red led */ +	MPP14_GPIO,		/* USB fuse */ +	MPP15_SATA0_ACTn, +	MPP16_GPIO,		/* SATA 0 power */ +	MPP17_GPIO,		/* SATA 1 power */ +	MPP18_NF_IO0, +	MPP19_NF_IO1, +	MPP20_GE1_0,		/* Gigabit Ethernet 1 */ +	MPP21_GE1_1, +	MPP22_GE1_2, +	MPP23_GE1_3, +	MPP24_GE1_4, +	MPP25_GE1_5, +	MPP26_GE1_6, +	MPP27_GE1_7, +	MPP28_GE1_8, +	MPP29_GE1_9, +	MPP30_GE1_10, +	MPP31_GE1_11, +	MPP32_GE1_12, +	MPP33_GE1_13, +	MPP34_GE1_14, +	MPP35_GE1_15, +	MPP36_GPIO,		/* Fan speed (bit 2) */ +	MPP37_GPIO,		/* Fan speed (bit 0) */ +	MPP38_GPIO,		/* Fan power */ +	MPP39_GPIO,		/* Fan rotation fail */ +	MPP40_GPIO,		/* Ethernet switch link */ +	MPP41_GPIO,		/* USB enable host vbus */ +	MPP42_GPIO,		/* LED clock control */ +	MPP43_GPIO,		/* WPS button (0=Pushed, 1=Released) */ +	MPP44_GPIO,		/* Red LED on/off */ +	MPP45_GPIO,		/* Red LED timer blink (on=off=100ms) */ +	MPP46_GPIO,		/* Green LED on/off */ +	MPP47_GPIO,		/* LED (blue, green) SATA activity blink */ +	MPP48_GPIO,		/* Blue LED on/off */ +	0 +}; + +struct mv88e61xx_config swcfg = { +	.name = "egiga0", +	.vlancfg = MV88E61XX_VLANCFG_ROUTER, +	.rgmii_delay = MV88E61XX_RGMII_DELAY_EN, +	.led_init = MV88E61XX_LED_INIT_EN, +	.mdip = MV88E61XX_MDIP_NOCHANGE, +	.portstate = MV88E61XX_PORTSTT_FORWARDING, +	.cpuport = 0x20, +	.ports_enabled = 0x3F, +}; + +int board_early_init_f(void) +{ +	/* Gpio configuration */ +	kw_config_gpio(WIRELESS_SPACE_OE_VAL_LOW, WIRELESS_SPACE_OE_VAL_HIGH, +			WIRELESS_SPACE_OE_LOW, WIRELESS_SPACE_OE_HIGH); + +	/* Multi-Purpose Pins Functionality configuration */ +	kirkwood_mpp_conf(kwmpp_config, NULL); + +	return 0; +} + +int board_init(void) +{ +	/* Machine number */ +	gd->bd->bi_arch_number = CONFIG_MACH_TYPE; + +	/* Boot parameters address */ +	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100; + +	return 0; +} + +#if defined(CONFIG_MISC_INIT_R) +int misc_init_r(void) +{ +#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR) +	if (!getenv("ethaddr")) { +		uchar mac[6]; +		if (lacie_read_mac_address(mac) == 0) +			eth_setenv_enetaddr("ethaddr", mac); +	} +#endif +	return 0; +} +#endif + +#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R) +/* Configure and initialize PHY */ +void reset_phy(void) +{ +	/* configure switch on egiga0 */ +	mv88e61xx_switch_initialize(&swcfg); +} +#endif + +#if defined(CONFIG_KIRKWOOD_GPIO) && defined(CONFIG_WIRELESS_SPACE_CMD) +/* Return GPIO button status */ +static int +do_ws(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	if (strcmp(argv[1], "button") == 0) { +		if (strcmp(argv[2], "rear") == 0) +			/* invert GPIO result for intuitive while/until use */ +			return !kw_gpio_get_value(WIRELESS_SPACE_REAR_BUTTON); +		else if (strcmp(argv[2], "front") == 0) +			return kw_gpio_get_value(WIRELESS_SPACE_FRONT_BUTTON); +		else +			return -1; +	} else { +		return -1; +	} +} + +U_BOOT_CMD(ws, 3, 0, do_ws, +	   "Return GPIO button status 0=off 1=on", +	   "- ws button rear|front: test buttons' states\n" +); +#endif  | 
