> I have the same problem.
Could you provide examples of the address you think you're sending and what you're seeing on the wire?
Looking at the OP's original complaint, there seems to be a problem with the representation of the MAC.
I'd suggest looking at some existing FEC code to see if you've got it right in your code. The obvious candidates would be:
LWIP:
/* set MAC hardware address */
FEC_PALR = (u32_t)( (CONFIG_GET_PARAM(mac)[0] << 24)
| (CONFIG_GET_PARAM(mac)[1] << 16)
| (CONFIG_GET_PARAM(mac)[2] << 8 )
| (CONFIG_GET_PARAM(mac)[3] << 0 ) );
FEC_PAUR = (u32_t)( (CONFIG_GET_PARAM(mac)[4] << 24)
| (CONFIG_GET_PARAM(mac)[5] << 16) );
Linux:
Linux/drivers/net/ethernet/freescale/fec_main.c - Linux Cross Reference - Free Electrons
writel(ndev->dev_addr[3] | (ndev->dev_addr[2] << 8) |
(ndev->dev_addr[1] << 16) | (ndev->dev_addr[0] << 24),
fep->hwp + FEC_ADDR_LOW);
writel((ndev->dev_addr[5] << 16) | (ndev->dev_addr[4] << 24),
fep->hwp + FEC_ADDR_HIGH);
memcpy(&temp_mac, ndev->dev_addr, ETH_ALEN);
writel(cpu_to_be32(temp_mac[0]), fep->hwp + FEC_ADDR_LOW);
writel(cpu_to_be32(temp_mac[1]), fep->hwp + FEC_ADDR_HIGH);
FNET:
ethif->reg->PALR = (unsigned long)((hw_addr[0] <<24)|(hw_addr[1] <<16)|
(hw_addr[2] <<8)|(hw_addr[3] <<0));
ethif->reg->PAUR = (unsigned long)(hw_addr[4] <<24)|(hw_addr[5] <<16);
I don't know about you, but after an initial reading I'm confused. You'll notice most of the code samples load the four "lower" bytes into PALR, but in reverse-byte order, and then follow with the next two bytes. So using the "byte index order" of the original address, they end up in the PALR and PAUR registers in the following order:
-------------------------------------
PALR | MAC[0] | MAC[1] | MAC[2] | MAC[3] |
-------------------------------------
PAUR | MAC[4] | MAC[5] | |
-------------------------------------
That looks like the "high bytes" are in the LOW register and the "low bytes" are in the UPPER register. So is the MAX numbered in "little-endian-order" (like in an X86) or "big-endian-order" like the ColdFire chips use? And how are these registers meant to be loaded?
The MAC is a very confusing thing. If you look at the following you'll see that the "first octet" is the "sixth byte" and vice versa. Also that the representation of the bit order is variable as some devices transmit the MSBit first and others do the opposite.
http://en.wikipedia.org/wiki/MAC_address#Address_details
http://en.wikipedia.org/wiki/MAC_address#Bit-reversed_notation
Tom