xref: /rk3399_rockchip-uboot/board/d-link/dns325/dns325.c (revision 16437a195a6d881a8e76c6db789edc92f2542645)
1bfacf466SStefan /*
2bfacf466SStefan  * Copyright (C) 2011
3*16437a19SStefan Herbrechtsmeier  * Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
4bfacf466SStefan  *
5bfacf466SStefan  * Based on Kirkwood support:
6bfacf466SStefan  * (C) Copyright 2009
7bfacf466SStefan  * Marvell Semiconductor <www.marvell.com>
8bfacf466SStefan  * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
9bfacf466SStefan  *
101a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
11bfacf466SStefan  */
12bfacf466SStefan 
13bfacf466SStefan #include <common.h>
14bfacf466SStefan #include <miiphy.h>
15bfacf466SStefan #include <netdev.h>
16bfacf466SStefan #include <asm/arch/cpu.h>
173dc23f78SStefan Roese #include <asm/arch/soc.h>
18bfacf466SStefan #include <asm/arch/mpp.h>
19bfacf466SStefan #include <asm/arch/gpio.h>
20bfacf466SStefan #include "dns325.h"
21bfacf466SStefan 
22bfacf466SStefan DECLARE_GLOBAL_DATA_PTR;
23bfacf466SStefan 
board_early_init_f(void)24bfacf466SStefan int board_early_init_f(void)
25bfacf466SStefan {
26bfacf466SStefan 	/* Gpio configuration */
27d5c5132fSStefan Roese 	mvebu_config_gpio(DNS325_OE_VAL_LOW, DNS325_OE_VAL_HIGH,
28bfacf466SStefan 			  DNS325_OE_LOW, DNS325_OE_HIGH);
29bfacf466SStefan 
30bfacf466SStefan 	/* Multi-Purpose Pins Functionality configuration */
319d86f0c3SAlbert ARIBAUD 	static const u32 kwmpp_config[] = {
32bfacf466SStefan 		MPP0_NF_IO2,
33bfacf466SStefan 		MPP1_NF_IO3,
34bfacf466SStefan 		MPP2_NF_IO4,
35bfacf466SStefan 		MPP3_NF_IO5,
36bfacf466SStefan 		MPP4_NF_IO6,
37bfacf466SStefan 		MPP5_NF_IO7,
38bfacf466SStefan 		MPP6_SYSRST_OUTn,
39bfacf466SStefan 		MPP7_GPO,
40bfacf466SStefan 		MPP8_TW_SDA,
41bfacf466SStefan 		MPP9_TW_SCK,
42bfacf466SStefan 		MPP10_UART0_TXD,
43bfacf466SStefan 		MPP11_UART0_RXD,
44bfacf466SStefan 		MPP12_SD_CLK,
45bfacf466SStefan 		MPP13_SD_CMD,
46bfacf466SStefan 		MPP14_SD_D0,
47bfacf466SStefan 		MPP15_SD_D1,
48bfacf466SStefan 		MPP16_SD_D2,
49bfacf466SStefan 		MPP17_SD_D3,
50bfacf466SStefan 		MPP18_NF_IO0,
51bfacf466SStefan 		MPP19_NF_IO1,
52bfacf466SStefan 		MPP20_SATA1_ACTn,	/* sata1(left) status led */
53bfacf466SStefan 		MPP21_SATA0_ACTn,	/* sata0(right) status led */
54bfacf466SStefan 		MPP22_GPIO,
55bfacf466SStefan 		MPP23_GPIO,
56bfacf466SStefan 		MPP24_GPIO,		/* power off out */
57bfacf466SStefan 		MPP25_GPIO,
58bfacf466SStefan 		MPP26_GPIO,		/* power led */
59bfacf466SStefan 		MPP27_GPIO,		/* sata0(right) error led */
60bfacf466SStefan 		MPP28_GPIO,		/* sata1(left) error led */
61bfacf466SStefan 		MPP29_GPIO,		/* usb error led */
62bfacf466SStefan 		MPP30_GPIO,
63bfacf466SStefan 		MPP31_GPIO,
64bfacf466SStefan 		MPP32_GPIO,
65bfacf466SStefan 		MPP33_GPIO,
66bfacf466SStefan 		MPP34_GPIO,		/* power key */
67bfacf466SStefan 		MPP35_GPIO,
68bfacf466SStefan 		MPP36_GPIO,
69bfacf466SStefan 		MPP37_GPIO,
70bfacf466SStefan 		MPP38_GPIO,
71bfacf466SStefan 		MPP39_GPIO,		/* enable sata 0 */
72bfacf466SStefan 		MPP40_GPIO,		/* enable sata 1 */
73bfacf466SStefan 		MPP41_GPIO,		/* hdd0 present */
74bfacf466SStefan 		MPP42_GPIO,		/* hdd1 present */
75bfacf466SStefan 		MPP43_GPIO,		/* usb status led */
76bfacf466SStefan 		MPP44_GPIO,		/* fan status */
77bfacf466SStefan 		MPP45_GPIO,		/* fan high speed */
78bfacf466SStefan 		MPP46_GPIO,		/* fan low speed */
79bfacf466SStefan 		MPP47_GPIO,		/* usb umount */
80bfacf466SStefan 		MPP48_GPIO,		/* factory reset */
81bfacf466SStefan 		MPP49_GPIO,		/* thermal sensor */
82bfacf466SStefan 		0
83bfacf466SStefan 	};
8484683638SValentin Longchamp 	kirkwood_mpp_conf(kwmpp_config, NULL);
85bfacf466SStefan 
86bfacf466SStefan 	kw_gpio_set_blink(DNS325_GPIO_LED_POWER , 1);
87bfacf466SStefan 
88bfacf466SStefan 	kw_gpio_set_value(DNS325_GPIO_SATA0_EN , 1);
89bfacf466SStefan 	return 0;
90bfacf466SStefan }
91bfacf466SStefan 
board_init(void)92bfacf466SStefan int board_init(void)
93bfacf466SStefan {
94bfacf466SStefan 	/* Boot parameters address */
9596c5f081SStefan Roese 	gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
96bfacf466SStefan 
97bfacf466SStefan 	return 0;
98bfacf466SStefan }
99bfacf466SStefan 
100bfacf466SStefan #ifdef CONFIG_RESET_PHY_R
101bfacf466SStefan /* Configure and initialize PHY */
reset_phy(void)102bfacf466SStefan void reset_phy(void)
103bfacf466SStefan {
104bfacf466SStefan 	u16 reg;
105bfacf466SStefan 	u16 devadr;
106bfacf466SStefan 	char *name = "egiga0";
107bfacf466SStefan 
108bfacf466SStefan 	if (miiphy_set_current_dev(name))
109bfacf466SStefan 		return;
110bfacf466SStefan 
111bfacf466SStefan 	/* command to read PHY dev address */
112bfacf466SStefan 	if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
113bfacf466SStefan 		printf("Err..(%s) could not read PHY dev address\n", __func__);
114bfacf466SStefan 		return;
115bfacf466SStefan 	}
116bfacf466SStefan 
117bfacf466SStefan 	/*
118bfacf466SStefan 	 * Enable RGMII delay on Tx and Rx for CPU port
119bfacf466SStefan 	 * Ref: sec 4.7.2 of chip datasheet
120bfacf466SStefan 	 */
121bfacf466SStefan 	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
122bfacf466SStefan 	miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
123bfacf466SStefan 	reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
124bfacf466SStefan 	miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
125bfacf466SStefan 	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
126bfacf466SStefan 
127bfacf466SStefan 	/* reset the phy */
128bfacf466SStefan 	miiphy_reset(name, devadr);
129bfacf466SStefan 
130bfacf466SStefan 	debug("88E1116 Initialized on %s\n", name);
131bfacf466SStefan }
132bfacf466SStefan #endif /* CONFIG_RESET_PHY_R */
133