[U-Boot-Users] [PATCH V3] Add mechanisms for CPU and board-specific Ethernet initialization

Ben Warren biggerbadderben at gmail.com
Fri Jun 13 16:02:30 CEST 2008


Please ignore.  It's wrong.  Sorry for the noise!

Ben

On Fri, Jun 13, 2008 at 6:58 AM, Ben Warren <biggerbadderben at gmail.com> wrote:
> This patch is the first step in cleaning up net/eth.c, by moving Ethernet
> initialization to CPU or board-specific code.  Initial implementation is
> only on the Freescale TSEC controller, but others will be added soon.
>
> Signed-off-by: Ben Warren <biggerbadderben at gmail.com>
> ---
>
> This time around, instead of adding code to each board that implements TSEC, I
> implemented cpu_eth_init() in all architectures that have TSEC.  Preferably,
> this would have gone in new files in the CPU directories, but 'ld' made it
> impossible to guarantee that the code would be linked into the final executable.
> Also, don't need include/netdev.h for now.
>
>  cpu/mpc83xx/cpu.c |   20 ++++++++++++++++++++
>  cpu/mpc85xx/cpu.c |   30 ++++++++++++++++++++++++++++++
>  cpu/mpc86xx/cpu.c |   27 +++++++++++++++++++++++++++
>  net/eth.c         |   26 ++++++++++----------------
>  4 files changed, 87 insertions(+), 16 deletions(-)
>
> diff --git a/cpu/mpc83xx/cpu.c b/cpu/mpc83xx/cpu.c
> index 36de78d..94d1a13 100644
> --- a/cpu/mpc83xx/cpu.c
> +++ b/cpu/mpc83xx/cpu.c
> @@ -358,3 +358,23 @@ int dma_xfer(void *dest, u32 count, void *src)
>        return ((int)dma_check());
>  }
>  #endif /*CONFIG_DDR_ECC*/
> +
> +#ifdef CONFIG_TSEC_ENET
> +/* Default initializations for TSEC controllers.  To override,
> + * create a board-specific function called:
> + *     int board_eth_init(bd_t *bis)
> + */
> +
> +extern int tsec_initialize(bd_t * bis, int index, char *devname);
> +
> +int cpu_eth_init(bd_t *bis)
> +{
> +#if defined(CONFIG_TSEC1)
> +       tsec_initialize(bis, 0, CONFIG_TSEC1_NAME);
> +#endif
> +#if defined(CONFIG_TSEC2)
> +       tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
> +#endif
> +       return 0;
> +}
> +#endif
> diff --git a/cpu/mpc85xx/cpu.c b/cpu/mpc85xx/cpu.c
> index 9873383..7d82909 100644
> --- a/cpu/mpc85xx/cpu.c
> +++ b/cpu/mpc85xx/cpu.c
> @@ -279,3 +279,33 @@ int dma_xfer(void *dest, uint count, void *src) {
>        return dma_check();
>  }
>  #endif
> +
> +#if defined(CONFIG_TSEC_ENET) || defined(CONFIGMPC85XX_FEC)
> +/* Default initializations for TSEC controllers.  To override,
> + * create a board-specific function called:
> + *     int board_eth_init(bd_t *bis)
> + */
> +
> +int tsec_initialize(bd_t * bis, int index, char *devname);
> +
> +int cpu_eth_init(bd_t *bis)
> +{
> +#if defined(CONFIG_TSEC1)
> +       tsec_initialize(bis, 0, CONFIG_TSEC1_NAME);
> +#endif
> +#if defined(CONFIG_TSEC2)
> +       tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
> +#endif
> +#if defined(CONFIG_MPC85XX_FEC)
> +       tsec_initialize(bis, 2, CONFIG_MPC85XX_FEC_NAME);
> +#else
> +#if defined(CONFIG_TSEC3)
> +       tsec_initialize(bis, 2, CONFIG_TSEC3_NAME);
> +#endif
> +#if defined(CONFIG_TSEC4)
> +       tsec_initialize(bis, 3, CONFIG_TSEC4_NAME);
> +#endif
> +#endif
> +       return 0;
> +}
> +#endif
> diff --git a/cpu/mpc86xx/cpu.c b/cpu/mpc86xx/cpu.c
> index 3c74764..79f227b 100644
> --- a/cpu/mpc86xx/cpu.c
> +++ b/cpu/mpc86xx/cpu.c
> @@ -288,3 +288,30 @@ void mpc86xx_reginfo(void)
>        printf("\tBR7\t0x%08X\tOR7\t0x%08X \n", in_be32(&lbc->br7), in_be32(&lbc->or7));
>
>  }
> +
> +#ifdef CONFIG_TSEC_ENET
> +/* Default initializations for TSEC controllers.  To override,
> + * create a board-specific function called:
> + *     int board_eth_init(bd_t *bis)
> + */
> +
> +extern int tsec_initialize(bd_t * bis, int index, char *devname);
> +
> +int cpu_eth_init(bd_t *bis)
> +{
> +#if defined(CONFIG_TSEC1)
> +       tsec_initialize(bis, 0, CONFIG_TSEC1_NAME);
> +#endif
> +#if defined(CONFIG_TSEC2)
> +       tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
> +#endif
> +#if defined(CONFIG_TSEC3)
> +       tsec_initialize(bis, 2, CONFIG_TSEC3_NAME);
> +#endif
> +#if defined(CONFIG_TSEC4)
> +       tsec_initialize(bis, 3, CONFIG_TSEC4_NAME);
> +#endif
> +       return 0;
> +}
> +#endif
> +
> diff --git a/net/eth.c b/net/eth.c
> index c4f24c6..f12b9ed 100644
> --- a/net/eth.c
> +++ b/net/eth.c
> @@ -28,6 +28,12 @@
>
>  #if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
>
> +/* CPU and board-specific Ethernet initializations.  Aliased function
> + * signals caller to move on */
> +static int __def_eth_init(bd_t *bis) {return -1;}
> +int cpu_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init")));
> +int board_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init")));
> +
>  #ifdef CFG_GT_6426x
>  extern int gt6426x_eth_initialize(bd_t *bis);
>  #endif
> @@ -165,6 +171,10 @@ int eth_initialize(bd_t *bis)
>  #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
>        miiphy_init();
>  #endif
> +       /* Try board-specific initialization first.  If it fails or isn't
> +        * present, try the cpu-specific initialization */
> +       if (board_eth_init(bis) < 0)
> +               cpu_eth_init(bis);
>
>  #if defined(CONFIG_DB64360) || defined(CONFIG_CPCI750)
>        mv6436x_eth_initialize(bis);
> @@ -196,22 +206,6 @@ int eth_initialize(bd_t *bis)
>  #if defined(CONFIG_SK98)
>        skge_initialize(bis);
>  #endif
> -#if defined(CONFIG_TSEC1)
> -       tsec_initialize(bis, 0, CONFIG_TSEC1_NAME);
> -#endif
> -#if defined(CONFIG_TSEC2)
> -       tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
> -#endif
> -#if defined(CONFIG_MPC85XX_FEC)
> -       tsec_initialize(bis, 2, CONFIG_MPC85XX_FEC_NAME);
> -#else
> -#    if defined(CONFIG_TSEC3)
> -       tsec_initialize(bis, 2, CONFIG_TSEC3_NAME);
> -#    endif
> -#    if defined(CONFIG_TSEC4)
> -       tsec_initialize(bis, 3, CONFIG_TSEC4_NAME);
> -#    endif
> -#endif
>  #if defined(CONFIG_UEC_ETH1)
>        uec_initialize(0);
>  #endif
> --
> 1.5.4.3
>
>




More information about the U-Boot mailing list