Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 171816
b: refs/heads/master
c: 981fc1b
h: refs/heads/master
v: v3
  • Loading branch information
Ben Hutchings authored and David S. Miller committed Nov 24, 2009
1 parent ab80e23 commit cb88124
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 398468ed1b5c61fe8bcbc8cc1ed323e3c23b58ef
refs/heads/master: 981fc1b4b8cc6bfe8c6f0c07052e25738d959c68
2 changes: 1 addition & 1 deletion trunk/drivers/net/sfc/efx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1910,7 +1910,7 @@ static struct efx_phy_operations efx_dummy_phy_operations = {

static struct efx_board efx_dummy_board_info = {
.init = efx_port_dummy_op_int,
.init_leds = efx_port_dummy_op_void,
.init_phy = efx_port_dummy_op_void,
.set_id_led = efx_port_dummy_op_set_id_led,
.monitor = efx_port_dummy_op_int,
.fini = efx_port_dummy_op_void,
Expand Down
43 changes: 25 additions & 18 deletions trunk/drivers/net/sfc/falcon_boards.c
Original file line number Diff line number Diff line change
Expand Up @@ -499,9 +499,22 @@ static struct i2c_board_info sfn4111t_r5_hwmon_info = {
I2C_BOARD_INFO("max6646", 0x4d),
};

static void sfn4111t_init_phy(struct efx_nic *efx)
{
if (!(efx->phy_mode & PHY_MODE_SPECIAL)) {
if (sft9001_wait_boot(efx) != -EINVAL)
return;

efx->phy_mode = PHY_MODE_SPECIAL;
efx_stats_disable(efx);
}

sfn4111t_reset(efx);
sft9001_wait_boot(efx);
}

static int sfn4111t_init(struct efx_nic *efx)
{
int i = 0;
int rc;

efx->board_info.hwmon_client =
Expand All @@ -512,6 +525,7 @@ static int sfn4111t_init(struct efx_nic *efx)
if (!efx->board_info.hwmon_client)
return -EIO;

efx->board_info.init_phy = sfn4111t_init_phy;
efx->board_info.set_id_led = tenxpress_set_id_led;
efx->board_info.monitor = sfn4111t_check_hw;
efx->board_info.fini = sfn4111t_fini;
Expand All @@ -520,20 +534,13 @@ static int sfn4111t_init(struct efx_nic *efx)
if (rc)
goto fail_hwmon;

do {
if (efx->phy_mode & PHY_MODE_SPECIAL) {
/* PHY may not generate a 156.25 MHz clock and MAC
* stats fetch will fail. */
efx_stats_disable(efx);
sfn4111t_reset(efx);
}
rc = sft9001_wait_boot(efx);
if (rc == 0)
return 0;
efx->phy_mode = PHY_MODE_SPECIAL;
} while (rc == -EINVAL && ++i < 2);
if (efx->phy_mode & PHY_MODE_SPECIAL)
/* PHY may not generate a 156.25 MHz clock and MAC
* stats fetch will fail. */
efx_stats_disable(efx);

return 0;

device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_flash_cfg);
fail_hwmon:
i2c_unregister_device(efx->board_info.hwmon_client);
return rc;
Expand Down Expand Up @@ -574,7 +581,7 @@ static struct i2c_board_info sfe4002_hwmon_info = {
#define SFE4002_RX_LED (0) /* Green */
#define SFE4002_TX_LED (1) /* Amber */

static void sfe4002_init_leds(struct efx_nic *efx)
static void sfe4002_init_phy(struct efx_nic *efx)
{
/* Set the TX and RX LEDs to reflect status and activity, and the
* fault LED off */
Expand Down Expand Up @@ -609,7 +616,7 @@ static int sfe4002_init(struct efx_nic *efx)
if (rc)
return rc;
efx->board_info.monitor = sfe4002_check_hw;
efx->board_info.init_leds = sfe4002_init_leds;
efx->board_info.init_phy = sfe4002_init_phy;
efx->board_info.set_id_led = sfe4002_set_id_led;
efx->board_info.fini = efx_fini_lm87;
return 0;
Expand Down Expand Up @@ -641,7 +648,7 @@ static struct i2c_board_info sfn4112f_hwmon_info = {
#define SFN4112F_ACT_LED 0
#define SFN4112F_LINK_LED 1

static void sfn4112f_init_leds(struct efx_nic *efx)
static void sfn4112f_init_phy(struct efx_nic *efx)
{
falcon_qt202x_set_led(efx, SFN4112F_ACT_LED,
QUAKE_LED_RXLINK | QUAKE_LED_LINK_ACT);
Expand Down Expand Up @@ -680,7 +687,7 @@ static int sfn4112f_init(struct efx_nic *efx)
if (rc)
return rc;
efx->board_info.monitor = sfn4112f_check_hw;
efx->board_info.init_leds = sfn4112f_init_leds;
efx->board_info.init_phy = sfn4112f_init_phy;
efx->board_info.set_id_led = sfn4112f_set_id_led;
efx->board_info.fini = efx_fini_lm87;
return 0;
Expand Down
11 changes: 4 additions & 7 deletions trunk/drivers/net/sfc/net_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -399,11 +399,11 @@ enum efx_led_mode {
* @type: Board model type
* @major: Major rev. ('A', 'B' ...)
* @minor: Minor rev. (0, 1, ...)
* @init: Initialisation function
* @init_leds: Sets up board LEDs. May be called repeatedly.
* @init: Allocate resources and initialise peripheral hardware
* @init_phy: Do board-specific PHY initialisation
* @set_id_led: Set state of identifying LED or revert to automatic function
* @monitor: Board-specific health check function
* @fini: Cleanup function
* @fini: Shut down hardware and free resources
* @hwmon_client: I2C client for hardware monitor
* @ioexp_client: I2C client for power/port control
*/
Expand All @@ -412,10 +412,7 @@ struct efx_board {
int major;
int minor;
int (*init) (struct efx_nic *nic);
/* As the LEDs are typically attached to the PHY, LEDs
* have a separate init callback that happens later than
* board init. */
void (*init_leds)(struct efx_nic *efx);
void (*init_phy) (struct efx_nic *efx);
void (*set_id_led) (struct efx_nic *efx, enum efx_led_mode mode);
int (*monitor) (struct efx_nic *nic);
void (*fini) (struct efx_nic *nic);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/sfc/qt202x_phy.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ static int qt202x_reset_phy(struct efx_nic *efx)
if (rc < 0)
goto fail;

efx->board_info.init_leds(efx);
efx->board_info.init_phy(efx);

return rc;

Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/net/sfc/tenxpress.c
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,8 @@ static int tenxpress_phy_init(struct efx_nic *efx)
u16 old_adv, adv;
int rc = 0;

efx->board_info.init_phy(efx);

phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL);
if (!phy_data)
return -ENOMEM;
Expand Down

0 comments on commit cb88124

Please sign in to comment.