From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6345AC433EF for ; Wed, 27 Apr 2022 10:44:07 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id D76A083ED4; Wed, 27 Apr 2022 12:43:24 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="Zmyt0p4o"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id B57E383EAB; Wed, 27 Apr 2022 12:42:47 +0200 (CEST) Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 2953A83ECC for ; Wed, 27 Apr 2022 12:42:27 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=kabel@kernel.org Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 93E3BB82524; Wed, 27 Apr 2022 10:42:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C88CBC385AF; Wed, 27 Apr 2022 10:42:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651056145; bh=hI2Inf1HERXRgY01wbeGWiftkTIaaQcQ3Q0CBm5M+ic=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zmyt0p4o2vb7+1OlQJ55LJarrmYjil2ql7TbyYpf3/EFa0bWoLHDUIOn7s3a6lEQT TCG29EPaljEaxv9XAvcdKZUiPj5i7Voh+RCAENGkdtysXSBnIg7av4rVqm3/b0/Rg7 p4FOruU4moL2xYugu+IE25SL1XVF9fCWE3X04TvQaVrMy7+x0D6OG6uqLfXYzex8ze KztSCxnoKElZtAdYdMQ7I1qWORLIL/hAvXzteX+0l1OhbE6laopmPJuNo5BldvLiL8 7m68nPfyLEkNPJF3GFfgl38LZs6gjQbiNKxh40TS4Ftyw6zZGLeWok3AY31m7Ab2ay m0BTzhPomO6sg== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Stefan Roese Cc: Robert Marko , =?UTF-8?q?Pali=20Roh=C3=A1r?= , U-Boot-Denx , Ramon Fried , Joe Hershberger , =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH u-boot-marvell 07/19] arm: mvebu: turris_mox: Use DM registered MDIO Date: Wed, 27 Apr 2022 12:41:50 +0200 Message-Id: <20220427104202.1205-8-kabel@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220427104202.1205-1-kabel@kernel.org> References: <20220427104202.1205-1-kabel@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean From: Marek Behún In order to be able to get rid of the non-DM MDIO bus registered in mvneta driver, start using the DM registered one in Turris MOX board code. This also allows us to drop the hack introduced in MOX' -u-boot.dtsi file. Signed-off-by: Marek Behún --- .../dts/armada-3720-turris-mox-u-boot.dtsi | 19 ---- board/CZ.NIC/turris_mox/turris_mox.c | 88 +++++++++---------- 2 files changed, 44 insertions(+), 63 deletions(-) diff --git a/arch/arm/dts/armada-3720-turris-mox-u-boot.dtsi b/arch/arm/dts/armada-3720-turris-mox-u-boot.dtsi index 28a36a6103..71d5e70ca4 100644 --- a/arch/arm/dts/armada-3720-turris-mox-u-boot.dtsi +++ b/arch/arm/dts/armada-3720-turris-mox-u-boot.dtsi @@ -3,25 +3,6 @@ * 2022 by Marek Behún */ -/ { - mdio { - #address-cells = <1>; - #size-cells = <0>; - - old_binding_phy1: ethernet-phy@1 { - reg = <1>; - }; - }; -}; - -ð0 { - pinctrl-0 = <&rgmii_pins>, <&smi_pins>; - /delete-property/ phy-handle; - phy = <&old_binding_phy1>; -}; - -/delete-node/ &mdio; - &usb3 { vbus-supply = <&exp_usb3_vbus>; }; diff --git a/board/CZ.NIC/turris_mox/turris_mox.c b/board/CZ.NIC/turris_mox/turris_mox.c index 9702d1fc78..a4738b3a3c 100644 --- a/board/CZ.NIC/turris_mox/turris_mox.c +++ b/board/CZ.NIC/turris_mox/turris_mox.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -216,35 +217,35 @@ static int mox_get_topology(const u8 **ptopology, int *psize, int *pis_sd) #define SW_SMI_CMD_R(d, r) (0x9800 | (((d) & 0x1f) << 5) | ((r) & 0x1f)) #define SW_SMI_CMD_W(d, r) (0x9400 | (((d) & 0x1f) << 5) | ((r) & 0x1f)) -static int sw_multi_read(struct mii_dev *bus, int sw, int dev, int reg) +static int sw_multi_read(struct udevice *bus, int sw, int dev, int reg) { - bus->write(bus, sw, 0, 0, SW_SMI_CMD_R(dev, reg)); + dm_mdio_write(bus, sw, MDIO_DEVAD_NONE, 0, SW_SMI_CMD_R(dev, reg)); mdelay(5); - return bus->read(bus, sw, 0, 1); + return dm_mdio_read(bus, sw, MDIO_DEVAD_NONE, 1); } -static void sw_multi_write(struct mii_dev *bus, int sw, int dev, int reg, +static void sw_multi_write(struct udevice *bus, int sw, int dev, int reg, u16 val) { - bus->write(bus, sw, 0, 1, val); - bus->write(bus, sw, 0, 0, SW_SMI_CMD_W(dev, reg)); + dm_mdio_write(bus, sw, MDIO_DEVAD_NONE, 1, val); + dm_mdio_write(bus, sw, MDIO_DEVAD_NONE, 0, SW_SMI_CMD_W(dev, reg)); mdelay(5); } -static int sw_scratch_read(struct mii_dev *bus, int sw, int reg) +static int sw_scratch_read(struct udevice *bus, int sw, int reg) { sw_multi_write(bus, sw, 0x1c, 0x1a, (reg & 0x7f) << 8); return sw_multi_read(bus, sw, 0x1c, 0x1a) & 0xff; } -static void sw_led_write(struct mii_dev *bus, int sw, int port, int reg, +static void sw_led_write(struct udevice *bus, int sw, int port, int reg, u16 val) { sw_multi_write(bus, sw, port, 0x16, 0x8000 | ((reg & 7) << 12) | (val & 0x7ff)); } -static void sw_blink_leds(struct mii_dev *bus, int peridot, int topaz) +static void sw_blink_leds(struct udevice *bus, int peridot, int topaz) { int i, p; struct { @@ -275,7 +276,7 @@ static void sw_blink_leds(struct mii_dev *bus, int peridot, int topaz) } } -static void check_switch_address(struct mii_dev *bus, int addr) +static void check_switch_address(struct udevice *bus, int addr) { if (sw_scratch_read(bus, addr, 0x70) >> 3 != addr) printf("Check of switch MDIO address failed for 0x%02x\n", @@ -374,36 +375,22 @@ static void mox_phy_modify(struct phy_device *phydev, int page, int reg, static void mox_phy_leds_start_blinking(void) { struct phy_device *phydev; - struct mii_dev *bus; - const char *node_name; - int node; + ofnode phy_node; - node = fdt_path_offset(gd->fdt_blob, "ethernet0"); - if (node < 0) { - printf("Cannot get eth0!\n"); - return; - } + phy_node = ofnode_get_phy_node(ofnode_path("ethernet0")); + if (!ofnode_valid(phy_node)) + goto err; - node_name = fdt_get_name(gd->fdt_blob, node, NULL); - if (!node_name) { - printf("Cannot get eth0 node name!\n"); - return; - } - - bus = miiphy_get_dev_by_name(node_name); - if (!bus) { - printf("Cannot get MDIO bus device!\n"); - return; - } - - phydev = phy_find_by_mask(bus, BIT(1)); - if (!phydev) { - printf("Cannot get ethernet PHY!\n"); - return; - } + phydev = dm_phy_find_by_ofnode(phy_node); + if (!phydev) + goto err; mox_phy_modify(phydev, 3, 0x12, 0x700, 0x400); mox_phy_modify(phydev, 3, 0x10, 0xff, 0xbb); + + return; +err: + printf("Cannot get ethernet PHY!\n"); } static bool read_reset_button(void) @@ -611,6 +598,26 @@ int show_board_info(void) return 0; } +static struct udevice *mox_mdio_bus(void) +{ + struct udevice *bus; + ofnode node; + + node = ofnode_by_compatible(ofnode_null(), "marvell,orion-mdio"); + if (!ofnode_valid(node)) + goto err; + + dm_mdio_probe_devices(); + + if (uclass_get_device_by_ofnode(UCLASS_MDIO, node, &bus)) + goto err; + + return bus; +err: + printf("Cannot get MDIO bus device!\n"); + return NULL; +} + int last_stage_init(void) { struct gpio_desc reset_gpio = {}; @@ -636,16 +643,9 @@ int last_stage_init(void) * 0x70 of Peridot (and potentially Topaz) modules */ if (peridot || topaz) { - struct mii_dev *bus; - const char *node_name; - int node; + struct udevice *bus = mox_mdio_bus(); - node = fdt_path_offset(gd->fdt_blob, "ethernet0"); - node_name = (node >= 0) ? fdt_get_name(gd->fdt_blob, node, NULL) : NULL; - bus = node_name ? miiphy_get_dev_by_name(node_name) : NULL; - if (!bus) { - printf("Cannot get MDIO bus device!\n"); - } else { + if (bus) { int i; for (i = 0; i < peridot; ++i) -- 2.35.1