On Oct 18, 2009, at 3:43 AM, Sandeep Gopalpet wrote:

> Moved the mdio regs out of the tsec structure,and
> provided different offsets for tsec base and mdio
> base so that provision for etsec2.0 can be provided.
>
> This patch helps in providing the support for etsec2.0
> In etsec2.0, the MDIO register space and the etsec reg
> space are different.
>
> Signed-off-by: Sandeep Gopalpet <sandeep.ku...@freescale.com>
> ---
> drivers/net/tsec.c           |   20 ++++++++--------
> include/asm-ppc/immap_85xx.h |   10 ++++++++
> include/tsec.h               |   48 ++++++++++++++++++++++++++++++ 
> +----------
> 3 files changed, 56 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c
> index 5c3d261..2ad033e 100644
> --- a/drivers/net/tsec.c
> +++ b/drivers/net/tsec.c
> @@ -83,7 +83,7 @@ static struct tsec_info_struct tsec_info[] = {
> #ifdef CONFIG_MPC85XX_FEC
>       {
>               .regs = (tsec_t *)(TSEC_BASE_ADDR + 0x2000),
> -             .miiregs = (tsec_t *)(TSEC_BASE_ADDR),
> +             .miiregs = (tsec_mdio_t *)(MDIO_BASE_ADDR),
>               .devname = CONFIG_MPC85XX_FEC_NAME,
>               .phyaddr = FEC_PHY_ADDR,
>               .flags = FEC_FLAGS
> @@ -136,6 +136,7 @@ int tsec_initialize(bd_t * bis, struct  
> tsec_info_struct *tsec_info)
>       privlist[num_tsecs++] = priv;
>       priv->regs = tsec_info->regs;
>       priv->phyregs = tsec_info->miiregs;
> +     priv->phyregs_sgmii = tsec_info->miiregs_sgmii;
>
>       priv->phyaddr = tsec_info->phyaddr;
>       priv->flags = tsec_info->flags;
> @@ -222,7 +223,7 @@ int tsec_init(struct eth_device *dev, bd_t * bd)
> }
>
> /* Writes the given phy's reg with value, using the specified MDIO  
> regs */
> -static void tsec_local_mdio_write(volatile tsec_t *phyregs, uint  
> addr,
> +static void tsec_local_mdio_write(volatile tsec_mdio_t *phyregs,  
> uint addr,
>               uint reg, uint value)
> {
>       int timeout = 1000000;
> @@ -245,7 +246,7 @@ static void tsec_local_mdio_write(volatile  
> tsec_t *phyregs, uint addr,
>  * notvalid bit cleared), and the bus to cease activity (miimind
>  * busy bit cleared), and then returns the value
>  */
> -uint tsec_local_mdio_read(volatile tsec_t *phyregs, uint phyid,  
> uint regnum)
> +uint tsec_local_mdio_read(volatile tsec_mdio_t *phyregs, uint  
> phyid, uint regnum)
> {
>       uint value;
>
> @@ -290,11 +291,11 @@ static void tsec_configure_serdes(struct  
> tsec_private *priv)
> {
>       /* Access TBI PHY registers at given TSEC register offset as  
> opposed to the
>        * register offset used for external PHY accesses */
> -     tsec_local_mdio_write(priv->regs, priv->regs->tbipa, TBI_ANA,
> +     tsec_local_mdio_write(priv->phyregs_sgmii, priv->regs->tbipa,  
> TBI_ANA,
>                       TBIANA_SETTINGS);
> -     tsec_local_mdio_write(priv->regs, priv->regs->tbipa, TBI_TBICON,
> +     tsec_local_mdio_write(priv->phyregs_sgmii, priv->regs->tbipa,  
> TBI_TBICON,
>                       TBICON_CLK_SELECT);
> -     tsec_local_mdio_write(priv->regs, priv->regs->tbipa, TBI_CR,
> +     tsec_local_mdio_write(priv->phyregs_sgmii, priv->regs->tbipa,  
> TBI_CR,
>                       TBICR_SETTINGS);
> }
>
> @@ -306,12 +307,11 @@ static int init_phy(struct eth_device *dev)
> {
>       struct tsec_private *priv = (struct tsec_private *)dev->priv;
>       struct phy_info *curphy;
> -     volatile tsec_t *phyregs = priv->phyregs;
> +     volatile tsec_mdio_t *phyregs = priv->phyregs;
>       volatile tsec_t *regs = priv->regs;
>
>       /* Assign a Physical address to the TBI */
>       regs->tbipa = CONFIG_SYS_TBIPA_VALUE;
> -     phyregs->tbipa = CONFIG_SYS_TBIPA_VALUE;
>       asm("sync");
>
>       /* Reset MII (due to new addresses) */
> @@ -739,7 +739,7 @@ uint mii_parse_dm9161_scsr(uint mii_reg, struct  
> tsec_private * priv)
> uint mii_cis8204_fixled(uint mii_reg, struct tsec_private * priv)
> {
>       uint phyid;
> -     volatile tsec_t *regbase = priv->phyregs;
> +     volatile tsec_mdio_t *regbase = priv->phyregs;
>       int timeout = 1000000;
>
>       for (phyid = 0; phyid < 4; phyid++) {
> @@ -1772,7 +1772,7 @@ void phy_run_commands(struct tsec_private  
> *priv, struct phy_cmd *cmd)
> {
>       int i;
>       uint result;
> -     volatile tsec_t *phyregs = priv->phyregs;
> +     volatile tsec_mdio_t *phyregs = priv->phyregs;
>
>       phyregs->miimcfg = MIIMCFG_RESET;
>
> diff --git a/include/asm-ppc/immap_85xx.h b/include/asm-ppc/ 
> immap_85xx.h
> index 4194295..6c9baac 100644
> --- a/include/asm-ppc/immap_85xx.h
> +++ b/include/asm-ppc/immap_85xx.h
> @@ -1932,4 +1932,14 @@ typedef struct ccsr_gur {
> #define CONFIG_SYS_MPC85xx_USB_ADDR \
>       (CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_USB_OFFSET)
>
> +/* TSEC and MDIO OFFSETS */
> +#define CONFIG_SYS_TSEC1_OFFSET              (0x24000)
> +#define TSEC_SIZE                    (0x01000)
> +
> +#define CONFIG_SYS_MDIO1_OFFSET              (0x24520)
> +#define MDIO_OFFSET                  (0x01000)
> +
> +#define TSEC_BASE_ADDR               (CONFIG_SYS_IMMR + 
> CONFIG_SYS_TSEC1_OFFSET)
> +#define MDIO_BASE_ADDR               (CONFIG_SYS_IMMR + 
> CONFIG_SYS_MDIO1_OFFSET)
> +

Do we even need these here?  We haven't historically.

> #endif /*__IMMAP_85xx__*/
> diff --git a/include/tsec.h b/include/tsec.h
> index 0ac3034..342c07e 100644
> --- a/include/tsec.h
> +++ b/include/tsec.h
> @@ -7,7 +7,7 @@
>  *  terms of the GNU Public License, Version 2, incorporated
>  *  herein by reference.
>  *
> - * Copyright 2004, 2007 Freescale Semiconductor, Inc.
> + * Copyright 2004, 2007, 2009  Freescale Semiconductor, Inc.
>  * (C) Copyright 2003, Motorola, Inc.
>  * maintained by Xianghua Xiao (x.x...@motorola.com)
>  * author Andy Fleming
> @@ -24,18 +24,34 @@
>     #define CONFIG_SYS_TSEC1_OFFSET   (0x24000)
> #endif
>
> -#define TSEC_SIZE    0x01000
> +#ifndef TSEC_SIZE
> +     #define TSEC_SIZE       0x01000
> +#endif

Do we really need a #ifndef here?

> +
> +#ifndef CONFIG_SYS_MDIO1_OFFSET
> +    #define CONFIG_SYS_MDIO1_OFFSET  (0x24520)
> +#endif

the parens aren't needed.

> +
> +#ifndef MDIO_OFFSET
> +     #define MDIO_OFFSET     0x01000
> +#endif

How about calling this TSEC_MDIO_OFFSET

>
> /* FIXME:  Should these be pushed back to 83xx and 85xx config  
> files? */
> #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) \
>       || defined(CONFIG_MPC83xx)
> +#ifndef TSEC_BASE_ADDR
>     #define TSEC_BASE_ADDR    (CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET)
> #endif
> +#ifndef MDIO_BASE_ADDR
> +    #define MDIO_BASE_ADDR   (CONFIG_SYS_IMMR +  
> CONFIG_SYS_MDIO1_OFFSET)
> +#endif
> +#endif

Do we really need the #ifndef's here?

>
> #define STD_TSEC_INFO(num) \
> {                     \
>       .regs = (tsec_t *)(TSEC_BASE_ADDR + ((num - 1) * TSEC_SIZE)), \
> -     .miiregs = (tsec_t *)TSEC_BASE_ADDR, \
> +     .miiregs = (tsec_mdio_t *)(MDIO_BASE_ADDR), \
> +     .miiregs_sgmii = (tsec_mdio_t *)(MDIO_BASE_ADDR + (num -1) 
> *MDIO_OFFSET ), \
>       .devname = CONFIG_TSEC##num##_NAME, \
>       .phyaddr = TSEC##num##_PHY_ADDR, \
>       .flags = TSEC##num##_FLAGS \
> @@ -44,7 +60,8 @@
> #define SET_STD_TSEC_INFO(x, num) \
> {                     \
>       x.regs = (tsec_t *)(TSEC_BASE_ADDR + ((num - 1) * TSEC_SIZE)); \
> -     x.miiregs = (tsec_t *)TSEC_BASE_ADDR; \
> +     x.miiregs = (tsec_mdio_t *)(MDIO_BASE_ADDR); \
> +     x.miiregs_sgmii = (tsec_mdio_t *)(MDIO_BASE_ADDR + (num -1) 
> *MDIO_OFFSET); \
>       x.devname = CONFIG_TSEC##num##_NAME; \
>       x.phyaddr = TSEC##num##_PHY_ADDR; \
>       x.flags = TSEC##num##_FLAGS;\
> @@ -461,6 +478,16 @@ typedef struct tsec_hash_regs
>       uint    res2[24];
> } tsec_hash_t;
>
> +typedef struct tsec_mdio
> +{
> +     uint    miimcfg;        /* MII Management: Configuration */
> +     uint    miimcom;        /* MII Management: Command */
> +     uint    miimadd;        /* MII Management: Address */
> +     uint    miimcon;        /* MII Management: Control */
> +     uint    miimstat;       /* MII Management: Status */
> +     uint    miimind;        /* MII Management: Indicators */
> +} tsec_mdio_t;
> +
> typedef struct tsec
> {
>       /* General Control and Status Registers (0x2_n000) */
> @@ -526,12 +553,7 @@ typedef struct tsec
>
>       uint    res51c;
>
> -     uint    miimcfg;        /* MII Management: Configuration */
> -     uint    miimcom;        /* MII Management: Command */
> -     uint    miimadd;        /* MII Management: Address */
> -     uint    miimcon;        /* MII Management: Control */
> -     uint    miimstat;       /* MII Management: Status */
> -     uint    miimind;        /* MII Management: Indicators */
> +     uint    resmdio[6];
>
>       uint    res538;
>
> @@ -571,7 +593,8 @@ typedef struct tsec
>
> struct tsec_private {
>       volatile tsec_t *regs;
> -     volatile tsec_t *phyregs;
> +     volatile tsec_mdio_t *phyregs;
> +     volatile tsec_mdio_t *phyregs_sgmii;
>       struct phy_info *phyinfo;
>       uint phyaddr;
>       u32 flags;
> @@ -630,7 +653,8 @@ struct phy_info {
>
> struct tsec_info_struct {
>       tsec_t *regs;
> -     tsec_t *miiregs;
> +     tsec_mdio_t *miiregs;
> +     tsec_mdio_t *miiregs_sgmii;
>       char *devname;
>       unsigned int phyaddr;
>       u32 flags;
> -- 
> 1.5.2.2
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to