mpc512x_fec: Move PHY initialization from probe into init routine.
PATCH 1/1 mpc512x_fec: Move PHY initialization from probe into init routine.
This saves the autonegotation delay when not using ethernet in U-Boot
--- drivers/net/mpc512x_fec.c | 30 ++++++++++-------------------- 1 files changed, 10 insertions(+), 20 deletions(-)
drivers/net/mpc512x_fec.c +10 -20
@@ -221,11 +221,20 @@ static void mpc512x_fec_set_hwaddr (mpc512x_fec_priv *fec, char *mac)static int mpc512x_fec_init (struct eth_device *dev,bd_t * bis) {mpc512x_fec_priv *fec = (mpc512x_fec_priv *)dev->priv; +char env_enetaddr[6 ];#if (DEBUG &0x1 )printf ("mpc512x_fec_init... Begin\n" );#endif +if (eth_getenv_enetaddr ("ethaddr" , env_enetaddr)) { +mpc512x_fec_set_hwaddr (fec, env_enetaddr); +out_be32 (&fec->eth->gaddr1,0x00000000 ); +out_be32 (&fec->eth->gaddr2,0x00000000 ); + } + +mpc512x_fec_init_phy (dev, bis); +/* Set interrupt mask register */ out_be32 (&fec->eth->imask,0x00000000 );
@@ -612,7 +621,7 @@ int mpc512x_fec_initialize (bd_t * bis)mpc512x_fec_priv *fec;struct eth_device *dev;int i; -char *tmp, *end, env_enetaddr[6 ]; +char *tmp, *end;void * bd; fec = (mpc512x_fec_priv *)malloc (sizeof (*fec));
@@ -663,25 +672,6 @@ int mpc512x_fec_initialize (bd_t * bis)*/ out_be32 (&fec->eth->ievent,0xffffffff ); -/* -* Try to set the mac address now. The fec mac address is -* a garbage after reset. When not using fec for booting -* the Linux fec driver will try to work with this garbage. -*/ - tmp =getenv ("ethaddr" ); -if (tmp) { -for (i=0 ; i<6 ; i++) { - env_enetaddr[i] = tmp ?simple_strtoul (tmp, &end,16 ) :0 ; -if (tmp) - tmp = (*end) ? end+1 : end; - } -mpc512x_fec_set_hwaddr (fec, env_enetaddr); -out_be32 (&fec->eth->gaddr1,0x00000000 ); -out_be32 (&fec->eth->gaddr2,0x00000000 ); - } - -mpc512x_fec_init_phy (dev, bis); -return 1 ; }
Signature · 1 line
1.6.2.5
PATCH 1/1 mpc512x_fec: Move PHY initialization from probe into init routine.
Hi Detlev,
Quoted 17 lines · Detlev Zundel
This saves the autonegotation delay when not using ethernet in U-Boot
Signed-off-by Detlev Zundel<[email protected]>--- drivers/net/mpc512x_fec.c | 30 ++++++++++-------------------- 1 files changed, 10 insertions(+), 20 deletions(-)drivers/net/mpc512x_fec.c +1
-0@@ -221,11 +221,20 @@ static void mpc512x_fec_set_hwaddr (mpc512x_fec_priv *fec, char *mac)static int mpc512x_fec_init (struct eth_device *dev,bd_t * bis) {mpc512x_fec_priv *fec = (mpc512x_fec_priv *)dev->priv; +char env_enetaddr[6 ];
drivers/net/mpc512x_fec.c static void mpc512x_fec_set_hwaddr (mpc512x_fec_priv *fec, char *mac) · line 235
Quoted 10 lines
drivers/net/mpc512x_fec.c +5
-0#if (DEBUG &0x1 )printf ("mpc512x_fec_init... Begin\n" );#endif +if (eth_getenv_enetaddr ("ethaddr" , env_enetaddr)) { +mpc512x_fec_set_hwaddr (fec, env_enetaddr); +out_be32 (&fec->eth->gaddr1,0x00000000 ); +out_be32 (&fec->eth->gaddr2,0x00000000 ); + }
By the time this code is called, the common networking code has already figured out the best MAC address to use and has stuffed it into dev->enetaddr. Please use that instead.
Quoted 32 lines
drivers/net/mpc512x_fec.c +4
-13+ +mpc512x_fec_init_phy (dev, bis); +/* Set interrupt mask register */ out_be32 (&fec->eth->imask,0x00000000 );@@ -612,7 +621,7 @@ int mpc512x_fec_initialize (bd_t * bis)mpc512x_fec_priv *fec;struct eth_device *dev;int i; -char *tmp, *end, env_enetaddr[6 ]; +char *tmp, *end;void * bd; fec = (mpc512x_fec_priv *)malloc (sizeof (*fec));@@ -663,25 +672,6 @@ int mpc512x_fec_initialize (bd_t * bis)*/ out_be32 (&fec->eth->ievent,0xffffffff ); -/* -* Try to set the mac address now. The fec mac address is -* a garbage after reset. When not using fec for booting -* the Linux fec driver will try to work with this garbage. -*/ - tmp =getenv ("ethaddr" ); -if (tmp) { -for (i=0 ; i<6 ; i++) { - env_enetaddr[i] = tmp ?simple_strtoul (tmp,&end,16 ) :0 ; -if (tmp) - tmp = (*end) ? end+1 : end; - }
drivers/net/mpc512x_fec.c int mpc512x_fec_initialize (bd_t * bis) · line 677
Quoted 10 lines
drivers/net/mpc512x_fec.c +0
-7-mpc512x_fec_set_hwaddr (fec, env_enetaddr); -out_be32 (&fec->eth->gaddr1,0x00000000 ); -out_be32 (&fec->eth->gaddr2,0x00000000 ); - } - -mpc512x_fec_init_phy (dev, bis); -return 1 ; }
regards,
Ben
PATCH v2 1/1 mpc512x_fec: Move PHY initialization from probe into init routine.
This saves the autonegotation delay when not using ethernet in U-Boot
--- drivers/net/mpc512x_fec.c | 29 +++++++---------------------- 1 files changed, 7 insertions(+), 22 deletions(-)
Changes from v1:
- Use mac address from dev structure instead of environment
drivers/net/mpc512x_fec.c +7 -22
@@ -160,7 +160,7 @@ static void mpc512x_fec_tbd_scrub (mpc512x_fec_priv *fec) }/********************************************************************/ -static void mpc512x_fec_set_hwaddr (mpc512x_fec_priv *fec,char *mac) +static void mpc512x_fec_set_hwaddr (mpc512x_fec_priv *fec,unsigned char *mac) {u8 currByte;/* byte for which to compute the CRC */ int byte;/* loop - counter */
@@ -226,6 +226,12 @@ static int mpc512x_fec_init (struct eth_device *dev, bd_t * bis)printf ("mpc512x_fec_init... Begin\n" );#endif +mpc512x_fec_set_hwaddr (fec, dev->enetaddr); +out_be32 (&fec->eth->gaddr1,0x00000000 ); +out_be32 (&fec->eth->gaddr2,0x00000000 ); + +mpc512x_fec_init_phy (dev, bis); +/* Set interrupt mask register */ out_be32 (&fec->eth->imask,0x00000000 );
@@ -611,8 +617,6 @@ int mpc512x_fec_initialize (bd_t * bis)volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR ;mpc512x_fec_priv *fec;struct eth_device *dev; -int i; -char *tmp, *end, env_enetaddr[6 ];void * bd; fec = (mpc512x_fec_priv *)malloc (sizeof (*fec));
@@ -663,25 +667,6 @@ int mpc512x_fec_initialize (bd_t * bis)*/ out_be32 (&fec->eth->ievent,0xffffffff ); -/* -* Try to set the mac address now. The fec mac address is -* a garbage after reset. When not using fec for booting -* the Linux fec driver will try to work with this garbage. -*/ - tmp =getenv ("ethaddr" ); -if (tmp) { -for (i=0 ; i<6 ; i++) { - env_enetaddr[i] = tmp ?simple_strtoul (tmp, &end,16 ) :0 ; -if (tmp) - tmp = (*end) ? end+1 : end; - } -mpc512x_fec_set_hwaddr (fec, env_enetaddr); -out_be32 (&fec->eth->gaddr1,0x00000000 ); -out_be32 (&fec->eth->gaddr2,0x00000000 ); - } - -mpc512x_fec_init_phy (dev, bis); -return 1 ; }
Signature · 1 line
1.6.2.5
Ben Warren
AppliedPATCH v2 1/1 mpc512x_fec: Move PHY initialization from probe into init routine.
Hi Detlev,
Quoted 11 lines · Detlev Zundel
This saves the autonegotation delay when not using ethernet in U-Boot
Signed-off-by Detlev Zundel<[email protected]>--- drivers/net/mpc512x_fec.c | 29 +++++++---------------------- 1 files changed, 7 insertions(+), 22 deletions(-)Changes from v1:
- Use mac address from dev structure instead of environment
Applied to net repo.
thanks,
Ben