Skip to content

Commit fdfc76a

Browse files
ahalaneydavem330
authored andcommitted
net: stmmac: enable all safety features by default
In the original implementation of dwmac5 commit 8bf993a ("net: stmmac: Add support for DWMAC5 and implement Safety Features") all safety features were enabled by default. Later it seems some implementations didn't have support for all the features, so in commit 5ac712d ("net: stmmac: enable platform specific safety features") the safety_feat_cfg structure was added to the callback and defined for some platforms to selectively enable these safety features. The problem is that only certain platforms were given that software support. If the automotive safety package bit is set in the hardware features register the safety feature callback is called for the platform, and for platforms that didn't get a safety_feat_cfg defined this results in the following NULL pointer dereference: [ 7.933303] Call trace: [ 7.935812] dwmac5_safety_feat_config+0x20/0x170 [stmmac] [ 7.941455] __stmmac_open+0x16c/0x474 [stmmac] [ 7.946117] stmmac_open+0x38/0x70 [stmmac] [ 7.950414] __dev_open+0x100/0x1dc [ 7.954006] __dev_change_flags+0x18c/0x204 [ 7.958297] dev_change_flags+0x24/0x6c [ 7.962237] do_setlink+0x2b8/0xfa4 [ 7.965827] __rtnl_newlink+0x4ec/0x840 [ 7.969766] rtnl_newlink+0x50/0x80 [ 7.973353] rtnetlink_rcv_msg+0x12c/0x374 [ 7.977557] netlink_rcv_skb+0x5c/0x130 [ 7.981500] rtnetlink_rcv+0x18/0x2c [ 7.985172] netlink_unicast+0x2e8/0x340 [ 7.989197] netlink_sendmsg+0x1a8/0x420 [ 7.993222] ____sys_sendmsg+0x218/0x280 [ 7.997249] ___sys_sendmsg+0xac/0x100 [ 8.001103] __sys_sendmsg+0x84/0xe0 [ 8.004776] __arm64_sys_sendmsg+0x24/0x30 [ 8.008983] invoke_syscall+0x48/0x114 [ 8.012840] el0_svc_common.constprop.0+0xcc/0xec [ 8.017665] do_el0_svc+0x38/0xb0 [ 8.021071] el0_svc+0x2c/0x84 [ 8.024212] el0t_64_sync_handler+0xf4/0x120 [ 8.028598] el0t_64_sync+0x190/0x194 Go back to the original behavior, if the automotive safety package is found to be supported in hardware enable all the features unless safety_feat_cfg is passed in saying this particular platform only supports a subset of the features. Fixes: 5ac712d ("net: stmmac: enable platform specific safety features") Reported-by: Ning Cai <[email protected]> Signed-off-by: Andrew Halaney <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent b4fbf0b commit fdfc76a

File tree

1 file changed

+14
-0
lines changed
  • drivers/net/ethernet/stmicro/stmmac

1 file changed

+14
-0
lines changed

drivers/net/ethernet/stmicro/stmmac/dwmac5.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,25 @@ static void dwmac5_handle_dma_err(struct net_device *ndev,
186186
int dwmac5_safety_feat_config(void __iomem *ioaddr, unsigned int asp,
187187
struct stmmac_safety_feature_cfg *safety_feat_cfg)
188188
{
189+
struct stmmac_safety_feature_cfg all_safety_feats = {
190+
.tsoee = 1,
191+
.mrxpee = 1,
192+
.mestee = 1,
193+
.mrxee = 1,
194+
.mtxee = 1,
195+
.epsi = 1,
196+
.edpp = 1,
197+
.prtyen = 1,
198+
.tmouten = 1,
199+
};
189200
u32 value;
190201

191202
if (!asp)
192203
return -EINVAL;
193204

205+
if (!safety_feat_cfg)
206+
safety_feat_cfg = &all_safety_feats;
207+
194208
/* 1. Enable Safety Features */
195209
value = readl(ioaddr + MTL_ECC_CONTROL);
196210
value |= MEEAO; /* MTL ECC Error Addr Status Override */

0 commit comments

Comments
 (0)