From: Ben Warren <biggerbadderben@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] mgcoge make ether_scc.c work with CONFIG_NET_MULTI
Date: Sun, 09 Nov 2008 22:09:30 -0800 [thread overview]
Message-ID: <4917D01A.1010405@gmail.com> (raw)
In-Reply-To: <20081109115831.323230ab@ernst.jennejohn.org>
Hi Gary,
Gary Jennejohn wrote:
> This change is needed for mgcoge because it uses two ethernet drivers.
>
>
I like the idea of moving drivers to use CONFIG_NET_MULTI, particularly
so that we can get rid of it as an option... There are a few more
things you need to think about, though.
> Add a check for the presence of the PIGGY board on mgcoge. Without this
> board networking cannot work and the initialization must be aborted.
>
> Only allocate rtx once to prevent DPRAM exhaustion.
>
> Initialize ether_scc.c and the keymile-specific HDLC driver (to be added
> soon) in eth.c.
>
> Signed-off-by: Gary Jennejohn <garyj@denx.de>
> ---
>
> I ran "MAKEALL ppc" and no errors were caused by this patch.
>
> cpu/mpc8260/ether_scc.c | 56 +++++++++++++++++++++++++++++++++++++++++------
> net/eth.c | 8 ++++++
> 2 files changed, 57 insertions(+), 7 deletions(-)
>
> diff --git a/cpu/mpc8260/ether_scc.c b/cpu/mpc8260/ether_scc.c
> index c65f0e0..537cd39 100644
> --- a/cpu/mpc8260/ether_scc.c
> +++ b/cpu/mpc8260/ether_scc.c
> @@ -10,6 +10,12 @@
> * Advent Networks, Inc. <http://www.adventnetworks.com>
> * Jay Monkman <jtm@smoothsmoothie.com>
> *
> + * Modified so that it plays nicely when more than one ETHERNET interface
> + * is in use a la ether_fcc.c.
> + * (C) Copyright 2008
> + * DENX Software Engineerin GmbH
> + * Gary Jennejohn <garyj@denx.de>
> + *
> * See file CREDITS for list of people who contributed to this
> * project.
> *
> @@ -32,12 +38,17 @@
> #include <common.h>
> #include <asm/cpm_8260.h>
> #include <mpc8260.h>
> +#include <malloc.h>
> #include <net.h>
> #include <command.h>
> #include <config.h>
>
> #if defined(CONFIG_ETHER_ON_SCC) && defined(CONFIG_CMD_NET)
>
While you're mucking around with this file, please settle on a single
CONFIG that can allow conditional compilation from the Makefile, then
get rid of this stuff.
>
> +#ifndef CONFIG_NET_MULTI
> +#error "CONFIG_NET_MULTI must be defined."
> +#endif
> +
> #if (CONFIG_ETHER_INDEX == 1)
> # define PROFF_ENET PROFF_SCC1
> # define CPM_CR_ENET_PAGE CPM_CR_SCC1_PAGE
> @@ -100,7 +111,7 @@ typedef volatile struct CommonBufferDescriptor {
> static RTXBD *rtx;
>
>
> -int eth_send(volatile void *packet, int length)
> +int sec_send(struct eth_device *dev, volatile void *packet, int length)
>
Please give all these functions, except initialize(), file scope (i.e.
make them static). I'm not crazy about the name 'sec', but if it's
static the objection doesn't carry much weight. I also can't think of a
better name.
> {
> int i;
> int result = 0;
> @@ -137,7 +148,7 @@ int eth_send(volatile void *packet, int length)
> }
>
>
> -int eth_rx(void)
> +int sec_rx(struct eth_device *dev)
> {
> int length;
>
> @@ -184,19 +195,32 @@ int eth_rx(void)
> *
> *************************************************************/
>
> -int eth_init(bd_t *bis)
> +int sec_init(struct eth_device *dev, bd_t *bis)
> {
> int i;
> volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
> 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;
>
> - /* assign static pointer to BD area */
> - dpaddr = m8260_cpm_dpalloc(sizeof(RTXBD) + 2, 16);
> - rtx = (RTXBD *)&immr->im_dprambase[dpaddr];
> + /*
> + * Assign static pointer to BD area.
> + * Avoid exhausting DPRAM, which would cause a panic.
> + */
> + if (rtx == NULL) {
> + dpaddr = m8260_cpm_dpalloc(sizeof(RTXBD) + 2, 16);
> + rtx = (RTXBD *)&immr->im_dprambase[dpaddr];
> + }
>
> /* 24.21 - (1-3): ioports have been set up already */
>
> @@ -338,7 +362,7 @@ int eth_init(bd_t *bis)
> }
>
>
> -void eth_halt(void)
> +void sec_halt(struct eth_device *dev)
> {
> volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
> immr->im_scc[CONFIG_ETHER_INDEX-1].scc_gsmrl &= ~(SCC_GSMRL_ENR |
> @@ -354,4 +378,22 @@ void restart(void)
> }
> #endif
>
> +int sec_initialize(bd_t *bis)
>
For this function with global namespace, please pick a more descriptive
name. Maybe 82xx_scc_initialize() or something?
> +{
> + struct eth_device *dev;
> +
> + dev = (struct eth_device *) malloc(sizeof *dev);
> + memset(dev, 0, sizeof *dev);
> +
> + sprintf(dev->name, "SCC ETHERNET");
> + dev->init = sec_init;
> + dev->halt = sec_halt;
> + dev->send = sec_send;
> + dev->recv = sec_rx;
> +
> + eth_register(dev);
> +
> + return 1;
> +}
> +
> #endif
> diff --git a/net/eth.c b/net/eth.c
> index ccd871a..5fe8b83 100644
> --- a/net/eth.c
> +++ b/net/eth.c
> @@ -48,6 +48,8 @@ extern int ppc_4xx_eth_initialize(bd_t *);
> extern int scc_initialize(bd_t*);
> extern int npe_initialize(bd_t *);
> extern int uec_initialize(int);
> +extern int sec_initialize(bd_t *);
> +extern int keymile_hdlc_enet_initialize(bd_t *);
>
> #ifdef CONFIG_API
> extern void (*push_packet)(volatile void *, int);
> @@ -196,6 +198,12 @@ int eth_initialize(bd_t *bis)
> #if defined(CONFIG_IXP4XX_NPE)
> npe_initialize(bis);
> #endif
> +#if defined(CONFIG_ETHER_ON_SCC) && defined(CONFIG_MPC8260)
> + sec_initialize(bis);
> +#endif
> +#if defined(CONFIG_KEYMILE_HDLC_ENET)
> + keymile_hdlc_enet_initialize(bis);
> +#endif
> if (!eth_devices) {
> puts ("No ethernet found.\n");
> show_boot_progress (-64);
>
Please don't add anything to this file. All initializations now go in
cpu_eth_init()/board_eth_init(). There are plenty of examples you can
draw from. Don't forget to add your initializer function to
include/netdev.h
You get bonus points if you move this driver to drivers/net
regards,
Ben
next prev parent reply other threads:[~2008-11-10 6:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-09 10:58 [U-Boot] [PATCH] mgcoge make ether_scc.c work with CONFIG_NET_MULTI Gary Jennejohn
2008-11-10 6:09 ` Ben Warren [this message]
2008-11-10 17:27 ` Gary Jennejohn
2008-11-10 17:53 ` Ben Warren
2008-11-11 10:41 ` Gary Jennejohn
2008-11-11 16:07 ` [U-Boot] [PATCH v2] " Gary Jennejohn
2008-12-08 20:50 ` Wolfgang Denk
2008-12-08 21:00 ` Wolfgang Denk
2008-12-08 22:05 ` Ben Warren
2008-12-09 8:56 ` Gary Jennejohn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4917D01A.1010405@gmail.com \
--to=biggerbadderben@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.