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