Skip to content

Commit ef672e4

Browse files
author
Paolo Abeni
committed
Merge branch 'txgbe-feat-new-aml-firmware'
Jiawen Wu says: ==================== TXGBE feat new AML firmware The firmware of AML devices are redesigned to adapt to more PHY interfaces. Optimize the driver to be compatible with the new firmware. v1: https://lore.kernel.org/all/[email protected]/ ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
2 parents 00922ee + a058de9 commit ef672e4

File tree

3 files changed

+20
-41
lines changed

3 files changed

+20
-41
lines changed

drivers/net/ethernet/wangxun/libwx/wx_type.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,8 +1271,6 @@ struct wx {
12711271

12721272
/* PHY stuff */
12731273
bool notify_down;
1274-
int adv_speed;
1275-
int adv_duplex;
12761274
unsigned int link;
12771275
int speed;
12781276
int duplex;

drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ void txgbe_gpio_init_aml(struct wx *wx)
1919
{
2020
u32 status;
2121

22-
wr32(wx, WX_GPIO_INTTYPE_LEVEL, TXGBE_GPIOBIT_2 | TXGBE_GPIOBIT_3);
23-
wr32(wx, WX_GPIO_INTEN, TXGBE_GPIOBIT_2 | TXGBE_GPIOBIT_3);
22+
wr32(wx, WX_GPIO_INTTYPE_LEVEL, TXGBE_GPIOBIT_2);
23+
wr32(wx, WX_GPIO_INTEN, TXGBE_GPIOBIT_2);
2424

2525
status = rd32(wx, WX_GPIO_INTSTATUS);
2626
for (int i = 0; i < 6; i++) {
@@ -42,11 +42,6 @@ irqreturn_t txgbe_gpio_irq_handler_aml(int irq, void *data)
4242
wr32(wx, WX_GPIO_EOI, TXGBE_GPIOBIT_2);
4343
wx_service_event_schedule(wx);
4444
}
45-
if (status & TXGBE_GPIOBIT_3) {
46-
set_bit(WX_FLAG_NEED_LINK_CONFIG, wx->flags);
47-
wx_service_event_schedule(wx);
48-
wr32(wx, WX_GPIO_EOI, TXGBE_GPIOBIT_3);
49-
}
5045

5146
wr32(wx, WX_GPIO_INTMASK, 0);
5247
return IRQ_HANDLED;
@@ -96,6 +91,9 @@ static int txgbe_set_phy_link_hostif(struct wx *wx, int speed, int autoneg, int
9691
case SPEED_10000:
9792
buffer.speed = TXGBE_LINK_SPEED_10GB_FULL;
9893
break;
94+
default:
95+
buffer.speed = TXGBE_LINK_SPEED_UNKNOWN;
96+
break;
9997
}
10098

10199
buffer.fec_mode = TXGBE_PHY_FEC_AUTO;
@@ -106,22 +104,21 @@ static int txgbe_set_phy_link_hostif(struct wx *wx, int speed, int autoneg, int
106104
WX_HI_COMMAND_TIMEOUT, true);
107105
}
108106

109-
static void txgbe_get_link_capabilities(struct wx *wx)
107+
static void txgbe_get_link_capabilities(struct wx *wx, int *speed, int *duplex)
110108
{
111109
struct txgbe *txgbe = wx->priv;
112110

113111
if (test_bit(PHY_INTERFACE_MODE_25GBASER, txgbe->sfp_interfaces))
114-
wx->adv_speed = SPEED_25000;
112+
*speed = SPEED_25000;
115113
else if (test_bit(PHY_INTERFACE_MODE_10GBASER, txgbe->sfp_interfaces))
116-
wx->adv_speed = SPEED_10000;
114+
*speed = SPEED_10000;
117115
else
118-
wx->adv_speed = SPEED_UNKNOWN;
116+
*speed = SPEED_UNKNOWN;
119117

120-
wx->adv_duplex = wx->adv_speed == SPEED_UNKNOWN ?
121-
DUPLEX_HALF : DUPLEX_FULL;
118+
*duplex = *speed == SPEED_UNKNOWN ? DUPLEX_HALF : DUPLEX_FULL;
122119
}
123120

124-
static void txgbe_get_phy_link(struct wx *wx, int *speed)
121+
static void txgbe_get_mac_link(struct wx *wx, int *speed)
125122
{
126123
u32 status;
127124

@@ -138,23 +135,11 @@ static void txgbe_get_phy_link(struct wx *wx, int *speed)
138135

139136
int txgbe_set_phy_link(struct wx *wx)
140137
{
141-
int speed, err;
142-
u32 gpio;
143-
144-
/* Check RX signal */
145-
gpio = rd32(wx, WX_GPIO_EXT);
146-
if (gpio & TXGBE_GPIOBIT_3)
147-
return -ENODEV;
138+
int speed, duplex, err;
148139

149-
txgbe_get_link_capabilities(wx);
150-
if (wx->adv_speed == SPEED_UNKNOWN)
151-
return -ENODEV;
152-
153-
txgbe_get_phy_link(wx, &speed);
154-
if (speed == wx->adv_speed)
155-
return 0;
140+
txgbe_get_link_capabilities(wx, &speed, &duplex);
156141

157-
err = txgbe_set_phy_link_hostif(wx, wx->adv_speed, 0, wx->adv_duplex);
142+
err = txgbe_set_phy_link_hostif(wx, speed, 0, duplex);
158143
if (err) {
159144
wx_err(wx, "Failed to setup link\n");
160145
return err;
@@ -230,14 +215,7 @@ int txgbe_identify_sfp(struct wx *wx)
230215
return -ENODEV;
231216
}
232217

233-
err = txgbe_sfp_to_linkmodes(wx, id);
234-
if (err)
235-
return err;
236-
237-
if (gpio & TXGBE_GPIOBIT_3)
238-
set_bit(WX_FLAG_NEED_LINK_CONFIG, wx->flags);
239-
240-
return 0;
218+
return txgbe_sfp_to_linkmodes(wx, id);
241219
}
242220

243221
void txgbe_setup_link(struct wx *wx)
@@ -256,7 +234,7 @@ static void txgbe_get_link_state(struct phylink_config *config,
256234
struct wx *wx = phylink_to_wx(config);
257235
int speed;
258236

259-
txgbe_get_phy_link(wx, &speed);
237+
txgbe_get_mac_link(wx, &speed);
260238
state->link = speed != SPEED_UNKNOWN;
261239
state->speed = speed;
262240
state->duplex = state->link ? DUPLEX_FULL : DUPLEX_UNKNOWN;

drivers/net/ethernet/wangxun/txgbe/txgbe_type.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ void txgbe_up(struct wx *wx);
314314
int txgbe_setup_tc(struct net_device *dev, u8 tc);
315315
void txgbe_do_reset(struct net_device *netdev);
316316

317+
#define TXGBE_LINK_SPEED_UNKNOWN 0
317318
#define TXGBE_LINK_SPEED_10GB_FULL 4
318319
#define TXGBE_LINK_SPEED_25GB_FULL 0x10
319320

@@ -352,7 +353,9 @@ struct txgbe_sfp_id {
352353
u8 vendor_oui0; /* A0H 0x25 */
353354
u8 vendor_oui1; /* A0H 0x26 */
354355
u8 vendor_oui2; /* A0H 0x27 */
355-
u8 reserved[3];
356+
u8 transceiver_type; /* A0H 0x83 */
357+
u8 sff_opt1; /* A0H 0xC0 */
358+
u8 reserved[5];
356359
};
357360

358361
struct txgbe_hic_i2c_read {

0 commit comments

Comments
 (0)