From patchwork Sun Mar 1 16:33:35 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 444838 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id E71A914010F for ; Mon, 2 Mar 2015 07:41:03 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 8119DA7461; Sun, 1 Mar 2015 21:25:38 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id V2_sVrk78Lnw; Sun, 1 Mar 2015 21:25:38 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DD375A749B; Sun, 1 Mar 2015 21:25:37 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E4C154A033 for ; Sun, 1 Mar 2015 17:33:57 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VgBmN_s4KBvl for ; Sun, 1 Mar 2015 17:33:57 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-pd0-f201.google.com (mail-pd0-f201.google.com [209.85.192.201]) by theia.denx.de (Postfix) with ESMTPS id 1FBAF4A01F for ; Sun, 1 Mar 2015 17:33:55 +0100 (CET) Received: by pdbfl12 with SMTP id fl12so602241pdb.0 for ; Sun, 01 Mar 2015 08:33:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=/0SWJgCbdSMPijdwKmZh7Km8EqTHc7hmbR2Sc/ocU/w=; b=ei/nVyuhbdB6qyL+6cDiJgKntGO93pgaoFWuF8qOtieqt+PE8ed7nnvMLsF4q+BIGd Gljfu79mwpLQkZPjqIbcbb0WxsOXNgR5OnyMHXtAhhAg6zAPxduCkjv6IVKGa3SH8C+K f5eRJmdn9+cyE74I5LSDn0DYeMLEdSFZDTeTZNaw9bpRowZOYboRPNYlCoyA+otahKPr htsfJ1nfcHAW9iLj1jSz59vjNjcGc6HOI5pYnsZgFKBVswFjoeSVHm7z+Bl9zwiQk9c2 a1QCSEba5xguI/RHm60d+gNzCL/C+5WlpUEf7vbzZt+cq51MDOPwi21Ao7EZLf8CoqhZ DPWg== X-Gm-Message-State: ALoCoQk3dbjw++9X/8TXxQIKXX0v/hLKYCYYm/DFMEfovgbsz5OXrWftn1DcuyO9g/a4RPT+sDaI X-Received: by 10.67.23.71 with SMTP id hy7mr22568019pad.45.1425227633823; Sun, 01 Mar 2015 08:33:53 -0800 (PST) Received: from corpmail-nozzle1-1.hot.corp.google.com ([100.108.1.104]) by gmr-mx.google.com with ESMTPS id 3si387737yhe.0.2015.03.01.08.33.53 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 01 Mar 2015 08:33:53 -0800 (PST) Received: from kaki.bld.corp.google.com ([172.29.216.32]) by corpmail-nozzle1-1.hot.corp.google.com with ESMTP id LO01YYXK.1; Sun, 01 Mar 2015 08:33:53 -0800 Received: by kaki.bld.corp.google.com (Postfix, from userid 121222) id 2E793220F7E; Sun, 1 Mar 2015 09:33:53 -0700 (MST) From: Simon Glass To: U-Boot Mailing List Date: Sun, 1 Mar 2015 09:33:35 -0700 Message-Id: <1425227620-6656-9-git-send-email-sjg@chromium.org> X-Mailer: git-send-email 2.2.0.rc0.207.ga3a616c In-Reply-To: <1425227620-6656-1-git-send-email-sjg@chromium.org> References: <1425227620-6656-1-git-send-email-sjg@chromium.org> Subject: [U-Boot] [RFC PATCH 09/13] dm: net: Adjust PHY interface to work with CONFIG_DM_ETH X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" When driver model is used for Ethernet a few functions are passed a udevice instead of an eth_device. Also add a function to find a PHY type given its name. This will be used to decode the device tree node. Finally, put a phy_interface field in struct eth_pdata since this is an important part of the platform data for Ethernet. Signed-off-by: Simon Glass Acked-by: Joe Hershberger --- common/miiphyutil.c | 1 + drivers/net/phy/phy.c | 22 ++++++++++++++++++++++ include/net.h | 2 ++ include/phy.h | 23 ++++++++++++++++++++++- 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/common/miiphyutil.c b/common/miiphyutil.c index 74812e6..c88c28a 100644 --- a/common/miiphyutil.c +++ b/common/miiphyutil.c @@ -11,6 +11,7 @@ */ #include +#include #include #include diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index df7e945..9d88afe 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -754,7 +755,11 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, unsigned phy_mask, return get_phy_device_by_mask(bus, phy_mask, interface); } +#ifdef CONFIG_DM_ETH +void phy_connect_dev(struct phy_device *phydev, struct udevice *dev) +#else void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev) +#endif { /* Soft Reset the PHY */ phy_reset(phydev); @@ -767,8 +772,13 @@ void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev) debug("%s connected to %s\n", dev->name, phydev->drv->name); } +#ifdef CONFIG_DM_ETH +struct phy_device *phy_connect(struct mii_dev *bus, int addr, + struct udevice *dev, phy_interface_t interface) +#else struct phy_device *phy_connect(struct mii_dev *bus, int addr, struct eth_device *dev, phy_interface_t interface) +#endif { struct phy_device *phydev; @@ -813,3 +823,15 @@ int phy_shutdown(struct phy_device *phydev) return 0; } + +int phy_get_interface_by_name(const char *str) +{ + int i; + + for (i = 0; i < PHY_INTERFACE_MODE_COUNT; i++) { + if (!strcmp(str, phy_interface_strings[i])) + return i; + } + + return -1; +} diff --git a/include/net.h b/include/net.h index e9cb4a3..b146700 100644 --- a/include/net.h +++ b/include/net.h @@ -84,10 +84,12 @@ enum eth_state_t { * * @iobase: The base address of the hardware registers * @enetaddr: The Ethernet MAC address that is loaded from EEPROM or env + * @phy_interface: PHY interface to use - see PHY_INTERFACE_MODE_... */ struct eth_pdata { phys_addr_t iobase; unsigned char enetaddr[6]; + int phy_interface; }; /** diff --git a/include/phy.h b/include/phy.h index d117fc1..384dc23 100644 --- a/include/phy.h +++ b/include/phy.h @@ -51,7 +51,9 @@ typedef enum { PHY_INTERFACE_MODE_RGMII_TXID, PHY_INTERFACE_MODE_RTBI, PHY_INTERFACE_MODE_XGMII, - PHY_INTERFACE_MODE_NONE /* Must be last */ + PHY_INTERFACE_MODE_NONE, /* Must be last */ + + PHY_INTERFACE_MODE_COUNT, } phy_interface_t; static const char *phy_interface_strings[] = { @@ -142,7 +144,11 @@ struct phy_device { struct phy_driver *drv; void *priv; +#ifdef CONFIG_DM_ETH + struct udevice *dev; +#else struct eth_device *dev; +#endif /* forced speed & duplex (no autoneg) * partner speed & duplex & pause (autoneg) @@ -205,10 +211,17 @@ int phy_init(void); int phy_reset(struct phy_device *phydev); struct phy_device *phy_find_by_mask(struct mii_dev *bus, unsigned phy_mask, phy_interface_t interface); +#ifdef CONFIG_DM_ETH +void phy_connect_dev(struct phy_device *phydev, struct udevice *dev); +struct phy_device *phy_connect(struct mii_dev *bus, int addr, + struct udevice *dev, + phy_interface_t interface); +#else void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev); struct phy_device *phy_connect(struct mii_dev *bus, int addr, struct eth_device *dev, phy_interface_t interface); +#endif int phy_startup(struct phy_device *phydev); int phy_config(struct phy_device *phydev); int phy_shutdown(struct phy_device *phydev); @@ -242,6 +255,14 @@ int phy_vitesse_init(void); int board_phy_config(struct phy_device *phydev); +/** + * phy_get_interface_by_name() - Look up a PHY interface name + * + * @str: PHY interface name, e.g. "mii" + * @return PHY_INTERFACE_MODE_... value, or -1 if not found + */ +int phy_get_interface_by_name(const char *str); + /* PHY UIDs for various PHYs that are referenced in external code */ #define PHY_UID_CS4340 0x13e51002 #define PHY_UID_TN2020 0x00a19410