Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
9dd3a13b
Commit
9dd3a13b
authored
Sep 13, 2012
by
Ben Hutchings
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sfc: Move details of a Falcon bug workaround out of ethtool.c
Signed-off-by:
Ben Hutchings
<
bhutchings@solarflare.com
>
parent
e847b53e
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
31 additions
and
23 deletions
+31
-23
drivers/net/ethernet/sfc/ethtool.c
drivers/net/ethernet/sfc/ethtool.c
+4
-19
drivers/net/ethernet/sfc/falcon.c
drivers/net/ethernet/sfc/falcon.c
+25
-1
drivers/net/ethernet/sfc/net_driver.h
drivers/net/ethernet/sfc/net_driver.h
+2
-0
drivers/net/ethernet/sfc/nic.h
drivers/net/ethernet/sfc/nic.h
+0
-1
drivers/net/ethernet/sfc/workarounds.h
drivers/net/ethernet/sfc/workarounds.h
+0
-2
No files found.
drivers/net/ethernet/sfc/ethtool.c
View file @
9dd3a13b
...
...
@@ -709,7 +709,6 @@ static int efx_ethtool_set_pauseparam(struct net_device *net_dev,
struct
efx_nic
*
efx
=
netdev_priv
(
net_dev
);
u8
wanted_fc
,
old_fc
;
u32
old_adv
;
bool
reset
;
int
rc
=
0
;
mutex_lock
(
&
efx
->
mac_lock
);
...
...
@@ -732,24 +731,10 @@ static int efx_ethtool_set_pauseparam(struct net_device *net_dev,
goto
out
;
}
/* TX flow control may automatically turn itself off if the
* link partner (intermittently) stops responding to pause
* frames. There isn't any indication that this has happened,
* so the best we do is leave it up to the user to spot this
* and fix it be cycling transmit flow control on this end. */
reset
=
(
wanted_fc
&
EFX_FC_TX
)
&&
!
(
efx
->
wanted_fc
&
EFX_FC_TX
);
if
(
EFX_WORKAROUND_11482
(
efx
)
&&
reset
)
{
if
(
efx_nic_rev
(
efx
)
==
EFX_REV_FALCON_B0
)
{
/* Recover by resetting the EM block */
falcon_stop_nic_stats
(
efx
);
falcon_drain_tx_fifo
(
efx
);
falcon_reconfigure_xmac
(
efx
);
falcon_start_nic_stats
(
efx
);
}
else
{
/* Schedule a reset to recover */
efx_schedule_reset
(
efx
,
RESET_TYPE_INVISIBLE
);
}
}
/* Hook for Falcon bug 11482 workaround */
if
(
efx
->
type
->
prepare_enable_fc_tx
&&
(
wanted_fc
&
EFX_FC_TX
)
&&
!
(
efx
->
wanted_fc
&
EFX_FC_TX
))
efx
->
type
->
prepare_enable_fc_tx
(
efx
);
old_adv
=
efx
->
link_advertising
;
old_fc
=
efx
->
wanted_fc
;
...
...
drivers/net/ethernet/sfc/falcon.c
View file @
9dd3a13b
...
...
@@ -497,7 +497,7 @@ static void falcon_reset_macs(struct efx_nic *efx)
falcon_setup_xaui
(
efx
);
}
void
falcon_drain_tx_fifo
(
struct
efx_nic
*
efx
)
static
void
falcon_drain_tx_fifo
(
struct
efx_nic
*
efx
)
{
efx_oword_t
reg
;
...
...
@@ -678,6 +678,28 @@ static int falcon_reconfigure_port(struct efx_nic *efx)
return
0
;
}
/* TX flow control may automatically turn itself off if the link
* partner (intermittently) stops responding to pause frames. There
* isn't any indication that this has happened, so the best we do is
* leave it up to the user to spot this and fix it by cycling transmit
* flow control on this end.
*/
static
void
falcon_a1_prepare_enable_fc_tx
(
struct
efx_nic
*
efx
)
{
/* Schedule a reset to recover */
efx_schedule_reset
(
efx
,
RESET_TYPE_INVISIBLE
);
}
static
void
falcon_b0_prepare_enable_fc_tx
(
struct
efx_nic
*
efx
)
{
/* Recover by resetting the EM block */
falcon_stop_nic_stats
(
efx
);
falcon_drain_tx_fifo
(
efx
);
falcon_reconfigure_xmac
(
efx
);
falcon_start_nic_stats
(
efx
);
}
/**************************************************************************
*
* PHY access via GMII
...
...
@@ -1798,6 +1820,7 @@ const struct efx_nic_type falcon_a1_nic_type = {
.
set_id_led
=
falcon_set_id_led
,
.
push_irq_moderation
=
falcon_push_irq_moderation
,
.
reconfigure_port
=
falcon_reconfigure_port
,
.
prepare_enable_fc_tx
=
falcon_a1_prepare_enable_fc_tx
,
.
reconfigure_mac
=
falcon_reconfigure_xmac
,
.
check_mac_fault
=
falcon_xmac_check_fault
,
.
get_wol
=
falcon_get_wol
,
...
...
@@ -1842,6 +1865,7 @@ const struct efx_nic_type falcon_b0_nic_type = {
.
set_id_led
=
falcon_set_id_led
,
.
push_irq_moderation
=
falcon_push_irq_moderation
,
.
reconfigure_port
=
falcon_reconfigure_port
,
.
prepare_enable_fc_tx
=
falcon_b0_prepare_enable_fc_tx
,
.
reconfigure_mac
=
falcon_reconfigure_xmac
,
.
check_mac_fault
=
falcon_xmac_check_fault
,
.
get_wol
=
falcon_get_wol
,
...
...
drivers/net/ethernet/sfc/net_driver.h
View file @
9dd3a13b
...
...
@@ -946,6 +946,7 @@ static inline unsigned int efx_port_num(struct efx_nic *efx)
* @set_id_led: Set state of identifying LED or revert to automatic function
* @push_irq_moderation: Apply interrupt moderation value
* @reconfigure_port: Push loopback/power/txdis changes to the MAC and PHY
* @prepare_enable_fc_tx: Prepare MAC to enable pause frame TX (may be %NULL)
* @reconfigure_mac: Push MAC address, MTU, flow control and filter settings
* to the hardware. Serialised by the mac_lock.
* @check_mac_fault: Check MAC fault state. True if fault present.
...
...
@@ -995,6 +996,7 @@ struct efx_nic_type {
void
(
*
set_id_led
)(
struct
efx_nic
*
efx
,
enum
efx_led_mode
mode
);
void
(
*
push_irq_moderation
)(
struct
efx_channel
*
channel
);
int
(
*
reconfigure_port
)(
struct
efx_nic
*
efx
);
void
(
*
prepare_enable_fc_tx
)(
struct
efx_nic
*
efx
);
int
(
*
reconfigure_mac
)(
struct
efx_nic
*
efx
);
bool
(
*
check_mac_fault
)(
struct
efx_nic
*
efx
);
void
(
*
get_wol
)(
struct
efx_nic
*
efx
,
struct
ethtool_wolinfo
*
wol
);
...
...
drivers/net/ethernet/sfc/nic.h
View file @
9dd3a13b
...
...
@@ -298,7 +298,6 @@ extern void efx_nic_eventq_read_ack(struct efx_channel *channel);
extern
bool
efx_nic_event_present
(
struct
efx_channel
*
channel
);
/* MAC/PHY */
extern
void
falcon_drain_tx_fifo
(
struct
efx_nic
*
efx
);
extern
void
falcon_reconfigure_mac_wrapper
(
struct
efx_nic
*
efx
);
extern
bool
falcon_xmac_check_fault
(
struct
efx_nic
*
efx
);
extern
int
falcon_reconfigure_xmac
(
struct
efx_nic
*
efx
);
...
...
drivers/net/ethernet/sfc/workarounds.h
View file @
9dd3a13b
...
...
@@ -30,8 +30,6 @@
/* TX_EV_PKT_ERR can be caused by a dangling TX descriptor
* or a PCIe error (bug 11028) */
#define EFX_WORKAROUND_10727 EFX_WORKAROUND_ALWAYS
/* Transmit flow control may get disabled */
#define EFX_WORKAROUND_11482 EFX_WORKAROUND_FALCON_AB
/* Truncated IPv4 packets can confuse the TX packet parser */
#define EFX_WORKAROUND_15592 EFX_WORKAROUND_FALCON_AB
/* Legacy ISR read can return zero once */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment