Commit d123cee2 authored by David S. Miller's avatar David S. Miller

Merge branch 'phy_device_type'

Johan Hovold says:

====================
net: phy: add device-type abstraction

This series adds device and device-type abstractions to the micrel
driver, and enables support for RMII-reference clock selection for
KSZ8081 and KSZ8091 devices.

While adding support for more features for the Micrel PHYs mentioned
above, it became apparent that the configuration space is much too large
and that adding type-specific callbacks will simply not scale. Instead I
added a driver_data field to struct phy_device, which can be used to
store static device type data that can be parsed and acted on in
generic driver callbacks. This allows a lot of duplicated code to be
removed, and should make it much easier to add new features or deal with
device-type quirks in the future.

The series has been tested on a dual KSZ8081 setup. Further testing on
other Micrel PHYs would be much appreciated.

The recent commit a95a18afe4c8 ("phy/micrel: KSZ8031RNL RMII clock
reconfiguration bug") currently prevents KSZ8031 PHYs from using the
generic config-init. Bruno, who is the author of that patch, has agreed
to test this series and some follow-up diagnostic patches to determine
how best to incorporate these devices as well. I intend to send a
follow-up patch that removes the custom 8031 config-init and documents
this quirk, but the current series can be applied meanwhile.

These patches are against net-next which contains some already merged
prerequisite patches to the driver.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 2e95b2a8 ee0dc2fb
...@@ -6,21 +6,32 @@ Optional properties: ...@@ -6,21 +6,32 @@ Optional properties:
- micrel,led-mode : LED mode value to set for PHYs with configurable LEDs. - micrel,led-mode : LED mode value to set for PHYs with configurable LEDs.
Configure the LED mode with single value. The list of PHYs and Configure the LED mode with single value. The list of PHYs and the
the bits that are currently supported: bits that are currently supported:
KSZ8001: register 0x1e, bits 15..14 KSZ8001: register 0x1e, bits 15..14
KSZ8041: register 0x1e, bits 15..14 KSZ8041: register 0x1e, bits 15..14
KSZ8021: register 0x1f, bits 5..4 KSZ8021: register 0x1f, bits 5..4
KSZ8031: register 0x1f, bits 5..4 KSZ8031: register 0x1f, bits 5..4
KSZ8051: register 0x1f, bits 5..4 KSZ8051: register 0x1f, bits 5..4
KSZ8081: register 0x1f, bits 5..4 KSZ8081: register 0x1f, bits 5..4
KSZ8091: register 0x1f, bits 5..4 KSZ8091: register 0x1f, bits 5..4
See the respective PHY datasheet for the mode values. See the respective PHY datasheet for the mode values.
- micrel,rmii-reference-clock-select-25-mhz: RMII Reference Clock Select
bit selects 25 MHz mode
Setting the RMII Reference Clock Select bit enables 25 MHz rather
than 50 MHz clock mode.
Note that this option in only needed for certain PHY revisions with a
non-standard, inverted function of this configuration bit.
Specifically, a clock reference ("rmii-ref" below) is always needed to
actually select a mode.
- clocks, clock-names: contains clocks according to the common clock bindings. - clocks, clock-names: contains clocks according to the common clock bindings.
supported clocks: supported clocks:
- KSZ8021, KSZ8031: "rmii-ref": The RMII refence input clock. Used - KSZ8021, KSZ8031, KSZ8081, KSZ8091: "rmii-ref": The RMII reference
to determine the XI input clock. input clock. Used to determine the XI input clock.
This diff is collapsed.
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
/* struct phy_device dev_flags definitions */ /* struct phy_device dev_flags definitions */
#define MICREL_PHY_50MHZ_CLK 0x00000001 #define MICREL_PHY_50MHZ_CLK 0x00000001
#define MICREL_PHY_25MHZ_CLK 0x00000002
#define MICREL_KSZ9021_EXTREG_CTRL 0xB #define MICREL_KSZ9021_EXTREG_CTRL 0xB
#define MICREL_KSZ9021_EXTREG_DATA_WRITE 0xC #define MICREL_KSZ9021_EXTREG_DATA_WRITE 0xC
......
...@@ -433,6 +433,7 @@ struct phy_device { ...@@ -433,6 +433,7 @@ struct phy_device {
* by this PHY * by this PHY
* flags: A bitfield defining certain other features this PHY * flags: A bitfield defining certain other features this PHY
* supports (like interrupts) * supports (like interrupts)
* driver_data: static driver data
* *
* The drivers must implement config_aneg and read_status. All * The drivers must implement config_aneg and read_status. All
* other functions are optional. Note that none of these * other functions are optional. Note that none of these
...@@ -448,6 +449,7 @@ struct phy_driver { ...@@ -448,6 +449,7 @@ struct phy_driver {
unsigned int phy_id_mask; unsigned int phy_id_mask;
u32 features; u32 features;
u32 flags; u32 flags;
const void *driver_data;
/* /*
* Called to issue a PHY software reset * Called to issue a PHY software reset
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment