CENTIPAD boot
Krassimir Slavchev
krassi at bulinfo.net
Mon Sep 17 07:33:30 PDT 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello,
I have problems to get the link speed from Test register (25). After
link negotiation complete bit 1 is always set. So I use bit 13 in BMCR
register.
The code in emac.c:
...
update = pEmac->EMAC_CFG & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
printf("emac: link");
while (!(AT91F_MII_ReadPhy(pEmac, phyaddr, MII_BMSR_REG) &
MII_BMSR_NEG))
continue;
stat2 = AT91F_MII_ReadPhy(pEmac, phyaddr, MII_BMCR_REG);
if(stat2 & MII_BMCR_SPD) {
printf(" 100TX");
update |= AT91C_EMAC_SPD;
}
else
printf(" 10TX");
if(stat2 & MII_BMCR_FDX) {
printf(" FDX");
update |= AT91C_EMAC_FD;
}
printf("\n");
emac.h:
#define MII_BMCR_REG 0x0
#define MII_BMCR_FDX 0x0100
#define MII_BMCR_SPD 0x2000
#define MII_BMSR_REG 0x1
#define MII_BMSR_NEG 0x0020
I have tested this against fxp adapter with crossover cable and there is
difference when fxp is configured with:
'ifconfig fxp0 media auto' and 'ifconfig fxp0 media 100BaseTX mediaopt
full-duplex'. When fxp is configured with 'mediaopt full-duplex' the
duplex mode is not detected.
Bernd Walter wrote:
> On Wed, Aug 08, 2007 at 09:24:00PM +0300, Krassimir Slavchev wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>>
>>> I would assume a RTL8201BL or RTL8201C?
>>> I have code for the RTL8201BL, which I use with the AT91SAM7X256, but
>>> it is likely not correct, since I tried a 10BASET link once and it
>>> failed, but I just took the original code without modification though.
>>> Anyway - Realtek has datasheets available online.
>> RTL8201BL
>
> Realtek did something special it seems.
> You get the duplex state in the BMCR bit 8 (Register 0).
> 1 = full, 0 = half
> The speed is in the Test register (25).
> Bit 0: 1 = 100Mbit link
> Bit 1: 1 = 10MBit link
> Bit 0/1 both 0 no link
>
> You might want to loop over BMSR (Register 1) bit 3 as well, since a
> 1 means that auto negotiation has finished.
> But it might be Ok without it, because there should be enough delays
> already.
> In a real world scenario, e.g. in the kernel or running embedded,
> you'll have to poll the status regulary, to update the MAC accordingly.
> But it's not required in this case, since the link partner shouldn't
> change during booting.
>
> Let me know if you have success with this, since I'll have to update
> my AT91SAM7X256 code as well.
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)
iD8DBQFG7pAuxJBWvpalMpkRAgouAJ45QR74U4ZPTLabHDg+xVf4UpVEWQCfXCRf
21Nd2LZo+QHyNtV9XhXsisE=
=Ssko
-----END PGP SIGNATURE-----
More information about the freebsd-arm
mailing list