mirror of https://github.com/hak5/openwrt.git
kernel: bump 4.4 to 4.4.110
Refresh patches Fixes: CVE-2017-5754 aka Meltdown Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> [fix typo in commit msg, conflict after 4.14 bump] Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>openwrt-18.06
parent
1d2590f838
commit
efb375b579
|
@ -3,12 +3,12 @@
|
||||||
LINUX_RELEASE?=1
|
LINUX_RELEASE?=1
|
||||||
|
|
||||||
LINUX_VERSION-3.18 = .71
|
LINUX_VERSION-3.18 = .71
|
||||||
LINUX_VERSION-4.4 = .108
|
LINUX_VERSION-4.4 = .110
|
||||||
LINUX_VERSION-4.9 = .75
|
LINUX_VERSION-4.9 = .75
|
||||||
LINUX_VERSION-4.14 = .12
|
LINUX_VERSION-4.14 = .12
|
||||||
|
|
||||||
LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240
|
LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240
|
||||||
LINUX_KERNEL_HASH-4.4.108 = 5a001198625ce9f7b0ef1e4b43e033aea859e1ef3509532412cce8f0375ba51a
|
LINUX_KERNEL_HASH-4.4.110 = d099175aac5678e6cad2f23cd56ed22a2857143c0c18489390c95ba8c441db58
|
||||||
LINUX_KERNEL_HASH-4.9.75 = de6c31b7668d4047e370f4625362a02b9ebf7da56d5c0879a4961f620ab1cadf
|
LINUX_KERNEL_HASH-4.9.75 = de6c31b7668d4047e370f4625362a02b9ebf7da56d5c0879a4961f620ab1cadf
|
||||||
LINUX_KERNEL_HASH-4.14.12 = 6608f7d480efc5c1078888e9344f4e0b0cd9bef0b6541cbdaec7d138e03856af
|
LINUX_KERNEL_HASH-4.14.12 = 6608f7d480efc5c1078888e9344f4e0b0cd9bef0b6541cbdaec7d138e03856af
|
||||||
|
|
||||||
|
|
|
@ -491,7 +491,7 @@
|
||||||
memcpy(p, foc->val, foc->len);
|
memcpy(p, foc->val, foc->len);
|
||||||
--- a/net/ipv4/igmp.c
|
--- a/net/ipv4/igmp.c
|
||||||
+++ b/net/ipv4/igmp.c
|
+++ b/net/ipv4/igmp.c
|
||||||
@@ -505,7 +505,7 @@ static struct sk_buff *add_grec(struct s
|
@@ -529,7 +529,7 @@ static struct sk_buff *add_grec(struct s
|
||||||
if (!skb)
|
if (!skb)
|
||||||
return NULL;
|
return NULL;
|
||||||
psrc = (__be32 *)skb_put(skb, sizeof(__be32));
|
psrc = (__be32 *)skb_put(skb, sizeof(__be32));
|
||||||
|
|
|
@ -5,7 +5,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
---
|
---
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -1118,7 +1118,6 @@ all: modules
|
@@ -1121,7 +1121,6 @@ all: modules
|
||||||
|
|
||||||
PHONY += modules
|
PHONY += modules
|
||||||
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
|
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
@$(kecho) ' Building modules, stage 2.';
|
@$(kecho) ' Building modules, stage 2.';
|
||||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
|
||||||
@@ -1148,7 +1147,6 @@ _modinst_:
|
@@ -1151,7 +1150,6 @@ _modinst_:
|
||||||
rm -f $(MODLIB)/build ; \
|
rm -f $(MODLIB)/build ; \
|
||||||
ln -s $(CURDIR) $(MODLIB)/build ; \
|
ln -s $(CURDIR) $(MODLIB)/build ; \
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/net/netlink/af_netlink.c
|
--- a/net/netlink/af_netlink.c
|
||||||
+++ b/net/netlink/af_netlink.c
|
+++ b/net/netlink/af_netlink.c
|
||||||
@@ -1228,24 +1228,7 @@ void netlink_detachskb(struct sock *sk,
|
@@ -1231,24 +1231,7 @@ void netlink_detachskb(struct sock *sk,
|
||||||
|
|
||||||
static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
|
static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
|
||||||
{
|
{
|
||||||
|
|
|
@ -133,7 +133,7 @@
|
||||||
}
|
}
|
||||||
--- a/mm/vmstat.c
|
--- a/mm/vmstat.c
|
||||||
+++ b/mm/vmstat.c
|
+++ b/mm/vmstat.c
|
||||||
@@ -1555,10 +1555,12 @@ static int __init setup_vmstat(void)
|
@@ -1556,10 +1556,12 @@ static int __init setup_vmstat(void)
|
||||||
cpu_notifier_register_done();
|
cpu_notifier_register_done();
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/init/main.c
|
--- a/init/main.c
|
||||||
+++ b/init/main.c
|
+++ b/init/main.c
|
||||||
@@ -964,7 +964,8 @@ static int __ref kernel_init(void *unuse
|
@@ -966,7 +966,8 @@ static int __ref kernel_init(void *unuse
|
||||||
panic("Requested init %s failed (error %d).",
|
panic("Requested init %s failed (error %d).",
|
||||||
execute_command, ret);
|
execute_command, ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/init/main.c
|
--- a/init/main.c
|
||||||
+++ b/init/main.c
|
+++ b/init/main.c
|
||||||
@@ -355,6 +355,29 @@ static inline void setup_nr_cpu_ids(void
|
@@ -356,6 +356,29 @@ static inline void setup_nr_cpu_ids(void
|
||||||
static inline void smp_prepare_cpus(unsigned int maxcpus) { }
|
static inline void smp_prepare_cpus(unsigned int maxcpus) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
/*
|
/*
|
||||||
* We need to store the untouched command line for future reference.
|
* We need to store the untouched command line for future reference.
|
||||||
* We also need to store the touched command line since the parameter
|
* We also need to store the touched command line since the parameter
|
||||||
@@ -527,6 +550,7 @@ asmlinkage __visible void __init start_k
|
@@ -529,6 +552,7 @@ asmlinkage __visible void __init start_k
|
||||||
pr_notice("%s", linux_banner);
|
pr_notice("%s", linux_banner);
|
||||||
setup_arch(&command_line);
|
setup_arch(&command_line);
|
||||||
mm_init_cpumask(&init_mm);
|
mm_init_cpumask(&init_mm);
|
||||||
|
|
|
@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||||
@@ -1067,15 +1067,28 @@ static void mvneta_defaults_set(struct m
|
@@ -1071,15 +1071,28 @@ static void mvneta_defaults_set(struct m
|
||||||
MVNETA_GMAC_AN_SPEED_EN |
|
MVNETA_GMAC_AN_SPEED_EN |
|
||||||
MVNETA_GMAC_AN_DUPLEX_EN;
|
MVNETA_GMAC_AN_DUPLEX_EN;
|
||||||
mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG, val);
|
mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG, val);
|
||||||
|
@ -43,7 +43,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
|
|
||||||
mvneta_set_ucast_table(pp, -1);
|
mvneta_set_ucast_table(pp, -1);
|
||||||
@@ -3228,9 +3241,6 @@ static int mvneta_port_power_up(struct m
|
@@ -3232,9 +3245,6 @@ static int mvneta_port_power_up(struct m
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
u64 ethtool_stats[ARRAY_SIZE(mvneta_statistics)];
|
u64 ethtool_stats[ARRAY_SIZE(mvneta_statistics)];
|
||||||
};
|
};
|
||||||
@@ -973,6 +973,44 @@ static void mvneta_set_other_mcast_table
|
@@ -977,6 +977,44 @@ static void mvneta_set_other_mcast_table
|
||||||
mvreg_write(pp, MVNETA_DA_FILT_OTH_MCAST + offset, val);
|
mvreg_write(pp, MVNETA_DA_FILT_OTH_MCAST + offset, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* This method sets defaults to the NETA port:
|
/* This method sets defaults to the NETA port:
|
||||||
* Clears interrupt Cause and Mask registers.
|
* Clears interrupt Cause and Mask registers.
|
||||||
* Clears all MAC tables.
|
* Clears all MAC tables.
|
||||||
@@ -1058,39 +1096,7 @@ static void mvneta_defaults_set(struct m
|
@@ -1062,39 +1100,7 @@ static void mvneta_defaults_set(struct m
|
||||||
val &= ~MVNETA_PHY_POLLING_ENABLE;
|
val &= ~MVNETA_PHY_POLLING_ENABLE;
|
||||||
mvreg_write(pp, MVNETA_UNIT_CONTROL, val);
|
mvreg_write(pp, MVNETA_UNIT_CONTROL, val);
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvneta_set_ucast_table(pp, -1);
|
mvneta_set_ucast_table(pp, -1);
|
||||||
mvneta_set_special_mcast_table(pp, -1);
|
mvneta_set_special_mcast_table(pp, -1);
|
||||||
mvneta_set_other_mcast_table(pp, -1);
|
mvneta_set_other_mcast_table(pp, -1);
|
||||||
@@ -2954,10 +2960,43 @@ int mvneta_ethtool_get_settings(struct n
|
@@ -2958,10 +2964,43 @@ int mvneta_ethtool_get_settings(struct n
|
||||||
int mvneta_ethtool_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
int mvneta_ethtool_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||||
{
|
{
|
||||||
struct mvneta_port *pp = netdev_priv(dev);
|
struct mvneta_port *pp = netdev_priv(dev);
|
||||||
|
|
|
@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stop the Ethernet port activity */
|
/* Stop the Ethernet port activity */
|
||||||
@@ -1067,7 +1068,7 @@ static void mvneta_defaults_set(struct m
|
@@ -1071,7 +1072,7 @@ static void mvneta_defaults_set(struct m
|
||||||
mvreg_write(pp, MVNETA_ACC_MODE, val);
|
mvreg_write(pp, MVNETA_ACC_MODE, val);
|
||||||
|
|
||||||
/* Update val of portCfg register accordingly with all RxQueue types */
|
/* Update val of portCfg register accordingly with all RxQueue types */
|
||||||
|
@ -37,7 +37,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvreg_write(pp, MVNETA_PORT_CONFIG, val);
|
mvreg_write(pp, MVNETA_PORT_CONFIG, val);
|
||||||
|
|
||||||
val = 0;
|
val = 0;
|
||||||
@@ -2101,19 +2102,19 @@ static void mvneta_set_rx_mode(struct ne
|
@@ -2105,19 +2106,19 @@ static void mvneta_set_rx_mode(struct ne
|
||||||
if (dev->flags & IFF_PROMISC) {
|
if (dev->flags & IFF_PROMISC) {
|
||||||
/* Accept all: Multicast + Unicast */
|
/* Accept all: Multicast + Unicast */
|
||||||
mvneta_rx_unicast_promisc_set(pp, 1);
|
mvneta_rx_unicast_promisc_set(pp, 1);
|
||||||
|
@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
} else {
|
} else {
|
||||||
/* Accept only initialized multicast */
|
/* Accept only initialized multicast */
|
||||||
mvneta_set_special_mcast_table(pp, -1);
|
mvneta_set_special_mcast_table(pp, -1);
|
||||||
@@ -2122,7 +2123,7 @@ static void mvneta_set_rx_mode(struct ne
|
@@ -2126,7 +2127,7 @@ static void mvneta_set_rx_mode(struct ne
|
||||||
if (!netdev_mc_empty(dev)) {
|
if (!netdev_mc_empty(dev)) {
|
||||||
netdev_for_each_mc_addr(ha, dev) {
|
netdev_for_each_mc_addr(ha, dev) {
|
||||||
mvneta_mcast_addr_set(pp, ha->addr,
|
mvneta_mcast_addr_set(pp, ha->addr,
|
||||||
|
@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2205,7 +2206,7 @@ static int mvneta_poll(struct napi_struc
|
@@ -2209,7 +2210,7 @@ static int mvneta_poll(struct napi_struc
|
||||||
* RX packets
|
* RX packets
|
||||||
*/
|
*/
|
||||||
cause_rx_tx |= port->cause_rx_tx;
|
cause_rx_tx |= port->cause_rx_tx;
|
||||||
|
@ -81,7 +81,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
budget -= rx_done;
|
budget -= rx_done;
|
||||||
|
|
||||||
if (budget > 0) {
|
if (budget > 0) {
|
||||||
@@ -2418,17 +2419,17 @@ static void mvneta_cleanup_txqs(struct m
|
@@ -2422,17 +2423,17 @@ static void mvneta_cleanup_txqs(struct m
|
||||||
/* Cleanup all Rx queues */
|
/* Cleanup all Rx queues */
|
||||||
static void mvneta_cleanup_rxqs(struct mvneta_port *pp)
|
static void mvneta_cleanup_rxqs(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
|
@ -102,7 +102,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvneta_cleanup_rxqs(pp);
|
mvneta_cleanup_rxqs(pp);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -2634,7 +2635,7 @@ static int mvneta_set_mac_addr(struct ne
|
@@ -2638,7 +2639,7 @@ static int mvneta_set_mac_addr(struct ne
|
||||||
mvneta_mac_addr_set(pp, dev->dev_addr, -1);
|
mvneta_mac_addr_set(pp, dev->dev_addr, -1);
|
||||||
|
|
||||||
/* Set new addr in hw */
|
/* Set new addr in hw */
|
||||||
|
@ -111,7 +111,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
eth_commit_mac_addr_change(dev, addr);
|
eth_commit_mac_addr_change(dev, addr);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2753,7 +2754,7 @@ static void mvneta_percpu_elect(struct m
|
@@ -2757,7 +2758,7 @@ static void mvneta_percpu_elect(struct m
|
||||||
{
|
{
|
||||||
int online_cpu_idx, cpu, i = 0;
|
int online_cpu_idx, cpu, i = 0;
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
for_each_online_cpu(cpu) {
|
for_each_online_cpu(cpu) {
|
||||||
if (i == online_cpu_idx)
|
if (i == online_cpu_idx)
|
||||||
@@ -3361,6 +3362,8 @@ static int mvneta_probe(struct platform_
|
@@ -3365,6 +3366,8 @@ static int mvneta_probe(struct platform_
|
||||||
strcmp(managed, "in-band-status") == 0);
|
strcmp(managed, "in-band-status") == 0);
|
||||||
pp->cpu_notifier.notifier_call = mvneta_percpu_notifier;
|
pp->cpu_notifier.notifier_call = mvneta_percpu_notifier;
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stop the Ethernet port activity */
|
/* Stop the Ethernet port activity */
|
||||||
@@ -1026,6 +1039,7 @@ static void mvneta_defaults_set(struct m
|
@@ -1030,6 +1043,7 @@ static void mvneta_defaults_set(struct m
|
||||||
int cpu;
|
int cpu;
|
||||||
int queue;
|
int queue;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
/* Clear all Cause registers */
|
/* Clear all Cause registers */
|
||||||
mvreg_write(pp, MVNETA_INTR_NEW_CAUSE, 0);
|
mvreg_write(pp, MVNETA_INTR_NEW_CAUSE, 0);
|
||||||
@@ -1041,13 +1055,23 @@ static void mvneta_defaults_set(struct m
|
@@ -1045,13 +1059,23 @@ static void mvneta_defaults_set(struct m
|
||||||
/* Enable MBUS Retry bit16 */
|
/* Enable MBUS Retry bit16 */
|
||||||
mvreg_write(pp, MVNETA_MBUS_RETRY, 0x20);
|
mvreg_write(pp, MVNETA_MBUS_RETRY, 0x20);
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
/* Reset RX and TX DMAs */
|
/* Reset RX and TX DMAs */
|
||||||
mvreg_write(pp, MVNETA_PORT_RX_RESET, MVNETA_PORT_RX_DMA_RESET);
|
mvreg_write(pp, MVNETA_PORT_RX_RESET, MVNETA_PORT_RX_DMA_RESET);
|
||||||
@@ -2174,6 +2198,7 @@ static int mvneta_poll(struct napi_struc
|
@@ -2178,6 +2202,7 @@ static int mvneta_poll(struct napi_struc
|
||||||
{
|
{
|
||||||
int rx_done = 0;
|
int rx_done = 0;
|
||||||
u32 cause_rx_tx;
|
u32 cause_rx_tx;
|
||||||
|
@ -93,7 +93,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
struct mvneta_port *pp = netdev_priv(napi->dev);
|
struct mvneta_port *pp = netdev_priv(napi->dev);
|
||||||
struct mvneta_pcpu_port *port = this_cpu_ptr(pp->ports);
|
struct mvneta_pcpu_port *port = this_cpu_ptr(pp->ports);
|
||||||
|
|
||||||
@@ -2205,8 +2230,15 @@ static int mvneta_poll(struct napi_struc
|
@@ -2209,8 +2234,15 @@ static int mvneta_poll(struct napi_struc
|
||||||
/* For the case where the last mvneta_poll did not process all
|
/* For the case where the last mvneta_poll did not process all
|
||||||
* RX packets
|
* RX packets
|
||||||
*/
|
*/
|
||||||
|
@ -110,7 +110,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
budget -= rx_done;
|
budget -= rx_done;
|
||||||
|
|
||||||
if (budget > 0) {
|
if (budget > 0) {
|
||||||
@@ -2419,19 +2451,27 @@ static void mvneta_cleanup_txqs(struct m
|
@@ -2423,19 +2455,27 @@ static void mvneta_cleanup_txqs(struct m
|
||||||
/* Cleanup all Rx queues */
|
/* Cleanup all Rx queues */
|
||||||
static void mvneta_cleanup_rxqs(struct mvneta_port *pp)
|
static void mvneta_cleanup_rxqs(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
|
@ -145,7 +145,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2455,6 +2495,19 @@ static int mvneta_setup_txqs(struct mvne
|
@@ -2459,6 +2499,19 @@ static int mvneta_setup_txqs(struct mvne
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
static void mvneta_start_dev(struct mvneta_port *pp)
|
static void mvneta_start_dev(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
@@ -2472,11 +2525,10 @@ static void mvneta_start_dev(struct mvne
|
@@ -2476,11 +2529,10 @@ static void mvneta_start_dev(struct mvne
|
||||||
napi_enable(&port->napi);
|
napi_enable(&port->napi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
||||||
MVNETA_CAUSE_PHY_STATUS_CHANGE |
|
MVNETA_CAUSE_PHY_STATUS_CHANGE |
|
||||||
MVNETA_CAUSE_LINK_CHANGE |
|
MVNETA_CAUSE_LINK_CHANGE |
|
||||||
@@ -2752,22 +2804,35 @@ static void mvneta_percpu_disable(void *
|
@@ -2756,22 +2808,35 @@ static void mvneta_percpu_disable(void *
|
||||||
|
|
||||||
static void mvneta_percpu_elect(struct mvneta_port *pp)
|
static void mvneta_percpu_elect(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
|
@ -227,7 +227,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2802,12 +2867,22 @@ static int mvneta_percpu_notifier(struct
|
@@ -2806,12 +2871,22 @@ static int mvneta_percpu_notifier(struct
|
||||||
mvreg_write(pp, MVNETA_INTR_MISC_MASK, 0);
|
mvreg_write(pp, MVNETA_INTR_MISC_MASK, 0);
|
||||||
napi_enable(&port->napi);
|
napi_enable(&port->napi);
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvreg_write(pp, MVNETA_INTR_NEW_MASK,
|
mvreg_write(pp, MVNETA_INTR_NEW_MASK,
|
||||||
MVNETA_RX_INTR_MASK(rxq_number) |
|
MVNETA_RX_INTR_MASK(rxq_number) |
|
||||||
MVNETA_TX_INTR_MASK(txq_number) |
|
MVNETA_TX_INTR_MASK(txq_number) |
|
||||||
@@ -2858,7 +2933,7 @@ static int mvneta_percpu_notifier(struct
|
@@ -2862,7 +2937,7 @@ static int mvneta_percpu_notifier(struct
|
||||||
static int mvneta_open(struct net_device *dev)
|
static int mvneta_open(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct mvneta_port *pp = netdev_priv(dev);
|
struct mvneta_port *pp = netdev_priv(dev);
|
||||||
|
@ -260,7 +260,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
pp->pkt_size = MVNETA_RX_PKT_SIZE(pp->dev->mtu);
|
pp->pkt_size = MVNETA_RX_PKT_SIZE(pp->dev->mtu);
|
||||||
pp->frag_size = SKB_DATA_ALIGN(MVNETA_RX_BUF_SIZE(pp->pkt_size)) +
|
pp->frag_size = SKB_DATA_ALIGN(MVNETA_RX_BUF_SIZE(pp->pkt_size)) +
|
||||||
@@ -2888,8 +2963,13 @@ static int mvneta_open(struct net_device
|
@@ -2892,8 +2967,13 @@ static int mvneta_open(struct net_device
|
||||||
*/
|
*/
|
||||||
mvneta_percpu_disable(pp);
|
mvneta_percpu_disable(pp);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The mvneta_tx_desc and mvneta_rx_desc structures describe the
|
/* The mvneta_tx_desc and mvneta_rx_desc structures describe the
|
||||||
@@ -1067,7 +1074,7 @@ static void mvneta_defaults_set(struct m
|
@@ -1071,7 +1078,7 @@ static void mvneta_defaults_set(struct m
|
||||||
if ((rxq % max_cpu) == cpu)
|
if ((rxq % max_cpu) == cpu)
|
||||||
rxq_map |= MVNETA_CPU_RXQ_ACCESS(rxq);
|
rxq_map |= MVNETA_CPU_RXQ_ACCESS(rxq);
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
txq_map = MVNETA_CPU_TXQ_ACCESS_ALL_MASK;
|
txq_map = MVNETA_CPU_TXQ_ACCESS_ALL_MASK;
|
||||||
|
|
||||||
mvreg_write(pp, MVNETA_CPU_MAP(cpu), rxq_map | txq_map);
|
mvreg_write(pp, MVNETA_CPU_MAP(cpu), rxq_map | txq_map);
|
||||||
@@ -2508,6 +2515,18 @@ static void mvneta_percpu_unmask_interru
|
@@ -2512,6 +2519,18 @@ static void mvneta_percpu_unmask_interru
|
||||||
MVNETA_MISCINTR_INTR_MASK);
|
MVNETA_MISCINTR_INTR_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
static void mvneta_start_dev(struct mvneta_port *pp)
|
static void mvneta_start_dev(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
@@ -3229,6 +3248,106 @@ static int mvneta_ethtool_get_sset_count
|
@@ -3233,6 +3252,106 @@ static int mvneta_ethtool_get_sset_count
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
static const struct net_device_ops mvneta_netdev_ops = {
|
static const struct net_device_ops mvneta_netdev_ops = {
|
||||||
.ndo_open = mvneta_open,
|
.ndo_open = mvneta_open,
|
||||||
.ndo_stop = mvneta_stop,
|
.ndo_stop = mvneta_stop,
|
||||||
@@ -3253,6 +3372,10 @@ const struct ethtool_ops mvneta_eth_tool
|
@@ -3257,6 +3376,10 @@ const struct ethtool_ops mvneta_eth_tool
|
||||||
.get_strings = mvneta_ethtool_get_strings,
|
.get_strings = mvneta_ethtool_get_strings,
|
||||||
.get_ethtool_stats = mvneta_ethtool_get_stats,
|
.get_ethtool_stats = mvneta_ethtool_get_stats,
|
||||||
.get_sset_count = mvneta_ethtool_get_sset_count,
|
.get_sset_count = mvneta_ethtool_get_sset_count,
|
||||||
|
@ -180,7 +180,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Initialize hw */
|
/* Initialize hw */
|
||||||
@@ -3444,6 +3567,8 @@ static int mvneta_probe(struct platform_
|
@@ -3448,6 +3571,8 @@ static int mvneta_probe(struct platform_
|
||||||
|
|
||||||
pp->rxq_def = rxq_def;
|
pp->rxq_def = rxq_def;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mvneta_rx_queue {
|
struct mvneta_rx_queue {
|
||||||
@@ -1062,20 +1066,30 @@ static void mvneta_defaults_set(struct m
|
@@ -1066,20 +1070,30 @@ static void mvneta_defaults_set(struct m
|
||||||
/* Enable MBUS Retry bit16 */
|
/* Enable MBUS Retry bit16 */
|
||||||
mvreg_write(pp, MVNETA_MBUS_RETRY, 0x20);
|
mvreg_write(pp, MVNETA_MBUS_RETRY, 0x20);
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
mvreg_write(pp, MVNETA_CPU_MAP(cpu), rxq_map | txq_map);
|
mvreg_write(pp, MVNETA_CPU_MAP(cpu), rxq_map | txq_map);
|
||||||
}
|
}
|
||||||
@@ -2362,6 +2376,8 @@ static void mvneta_rxq_deinit(struct mvn
|
@@ -2366,6 +2380,8 @@ static void mvneta_rxq_deinit(struct mvn
|
||||||
static int mvneta_txq_init(struct mvneta_port *pp,
|
static int mvneta_txq_init(struct mvneta_port *pp,
|
||||||
struct mvneta_tx_queue *txq)
|
struct mvneta_tx_queue *txq)
|
||||||
{
|
{
|
||||||
|
@ -78,7 +78,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
txq->size = pp->tx_ring_size;
|
txq->size = pp->tx_ring_size;
|
||||||
|
|
||||||
/* A queue must always have room for at least one skb.
|
/* A queue must always have room for at least one skb.
|
||||||
@@ -2414,6 +2430,14 @@ static int mvneta_txq_init(struct mvneta
|
@@ -2418,6 +2434,14 @@ static int mvneta_txq_init(struct mvneta
|
||||||
}
|
}
|
||||||
mvneta_tx_done_pkts_coal_set(pp, txq, txq->done_pkts_coal);
|
mvneta_tx_done_pkts_coal_set(pp, txq, txq->done_pkts_coal);
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2836,13 +2860,23 @@ static void mvneta_percpu_elect(struct m
|
@@ -2840,13 +2864,23 @@ static void mvneta_percpu_elect(struct m
|
||||||
if ((rxq % max_cpu) == cpu)
|
if ((rxq % max_cpu) == cpu)
|
||||||
rxq_map |= MVNETA_CPU_RXQ_ACCESS(rxq);
|
rxq_map |= MVNETA_CPU_RXQ_ACCESS(rxq);
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||||
@@ -3240,26 +3240,25 @@ static void mvneta_ethtool_update_stats(
|
@@ -3244,26 +3244,25 @@ static void mvneta_ethtool_update_stats(
|
||||||
const struct mvneta_statistic *s;
|
const struct mvneta_statistic *s;
|
||||||
void __iomem *base = pp->base;
|
void __iomem *base = pp->base;
|
||||||
u32 high, low, val;
|
u32 high, low, val;
|
||||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||||
@@ -2847,9 +2847,14 @@ static void mvneta_percpu_disable(void *
|
@@ -2851,9 +2851,14 @@ static void mvneta_percpu_disable(void *
|
||||||
|
|
||||||
static void mvneta_percpu_elect(struct mvneta_port *pp)
|
static void mvneta_percpu_elect(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
|
@ -37,7 +37,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
max_cpu = num_present_cpus();
|
max_cpu = num_present_cpus();
|
||||||
|
|
||||||
for_each_online_cpu(cpu) {
|
for_each_online_cpu(cpu) {
|
||||||
@@ -2860,7 +2865,7 @@ static void mvneta_percpu_elect(struct m
|
@@ -2864,7 +2869,7 @@ static void mvneta_percpu_elect(struct m
|
||||||
if ((rxq % max_cpu) == cpu)
|
if ((rxq % max_cpu) == cpu)
|
||||||
rxq_map |= MVNETA_CPU_RXQ_ACCESS(rxq);
|
rxq_map |= MVNETA_CPU_RXQ_ACCESS(rxq);
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Map the default receive queue queue to the
|
/* Map the default receive queue queue to the
|
||||||
* elected CPU
|
* elected CPU
|
||||||
*/
|
*/
|
||||||
@@ -2871,7 +2876,7 @@ static void mvneta_percpu_elect(struct m
|
@@ -2875,7 +2880,7 @@ static void mvneta_percpu_elect(struct m
|
||||||
* the CPU bound to the default RX queue
|
* the CPU bound to the default RX queue
|
||||||
*/
|
*/
|
||||||
if (txq_number == 1)
|
if (txq_number == 1)
|
||||||
|
|
|
@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||||
@@ -2553,7 +2553,7 @@ static void mvneta_percpu_mask_interrupt
|
@@ -2557,7 +2557,7 @@ static void mvneta_percpu_mask_interrupt
|
||||||
|
|
||||||
static void mvneta_start_dev(struct mvneta_port *pp)
|
static void mvneta_start_dev(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
mvneta_max_rx_size_set(pp, pp->pkt_size);
|
mvneta_max_rx_size_set(pp, pp->pkt_size);
|
||||||
mvneta_txq_max_tx_size_set(pp, pp->pkt_size);
|
mvneta_txq_max_tx_size_set(pp, pp->pkt_size);
|
||||||
@@ -2569,9 +2569,8 @@ static void mvneta_start_dev(struct mvne
|
@@ -2573,9 +2573,8 @@ static void mvneta_start_dev(struct mvne
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unmask interrupts. It has to be done from each CPU */
|
/* Unmask interrupts. It has to be done from each CPU */
|
||||||
|
@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
||||||
MVNETA_CAUSE_PHY_STATUS_CHANGE |
|
MVNETA_CAUSE_PHY_STATUS_CHANGE |
|
||||||
MVNETA_CAUSE_LINK_CHANGE |
|
MVNETA_CAUSE_LINK_CHANGE |
|
||||||
@@ -2991,7 +2990,7 @@ static int mvneta_percpu_notifier(struct
|
@@ -2995,7 +2994,7 @@ static int mvneta_percpu_notifier(struct
|
||||||
static int mvneta_open(struct net_device *dev)
|
static int mvneta_open(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct mvneta_port *pp = netdev_priv(dev);
|
struct mvneta_port *pp = netdev_priv(dev);
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
pp->pkt_size = MVNETA_RX_PKT_SIZE(pp->dev->mtu);
|
pp->pkt_size = MVNETA_RX_PKT_SIZE(pp->dev->mtu);
|
||||||
pp->frag_size = SKB_DATA_ALIGN(MVNETA_RX_BUF_SIZE(pp->pkt_size)) +
|
pp->frag_size = SKB_DATA_ALIGN(MVNETA_RX_BUF_SIZE(pp->pkt_size)) +
|
||||||
@@ -3024,9 +3023,7 @@ static int mvneta_open(struct net_device
|
@@ -3028,9 +3027,7 @@ static int mvneta_open(struct net_device
|
||||||
/* Enable per-CPU interrupt on all the CPU to handle our RX
|
/* Enable per-CPU interrupt on all the CPU to handle our RX
|
||||||
* queue interrupts
|
* queue interrupts
|
||||||
*/
|
*/
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
|
||||||
/* Register a CPU notifier to handle the case where our CPU
|
/* Register a CPU notifier to handle the case where our CPU
|
||||||
@@ -3313,9 +3310,7 @@ static int mvneta_config_rss(struct mvn
|
@@ -3317,9 +3314,7 @@ static int mvneta_config_rss(struct mvn
|
||||||
|
|
||||||
netif_tx_stop_all_queues(pp->dev);
|
netif_tx_stop_all_queues(pp->dev);
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||||
@@ -1036,6 +1036,43 @@ static void mvneta_set_autoneg(struct mv
|
@@ -1040,6 +1040,43 @@ static void mvneta_set_autoneg(struct mv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* This method sets defaults to the NETA port:
|
/* This method sets defaults to the NETA port:
|
||||||
* Clears interrupt Cause and Mask registers.
|
* Clears interrupt Cause and Mask registers.
|
||||||
* Clears all MAC tables.
|
* Clears all MAC tables.
|
||||||
@@ -1053,14 +1090,10 @@ static void mvneta_defaults_set(struct m
|
@@ -1057,14 +1094,10 @@ static void mvneta_defaults_set(struct m
|
||||||
int max_cpu = num_present_cpus();
|
int max_cpu = num_present_cpus();
|
||||||
|
|
||||||
/* Clear all Cause registers */
|
/* Clear all Cause registers */
|
||||||
|
@ -78,7 +78,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvreg_write(pp, MVNETA_INTR_ENABLE, 0);
|
mvreg_write(pp, MVNETA_INTR_ENABLE, 0);
|
||||||
|
|
||||||
/* Enable MBUS Retry bit16 */
|
/* Enable MBUS Retry bit16 */
|
||||||
@@ -2526,31 +2559,6 @@ static int mvneta_setup_txqs(struct mvne
|
@@ -2530,31 +2563,6 @@ static int mvneta_setup_txqs(struct mvne
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
static void mvneta_start_dev(struct mvneta_port *pp)
|
static void mvneta_start_dev(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
int cpu;
|
int cpu;
|
||||||
@@ -2601,13 +2609,10 @@ static void mvneta_stop_dev(struct mvnet
|
@@ -2605,13 +2613,10 @@ static void mvneta_stop_dev(struct mvnet
|
||||||
mvneta_port_disable(pp);
|
mvneta_port_disable(pp);
|
||||||
|
|
||||||
/* Clear all ethernet port interrupts */
|
/* Clear all ethernet port interrupts */
|
||||||
|
@ -126,7 +126,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
mvneta_tx_reset(pp);
|
mvneta_tx_reset(pp);
|
||||||
mvneta_rx_reset(pp);
|
mvneta_rx_reset(pp);
|
||||||
@@ -2919,9 +2924,7 @@ static int mvneta_percpu_notifier(struct
|
@@ -2923,9 +2928,7 @@ static int mvneta_percpu_notifier(struct
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mask all ethernet port interrupts */
|
/* Mask all ethernet port interrupts */
|
||||||
|
@ -137,7 +137,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
napi_enable(&port->napi);
|
napi_enable(&port->napi);
|
||||||
|
|
||||||
|
|
||||||
@@ -2936,14 +2939,8 @@ static int mvneta_percpu_notifier(struct
|
@@ -2940,14 +2943,8 @@ static int mvneta_percpu_notifier(struct
|
||||||
*/
|
*/
|
||||||
mvneta_percpu_elect(pp);
|
mvneta_percpu_elect(pp);
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
||||||
MVNETA_CAUSE_PHY_STATUS_CHANGE |
|
MVNETA_CAUSE_PHY_STATUS_CHANGE |
|
||||||
MVNETA_CAUSE_LINK_CHANGE |
|
MVNETA_CAUSE_LINK_CHANGE |
|
||||||
@@ -2954,9 +2951,7 @@ static int mvneta_percpu_notifier(struct
|
@@ -2958,9 +2955,7 @@ static int mvneta_percpu_notifier(struct
|
||||||
case CPU_DOWN_PREPARE_FROZEN:
|
case CPU_DOWN_PREPARE_FROZEN:
|
||||||
netif_tx_stop_all_queues(pp->dev);
|
netif_tx_stop_all_queues(pp->dev);
|
||||||
/* Mask all ethernet port interrupts */
|
/* Mask all ethernet port interrupts */
|
||||||
|
@ -165,7 +165,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
napi_synchronize(&port->napi);
|
napi_synchronize(&port->napi);
|
||||||
napi_disable(&port->napi);
|
napi_disable(&port->napi);
|
||||||
@@ -2972,10 +2967,7 @@ static int mvneta_percpu_notifier(struct
|
@@ -2976,10 +2971,7 @@ static int mvneta_percpu_notifier(struct
|
||||||
/* Check if a new CPU must be elected now this on is down */
|
/* Check if a new CPU must be elected now this on is down */
|
||||||
mvneta_percpu_elect(pp);
|
mvneta_percpu_elect(pp);
|
||||||
/* Unmask all ethernet port interrupts */
|
/* Unmask all ethernet port interrupts */
|
||||||
|
|
|
@ -31,7 +31,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
/* Core clock */
|
/* Core clock */
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
@@ -2853,6 +2857,12 @@ static void mvneta_percpu_elect(struct m
|
@@ -2857,6 +2861,12 @@ static void mvneta_percpu_elect(struct m
|
||||||
{
|
{
|
||||||
int elected_cpu = 0, max_cpu, cpu, i = 0;
|
int elected_cpu = 0, max_cpu, cpu, i = 0;
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Use the cpu associated to the rxq when it is online, in all
|
/* Use the cpu associated to the rxq when it is online, in all
|
||||||
* the other cases, use the cpu 0 which can't be offline.
|
* the other cases, use the cpu 0 which can't be offline.
|
||||||
*/
|
*/
|
||||||
@@ -2896,6 +2906,7 @@ static void mvneta_percpu_elect(struct m
|
@@ -2900,6 +2910,7 @@ static void mvneta_percpu_elect(struct m
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
};
|
};
|
||||||
|
|
||||||
static int mvneta_percpu_notifier(struct notifier_block *nfb,
|
static int mvneta_percpu_notifier(struct notifier_block *nfb,
|
||||||
@@ -2950,8 +2961,13 @@ static int mvneta_percpu_notifier(struct
|
@@ -2954,8 +2965,13 @@ static int mvneta_percpu_notifier(struct
|
||||||
case CPU_DOWN_PREPARE:
|
case CPU_DOWN_PREPARE:
|
||||||
case CPU_DOWN_PREPARE_FROZEN:
|
case CPU_DOWN_PREPARE_FROZEN:
|
||||||
netif_tx_stop_all_queues(pp->dev);
|
netif_tx_stop_all_queues(pp->dev);
|
||||||
|
|
|
@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
/* Core clock */
|
/* Core clock */
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
@@ -2853,16 +2854,14 @@ static void mvneta_percpu_disable(void *
|
@@ -2857,16 +2858,14 @@ static void mvneta_percpu_disable(void *
|
||||||
disable_percpu_irq(pp->dev->irq);
|
disable_percpu_irq(pp->dev->irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Use the cpu associated to the rxq when it is online, in all
|
/* Use the cpu associated to the rxq when it is online, in all
|
||||||
* the other cases, use the cpu 0 which can't be offline.
|
* the other cases, use the cpu 0 which can't be offline.
|
||||||
*/
|
*/
|
||||||
@@ -2906,7 +2905,6 @@ static void mvneta_percpu_elect(struct m
|
@@ -2910,7 +2909,6 @@ static void mvneta_percpu_elect(struct m
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
};
|
};
|
||||||
|
|
||||||
static int mvneta_percpu_notifier(struct notifier_block *nfb,
|
static int mvneta_percpu_notifier(struct notifier_block *nfb,
|
||||||
@@ -2920,6 +2918,14 @@ static int mvneta_percpu_notifier(struct
|
@@ -2924,6 +2922,14 @@ static int mvneta_percpu_notifier(struct
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case CPU_ONLINE:
|
case CPU_ONLINE:
|
||||||
case CPU_ONLINE_FROZEN:
|
case CPU_ONLINE_FROZEN:
|
||||||
|
@ -70,7 +70,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
netif_tx_stop_all_queues(pp->dev);
|
netif_tx_stop_all_queues(pp->dev);
|
||||||
|
|
||||||
/* We have to synchronise on tha napi of each CPU
|
/* We have to synchronise on tha napi of each CPU
|
||||||
@@ -2957,6 +2963,7 @@ static int mvneta_percpu_notifier(struct
|
@@ -2961,6 +2967,7 @@ static int mvneta_percpu_notifier(struct
|
||||||
MVNETA_CAUSE_LINK_CHANGE |
|
MVNETA_CAUSE_LINK_CHANGE |
|
||||||
MVNETA_CAUSE_PSC_SYNC_CHANGE);
|
MVNETA_CAUSE_PSC_SYNC_CHANGE);
|
||||||
netif_tx_start_all_queues(pp->dev);
|
netif_tx_start_all_queues(pp->dev);
|
||||||
|
@ -78,7 +78,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
break;
|
break;
|
||||||
case CPU_DOWN_PREPARE:
|
case CPU_DOWN_PREPARE:
|
||||||
case CPU_DOWN_PREPARE_FROZEN:
|
case CPU_DOWN_PREPARE_FROZEN:
|
||||||
@@ -2981,7 +2988,9 @@ static int mvneta_percpu_notifier(struct
|
@@ -2985,7 +2992,9 @@ static int mvneta_percpu_notifier(struct
|
||||||
case CPU_DEAD:
|
case CPU_DEAD:
|
||||||
case CPU_DEAD_FROZEN:
|
case CPU_DEAD_FROZEN:
|
||||||
/* Check if a new CPU must be elected now this on is down */
|
/* Check if a new CPU must be elected now this on is down */
|
||||||
|
@ -88,7 +88,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Unmask all ethernet port interrupts */
|
/* Unmask all ethernet port interrupts */
|
||||||
on_each_cpu(mvneta_percpu_unmask_interrupt, pp, true);
|
on_each_cpu(mvneta_percpu_unmask_interrupt, pp, true);
|
||||||
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
|
||||||
@@ -3033,7 +3042,7 @@ static int mvneta_open(struct net_device
|
@@ -3037,7 +3046,7 @@ static int mvneta_open(struct net_device
|
||||||
*/
|
*/
|
||||||
on_each_cpu(mvneta_percpu_enable, pp, true);
|
on_each_cpu(mvneta_percpu_enable, pp, true);
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Register a CPU notifier to handle the case where our CPU
|
/* Register a CPU notifier to handle the case where our CPU
|
||||||
* might be taken offline.
|
* might be taken offline.
|
||||||
*/
|
*/
|
||||||
@@ -3066,9 +3075,18 @@ static int mvneta_stop(struct net_device
|
@@ -3070,9 +3079,18 @@ static int mvneta_stop(struct net_device
|
||||||
{
|
{
|
||||||
struct mvneta_port *pp = netdev_priv(dev);
|
struct mvneta_port *pp = netdev_priv(dev);
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
on_each_cpu(mvneta_percpu_disable, pp, true);
|
on_each_cpu(mvneta_percpu_disable, pp, true);
|
||||||
free_percpu_irq(dev->irq, pp->ports);
|
free_percpu_irq(dev->irq, pp->ports);
|
||||||
mvneta_cleanup_rxqs(pp);
|
mvneta_cleanup_rxqs(pp);
|
||||||
@@ -3339,7 +3357,9 @@ static int mvneta_config_rss(struct mvn
|
@@ -3343,7 +3361,9 @@ static int mvneta_config_rss(struct mvn
|
||||||
mvreg_write(pp, MVNETA_PORT_CONFIG, val);
|
mvreg_write(pp, MVNETA_PORT_CONFIG, val);
|
||||||
|
|
||||||
/* Update the elected CPU matching the new rxq_def */
|
/* Update the elected CPU matching the new rxq_def */
|
||||||
|
|
|
@ -495,7 +495,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Start the Ethernet port RX and TX activity */
|
/* Start the Ethernet port RX and TX activity */
|
||||||
static void mvneta_port_up(struct mvneta_port *pp)
|
static void mvneta_port_up(struct mvneta_port *pp)
|
||||||
{
|
{
|
||||||
@@ -1147,9 +1379,17 @@ static void mvneta_defaults_set(struct m
|
@@ -1151,9 +1383,17 @@ static void mvneta_defaults_set(struct m
|
||||||
mvreg_write(pp, MVNETA_PORT_RX_RESET, 0);
|
mvreg_write(pp, MVNETA_PORT_RX_RESET, 0);
|
||||||
|
|
||||||
/* Set Port Acceleration Mode */
|
/* Set Port Acceleration Mode */
|
||||||
|
@ -514,7 +514,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Update val of portCfg register accordingly with all RxQueue types */
|
/* Update val of portCfg register accordingly with all RxQueue types */
|
||||||
val = MVNETA_PORT_CONFIG_DEFL_VALUE(pp->rxq_def);
|
val = MVNETA_PORT_CONFIG_DEFL_VALUE(pp->rxq_def);
|
||||||
mvreg_write(pp, MVNETA_PORT_CONFIG, val);
|
mvreg_write(pp, MVNETA_PORT_CONFIG, val);
|
||||||
@@ -1516,23 +1756,25 @@ static void mvneta_txq_done(struct mvnet
|
@@ -1520,23 +1760,25 @@ static void mvneta_txq_done(struct mvnet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -547,7 +547,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
static int mvneta_rx_refill(struct mvneta_port *pp,
|
static int mvneta_rx_refill(struct mvneta_port *pp,
|
||||||
struct mvneta_rx_desc *rx_desc)
|
struct mvneta_rx_desc *rx_desc)
|
||||||
|
|
||||||
@@ -1540,7 +1782,7 @@ static int mvneta_rx_refill(struct mvnet
|
@@ -1544,7 +1786,7 @@ static int mvneta_rx_refill(struct mvnet
|
||||||
dma_addr_t phys_addr;
|
dma_addr_t phys_addr;
|
||||||
void *data;
|
void *data;
|
||||||
|
|
||||||
|
@ -556,7 +556,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
if (!data)
|
if (!data)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@@ -1548,7 +1790,7 @@ static int mvneta_rx_refill(struct mvnet
|
@@ -1552,7 +1794,7 @@ static int mvneta_rx_refill(struct mvnet
|
||||||
MVNETA_RX_BUF_SIZE(pp->pkt_size),
|
MVNETA_RX_BUF_SIZE(pp->pkt_size),
|
||||||
DMA_FROM_DEVICE);
|
DMA_FROM_DEVICE);
|
||||||
if (unlikely(dma_mapping_error(pp->dev->dev.parent, phys_addr))) {
|
if (unlikely(dma_mapping_error(pp->dev->dev.parent, phys_addr))) {
|
||||||
|
@ -565,7 +565,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1594,22 +1836,156 @@ static void mvneta_rxq_drop_pkts(struct
|
@@ -1598,22 +1840,156 @@ static void mvneta_rxq_drop_pkts(struct
|
||||||
int rx_done, i;
|
int rx_done, i;
|
||||||
|
|
||||||
rx_done = mvneta_rxq_busy_desc_num_get(pp, rxq);
|
rx_done = mvneta_rxq_busy_desc_num_get(pp, rxq);
|
||||||
|
@ -728,7 +728,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
{
|
{
|
||||||
struct mvneta_pcpu_port *port = this_cpu_ptr(pp->ports);
|
struct mvneta_pcpu_port *port = this_cpu_ptr(pp->ports);
|
||||||
struct net_device *dev = pp->dev;
|
struct net_device *dev = pp->dev;
|
||||||
@@ -1628,21 +2004,29 @@ static int mvneta_rx(struct mvneta_port
|
@@ -1632,21 +2008,29 @@ static int mvneta_rx(struct mvneta_port
|
||||||
/* Fairness NAPI loop */
|
/* Fairness NAPI loop */
|
||||||
while (rx_done < rx_todo) {
|
while (rx_done < rx_todo) {
|
||||||
struct mvneta_rx_desc *rx_desc = mvneta_rxq_next_desc_get(rxq);
|
struct mvneta_rx_desc *rx_desc = mvneta_rxq_next_desc_get(rxq);
|
||||||
|
@ -760,7 +760,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
dev->stats.rx_errors++;
|
dev->stats.rx_errors++;
|
||||||
mvneta_rx_error(pp, rx_desc);
|
mvneta_rx_error(pp, rx_desc);
|
||||||
/* leave the descriptor untouched */
|
/* leave the descriptor untouched */
|
||||||
@@ -1653,7 +2037,7 @@ static int mvneta_rx(struct mvneta_port
|
@@ -1657,7 +2041,7 @@ static int mvneta_rx(struct mvneta_port
|
||||||
/* better copy a small frame and not unmap the DMA region */
|
/* better copy a small frame and not unmap the DMA region */
|
||||||
skb = netdev_alloc_skb_ip_align(dev, rx_bytes);
|
skb = netdev_alloc_skb_ip_align(dev, rx_bytes);
|
||||||
if (unlikely(!skb))
|
if (unlikely(!skb))
|
||||||
|
@ -769,7 +769,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
dma_sync_single_range_for_cpu(dev->dev.parent,
|
dma_sync_single_range_for_cpu(dev->dev.parent,
|
||||||
rx_desc->buf_phys_addr,
|
rx_desc->buf_phys_addr,
|
||||||
@@ -1671,26 +2055,31 @@ static int mvneta_rx(struct mvneta_port
|
@@ -1675,26 +2059,31 @@ static int mvneta_rx(struct mvneta_port
|
||||||
rcvd_pkts++;
|
rcvd_pkts++;
|
||||||
rcvd_bytes += rx_bytes;
|
rcvd_bytes += rx_bytes;
|
||||||
|
|
||||||
|
@ -807,7 +807,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
if (!skb)
|
if (!skb)
|
||||||
goto err_drop_frame;
|
goto err_drop_frame;
|
||||||
|
|
||||||
@@ -2295,7 +2684,10 @@ static int mvneta_poll(struct napi_struc
|
@@ -2299,7 +2688,10 @@ static int mvneta_poll(struct napi_struc
|
||||||
|
|
||||||
if (rx_queue) {
|
if (rx_queue) {
|
||||||
rx_queue = rx_queue - 1;
|
rx_queue = rx_queue - 1;
|
||||||
|
@ -819,7 +819,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
}
|
}
|
||||||
|
|
||||||
budget -= rx_done;
|
budget -= rx_done;
|
||||||
@@ -2384,9 +2776,17 @@ static int mvneta_rxq_init(struct mvneta
|
@@ -2388,9 +2780,17 @@ static int mvneta_rxq_init(struct mvneta
|
||||||
mvneta_rx_pkts_coal_set(pp, rxq, rxq->pkts_coal);
|
mvneta_rx_pkts_coal_set(pp, rxq, rxq->pkts_coal);
|
||||||
mvneta_rx_time_coal_set(pp, rxq, rxq->time_coal);
|
mvneta_rx_time_coal_set(pp, rxq, rxq->time_coal);
|
||||||
|
|
||||||
|
@ -840,7 +840,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvneta_rxq_fill(pp, rxq, rxq->size);
|
mvneta_rxq_fill(pp, rxq, rxq->size);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2659,6 +3059,9 @@ static int mvneta_change_mtu(struct net_
|
@@ -2663,6 +3063,9 @@ static int mvneta_change_mtu(struct net_
|
||||||
dev->mtu = mtu;
|
dev->mtu = mtu;
|
||||||
|
|
||||||
if (!netif_running(dev)) {
|
if (!netif_running(dev)) {
|
||||||
|
@ -850,7 +850,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
netdev_update_features(dev);
|
netdev_update_features(dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -2671,6 +3074,9 @@ static int mvneta_change_mtu(struct net_
|
@@ -2675,6 +3078,9 @@ static int mvneta_change_mtu(struct net_
|
||||||
mvneta_cleanup_txqs(pp);
|
mvneta_cleanup_txqs(pp);
|
||||||
mvneta_cleanup_rxqs(pp);
|
mvneta_cleanup_rxqs(pp);
|
||||||
|
|
||||||
|
@ -860,7 +860,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
pp->pkt_size = MVNETA_RX_PKT_SIZE(dev->mtu);
|
pp->pkt_size = MVNETA_RX_PKT_SIZE(dev->mtu);
|
||||||
pp->frag_size = SKB_DATA_ALIGN(MVNETA_RX_BUF_SIZE(pp->pkt_size)) +
|
pp->frag_size = SKB_DATA_ALIGN(MVNETA_RX_BUF_SIZE(pp->pkt_size)) +
|
||||||
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||||
@@ -3563,6 +3969,7 @@ static int mvneta_probe(struct platform_
|
@@ -3567,6 +3973,7 @@ static int mvneta_probe(struct platform_
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
struct device_node *dn = pdev->dev.of_node;
|
struct device_node *dn = pdev->dev.of_node;
|
||||||
struct device_node *phy_node;
|
struct device_node *phy_node;
|
||||||
|
@ -868,7 +868,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
struct mvneta_port *pp;
|
struct mvneta_port *pp;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
const char *dt_mac_addr;
|
const char *dt_mac_addr;
|
||||||
@@ -3690,26 +4097,39 @@ static int mvneta_probe(struct platform_
|
@@ -3694,26 +4101,39 @@ static int mvneta_probe(struct platform_
|
||||||
|
|
||||||
pp->tx_csum_limit = tx_csum_limit;
|
pp->tx_csum_limit = tx_csum_limit;
|
||||||
|
|
||||||
|
@ -914,7 +914,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
for_each_present_cpu(cpu) {
|
for_each_present_cpu(cpu) {
|
||||||
struct mvneta_pcpu_port *port = per_cpu_ptr(pp->ports, cpu);
|
struct mvneta_pcpu_port *port = per_cpu_ptr(pp->ports, cpu);
|
||||||
|
|
||||||
@@ -3744,6 +4164,13 @@ static int mvneta_probe(struct platform_
|
@@ -3748,6 +4168,13 @@ static int mvneta_probe(struct platform_
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -928,7 +928,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
err_free_stats:
|
err_free_stats:
|
||||||
free_percpu(pp->stats);
|
free_percpu(pp->stats);
|
||||||
err_free_ports:
|
err_free_ports:
|
||||||
@@ -3773,6 +4200,12 @@ static int mvneta_remove(struct platform
|
@@ -3777,6 +4204,12 @@ static int mvneta_remove(struct platform
|
||||||
of_node_put(pp->phy_node);
|
of_node_put(pp->phy_node);
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
goto bm_mtu_err;
|
goto bm_mtu_err;
|
||||||
}
|
}
|
||||||
mvneta_bm_pool_bufsize_set(pp, bm_pool->buf_size, bm_pool->id);
|
mvneta_bm_pool_bufsize_set(pp, bm_pool->buf_size, bm_pool->id);
|
||||||
@@ -2064,14 +2066,14 @@ err_drop_frame:
|
@@ -2068,14 +2070,14 @@ err_drop_frame:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Refill processing */
|
/* Refill processing */
|
||||||
|
|
|
@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||||
@@ -3484,17 +3484,17 @@ static int mvneta_stop(struct net_device
|
@@ -3488,17 +3488,17 @@ static int mvneta_stop(struct net_device
|
||||||
struct mvneta_port *pp = netdev_priv(dev);
|
struct mvneta_port *pp = netdev_priv(dev);
|
||||||
|
|
||||||
/* Inform that we are stopping so we don't want to setup the
|
/* Inform that we are stopping so we don't want to setup the
|
||||||
|
@ -42,7 +42,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
on_each_cpu(mvneta_percpu_disable, pp, true);
|
on_each_cpu(mvneta_percpu_disable, pp, true);
|
||||||
free_percpu_irq(dev->irq, pp->ports);
|
free_percpu_irq(dev->irq, pp->ports);
|
||||||
mvneta_cleanup_rxqs(pp);
|
mvneta_cleanup_rxqs(pp);
|
||||||
@@ -4027,6 +4027,7 @@ static int mvneta_probe(struct platform_
|
@@ -4031,6 +4031,7 @@ static int mvneta_probe(struct platform_
|
||||||
dev->ethtool_ops = &mvneta_eth_tool_ops;
|
dev->ethtool_ops = &mvneta_eth_tool_ops;
|
||||||
|
|
||||||
pp = netdev_priv(dev);
|
pp = netdev_priv(dev);
|
||||||
|
|
|
@ -33,7 +33,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
#define IS_TSO_HEADER(txq, addr) \
|
#define IS_TSO_HEADER(txq, addr) \
|
||||||
((addr >= txq->tso_hdrs_phys) && \
|
((addr >= txq->tso_hdrs_phys) && \
|
||||||
@@ -2762,9 +2761,6 @@ static int mvneta_rxq_init(struct mvneta
|
@@ -2766,9 +2765,6 @@ static int mvneta_rxq_init(struct mvneta
|
||||||
if (rxq->descs == NULL)
|
if (rxq->descs == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
rxq->last_desc = rxq->size - 1;
|
rxq->last_desc = rxq->size - 1;
|
||||||
|
|
||||||
/* Set Rx descriptors queue starting address */
|
/* Set Rx descriptors queue starting address */
|
||||||
@@ -2835,10 +2831,6 @@ static int mvneta_txq_init(struct mvneta
|
@@ -2839,10 +2835,6 @@ static int mvneta_txq_init(struct mvneta
|
||||||
if (txq->descs == NULL)
|
if (txq->descs == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||||
@@ -3040,6 +3040,20 @@ static int mvneta_check_mtu_valid(struct
|
@@ -3044,6 +3044,20 @@ static int mvneta_check_mtu_valid(struct
|
||||||
return mtu;
|
return mtu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
/* Change the device mtu */
|
/* Change the device mtu */
|
||||||
static int mvneta_change_mtu(struct net_device *dev, int mtu)
|
static int mvneta_change_mtu(struct net_device *dev, int mtu)
|
||||||
{
|
{
|
||||||
@@ -3064,6 +3078,7 @@ static int mvneta_change_mtu(struct net_
|
@@ -3068,6 +3082,7 @@ static int mvneta_change_mtu(struct net_
|
||||||
* reallocation of the queues
|
* reallocation of the queues
|
||||||
*/
|
*/
|
||||||
mvneta_stop_dev(pp);
|
mvneta_stop_dev(pp);
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
mvneta_cleanup_txqs(pp);
|
mvneta_cleanup_txqs(pp);
|
||||||
mvneta_cleanup_rxqs(pp);
|
mvneta_cleanup_rxqs(pp);
|
||||||
@@ -3087,6 +3102,7 @@ static int mvneta_change_mtu(struct net_
|
@@ -3091,6 +3106,7 @@ static int mvneta_change_mtu(struct net_
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
mvneta_start_dev(pp);
|
mvneta_start_dev(pp);
|
||||||
mvneta_port_up(pp);
|
mvneta_port_up(pp);
|
||||||
|
|
||||||
@@ -3240,20 +3256,6 @@ static void mvneta_mdio_remove(struct mv
|
@@ -3244,20 +3260,6 @@ static void mvneta_mdio_remove(struct mv
|
||||||
pp->phy_dev = NULL;
|
pp->phy_dev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,18 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
|
|
||||||
struct mvneta_bm *bm_priv;
|
struct mvneta_bm *bm_priv;
|
||||||
struct mvneta_bm_pool *pool_long;
|
struct mvneta_bm_pool *pool_long;
|
||||||
@@ -1236,44 +1238,6 @@ static void mvneta_set_other_mcast_table
|
@@ -1177,10 +1179,6 @@ static void mvneta_port_disable(struct m
|
||||||
|
val &= ~MVNETA_GMAC0_PORT_ENABLE;
|
||||||
|
mvreg_write(pp, MVNETA_GMAC_CTRL_0, val);
|
||||||
|
|
||||||
|
- pp->link = 0;
|
||||||
|
- pp->duplex = -1;
|
||||||
|
- pp->speed = 0;
|
||||||
|
-
|
||||||
|
udelay(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1240,44 +1238,6 @@ static void mvneta_set_other_mcast_table
|
||||||
mvreg_write(pp, MVNETA_DA_FILT_OTH_MCAST + offset, val);
|
mvreg_write(pp, MVNETA_DA_FILT_OTH_MCAST + offset, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +135,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
static void mvneta_percpu_unmask_interrupt(void *arg)
|
static void mvneta_percpu_unmask_interrupt(void *arg)
|
||||||
{
|
{
|
||||||
struct mvneta_port *pp = arg;
|
struct mvneta_port *pp = arg;
|
||||||
@@ -1421,7 +1385,6 @@ static void mvneta_defaults_set(struct m
|
@@ -1425,7 +1385,6 @@ static void mvneta_defaults_set(struct m
|
||||||
val &= ~MVNETA_PHY_POLLING_ENABLE;
|
val &= ~MVNETA_PHY_POLLING_ENABLE;
|
||||||
mvreg_write(pp, MVNETA_UNIT_CONTROL, val);
|
mvreg_write(pp, MVNETA_UNIT_CONTROL, val);
|
||||||
|
|
||||||
|
@ -132,7 +143,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
mvneta_set_ucast_table(pp, -1);
|
mvneta_set_ucast_table(pp, -1);
|
||||||
mvneta_set_special_mcast_table(pp, -1);
|
mvneta_set_special_mcast_table(pp, -1);
|
||||||
mvneta_set_other_mcast_table(pp, -1);
|
mvneta_set_other_mcast_table(pp, -1);
|
||||||
@@ -2614,26 +2577,11 @@ static irqreturn_t mvneta_isr(int irq, v
|
@@ -2618,26 +2577,11 @@ static irqreturn_t mvneta_isr(int irq, v
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +172,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NAPI handler
|
/* NAPI handler
|
||||||
@@ -2662,12 +2610,11 @@ static int mvneta_poll(struct napi_struc
|
@@ -2666,12 +2610,11 @@ static int mvneta_poll(struct napi_struc
|
||||||
u32 cause_misc = mvreg_read(pp, MVNETA_INTR_MISC_CAUSE);
|
u32 cause_misc = mvreg_read(pp, MVNETA_INTR_MISC_CAUSE);
|
||||||
|
|
||||||
mvreg_write(pp, MVNETA_INTR_MISC_CAUSE, 0);
|
mvreg_write(pp, MVNETA_INTR_MISC_CAUSE, 0);
|
||||||
|
@ -179,7 +190,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Release Tx descriptors */
|
/* Release Tx descriptors */
|
||||||
@@ -2983,7 +2930,7 @@ static void mvneta_start_dev(struct mvne
|
@@ -2987,7 +2930,7 @@ static void mvneta_start_dev(struct mvne
|
||||||
MVNETA_CAUSE_LINK_CHANGE |
|
MVNETA_CAUSE_LINK_CHANGE |
|
||||||
MVNETA_CAUSE_PSC_SYNC_CHANGE);
|
MVNETA_CAUSE_PSC_SYNC_CHANGE);
|
||||||
|
|
||||||
|
@ -188,7 +199,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
netif_tx_start_all_queues(pp->dev);
|
netif_tx_start_all_queues(pp->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2991,7 +2938,7 @@ static void mvneta_stop_dev(struct mvnet
|
@@ -2995,7 +2938,7 @@ static void mvneta_stop_dev(struct mvnet
|
||||||
{
|
{
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
|
|
||||||
|
@ -197,7 +208,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
|
|
||||||
for_each_online_cpu(cpu) {
|
for_each_online_cpu(cpu) {
|
||||||
struct mvneta_pcpu_port *port = per_cpu_ptr(pp->ports, cpu);
|
struct mvneta_pcpu_port *port = per_cpu_ptr(pp->ports, cpu);
|
||||||
@@ -3161,99 +3108,219 @@ static int mvneta_set_mac_addr(struct ne
|
@@ -3165,99 +3108,219 @@ static int mvneta_set_mac_addr(struct ne
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,13 +449,6 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
- struct phy_device *phy_dev;
|
- struct phy_device *phy_dev;
|
||||||
+ struct mvneta_port *pp = netdev_priv(ndev);
|
+ struct mvneta_port *pp = netdev_priv(ndev);
|
||||||
+ u32 val;
|
+ u32 val;
|
||||||
+
|
|
||||||
+ if (mode == MLO_AN_PHY || mode == MLO_AN_FIXED) {
|
|
||||||
+ val = mvreg_read(pp, MVNETA_GMAC_AUTONEG_CONFIG);
|
|
||||||
+ val &= ~MVNETA_GMAC_FORCE_LINK_DOWN;
|
|
||||||
+ val |= MVNETA_GMAC_FORCE_LINK_PASS;
|
|
||||||
+ mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG, val);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- phy_dev = of_phy_connect(pp->dev, pp->phy_node, mvneta_adjust_link, 0,
|
- phy_dev = of_phy_connect(pp->dev, pp->phy_node, mvneta_adjust_link, 0,
|
||||||
- pp->phy_interface);
|
- pp->phy_interface);
|
||||||
|
@ -460,10 +464,17 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
- pp->link = 0;
|
- pp->link = 0;
|
||||||
- pp->duplex = 0;
|
- pp->duplex = 0;
|
||||||
- pp->speed = 0;
|
- pp->speed = 0;
|
||||||
+ mvneta_port_up(pp);
|
+ if (mode == MLO_AN_PHY || mode == MLO_AN_FIXED) {
|
||||||
+}
|
+ val = mvreg_read(pp, MVNETA_GMAC_AUTONEG_CONFIG);
|
||||||
|
+ val &= ~MVNETA_GMAC_FORCE_LINK_DOWN;
|
||||||
|
+ val |= MVNETA_GMAC_FORCE_LINK_PASS;
|
||||||
|
+ mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG, val);
|
||||||
|
+ }
|
||||||
|
|
||||||
- return 0;
|
- return 0;
|
||||||
|
+ mvneta_port_up(pp);
|
||||||
|
+}
|
||||||
|
+
|
||||||
+static const struct phylink_mac_ops mvneta_phylink_ops = {
|
+static const struct phylink_mac_ops mvneta_phylink_ops = {
|
||||||
+ .mac_get_support = mvneta_mac_support,
|
+ .mac_get_support = mvneta_mac_support,
|
||||||
+ .mac_link_state = mvneta_mac_link_state,
|
+ .mac_link_state = mvneta_mac_link_state,
|
||||||
|
@ -490,7 +501,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Electing a CPU must be done in an atomic way: it should be done
|
/* Electing a CPU must be done in an atomic way: it should be done
|
||||||
@@ -3501,10 +3568,7 @@ static int mvneta_ioctl(struct net_devic
|
@@ -3505,10 +3568,7 @@ static int mvneta_ioctl(struct net_devic
|
||||||
{
|
{
|
||||||
struct mvneta_port *pp = netdev_priv(dev);
|
struct mvneta_port *pp = netdev_priv(dev);
|
||||||
|
|
||||||
|
@ -502,7 +513,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ethtool methods */
|
/* Ethtool methods */
|
||||||
@@ -3514,54 +3578,15 @@ int mvneta_ethtool_get_settings(struct n
|
@@ -3518,54 +3578,15 @@ int mvneta_ethtool_get_settings(struct n
|
||||||
{
|
{
|
||||||
struct mvneta_port *pp = netdev_priv(dev);
|
struct mvneta_port *pp = netdev_priv(dev);
|
||||||
|
|
||||||
|
@ -559,7 +570,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set interrupt coalescing for ethtools */
|
/* Set interrupt coalescing for ethtools */
|
||||||
@@ -3669,7 +3694,8 @@ static void mvneta_ethtool_update_stats(
|
@@ -3673,7 +3694,8 @@ static void mvneta_ethtool_update_stats(
|
||||||
{
|
{
|
||||||
const struct mvneta_statistic *s;
|
const struct mvneta_statistic *s;
|
||||||
void __iomem *base = pp->base;
|
void __iomem *base = pp->base;
|
||||||
|
@ -569,7 +580,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
u64 val64;
|
u64 val64;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -3964,14 +3990,13 @@ static int mvneta_probe(struct platform_
|
@@ -3968,14 +3990,13 @@ static int mvneta_probe(struct platform_
|
||||||
const struct mbus_dram_target_info *dram_target_info;
|
const struct mbus_dram_target_info *dram_target_info;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
struct device_node *dn = pdev->dev.of_node;
|
struct device_node *dn = pdev->dev.of_node;
|
||||||
|
@ -585,7 +596,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
int tx_csum_limit;
|
int tx_csum_limit;
|
||||||
int phy_mode;
|
int phy_mode;
|
||||||
int err;
|
int err;
|
||||||
@@ -3987,31 +4012,11 @@ static int mvneta_probe(struct platform_
|
@@ -3991,31 +4012,11 @@ static int mvneta_probe(struct platform_
|
||||||
goto err_free_netdev;
|
goto err_free_netdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,7 +629,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->tx_queue_len = MVNETA_MAX_TXD;
|
dev->tx_queue_len = MVNETA_MAX_TXD;
|
||||||
@@ -4022,12 +4027,7 @@ static int mvneta_probe(struct platform_
|
@@ -4026,12 +4027,7 @@ static int mvneta_probe(struct platform_
|
||||||
|
|
||||||
pp = netdev_priv(dev);
|
pp = netdev_priv(dev);
|
||||||
spin_lock_init(&pp->lock);
|
spin_lock_init(&pp->lock);
|
||||||
|
@ -632,7 +643,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
pp->cpu_notifier.notifier_call = mvneta_percpu_notifier;
|
pp->cpu_notifier.notifier_call = mvneta_percpu_notifier;
|
||||||
|
|
||||||
pp->rxq_def = rxq_def;
|
pp->rxq_def = rxq_def;
|
||||||
@@ -4037,7 +4037,7 @@ static int mvneta_probe(struct platform_
|
@@ -4041,7 +4037,7 @@ static int mvneta_probe(struct platform_
|
||||||
pp->clk = devm_clk_get(&pdev->dev, NULL);
|
pp->clk = devm_clk_get(&pdev->dev, NULL);
|
||||||
if (IS_ERR(pp->clk)) {
|
if (IS_ERR(pp->clk)) {
|
||||||
err = PTR_ERR(pp->clk);
|
err = PTR_ERR(pp->clk);
|
||||||
|
@ -641,7 +652,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
}
|
}
|
||||||
|
|
||||||
clk_prepare_enable(pp->clk);
|
clk_prepare_enable(pp->clk);
|
||||||
@@ -4140,6 +4140,14 @@ static int mvneta_probe(struct platform_
|
@@ -4144,6 +4140,14 @@ static int mvneta_probe(struct platform_
|
||||||
dev->priv_flags |= IFF_UNICAST_FLT | IFF_LIVE_ADDR_CHANGE;
|
dev->priv_flags |= IFF_UNICAST_FLT | IFF_LIVE_ADDR_CHANGE;
|
||||||
dev->gso_max_segs = MVNETA_MAX_TSO_SEGS;
|
dev->gso_max_segs = MVNETA_MAX_TSO_SEGS;
|
||||||
|
|
||||||
|
@ -656,7 +667,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
err = register_netdev(dev);
|
err = register_netdev(dev);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
dev_err(&pdev->dev, "failed to register\n");
|
dev_err(&pdev->dev, "failed to register\n");
|
||||||
@@ -4151,13 +4159,6 @@ static int mvneta_probe(struct platform_
|
@@ -4155,13 +4159,6 @@ static int mvneta_probe(struct platform_
|
||||||
|
|
||||||
platform_set_drvdata(pdev, pp->dev);
|
platform_set_drvdata(pdev, pp->dev);
|
||||||
|
|
||||||
|
@ -670,7 +681,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -4169,13 +4170,13 @@ err_netdev:
|
@@ -4173,13 +4170,13 @@ err_netdev:
|
||||||
1 << pp->id);
|
1 << pp->id);
|
||||||
}
|
}
|
||||||
err_free_stats:
|
err_free_stats:
|
||||||
|
@ -686,7 +697,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
err_free_irq:
|
err_free_irq:
|
||||||
irq_dispose_mapping(dev->irq);
|
irq_dispose_mapping(dev->irq);
|
||||||
err_free_netdev:
|
err_free_netdev:
|
||||||
@@ -4194,7 +4195,7 @@ static int mvneta_remove(struct platform
|
@@ -4198,7 +4195,7 @@ static int mvneta_remove(struct platform
|
||||||
free_percpu(pp->ports);
|
free_percpu(pp->ports);
|
||||||
free_percpu(pp->stats);
|
free_percpu(pp->stats);
|
||||||
irq_dispose_mapping(dev->irq);
|
irq_dispose_mapping(dev->irq);
|
||||||
|
|
|
@ -153,7 +153,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
||||||
}
|
}
|
||||||
--- a/init/main.c
|
--- a/init/main.c
|
||||||
+++ b/init/main.c
|
+++ b/init/main.c
|
||||||
@@ -88,6 +88,10 @@
|
@@ -89,6 +89,10 @@
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
||||||
static int kernel_init(void *);
|
static int kernel_init(void *);
|
||||||
|
|
||||||
extern void init_IRQ(void);
|
extern void init_IRQ(void);
|
||||||
@@ -560,6 +564,18 @@ asmlinkage __visible void __init start_k
|
@@ -562,6 +566,18 @@ asmlinkage __visible void __init start_k
|
||||||
page_alloc_init();
|
page_alloc_init();
|
||||||
|
|
||||||
pr_notice("Kernel command line: %s\n", boot_command_line);
|
pr_notice("Kernel command line: %s\n", boot_command_line);
|
||||||
|
|
Loading…
Reference in New Issue