Skip to content

Commit d48f782

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: "A decent batch of fixes here. I'd say about half are for problems that have existed for a while, and half are for new regressions added in the 4.20 merge window. 1) Fix 10G SFP phy module detection in mvpp2, from Baruch Siach. 2) Revert bogus emac driver change, from Benjamin Herrenschmidt. 3) Handle BPF exported data structure with pointers when building 32-bit userland, from Daniel Borkmann. 4) Memory leak fix in act_police, from Davide Caratti. 5) Check RX checksum offload in RX descriptors properly in aquantia driver, from Dmitry Bogdanov. 6) SKB unlink fix in various spots, from Edward Cree. 7) ndo_dflt_fdb_dump() only works with ethernet, enforce this, from Eric Dumazet. 8) Fix FID leak in mlxsw driver, from Ido Schimmel. 9) IOTLB locking fix in vhost, from Jean-Philippe Brucker. 10) Fix SKB truesize accounting in ipv4/ipv6/netfilter frag memory limits otherwise namespace exit can hang. From Jiri Wiesner. 11) Address block parsing length fixes in x25 from Martin Schiller. 12) IRQ and ring accounting fixes in bnxt_en, from Michael Chan. 13) For tun interfaces, only iface delete works with rtnl ops, enforce this by disallowing add. From Nicolas Dichtel. 14) Use after free in liquidio, from Pan Bian. 15) Fix SKB use after passing to netif_receive_skb(), from Prashant Bhole. 16) Static key accounting and other fixes in XPS from Sabrina Dubroca. 17) Partially initialized flow key passed to ip6_route_output(), from Shmulik Ladkani. 18) Fix RTNL deadlock during reset in ibmvnic driver, from Thomas Falcon. 19) Several small TCP fixes (off-by-one on window probe abort, NULL deref in tail loss probe, SNMP mis-estimations) from Yuchung Cheng" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (93 commits) net/sched: cls_flower: Reject duplicated rules also under skip_sw bnxt_en: Fix _bnxt_get_max_rings() for 57500 chips. bnxt_en: Fix NQ/CP rings accounting on the new 57500 chips. bnxt_en: Keep track of reserved IRQs. bnxt_en: Fix CNP CoS queue regression. net/mlx4_core: Correctly set PFC param if global pause is turned off. Revert "net/ibm/emac: wrong bit is used for STA control" neighbour: Avoid writing before skb->head in neigh_hh_output() ipv6: Check available headroom in ip6_xmit() even without options tcp: lack of available data can also cause TSO defer ipv6: sr: properly initialize flowi6 prior passing to ip6_route_output mlxsw: spectrum_switchdev: Fix VLAN device deletion via ioctl mlxsw: spectrum_router: Relax GRE decap matching check mlxsw: spectrum_switchdev: Avoid leaking FID's reference count mlxsw: spectrum_nve: Remove easily triggerable warnings ipv4: ipv6: netfilter: Adjust the frag mem limit when truesize changes sctp: frag_point sanity check tcp: fix NULL ref in tail loss probe tcp: Do not underestimate rwnd_limited net: use skb_list_del_init() to remove from RX sublists ...
2 parents 8586ca8 + 35cc3ce commit d48f782

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+1225
-368
lines changed

Documentation/ABI/testing/sysfs-class-net-dsa

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
What: /sys/class/net/<iface>/tagging
1+
What: /sys/class/net/<iface>/dsa/tagging
22
Date: August 2018
33
KernelVersion: 4.20
44
Contact: netdev@vger.kernel.org

MAINTAINERS

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13890,6 +13890,13 @@ F: drivers/md/raid*
1389013890
F: include/linux/raid/
1389113891
F: include/uapi/linux/raid/
1389213892

13893+
SOCIONEXT (SNI) AVE NETWORK DRIVER
13894+
M: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
13895+
L: netdev@vger.kernel.org
13896+
S: Maintained
13897+
F: drivers/net/ethernet/socionext/sni_ave.c
13898+
F: Documentation/devicetree/bindings/net/socionext,uniphier-ave4.txt
13899+
1389313900
SOCIONEXT (SNI) NETSEC NETWORK DRIVER
1389413901
M: Jassi Brar <jaswinder.singh@linaro.org>
1389513902
L: netdev@vger.kernel.org

arch/powerpc/net/bpf_jit_comp64.c

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,55 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
891891
return 0;
892892
}
893893

894+
/* Fix the branch target addresses for subprog calls */
895+
static int bpf_jit_fixup_subprog_calls(struct bpf_prog *fp, u32 *image,
896+
struct codegen_context *ctx, u32 *addrs)
897+
{
898+
const struct bpf_insn *insn = fp->insnsi;
899+
bool func_addr_fixed;
900+
u64 func_addr;
901+
u32 tmp_idx;
902+
int i, ret;
903+
904+
for (i = 0; i < fp->len; i++) {
905+
/*
906+
* During the extra pass, only the branch target addresses for
907+
* the subprog calls need to be fixed. All other instructions
908+
* can left untouched.
909+
*
910+
* The JITed image length does not change because we already
911+
* ensure that the JITed instruction sequence for these calls
912+
* are of fixed length by padding them with NOPs.
913+
*/
914+
if (insn[i].code == (BPF_JMP | BPF_CALL) &&
915+
insn[i].src_reg == BPF_PSEUDO_CALL) {
916+
ret = bpf_jit_get_func_addr(fp, &insn[i], true,
917+
&func_addr,
918+
&func_addr_fixed);
919+
if (ret < 0)
920+
return ret;
921+
922+
/*
923+
* Save ctx->idx as this would currently point to the
924+
* end of the JITed image and set it to the offset of
925+
* the instruction sequence corresponding to the
926+
* subprog call temporarily.
927+
*/
928+
tmp_idx = ctx->idx;
929+
ctx->idx = addrs[i] / 4;
930+
bpf_jit_emit_func_call_rel(image, ctx, func_addr);
931+
932+
/*
933+
* Restore ctx->idx here. This is safe as the length
934+
* of the JITed sequence remains unchanged.
935+
*/
936+
ctx->idx = tmp_idx;
937+
}
938+
}
939+
940+
return 0;
941+
}
942+
894943
struct powerpc64_jit_data {
895944
struct bpf_binary_header *header;
896945
u32 *addrs;
@@ -989,6 +1038,22 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
9891038
skip_init_ctx:
9901039
code_base = (u32 *)(image + FUNCTION_DESCR_SIZE);
9911040

1041+
if (extra_pass) {
1042+
/*
1043+
* Do not touch the prologue and epilogue as they will remain
1044+
* unchanged. Only fix the branch target address for subprog
1045+
* calls in the body.
1046+
*
1047+
* This does not change the offsets and lengths of the subprog
1048+
* call instruction sequences and hence, the size of the JITed
1049+
* image as well.
1050+
*/
1051+
bpf_jit_fixup_subprog_calls(fp, code_base, &cgctx, addrs);
1052+
1053+
/* There is no need to perform the usual passes. */
1054+
goto skip_codegen_passes;
1055+
}
1056+
9921057
/* Code generation passes 1-2 */
9931058
for (pass = 1; pass < 3; pass++) {
9941059
/* Now build the prologue, body code & epilogue for real. */
@@ -1002,6 +1067,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
10021067
proglen - (cgctx.idx * 4), cgctx.seen);
10031068
}
10041069

1070+
skip_codegen_passes:
10051071
if (bpf_jit_enable > 1)
10061072
/*
10071073
* Note that we output the base address of the code_base

drivers/net/bonding/bond_3ad.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2086,6 +2086,9 @@ void bond_3ad_unbind_slave(struct slave *slave)
20862086
aggregator->aggregator_identifier);
20872087

20882088
/* Tell the partner that this port is not suitable for aggregation */
2089+
port->actor_oper_port_state &= ~AD_STATE_SYNCHRONIZATION;
2090+
port->actor_oper_port_state &= ~AD_STATE_COLLECTING;
2091+
port->actor_oper_port_state &= ~AD_STATE_DISTRIBUTING;
20892092
port->actor_oper_port_state &= ~AD_STATE_AGGREGATION;
20902093
__update_lacpdu_from_port(port);
20912094
ad_lacpdu_send(port);

drivers/net/dsa/mv88e6060.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,7 @@ static int mv88e6060_switch_reset(struct dsa_switch *ds)
116116
/* Reset the switch. */
117117
REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL,
118118
GLOBAL_ATU_CONTROL_SWRESET |
119-
GLOBAL_ATU_CONTROL_ATUSIZE_1024 |
120-
GLOBAL_ATU_CONTROL_ATE_AGE_5MIN);
119+
GLOBAL_ATU_CONTROL_LEARNDIS);
121120

122121
/* Wait up to one second for reset to complete. */
123122
timeout = jiffies + 1 * HZ;
@@ -142,13 +141,10 @@ static int mv88e6060_setup_global(struct dsa_switch *ds)
142141
*/
143142
REG_WRITE(REG_GLOBAL, GLOBAL_CONTROL, GLOBAL_CONTROL_MAX_FRAME_1536);
144143

145-
/* Enable automatic address learning, set the address
146-
* database size to 1024 entries, and set the default aging
147-
* time to 5 minutes.
144+
/* Disable automatic address learning.
148145
*/
149146
REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL,
150-
GLOBAL_ATU_CONTROL_ATUSIZE_1024 |
151-
GLOBAL_ATU_CONTROL_ATE_AGE_5MIN);
147+
GLOBAL_ATU_CONTROL_LEARNDIS);
152148

153149
return 0;
154150
}

drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@ static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self,
674674

675675
rx_stat = (0x0000003CU & rxd_wb->status) >> 2;
676676

677-
is_rx_check_sum_enabled = (rxd_wb->type) & (0x3U << 19);
677+
is_rx_check_sum_enabled = (rxd_wb->type >> 19) & 0x3U;
678678

679679
pkt_type = 0xFFU & (rxd_wb->type >> 4);
680680

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5162,6 +5162,7 @@ static int bnxt_hwrm_get_rings(struct bnxt *bp)
51625162
cp = le16_to_cpu(resp->alloc_cmpl_rings);
51635163
stats = le16_to_cpu(resp->alloc_stat_ctx);
51645164
cp = min_t(u16, cp, stats);
5165+
hw_resc->resv_irqs = cp;
51655166
if (bp->flags & BNXT_FLAG_CHIP_P5) {
51665167
int rx = hw_resc->resv_rx_rings;
51675168
int tx = hw_resc->resv_tx_rings;
@@ -5175,7 +5176,7 @@ static int bnxt_hwrm_get_rings(struct bnxt *bp)
51755176
hw_resc->resv_rx_rings = rx;
51765177
hw_resc->resv_tx_rings = tx;
51775178
}
5178-
cp = le16_to_cpu(resp->alloc_msix);
5179+
hw_resc->resv_irqs = le16_to_cpu(resp->alloc_msix);
51795180
hw_resc->resv_hw_ring_grps = rx;
51805181
}
51815182
hw_resc->resv_cp_rings = cp;
@@ -5353,7 +5354,7 @@ static int bnxt_hwrm_reserve_rings(struct bnxt *bp, int tx, int rx, int grp,
53535354
return bnxt_hwrm_reserve_vf_rings(bp, tx, rx, grp, cp, vnic);
53545355
}
53555356

5356-
static int bnxt_cp_rings_in_use(struct bnxt *bp)
5357+
static int bnxt_nq_rings_in_use(struct bnxt *bp)
53575358
{
53585359
int cp = bp->cp_nr_rings;
53595360
int ulp_msix, ulp_base;
@@ -5368,10 +5369,22 @@ static int bnxt_cp_rings_in_use(struct bnxt *bp)
53685369
return cp;
53695370
}
53705371

5372+
static int bnxt_cp_rings_in_use(struct bnxt *bp)
5373+
{
5374+
int cp;
5375+
5376+
if (!(bp->flags & BNXT_FLAG_CHIP_P5))
5377+
return bnxt_nq_rings_in_use(bp);
5378+
5379+
cp = bp->tx_nr_rings + bp->rx_nr_rings;
5380+
return cp;
5381+
}
5382+
53715383
static bool bnxt_need_reserve_rings(struct bnxt *bp)
53725384
{
53735385
struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
53745386
int cp = bnxt_cp_rings_in_use(bp);
5387+
int nq = bnxt_nq_rings_in_use(bp);
53755388
int rx = bp->rx_nr_rings;
53765389
int vnic = 1, grp = rx;
53775390

@@ -5387,7 +5400,7 @@ static bool bnxt_need_reserve_rings(struct bnxt *bp)
53875400
rx <<= 1;
53885401
if (BNXT_NEW_RM(bp) &&
53895402
(hw_resc->resv_rx_rings != rx || hw_resc->resv_cp_rings != cp ||
5390-
hw_resc->resv_vnics != vnic ||
5403+
hw_resc->resv_irqs < nq || hw_resc->resv_vnics != vnic ||
53915404
(hw_resc->resv_hw_ring_grps != grp &&
53925405
!(bp->flags & BNXT_FLAG_CHIP_P5))))
53935406
return true;
@@ -5397,7 +5410,7 @@ static bool bnxt_need_reserve_rings(struct bnxt *bp)
53975410
static int __bnxt_reserve_rings(struct bnxt *bp)
53985411
{
53995412
struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
5400-
int cp = bnxt_cp_rings_in_use(bp);
5413+
int cp = bnxt_nq_rings_in_use(bp);
54015414
int tx = bp->tx_nr_rings;
54025415
int rx = bp->rx_nr_rings;
54035416
int grp, rx_rings, rc;
@@ -5422,7 +5435,7 @@ static int __bnxt_reserve_rings(struct bnxt *bp)
54225435
tx = hw_resc->resv_tx_rings;
54235436
if (BNXT_NEW_RM(bp)) {
54245437
rx = hw_resc->resv_rx_rings;
5425-
cp = hw_resc->resv_cp_rings;
5438+
cp = hw_resc->resv_irqs;
54265439
grp = hw_resc->resv_hw_ring_grps;
54275440
vnic = hw_resc->resv_vnics;
54285441
}
@@ -6292,13 +6305,20 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
62926305
return rc;
62936306
}
62946307

6308+
static int bnxt_hwrm_queue_qportcfg(struct bnxt *bp);
6309+
62956310
static int bnxt_hwrm_func_qcaps(struct bnxt *bp)
62966311
{
62976312
int rc;
62986313

62996314
rc = __bnxt_hwrm_func_qcaps(bp);
63006315
if (rc)
63016316
return rc;
6317+
rc = bnxt_hwrm_queue_qportcfg(bp);
6318+
if (rc) {
6319+
netdev_err(bp->dev, "hwrm query qportcfg failure rc: %d\n", rc);
6320+
return rc;
6321+
}
63026322
if (bp->hwrm_spec_code >= 0x10803) {
63036323
rc = bnxt_alloc_ctx_mem(bp);
63046324
if (rc)
@@ -7026,7 +7046,12 @@ unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp)
70267046

70277047
unsigned int bnxt_get_max_func_cp_rings_for_en(struct bnxt *bp)
70287048
{
7029-
return bp->hw_resc.max_cp_rings - bnxt_get_ulp_msix_num(bp);
7049+
unsigned int cp = bp->hw_resc.max_cp_rings;
7050+
7051+
if (!(bp->flags & BNXT_FLAG_CHIP_P5))
7052+
cp -= bnxt_get_ulp_msix_num(bp);
7053+
7054+
return cp;
70307055
}
70317056

70327057
static unsigned int bnxt_get_max_func_irqs(struct bnxt *bp)
@@ -7048,7 +7073,9 @@ int bnxt_get_avail_msix(struct bnxt *bp, int num)
70487073
int total_req = bp->cp_nr_rings + num;
70497074
int max_idx, avail_msix;
70507075

7051-
max_idx = min_t(int, bp->total_irqs, max_cp);
7076+
max_idx = bp->total_irqs;
7077+
if (!(bp->flags & BNXT_FLAG_CHIP_P5))
7078+
max_idx = min_t(int, bp->total_irqs, max_cp);
70527079
avail_msix = max_idx - bp->cp_nr_rings;
70537080
if (!BNXT_NEW_RM(bp) || avail_msix >= num)
70547081
return avail_msix;
@@ -7066,7 +7093,7 @@ static int bnxt_get_num_msix(struct bnxt *bp)
70667093
if (!BNXT_NEW_RM(bp))
70677094
return bnxt_get_max_func_irqs(bp);
70687095

7069-
return bnxt_cp_rings_in_use(bp);
7096+
return bnxt_nq_rings_in_use(bp);
70707097
}
70717098

70727099
static int bnxt_init_msix(struct bnxt *bp)
@@ -7794,6 +7821,7 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
77947821

77957822
rc = bnxt_hwrm_func_resc_qcaps(bp, true);
77967823
hw_resc->resv_cp_rings = 0;
7824+
hw_resc->resv_irqs = 0;
77977825
hw_resc->resv_tx_rings = 0;
77987826
hw_resc->resv_rx_rings = 0;
77997827
hw_resc->resv_hw_ring_grps = 0;
@@ -9799,20 +9827,28 @@ static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx,
97999827
int *max_cp)
98009828
{
98019829
struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
9802-
int max_ring_grps = 0;
9830+
int max_ring_grps = 0, max_irq;
98039831

98049832
*max_tx = hw_resc->max_tx_rings;
98059833
*max_rx = hw_resc->max_rx_rings;
9806-
*max_cp = min_t(int, bnxt_get_max_func_cp_rings_for_en(bp),
9807-
hw_resc->max_irqs - bnxt_get_ulp_msix_num(bp));
9808-
*max_cp = min_t(int, *max_cp, hw_resc->max_stat_ctxs);
9834+
*max_cp = bnxt_get_max_func_cp_rings_for_en(bp);
9835+
max_irq = min_t(int, bnxt_get_max_func_irqs(bp) -
9836+
bnxt_get_ulp_msix_num(bp),
9837+
bnxt_get_max_func_stat_ctxs(bp));
9838+
if (!(bp->flags & BNXT_FLAG_CHIP_P5))
9839+
*max_cp = min_t(int, *max_cp, max_irq);
98099840
max_ring_grps = hw_resc->max_hw_ring_grps;
98109841
if (BNXT_CHIP_TYPE_NITRO_A0(bp) && BNXT_PF(bp)) {
98119842
*max_cp -= 1;
98129843
*max_rx -= 2;
98139844
}
98149845
if (bp->flags & BNXT_FLAG_AGG_RINGS)
98159846
*max_rx >>= 1;
9847+
if (bp->flags & BNXT_FLAG_CHIP_P5) {
9848+
bnxt_trim_rings(bp, max_rx, max_tx, *max_cp, false);
9849+
/* On P5 chips, max_cp output param should be available NQs */
9850+
*max_cp = max_irq;
9851+
}
98169852
*max_rx = min_t(int, *max_rx, max_ring_grps);
98179853
}
98189854

drivers/net/ethernet/broadcom/bnxt/bnxt.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,7 @@ struct bnxt_hw_resc {
928928
u16 min_stat_ctxs;
929929
u16 max_stat_ctxs;
930930
u16 max_irqs;
931+
u16 resv_irqs;
931932
};
932933

933934
#if defined(CONFIG_BNXT_SRIOV)

drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id,
168168
if (BNXT_NEW_RM(bp)) {
169169
struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
170170

171-
avail_msix = hw_resc->resv_cp_rings - bp->cp_nr_rings;
171+
avail_msix = hw_resc->resv_irqs - bp->cp_nr_rings;
172172
edev->ulp_tbl[ulp_id].msix_requested = avail_msix;
173173
}
174174
bnxt_fill_msix_vecs(bp, ent);

drivers/net/ethernet/cavium/liquidio/lio_ethtool.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
111111
"mac_tx_one_collision",
112112
"mac_tx_multi_collision",
113113
"mac_tx_max_collision_fail",
114-
"mac_tx_max_deferal_fail",
114+
"mac_tx_max_deferral_fail",
115115
"mac_tx_fifo_err",
116116
"mac_tx_runts",
117117

drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,13 +349,15 @@ lio_vf_rep_packet_sent_callback(struct octeon_device *oct,
349349
struct octeon_soft_command *sc = (struct octeon_soft_command *)buf;
350350
struct sk_buff *skb = sc->ctxptr;
351351
struct net_device *ndev = skb->dev;
352+
u32 iq_no;
352353

353354
dma_unmap_single(&oct->pci_dev->dev, sc->dmadptr,
354355
sc->datasize, DMA_TO_DEVICE);
355356
dev_kfree_skb_any(skb);
357+
iq_no = sc->iq_no;
356358
octeon_free_soft_command(oct, sc);
357359

358-
if (octnet_iq_is_full(oct, sc->iq_no))
360+
if (octnet_iq_is_full(oct, iq_no))
359361
return;
360362

361363
if (netif_queue_stopped(ndev))

drivers/net/ethernet/freescale/fman/fman.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2786,7 +2786,7 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
27862786
if (!muram_node) {
27872787
dev_err(&of_dev->dev, "%s: could not find MURAM node\n",
27882788
__func__);
2789-
goto fman_node_put;
2789+
goto fman_free;
27902790
}
27912791

27922792
err = of_address_to_resource(muram_node, 0,
@@ -2795,11 +2795,10 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
27952795
of_node_put(muram_node);
27962796
dev_err(&of_dev->dev, "%s: of_address_to_resource() = %d\n",
27972797
__func__, err);
2798-
goto fman_node_put;
2798+
goto fman_free;
27992799
}
28002800

28012801
of_node_put(muram_node);
2802-
of_node_put(fm_node);
28032802

28042803
err = devm_request_irq(&of_dev->dev, irq, fman_irq, IRQF_SHARED,
28052804
"fman", fman);

drivers/net/ethernet/ibm/emac/emac.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ struct emac_regs {
231231
#define EMAC_STACR_PHYE 0x00004000
232232
#define EMAC_STACR_STAC_MASK 0x00003000
233233
#define EMAC_STACR_STAC_READ 0x00001000
234-
#define EMAC_STACR_STAC_WRITE 0x00000800
234+
#define EMAC_STACR_STAC_WRITE 0x00002000
235235
#define EMAC_STACR_OPBC_MASK 0x00000C00
236236
#define EMAC_STACR_OPBC_50 0x00000000
237237
#define EMAC_STACR_OPBC_66 0x00000400

0 commit comments

Comments
 (0)