[U-Boot] [PATCH 1/1 v3] ppc4xx: Add support for GPCS, SGMII and M88E1112 PHY
Victor Gallardo
vgallardo at amcc.com
Wed Sep 3 19:17:43 CEST 2008
Hi Stefan,
OK. I agree, I will remove DFLT_PHY_LESS_SPEED and DFLT_PHY_LESS_DUPLEX.
In terms of a generic PHY-less approach. I'll wait for Ben's input.
-Victor Gallardo
-----Original Message-----
From: Stefan Roese [mailto:sr at denx.de]
Sent: Wednesday, September 03, 2008 12:23 AM
To: u-boot at lists.denx.de
Cc: Victor Gallardo; Ben Warren
Subject: Re: [U-Boot] [PATCH 1/1 v3] ppc4xx: Add support for GPCS, SGMII
and M88E1112 PHY
On Wednesday 03 September 2008, Victor Gallardo wrote:
> This patch adds GPCS, SGMII and M88E1112 PHY support for the AMCC
> PPC460GT/EX processors.
>
> Signed-off-by: Victor Gallardo <vgallardo at amcc.com>
> ---
A good idea is to keep a history of what changed in the patch revisions
here in this area (after the "---"). Something like:
v2:
- Added comments to GPCS PHY setup
- Minor coding style cleanup
v3:
- Generalized the PHY-less configuration even more
Please find some more comments below.
> cpu/ppc4xx/4xx_enet.c | 162
> ++++++++++++++++++++++++++++++++++++++++++++++++- cpu/ppc4xx/miiphy.c
|
> 41 ++++++++++++-
> include/ppc4xx_enet.h | 3 +
> 3 files changed, 201 insertions(+), 5 deletions(-)
>
> diff --git a/cpu/ppc4xx/4xx_enet.c b/cpu/ppc4xx/4xx_enet.c index
> 8a38335..e137bac 100644
> --- a/cpu/ppc4xx/4xx_enet.c
> +++ b/cpu/ppc4xx/4xx_enet.c
> @@ -198,6 +198,7 @@
> #define BI_PHYMODE_RMII 8
> #endif
> #endif
> +#define BI_PHYMODE_SGMII 9
>
> #if defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
> defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ @@ -216,6
> +217,52 @@
> #define MAL_RX_CHAN_MUL 1
> #endif
>
> +/*-------------------------------------------------------------------
> +-+
> + * PHY-less support for Ethernet Ports.
> +
> +*--------------------------------------------------------------------
> +*/
> +
> +/*
> + * Some boards do not have a PHY for each ethernet port.
> + * For example on Arches board (2 CPU system) eth0 does not have
> + * a PHY, both CPU's are wired directly together (AC coupled)
> + * using SGMII0.
> + *
> + * In these cases :
> + * 1) set the appropriate CONFIG_PHY_ADDR equal to CONFIG_PHY_LESS
> + * to detect that the specified ethernet port does not have a
PHY.
> + * 2) Then define CFG_PHY_LESS_PORT and CFG_PHY_LESS_PORTS in
board
> + * configuration file. For example on the Arches board we would
do
> + * the following.
> + * #define CFG_PHY_LESS_PORT(devnum,speed,duplex) \
> + * { devnum, speed, duplex},
> + * #define CFG_PHY_LESS_PORTS \
> + * CFG_PHY_LESS_PORT(0,1000,FULL)
> + */
> +#if !defined(CONFIG_PHY_LESS)
> +#define CONFIG_PHY_LESS 0xFFFFFFFF /* PHY-less mode */
> +#endif
If we agree that this is a good generic approach for this PHY-less
handling, then we should probably move this to a common header so that
other ethernet driver can use this too.
Ben, what do you think?
And the description should be moved to a common place too. Either the
toplevel README, or a new README.xxx in the doc directory.
> +
> +#define DFLT_PHY_LESS_SPEED 100
> +#define DFLT_PHY_LESS_DUPLEX FULL
Do we really need these defaults? Please see my comment further down.
> +
> +/*
> + * CFG_PHY_LESS_PORTS tells us about ethernet ports that have no PHY
> + * attached to them.
> + */
> +#ifndef CFG_PHY_LESS_PORTS
> +#define CFG_PHY_LESS_PORTS
> +#endif
> +
> +struct phy_less_port {
> + unsigned int devnum; /* ethernet port */
> + unsigned int speed; /* specified speed 10,100 or 1000 */
> + unsigned int duplex; /* specified duplex FULL or HALF */
> +};
Again, if we agree that this is a good "solution", then this should be
moved into a common header, probably net.h.
<snip>
> - speed = miiphy_speed (dev->name, reg);
> - duplex = miiphy_duplex (dev->name, reg);
> +get_speed:
> + if (reg == CONFIG_PHY_LESS) {
> + speed = DFLT_PHY_LESS_SPEED;
> + duplex = DFLT_PHY_LESS_DUPLEX;
I don't think we need this defaults here. Remove them and...
> + for (i = 0; i < ARRAY_SIZE(phy_less_port); i++) {
> + if (devnum == phy_less_port[i].devnum) {
> + speed = phy_less_port[i].speed;
> + duplex = phy_less_port[i].duplex;
> + break;
> + }
> + }
...add this here:
if (i == ARRAY_SIZE(phy_less_port)) {
printf("ERROR: PHY (%s) not configured
correctly!\n",
dev->name);
return -1;
}
If the PHY-less device is not in the list, then this is a
misconfiguration which should be fixed IMHO.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
More information about the U-Boot
mailing list