2018-05-06 21:58:06 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0+
|
2014-03-05 07:04:48 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2014 Freescale Semiconductor, Inc.
|
2021-04-13 16:47:57 +00:00
|
|
|
* Copyright 2021 NXP
|
2014-03-05 07:04:48 +00:00
|
|
|
*
|
|
|
|
* Shengzhou Liu <Shengzhou.Liu@freescale.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <common.h>
|
|
|
|
#include <command.h>
|
2020-05-10 17:40:01 +00:00
|
|
|
#include <fdt_support.h>
|
2020-05-10 17:39:56 +00:00
|
|
|
#include <net.h>
|
2014-03-05 07:04:48 +00:00
|
|
|
#include <netdev.h>
|
|
|
|
#include <asm/mmu.h>
|
|
|
|
#include <asm/processor.h>
|
|
|
|
#include <asm/immap_85xx.h>
|
|
|
|
#include <asm/fsl_law.h>
|
|
|
|
#include <asm/fsl_serdes.h>
|
|
|
|
#include <asm/fsl_portals.h>
|
|
|
|
#include <asm/fsl_liodn.h>
|
|
|
|
#include <malloc.h>
|
|
|
|
#include <fm_eth.h>
|
|
|
|
#include <fsl_mdio.h>
|
|
|
|
#include <miiphy.h>
|
|
|
|
#include <phy.h>
|
2015-10-26 11:47:47 +00:00
|
|
|
#include <fsl_dtsec.h>
|
2014-03-05 07:04:48 +00:00
|
|
|
#include <asm/fsl_serdes.h>
|
|
|
|
|
2021-06-16 12:17:31 +00:00
|
|
|
extern u8 get_hw_revision(void);
|
|
|
|
|
2021-04-13 16:47:57 +00:00
|
|
|
/* Disable the MAC5 and MAC6 "fsl,fman-memac" nodes and the two
|
|
|
|
* "fsl,dpa-ethernet" nodes that reference them.
|
|
|
|
*/
|
|
|
|
void fdt_fixup_board_fman_ethernet(void *fdt)
|
|
|
|
{
|
|
|
|
int mac_off, eth_off, i;
|
|
|
|
char mac_path[2][42] = {
|
|
|
|
"/soc@ffe000000/fman@400000/ethernet@e8000",
|
|
|
|
"/soc@ffe000000/fman@400000/ethernet@ea000",
|
|
|
|
};
|
|
|
|
u32 eth_ph;
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
|
/* Disable the MAC node */
|
|
|
|
mac_off = fdt_path_offset(fdt, mac_path[i]);
|
|
|
|
if (mac_off < 0)
|
|
|
|
continue;
|
|
|
|
fdt_status_disabled(fdt, mac_off);
|
|
|
|
|
|
|
|
/* Disable the fsl,dpa-ethernet node that points to the MAC.
|
|
|
|
* The fsl,fman-mac property refers to the MAC's phandle.
|
|
|
|
*/
|
|
|
|
eth_ph = fdt_get_phandle(fdt, mac_off);
|
|
|
|
if (eth_ph <= 0)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
eth_off = fdt_node_offset_by_prop_value(fdt, -1, "fsl,fman-mac",
|
|
|
|
ð_ph,
|
|
|
|
sizeof(eth_ph));
|
|
|
|
if (eth_off >= 0)
|
|
|
|
fdt_status_disabled(fdt, eth_off);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-06-16 12:17:31 +00:00
|
|
|
/* Update the address of the second Aquantia PHY on boards revision D and up.
|
|
|
|
* Also rename the PHY node to align with the address change.
|
|
|
|
*/
|
|
|
|
void fdt_fixup_board_phy(void *fdt)
|
|
|
|
{
|
|
|
|
const char phy_path[] =
|
|
|
|
"/soc@ffe000000/fman@400000/mdio@fd000/ethernet-phy@1";
|
|
|
|
int ret, offset, new_addr = AQR113C_PHY_ADDR2;
|
|
|
|
char new_name[] = "ethernet-phy@00";
|
|
|
|
|
|
|
|
if (get_hw_revision() == 'C')
|
|
|
|
return;
|
|
|
|
|
|
|
|
offset = fdt_path_offset(fdt, phy_path);
|
|
|
|
if (offset < 0) {
|
|
|
|
printf("ethernet-phy@1 node not found in the dts\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = fdt_setprop(fdt, offset, "reg", &new_addr, sizeof(new_addr));
|
|
|
|
if (ret < 0) {
|
|
|
|
printf("Unable to set 'reg' for node ethernet-phy@1: %s\n",
|
|
|
|
fdt_strerror(ret));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprintf(new_name, "ethernet-phy@%x", new_addr);
|
|
|
|
ret = fdt_set_name(fdt, offset, new_name);
|
|
|
|
if (ret < 0)
|
|
|
|
printf("Unable to rename node ethernet-phy@1: %s\n",
|
|
|
|
fdt_strerror(ret));
|
|
|
|
}
|
|
|
|
|
2014-03-05 07:04:48 +00:00
|
|
|
void fdt_fixup_board_enet(void *fdt)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|