[U-Boot-Users] DP83848 PHY for AT91RM9200 board

Hi, I'm using u-boot-1.1.4 (quite old but I must use it) with my AT91RM9200 based board. I replaced DM9161 with a new DP83848 PHY ethernet physical layer transceiver.
So I'm backporting Sergey Kubushyn's driver National Semiconductor DP83848 PHY Driver for TI DaVinci (TMS320DM644x) adapting it for my AT91RM9200 based board.
I left eth_init() like it was for DM9161 because connections are the same. The problem I'm facing to is that PHY is not detected when I call dp83848_is_phy_connected (see below).
I wonder if anybody used DP83848 PHY before and maybe could give me a hint.
int dp83848_is_phy_connected(AT91PS_EMAC phy_addr) { u_int16_t id1, id2;
printf ("*** dp83848_is_phy_connected\n");
at91rm9200_EmacEnableMDIO (phy_addr); at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID1_REG, &id1) ; at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID2_REG, &id2) ; at91rm9200_EmacDisableMDIO (phy_addr);
printf ("phy_addr=%X - id1=%X - id2=%X\n", phy_addr, id1, id2); // here I always get 0xFFFBC000 0xFFFF 0xFFFF
if ((id1 == DP83848_PHYID1_OUI) && (id2 == DP83848_PHYID2_OUI)) return(1);
return(0); }
TIA

On Mon, 1 Oct 2007, Marco Cavallini wrote:
Here is DP83848 driver code for AT91RM9200 for u-boot-1.1.4 :) Just from my archives...
Something might be missing but the driver source and the header files are there...
Hi, I'm using u-boot-1.1.4 (quite old but I must use it) with my AT91RM9200 based board. I replaced DM9161 with a new DP83848 PHY ethernet physical layer transceiver.
So I'm backporting Sergey Kubushyn's driver National Semiconductor DP83848 PHY Driver for TI DaVinci (TMS320DM644x) adapting it for my AT91RM9200 based board.
I left eth_init() like it was for DM9161 because connections are the same. The problem I'm facing to is that PHY is not detected when I call dp83848_is_phy_connected (see below).
I wonder if anybody used DP83848 PHY before and maybe could give me a hint.
int dp83848_is_phy_connected(AT91PS_EMAC phy_addr) { u_int16_t id1, id2;
printf ("*** dp83848_is_phy_connected\n");
at91rm9200_EmacEnableMDIO (phy_addr); at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID1_REG, &id1) ; at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID2_REG, &id2) ; at91rm9200_EmacDisableMDIO (phy_addr);
printf ("phy_addr=%X - id1=%X - id2=%X\n", phy_addr, id1, id2); // here I always get 0xFFFBC000 0xFFFF 0xFFFF
if ((id1 == DP83848_PHYID1_OUI) && (id2 == DP83848_PHYID2_OUI)) return(1);
return(0); }
TIA
Marco Cavallini Koan s.a.s. - Bergamo - Italia Embedded and Real-Time Software Engineering http://www.KoanSoftware.com - http://www.KaeilOS.com
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ U-Boot-Users mailing list U-Boot-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users
--- ****************************************************************** * KSI@home KOI8 Net < > The impossible we do immediately. * * Las Vegas NV, USA < > Miracles require 24-hour notice. * ******************************************************************

ksi@koi8.net ha scritto:
On Mon, 1 Oct 2007, Marco Cavallini wrote:
Here is DP83848 driver code for AT91RM9200 for u-boot-1.1.4 :) Just from my archives...
Something might be missing but the driver source and the header files are there...
Hi, I'm using u-boot-1.1.4 (quite old but I must use it) with my AT91RM9200 based board. I replaced DM9161 with a new DP83848 PHY ethernet physical layer transceiver.
So I'm backporting Sergey Kubushyn's driver National Semiconductor DP83848 PHY Driver for TI DaVinci (TMS320DM644x) adapting it for my AT91RM9200 based board.
I left eth_init() like it was for DM9161 because connections are the same. The problem I'm facing to is that PHY is not detected when I call dp83848_is_phy_connected (see below).
I wonder if anybody used DP83848 PHY before and maybe could give me a hint.
int dp83848_is_phy_connected(AT91PS_EMAC phy_addr) { u_int16_t id1, id2;
printf ("*** dp83848_is_phy_connected\n"); at91rm9200_EmacEnableMDIO (phy_addr); at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID1_REG, &id1) ; at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID2_REG, &id2) ; at91rm9200_EmacDisableMDIO (phy_addr); printf ("phy_addr=%X - id1=%X - id2=%X\n", phy_addr, id1, id2); // here I always get 0xFFFBC000 0xFFFF 0xFFFF if ((id1 == DP83848_PHYID1_OUI) && (id2 == DP83848_PHYID2_OUI)) return(1); return(0);
}
TIA
Marco Cavallini
Hi Sergey, thank you for answering. we have just discovered an hardware mistake on PFBOUT-PFBIN2 pins now I can detect the PHY using your code
Thank you very much
Best regards

On Mon, 1 Oct 2007, Marco Cavallini wrote:
ksi@koi8.net ha scritto:
On Mon, 1 Oct 2007, Marco Cavallini wrote:
Here is DP83848 driver code for AT91RM9200 for u-boot-1.1.4 :) Just
from my
archives...
Something might be missing but the driver source and the header files
are
there...
Hi, I'm using u-boot-1.1.4 (quite old but I must use it) with my AT91RM9200 based board. I replaced DM9161 with a new DP83848 PHY ethernet physical layer transceiver.
So I'm backporting Sergey Kubushyn's driver National Semiconductor DP83848 PHY Driver for TI DaVinci
(TMS320DM644x)
adapting it for my AT91RM9200 based board.
I left eth_init() like it was for DM9161 because connections are the same. The problem I'm facing to is that PHY is not detected when I call dp83848_is_phy_connected (see below).
I wonder if anybody used DP83848 PHY before and maybe could give me a hint.
int dp83848_is_phy_connected(AT91PS_EMAC phy_addr) { u_int16_t id1, id2;
printf ("*** dp83848_is_phy_connected\n"); at91rm9200_EmacEnableMDIO (phy_addr); at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID1_REG, &id1) ; at91rm9200_EmacReadPhy(phy_addr, DP83848_PHYID2_REG, &id2) ; at91rm9200_EmacDisableMDIO (phy_addr); printf ("phy_addr=%X - id1=%X - id2=%X\n", phy_addr, id1, id2); // here I always get 0xFFFBC000 0xFFFF 0xFFFF if ((id1 == DP83848_PHYID1_OUI) && (id2 == DP83848_PHYID2_OUI)) return(1); return(0);
}
TIA
Marco Cavallini
Hi Sergey, thank you for answering. we have just discovered an hardware mistake on PFBOUT-PFBIN2 pins now I can detect the PHY using your code
Please be aware that for AT91RM9200 you should read the negotiated connection status from the PHY and setup EMAC accordingly. That is in that old code.
Davinci, on the other hand, doesn't require it (as a matter of fact it doesn't even have provision for setting those parameters for EMAC,) it's more automated so PHY code is different. And PHY presence is detected by reading DaVinci register that monitors PHY presence.
--- ****************************************************************** * KSI@home KOI8 Net < > The impossible we do immediately. * * Las Vegas NV, USA < > Miracles require 24-hour notice. * ******************************************************************
participants (2)
-
ksi@koi8.net
-
Marco Cavallini