endif
LINUX_VERSION-4.19 = .138
-LINUX_VERSION-5.4 = .63
+LINUX_VERSION-5.4 = .64
LINUX_KERNEL_HASH-4.19.138 = d15c27d05f6c527269b75b30cc72972748e55720e7e00ad8abbaa4fe3b1d5e02
-LINUX_KERNEL_HASH-5.4.63 = e0260dae0da01163b1a3289ad9c5cc6ee4226720e199e8a1d982e24efda7ffc0
+LINUX_KERNEL_HASH-5.4.64 = b9d3c2938466f388a70fd190fd6691baa8b757393b267e9f7b06c4730d85d5ef
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
#define USB_VENDOR_ID_BELKIN 0x050d
#define USB_DEVICE_ID_FLIP_KVM 0x3201
-@@ -1238,6 +1241,9 @@
+@@ -1241,6 +1244,9 @@
#define USB_VENDOR_ID_XAT 0x2505
#define USB_DEVICE_ID_XAT_CSR 0x0220
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT },
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL },
-@@ -179,6 +180,7 @@ static const struct hid_device_id hid_qu
+@@ -182,6 +183,7 @@ static const struct hid_device_id hid_qu
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT },
if (dc_lsize == 0)
r4k_blast_dcache = (void *)cache_noop;
else if (dc_lsize == 16)
-@@ -1775,6 +1787,17 @@ static void coherency_setup(void)
+@@ -1779,6 +1791,17 @@ static void coherency_setup(void)
* silly idea of putting something else there ...
*/
switch (current_cpu_type()) {
case CPU_R4000PC:
case CPU_R4000SC:
case CPU_R4000MC:
-@@ -1821,6 +1844,15 @@ void r4k_cache_init(void)
+@@ -1825,6 +1848,15 @@ void r4k_cache_init(void)
extern void build_copy_page(void);
struct cpuinfo_mips *c = ¤t_cpu_data;
probe_pcache();
probe_vcache();
setup_scache();
-@@ -1897,7 +1929,15 @@ void r4k_cache_init(void)
+@@ -1901,7 +1933,15 @@ void r4k_cache_init(void)
*/
local_r4k___flush_cache_all(NULL);
+++ /dev/null
-From: Alexander Lobakin <alobakin@dlink.ru>
-Date: Mon, 14 Oct 2019 11:00:33 +0300
-Subject: [PATCH] net: core: use listified Rx for GRO_NORMAL in
- napi_gro_receive()
-
-Commit 323ebb61e32b4 ("net: use listified RX for handling GRO_NORMAL
-skbs") made use of listified skb processing for the users of
-napi_gro_frags().
-The same technique can be used in a way more common napi_gro_receive()
-to speed up non-merged (GRO_NORMAL) skbs for a wide range of drivers
-including gro_cells and mac80211 users.
-This slightly changes the return value in cases where skb is being
-dropped by the core stack, but it seems to have no impact on related
-drivers' functionality.
-gro_normal_batch is left untouched as it's very individual for every
-single system configuration and might be tuned in manual order to
-achieve an optimal performance.
-
-Signed-off-by: Alexander Lobakin <alobakin@dlink.ru>
-Acked-by: Edward Cree <ecree@solarflare.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
-
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -5601,12 +5601,13 @@ static void napi_skb_free_stolen_head(st
- kmem_cache_free(skbuff_head_cache, skb);
- }
-
--static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
-+static gro_result_t napi_skb_finish(struct napi_struct *napi,
-+ struct sk_buff *skb,
-+ gro_result_t ret)
- {
- switch (ret) {
- case GRO_NORMAL:
-- if (netif_receive_skb_internal(skb))
-- ret = GRO_DROP;
-+ gro_normal_one(napi, skb);
- break;
-
- case GRO_DROP:
-@@ -5638,7 +5639,7 @@ gro_result_t napi_gro_receive(struct nap
-
- skb_gro_reset_offset(skb);
-
-- ret = napi_skb_finish(dev_gro_receive(napi, skb), skb);
-+ ret = napi_skb_finish(napi, skb, dev_gro_receive(napi, skb));
- trace_napi_gro_receive_exit(ret);
-
- return ret;
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -2184,12 +2186,12 @@ static int tpacket_rcv(struct sk_buff *s
+@@ -2185,12 +2187,12 @@ static int tpacket_rcv(struct sk_buff *s
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -3284,6 +3286,7 @@ static int packet_create(struct net *net
+@@ -3289,6 +3291,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock);
po->rollover = NULL;
po->prot_hook.func = packet_rcv;
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -3917,6 +3920,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3922,6 +3925,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0;
}
default:
return -ENOPROTOOPT;
}
-@@ -3973,6 +3986,13 @@ static int packet_getsockopt(struct sock
+@@ -3978,6 +3991,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;
+MODULE_ALIAS("nf-flow-table-hw");
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
-@@ -5745,6 +5745,13 @@ static int nf_tables_flowtable_parse_hoo
+@@ -5741,6 +5741,13 @@ static int nf_tables_flowtable_parse_hoo
if (err < 0)
return err;
ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL);
if (!ops)
return -ENOMEM;
-@@ -5875,10 +5882,19 @@ static int nf_tables_newflowtable(struct
+@@ -5871,10 +5878,19 @@ static int nf_tables_newflowtable(struct
}
flowtable->data.type = type;
err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
flowtable);
if (err < 0)
-@@ -6004,7 +6020,8 @@ static int nf_tables_fill_flowtable_info
+@@ -6000,7 +6016,8 @@ static int nf_tables_fill_flowtable_info
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),
#include "libata.h"
#include "libata-transport.h"
-@@ -4573,6 +4574,34 @@ int ata_scsi_add_hosts(struct ata_host *
+@@ -4579,6 +4580,34 @@ int ata_scsi_add_hosts(struct ata_host *
return rc;
}
void ata_scsi_scan_host(struct ata_port *ap, int sync)
{
int tries = 5;
-@@ -4598,6 +4627,7 @@ void ata_scsi_scan_host(struct ata_port
+@@ -4604,6 +4633,7 @@ void ata_scsi_scan_host(struct ata_port
NULL);
if (!IS_ERR(sdev)) {
dev->sdev = sdev;
/**
* ata_build_rw_tf - Build ATA taskfile for given read/write request
* @tf: Target ATA taskfile
-@@ -5115,6 +5128,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
+@@ -5114,6 +5127,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
if (tag < 0)
return NULL;
}
qc = __ata_qc_from_tag(ap, tag);
qc->tag = qc->hw_tag = tag;
-@@ -6049,6 +6065,9 @@ struct ata_port *ata_port_alloc(struct a
+@@ -6048,6 +6064,9 @@ struct ata_port *ata_port_alloc(struct a
ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1;
#endif
ata_sff_port_init(ap);
return ap;
-@@ -6084,6 +6103,12 @@ static void ata_host_release(struct kref
+@@ -6083,6 +6102,12 @@ static void ata_host_release(struct kref
kfree(ap->pmp_link);
kfree(ap->slave_link);
kfree(ap);
host->ports[i] = NULL;
}
-@@ -6547,7 +6572,23 @@ int ata_host_register(struct ata_host *h
+@@ -6546,7 +6571,23 @@ int ata_host_register(struct ata_host *h
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
host->ports[i]->local_port_no = i + 1;
}
/*
* Define if arch has non-standard setup. This is a _PCI_ standard
-@@ -879,6 +882,12 @@ struct ata_port {
+@@ -880,6 +883,12 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -712,6 +712,17 @@
+@@ -714,6 +714,17 @@
status = "disabled";
};
+ * @duplex: link duplex
+ * @tx_pause: link transmit pause enablement status
+ * @rx_pause: link receive pause enablement status
- *
-- * If @mode is not an in-band negotiation mode (as defined by
-- * phylink_autoneg_inband()), allow the link to come up. If @phy
-- * is non-%NULL, configure Energy Efficient Ethernet by calling
++ *
+ * Configure the MAC for an established link.
+ *
+ * @speed, @duplex, @tx_pause and @rx_pause indicate the finalised link
+ * Note that when 802.3z in-band negotiation is in use, it is possible
+ * that the user wishes to override the pause settings, and this should
+ * be allowed when considering the implementation of this method.
-+ *
+ *
+- * If @mode is not an in-band negotiation mode (as defined by
+- * phylink_autoneg_inband()), allow the link to come up. If @phy
+- * is non-%NULL, configure Energy Efficient Ethernet by calling
+ * If in-band negotiation mode is disabled, allow the link to come up. If
+ * @phy is non-%NULL, configure Energy Efficient Ethernet by calling
* phy_init_eee() and perform appropriate MAC configuration for EEE.
{
struct mt7530_priv *priv = ds->priv;
+ u32 mcr;
-
-- mt7530_port_set_status(priv, port, 1);
++
+ mcr = PMCR_RX_EN | PMCR_TX_EN | PMCR_FORCE_LNK;
+
+ switch (speed) {
+ if (rx_pause)
+ mcr |= PMCR_RX_FC_EN;
+ }
-+
+
+- mt7530_port_set_status(priv, port, 1);
+ mt7530_set(priv, MT7530_PMCR_P(port), mcr);
}
phylink_set(mask, 100baseT_Full);
-
- if (state->interface != PHY_INTERFACE_MODE_MII) {
-- phylink_set(mask, 1000baseT_Half);
+- /* This switch only supports 1G full-duplex. */
- phylink_set(mask, 1000baseT_Full);
- if (port == 5)
- phylink_set(mask, 1000baseX_Full);
&pio {
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -790,45 +790,41 @@
+@@ -792,45 +792,41 @@
#reset-cells = <1>;
};
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &pcie_intc0 0>,
<0 0 0 2 &pcie_intc0 1>,
-@@ -840,15 +836,39 @@
+@@ -842,15 +838,39 @@
#interrupt-cells = <1>;
};
};
interface-type = "ace";
reg = <0x5000 0x1000>;
};
-@@ -965,6 +965,8 @@
+@@ -967,6 +967,8 @@
power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
mediatek,ethsys = <ðsys>;
mediatek,sgmiisys = <&sgmiisys>;
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
-@@ -801,6 +801,8 @@
+@@ -803,6 +803,8 @@
reg = <0 0x1a143000 0 0x1000>;
reg-names = "port0";
mediatek,pcie-cfg = <&pciecfg>;
#address-cells = <3>;
#size-cells = <2>;
interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_LOW>;
-@@ -818,6 +820,7 @@
+@@ -820,6 +822,7 @@
bus-range = <0x00 0xff>;
ranges = <0x82000000 0 0x20000000 0x0 0x20000000 0 0x8000000>;
status = "disabled";
slot0: pcie@0,0 {
reg = <0x0000 0 0 0 0>;
-@@ -844,6 +847,8 @@
+@@ -846,6 +849,8 @@
reg = <0 0x1a145000 0 0x1000>;
reg-names = "port1";
mediatek,pcie-cfg = <&pciecfg>;
#address-cells = <3>;
#size-cells = <2>;
interrupts = <GIC_SPI 229 IRQ_TYPE_LEVEL_LOW>;
-@@ -862,6 +867,7 @@
+@@ -864,6 +869,7 @@
bus-range = <0x00 0xff>;
ranges = <0x82000000 0 0x28000000 0x0 0x28000000 0 0x8000000>;
status = "disabled";
slot1: pcie@1,0 {
reg = <0x0800 0 0 0 0>;
-@@ -921,6 +927,11 @@
+@@ -923,6 +929,11 @@
};
};
/* initialize internal qc */
qc = __ata_qc_from_tag(ap, ATA_TAG_INTERNAL);
-@@ -5122,6 +5130,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
+@@ -5121,6 +5129,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
return NULL;
/* libsas case */
if (ap->flags & ATA_FLAG_SAS_HOST) {
tag = ata_sas_allocate_tag(ap);
-@@ -5167,6 +5178,8 @@ void ata_qc_free(struct ata_queued_cmd *
+@@ -5166,6 +5177,8 @@ void ata_qc_free(struct ata_queued_cmd *
qc->tag = ATA_TAG_POISON;
if (ap->flags & ATA_FLAG_SAS_HOST)
ata_sas_free_tag(tag, ap);
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
-@@ -908,6 +908,8 @@ struct ata_port_operations {
+@@ -909,6 +909,8 @@ struct ata_port_operations {
void (*qc_prep)(struct ata_queued_cmd *qc);
unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
/*
* Configuration and exception handling
-@@ -998,6 +1000,9 @@ struct ata_port_operations {
+@@ -999,6 +1001,9 @@ struct ata_port_operations {
void (*phy_reset)(struct ata_port *ap);
void (*eng_timeout)(struct ata_port *ap);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2860,6 +2860,7 @@ static const struct net_device_ops mtk_n
+@@ -2863,6 +2863,7 @@ static const struct net_device_ops mtk_n
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
{
const __be32 *_id = of_get_property(np, "reg", NULL);
struct phylink *phylink;
int phy_mode, id, err;
-@@ -2952,6 +2953,9 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -2955,6 +2956,9 @@ static int mtk_add_mac(struct mtk_eth *e
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH - MTK_RX_ETH_HLEN;