mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-11 23:33:26 +09:00
![Luigi 'Comio' Mantellini](/assets/img/avatar_default.png)
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]); Signed-off-by: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
57 lines
2.5 KiB
Plaintext
57 lines
2.5 KiB
Plaintext
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]);
|
|
|
|
2009 Industrie Dial Face S.p.A.
|
|
Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
|