Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752466AbdF0Pki convert rfc822-to-8bit (ORCPT ); Tue, 27 Jun 2017 11:40:38 -0400 Received: from gloria.sntech.de ([95.129.55.99]:51430 "EHLO gloria.sntech.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752015AbdF0Pka (ORCPT ); Tue, 27 Jun 2017 11:40:30 -0400 From: Heiko Stuebner To: "David.Wu" Cc: davem@davemloft.net, robh+dt@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, olof@lixom.net, linux@armlinux.org.uk, arnd@arndb.de, andrew@lunn.ch, f.fainelli@gmail.com, peppe.cavallaro@st.com, alexandre.torgue@st.com, huangtao@rock-chips.com, hwg@rock-chips.com, netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 05/11] net: stmmac: dwmac-rk: Add internal phy support Date: Tue, 27 Jun 2017 17:40:04 +0200 Message-ID: <2551050.3LrlfzW890@phil> User-Agent: KMail/5.2.3 (Linux/4.9.0-2-amd64; KDE/5.28.0; x86_64; ; ) In-Reply-To: <924d248f-f1c0-7fa2-4b97-c4f753ffe35b@rock-chips.com> References: <1498192929-7519-1-git-send-email-david.wu@rock-chips.com> <2805278.mLmlzpUgMM@phil> <924d248f-f1c0-7fa2-4b97-c4f753ffe35b@rock-chips.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4910 Lines: 116 Hi David, Am Dienstag, 27. Juni 2017, 22:33:20 CEST schrieb David.Wu: > 在 2017/6/24 1:19, Heiko Stuebner 写道: > > Am Freitag, 23. Juni 2017, 12:59:07 CEST schrieb David Wu: > >> To make internal phy worked, need to configure the phy_clock, > >> phy cru_reset and related registers. > >> > >> Change-Id: I6971c0a769754b824b1b908b56080cbaf7867d13 > > > > please remove all Change-Ids from patches before sending upstream. > > There were more affected patches in this series. > > > >> Signed-off-by: David Wu > >> --- > >> .../devicetree/bindings/net/rockchip-dwmac.txt | 3 + > >> drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 82 ++++++++++++++++++++++ > >> 2 files changed, 85 insertions(+) > >> > >> diff --git a/Documentation/devicetree/bindings/net/rockchip-dwmac.txt b/Documentation/devicetree/bindings/net/rockchip-dwmac.txt > >> index 8f42755..0514f69 100644 > >> --- a/Documentation/devicetree/bindings/net/rockchip-dwmac.txt > >> +++ b/Documentation/devicetree/bindings/net/rockchip-dwmac.txt > >> @@ -22,6 +22,7 @@ Required properties: > >> <&cru SCLK_MACREF_OUT> clock gate for RMII reference clock output > >> <&cru ACLK_GMAC>: AXI clock gate for GMAC > >> <&cru PCLK_GMAC>: APB clock gate for GMAC > >> + <&cru MAC_PHY>: clock for internal macphy > > > > that clock should not be listed as always "Required" like it is here. > > Make it some sort of extra paragraph marking it as required when using > > an internal phy. > > > > Okay, move it to the option. > > >> - clock-names: One name for each entry in the clocks property. > >> - phy-mode: See ethernet.txt file in the same directory. > >> - pinctrl-names: Names corresponding to the numbered pinctrl states. > >> @@ -35,6 +36,8 @@ Required properties: > >> - assigned-clocks: main clock, should be <&cru SCLK_MAC>; > >> - assigned-clock-parents = parent of main clock. > >> can be <&ext_gmac> or <&cru SCLK_MAC_PLL>. > >> + - phy-type: For internal phy, it must be "internal"; For external phy, no need > >> + to configure this. > >> > >> Optional properties: > >> - tx_delay: Delay value for TXD timing. Range value is 0~0x7F, 0x30 as default. > >> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > >> index a8e8fd5..c1a1413 100644 > >> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > >> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > >> @@ -41,6 +41,7 @@ struct rk_gmac_ops { > >> void (*set_to_rmii)(struct rk_priv_data *bsp_priv); > >> void (*set_rgmii_speed)(struct rk_priv_data *bsp_priv, int speed); > >> void (*set_rmii_speed)(struct rk_priv_data *bsp_priv, int speed); > >> + void (*internal_phy_powerup)(struct rk_priv_data *bsp_priv); > >> }; > >> > >> struct rk_priv_data { > >> @@ -52,6 +53,7 @@ struct rk_priv_data { > >> > >> bool clk_enabled; > >> bool clock_input; > >> + bool internal_phy; > >> > >> struct clk *clk_mac; > >> struct clk *gmac_clkin; > >> @@ -61,6 +63,9 @@ struct rk_priv_data { > >> struct clk *clk_mac_refout; > >> struct clk *aclk_mac; > >> struct clk *pclk_mac; > >> + struct clk *clk_macphy; > >> + > >> + struct reset_control *macphy_reset; > >> > >> int tx_delay; > >> int rx_delay; > >> @@ -750,6 +755,48 @@ static void rk3399_set_rmii_speed(struct rk_priv_data *bsp_priv, int speed) > >> .set_rmii_speed = rk3399_set_rmii_speed, > >> }; > >> > >> +#define RK_GRF_MACPHY_CON0 0xb00 > >> +#define RK_GRF_MACPHY_CON1 0xb04 > >> +#define RK_GRF_MACPHY_CON2 0xb08 > >> +#define RK_GRF_MACPHY_CON3 0xb0c > >> + > >> +#define RK_MACPHY_ENABLE GRF_BIT(0) > >> +#define RK_MACPHY_DISABLE GRF_CLR_BIT(0) > >> +#define RK_MACPHY_CFG_CLK_50M GRF_BIT(14) > >> +#define RK_GMAC2PHY_RMII_MODE (GRF_BIT(6) | GRF_CLR_BIT(7)) > >> +#define RK_GRF_CON2_MACPHY_ID HIWORD_UPDATE(0x1234, 0xffff, 0) > >> +#define RK_GRF_CON3_MACPHY_ID HIWORD_UPDATE(0x35, 0x3f, 0) > > > > These are primarily registers for the rk3328 and come from the GRF which is > > somehow prone to chip-designers moving bits around in registers and also > > especially the register offsets (*_CONx) will probably not stay the same > > on future socs. > > > > I think they should try to keep the same. But what you said is very > reasonable. So let's give rk3228 and rk3328 different > internal_phy_powerup() in the rk_gmac_ops to set their own configuration? I just looked at both the rk3228 and rk3328 GRFs and really this seems to be the first time I see GRF-parts that are similar :-) . There is no need to duplicate code unnecessarily, if the registers really are the same for both. So I guess, just prefix everything with a rk3228_* and add a comment that the rk3328 uses the same GRF layout. That way future socs, can then add their (likely) changed register setups as needed. Heiko