diff mbox

[U-Boot,2/2] mips: ath79: ar933x: Fix probe error for kernel driver ag71xx

Message ID BLU436-SMTP80645D37EBA6AEBE2F11D1FF4C0@phx.gbl
State Superseded
Delegated to: Daniel Schwierzeck
Headers show

Commit Message

Wills Wang May 21, 2016, 11:58 a.m. UTC
We need reset the Ethernet Switch analog part before operation,
or the build-in Ethernet PHY don't work, openwrt kernel driver
ag71xx occur the following error:

[    1.854519] libphy: ag71xx_mdio: probed
[    2.646539] ag71xx-mdio.1: unknown phy id 'ffff:ffff'
[    3.235778] ag71xx ag71xx.0: no PHY found with phy_mask=00000010

Signed-off-by: Wills Wang <wills.wang@live.com>
---

 arch/mips/mach-ath79/include/mach/ar71xx_regs.h | 1 +
 arch/mips/mach-ath79/reset.c                    | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

Comments

Marek Vasut May 21, 2016, 12:15 p.m. UTC | #1
On 05/21/2016 01:58 PM, Wills Wang wrote:
> We need reset the Ethernet Switch analog part before operation,
> or the build-in Ethernet PHY don't work, openwrt kernel driver
> ag71xx occur the following error:
> 
> [    1.854519] libphy: ag71xx_mdio: probed
> [    2.646539] ag71xx-mdio.1: unknown phy id 'ffff:ffff'
> [    3.235778] ag71xx ag71xx.0: no PHY found with phy_mask=00000010
> 
> Signed-off-by: Wills Wang <wills.wang@live.com>

Acked-by: Marek Vasut <marex@denx.de>

The kernel should be independent of bootloader, so you should cook
similar patch for Linux.

> ---
> 
>  arch/mips/mach-ath79/include/mach/ar71xx_regs.h | 1 +
>  arch/mips/mach-ath79/reset.c                    | 2 +-
>  2 files changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/mips/mach-ath79/include/mach/ar71xx_regs.h b/arch/mips/mach-ath79/include/mach/ar71xx_regs.h
> index a8e51cb..dabcad0 100644
> --- a/arch/mips/mach-ath79/include/mach/ar71xx_regs.h
> +++ b/arch/mips/mach-ath79/include/mach/ar71xx_regs.h
> @@ -660,6 +660,7 @@
>  
>  #define AR933X_RESET_GE1_MDIO				BIT(23)
>  #define AR933X_RESET_GE0_MDIO				BIT(22)
> +#define AR933X_RESET_ETH_SWITCH_ANALOG			BIT(14)
>  #define AR933X_RESET_GE1_MAC				BIT(13)
>  #define AR933X_RESET_WMAC				BIT(11)
>  #define AR933X_RESET_GE0_MAC				BIT(9)
> diff --git a/arch/mips/mach-ath79/reset.c b/arch/mips/mach-ath79/reset.c
> index 188eccb..473f89d 100644
> --- a/arch/mips/mach-ath79/reset.c
> +++ b/arch/mips/mach-ath79/reset.c
> @@ -81,7 +81,7 @@ static int eth_init_ar933x(void)
>  					  MAP_NOCACHE);
>  	const u32 mask = AR933X_RESET_GE0_MAC | AR933X_RESET_GE0_MDIO |
>  			 AR933X_RESET_GE1_MAC | AR933X_RESET_GE1_MDIO |
> -			 AR933X_RESET_ETH_SWITCH;
> +			 AR933X_RESET_ETH_SWITCH | AR933X_RESET_ETH_SWITCH_ANALOG;
>  
>  	/* Clear MDIO slave EN bit. */
>  	clrbits_be32(rregs + AR933X_RESET_REG_BOOTSTRAP, BIT(17));
>
Daniel Schwierzeck May 21, 2016, 4:43 p.m. UTC | #2
2016-05-21 13:58 GMT+02:00 Wills Wang <wills.wang@live.com>:
> We need reset the Ethernet Switch analog part before operation,
> or the build-in Ethernet PHY don't work, openwrt kernel driver
> ag71xx occur the following error:
>
> [    1.854519] libphy: ag71xx_mdio: probed
> [    2.646539] ag71xx-mdio.1: unknown phy id 'ffff:ffff'
> [    3.235778] ag71xx ag71xx.0: no PHY found with phy_mask=00000010
>
> Signed-off-by: Wills Wang <wills.wang@live.com>
> ---

could you please change the commit subject and message? Your intention
is to make Marek's ag71xx ethernet driver working for AR933x, isn't
it?

If a kernel driver is dependent on the initialization of the
bootloader, then that should be fixed in the kernel driver. The
philosophy of U-Boot is to not initialize hardware at all when it's
not needed by U-Boot itself. Thus if one boots a board without using
network in the bootloader or if one doesn't compile in network
support, the ethernet hardware parts are never initialized. But the
kernel and it's drivers should still work.
Wills Wang May 22, 2016, 2:06 a.m. UTC | #3
On 05/22/2016 12:43 AM, Daniel Schwierzeck wrote:
> 2016-05-21 13:58 GMT+02:00 Wills Wang <wills.wang@live.com>:
>> We need reset the Ethernet Switch analog part before operation,
>> or the build-in Ethernet PHY don't work, openwrt kernel driver
>> ag71xx occur the following error:
>>
>> [    1.854519] libphy: ag71xx_mdio: probed
>> [    2.646539] ag71xx-mdio.1: unknown phy id 'ffff:ffff'
>> [    3.235778] ag71xx ag71xx.0: no PHY found with phy_mask=00000010
>>
>> Signed-off-by: Wills Wang <wills.wang@live.com>
>> ---
> could you please change the commit subject and message? Your intention
> is to make Marek's ag71xx ethernet driver working for AR933x, isn't
> it?
Ok
> If a kernel driver is dependent on the initialization of the
> bootloader, then that should be fixed in the kernel driver. The
> philosophy of U-Boot is to not initialize hardware at all when it's
> not needed by U-Boot itself. Thus if one boots a board without using
> network in the bootloader or if one doesn't compile in network
> support, the ethernet hardware parts are never initialized. But the
> kernel and it's drivers should still work.
>
diff mbox

Patch

diff --git a/arch/mips/mach-ath79/include/mach/ar71xx_regs.h b/arch/mips/mach-ath79/include/mach/ar71xx_regs.h
index a8e51cb..dabcad0 100644
--- a/arch/mips/mach-ath79/include/mach/ar71xx_regs.h
+++ b/arch/mips/mach-ath79/include/mach/ar71xx_regs.h
@@ -660,6 +660,7 @@ 
 
 #define AR933X_RESET_GE1_MDIO				BIT(23)
 #define AR933X_RESET_GE0_MDIO				BIT(22)
+#define AR933X_RESET_ETH_SWITCH_ANALOG			BIT(14)
 #define AR933X_RESET_GE1_MAC				BIT(13)
 #define AR933X_RESET_WMAC				BIT(11)
 #define AR933X_RESET_GE0_MAC				BIT(9)
diff --git a/arch/mips/mach-ath79/reset.c b/arch/mips/mach-ath79/reset.c
index 188eccb..473f89d 100644
--- a/arch/mips/mach-ath79/reset.c
+++ b/arch/mips/mach-ath79/reset.c
@@ -81,7 +81,7 @@  static int eth_init_ar933x(void)
 					  MAP_NOCACHE);
 	const u32 mask = AR933X_RESET_GE0_MAC | AR933X_RESET_GE0_MDIO |
 			 AR933X_RESET_GE1_MAC | AR933X_RESET_GE1_MDIO |
-			 AR933X_RESET_ETH_SWITCH;
+			 AR933X_RESET_ETH_SWITCH | AR933X_RESET_ETH_SWITCH_ANALOG;
 
 	/* Clear MDIO slave EN bit. */
 	clrbits_be32(rregs + AR933X_RESET_REG_BOOTSTRAP, BIT(17));