[U-Boot] [PATCH 0/3 v4] New MIIPHYBB implementation with multi-bus support
Luigi 'Comio' Mantellini
luigi.mantellini at idf-hit.com
Tue Oct 6 15:45:01 CEST 2009
This patch rewrites the miiphybb ( Bit-banged MII bus driver ) in order to
support an arbitrary number of mii buses. This feature is useful when your
board uses different mii buses for different phys and all (or a part) of these
buses are implemented via bit-banging mode.
The driver requires that the following macros should be defined into the board
configuration file:
CONFIG_BITBANGMII - Enable the miiphybb driver
CONFIG_BITBANGMII_MULTI - Enable the multi bus support
If the CONFIG_BITBANGMII_MULTI is not defined, the board's config file needs
to define at least the following macros:
MII_INIT - Generic code to enable the MII bus (optional)
MDIO_DECLARE - Declaration needed to access to the MDIO pin (optional)
MDIO_ACTIVE - Activate the MDIO pin as out pin
MDIO_TRISTATE - Activate the MDIO pin as input/tristate pin
MDIO_READ - Read the MDIO pin
MDIO(v) - Write v on the MDIO pin
MDC_DECLARE - Declaration needed to access to the MDC pin (optional)
MDC(v) - Write v on the MDC pin
The previous macros make the driver compatible with the previous version
(that didn't support the multi-bus).
When the CONFIG_BITBANGMII_MULTI is also defined, the board code needs to fill
the bb_miiphy_buses[] array with a record for each required bus and declare
the bb_miiphy_buses_num variable with the number of mii buses.
The record (struct bb_miiphy_bus) has the following fields/callbacks (see
miiphy.h for details):
char name[] - The symbolic name that must be equal to the MII bus
registered name
int (*init)() - Initialization function called at startup time (just
before the Ethernet initialization)
int (*mdio_active)() - Activate the MDIO pin as output
int (*mdio_tristate)() - Activate the MDIO pin as input/tristate pin
int (*set_mdio)() - Write the MDIO pin
int (*get_mdio)() - Read the MDIO pin
int (*set_mdc)() - Write the MDC pin
int (*delay)() - Delay function
void *priv - Private data used by board specific code
The board code will look like:
struct bb_miiphy_bus bb_miiphy_buses[] = {
{ .name = "miibus#1", .init = b1_init, .mdio_active = b1_mdio_active, ... },
{ .name = "miibus#2", .init = b2_init, .mdio_active = b2_mdio_active, ... },
...
};
int bb_miiphy_buses_num = sizeof(bb_miiphy_buses) /
sizeof(bb_miiphy_buses[0]);
Patch Changelog:
v1 -- First (broken) release
v2 -- Fix some typos and disable callbacks pointers relacation (if
CONFIG_RELOC_FIXUP_WORKS is not defined)
v3 -- Do not relocate NULL pointers
v4 -- Code Cleanup.
Luigi 'Comio' Mantellini (3):
New Bit-banged MII driver (MIIPHYBB) implementation with multi-bus
support.
Add bb_miiphy_init call before any ethernet bring-up code.
Update all board to support new bbmiiphy driver (with multibus
support)
drivers/net/phy/miiphybb.c | 346 +++++++++++++++++++++++++++++-------------
include/configs/ISPAN.h | 4 +
include/configs/MPC8260ADS.h | 3 +
include/configs/MPC8266ADS.h | 4 +
include/configs/MPC8560ADS.h | 4 +
include/configs/Rattler.h | 4 +
include/configs/SBC8540.h | 4 +
include/configs/TQM8272.h | 3 +
include/configs/VoVPN-GW.h | 4 +
include/configs/ZPC1900.h | 4 +
include/configs/ep8248.h | 4 +
include/configs/ep82xxm.h | 4 +
include/configs/gw8260.h | 4 +
include/configs/hymod.h | 12 ++
include/configs/muas3001.h | 4 +
include/configs/ppmc8260.h | 4 +
include/configs/sacsng.h | 4 +
include/configs/sbc8260.h | 4 +
include/configs/sbc8560.h | 4 +
include/miiphy.h | 25 +++-
lib_arm/board.c | 7 +
lib_avr32/board.c | 7 +
lib_blackfin/board.c | 7 +
lib_i386/board.c | 9 +-
lib_m68k/board.c | 7 +
lib_mips/board.c | 7 +
lib_ppc/board.c | 7 +
lib_sh/board.c | 7 +
lib_sparc/board.c | 7 +
29 files changed, 408 insertions(+), 106 deletions(-)
More information about the U-Boot
mailing list