[U-Boot-Users] [PATCH] NET: Proper return code handling in eth_init() function in file eth.c

NET: Proper return code handling in eth_init() function in file eth.c
This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error.
Signed-off-by: Upakul Barkakaty upakul.barkakaty@conexant.com
diff -Naur a/net/eth.c b/net/eth.c --- a/net/eth.c 2007-11-26 09:53:55.000000000 +0530 +++ b/net/eth.c 2007-11-26 10:55:59.000000000 +0530 @@ -404,23 +404,23 @@ struct eth_device* old_current;
if (!eth_current) - return 0; + return -1;
old_current = eth_current; do { debug ("Trying %s\n", eth_current->name);
- if (eth_current->init(eth_current, bis)) { + if (!eth_current->init(eth_current,bis)) + { eth_current->state = ETH_STATE_ACTIVE; - - return 1; + return 0; } debug ("FAIL\n");
eth_try_another(0); } while (old_current != eth_current);
- return 0; + return -1; }
void eth_halt(void)

On Thursday 29 November 2007, Upakul Barkakaty wrote:
NET: Proper return code handling in eth_init() function in file eth.c
This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error.
Signed-off-by: Upakul Barkakaty upakul.barkakaty@conexant.com
diff -Naur a/net/eth.c b/net/eth.c --- a/net/eth.c 2007-11-26 09:53:55.000000000 +0530 +++ b/net/eth.c 2007-11-26 10:55:59.000000000 +0530 @@ -404,23 +404,23 @@ struct eth_device* old_current;
if (!eth_current)
return 0;
return -1;
old_current = eth_current; do { debug ("Trying %s\n", eth_current->name);
if (eth_current->init(eth_current, bis)) {
if (!eth_current->init(eth_current,bis))
{
Don't move the "{" into the next line.
Please change this and resend the patch. Thanks.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================

NET: Proper return code handling in eth_init() function in file eth.c
This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error.
Signed-off-by: Upakul Barkakaty upakul.barkakaty@conexant.com
diff -Naur a/net/eth.c b/net/eth.c --- a/net/eth.c 2007-11-29 11:54:18.000000000 +0530 +++ b/net/eth.c 2007-11-29 11:54:18.000000000 +0530 @@ -404,23 +404,23 @@ struct eth_device* old_current;
if (!eth_current) - return 0; + return -1;
old_current = eth_current; do { debug ("Trying %s\n", eth_current->name);
- if (eth_current->init(eth_current, bis)) { + if (!eth_current->init(eth_current,bis)) { eth_current->state = ETH_STATE_ACTIVE;
- return 1; + return 0; } debug ("FAIL\n");
eth_try_another(0); } while (old_current != eth_current);
- return 0; + return -1; }
void eth_halt(void)

On Thursday 29 November 2007, Upakul Barkakaty wrote:
NET: Proper return code handling in eth_init() function in file eth.c
This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error.
I just noticed that this patch breaks TFTP on 4xx platforms:
commit 505be87a65e4f87ad7d8da1d57ea4dcd487d7e32 Author: Upakul Barkakaty upakul@gmail.com Date: Thu Nov 29 12:16:13 2007 +0530
NET: Proper return code handling in eth_init() function in file eth.c
This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error.
Signed-off-by: Upakul Barkakaty upakul.barkakaty@conexant.com Signed-off-by: Ben Warren biggerbadderben@gmail.com
I just see link auto-negotiation going on, and after that no real transaction is happening! :-(
=> tftp 100000 u-image.bin Waiting for PHY auto negotiation to complete.... done ENET Speed is 1000 Mbps - FULL duplex connection (EMAC0)
Would be great if someone could look into this ASAP. Unfortunately I have no time left today.
Thanks.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================

On 1/8/08, Stefan Roese sr@denx.de wrote:
On Thursday 29 November 2007, Upakul Barkakaty wrote:
NET: Proper return code handling in eth_init() function in file eth.c
This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error.
I just noticed that this patch breaks TFTP on 4xx platforms:
commit 505be87a65e4f87ad7d8da1d57ea4dcd487d7e32 Author: Upakul Barkakaty upakul@gmail.com Date: Thu Nov 29 12:16:13 2007 +0530
NET: Proper return code handling in eth_init() function in file eth.c This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error. Signed-off-by: Upakul Barkakaty <upakul.barkakaty@conexant.com> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
I just see link auto-negotiation going on, and after that no real transaction is happening! :-(
=> tftp 100000 u-image.bin Waiting for PHY auto negotiation to complete.... done ENET Speed is 1000 Mbps - FULL duplex connection (EMAC0)
Would be great if someone could look into this ASAP. Unfortunately I have no time left today.
Thanks.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================
Hi Stefan,
Could you please tell which ethernet driver is being used? Please mention the filename.
Thanks.

On 1/8/08, Stefan Roese sr@denx.de wrote:
On Thursday 29 November 2007, Upakul Barkakaty wrote:
NET: Proper return code handling in eth_init() function in file eth.c
This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error.
I just noticed that this patch breaks TFTP on 4xx platforms:
commit 505be87a65e4f87ad7d8da1d57ea4dcd487d7e32 Author: Upakul Barkakaty upakul@gmail.com Date: Thu Nov 29 12:16:13 2007 +0530
NET: Proper return code handling in eth_init() function in file eth.c This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error. Signed-off-by: Upakul Barkakaty <upakul.barkakaty@conexant.com> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
I just see link auto-negotiation going on, and after that no real transaction is happening! :-(
=> tftp 100000 u-image.bin Waiting for PHY auto negotiation to complete.... done ENET Speed is 1000 Mbps - FULL duplex connection (EMAC0)
Would be great if someone could look into this ASAP. Unfortunately I have no time left today.
Thanks.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================
Hi Stefan,
Probably i got the reason why this is happening. As a convention that is usually followed, the code in eth_init() function in the file eth.c was reworked to handle 0 in case of Success and any non zero value in case of an error.
Most of the Ethernet driver's init routines adhere to the same convention of returning a 0 on Success and a non zero value in case of error. However, the driver you might be using, may be returning a non zero value on Successful initialization, that is why the problem is arising. The solution could be to return 0 in case of Success, from the Ethernet driver's init() routine.
Thanks!!

Upakul Barkakaty wrote:
On 1/8/08, *Stefan Roese* <sr@denx.de mailto:sr@denx.de> wrote:
On Thursday 29 November 2007, Upakul Barkakaty wrote: > NET: Proper return code handling in eth_init() function in file eth.c > > This patch modifies the return code handling in the eth_init() > function, to be compatible with the handling of the return codes in > the other network stack files. It now returns a 0 on Success and -1 on > error. I just noticed that this patch breaks TFTP on 4xx platforms: commit 505be87a65e4f87ad7d8da1d57ea4dcd487d7e32 Author: Upakul Barkakaty <upakul@gmail.com <mailto:upakul@gmail.com>> Date: Thu Nov 29 12:16:13 2007 +0530 NET: Proper return code handling in eth_init() function in file eth.c This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error. Signed-off-by: Upakul Barkakaty < upakul.barkakaty@conexant.com <mailto:upakul.barkakaty@conexant.com>> Signed-off-by: Ben Warren <biggerbadderben@gmail.com <mailto:biggerbadderben@gmail.com>> I just see link auto-negotiation going on, and after that no real transaction is happening! :-( => tftp 100000 u-image.bin Waiting for PHY auto negotiation to complete.... done ENET Speed is 1000 Mbps - FULL duplex connection (EMAC0) Would be great if someone could look into this ASAP. Unfortunately I have no time left today. Thanks. Best regards, Stefan ===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de <mailto:office@denx.de> =====================================================================
Hi Stefan,
Probably i got the reason why this is happening. As a convention that is usually followed, the code in eth_init() function in the file eth.c was reworked to handle 0 in case of Success and any non zero value in case of an error.
Most of the Ethernet driver's init routines adhere to the same convention of returning a 0 on Success and a non zero value in case of error. However, the driver you might be using, may be returning a non zero value on Successful initialization, that is why the problem is arising. The solution could be to return 0 in case of Success, from the Ethernet driver's init() routine.
Thanks!!
-- Regards, Upakul Barkakaty
Yeah, looks like ppc_4xx_eth_init() (cpu/ppc4xx/4xx_enet.c) returns 1 on success and -1 on failure. I don't have hardware to test this. Can you check it out Stefan? Let's look through the other drivers to see if this is an isolated case.
regards, Ben

On Tuesday 08 January 2008, Ben Warren wrote:
Probably i got the reason why this is happening. As a convention that is usually followed, the code in eth_init() function in the file eth.c was reworked to handle 0 in case of Success and any non zero value in case of an error.
Most of the Ethernet driver's init routines adhere to the same convention of returning a 0 on Success and a non zero value in case of error. However, the driver you might be using, may be returning a non zero value on Successful initialization, that is why the problem is arising. The solution could be to return 0 in case of Success, from the Ethernet driver's init() routine.
Thanks!!
-- Regards, Upakul Barkakaty
Yeah, looks like ppc_4xx_eth_init() (cpu/ppc4xx/4xx_enet.c) returns 1 on success and -1 on failure. I don't have hardware to test this. Can you check it out Stefan? Let's look through the other drivers to see if this is an isolated case.
I'm back now and will give it a try this evening. Thanks for pointing this out.
Note: This patch may trigger other platform ethernet driver problems as well. So I strongly encourage all platform maintainers/custodians to check if a change in the return code of the ethernet driver is needed.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================

Stefan Roese wrote:
On Tuesday 08 January 2008, Ben Warren wrote:
Probably i got the reason why this is happening. As a convention that is usually followed, the code in eth_init() function in the file eth.c was reworked to handle 0 in case of Success and any non zero value in case of an error.
Most of the Ethernet driver's init routines adhere to the same convention of returning a 0 on Success and a non zero value in case of error. However, the driver you might be using, may be returning a non zero value on Successful initialization, that is why the problem is arising. The solution could be to return 0 in case of Success, from the Ethernet driver's init() routine.
Thanks!!
-- Regards, Upakul Barkakaty
Yeah, looks like ppc_4xx_eth_init() (cpu/ppc4xx/4xx_enet.c) returns 1 on success and -1 on failure. I don't have hardware to test this. Can you check it out Stefan? Let's look through the other drivers to see if this is an isolated case.
I'm back now and will give it a try this evening. Thanks for pointing this out.
Note: This patch may trigger other platform ethernet driver problems as well. So I strongly encourage all platform maintainers/custodians to check if a change in the return code of the ethernet driver is needed.
Best regards, Stefan
Don't waste too much time on this - every driver returns 1 on success. I'm putting together a patch to clean things up and should have it within an hour or so.
regards, Ben
participants (3)
-
Ben Warren
-
Stefan Roese
-
Upakul Barkakaty