[U-Boot] MPC8548 not able to detect Marvell 88E1145 PHY

Andy Fleming afleming at gmail.com
Wed Jan 7 18:22:29 CET 2009


On Wed, Jan 7, 2009 at 3:54 AM, Ajeesh Kumar <ajeesh at tataelxsi.co.in> wrote:
> Hi Andy,
>
> Thanks for your info.
>
>>>This points to a hardware problem.  Do you have an oscilloscope?  Take a
> look at the MDIO pin, and see what's being sent, and what the reply is.  The
>>>protocol for MDIO is pretty simple.  Make sure that the address on the
> read request is good, and make sure that the reply is good.
> Yeah We do have a scope, when I probed MDIO I could find some transactions
> happening. Actually I was using the u-boot1.2 which was working fine with
> the EP8548A board. And I'm using the same code piece. So the protocol to
> read/write MII management interface will be fine.

Except it's apparently not fine.  The code is reporting that it is
reading 0xffffffff as the value of the PHY identifier.  That value is
found by reading registers 2 and 3 of the PHY.  If the code is
reporting that the value is 0xffffffff, then you have a series of
possible culprits:

* The PHY's ID registers are programmed with 0xffff and 0xffff (unlikely)
* The Read command is not getting to the PHY
* The Read response is not getting to the MAC
* The PHY is not responding
* The bus is not properly conveying data (usually happens when the
data line is held high)
* The MIIM registers are corrupting the data
* The software is misreading the data
* The software is miswriting the command

You say that the scope saw the MDIO transactions.  You should be able
to capture the read request for register 2 of PHY 0.  Can you confirm
that:

1) The read request comes out of the 8548, properly formatted
2) The read request arrives on the Marvell's MDIO pin properly formatted
3) The read response leaves the PHY with correct values from register 2
4) The read response arrives at the 8548 with correct values from register 2

I have difficulty imagining a situation where the software reads the
wrong value.  Especially since you're using the same code that
apparently worked before.  The thing that changed is the hardware, so
the two most likely explanations are that your hardware has a bug
which prevents communication with the PHY over MDIO, or the POR
strappings for the 8548 are not set up to enable MDIO.

If you're absolutely sure it's not the hardware, then the most likely
cause of this is some sort of bad pointer.  1.2 is several years old,
so I wouldn't know where to start, there.

Andy


More information about the U-Boot mailing list