net: tsec: Fix mac addr setup portability, cleanup
Fix the 32-bit memory access that is not "endianess safe", i.e. not giving the desired byte layout for LE cpus: tempval = *((uint *) (tmpbuf + 4)), where 'char tmpbuf[]'. Free the stack from rendundant local vars: tmpbuf[] and i. Use a portable type (u32) for the 32bit tsec register value holder: tempval. Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
This commit is contained in:
parent
82ef75ca5c
commit
b1690bc39c
|
|
@ -473,11 +473,9 @@ static void tsec_halt(struct eth_device *dev)
|
||||||
*/
|
*/
|
||||||
static int tsec_init(struct eth_device *dev, bd_t * bd)
|
static int tsec_init(struct eth_device *dev, bd_t * bd)
|
||||||
{
|
{
|
||||||
uint tempval;
|
|
||||||
char tmpbuf[MAC_ADDR_LEN];
|
|
||||||
int i;
|
|
||||||
struct tsec_private *priv = (struct tsec_private *)dev->priv;
|
struct tsec_private *priv = (struct tsec_private *)dev->priv;
|
||||||
struct tsec __iomem *regs = priv->regs;
|
struct tsec __iomem *regs = priv->regs;
|
||||||
|
u32 tempval;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Make sure the controller is stopped */
|
/* Make sure the controller is stopped */
|
||||||
|
|
@ -490,16 +488,16 @@ static int tsec_init(struct eth_device *dev, bd_t * bd)
|
||||||
out_be32(®s->ecntrl, ECNTRL_INIT_SETTINGS);
|
out_be32(®s->ecntrl, ECNTRL_INIT_SETTINGS);
|
||||||
|
|
||||||
/* Copy the station address into the address registers.
|
/* Copy the station address into the address registers.
|
||||||
* Backwards, because little endian MACS are dumb */
|
* For a station address of 0x12345678ABCD in transmission
|
||||||
for (i = 0; i < MAC_ADDR_LEN; i++)
|
* order (BE), MACnADDR1 is set to 0xCDAB7856 and
|
||||||
tmpbuf[MAC_ADDR_LEN - 1 - i] = dev->enetaddr[i];
|
* MACnADDR2 is set to 0x34120000.
|
||||||
|
*/
|
||||||
tempval = (tmpbuf[0] << 24) | (tmpbuf[1] << 16) | (tmpbuf[2] << 8) |
|
tempval = (dev->enetaddr[5] << 24) | (dev->enetaddr[4] << 16) |
|
||||||
tmpbuf[3];
|
(dev->enetaddr[3] << 8) | dev->enetaddr[2];
|
||||||
|
|
||||||
out_be32(®s->macstnaddr1, tempval);
|
out_be32(®s->macstnaddr1, tempval);
|
||||||
|
|
||||||
tempval = *((uint *) (tmpbuf + 4));
|
tempval = (dev->enetaddr[1] << 24) | (dev->enetaddr[0] << 16);
|
||||||
|
|
||||||
out_be32(®s->macstnaddr2, tempval);
|
out_be32(®s->macstnaddr2, tempval);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue