Merge branch 'master' of git://git.denx.de/u-boot-socfpga
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2013 Altera Corporation <www.altera.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _SOCFPGA_DWMMC_H_
|
||||
#define _SOCFPGA_DWMMC_H_
|
||||
|
||||
int socfpga_dwmmc_init(const void *blob);
|
||||
|
||||
#endif /* _SOCFPGA_SDMMC_H_ */
|
||||
@@ -16,7 +16,6 @@
|
||||
#include <asm/arch/reset_manager.h>
|
||||
#include <asm/arch/scan_manager.h>
|
||||
#include <asm/arch/system_manager.h>
|
||||
#include <asm/arch/dwmmc.h>
|
||||
#include <asm/arch/nic301.h>
|
||||
#include <asm/arch/scu.h>
|
||||
#include <asm/pl310.h>
|
||||
@@ -77,7 +76,8 @@ void v7_outer_cache_disable(void)
|
||||
* DesignWare Ethernet initialization
|
||||
*/
|
||||
#ifdef CONFIG_ETH_DESIGNWARE
|
||||
static void dwmac_deassert_reset(const unsigned int of_reset_id)
|
||||
static void dwmac_deassert_reset(const unsigned int of_reset_id,
|
||||
const u32 phymode)
|
||||
{
|
||||
u32 physhift, reset;
|
||||
|
||||
@@ -98,16 +98,41 @@ static void dwmac_deassert_reset(const unsigned int of_reset_id)
|
||||
|
||||
/* configure to PHY interface select choosed */
|
||||
setbits_le32(&sysmgr_regs->emacgrp_ctrl,
|
||||
SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RGMII << physhift);
|
||||
phymode << physhift);
|
||||
|
||||
/* Release the EMAC controller from reset */
|
||||
socfpga_per_reset(reset, 0);
|
||||
}
|
||||
|
||||
static u32 dwmac_phymode_to_modereg(const char *phymode, u32 *modereg)
|
||||
{
|
||||
if (!phymode)
|
||||
return -EINVAL;
|
||||
|
||||
if (!strcmp(phymode, "mii") || !strcmp(phymode, "gmii")) {
|
||||
*modereg = SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_GMII_MII;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(phymode, "rgmii")) {
|
||||
*modereg = SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RGMII;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(phymode, "rmii")) {
|
||||
*modereg = SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RMII;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int socfpga_eth_reset(void)
|
||||
{
|
||||
const void *fdt = gd->fdt_blob;
|
||||
struct fdtdec_phandle_args args;
|
||||
const char *phy_mode;
|
||||
u32 phy_modereg;
|
||||
int nodes[2]; /* Max. two GMACs */
|
||||
int ret, count;
|
||||
int i, node;
|
||||
@@ -132,7 +157,14 @@ static int socfpga_eth_reset(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
dwmac_deassert_reset(args.args[0]);
|
||||
phy_mode = fdt_getprop(fdt, node, "phy-mode", NULL);
|
||||
ret = dwmac_phymode_to_modereg(phy_mode, &phy_modereg);
|
||||
if (ret) {
|
||||
debug("GMAC%i: Failed to parse DT 'phy-mode'!\n", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
dwmac_deassert_reset(args.args[0], phy_modereg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user