1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
4 *
5 * Based on Kirkwood support:
6 * (C) Copyright 2009
7 * Marvell Semiconductor <www.marvell.com>
8 * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
9 */
10
11#include <common.h>
12#include <command.h>
13#include <env.h>
14#include <init.h>
15#include <net.h>
16#include <asm/global_data.h>
17#include <asm/mach-types.h>
18#include <asm/arch/cpu.h>
19#include <asm/arch/soc.h>
20#include <asm/arch/mpp.h>
21#include <asm/arch/gpio.h>
22
23#include "netspace_v2.h"
24#include "../common/common.h"
25
26DECLARE_GLOBAL_DATA_PTR;
27
28int board_early_init_f(void)
29{
30	/* Gpio configuration */
31	mvebu_config_gpio(NETSPACE_V2_OE_VAL_LOW, NETSPACE_V2_OE_VAL_HIGH,
32			  NETSPACE_V2_OE_LOW, NETSPACE_V2_OE_HIGH);
33
34	/* Multi-Purpose Pins Functionality configuration */
35	static const u32 kwmpp_config[] = {
36		MPP0_SPI_SCn,
37		MPP1_SPI_MOSI,
38		MPP2_SPI_SCK,
39		MPP3_SPI_MISO,
40		MPP4_NF_IO6,
41		MPP5_NF_IO7,
42		MPP6_SYSRST_OUTn,
43		MPP7_GPO,		/* Fan speed (bit 1) */
44		MPP8_TW_SDA,
45		MPP9_TW_SCK,
46		MPP10_UART0_TXD,
47		MPP11_UART0_RXD,
48		MPP12_GPO,		/* Red led */
49		MPP14_GPIO,		/* USB fuse */
50		MPP16_GPIO,		/* SATA 0 power */
51		MPP17_GPIO,		/* SATA 1 power */
52		MPP18_NF_IO0,
53		MPP19_NF_IO1,
54		MPP20_SATA1_ACTn,
55		MPP21_SATA0_ACTn,
56		MPP22_GPIO,		/* Fan speed (bit 0) */
57		MPP23_GPIO,		/* Fan power */
58		MPP24_GPIO,		/* USB mode select */
59		MPP25_GPIO,		/* Fan rotation fail */
60		MPP26_GPIO,		/* USB vbus-in detection */
61		MPP28_GPIO,		/* USB enable vbus-out */
62		MPP29_GPIO,		/* Blue led (slow register) */
63		MPP30_GPIO,		/* Blue led (command register) */
64		MPP31_GPIO,		/* Board power off */
65		MPP32_GPIO,		/* Button (0 = Released, 1 = Pushed) */
66		MPP33_GPIO,		/* Fan speed (bit 2) */
67		0
68	};
69	kirkwood_mpp_conf(kwmpp_config, NULL);
70
71	return 0;
72}
73
74int board_init(void)
75{
76#ifdef CONFIG_MACH_TYPE
77	/* Machine number */
78	gd->bd->bi_arch_number = CONFIG_MACH_TYPE;
79#endif
80
81	/* Boot parameters address */
82	gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
83
84	return 0;
85}
86
87#if defined(CONFIG_MISC_INIT_R)
88int misc_init_r(void)
89{
90#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
91	if (!env_get("ethaddr")) {
92		uchar mac[6];
93		if (lacie_read_mac_address(mac) == 0)
94			eth_env_set_enetaddr("ethaddr", mac);
95	}
96#endif
97	return 0;
98}
99#endif
100
101#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
102/* Configure and initialize PHY */
103void reset_phy(void)
104{
105#if defined(CONFIG_NETSPACE_LITE_V2) || defined(CONFIG_NETSPACE_MINI_V2)
106	mv_phy_88e1318_init("ethernet-controller@72000", 0);
107#else
108	mv_phy_88e1116_init("ethernet-controller@72000", 8);
109#endif
110}
111#endif
112
113#if defined(CONFIG_KIRKWOOD_GPIO)
114/* Return GPIO button status */
115static int
116do_read_button(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
117{
118	return kw_gpio_get_value(NETSPACE_V2_GPIO_BUTTON);
119}
120
121U_BOOT_CMD(button, 1, 1, do_read_button,
122	   "Return GPIO button status 0=off 1=on", "");
123#endif
124