I (think) the AR8327 switch support now works

Adrian Chadd adrian at freebsd.org
Sun Mar 9 20:18:45 UTC 2014


Hi,

Yes, I do think you're right. I think the MDIO IO is not being terribly stable.

Unfortunately I don't have the time to figure it out. So if someone
wants to buy/ship me an RB2011 of some flavour, I'll likely have a
much better chance of figuring out what's going on.



Thanks,



-a


On 8 March 2014 23:39, Milan Obuch <freebsd-mips at dino.sk> wrote:
> On Sat, 8 Mar 2014 14:50:14 -0800
> Adrian Chadd <adrian at freebsd.org> wrote:
>
>> Ok, well now let's figure out if the reset is working or not.
>>
>> look at arswitch_attach():
>>
>> * It sets up the default methods;
>> * it calls ar8327_attach();
>> * it resets the switch via arswitch_reset();
>> * it calls the HAL methods to set things up;
>> * it attaches the PHYs;
>> * it attaches said PHYs;
>> * it starts the periodic checks via arswitch_tick().
>>
>> So, I'd add some printf()s in arswitch_attach() to see where it's
>> getting to before it calls return (ENXIO) or return (err).
>>
>>
>> -a
>>
>
> OK, so I patched said function with some printf's (in attachment),
> built new kernel and got following result:
>
> mdio0: <MDIO> on argemdio0
> mdioproxy0: <MII/MDIO proxy, MDIO side> on mdio0
> arswitch0: readreg 0x00000000: 0x12041204
> arswitch0: readreg 0x00000000: 0x00000000
> arswitch0: <Atheros AR8327 Ethernet Switch> on mdio0
> arswitch0: arswitch_attach 1
> device_attach: arswitch0 attach returned 6
>
> Now I put there some more printf's (in arswitch_probe) and things go a
> bit stranger. I've got:
>
> mdio0: <MDIO> on argemdio0
> mdioproxy0: <MII/MDIO proxy, MDIO side> on mdio0
> unknown: arswitch_probe 1
> arswitch0: readreg 0x00000000: 0x00000000
> unknown: arswitch_probe 2 0
>
> and for the second time, just doing one more reboot:
>
> mdio0: <MDIO> on argemdio0
> mdioproxy0: <MII/MDIO proxy, MDIO side> on mdio0
> unknown: arswitch_probe 1
> arswitch0: readreg 0x00000000: 0x12041204
> unknown: arswitch_probe 2 6
> unknown: arswitch_probe 1
> arswitch0: readreg 0x00000000: 0x00000000
> unknown: arswitch_probe 2 0
> arswitch0: <Atheros AR8327 Ethernet Switch> on mdio0
> arswitch0: arswitch_attach 1 0
> device_attach: arswitch0 attach returned 6
>
> Next reboot brings again the first result, next one the second, again
> the second, again the first one etc. It looks like two two
> possibilities are alternating with some level of randomness. To me this
> tells that mdio does not work reliably in this case - am I right
> thinking that reading register 0 should always return the same value,
> 0x12041204, at least when no other register is touched in between?
>
> Well, this was with soft reset - I got every time mountroot promp, so
> just pressing enter gives me panic and then I typed reboot. when doing
> power-cycle, things are a bit deterministic - three time in a row I got
> the first result.
>
> Next question - why is arswitch_probe function called second time? It
> is called twice for both switches, so it is probably by design, and as
> the second switch is only 'hint probed', it does not matter. But for
> 8327, register is read, unfortunatelly not the same result is given
> both times.
>
> Also, I played with if_arge.c - arge_fetch_mdiobus_clock_rate()
> function a bit, but no matter the clock divider I used, the results are
> still the same. I see in next function, arge_reset_miibus a comment
> about resetting the mdio block(s), so I suspect it is something to be
> done, maybe, but is not yet. I have no idea how to try it, however. I
> can just wait for next hint, now.
>
> Regards,
> Milan


More information about the freebsd-mips mailing list