* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
@ 2008-09-25 12:53 richardretanubun
2008-09-25 19:50 ` Kim Phillips
` (2 more replies)
0 siblings, 3 replies; 24+ messages in thread
From: richardretanubun @ 2008-09-25 12:53 UTC (permalink / raw)
To: u-boot
Added for convenience for other platforms that uses MPC8360 (has 8 UCC).
6 eth interface is chosen because the platform I am using combines
UCC1&2 and UCC3&4 as gigEth and the other 4 UCC as 10/100 Eth.
- Richard
From: Richard Retanubun <RichardRetanubun@RugggedCom.com>
Date: Wed, 24 Sep 2008 17:21:47 -0400
Subject: [PATCH] Add two more ethernet interface for 83XX
Signed-off-by: Richard Retanubun <RichardRetanubun@ruggedcom.com>
---
README | 3 ++
common/cmd_bdinfo.c | 17 +++++++++++++++-
common/env_common.c | 6 +++++
common/env_embedded.c | 6 +++++
cpu/mpc83xx/fdt.c | 3 +-
drivers/qe/uec.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
include/asm-ppc/u-boot.h | 6 +++++
lib_ppc/board.c | 30 ++++++++++++++++++++++++++++
net/eth.c | 6 +++++
tools/env/fw_env.c | 6 +++++
10 files changed, 128 insertions(+), 3 deletions(-)
diff --git a/README b/README
index ccd839c..8802304 100644
--- a/README
+++ b/README
@@ -1095,8 +1095,11 @@ The following options need to be configured:
- Ethernet address:
CONFIG_ETHADDR
+ CONFIG_ETH1ADDR
CONFIG_ETH2ADDR
CONFIG_ETH3ADDR
+ CONFIG_ETH4ADDR
+ CONFIG_ETH5ADDR
Define a default value for Ethernet address to use
for the respective Ethernet interface, in case this
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index f4d9d40..67cc64f 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -91,11 +91,12 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
print_str ("pevfreq", strmhz(buf, bd->bi_pevfreq));
#endif
+#if defined(CONFIG_HAS_ETH0)
puts ("ethaddr =");
for (i=0; i<6; ++i) {
printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
}
-
+#endif
#if defined(CONFIG_HAS_ETH1)
puts ("\neth1addr =");
for (i=0; i<6; ++i) {
@@ -117,6 +118,20 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
#endif
+#if defined(CONFIG_HAS_ETH4)
+ puts ("\neth4addr =");
+ for (i=0; i<6; ++i) {
+ printf ("%c%02X", i ? ':' : ' ', bd->bi_enet4addr[i]);
+ }
+#endif
+
+#if defined(CONFIG_HAS_ETH5)
+ puts ("\neth5addr =");
+ for (i=0; i<6; ++i) {
+ printf ("%c%02X", i ? ':' : ' ', bd->bi_enet5addr[i]);
+ }
+#endif
+
#ifdef CONFIG_HERMES
print_str ("ethspeed", strmhz(buf, bd->bi_ethspeed));
#endif
diff --git a/common/env_common.c b/common/env_common.c
index 77f9944..0fee3af 100644
--- a/common/env_common.c
+++ b/common/env_common.c
@@ -91,6 +91,12 @@ uchar default_environment[] = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
+#endif
#ifdef CONFIG_IPADDR
"ipaddr=" MK_STR(CONFIG_IPADDR) "\0"
#endif
diff --git a/common/env_embedded.c b/common/env_embedded.c
index 77e5619..e79f843 100644
--- a/common/env_embedded.c
+++ b/common/env_embedded.c
@@ -135,6 +135,12 @@ env_t environment __PPCENV__ = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
+#endif
#ifdef CONFIG_ETHPRIME
"ethprime=" CONFIG_ETHPRIME "\0"
#endif
diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c
index 39bd9dc..3e3e1c8 100644
--- a/cpu/mpc83xx/fdt.c
+++ b/cpu/mpc83xx/fdt.c
@@ -52,7 +52,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
fdt_fixup_crypto_node(blob, 0x0204);
#if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\
- defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3)
+ defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) ||\
+ defined(CONFIG_HAS_ETH4) || defined(CONFIG_HAS_ETH5)
fdt_fixup_ethernet(blob);
#endif
diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
index 344c649..e1dec5e 100644
--- a/drivers/qe/uec.c
+++ b/drivers/qe/uec.c
@@ -123,8 +123,54 @@ static uec_info_t eth4_uec_info = {
.enet_interface = CFG_UEC4_INTERFACE_MODE,
};
#endif
+#ifdef CONFIG_UEC_ETH5
+static uec_info_t eth5_uec_info = {
+ .uf_info = {
+ .ucc_num = CFG_UEC5_UCC_NUM,
+ .rx_clock = CFG_UEC5_RX_CLK,
+ .tx_clock = CFG_UEC5_TX_CLK,
+ .eth_type = CFG_UEC5_ETH_TYPE,
+ },
+#if (CFG_UEC5_ETH_TYPE == FAST_ETH)
+ .num_threads_tx = UEC_NUM_OF_THREADS_1,
+ .num_threads_rx = UEC_NUM_OF_THREADS_1,
+#else
+ .num_threads_tx = UEC_NUM_OF_THREADS_4,
+ .num_threads_rx = UEC_NUM_OF_THREADS_4,
+#endif
+ .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .tx_bd_ring_len = 16,
+ .rx_bd_ring_len = 16,
+ .phy_address = CFG_UEC5_PHY_ADDR,
+ .enet_interface = CFG_UEC5_INTERFACE_MODE,
+};
+#endif
+#ifdef CONFIG_UEC_ETH6
+static uec_info_t eth6_uec_info = {
+ .uf_info = {
+ .ucc_num = CFG_UEC6_UCC_NUM,
+ .rx_clock = CFG_UEC6_RX_CLK,
+ .tx_clock = CFG_UEC6_TX_CLK,
+ .eth_type = CFG_UEC6_ETH_TYPE,
+ },
+#if (CFG_UEC6_ETH_TYPE == FAST_ETH)
+ .num_threads_tx = UEC_NUM_OF_THREADS_1,
+ .num_threads_rx = UEC_NUM_OF_THREADS_1,
+#else
+ .num_threads_tx = UEC_NUM_OF_THREADS_4,
+ .num_threads_rx = UEC_NUM_OF_THREADS_4,
+#endif
+ .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .tx_bd_ring_len = 16,
+ .rx_bd_ring_len = 16,
+ .phy_address = CFG_UEC6_PHY_ADDR,
+ .enet_interface = CFG_UEC6_INTERFACE_MODE,
+};
+#endif
-#define MAXCONTROLLERS (4)
+#define MAXCONTROLLERS (6)
static struct eth_device *devlist[MAXCONTROLLERS];
diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h
index 54ac01d..7451905 100644
--- a/include/asm-ppc/u-boot.h
+++ b/include/asm-ppc/u-boot.h
@@ -111,6 +111,12 @@ typedef struct bd_info {
#ifdef CONFIG_HAS_ETH3
unsigned char bi_enet3addr[6];
#endif
+#ifdef CONFIG_HAS_ETH4
+ unsigned char bi_enet4addr[6];
+#endif
+#ifdef CONFIG_HAS_ETH5
+ unsigned char bi_enet5addr[6];
+#endif
#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
defined(CONFIG_405EZ) || defined(CONFIG_440GX) || \
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index c02ac62..d440722 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -944,6 +944,36 @@ void board_init_r (gd_t *id, ulong dest_addr)
}
#endif
+#ifdef CONFIG_HAS_ETH4
+ /* handle 5th ethernet address */
+ s = getenv("eth4addr");
+#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
+ if (s == NULL)
+ board_get_enetaddr(bd->bi_enet4addr);
+ else
+#endif
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet4addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
+ if (s)
+ s = (*e) ? e + 1 : e;
+ }
+#endif
+
+#ifdef CONFIG_HAS_ETH5
+ /* handle 6th ethernet address */
+ s = getenv("eth5addr");
+#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
+ if (s == NULL)
+ board_get_enetaddr(bd->bi_enet5addr);
+ else
+#endif
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet5addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
+ if (s)
+ s = (*e) ? e + 1 : e;
+ }
+#endif
+
#if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \
defined(CONFIG_TQM8272) || \
defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \
diff --git a/net/eth.c b/net/eth.c
index 432dd60..ccd871a 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -180,6 +180,12 @@ int eth_initialize(bd_t *bis)
#if defined(CONFIG_UEC_ETH4)
uec_initialize(3);
#endif
+#if defined(CONFIG_UEC_ETH5)
+ uec_initialize(4);
+#endif
+#if defined(CONFIG_UEC_ETH6)
+ uec_initialize(5);
+#endif
#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
fec_initialize(bis);
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 46747d3..6e9c34f 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -157,6 +157,12 @@ static char default_environment[] = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR (CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR (CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR (CONFIG_ETH5ADDR) "\0"
+#endif
#ifdef CONFIG_ETHPRIME
"ethprime=" CONFIG_ETHPRIME "\0"
#endif
--
1.5.5.GIT
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 12:53 [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx richardretanubun
@ 2008-09-25 19:50 ` Kim Phillips
2008-09-25 20:25 ` richardretanubun
2008-09-25 22:24 ` [U-Boot] [PATCH] " Wolfgang Denk
2008-09-25 20:42 ` Jerry Van Baren
2008-09-26 3:44 ` Jerry Van Baren
2 siblings, 2 replies; 24+ messages in thread
From: Kim Phillips @ 2008-09-25 19:50 UTC (permalink / raw)
To: u-boot
On Thu, 25 Sep 2008 08:53:24 -0400
richardretanubun <richardretanubun@ruggedcom.com> wrote:
> Added for convenience for other platforms that uses MPC8360 (has 8 UCC).
> 6 eth interface is chosen because the platform I am using combines
> UCC1&2 and UCC3&4 as gigEth and the other 4 UCC as 10/100 Eth.
>
> - Richard
>
> From: Richard Retanubun <RichardRetanubun@RugggedCom.com>
> Date: Wed, 24 Sep 2008 17:21:47 -0400
> Subject: [PATCH] Add two more ethernet interface for 83XX
> Signed-off-by: Richard Retanubun <RichardRetanubun@ruggedcom.com>
Unless you're sending a patch on someone else's behalf, you don't need
the From:, Date:, and Subject: lines above, esp. since your From email
does not match your S-o-b email. Please also omit the "- Richard" from
the git commit part of the patch; if you want say something in addition
to the commit message, put it below the '---' line..
> ---
..i.e, here.
> README | 3 ++
> common/cmd_bdinfo.c | 17 +++++++++++++++-
> common/env_common.c | 6 +++++
> common/env_embedded.c | 6 +++++
> cpu/mpc83xx/fdt.c | 3 +-
> drivers/qe/uec.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
> include/asm-ppc/u-boot.h | 6 +++++
> lib_ppc/board.c | 30 ++++++++++++++++++++++++++++
> net/eth.c | 6 +++++
> tools/env/fw_env.c | 6 +++++
> 10 files changed, 128 insertions(+), 3 deletions(-)
just because 83xx is the first user doesn't mean it has to go
through the 83xx tree. This patch is really not 83xx specific at all
and should probably go through net (Ben Warren) if not WD himself.
Having said that, this patch does transcend 4 subsystem areas, so if
Ben/gvb/WD want to ack/sign off on it, I can handle pushing this
upstream.
> diff --git a/README b/README
> index ccd839c..8802304 100644
> --- a/README
> +++ b/README
> @@ -1095,8 +1095,11 @@ The following options need to be configured:
>
> - Ethernet address:
> CONFIG_ETHADDR
> + CONFIG_ETH1ADDR
> CONFIG_ETH2ADDR
hmm..historically ETHADDR has been the implicit ETH1ADDR. Did you mean
to s/ETHADDR/ETH1ADDR/ ? if so, you'd need a better justification and
a much larger patch. Otherwise, please don't do this; add a
CONFIG_ETH6ADDR below instead.
> CONFIG_ETH3ADDR
> + CONFIG_ETH4ADDR
> + CONFIG_ETH5ADDR
>
> Define a default value for Ethernet address to use
> for the respective Ethernet interface, in case this
> diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
> index f4d9d40..67cc64f 100644
> --- a/common/cmd_bdinfo.c
> +++ b/common/cmd_bdinfo.c
> @@ -91,11 +91,12 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> print_str ("pevfreq", strmhz(buf, bd->bi_pevfreq));
> #endif
>
> +#if defined(CONFIG_HAS_ETH0)
> puts ("ethaddr =");
> for (i=0; i<6; ++i) {
> printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
> }
> -
> +#endif
how is the above change relevant to the patch subject?
Thanks,
Kim
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 19:50 ` Kim Phillips
@ 2008-09-25 20:25 ` richardretanubun
2008-09-25 20:45 ` Kim Phillips
2008-09-25 21:44 ` [U-Boot] [PATCH v2] " richardretanubun
2008-09-25 22:24 ` [U-Boot] [PATCH] " Wolfgang Denk
1 sibling, 2 replies; 24+ messages in thread
From: richardretanubun @ 2008-09-25 20:25 UTC (permalink / raw)
To: u-boot
Kim Phillips wrote:
> On Thu, 25 Sep 2008 08:53:24 -0400
> richardretanubun <richardretanubun@ruggedcom.com> wrote:
>
>> Added for convenience for other platforms that uses MPC8360 (has 8 UCC).
>> 6 eth interface is chosen because the platform I am using combines
>> UCC1&2 and UCC3&4 as gigEth and the other 4 UCC as 10/100 Eth.
>>
>> - Richard
>>
>> From: Richard Retanubun <RichardRetanubun@RugggedCom.com>
>> Date: Wed, 24 Sep 2008 17:21:47 -0400
>> Subject: [PATCH] Add two more ethernet interface for 83XX
>> Signed-off-by: Richard Retanubun <RichardRetanubun@ruggedcom.com>
>
> Unless you're sending a patch on someone else's behalf, you don't need
> the From:, Date:, and Subject: lines above, esp. since your From email
> does not match your S-o-b email. Please also omit the "- Richard" from
> the git commit part of the patch; if you want say something in addition
> to the commit message, put it below the '---' line..
>
>> ---
>
> ..i.e, here.
>
Understood, thanks for the clarification, will heed for future patches.
>> README | 3 ++
>> common/cmd_bdinfo.c | 17 +++++++++++++++-
>> common/env_common.c | 6 +++++
>> common/env_embedded.c | 6 +++++
>> cpu/mpc83xx/fdt.c | 3 +-
>> drivers/qe/uec.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
>> include/asm-ppc/u-boot.h | 6 +++++
>> lib_ppc/board.c | 30 ++++++++++++++++++++++++++++
>> net/eth.c | 6 +++++
>> tools/env/fw_env.c | 6 +++++
>> 10 files changed, 128 insertions(+), 3 deletions(-)
>
> just because 83xx is the first user doesn't mean it has to go
> through the 83xx tree. This patch is really not 83xx specific at all
> and should probably go through net (Ben Warren) if not WD himself.
>
> Having said that, this patch does transcend 4 subsystem areas, so if
> Ben/gvb/WD want to ack/sign off on it, I can handle pushing this
> upstream.
>
Thanks for the help, I realize this touches many subsystems, but I figured I start at the 83xx community
since (I think) it is the most probable community to find platforms with these many eth interfaces.
>> diff --git a/README b/README
>> index ccd839c..8802304 100644
>> --- a/README
>> +++ b/README
>> @@ -1095,8 +1095,11 @@ The following options need to be configured:
>>
>> - Ethernet address:
>> CONFIG_ETHADDR
>> + CONFIG_ETH1ADDR
>> CONFIG_ETH2ADDR
>
> hmm..historically ETHADDR has been the implicit ETH1ADDR. Did you mean
> to s/ETHADDR/ETH1ADDR/ ? if so, you'd need a better justification and
> a much larger patch. Otherwise, please don't do this; add a
> CONFIG_ETH6ADDR below instead.
>
I will add CONFIG_ETH6ADDR below.
>> CONFIG_ETH3ADDR
>> + CONFIG_ETH4ADDR
>> + CONFIG_ETH5ADDR
>>
>> Define a default value for Ethernet address to use
>> for the respective Ethernet interface, in case this
>> diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
>> index f4d9d40..67cc64f 100644
>> --- a/common/cmd_bdinfo.c
>> +++ b/common/cmd_bdinfo.c
>> @@ -91,11 +91,12 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>> print_str ("pevfreq", strmhz(buf, bd->bi_pevfreq));
>> #endif
>>
>> +#if defined(CONFIG_HAS_ETH0)
>> puts ("ethaddr =");
>> for (i=0; i<6; ++i) {
>> printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
>> }
>> -
>> +#endif
>
> how is the above change relevant to the patch subject?
Good catch, I lumped it together because I was in the code neighborhood
got carried away in making the code uniform. I will pull it out of this patch.
Is the idea of adding an #ifdef here valid though?
If it is, I can submit a separate patch for it.
>
> Thanks,
>
> Kim
Thanks for all the feedback
Richard
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 12:53 [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx richardretanubun
2008-09-25 19:50 ` Kim Phillips
@ 2008-09-25 20:42 ` Jerry Van Baren
2008-09-25 22:17 ` Wolfgang Denk
2008-09-26 3:44 ` Jerry Van Baren
2 siblings, 1 reply; 24+ messages in thread
From: Jerry Van Baren @ 2008-09-25 20:42 UTC (permalink / raw)
To: u-boot
richardretanubun wrote:
> Added for convenience for other platforms that uses MPC8360 (has 8 UCC).
> 6 eth interface is chosen because the platform I am using combines
> UCC1&2 and UCC3&4 as gigEth and the other 4 UCC as 10/100 Eth.
We are about to fall into a never ending explosion of #define
CONFIG_ETHnnnADDR. This is bad. Very bad. :-(
Kumar solved this problem WRT cpu/mpc83xx/fdt.c fdt_fixup_ethernet(void
*fdt) (and other CPUs) by using the device tree to find all the
ethernets and configure them.
<http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/45554>
Is bdinfo relevant? If not, return; /* that was easy */
If bdinfo is still relevant, look at how Kumar solved the #define
explosion in cpu/*/fdt.c. You should be able to adapt it in the code
you augmented with CONFIG_ETH[45]ADDR.
Suggestion: Look at changing CONFIG_ETH*ADDR to CONFIG_ETH_FDT where
that notation indicates the code should find the ethernet info in the
fdt blob rather than #defines/env variables.
One fly in the ointment is if we don't have a fdt blob to pick the
ethernet parameters out of. Perhaps this is because we are going to
load a fdt blob over the ethernet. We discussed having a default blob
(probably the more elegant solution). A simpler and more "the way it is
now" solution would be to define a limited number of #define
CONFIG_ETH*ADDR values (I think 2 would be adequate, but at least limit
ourselves to the current 4 max). Then bare board fdt blob loading would
have to be over one/two/four fixed ethernet ports, but once a valid fdt
blob was loaded all of the ethernets would be configured properly by u-boot.
> ---
> README | 3 ++
> common/cmd_bdinfo.c | 17 +++++++++++++++-
> common/env_common.c | 6 +++++
> common/env_embedded.c | 6 +++++
> cpu/mpc83xx/fdt.c | 3 +-
> drivers/qe/uec.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
> include/asm-ppc/u-boot.h | 6 +++++
> lib_ppc/board.c | 30 ++++++++++++++++++++++++++++
> net/eth.c | 6 +++++
> tools/env/fw_env.c | 6 +++++
> 10 files changed, 128 insertions(+), 3 deletions(-)
>
> diff --git a/README b/README
> index ccd839c..8802304 100644
> --- a/README
> +++ b/README
> @@ -1095,8 +1095,11 @@ The following options need to be configured:
>
> - Ethernet address:
> CONFIG_ETHADDR
> + CONFIG_ETH1ADDR
> CONFIG_ETH2ADDR
> CONFIG_ETH3ADDR
> + CONFIG_ETH4ADDR
> + CONFIG_ETH5ADDR
Bleah! Oh, right, I said that already.
[snip]
> +#if defined(CONFIG_HAS_ETH4)
> + puts ("\neth4addr =");
> + for (i=0; i<6; ++i) {
> + printf ("%c%02X", i ? ':' : ' ', bd->bi_enet4addr[i]);
> + }
> +#endif
> +
> +#if defined(CONFIG_HAS_ETH5)
> + puts ("\neth5addr =");
> + for (i=0; i<6; ++i) {
> + printf ("%c%02X", i ? ':' : ' ', bd->bi_enet5addr[i]);
> + }
> +#endif
> +
No, don't add more cut'n'pastes. Bleah! Use a fdt_*() loop (a'la
Kumar's code). This would have to be conditional on CONFIG_LIBFDT since
not all boards use LIBFDT. If !defined(CONFIG_LIBFDT), use the existing
code.
> diff --git a/common/env_common.c b/common/env_common.c
> index 77f9944..0fee3af 100644
> --- a/common/env_common.c
> +++ b/common/env_common.c
> @@ -91,6 +91,12 @@ uchar default_environment[] = {
> #ifdef CONFIG_ETH3ADDR
> "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
> #endif
> +#ifdef CONFIG_ETH4ADDR
> + "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
> +#endif
> +#ifdef CONFIG_ETH5ADDR
> + "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
> +#endif
Bleah! I would prefer to cut our losses at CONFIG_ETH1ADDR (or
CONFIG_ETH3ADDR), see lead-in discussion.
> diff --git a/common/env_embedded.c b/common/env_embedded.c
> index 77e5619..e79f843 100644
> --- a/common/env_embedded.c
> +++ b/common/env_embedded.c
> @@ -135,6 +135,12 @@ env_t environment __PPCENV__ = {
> #ifdef CONFIG_ETH3ADDR
> "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
> #endif
> +#ifdef CONFIG_ETH4ADDR
> + "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
> +#endif
> +#ifdef CONFIG_ETH5ADDR
> + "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
> +#endif
> #ifdef CONFIG_ETHPRIME
> "ethprime=" CONFIG_ETHPRIME "\0"
> #endif
Bleah! ...but I repeat myself.
Do we need eth[1-5]?addr env variables? I don't think so.
If we really do need them, they can be generated from the fdt blob a'la
Kumar's loop.
> diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c
> index 39bd9dc..3e3e1c8 100644
> --- a/cpu/mpc83xx/fdt.c
> +++ b/cpu/mpc83xx/fdt.c
> @@ -52,7 +52,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
> fdt_fixup_crypto_node(blob, 0x0204);
>
> #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\
> - defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3)
> + defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) ||\
> + defined(CONFIG_HAS_ETH4) || defined(CONFIG_HAS_ETH5)
Bleah! I counter-propose a single CONFIG_ETH_FDT. Alternatively, if
defined(CONFIG_HAS_ETH0), it is a good bet that you want to call
fdt_fixup_ethernet(blob); and *that* routine handles up all defined
ethernet spiggots (thanks, Kumar!).
> fdt_fixup_ethernet(blob);
> #endif
>
> diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
> index 344c649..e1dec5e 100644
> --- a/drivers/qe/uec.c
> +++ b/drivers/qe/uec.c
> @@ -123,8 +123,54 @@ static uec_info_t eth4_uec_info = {
> .enet_interface = CFG_UEC4_INTERFACE_MODE,
> };
> #endif
> +#ifdef CONFIG_UEC_ETH5
> +static uec_info_t eth5_uec_info = {
> + .uf_info = {
> + .ucc_num = CFG_UEC5_UCC_NUM,
> + .rx_clock = CFG_UEC5_RX_CLK,
> + .tx_clock = CFG_UEC5_TX_CLK,
> + .eth_type = CFG_UEC5_ETH_TYPE,
> + },
> +#if (CFG_UEC5_ETH_TYPE == FAST_ETH)
> + .num_threads_tx = UEC_NUM_OF_THREADS_1,
> + .num_threads_rx = UEC_NUM_OF_THREADS_1,
> +#else
> + .num_threads_tx = UEC_NUM_OF_THREADS_4,
> + .num_threads_rx = UEC_NUM_OF_THREADS_4,
> +#endif
> + .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .tx_bd_ring_len = 16,
> + .rx_bd_ring_len = 16,
> + .phy_address = CFG_UEC5_PHY_ADDR,
> + .enet_interface = CFG_UEC5_INTERFACE_MODE,
> +};
> +#endif
> +#ifdef CONFIG_UEC_ETH6
> +static uec_info_t eth6_uec_info = {
> + .uf_info = {
> + .ucc_num = CFG_UEC6_UCC_NUM,
> + .rx_clock = CFG_UEC6_RX_CLK,
> + .tx_clock = CFG_UEC6_TX_CLK,
> + .eth_type = CFG_UEC6_ETH_TYPE,
> + },
> +#if (CFG_UEC6_ETH_TYPE == FAST_ETH)
> + .num_threads_tx = UEC_NUM_OF_THREADS_1,
> + .num_threads_rx = UEC_NUM_OF_THREADS_1,
> +#else
> + .num_threads_tx = UEC_NUM_OF_THREADS_4,
> + .num_threads_rx = UEC_NUM_OF_THREADS_4,
> +#endif
> + .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .tx_bd_ring_len = 16,
> + .rx_bd_ring_len = 16,
> + .phy_address = CFG_UEC6_PHY_ADDR,
> + .enet_interface = CFG_UEC6_INTERFACE_MODE,
> +};
> +#endif
Is this in the fdt blob? If not, we should add it (possibly
coordinating with the kernel folks.
> -#define MAXCONTROLLERS (4)
> +#define MAXCONTROLLERS (6)
>
> static struct eth_device *devlist[MAXCONTROLLERS];
Hmmm, I don't have an clever answer for this one. Looks like we will
need a MAXCONTROLLERS to make our devlist[].
> diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h
> index 54ac01d..7451905 100644
> --- a/include/asm-ppc/u-boot.h
> +++ b/include/asm-ppc/u-boot.h
> @@ -111,6 +111,12 @@ typedef struct bd_info {
> #ifdef CONFIG_HAS_ETH3
> unsigned char bi_enet3addr[6];
> #endif
> +#ifdef CONFIG_HAS_ETH4
> + unsigned char bi_enet4addr[6];
> +#endif
> +#ifdef CONFIG_HAS_ETH5
> + unsigned char bi_enet5addr[6];
> +#endif
More evil. I would like to se the bd_info struct go away. Please check
if anybody really needs bi_enet[0-5]addr after looking into my
suggestions/objections above. If we cannot make bd_info go away, we
should be able to stop making it bigger.
[snipped remainder of the same]
Thanks,
gvb
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 20:25 ` richardretanubun
@ 2008-09-25 20:45 ` Kim Phillips
2008-09-25 22:08 ` Wolfgang Denk
2008-09-25 21:44 ` [U-Boot] [PATCH v2] " richardretanubun
1 sibling, 1 reply; 24+ messages in thread
From: Kim Phillips @ 2008-09-25 20:45 UTC (permalink / raw)
To: u-boot
On Thu, 25 Sep 2008 16:25:20 -0400
richardretanubun <richardretanubun@ruggedcom.com> wrote:
> Kim Phillips wrote:
>
> > On Thu, 25 Sep 2008 08:53:24 -0400
> > richardretanubun <richardretanubun@ruggedcom.com> wrote:
> >> ---
> >
> > ..i.e, here.
> >
> Understood, thanks for the clarification, will heed for future patches.
excellent, thanks.
> > Having said that, this patch does transcend 4 subsystem areas, so if
> > Ben/gvb/WD want to ack/sign off on it, I can handle pushing this
> > upstream.
> >
> Thanks for the help, I realize this touches many subsystems, but I figured I start at the 83xx community
> since (I think) it is the most probable community to find platforms with these many eth interfaces.
fyi, 85xx does too (and they even have more interface connections on
their boards).
> >> diff --git a/README b/README
> >> index ccd839c..8802304 100644
> >> --- a/README
> >> +++ b/README
> >> @@ -1095,8 +1095,11 @@ The following options need to be configured:
> >>
> >> - Ethernet address:
> >> CONFIG_ETHADDR
> >> + CONFIG_ETH1ADDR
> >> CONFIG_ETH2ADDR
> >
> > hmm..historically ETHADDR has been the implicit ETH1ADDR. Did you mean
> > to s/ETHADDR/ETH1ADDR/ ? if so, you'd need a better justification and
> > a much larger patch. Otherwise, please don't do this; add a
> > CONFIG_ETH6ADDR below instead.
> >
> I will add CONFIG_ETH6ADDR below.
wait, no, CONFIG_ETH1ADDR is indeed valid and being used. It's good
you're adding this to the documentation to not confuse people like
myself - ack! and no need to add ETH6ADDR below either.
> >> +++ b/common/cmd_bdinfo.c
> >> @@ -91,11 +91,12 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> >> print_str ("pevfreq", strmhz(buf, bd->bi_pevfreq));
> >> #endif
> >>
> >> +#if defined(CONFIG_HAS_ETH0)
> >> puts ("ethaddr =");
> >> for (i=0; i<6; ++i) {
> >> printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
> >> }
> >> -
> >> +#endif
> >
> > how is the above change relevant to the patch subject?
> Good catch, I lumped it together because I was in the code neighborhood
> got carried away in making the code uniform. I will pull it out of this patch.
>
> Is the idea of adding an #ifdef here valid though?
> If it is, I can submit a separate patch for it.
not sure; I seem to remember some code depending on its existence even
if the board didn't configure any interfaces, but, sure, send a patch
and I'm sure it'll get tested. I'm assuming none of this is for 2008.10
release, btw.
Kim
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v2] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 20:25 ` richardretanubun
2008-09-25 20:45 ` Kim Phillips
@ 2008-09-25 21:44 ` richardretanubun
2008-09-25 22:24 ` Wolfgang Denk
1 sibling, 1 reply; 24+ messages in thread
From: richardretanubun @ 2008-09-25 21:44 UTC (permalink / raw)
To: u-boot
Added for convenience for other platforms that uses MPC8360 (has eight UCC).
Six eth interface is chosen because the platform I am using combines
UCC1&2 and UCC3&4 as two gigEth and the other four UCC as 10/100 Eth.
Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
---
V2 of this patch adds CONFIG_ETH6ADDR to README and removes
#if defined(CONFIG_HAS_ETH0) from common/cmd_bdinfo.c
README | 3 ++
common/cmd_bdinfo.c | 14 +++++++++++++
common/env_common.c | 9 ++++++++
common/env_embedded.c | 9 ++++++++
cpu/mpc83xx/fdt.c | 3 +-
drivers/qe/uec.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
include/asm-ppc/u-boot.h | 6 +++++
lib_ppc/board.c | 30 ++++++++++++++++++++++++++++
net/eth.c | 6 +++++
tools/env/fw_env.c | 9 ++++++++
10 files changed, 135 insertions(+), 2 deletions(-)
diff --git a/README b/README
index ccd839c..d623037 100644
--- a/README
+++ b/README
@@ -1097,6 +1097,9 @@ The following options need to be configured:
CONFIG_ETHADDR
CONFIG_ETH2ADDR
CONFIG_ETH3ADDR
+ CONFIG_ETH4ADDR
+ CONFIG_ETH5ADDR
+ CONFIG_ETH6ADDR
Define a default value for Ethernet address to use
for the respective Ethernet interface, in case this
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index f4d9d40..5018930 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -117,6 +117,20 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
#endif
+#if defined(CONFIG_HAS_ETH4)
+ puts ("\neth4addr =");
+ for (i=0; i<6; ++i) {
+ printf ("%c%02X", i ? ':' : ' ', bd->bi_enet4addr[i]);
+ }
+#endif
+
+#if defined(CONFIG_HAS_ETH5)
+ puts ("\neth5addr =");
+ for (i=0; i<6; ++i) {
+ printf ("%c%02X", i ? ':' : ' ', bd->bi_enet5addr[i]);
+ }
+#endif
+
#ifdef CONFIG_HERMES
print_str ("ethspeed", strmhz(buf, bd->bi_ethspeed));
#endif
diff --git a/common/env_common.c b/common/env_common.c
index 77f9944..d536137 100644
--- a/common/env_common.c
+++ b/common/env_common.c
@@ -91,6 +91,15 @@ uchar default_environment[] = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH6ADDR
+ "eth6addr=" MK_STR(CONFIG_ETH6ADDR) "\0"
+#endif
#ifdef CONFIG_IPADDR
"ipaddr=" MK_STR(CONFIG_IPADDR) "\0"
#endif
diff --git a/common/env_embedded.c b/common/env_embedded.c
index 77e5619..4848bf1 100644
--- a/common/env_embedded.c
+++ b/common/env_embedded.c
@@ -135,6 +135,15 @@ env_t environment __PPCENV__ = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH6ADDR
+ "eth6addr=" MK_STR(CONFIG_ETH6ADDR) "\0"
+#endif
#ifdef CONFIG_ETHPRIME
"ethprime=" CONFIG_ETHPRIME "\0"
#endif
diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c
index 39bd9dc..3e3e1c8 100644
--- a/cpu/mpc83xx/fdt.c
+++ b/cpu/mpc83xx/fdt.c
@@ -52,7 +52,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
fdt_fixup_crypto_node(blob, 0x0204);
#if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\
- defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3)
+ defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) ||\
+ defined(CONFIG_HAS_ETH4) || defined(CONFIG_HAS_ETH5)
fdt_fixup_ethernet(blob);
#endif
diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
index 344c649..e1dec5e 100644
--- a/drivers/qe/uec.c
+++ b/drivers/qe/uec.c
@@ -123,8 +123,54 @@ static uec_info_t eth4_uec_info = {
.enet_interface = CFG_UEC4_INTERFACE_MODE,
};
#endif
+#ifdef CONFIG_UEC_ETH5
+static uec_info_t eth5_uec_info = {
+ .uf_info = {
+ .ucc_num = CFG_UEC5_UCC_NUM,
+ .rx_clock = CFG_UEC5_RX_CLK,
+ .tx_clock = CFG_UEC5_TX_CLK,
+ .eth_type = CFG_UEC5_ETH_TYPE,
+ },
+#if (CFG_UEC5_ETH_TYPE == FAST_ETH)
+ .num_threads_tx = UEC_NUM_OF_THREADS_1,
+ .num_threads_rx = UEC_NUM_OF_THREADS_1,
+#else
+ .num_threads_tx = UEC_NUM_OF_THREADS_4,
+ .num_threads_rx = UEC_NUM_OF_THREADS_4,
+#endif
+ .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .tx_bd_ring_len = 16,
+ .rx_bd_ring_len = 16,
+ .phy_address = CFG_UEC5_PHY_ADDR,
+ .enet_interface = CFG_UEC5_INTERFACE_MODE,
+};
+#endif
+#ifdef CONFIG_UEC_ETH6
+static uec_info_t eth6_uec_info = {
+ .uf_info = {
+ .ucc_num = CFG_UEC6_UCC_NUM,
+ .rx_clock = CFG_UEC6_RX_CLK,
+ .tx_clock = CFG_UEC6_TX_CLK,
+ .eth_type = CFG_UEC6_ETH_TYPE,
+ },
+#if (CFG_UEC6_ETH_TYPE == FAST_ETH)
+ .num_threads_tx = UEC_NUM_OF_THREADS_1,
+ .num_threads_rx = UEC_NUM_OF_THREADS_1,
+#else
+ .num_threads_tx = UEC_NUM_OF_THREADS_4,
+ .num_threads_rx = UEC_NUM_OF_THREADS_4,
+#endif
+ .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .tx_bd_ring_len = 16,
+ .rx_bd_ring_len = 16,
+ .phy_address = CFG_UEC6_PHY_ADDR,
+ .enet_interface = CFG_UEC6_INTERFACE_MODE,
+};
+#endif
-#define MAXCONTROLLERS (4)
+#define MAXCONTROLLERS (6)
static struct eth_device *devlist[MAXCONTROLLERS];
diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h
index 54ac01d..7451905 100644
--- a/include/asm-ppc/u-boot.h
+++ b/include/asm-ppc/u-boot.h
@@ -111,6 +111,12 @@ typedef struct bd_info {
#ifdef CONFIG_HAS_ETH3
unsigned char bi_enet3addr[6];
#endif
+#ifdef CONFIG_HAS_ETH4
+ unsigned char bi_enet4addr[6];
+#endif
+#ifdef CONFIG_HAS_ETH5
+ unsigned char bi_enet5addr[6];
+#endif
#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
defined(CONFIG_405EZ) || defined(CONFIG_440GX) || \
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index c02ac62..d440722 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -944,6 +944,36 @@ void board_init_r (gd_t *id, ulong dest_addr)
}
#endif
+#ifdef CONFIG_HAS_ETH4
+ /* handle 5th ethernet address */
+ s = getenv("eth4addr");
+#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
+ if (s == NULL)
+ board_get_enetaddr(bd->bi_enet4addr);
+ else
+#endif
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet4addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
+ if (s)
+ s = (*e) ? e + 1 : e;
+ }
+#endif
+
+#ifdef CONFIG_HAS_ETH5
+ /* handle 6th ethernet address */
+ s = getenv("eth5addr");
+#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
+ if (s == NULL)
+ board_get_enetaddr(bd->bi_enet5addr);
+ else
+#endif
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet5addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
+ if (s)
+ s = (*e) ? e + 1 : e;
+ }
+#endif
+
#if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \
defined(CONFIG_TQM8272) || \
defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \
diff --git a/net/eth.c b/net/eth.c
index 432dd60..ccd871a 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -180,6 +180,12 @@ int eth_initialize(bd_t *bis)
#if defined(CONFIG_UEC_ETH4)
uec_initialize(3);
#endif
+#if defined(CONFIG_UEC_ETH5)
+ uec_initialize(4);
+#endif
+#if defined(CONFIG_UEC_ETH6)
+ uec_initialize(5);
+#endif
#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
fec_initialize(bis);
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 46747d3..d41175f 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -157,6 +157,15 @@ static char default_environment[] = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR (CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR (CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR (CONFIG_ETH5ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH6ADDR
+ "eth6addr=" MK_STR (CONFIG_ETH6ADDR) "\0"
+#endif
#ifdef CONFIG_ETHPRIME
"ethprime=" CONFIG_ETHPRIME "\0"
#endif
--
1.5.5.GIT
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 20:45 ` Kim Phillips
@ 2008-09-25 22:08 ` Wolfgang Denk
0 siblings, 0 replies; 24+ messages in thread
From: Wolfgang Denk @ 2008-09-25 22:08 UTC (permalink / raw)
To: u-boot
Dear Kim Phillips,
In message <20080925154546.4ff2cae2.kim.phillips@freescale.com> you wrote:
>
> > >> - Ethernet address:
> > >> CONFIG_ETHADDR
> > >> + CONFIG_ETH1ADDR
> > >> CONFIG_ETH2ADDR
> > >
> > > hmm..historically ETHADDR has been the implicit ETH1ADDR. Did you mean
> > > to s/ETHADDR/ETH1ADDR/ ? if so, you'd need a better justification and
> > > a much larger patch. Otherwise, please don't do this; add a
> > > CONFIG_ETH6ADDR below instead.
No, numbering starts at 0 and matches Linux interface names.
CONFIG_ETHADDR => "ethaddr" => "eth0"
CONFIG_ETH1ADDR => "eth1addr" => "eth1"
...
CONFIG_ETHNADDR => "ethNaddr" => "ethN"
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
For those who like this sort of thing, this is the sort of thing they
like. - Abraham Lincoln
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 20:42 ` Jerry Van Baren
@ 2008-09-25 22:17 ` Wolfgang Denk
0 siblings, 0 replies; 24+ messages in thread
From: Wolfgang Denk @ 2008-09-25 22:17 UTC (permalink / raw)
To: u-boot
Dear Jerry Van Baren,
In message <48DBF7A9.3010905@ge.com> you wrote:
>
> Kumar solved this problem WRT cpu/mpc83xx/fdt.c fdt_fixup_ethernet(void
> *fdt) (and other CPUs) by using the device tree to find all the
> ethernets and configure them.
> <http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/45554>
But Kumar's code still loops over the "eth[N]addr" environment
variables. And even though discouraged for normal use, there should
be a way to define these for the (compiled-in) default environment
where needed (devices using a real ROM).
> Suggestion: Look at changing CONFIG_ETH*ADDR to CONFIG_ETH_FDT where
> that notation indicates the code should find the ethernet info in the
> fdt blob rather than #defines/env variables.
Please have a look at fdt_fixup_ethernet() in "common/fdt_support.c";
my reading of the code does not match your statements here.
> Do we need eth[1-5]?addr env variables? I don't think so.
Yes, we do. That's what fdt_fixup_ethernet() uses to loop.
> If we really do need them, they can be generated from the fdt blob a'la
> Kumar's loop.
Either you or I must be missing something.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Nobody trips over mountains. It is the small pebble that causes you
to stumble. Pass all the pebbles in your path and you will find you
have crossed the mountain.
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 19:50 ` Kim Phillips
2008-09-25 20:25 ` richardretanubun
@ 2008-09-25 22:24 ` Wolfgang Denk
1 sibling, 0 replies; 24+ messages in thread
From: Wolfgang Denk @ 2008-09-25 22:24 UTC (permalink / raw)
To: u-boot
Dear Kim Phillips,
In message <20080925145035.cebab0df.kim.phillips@freescale.com> you wrote:
>
> > - Ethernet address:
> > CONFIG_ETHADDR
> > + CONFIG_ETH1ADDR
> > CONFIG_ETH2ADDR
>
> hmm..historically ETHADDR has been the implicit ETH1ADDR. Did you mean
No. ETHADDR is ETH0ADDR
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Suffocating together ... would create heroic camaraderie.
-- Khan Noonian Singh, "Space Seed", stardate 3142.8
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v2] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 21:44 ` [U-Boot] [PATCH v2] " richardretanubun
@ 2008-09-25 22:24 ` Wolfgang Denk
2008-09-25 22:52 ` richardretanubun
0 siblings, 1 reply; 24+ messages in thread
From: Wolfgang Denk @ 2008-09-25 22:24 UTC (permalink / raw)
To: u-boot
Dear richardretanubun,
In message <48DC0652.5030409@ruggedcom.com> you wrote:
>
> +++ b/README
> @@ -1097,6 +1097,9 @@ The following options need to be configured:
> CONFIG_ETHADDR
> CONFIG_ETH2ADDR
> CONFIG_ETH3ADDR
> + CONFIG_ETH4ADDR
> + CONFIG_ETH5ADDR
> + CONFIG_ETH6ADDR
Sorry, but I still don't get why CONFIG_ETH1ADDR isn't there?
This will make the loop in fdt_fixup_ethernet() terminate unexpectedly
early.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Men don't talk peace unless they're ready to back it up with war.
-- Col. Green, "The Savage Curtain", stardate 5906.4
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v2] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 22:24 ` Wolfgang Denk
@ 2008-09-25 22:52 ` richardretanubun
2008-09-25 23:28 ` Wolfgang Denk
0 siblings, 1 reply; 24+ messages in thread
From: richardretanubun @ 2008-09-25 22:52 UTC (permalink / raw)
To: u-boot
Wolfgang Denk wrote:
> Dear richardretanubun,
>
> In message <48DC0652.5030409@ruggedcom.com> you wrote:
>> +++ b/README
>> @@ -1097,6 +1097,9 @@ The following options need to be configured:
>> CONFIG_ETHADDR
>> CONFIG_ETH2ADDR
>> CONFIG_ETH3ADDR
>> + CONFIG_ETH4ADDR
>> + CONFIG_ETH5ADDR
>> + CONFIG_ETH6ADDR
>
> Sorry, but I still don't get why CONFIG_ETH1ADDR isn't there?
>
> This will make the loop in fdt_fixup_ethernet() terminate unexpectedly
> early.
>
Sorry Wolfgang, the V2 is sent before I red Kim's !ack
about the comments on CONFIG_ETH1ADDR being the implicit CONFIG_ETHADDR (which is not true)
Please disregard V2. V1 is correct, except for this change:
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
>> index f4d9d40..67cc64f 100644
>> --- a/common/cmd_bdinfo.c
>> +++ b/common/cmd_bdinfo.c
>> @@ -91,11 +91,12 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>> print_str ("pevfreq", strmhz(buf, bd->bi_pevfreq));
>> #endif
>>
>> +#if defined(CONFIG_HAS_ETH0)
>> puts ("ethaddr =");
>> for (i=0; i<6; ++i) {
>> printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
>> }
>> -
>> +#endif
>
>[KP] how is the above change relevant to the patch subject?
[RR] Good catch, I lumped it together because I was in the code neighborhood
and got carried away in making the code uniform. I will pull it out of this patch.
- Richard
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v2] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 22:52 ` richardretanubun
@ 2008-09-25 23:28 ` Wolfgang Denk
2008-09-29 12:43 ` richardretanubun
0 siblings, 1 reply; 24+ messages in thread
From: Wolfgang Denk @ 2008-09-25 23:28 UTC (permalink / raw)
To: u-boot
Dear richardretanubun,
In message <48DC1637.5000707@ruggedcom.com> you wrote:
>
> Please disregard V2. V1 is correct, except for this change:
So you will submit a V3?
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Roses are red
Violets are blue
Some poems rhyme
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 12:53 [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx richardretanubun
2008-09-25 19:50 ` Kim Phillips
2008-09-25 20:42 ` Jerry Van Baren
@ 2008-09-26 3:44 ` Jerry Van Baren
2008-09-26 5:46 ` Wolfgang Denk
2008-09-26 7:21 ` Ben Warren
2 siblings, 2 replies; 24+ messages in thread
From: Jerry Van Baren @ 2008-09-26 3:44 UTC (permalink / raw)
To: u-boot
OK, critique v2 (thanks to Wolfgang calling BS on my previous critique :-).
richardretanubun wrote:
> Added for convenience for other platforms that uses MPC8360 (has 8 UCC).
> 6 eth interface is chosen because the platform I am using combines
> UCC1&2 and UCC3&4 as gigEth and the other 4 UCC as 10/100 Eth.
[snip]
> diff --git a/README b/README
> index ccd839c..8802304 100644
> --- a/README
> +++ b/README
> @@ -1095,8 +1095,11 @@ The following options need to be configured:
>
> - Ethernet address:
> CONFIG_ETHADDR
> + CONFIG_ETH1ADDR
> CONFIG_ETH2ADDR
> CONFIG_ETH3ADDR
> + CONFIG_ETH4ADDR
> + CONFIG_ETH5ADDR
>
> Define a default value for Ethernet address to use
> for the respective Ethernet interface, in case this
OK, the above is unavoidable unless...
A more major change but conceptually slick alternative would be a (weak)
function generating appropriate MAC addresses since on most/all boards
the MAC addresses of the etherspiggots are mathematically related. The
generation function would use MAXCONTROLLERS (CONFIG_NUM_ETH?) to
generate the appropriate number of MAC address env variables.
> diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
> index f4d9d40..67cc64f 100644
> --- a/common/cmd_bdinfo.c
> +++ b/common/cmd_bdinfo.c
> @@ -91,11 +91,12 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> print_str ("pevfreq", strmhz(buf, bd->bi_pevfreq));
> #endif
>
> +#if defined(CONFIG_HAS_ETH0)
> puts ("ethaddr =");
> for (i=0; i<6; ++i) {
> printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
> }
> -
> +#endif
> #if defined(CONFIG_HAS_ETH1)
> puts ("\neth1addr =");
> for (i=0; i<6; ++i) {
> @@ -117,6 +118,20 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> }
> #endif
>
> +#if defined(CONFIG_HAS_ETH4)
> + puts ("\neth4addr =");
> + for (i=0; i<6; ++i) {
> + printf ("%c%02X", i ? ':' : ' ', bd->bi_enet4addr[i]);
> + }
> +#endif
> +
> +#if defined(CONFIG_HAS_ETH5)
> + puts ("\neth5addr =");
> + for (i=0; i<6; ++i) {
> + printf ("%c%02X", i ? ':' : ' ', bd->bi_enet5addr[i]);
> + }
> +#endif
> +
Here is where a modification Kumar's loop (I would loop over
/aliases/ethernet[N] instead of the env variables) would cut out 5
copies of the same code and would scale infinitely. Hmmm, we have
MAXCONTROLLERS (CONFIG_NUM_ETH?) to tell us how many etherspiggots we
have, can we loop on that?
I would also *strongly* prefer eliminating bd->bi_enet[N]addr variables,
are they needed at all in a fdt-enabled system? Are there any other
places that bd->bi_enet[N]addr is used? If the only use is here, to
print out the MAC addresses, we can do Kumar's loop and print the env
variables directly instead of converting the env variable to
bd->enet[N]addr and then back into ASCII. Bleah.
> diff --git a/common/env_common.c b/common/env_common.c
> index 77f9944..0fee3af 100644
> --- a/common/env_common.c
> +++ b/common/env_common.c
> @@ -91,6 +91,12 @@ uchar default_environment[] = {
> #ifdef CONFIG_ETH3ADDR
> "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
> #endif
> +#ifdef CONFIG_ETH4ADDR
> + "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
> +#endif
> +#ifdef CONFIG_ETH5ADDR
> + "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
> +#endif
> #ifdef CONFIG_IPADDR
> "ipaddr=" MK_STR(CONFIG_IPADDR) "\0"
> #endif
> diff --git a/common/env_embedded.c b/common/env_embedded.c
> index 77e5619..e79f843 100644
> --- a/common/env_embedded.c
> +++ b/common/env_embedded.c
> @@ -135,6 +135,12 @@ env_t environment __PPCENV__ = {
> #ifdef CONFIG_ETH3ADDR
> "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
> #endif
> +#ifdef CONFIG_ETH4ADDR
> + "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
> +#endif
> +#ifdef CONFIG_ETH5ADDR
> + "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
> +#endif
> #ifdef CONFIG_ETHPRIME
> "ethprime=" CONFIG_ETHPRIME "\0"
> #endif
OK, the above is unavoidable unless we use a function to generate the
sequence of MAC addresses. (Caution: undeveloped concept.)
> diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c
> index 39bd9dc..3e3e1c8 100644
> --- a/cpu/mpc83xx/fdt.c
> +++ b/cpu/mpc83xx/fdt.c
> @@ -52,7 +52,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
> fdt_fixup_crypto_node(blob, 0x0204);
>
> #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\
> - defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3)
> + defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) ||\
> + defined(CONFIG_HAS_ETH4) || defined(CONFIG_HAS_ETH5)
> fdt_fixup_ethernet(blob);
> #endif
This is horrible. We should use CONFIG_HAS_MANY_ETH or something like
that. Maybe we can create CONFIG_NUM_ETH and #define it to be the
number of etherspiggots we have (replacing MAXCONTROLLERS - not a good
name if it ends up being more widely visible).
> diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
> index 344c649..e1dec5e 100644
> --- a/drivers/qe/uec.c
> +++ b/drivers/qe/uec.c
> @@ -123,8 +123,54 @@ static uec_info_t eth4_uec_info = {
> .enet_interface = CFG_UEC4_INTERFACE_MODE,
> };
> #endif
> +#ifdef CONFIG_UEC_ETH5
> +static uec_info_t eth5_uec_info = {
> + .uf_info = {
> + .ucc_num = CFG_UEC5_UCC_NUM,
> + .rx_clock = CFG_UEC5_RX_CLK,
> + .tx_clock = CFG_UEC5_TX_CLK,
> + .eth_type = CFG_UEC5_ETH_TYPE,
> + },
> +#if (CFG_UEC5_ETH_TYPE == FAST_ETH)
> + .num_threads_tx = UEC_NUM_OF_THREADS_1,
> + .num_threads_rx = UEC_NUM_OF_THREADS_1,
> +#else
> + .num_threads_tx = UEC_NUM_OF_THREADS_4,
> + .num_threads_rx = UEC_NUM_OF_THREADS_4,
> +#endif
> + .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .tx_bd_ring_len = 16,
> + .rx_bd_ring_len = 16,
> + .phy_address = CFG_UEC5_PHY_ADDR,
> + .enet_interface = CFG_UEC5_INTERFACE_MODE,
> +};
> +#endif
> +#ifdef CONFIG_UEC_ETH6
> +static uec_info_t eth6_uec_info = {
> + .uf_info = {
> + .ucc_num = CFG_UEC6_UCC_NUM,
> + .rx_clock = CFG_UEC6_RX_CLK,
> + .tx_clock = CFG_UEC6_TX_CLK,
> + .eth_type = CFG_UEC6_ETH_TYPE,
> + },
> +#if (CFG_UEC6_ETH_TYPE == FAST_ETH)
> + .num_threads_tx = UEC_NUM_OF_THREADS_1,
> + .num_threads_rx = UEC_NUM_OF_THREADS_1,
> +#else
> + .num_threads_tx = UEC_NUM_OF_THREADS_4,
> + .num_threads_rx = UEC_NUM_OF_THREADS_4,
> +#endif
> + .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
> + .tx_bd_ring_len = 16,
> + .rx_bd_ring_len = 16,
> + .phy_address = CFG_UEC6_PHY_ADDR,
> + .enet_interface = CFG_UEC6_INTERFACE_MODE,
> +};
> +#endif
Here I think my previous observation is still applicable: Is this
information in the fdt blob? If not, we should add it (possibly
coordinating with the kernel folks.
> -#define MAXCONTROLLERS (4)
> +#define MAXCONTROLLERS (6)
CONFIG_NUM_ETH? (see above for discussion)
> static struct eth_device *devlist[MAXCONTROLLERS];
>
> diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h
> index 54ac01d..7451905 100644
> --- a/include/asm-ppc/u-boot.h
> +++ b/include/asm-ppc/u-boot.h
> @@ -111,6 +111,12 @@ typedef struct bd_info {
> #ifdef CONFIG_HAS_ETH3
> unsigned char bi_enet3addr[6];
> #endif
> +#ifdef CONFIG_HAS_ETH4
> + unsigned char bi_enet4addr[6];
> +#endif
> +#ifdef CONFIG_HAS_ETH5
> + unsigned char bi_enet5addr[6];
> +#endif
Bleah. I would like to see the bd_info struct go away. Please check
if anybody really needs bi_enet[0-5]addr after looking into my
suggestions/objections above. If we cannot make bd_info go away, we
should at least be able to stop making it bigger.
> diff --git a/lib_ppc/board.c b/lib_ppc/board.c
> index c02ac62..d440722 100644
> --- a/lib_ppc/board.c
> +++ b/lib_ppc/board.c
> @@ -944,6 +944,36 @@ void board_init_r (gd_t *id, ulong dest_addr)
> }
> #endif
>
> +#ifdef CONFIG_HAS_ETH4
> + /* handle 5th ethernet address */
> + s = getenv("eth4addr");
> +#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
> + if (s == NULL)
> + board_get_enetaddr(bd->bi_enet4addr);
> + else
> +#endif
> + for (i = 0; i < 6; ++i) {
> + bd->bi_enet4addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
> + if (s)
> + s = (*e) ? e + 1 : e;
> + }
> +#endif
This is a different version of the repetitive code I complain about
above (common/cmd_bdinfo.c). I would like to see a variant of Kumar's
loop instead of the #if defined() explosion.
[snip duplicate but with different [N] code]
> diff --git a/net/eth.c b/net/eth.c
> index 432dd60..ccd871a 100644
> --- a/net/eth.c
> +++ b/net/eth.c
> @@ -180,6 +180,12 @@ int eth_initialize(bd_t *bis)
> #if defined(CONFIG_UEC_ETH4)
> uec_initialize(3);
> #endif
> +#if defined(CONFIG_UEC_ETH5)
> + uec_initialize(4);
> +#endif
> +#if defined(CONFIG_UEC_ETH6)
> + uec_initialize(5);
> +#endif
My kingdom for a loop!
> #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
> fec_initialize(bis);
> diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
> index 46747d3..6e9c34f 100644
> --- a/tools/env/fw_env.c
> +++ b/tools/env/fw_env.c
> @@ -157,6 +157,12 @@ static char default_environment[] = {
> #ifdef CONFIG_ETH3ADDR
> "eth3addr=" MK_STR (CONFIG_ETH3ADDR) "\0"
> #endif
> +#ifdef CONFIG_ETH4ADDR
> + "eth4addr=" MK_STR (CONFIG_ETH4ADDR) "\0"
> +#endif
> +#ifdef CONFIG_ETH5ADDR
> + "eth5addr=" MK_STR (CONFIG_ETH5ADDR) "\0"
> +#endif
> #ifdef CONFIG_ETHPRIME
> "ethprime=" CONFIG_ETHPRIME "\0"
> #endif
Curmudgeonly yours,
gvb
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-26 3:44 ` Jerry Van Baren
@ 2008-09-26 5:46 ` Wolfgang Denk
2008-09-26 7:21 ` Ben Warren
1 sibling, 0 replies; 24+ messages in thread
From: Wolfgang Denk @ 2008-09-26 5:46 UTC (permalink / raw)
To: u-boot
Dear Jerry Van Baren,
In message <48DC5A97.20305@gmail.com> you wrote:
>
> Here is where a modification Kumar's loop (I would loop over
> /aliases/ethernet[N] instead of the env variables) would cut out 5
> copies of the same code and would scale infinitely. Hmmm, we have
> MAXCONTROLLERS (CONFIG_NUM_ETH?) to tell us how many etherspiggots we
> have, can we loop on that?
>
> I would also *strongly* prefer eliminating bd->bi_enet[N]addr variables,
> are they needed at all in a fdt-enabled system? Are there any other
> places that bd->bi_enet[N]addr is used? If the only use is here, to
> print out the MAC addresses, we can do Kumar's loop and print the env
> variables directly instead of converting the env variable to
> bd->enet[N]addr and then back into ASCII. Bleah.
There are fdt-less systems around, and will be, at least for a looong
time.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
How can you tell when sour cream goes bad?
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx
2008-09-26 3:44 ` Jerry Van Baren
2008-09-26 5:46 ` Wolfgang Denk
@ 2008-09-26 7:21 ` Ben Warren
1 sibling, 0 replies; 24+ messages in thread
From: Ben Warren @ 2008-09-26 7:21 UTC (permalink / raw)
To: u-boot
Jerry Van Baren wrote:
> OK, critique v2 (thanks to Wolfgang calling BS on my previous critique :-).
>
> richardretanubun wrote:
>
>> Added for convenience for other platforms that uses MPC8360 (has 8 UCC).
>> 6 eth interface is chosen because the platform I am using combines
>> UCC1&2 and UCC3&4 as gigEth and the other 4 UCC as 10/100 Eth.
>>
>
> [snip]
>
>
>> diff --git a/README b/README
>> index ccd839c..8802304 100644
>> --- a/README
>> +++ b/README
>> @@ -1095,8 +1095,11 @@ The following options need to be configured:
>>
>> - Ethernet address:
>> CONFIG_ETHADDR
>> + CONFIG_ETH1ADDR
>> CONFIG_ETH2ADDR
>> CONFIG_ETH3ADDR
>> + CONFIG_ETH4ADDR
>> + CONFIG_ETH5ADDR
>>
>> Define a default value for Ethernet address to use
>> for the respective Ethernet interface, in case this
>>
>
> OK, the above is unavoidable unless...
>
> A more major change but conceptually slick alternative would be a (weak)
> function generating appropriate MAC addresses since on most/all boards
> the MAC addresses of the etherspiggots are mathematically related. The
> generation function would use MAXCONTROLLERS (CONFIG_NUM_ETH?) to
> generate the appropriate number of MAC address env variables.
>
>
Maybe most/all of the boards worked on by gvb, but I sure wouldn't want
to generalize much beyond that. In my case, boards usually have one or
more public ports, requiring registered addresses. These would probably
be sequential. The other ports usually have private MAC addresses based
on uniquish things like board serial numbers. And I'm sure there are
lots of other schemes out there.
>> diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
>> index f4d9d40..67cc64f 100644
>> --- a/common/cmd_bdinfo.c
>> +++ b/common/cmd_bdinfo.c
>> @@ -91,11 +91,12 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>> print_str ("pevfreq", strmhz(buf, bd->bi_pevfreq));
>> #endif
>>
>> +#if defined(CONFIG_HAS_ETH0)
>> puts ("ethaddr =");
>> for (i=0; i<6; ++i) {
>> printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
>> }
>> -
>> +#endif
>> #if defined(CONFIG_HAS_ETH1)
>> puts ("\neth1addr =");
>> for (i=0; i<6; ++i) {
>> @@ -117,6 +118,20 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>> }
>> #endif
>>
>> +#if defined(CONFIG_HAS_ETH4)
>> + puts ("\neth4addr =");
>> + for (i=0; i<6; ++i) {
>> + printf ("%c%02X", i ? ':' : ' ', bd->bi_enet4addr[i]);
>> + }
>> +#endif
>> +
>> +#if defined(CONFIG_HAS_ETH5)
>> + puts ("\neth5addr =");
>> + for (i=0; i<6; ++i) {
>> + printf ("%c%02X", i ? ':' : ' ', bd->bi_enet5addr[i]);
>> + }
>> +#endif
>> +
>>
>
> Here is where a modification Kumar's loop (I would loop over
> /aliases/ethernet[N] instead of the env variables) would cut out 5
> copies of the same code and would scale infinitely. Hmmm, we have
> MAXCONTROLLERS (CONFIG_NUM_ETH?) to tell us how many etherspiggots we
> have, can we loop on that?
>
> I would also *strongly* prefer eliminating bd->bi_enet[N]addr variables,
> are they needed at all in a fdt-enabled system? Are there any other
> places that bd->bi_enet[N]addr is used? If the only use is here, to
> print out the MAC addresses, we can do Kumar's loop and print the env
> variables directly instead of converting the env variable to
> bd->enet[N]addr and then back into ASCII. Bleah.
>
>
Let's try to back away from fdt for a minute. I know this particular
controller is PowerPC and so fdt is relevant, but the concept of having
oodles of network ports is hardly PowerPC-specific and so we need to
think in more general terms.
>> diff --git a/common/env_common.c b/common/env_common.c
>> index 77f9944..0fee3af 100644
>> --- a/common/env_common.c
>> +++ b/common/env_common.c
>> @@ -91,6 +91,12 @@ uchar default_environment[] = {
>> #ifdef CONFIG_ETH3ADDR
>> "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
>> #endif
>> +#ifdef CONFIG_ETH4ADDR
>> + "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
>> +#endif
>> +#ifdef CONFIG_ETH5ADDR
>> + "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
>> +#endif
>> #ifdef CONFIG_IPADDR
>> "ipaddr=" MK_STR(CONFIG_IPADDR) "\0"
>> #endif
>> diff --git a/common/env_embedded.c b/common/env_embedded.c
>> index 77e5619..e79f843 100644
>> --- a/common/env_embedded.c
>> +++ b/common/env_embedded.c
>> @@ -135,6 +135,12 @@ env_t environment __PPCENV__ = {
>> #ifdef CONFIG_ETH3ADDR
>> "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
>> #endif
>> +#ifdef CONFIG_ETH4ADDR
>> + "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
>> +#endif
>> +#ifdef CONFIG_ETH5ADDR
>> + "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
>> +#endif
>> #ifdef CONFIG_ETHPRIME
>> "ethprime=" CONFIG_ETHPRIME "\0"
>> #endif
>>
>
> OK, the above is unavoidable unless we use a function to generate the
> sequence of MAC addresses. (Caution: undeveloped concept.)
>
>
Since we don't allow anyone to define CONFIG_ETHxADDR in board configs,
do they really need to exist at all? Sorry, this comment isn't related
to this particular code snippet, but my fingers won't stop moving.
>> diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c
>> index 39bd9dc..3e3e1c8 100644
>> --- a/cpu/mpc83xx/fdt.c
>> +++ b/cpu/mpc83xx/fdt.c
>> @@ -52,7 +52,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
>> fdt_fixup_crypto_node(blob, 0x0204);
>>
>> #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\
>> - defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3)
>> + defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) ||\
>> + defined(CONFIG_HAS_ETH4) || defined(CONFIG_HAS_ETH5)
>> fdt_fixup_ethernet(blob);
>> #endif
>>
>
> This is horrible. We should use CONFIG_HAS_MANY_ETH or something like
> that. Maybe we can create CONFIG_NUM_ETH and #define it to be the
> number of etherspiggots we have (replacing MAXCONTROLLERS - not a good
> name if it ends up being more widely visible).
>
>
How about creating a bitmap of present controllers. e.g.
<some header file>
#define ETH0 1<<0
#define ETH1 1<<1
#define ETH2 1<<2
...
<board config file>
#define ETH_PRESENT (ETH0 | ETH2)
and then you check for non-zero or count the bits. It doesn't scale
well, as we found with CMDs, but 32 for now seems pretty big.
>> diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
>> index 344c649..e1dec5e 100644
>> --- a/drivers/qe/uec.c
>> +++ b/drivers/qe/uec.c
>> @@ -123,8 +123,54 @@ static uec_info_t eth4_uec_info = {
>> .enet_interface = CFG_UEC4_INTERFACE_MODE,
>> };
>> #endif
>> +#ifdef CONFIG_UEC_ETH5
>> +static uec_info_t eth5_uec_info = {
>> + .uf_info = {
>> + .ucc_num = CFG_UEC5_UCC_NUM,
>> + .rx_clock = CFG_UEC5_RX_CLK,
>> + .tx_clock = CFG_UEC5_TX_CLK,
>> + .eth_type = CFG_UEC5_ETH_TYPE,
>> + },
>> +#if (CFG_UEC5_ETH_TYPE == FAST_ETH)
>> + .num_threads_tx = UEC_NUM_OF_THREADS_1,
>> + .num_threads_rx = UEC_NUM_OF_THREADS_1,
>> +#else
>> + .num_threads_tx = UEC_NUM_OF_THREADS_4,
>> + .num_threads_rx = UEC_NUM_OF_THREADS_4,
>> +#endif
>> + .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
>> + .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
>> + .tx_bd_ring_len = 16,
>> + .rx_bd_ring_len = 16,
>> + .phy_address = CFG_UEC5_PHY_ADDR,
>> + .enet_interface = CFG_UEC5_INTERFACE_MODE,
>> +};
>> +#endif
>> +#ifdef CONFIG_UEC_ETH6
>> +static uec_info_t eth6_uec_info = {
>> + .uf_info = {
>> + .ucc_num = CFG_UEC6_UCC_NUM,
>> + .rx_clock = CFG_UEC6_RX_CLK,
>> + .tx_clock = CFG_UEC6_TX_CLK,
>> + .eth_type = CFG_UEC6_ETH_TYPE,
>> + },
>> +#if (CFG_UEC6_ETH_TYPE == FAST_ETH)
>> + .num_threads_tx = UEC_NUM_OF_THREADS_1,
>> + .num_threads_rx = UEC_NUM_OF_THREADS_1,
>> +#else
>> + .num_threads_tx = UEC_NUM_OF_THREADS_4,
>> + .num_threads_rx = UEC_NUM_OF_THREADS_4,
>> +#endif
>> + .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
>> + .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
>> + .tx_bd_ring_len = 16,
>> + .rx_bd_ring_len = 16,
>> + .phy_address = CFG_UEC6_PHY_ADDR,
>> + .enet_interface = CFG_UEC6_INTERFACE_MODE,
>> +};
>> +#endif
>>
>
> Here I think my previous observation is still applicable: Is this
> information in the fdt blob? If not, we should add it (possibly
> coordinating with the kernel folks.
>
>
>> -#define MAXCONTROLLERS (4)
>> +#define MAXCONTROLLERS (6)
>>
>
> CONFIG_NUM_ETH? (see above for discussion)
>
>
>> static struct eth_device *devlist[MAXCONTROLLERS];
>>
>> diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h
>> index 54ac01d..7451905 100644
>> --- a/include/asm-ppc/u-boot.h
>> +++ b/include/asm-ppc/u-boot.h
>> @@ -111,6 +111,12 @@ typedef struct bd_info {
>> #ifdef CONFIG_HAS_ETH3
>> unsigned char bi_enet3addr[6];
>> #endif
>> +#ifdef CONFIG_HAS_ETH4
>> + unsigned char bi_enet4addr[6];
>> +#endif
>> +#ifdef CONFIG_HAS_ETH5
>> + unsigned char bi_enet5addr[6];
>> +#endif
>>
>
> Bleah. I would like to see the bd_info struct go away. Please check
> if anybody really needs bi_enet[0-5]addr after looking into my
> suggestions/objections above. If we cannot make bd_info go away, we
> should at least be able to stop making it bigger.
>
>
It is becoming less and less relevant, but I expect strong resistance...
>> diff --git a/lib_ppc/board.c b/lib_ppc/board.c
>> index c02ac62..d440722 100644
>> --- a/lib_ppc/board.c
>> +++ b/lib_ppc/board.c
>> @@ -944,6 +944,36 @@ void board_init_r (gd_t *id, ulong dest_addr)
>> }
>> #endif
>>
>> +#ifdef CONFIG_HAS_ETH4
>> + /* handle 5th ethernet address */
>> + s = getenv("eth4addr");
>> +#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
>> + if (s == NULL)
>> + board_get_enetaddr(bd->bi_enet4addr);
>> + else
>> +#endif
>> + for (i = 0; i < 6; ++i) {
>> + bd->bi_enet4addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
>> + if (s)
>> + s = (*e) ? e + 1 : e;
>> + }
>> +#endif
>>
>
> This is a different version of the repetitive code I complain about
> above (common/cmd_bdinfo.c). I would like to see a variant of Kumar's
> loop instead of the #if defined() explosion.
>
> [snip duplicate but with different [N] code]
>
>
>> diff --git a/net/eth.c b/net/eth.c
>> index 432dd60..ccd871a 100644
>> --- a/net/eth.c
>> +++ b/net/eth.c
>> @@ -180,6 +180,12 @@ int eth_initialize(bd_t *bis)
>> #if defined(CONFIG_UEC_ETH4)
>> uec_initialize(3);
>> #endif
>> +#if defined(CONFIG_UEC_ETH5)
>> + uec_initialize(4);
>> +#endif
>> +#if defined(CONFIG_UEC_ETH6)
>> + uec_initialize(5);
>> +#endif
>>
>
> My kingdom for a loop!
>
>
Don't worry, this will be gone soon.
>> #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
>> fec_initialize(bis);
>> diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
>> index 46747d3..6e9c34f 100644
>> --- a/tools/env/fw_env.c
>> +++ b/tools/env/fw_env.c
>> @@ -157,6 +157,12 @@ static char default_environment[] = {
>> #ifdef CONFIG_ETH3ADDR
>> "eth3addr=" MK_STR (CONFIG_ETH3ADDR) "\0"
>> #endif
>> +#ifdef CONFIG_ETH4ADDR
>> + "eth4addr=" MK_STR (CONFIG_ETH4ADDR) "\0"
>> +#endif
>> +#ifdef CONFIG_ETH5ADDR
>> + "eth5addr=" MK_STR (CONFIG_ETH5ADDR) "\0"
>> +#endif
>> #ifdef CONFIG_ETHPRIME
>> "ethprime=" CONFIG_ETHPRIME "\0"
>> #endif
>>
>
> Curmudgeonly yours,
> gvb
cheers,
Ben
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v2] [83xx] Adds two more ethernet interface to 83xx
2008-09-25 23:28 ` Wolfgang Denk
@ 2008-09-29 12:43 ` richardretanubun
2008-09-29 13:07 ` Jerry Van Baren
0 siblings, 1 reply; 24+ messages in thread
From: richardretanubun @ 2008-09-29 12:43 UTC (permalink / raw)
To: u-boot
Wolfgang Denk wrote:
> Dear richardretanubun,
>
> In message <48DC1637.5000707@ruggedcom.com> you wrote:
>> Please disregard V2. V1 is correct, except for this change:
>
> So you will submit a V3?
I am not so sure about it.
This patch came to be when I wanted to make it convenient for using u-boot to test a platform
with six eth interface without the need of an fdt.
However, I seem to have sparked a discussion of a larger scope than I expected. :)
Everyone's comment seems to indicate that streamlining is needed for the network code.
I'd hate to muck the existing code some more with more copy-paste just for convenience's sake.
However, if you are ok with V3 being "V1 minus the common/cmd_bdinfo.c #if defined(CONFIG_HAS_ETH0) hunk"
then I can post this version.
>
> Best regards,
>
> Wolfgang Denk
>
>
Cheers,
- Richard
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v2] [83xx] Adds two more ethernet interface to 83xx
2008-09-29 12:43 ` richardretanubun
@ 2008-09-29 13:07 ` Jerry Van Baren
2008-09-29 22:28 ` [U-Boot] [PATCH v3] " richardretanubun
0 siblings, 1 reply; 24+ messages in thread
From: Jerry Van Baren @ 2008-09-29 13:07 UTC (permalink / raw)
To: u-boot
Hi Richard & Wolfgang,
richardretanubun wrote:
> Wolfgang Denk wrote:
>
>> Dear richardretanubun,
>>
>> In message <48DC1637.5000707@ruggedcom.com> you wrote:
>>> Please disregard V2. V1 is correct, except for this change:
>> So you will submit a V3?
> I am not so sure about it.
>
> This patch came to be when I wanted to make it convenient for using
> u-boot to test a platform with six eth interface without the need of
> an fdt.
>
> However, I seem to have sparked a discussion of a larger scope than I
> expected. :)
>
> Everyone's comment seems to indicate that streamlining is needed for
> the network code.
>
> I'd hate to muck the existing code some more with more copy-paste
> just for convenience's sake.
I was the most vocal "everybody", but my counterproposal thoughts were
poorly developed. Until I or someone else has (takes) the time to
develop a viable alternative, I don't have any problem with your current
solution.
When the next sucker tries to extend from six to eight ethernets, maybe
we will develop a scalable alternative that is viable. :-/
[snip]
> Cheers,
> - Richard
Thanks,
gvb
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v3] [83xx] Adds two more ethernet interface to 83xx
2008-09-29 13:07 ` Jerry Van Baren
@ 2008-09-29 22:28 ` richardretanubun
2008-09-30 16:00 ` Kim Phillips
2008-10-06 5:12 ` Ben Warren
0 siblings, 2 replies; 24+ messages in thread
From: richardretanubun @ 2008-09-29 22:28 UTC (permalink / raw)
To: u-boot
Added as a convenience for other platforms that uses MPC8360 (has 8 UCC).
Six eth interface is chosen because the platform I am using combines
UCC1&2 and UCC3&4 as 1000 Eth and the other four UCCs as 10/100 Eth.
Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
---
Thank you for all the feedback guys,
version 3 removes the extra #ifdef CONFIG_HAS_ETH0 from common/cmd_bdinfo.c
README | 3 ++
common/cmd_bdinfo.c | 14 +++++++++++++
common/env_common.c | 6 +++++
common/env_embedded.c | 6 +++++
cpu/mpc83xx/fdt.c | 3 +-
drivers/qe/uec.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
include/asm-ppc/u-boot.h | 6 +++++
lib_ppc/board.c | 30 ++++++++++++++++++++++++++++
net/eth.c | 6 +++++
tools/env/fw_env.c | 6 +++++
10 files changed, 126 insertions(+), 2 deletions(-)
diff --git a/README b/README
index ccd839c..8802304 100644
--- a/README
+++ b/README
@@ -1095,8 +1095,11 @@ The following options need to be configured:
- Ethernet address:
CONFIG_ETHADDR
+ CONFIG_ETH1ADDR
CONFIG_ETH2ADDR
CONFIG_ETH3ADDR
+ CONFIG_ETH4ADDR
+ CONFIG_ETH5ADDR
Define a default value for Ethernet address to use
for the respective Ethernet interface, in case this
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index f4d9d40..5018930 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -117,6 +117,20 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
#endif
+#if defined(CONFIG_HAS_ETH4)
+ puts ("\neth4addr =");
+ for (i=0; i<6; ++i) {
+ printf ("%c%02X", i ? ':' : ' ', bd->bi_enet4addr[i]);
+ }
+#endif
+
+#if defined(CONFIG_HAS_ETH5)
+ puts ("\neth5addr =");
+ for (i=0; i<6; ++i) {
+ printf ("%c%02X", i ? ':' : ' ', bd->bi_enet5addr[i]);
+ }
+#endif
+
#ifdef CONFIG_HERMES
print_str ("ethspeed", strmhz(buf, bd->bi_ethspeed));
#endif
diff --git a/common/env_common.c b/common/env_common.c
index 77f9944..0fee3af 100644
--- a/common/env_common.c
+++ b/common/env_common.c
@@ -91,6 +91,12 @@ uchar default_environment[] = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
+#endif
#ifdef CONFIG_IPADDR
"ipaddr=" MK_STR(CONFIG_IPADDR) "\0"
#endif
diff --git a/common/env_embedded.c b/common/env_embedded.c
index 77e5619..e79f843 100644
--- a/common/env_embedded.c
+++ b/common/env_embedded.c
@@ -135,6 +135,12 @@ env_t environment __PPCENV__ = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
+#endif
#ifdef CONFIG_ETHPRIME
"ethprime=" CONFIG_ETHPRIME "\0"
#endif
diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c
index 39bd9dc..3e3e1c8 100644
--- a/cpu/mpc83xx/fdt.c
+++ b/cpu/mpc83xx/fdt.c
@@ -52,7 +52,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
fdt_fixup_crypto_node(blob, 0x0204);
#if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\
- defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3)
+ defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) ||\
+ defined(CONFIG_HAS_ETH4) || defined(CONFIG_HAS_ETH5)
fdt_fixup_ethernet(blob);
#endif
diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
index 344c649..e1dec5e 100644
--- a/drivers/qe/uec.c
+++ b/drivers/qe/uec.c
@@ -123,8 +123,54 @@ static uec_info_t eth4_uec_info = {
.enet_interface = CFG_UEC4_INTERFACE_MODE,
};
#endif
+#ifdef CONFIG_UEC_ETH5
+static uec_info_t eth5_uec_info = {
+ .uf_info = {
+ .ucc_num = CFG_UEC5_UCC_NUM,
+ .rx_clock = CFG_UEC5_RX_CLK,
+ .tx_clock = CFG_UEC5_TX_CLK,
+ .eth_type = CFG_UEC5_ETH_TYPE,
+ },
+#if (CFG_UEC5_ETH_TYPE == FAST_ETH)
+ .num_threads_tx = UEC_NUM_OF_THREADS_1,
+ .num_threads_rx = UEC_NUM_OF_THREADS_1,
+#else
+ .num_threads_tx = UEC_NUM_OF_THREADS_4,
+ .num_threads_rx = UEC_NUM_OF_THREADS_4,
+#endif
+ .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .tx_bd_ring_len = 16,
+ .rx_bd_ring_len = 16,
+ .phy_address = CFG_UEC5_PHY_ADDR,
+ .enet_interface = CFG_UEC5_INTERFACE_MODE,
+};
+#endif
+#ifdef CONFIG_UEC_ETH6
+static uec_info_t eth6_uec_info = {
+ .uf_info = {
+ .ucc_num = CFG_UEC6_UCC_NUM,
+ .rx_clock = CFG_UEC6_RX_CLK,
+ .tx_clock = CFG_UEC6_TX_CLK,
+ .eth_type = CFG_UEC6_ETH_TYPE,
+ },
+#if (CFG_UEC6_ETH_TYPE == FAST_ETH)
+ .num_threads_tx = UEC_NUM_OF_THREADS_1,
+ .num_threads_rx = UEC_NUM_OF_THREADS_1,
+#else
+ .num_threads_tx = UEC_NUM_OF_THREADS_4,
+ .num_threads_rx = UEC_NUM_OF_THREADS_4,
+#endif
+ .riscTx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .riscRx = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+ .tx_bd_ring_len = 16,
+ .rx_bd_ring_len = 16,
+ .phy_address = CFG_UEC6_PHY_ADDR,
+ .enet_interface = CFG_UEC6_INTERFACE_MODE,
+};
+#endif
-#define MAXCONTROLLERS (4)
+#define MAXCONTROLLERS (6)
static struct eth_device *devlist[MAXCONTROLLERS];
diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h
index 54ac01d..7451905 100644
--- a/include/asm-ppc/u-boot.h
+++ b/include/asm-ppc/u-boot.h
@@ -111,6 +111,12 @@ typedef struct bd_info {
#ifdef CONFIG_HAS_ETH3
unsigned char bi_enet3addr[6];
#endif
+#ifdef CONFIG_HAS_ETH4
+ unsigned char bi_enet4addr[6];
+#endif
+#ifdef CONFIG_HAS_ETH5
+ unsigned char bi_enet5addr[6];
+#endif
#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
defined(CONFIG_405EZ) || defined(CONFIG_440GX) || \
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index c02ac62..d440722 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -944,6 +944,36 @@ void board_init_r (gd_t *id, ulong dest_addr)
}
#endif
+#ifdef CONFIG_HAS_ETH4
+ /* handle 5th ethernet address */
+ s = getenv("eth4addr");
+#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
+ if (s == NULL)
+ board_get_enetaddr(bd->bi_enet4addr);
+ else
+#endif
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet4addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
+ if (s)
+ s = (*e) ? e + 1 : e;
+ }
+#endif
+
+#ifdef CONFIG_HAS_ETH5
+ /* handle 6th ethernet address */
+ s = getenv("eth5addr");
+#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)
+ if (s == NULL)
+ board_get_enetaddr(bd->bi_enet5addr);
+ else
+#endif
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet5addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
+ if (s)
+ s = (*e) ? e + 1 : e;
+ }
+#endif
+
#if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \
defined(CONFIG_TQM8272) || \
defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \
diff --git a/net/eth.c b/net/eth.c
index 432dd60..ccd871a 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -180,6 +180,12 @@ int eth_initialize(bd_t *bis)
#if defined(CONFIG_UEC_ETH4)
uec_initialize(3);
#endif
+#if defined(CONFIG_UEC_ETH5)
+ uec_initialize(4);
+#endif
+#if defined(CONFIG_UEC_ETH6)
+ uec_initialize(5);
+#endif
#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
fec_initialize(bis);
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 46747d3..6e9c34f 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -157,6 +157,12 @@ static char default_environment[] = {
#ifdef CONFIG_ETH3ADDR
"eth3addr=" MK_STR (CONFIG_ETH3ADDR) "\0"
#endif
+#ifdef CONFIG_ETH4ADDR
+ "eth4addr=" MK_STR (CONFIG_ETH4ADDR) "\0"
+#endif
+#ifdef CONFIG_ETH5ADDR
+ "eth5addr=" MK_STR (CONFIG_ETH5ADDR) "\0"
+#endif
#ifdef CONFIG_ETHPRIME
"ethprime=" CONFIG_ETHPRIME "\0"
#endif
--
1.5.5.GIT
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v3] [83xx] Adds two more ethernet interface to 83xx
2008-09-30 16:00 ` Kim Phillips
@ 2008-09-30 15:58 ` Jerry Van Baren
2008-09-30 17:02 ` Ben Warren
1 sibling, 0 replies; 24+ messages in thread
From: Jerry Van Baren @ 2008-09-30 15:58 UTC (permalink / raw)
To: u-boot
Kim Phillips wrote:
> On Mon, 29 Sep 2008 18:28:23 -0400
> richardretanubun <richardretanubun@ruggedcom.com> wrote:
>
>> Added as a convenience for other platforms that uses MPC8360 (has 8 UCC).
>> Six eth interface is chosen because the platform I am using combines
>> UCC1&2 and UCC3&4 as 1000 Eth and the other four UCCs as 10/100 Eth.
>>
>> Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
>
> Acked-by: Kim Phillips <kim.phillips@freescale.com>
>
> does someone (Ben, gvb, wd) want to pick this up, do a s/ggg/gg/ on
> Richard's s-o-b, and put it in their next branch, or shall I?
>
> Kim
Hi Kim,
I would defer to you as 83xx custodian (first choice) or Ben as net
custodian.
Thanks,
gvb
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v3] [83xx] Adds two more ethernet interface to 83xx
2008-09-29 22:28 ` [U-Boot] [PATCH v3] " richardretanubun
@ 2008-09-30 16:00 ` Kim Phillips
2008-09-30 15:58 ` Jerry Van Baren
2008-09-30 17:02 ` Ben Warren
2008-10-06 5:12 ` Ben Warren
1 sibling, 2 replies; 24+ messages in thread
From: Kim Phillips @ 2008-09-30 16:00 UTC (permalink / raw)
To: u-boot
On Mon, 29 Sep 2008 18:28:23 -0400
richardretanubun <richardretanubun@ruggedcom.com> wrote:
> Added as a convenience for other platforms that uses MPC8360 (has 8 UCC).
> Six eth interface is chosen because the platform I am using combines
> UCC1&2 and UCC3&4 as 1000 Eth and the other four UCCs as 10/100 Eth.
>
> Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
Acked-by: Kim Phillips <kim.phillips@freescale.com>
does someone (Ben, gvb, wd) want to pick this up, do a s/ggg/gg/ on
Richard's s-o-b, and put it in their next branch, or shall I?
Kim
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v3] [83xx] Adds two more ethernet interface to 83xx
2008-09-30 16:00 ` Kim Phillips
2008-09-30 15:58 ` Jerry Van Baren
@ 2008-09-30 17:02 ` Ben Warren
1 sibling, 0 replies; 24+ messages in thread
From: Ben Warren @ 2008-09-30 17:02 UTC (permalink / raw)
To: u-boot
Kim Phillips wrote:
> On Mon, 29 Sep 2008 18:28:23 -0400
> richardretanubun <richardretanubun@ruggedcom.com> wrote:
>
>
>> Added as a convenience for other platforms that uses MPC8360 (has 8 UCC).
>> Six eth interface is chosen because the platform I am using combines
>> UCC1&2 and UCC3&4 as 1000 Eth and the other four UCCs as 10/100 Eth.
>>
>> Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
>>
>
> Acked-by: Kim Phillips <kim.phillips@freescale.com>
>
> does someone (Ben, gvb, wd) want to pick this up, do a s/ggg/gg/ on
> Richard's s-o-b, and put it in their next branch, or shall I?
>
I'll take it.
Ben
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v3] [83xx] Adds two more ethernet interface to 83xx
2008-09-29 22:28 ` [U-Boot] [PATCH v3] " richardretanubun
2008-09-30 16:00 ` Kim Phillips
@ 2008-10-06 5:12 ` Ben Warren
2008-10-06 19:31 ` richardretanubun
1 sibling, 1 reply; 24+ messages in thread
From: Ben Warren @ 2008-10-06 5:12 UTC (permalink / raw)
To: u-boot
richardretanubun wrote:
> Added as a convenience for other platforms that uses MPC8360 (has 8 UCC).
> Six eth interface is chosen because the platform I am using combines
> UCC1&2 and UCC3&4 as 1000 Eth and the other four UCCs as 10/100 Eth.
>
> Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
> ---
Applied to net/next
regards,
Ben
^ permalink raw reply [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v3] [83xx] Adds two more ethernet interface to 83xx
2008-10-06 5:12 ` Ben Warren
@ 2008-10-06 19:31 ` richardretanubun
2008-10-14 5:53 ` Ben Warren
0 siblings, 1 reply; 24+ messages in thread
From: richardretanubun @ 2008-10-06 19:31 UTC (permalink / raw)
To: u-boot
Fixed compiler warning "declared but unused" eth5_uec_info and eth6_uec_info.
Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
---
Hi Ben,
Thanks for applying the patch.
I got a compiler warning when using it, here is a patch to fix that.
Thanks for all the help
Richard
drivers/qe/uec.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
index e1dec5e..582a1c0 100644
--- a/drivers/qe/uec.c
+++ b/drivers/qe/uec.c
@@ -1414,6 +1414,14 @@ int uec_initialize(int index)
#ifdef CONFIG_UEC_ETH4
uec_info = ð4_uec_info;
#endif
+ } else if (index == 4) {
+#ifdef CONFIG_UEC_ETH5
+ uec_info = ð5_uec_info;
+#endif
+ } else if (index == 5) {
+#ifdef CONFIG_UEC_ETH6
+ uec_info = ð6_uec_info;
+#endif
} else {
printf("%s: index is illegal.\n", __FUNCTION__);
return -EINVAL;
--
1.5.5.GIT
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [U-Boot] [PATCH v3] [83xx] Adds two more ethernet interface to 83xx
2008-10-06 19:31 ` richardretanubun
@ 2008-10-14 5:53 ` Ben Warren
0 siblings, 0 replies; 24+ messages in thread
From: Ben Warren @ 2008-10-14 5:53 UTC (permalink / raw)
To: u-boot
richardretanubun wrote:
> Fixed compiler warning "declared but unused" eth5_uec_info and
> eth6_uec_info.
> Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
> ---
> Hi Ben,
>
> Thanks for applying the patch. I got a compiler warning when using it,
> here is a patch to fix that.
>
> Thanks for all the help
>
> Richard
>
> drivers/qe/uec.c | 8 ++++++++
> 1 files changed, 8 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
> index e1dec5e..582a1c0 100644
> --- a/drivers/qe/uec.c
> +++ b/drivers/qe/uec.c
> @@ -1414,6 +1414,14 @@ int uec_initialize(int index)
> #ifdef CONFIG_UEC_ETH4
> uec_info = ð4_uec_info;
> #endif
> + } else if (index == 4) {
> +#ifdef CONFIG_UEC_ETH5
> + uec_info = ð5_uec_info;
> +#endif
> + } else if (index == 5) {
> +#ifdef CONFIG_UEC_ETH6
> + uec_info = ð6_uec_info;
> +#endif
> } else {
> printf("%s: index is illegal.\n", __FUNCTION__);
> return -EINVAL;
Applied to net/next
regards,
Ben
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2008-10-14 5:53 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-25 12:53 [U-Boot] [PATCH] [83xx] Adds two more ethernet interface to 83xx richardretanubun
2008-09-25 19:50 ` Kim Phillips
2008-09-25 20:25 ` richardretanubun
2008-09-25 20:45 ` Kim Phillips
2008-09-25 22:08 ` Wolfgang Denk
2008-09-25 21:44 ` [U-Boot] [PATCH v2] " richardretanubun
2008-09-25 22:24 ` Wolfgang Denk
2008-09-25 22:52 ` richardretanubun
2008-09-25 23:28 ` Wolfgang Denk
2008-09-29 12:43 ` richardretanubun
2008-09-29 13:07 ` Jerry Van Baren
2008-09-29 22:28 ` [U-Boot] [PATCH v3] " richardretanubun
2008-09-30 16:00 ` Kim Phillips
2008-09-30 15:58 ` Jerry Van Baren
2008-09-30 17:02 ` Ben Warren
2008-10-06 5:12 ` Ben Warren
2008-10-06 19:31 ` richardretanubun
2008-10-14 5:53 ` Ben Warren
2008-09-25 22:24 ` [U-Boot] [PATCH] " Wolfgang Denk
2008-09-25 20:42 ` Jerry Van Baren
2008-09-25 22:17 ` Wolfgang Denk
2008-09-26 3:44 ` Jerry Van Baren
2008-09-26 5:46 ` Wolfgang Denk
2008-09-26 7:21 ` Ben Warren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox