[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