mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
c7e73b5051
Remove board specific PHY fixup introduced by commit: | 709bc0657fe6f9f5 ("ARM: imx6ul: add fec MAC refrence clock and phy fixup init") This fixup addresses boards with a specific configuration: a KSZ8081RNA PHY with attached clock source to XI (Pin 8) of the PHY equal to 50MHz. For the KSZ8081RND PHY, the meaning of the reg 0x1F bit 7 is different (compared to the KSZ8081RNA). A set bit means: - KSZ8081RNA: clock input to XI (Pin 8) is 50MHz for RMII - KSZ8081RND: clock input to XI (Pin 8) is 25MHz for RMII In other configurations, for example a KSZ8081RND PHY or a KSZ8081RNA with 25Mhz clock source, the PHY will glitch and stay in not recoverable state. It is not possible to detect the clock source frequency of the PHY. And it is not possible to automatically detect KSZ8081 PHY variant - both have same PHY ID. It is not possible to overwrite the fixup configuration by providing proper device tree description. The only way is to remove this fixup. If this patch breaks network functionality on your board, fix it by adding PHY node with following properties: ethernet-phy@x { ... micrel,led-mode = <1>; clocks = <&clks IMX6UL_CLK_ENET_REF>; clock-names = "rmii-ref"; ... }; The board which was referred in the initial patch is already fixed. See: arch/arm/boot/dts/imx6ul-14x14-evk.dtsi Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Fabio Estevam <festevam@gmail.com> Tested-by: Sébastien Szymanski <sebastien.szymanski@armadeus.com> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
71 lines
1.6 KiB
C
71 lines
1.6 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (C) 2015 Freescale Semiconductor, Inc.
|
|
*/
|
|
#include <linux/irqchip.h>
|
|
#include <linux/mfd/syscon.h>
|
|
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
|
|
#include <linux/micrel_phy.h>
|
|
#include <linux/of_platform.h>
|
|
#include <linux/phy.h>
|
|
#include <linux/regmap.h>
|
|
#include <asm/mach/arch.h>
|
|
#include <asm/mach/map.h>
|
|
|
|
#include "common.h"
|
|
#include "cpuidle.h"
|
|
|
|
static void __init imx6ul_enet_clk_init(void)
|
|
{
|
|
struct regmap *gpr;
|
|
|
|
gpr = syscon_regmap_lookup_by_compatible("fsl,imx6ul-iomuxc-gpr");
|
|
if (!IS_ERR(gpr))
|
|
regmap_update_bits(gpr, IOMUXC_GPR1, IMX6UL_GPR1_ENET_CLK_DIR,
|
|
IMX6UL_GPR1_ENET_CLK_OUTPUT);
|
|
else
|
|
pr_err("failed to find fsl,imx6ul-iomux-gpr regmap\n");
|
|
}
|
|
|
|
static inline void imx6ul_enet_init(void)
|
|
{
|
|
imx6ul_enet_clk_init();
|
|
}
|
|
|
|
static void __init imx6ul_init_machine(void)
|
|
{
|
|
of_platform_default_populate(NULL, NULL, NULL);
|
|
imx6ul_enet_init();
|
|
imx_anatop_init();
|
|
imx6ul_pm_init();
|
|
}
|
|
|
|
static void __init imx6ul_init_irq(void)
|
|
{
|
|
imx_init_revision_from_anatop();
|
|
imx_src_init();
|
|
irqchip_init();
|
|
imx6_pm_ccm_init("fsl,imx6ul-ccm");
|
|
}
|
|
|
|
static void __init imx6ul_init_late(void)
|
|
{
|
|
imx6sx_cpuidle_init();
|
|
|
|
if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ))
|
|
platform_device_register_simple("imx6q-cpufreq", -1, NULL, 0);
|
|
}
|
|
|
|
static const char * const imx6ul_dt_compat[] __initconst = {
|
|
"fsl,imx6ul",
|
|
"fsl,imx6ull",
|
|
NULL,
|
|
};
|
|
|
|
DT_MACHINE_START(IMX6UL, "Freescale i.MX6 Ultralite (Device Tree)")
|
|
.init_irq = imx6ul_init_irq,
|
|
.init_machine = imx6ul_init_machine,
|
|
.init_late = imx6ul_init_late,
|
|
.dt_compat = imx6ul_dt_compat,
|
|
MACHINE_END
|