All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josua Mayer <josua@solid-run.com>
To: u-boot@lists.denx.de
Cc: alvaro.karsz@solid-run.com, Baruch Siach <baruch@tkos.co.il>,
	Fabio Estevam <festevam@gmail.com>
Subject: Re: [PATCH v2 4/5] mx6cuboxi: fixup dtb ethernet phy nodes before booting an OS
Date: Thu, 19 May 2022 13:11:51 +0300	[thread overview]
Message-ID: <706932e2-9969-35ee-9d5b-06fb646b9edf@solid-run.com> (raw)
In-Reply-To: <20220519093200.20571-5-josua@solid-run.com>

Hold off on this one, I found a mistake in the switch case below.
While fully functional, it does enable both phy nodes for addresses 0 
and 4 unconditionally.
Cubox requires both, as do potentially any derivate devices - but the 
HummingBoards do not.

Am 19.05.22 um 12:31 schrieb Josua Mayer:
> SoM revision 1.9 has replaced the ar8035 phy address 0 with an adin1300
> at address 1. Because early SoMs had a hardware flaw, the ar8035 can
> also appear at address 4 - making it a total of 3 phy nodes in the DTB.
> 
> To avoid confusing Linux with probe errors, fixup the dtb to only enable
> the phy node that is detected at runtime.
> 
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
>   board/solidrun/mx6cuboxi/mx6cuboxi.c | 78 ++++++++++++++++++++++++++++
>   configs/mx6cuboxi_defconfig          |  1 +
>   2 files changed, 79 insertions(+)
> 
> diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> index 6207bf8253..42aa5cb63c 100644
> --- a/board/solidrun/mx6cuboxi/mx6cuboxi.c
> +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> @@ -1,5 +1,7 @@
>   // SPDX-License-Identifier: GPL-2.0+
>   /*
> + * Copyright (C) 2022 Josua Mayer <josua@solid-run.com>
> + *
>    * Copyright (C) 2015 Freescale Semiconductor, Inc.
>    *
>    * Author: Fabio Estevam <fabio.estevam@freescale.com>
> @@ -39,6 +41,8 @@
>   #include <spl.h>
>   #include <usb.h>
>   #include <usb/ehci-ci.h>
> +#include <netdev.h>
> +#include <phy.h>
>   
>   DECLARE_GLOBAL_DATA_PTR;
>   
> @@ -407,6 +411,80 @@ out:
>   	return 0;
>   }
>   
> +static int find_ethernet_phy(void)
> +{
> +	struct mii_dev *bus = NULL;
> +	struct phy_device *phydev = NULL;
> +	int phy_addr = -ENOENT;
> +
> +#ifdef CONFIG_FEC_MXC
> +	bus = fec_get_miibus(ENET_BASE_ADDR, -1);
> +	if (!bus)
> +		return -ENOENT;
> +
> +	// scan address 0, 1, 4
> +	phydev = phy_find_by_mask(bus, 0b00010011);
> +	if (!phydev) {
> +		free(bus);
> +		return -ENOENT;
> +	}
> +	pr_debug("%s: detected ethernet phy at address %d\n", __func__, phydev->addr);
> +	phy_addr = phydev->addr;
> +
> +	free(phydev);
> +#endif
> +
> +	return phy_addr;
> +}
> +
> +#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
> +/*
> + * Configure the correct ethernet PHYs nodes in device-tree:
> + * - AR8035 at addresses 0 or 4: Cubox
> + * - AR8035 at address 0: HummingBoard, HummingBoard 2
> + * - ADIN1300 at address 1: since SoM rev 1.9
> + */
> +int ft_board_setup(void *fdt, struct bd_info *bd)
> +{
> +	int node_phy0, node_phy1, node_phy4;
> +	int ret, phy;
> +	bool enable_phy0 = false, enable_phy1 = false, enable_phy4 = false;
> +
> +	// detect phy
> +	phy = find_ethernet_phy();
> +	if (phy == 0 || phy == 4) {
> +		enable_phy0 = true;
> +		switch (board_type()) {
> +		case CUBOXI:
> +		case UNKNOWN:
> +		default:
> +			enable_phy4 = true;
> +		}
> +	} else if (phy == 1) {
> +		enable_phy1 = true;
> +	} else {
> +		pr_err("%s: couldn't detect ethernet phy, not patching dtb!\n", __func__);
> +		return 0;
> +	}
> +
> +	// update all phy nodes status
> +	node_phy0 = fdt_path_offset(fdt, "/soc/bus@2100000/ethernet@2188000/mdio/ethernet-phy@0");
> +	ret = fdt_setprop_string(fdt, node_phy0, "status", enable_phy0 ? "okay" : "disabled");
> +	if (ret < 0 && enable_phy0)
> +		pr_err("%s: failed to enable ethernet phy at address 0 in dtb!\n", __func__);
> +	node_phy1 = fdt_path_offset(fdt, "/soc/bus@2100000/ethernet@2188000/mdio/ethernet-phy@1");
> +	ret = fdt_setprop_string(fdt, node_phy1, "status", enable_phy1 ? "okay" : "disabled");
> +	if (ret < 0 && enable_phy1)
> +		pr_err("%s: failed to enable ethernet phy at address 1 in dtb!\n", __func__);
> +	node_phy4 = fdt_path_offset(fdt, "/soc/bus@2100000/ethernet@2188000/mdio/ethernet-phy@4");
> +	ret = fdt_setprop_string(fdt, node_phy4, "status", enable_phy4 ? "okay" : "disabled");
> +	if (ret < 0 && enable_phy4)
> +		pr_err("%s: failed to enable ethernet phy at address 4 in dtb!\n", __func__);
> +
> +	return 0;
> +}
> +#endif
> +
>   /* Override the default implementation, DT model is not accurate */
>   int show_board_info(void)
>   {
> diff --git a/configs/mx6cuboxi_defconfig b/configs/mx6cuboxi_defconfig
> index 1e2e332af9..d3ac8eeeba 100644
> --- a/configs/mx6cuboxi_defconfig
> +++ b/configs/mx6cuboxi_defconfig
> @@ -22,6 +22,7 @@ CONFIG_CMD_HDMIDETECT=y
>   CONFIG_AHCI=y
>   CONFIG_DISTRO_DEFAULTS=y
>   CONFIG_FIT=y
> +CONFIG_OF_BOARD_SETUP=y
>   CONFIG_BOOTCOMMAND="run findfdt; run finduuid; run distro_bootcmd"
>   CONFIG_USE_PREBOOT=y
>   CONFIG_PREBOOT="if hdmidet; then usb start; setenv stdin  serial,usbkbd; setenv stdout serial,vidconsole; setenv stderr serial,vidconsole; else setenv stdin  serial; setenv stdout serial; setenv stderr serial; fi;"

  reply	other threads:[~2022-05-19 10:12 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-19  9:31 [PATCH v2 0/5] mx6cuboxi: add eth support for SoMs revision 1.9+ Josua Mayer
2022-05-19  9:31 ` [PATCH v2 1/5] phy: adin: fix broken support for adi, phy-mode-override Josua Mayer
2022-06-15 11:11   ` sbabic
2022-05-19  9:31 ` [PATCH v2 2/5] phy: adin: add support for clock output Josua Mayer
2022-06-15 11:10   ` sbabic
2022-05-19  9:31 ` [PATCH v2 3/5] ARM: dts: imx6qdl-sr-som: add support for alternate phy addresses Josua Mayer
2022-05-19 10:21   ` Mark Kettenis
2022-05-19 12:56     ` Josua Mayer
2022-06-15 11:11   ` sbabic
2022-05-19  9:31 ` [PATCH v2 4/5] mx6cuboxi: fixup dtb ethernet phy nodes before booting an OS Josua Mayer
2022-05-19 10:11   ` Josua Mayer [this message]
2022-06-15 11:11   ` sbabic
2022-05-19  9:32 ` [PATCH v2 5/5] mx6cuboxi: enable driver for adin1300 phy Josua Mayer
2022-06-15 11:11   ` sbabic
     [not found] <62a9be4e.1c69fb81.1dd46.88ccSMTPIN_ADDED_MISSING@mx.google.com>
2022-06-16  8:44 ` [PATCH v2 4/5] mx6cuboxi: fixup dtb ethernet phy nodes before booting an OS Josua Mayer
2022-06-16 11:10   ` Stefano Babic

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=706932e2-9969-35ee-9d5b-06fb646b9edf@solid-run.com \
    --to=josua@solid-run.com \
    --cc=alvaro.karsz@solid-run.com \
    --cc=baruch@tkos.co.il \
    --cc=festevam@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.