public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
@ 2008-11-12  8:49 Heiko Schocher
  2008-11-12 17:43 ` Ben Warren
  0 siblings, 1 reply; 9+ messages in thread
From: Heiko Schocher @ 2008-11-12  8:49 UTC (permalink / raw)
  To: u-boot

Check the presence of the PIGGY on the keymile boards mgcoge,
mgsuvd and kmeter1. If the PIGGY is not present, dont register
this Ethernet device.

Signed-off-by: Heiko Schocher <hs@denx.de>
---
 board/keymile/common/common.c   |   16 ++++++++++++++--
 board/keymile/kmeter1/Makefile  |    6 ++++--
 board/keymile/kmeter1/kmeter1.c |    7 ++++++-
 board/keymile/mgcoge/mgcoge.c   |    9 +++++++--
 board/keymile/mgsuvd/mgsuvd.c   |    8 +++++++-
 cpu/mpc8260/ether_scc.c         |    8 ++++++++
 cpu/mpc8xx/scc.c                |    6 ++++++
 drivers/qe/uec.c                |    7 +++++++
 include/configs/kmeter1.h       |   10 ++++++++++
 include/configs/mgcoge.h        |   11 +++++++++++
 include/configs/mgsuvd.h        |   10 ++++++++++
 include/net.h                   |    4 +++-
 12 files changed, 93 insertions(+), 9 deletions(-)

diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index a4cf24c..54c8730 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -22,10 +22,14 @@
  */

 #include <common.h>
+#if defined(CONFIG_MGCOGE)
 #include <mpc8260.h>
+#endif
 #include <ioports.h>
 #include <malloc.h>
 #include <hush.h>
+#include <net.h>
+#include <asm/io.h>

 #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
@@ -33,8 +37,6 @@

 #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
 #include <i2c.h>
-#endif
-#include <asm/io.h>

 extern int i2c_soft_read_pin (void);

@@ -495,6 +497,7 @@ void i2c_init_board(void)
 #endif
 }
 #endif
+#endif

 #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
 int fdt_set_node_and_value (void *blob,
@@ -521,3 +524,12 @@ int fdt_set_node_and_value (void *blob,
 	return ret;
 }
 #endif
+
+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+int ethernet_present (int index)
+{
+	int	ret;
+	ret = in_8((u8 *)CONFIG_SYS_PIGGY_BASE + CONFIG_SYS_SLOT_ID_OFF) & 0x80;
+	return ret;
+}
+#endif
diff --git a/board/keymile/kmeter1/Makefile b/board/keymile/kmeter1/Makefile
index 88b79f3..12a1518 100644
--- a/board/keymile/kmeter1/Makefile
+++ b/board/keymile/kmeter1/Makefile
@@ -22,12 +22,14 @@
 #

 include $(TOPDIR)/config.mk
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif

 LIB	= $(obj)lib$(BOARD).a

-COBJS-y += $(BOARD).o
+COBJS	+= $(BOARD).o ../common/common.o

-COBJS	:= $(COBJS-y)
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS))
 SOBJS	:= $(addprefix $(obj),$(SOBJS))
diff --git a/board/keymile/kmeter1/kmeter1.c b/board/keymile/kmeter1/kmeter1.c
index f9a59a6..03f5dda 100644
--- a/board/keymile/kmeter1/kmeter1.c
+++ b/board/keymile/kmeter1/kmeter1.c
@@ -141,7 +141,12 @@ phys_size_t initdram (int board_type)

 int checkboard (void)
 {
-	puts ("Board: Keymile kmeter1\n");
+	puts ("Board: Keymile kmeter1");
+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+	if (ethernet_present (0))
+		puts (" with PIGGY.");
+#endif
+	puts ("\n");
 	return 0;
 }

diff --git a/board/keymile/mgcoge/mgcoge.c b/board/keymile/mgcoge/mgcoge.c
index 3683417..98a4d43 100644
--- a/board/keymile/mgcoge/mgcoge.c
+++ b/board/keymile/mgcoge/mgcoge.c
@@ -25,6 +25,7 @@
 #include <mpc8260.h>
 #include <ioports.h>
 #include <malloc.h>
+#include <net.h>
 #include <asm/io.h>

 #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
@@ -285,8 +286,12 @@ phys_size_t initdram (int board_type)

 int checkboard(void)
 {
-	puts ("Board: mgcoge\n");
-
+	puts ("Board: Keymile mgcoge");
+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+	if (ethernet_present (0))
+		puts (" with PIGGY.");
+#endif
+	puts ("\n");
 	return 0;
 }

diff --git a/board/keymile/mgsuvd/mgsuvd.c b/board/keymile/mgsuvd/mgsuvd.c
index 3726acf..eb4c285 100644
--- a/board/keymile/mgsuvd/mgsuvd.c
+++ b/board/keymile/mgsuvd/mgsuvd.c
@@ -22,6 +22,7 @@
  */
 #include <common.h>
 #include <mpc8xx.h>
+#include <net.h>
 #include <asm/io.h>

 #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
@@ -60,7 +61,12 @@ const uint sdram_table[] =

 int checkboard (void)
 {
-	puts ("Board: Keymile mgsuvd\n");
+	puts ("Board: Keymile mgsuvd");
+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+	if (ethernet_present (0))
+		puts (" with PIGGY.");
+#endif
+	puts ("\n");
 	return (0);
 }

diff --git a/cpu/mpc8260/ether_scc.c b/cpu/mpc8260/ether_scc.c
index c65f0e0..a79d56c 100644
--- a/cpu/mpc8260/ether_scc.c
+++ b/cpu/mpc8260/ether_scc.c
@@ -191,6 +191,14 @@ int eth_init(bd_t *bis)
     scc_enet_t *pram_ptr;
     uint dpaddr;

+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+	if (ethernet_present (CONFIG_ETHER_INDEX) == 0) {
+		printf("Ethernet index: %d not present.\n",
+		       CONFIG_ETHER_INDEX);
+		return -1;
+	}
+#endif
+
     rxIdx = 0;
     txIdx = 0;

diff --git a/cpu/mpc8xx/scc.c b/cpu/mpc8xx/scc.c
index effb967..4be4d89 100644
--- a/cpu/mpc8xx/scc.c
+++ b/cpu/mpc8xx/scc.c
@@ -74,6 +74,12 @@ int scc_initialize(bd_t *bis)
 {
 	struct eth_device* dev;

+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+	if (ethernet_present (0) == 0) {
+		printf("Ethernet not present.\n");
+		return -1;
+	}
+#endif
 	dev = (struct eth_device*) malloc(sizeof *dev);
 	memset(dev, 0, sizeof *dev);

diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
index ed7ed65..8ae6d0f 100644
--- a/drivers/qe/uec.c
+++ b/drivers/qe/uec.c
@@ -1385,6 +1385,13 @@ int uec_initialize(int index)
 	uec_info_t		*uec_info;
 	int			err;

+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+	if (ethernet_present (index) == 0) {
+		printf("Ethernet index: %d not present.\n",
+		       index);
+		return -1;
+	}
+#endif
 	dev = (struct eth_device *)malloc(sizeof(struct eth_device));
 	if (!dev)
 		return 0;
diff --git a/include/configs/kmeter1.h b/include/configs/kmeter1.h
index d0fe6a3..e443086 100644
--- a/include/configs/kmeter1.h
+++ b/include/configs/kmeter1.h
@@ -314,6 +314,16 @@
 #define CONFIG_SYS_LOADS_BAUD_CHANGE	1	/* allow baudrate change */

 /*
+ * How to get access to the slot ID.  Put this here to make it easy
+ * to modify in a centralized location.  This is used in the HDLC
+ * driver to set the MAC.
+*/
+#define CONFIG_CHECK_ETHERNET_PRESENT	1
+#define CONFIG_SYS_SLOT_ID_BASE		CONFIG_SYS_PIGGY_BASE
+#define CONFIG_SYS_SLOT_ID_OFF		(0x07)	/* register offset */
+#define CONFIG_SYS_SLOT_ID_MASK		(0x3f)	/* mask for slot ID bits */
+
+/*
  * BOOTP options
  */
 #define CONFIG_BOOTP_BOOTFILESIZE
diff --git a/include/configs/mgcoge.h b/include/configs/mgcoge.h
index dc9b311..bfac3b0 100644
--- a/include/configs/mgcoge.h
+++ b/include/configs/mgcoge.h
@@ -400,4 +400,15 @@
 #define OF_TBCLK		(bd->bi_busfreq / 4)
 #define OF_STDOUT_PATH		"/soc/cpm/serial at 11a90"

+/*
+ * How to get access to the slot ID.  Put this here to make it easy
+ * to modify in a centralized location.  This is used in the HDLC
+ * driver to set the MAC.
+*/
+#define CONFIG_CHECK_ETHERNET_PRESENT	1
+#define CONFIG_SYS_SLOT_ID_BASE		CONFIG_SYS_PIGGY_BASE
+#define CONFIG_SYS_SLOT_ID_OFF		(0x07)	/* register offset */
+#define CONFIG_SYS_SLOT_ID_MASK		(0x3f)	/* mask for slot ID bits */
+
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/mgsuvd.h b/include/configs/mgsuvd.h
index fca2e55..0bd2f40 100644
--- a/include/configs/mgsuvd.h
+++ b/include/configs/mgsuvd.h
@@ -211,6 +211,16 @@
 #define CONFIG_ENV_OFFSET_REDUND	(CONFIG_ENV_OFFSET+CONFIG_ENV_SECT_SIZE)
 #define CONFIG_ENV_SIZE_REDUND	(CONFIG_ENV_SIZE)

+/*
+ * How to get access to the slot ID.  Put this here to make it easy
+ * to modify in a centralized location.  This is used in the HDLC
+ * driver to set the MAC.
+*/
+#define CONFIG_CHECK_ETHERNET_PRESENT	1
+#define CONFIG_SYS_SLOT_ID_BASE		CONFIG_SYS_PIGGY_BASE
+#define CONFIG_SYS_SLOT_ID_OFF		(0x07)	/* register offset */
+#define CONFIG_SYS_SLOT_ID_MASK		(0x3f)	/* mask for slot ID bits */
+
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
diff --git a/include/net.h b/include/net.h
index a5a256b..112dd7b 100644
--- a/include/net.h
+++ b/include/net.h
@@ -489,6 +489,8 @@ extern ushort getenv_VLAN(char *);
 /* copy a filename (allow for "..." notation, limit length) */
 extern void	copy_filename (char *dst, char *src, int size);

-/**********************************************************************/
+#if defined(CONFIG_CHECK_ETHERNET_PRESENT)
+extern int ethernet_present (int index);
+#endif

 #endif /* __NET_H__ */
-- 
1.5.6.1

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-12  8:49 [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board Heiko Schocher
@ 2008-11-12 17:43 ` Ben Warren
  2008-11-13  7:43   ` Heiko Schocher
  0 siblings, 1 reply; 9+ messages in thread
From: Ben Warren @ 2008-11-12 17:43 UTC (permalink / raw)
  To: u-boot

Hi Heiko,

Heiko Schocher wrote:
> Check the presence of the PIGGY on the keymile boards mgcoge,
> mgsuvd and kmeter1. If the PIGGY is not present, dont register
> this Ethernet device.
>
> Signed-off-by: Heiko Schocher <hs@denx.de>
> ---
This looks like useful stuff to have, but I'd prefer that you put the 
check logic in board_eth_init() rather than adding to the individual 
device drivers.  I know the 8260 SCC driver is the older style, which 
precludes the use of board_eth_init, but I'll convert it if you're able 
to test.

regards,
Ben

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-12 17:43 ` Ben Warren
@ 2008-11-13  7:43   ` Heiko Schocher
  2008-11-13 17:30     ` Ben Warren
  0 siblings, 1 reply; 9+ messages in thread
From: Heiko Schocher @ 2008-11-13  7:43 UTC (permalink / raw)
  To: u-boot

Hello Ben

Ben Warren wrote:
> Heiko Schocher wrote:
>   
>> Check the presence of the PIGGY on the keymile boards mgcoge,
>> mgsuvd and kmeter1. If the PIGGY is not present, dont register
>> this Ethernet device.
>>
>> Signed-off-by: Heiko Schocher <hs@denx.de>
>> ---
>>     
> This looks like useful stuff to have, but I'd prefer that you put the 
> check logic in board_eth_init() rather than adding to the individual 
> device drivers.  I know the 8260 SCC driver is the older style, which 
> precludes the use of board_eth_init, but I'll convert it if you're able 
> to test.
>   

Yes, I could test such a change for you, but hmm... I am not sure, if
board_eth_init () is the right place for my purpose.
I need for every Ethernet device a selection, if this device is present or
not.
Correct me if I am wrong, but it looks like board_eth_init ()
is not made for this purpose. (Ok, I can do a specific device init
in board_eth_init (), but then we must do something, that prevents
that the device is again initialized in eth_initialize () ...

Hmm... while writing this it comes a idea in my mind:
we could move all the *_initialize functions in eth_initialize () in a
seperate function, say eth_hardware_init() and maybe making this
function "weak", so a board writer can write his own
eth_hardware_init() ... in such a function, I could check which
device is present, and only initialize the present devices ...
what do you think?

bye
Heiko

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-13  7:43   ` Heiko Schocher
@ 2008-11-13 17:30     ` Ben Warren
  2008-11-17  8:13       ` Heiko Schocher
  2008-11-19 12:35       ` Gary Jennejohn
  0 siblings, 2 replies; 9+ messages in thread
From: Ben Warren @ 2008-11-13 17:30 UTC (permalink / raw)
  To: u-boot

Heiko Schocher wrote:
> Hello Ben
>
> Ben Warren wrote:
>   
>> Heiko Schocher wrote:
>>   
>>     
>>> Check the presence of the PIGGY on the keymile boards mgcoge,
>>> mgsuvd and kmeter1. If the PIGGY is not present, dont register
>>> this Ethernet device.
>>>
>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>> ---
>>>     
>>>       
>> This looks like useful stuff to have, but I'd prefer that you put the 
>> check logic in board_eth_init() rather than adding to the individual 
>> device drivers.  I know the 8260 SCC driver is the older style, which 
>> precludes the use of board_eth_init, but I'll convert it if you're able 
>> to test.
>>   
>>     
>
> Yes, I could test such a change for you, but hmm... I am not sure, if
> board_eth_init () is the right place for my purpose.
> I need for every Ethernet device a selection, if this device is present or
> not.
> Correct me if I am wrong, but it looks like board_eth_init ()
> is not made for this purpose. (Ok, I can do a specific device init
> in board_eth_init (), but then we must do something, that prevents
> that the device is again initialized in eth_initialize () ...
>
>   
board_eth_init() was introduced for exactly this sort of thing.  Have a 
look at the net repo (I've sent a pull request to Wolfgang so the 
current changes will make it into the 12.2008 release).  There aren't 
any device initializations left in eth_initialize(), so there's no issue 
of a device being initialized twice.  The goal is for all devices to be 
started by cpu_eth_int() or board_eth_init().
> Hmm... while writing this it comes a idea in my mind:
> we could move all the *_initialize functions in eth_initialize () in a
> seperate function, say eth_hardware_init() and maybe making this
> function "weak", so a board writer can write his own
> eth_hardware_init() ... in such a function, I could check which
> device is present, and only initialize the present devices ...
> what do you think?
>   
That's what board_eth_init() and cpu_eth_init() are for.  In addition, I 
forgot to mention that a couple of days ago Gary Jennejohn submitted a 
patch for changing the 82xx SCC driver over to CONFIG_NET_MULTI style.

regards,
Ben

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-13 17:30     ` Ben Warren
@ 2008-11-17  8:13       ` Heiko Schocher
  2008-11-19 12:35       ` Gary Jennejohn
  1 sibling, 0 replies; 9+ messages in thread
From: Heiko Schocher @ 2008-11-17  8:13 UTC (permalink / raw)
  To: u-boot

Hello Ben,

Ben Warren wrote:
> Heiko Schocher wrote:
>   
>> Hello Ben
>>
>> Ben Warren wrote:
>>   
>>     
>>> Heiko Schocher wrote:
>>>   
>>>     
>>>       
>>>> Check the presence of the PIGGY on the keymile boards mgcoge,
>>>> mgsuvd and kmeter1. If the PIGGY is not present, dont register
>>>> this Ethernet device.
>>>>
>>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>>> ---
>>>>     
>>>>       
>>>>         
>>> This looks like useful stuff to have, but I'd prefer that you put the 
>>> check logic in board_eth_init() rather than adding to the individual 
>>> device drivers.  I know the 8260 SCC driver is the older style, which 
>>> precludes the use of board_eth_init, but I'll convert it if you're able 
>>> to test.
>>>   
>>>     
>>>       
>> Yes, I could test such a change for you, but hmm... I am not sure, if
>> board_eth_init () is the right place for my purpose.
>> I need for every Ethernet device a selection, if this device is present or
>> not.
>> Correct me if I am wrong, but it looks like board_eth_init ()
>> is not made for this purpose. (Ok, I can do a specific device init
>> in board_eth_init (), but then we must do something, that prevents
>> that the device is again initialized in eth_initialize () ...
>>
>>   
>>     
> board_eth_init() was introduced for exactly this sort of thing.  Have a 
> look at the net repo (I've sent a pull request to Wolfgang so the 
> current changes will make it into the 12.2008 release).  There aren't 
> any device initializations left in eth_initialize(), so there's no issue 
> of a device being initialized twice.  The goal is for all devices to be 
> started by cpu_eth_int() or board_eth_init().
>   

Ahh... now I see it. I adjust my patch, thanks.

bye
Heiko

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-13 17:30     ` Ben Warren
  2008-11-17  8:13       ` Heiko Schocher
@ 2008-11-19 12:35       ` Gary Jennejohn
  2008-11-19 13:03         ` Heiko Schocher
  2008-11-19 17:44         ` Ben Warren
  1 sibling, 2 replies; 9+ messages in thread
From: Gary Jennejohn @ 2008-11-19 12:35 UTC (permalink / raw)
  To: u-boot

On Thu, 13 Nov 2008 09:30:51 -0800
Ben Warren <biggerbadderben@gmail.com> wrote:

> Heiko Schocher wrote:
> > Hello Ben
> >
> > Ben Warren wrote:
> >   
> >> Heiko Schocher wrote:
> >>   
> >>     
> >>> Check the presence of the PIGGY on the keymile boards mgcoge,
> >>> mgsuvd and kmeter1. If the PIGGY is not present, dont register
> >>> this Ethernet device.
> >>>
> >>> Signed-off-by: Heiko Schocher <hs@denx.de>
> >>> ---
> >>>     
> >>>       
> >> This looks like useful stuff to have, but I'd prefer that you put the 
> >> check logic in board_eth_init() rather than adding to the individual 
> >> device drivers.  I know the 8260 SCC driver is the older style, which 
> >> precludes the use of board_eth_init, but I'll convert it if you're able 
> >> to test.
> >>   

Unfortunately, this approach won't work.  First of all, the 82xx SCC
driver is now initialized in cpu_eth_init(), which knows nothing about
board-specific peculiarities like the PIGGY.  Secondly, the HDLC
driver for Keymile has to be initialized in board_eth_init(), and it
has nothing to do with the PIGGY.  Putting the check in board_eth_init()
would break it completely.  I looked at Heiko's latest patch and couldn't
figure out a way to cleanly differentiate between initializing the HDLC
driver and checking whether the PIGGY was present fo the other ENET drivers.

> >>     
> >
> > Yes, I could test such a change for you, but hmm... I am not sure, if
> > board_eth_init () is the right place for my purpose.
> > I need for every Ethernet device a selection, if this device is present or
> > not.
> > Correct me if I am wrong, but it looks like board_eth_init ()
> > is not made for this purpose. (Ok, I can do a specific device init
> > in board_eth_init (), but then we must do something, that prevents
> > that the device is again initialized in eth_initialize () ...
> >
> >   
> board_eth_init() was introduced for exactly this sort of thing.  Have a 
> look at the net repo (I've sent a pull request to Wolfgang so the 
> current changes will make it into the 12.2008 release).  There aren't 
> any device initializations left in eth_initialize(), so there's no issue 
> of a device being initialized twice.  The goal is for all devices to be 
> started by cpu_eth_int() or board_eth_init().
> > Hmm... while writing this it comes a idea in my mind:
> > we could move all the *_initialize functions in eth_initialize () in a
> > seperate function, say eth_hardware_init() and maybe making this
> > function "weak", so a board writer can write his own
> > eth_hardware_init() ... in such a function, I could check which
> > device is present, and only initialize the present devices ...
> > what do you think?
> >   
> That's what board_eth_init() and cpu_eth_init() are for.  In addition, I 
> forgot to mention that a couple of days ago Gary Jennejohn submitted a 
> patch for changing the 82xx SCC driver over to CONFIG_NET_MULTI style.
> 

Correct, and it must explicitly call ethernet_present() - see above.

---
Gary Jennejohn
*********************************************************************
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 at denx.de
*********************************************************************

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-19 12:35       ` Gary Jennejohn
@ 2008-11-19 13:03         ` Heiko Schocher
  2008-11-19 18:14           ` Gary Jennejohn
  2008-11-19 17:44         ` Ben Warren
  1 sibling, 1 reply; 9+ messages in thread
From: Heiko Schocher @ 2008-11-19 13:03 UTC (permalink / raw)
  To: u-boot

Hello Gray,

Gary Jennejohn schrieb:
> On Thu, 13 Nov 2008 09:30:51 -0800
> Ben Warren <biggerbadderben@gmail.com> wrote:
> 
>> Heiko Schocher wrote:
>>> Hello Ben
>>>
>>> Ben Warren wrote:
>>>   
>>>> Heiko Schocher wrote:
>>>>   
>>>>     
>>>>> Check the presence of the PIGGY on the keymile boards mgcoge,
>>>>> mgsuvd and kmeter1. If the PIGGY is not present, dont register
>>>>> this Ethernet device.
>>>>>
>>>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>>>> ---
>>>>>     
>>>>>       
>>>> This looks like useful stuff to have, but I'd prefer that you put the 
>>>> check logic in board_eth_init() rather than adding to the individual 
>>>> device drivers.  I know the 8260 SCC driver is the older style, which 
>>>> precludes the use of board_eth_init, but I'll convert it if you're able 
>>>> to test.
>>>>   
> 
> Unfortunately, this approach won't work.  First of all, the 82xx SCC
> driver is now initialized in cpu_eth_init(), which knows nothing about
> board-specific peculiarities like the PIGGY.  Secondly, the HDLC
> driver for Keymile has to be initialized in board_eth_init(), and it
> has nothing to do with the PIGGY.  Putting the check in board_eth_init()
> would break it completely.  I looked at Heiko's latest patch and couldn't
> figure out a way to cleanly differentiate between initializing the HDLC
> driver and checking whether the PIGGY was present fo the other ENET drivers.

Hmm.. you can now initialize in board_eth_init () in board/keymile/common/common.c
your HDLC specific things, or?

[...]
>> That's what board_eth_init() and cpu_eth_init() are for.  In addition, I 
>> forgot to mention that a couple of days ago Gary Jennejohn submitted a 
>> patch for changing the 82xx SCC driver over to CONFIG_NET_MULTI style.
>>
> 
> Correct, and it must explicitly call ethernet_present() - see above.

If I understand the actual code right, then _now_ (which means actual
top of tree+ patch 4/5) it gets first called board_eth_init (). There,
I check if ethernet_present (), and if so, I return -1, which will result
in calling cpu_eth_init(). If the ethernet is not present, it returns 0,
which will result in not calling cpu_eth_init() ... And your HDLC
initialization can be done in board_eth_init() ... thats what we need,
or?

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-19 12:35       ` Gary Jennejohn
  2008-11-19 13:03         ` Heiko Schocher
@ 2008-11-19 17:44         ` Ben Warren
  1 sibling, 0 replies; 9+ messages in thread
From: Ben Warren @ 2008-11-19 17:44 UTC (permalink / raw)
  To: u-boot

Hi Gary,

Gary Jennejohn wrote:
> On Thu, 13 Nov 2008 09:30:51 -0800
> Ben Warren <biggerbadderben@gmail.com> wrote:
>
>   
>> Heiko Schocher wrote:
>>     
>>> Hello Ben
>>>
>>> Ben Warren wrote:
>>>   
>>>       
>>>> Heiko Schocher wrote:
>>>>   
>>>>     
>>>>         
>>>>> Check the presence of the PIGGY on the keymile boards mgcoge,
>>>>> mgsuvd and kmeter1. If the PIGGY is not present, dont register
>>>>> this Ethernet device.
>>>>>
>>>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>>>> ---
>>>>>     
>>>>>       
>>>>>           
>>>> This looks like useful stuff to have, but I'd prefer that you put the 
>>>> check logic in board_eth_init() rather than adding to the individual 
>>>> device drivers.  I know the 8260 SCC driver is the older style, which 
>>>> precludes the use of board_eth_init, but I'll convert it if you're able 
>>>> to test.
>>>>   
>>>>         
>
> Unfortunately, this approach won't work.  First of all, the 82xx SCC
> driver is now initialized in cpu_eth_init(), which knows nothing about
> board-specific peculiarities like the PIGGY.  Secondly, the HDLC
> driver for Keymile has to be initialized in board_eth_init(), and it
> has nothing to do with the PIGGY.  Putting the check in board_eth_init()
> would break it completely.  I looked at Heiko's latest patch and couldn't
> figure out a way to cleanly differentiate between initializing the HDLC
> driver and checking whether the PIGGY was present fo the other ENET drivers.
>
>   
I think you're missing something.  You can put whatever logic you want 
in board_eth_init(), *including* calling cpu_eth_init().  As long as  
board_eth_init() returns >= 0, cpu_eth_init() will never get called by 
eth_initialize().  When I designed this, my intention (although not well 
communicated) was that board_eth_init() would always return >= 0, and 
that the -1 return code would only be used by the weak function in 
net/eth.c  There's pretty serious flexibility here and I urge you to 
look again.

regards,
Ben

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board
  2008-11-19 13:03         ` Heiko Schocher
@ 2008-11-19 18:14           ` Gary Jennejohn
  0 siblings, 0 replies; 9+ messages in thread
From: Gary Jennejohn @ 2008-11-19 18:14 UTC (permalink / raw)
  To: u-boot

On Wed, 19 Nov 2008 14:03:44 +0100
Heiko Schocher <hs@denx.de> wrote:

> Gary Jennejohn schrieb:
> > On Thu, 13 Nov 2008 09:30:51 -0800
> > Ben Warren <biggerbadderben@gmail.com> wrote:
> > 
[snip]
> >> That's what board_eth_init() and cpu_eth_init() are for.  In addition, I 
> >> forgot to mention that a couple of days ago Gary Jennejohn submitted a 
> >> patch for changing the 82xx SCC driver over to CONFIG_NET_MULTI style.
> >>
> > 
> > Correct, and it must explicitly call ethernet_present() - see above.
> 
> If I understand the actual code right, then _now_ (which means actual
> top of tree+ patch 4/5) it gets first called board_eth_init (). There,
> I check if ethernet_present (), and if so, I return -1, which will result
> in calling cpu_eth_init(). If the ethernet is not present, it returns 0,
> which will result in not calling cpu_eth_init() ... And your HDLC
> initialization can be done in board_eth_init() ... thats what we need,
> or?
> 

Ah yes.  My face is red.  I read the logic backwards.  If the PIGGY is
present it returns -1 ==> call cpu_eth_init(), otherwise 0.

And keymile_hdlc_enet_initialize() always succeeds so it can always be
called.

OK.  Then all we need is to add a call to keymile_hdlc_enet_initialize() to
eth_board_init() before the PIGGY check.  Case closed.

And I have to remove the call to ethernet_present() from the 82xx SCC
driver.

Thanks Heiko.

---
Gary Jennejohn
*********************************************************************
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 at denx.de
*********************************************************************

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2008-11-19 18:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-12  8:49 [U-Boot] [PATCH 4/5] powerpc: keymile: Add a check for the PIGGY debug board Heiko Schocher
2008-11-12 17:43 ` Ben Warren
2008-11-13  7:43   ` Heiko Schocher
2008-11-13 17:30     ` Ben Warren
2008-11-17  8:13       ` Heiko Schocher
2008-11-19 12:35       ` Gary Jennejohn
2008-11-19 13:03         ` Heiko Schocher
2008-11-19 18:14           ` Gary Jennejohn
2008-11-19 17:44         ` Ben Warren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox