Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
a49a1a1833
@ -4,6 +4,5 @@ src-git routing https://github.com/openwrt-routing/packages.git
|
||||
src-git telephony https://github.com/openwrt/telephony.git
|
||||
#src-git video https://github.com/openwrt/video.git
|
||||
#src-git targets https://github.com/openwrt/targets.git
|
||||
#src-git management https://github.com/openwrt-management/packages.git
|
||||
#src-git oldpackages http://git.openwrt.org/packages.git
|
||||
#src-link custom /usr/src/openwrt/custom-feed
|
||||
|
||||
@ -6,11 +6,11 @@ ifdef CONFIG_TESTING_KERNEL
|
||||
KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER)
|
||||
endif
|
||||
|
||||
LINUX_VERSION-5.4 = .113
|
||||
LINUX_VERSION-5.10 = .32
|
||||
LINUX_VERSION-5.4 = .115
|
||||
LINUX_VERSION-5.10 = .33
|
||||
|
||||
LINUX_KERNEL_HASH-5.4.113 = 30cde92463c474b75f9eb197654570dd6dbb32ec20695544c5469f292662da47
|
||||
LINUX_KERNEL_HASH-5.10.32 = 644f8e326e4cb8eac65f0874774c09ccf91cbe0b55eb8438c1e8711d3d07d7ba
|
||||
LINUX_KERNEL_HASH-5.4.115 = 5b4724748527a622a886232b5da1471619eb3aa3bb38a11851275eba09989dd2
|
||||
LINUX_KERNEL_HASH-5.10.33 = 933fdbc36371c0f830b7a6a957a559fca2dad1cc0eaa852ef42fb168185b4315
|
||||
|
||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||
|
||||
@ -64,9 +64,7 @@ $(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)
|
||||
|
||||
# kernel only
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK, $(P_XT)nf_conntrack),))
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK_RTCACHE, $(P_XT)nf_conntrack_rtcache),))
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV4, $(P_V4)nf_defrag_ipv4),))
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK_IPV4, $(P_V4)nf_conntrack_ipv4),))
|
||||
|
||||
$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_STATE, $(P_XT)xt_state))
|
||||
$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_TARGET_CT, $(P_XT)xt_CT))
|
||||
@ -124,7 +122,6 @@ $(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_STATISTIC, $(P_XT)xt_st
|
||||
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_TCPMSS, $(P_XT)xt_tcpmss))
|
||||
|
||||
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_CLASSIFY, $(P_XT)xt_CLASSIFY))
|
||||
$(eval $(call nf_add,IPT_IPOPT,CONFIG_IP_NF_MATCH_DSCP, $(P_V4)ipt_dscp))
|
||||
$(eval $(call nf_add,IPT_IPOPT,CONFIG_IP_NF_TARGET_ECN, $(P_V4)ipt_ECN))
|
||||
|
||||
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_ECN, $(P_XT)xt_ecn))
|
||||
@ -160,17 +157,14 @@ $(eval $(if $(NF_KMOD),$(call nf_add,NF_REJECT6,CONFIG_NF_REJECT_IPV6, $(P_V6)nf
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT6,CONFIG_IP6_NF_IPTABLES, $(P_V6)ip6_tables),))
|
||||
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6),))
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK6,CONFIG_NF_CONNTRACK_IPV6, $(P_V6)nf_conntrack_ipv6),))
|
||||
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_FILTER, $(P_V6)ip6table_filter),))
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_MANGLE, $(P_V6)ip6table_mangle),))
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_QUEUE, $(P_V6)ip6_queue),))
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_NF_LOG_IPV6, $(P_V6)nf_log_ipv6),))
|
||||
|
||||
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_IPTABLES, ip6t_icmp6)))
|
||||
|
||||
|
||||
$(eval $(call nf_add,IPT_IPV6,CONFIG_IP6_NF_TARGET_LOG, $(P_V6)ip6t_LOG))
|
||||
$(eval $(call nf_add,IPT_IPV6,CONFIG_IP6_NF_TARGET_REJECT, $(P_V6)ip6t_REJECT))
|
||||
|
||||
# ipv6 extra
|
||||
|
||||
@ -67,6 +67,10 @@ zyxel,nbg6616)
|
||||
buffalo,wzr-hp-ag300h)
|
||||
ubootenv_add_uci_config "/dev/mtd3" "0x0" "0x10000" "0x10000"
|
||||
;;
|
||||
buffalo,wzr-hp-g300nh-rb|\
|
||||
buffalo,wzr-hp-g300nh-s)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
|
||||
;;
|
||||
domywifi,dw33d)
|
||||
ubootenv_add_uci_config "/dev/mtd4" "0x0" "0x10000" "0x10000"
|
||||
;;
|
||||
|
||||
@ -204,10 +204,10 @@
|
||||
+check_recovery=run ubi_read_recovery ; if iminfo $loadaddr ; then bootm $loadaddr ; else ubi remove recovery ; fi
|
||||
+check_ubi=ubi part ubi || run ubi_format
|
||||
+emmc_init=run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv
|
||||
+emmc_init_bl=run sdmmc_read_emmc_bl2 && run emmc_write_bl2 && run sdmmc_read_emmc_hdr && run emmc_write_hdr && run sdmmc_read_emmc_bl3 && run emmc_write_bl3
|
||||
+emmc_init_bl=run sdmmc_read_emmc_bl2 && run emmc_write_bl2 && run sdmmc_read_emmc_hdr && run emmc_write_hdr && run sdmmc_read_emmc_fip && run emmc_write_fip
|
||||
+emmc_init_openwrt=run sdmmc_read_recovery && run emmc_write_recovery ; run sdmmc_read_production && run emmc_write_production
|
||||
+emmc_write_bl2=mmc dev 0 1 && mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $loadaddr 0x0 0x100 ; mmc partconf 0 1 1 0
|
||||
+emmc_write_bl3=mmc dev 0 0 && mmc erase 0x1000 0x1000 && mmc write $loadaddr 0x1000 0x1000 && mmc erase 0x2000 0x800
|
||||
+emmc_write_fip=mmc dev 0 0 && mmc erase 0x1000 0x1000 && mmc write $loadaddr 0x1000 0x1000 && mmc erase 0x2000 0x800
|
||||
+emmc_write_hdr=mmc dev 0 0 && mmc erase 0x0 0x40 && mmc write $loadaddr 0x0 0x40
|
||||
+emmc_write_production=iminfo $loadaddr && mmc dev 0 && part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol
|
||||
+emmc_write_recovery=iminfo $loadaddr && mmc dev 0 && part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol
|
||||
@ -218,7 +218,7 @@
|
||||
+reset_factory=eraseenv && reset
|
||||
+sdmmc_read_emmc_hdr=mmc dev 1 && part start mmc 1 install part_addr && mmc read $loadaddr $part_addr 0x40
|
||||
+sdmmc_read_emmc_bl2=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x400 && mmc read $loadaddr $offset 0x400
|
||||
+sdmmc_read_emmc_bl3=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x1000 && mmc read $loadaddr $offset 0x1000
|
||||
+sdmmc_read_emmc_fip=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x1000 && mmc read $loadaddr $offset 0x1000
|
||||
+sdmmc_read_production=mmc dev 1 && part start mmc 1 $part_default part_addr && part size mmc 1 $part_default part_size && run mmc_read_vol
|
||||
+sdmmc_read_recovery=mmc dev 1 && part start mmc 1 $part_recovery part_addr && part size mmc 1 $part_recovery part_size && run mmc_read_vol
|
||||
+sdmmc_read_snand_bl2=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x2000 && mmc read $loadaddr $offset 0x400
|
||||
@ -391,7 +391,7 @@
|
||||
+CONFIG_USB_STORAGE=y
|
||||
--- /dev/null
|
||||
+++ b/bananapi_bpi-r64-emmc_env
|
||||
@@ -0,0 +1,46 @@
|
||||
@@ -0,0 +1,54 @@
|
||||
+ipaddr=192.168.1.1
|
||||
+serverip=192.168.1.254
|
||||
+loadaddr=0x4007ff28
|
||||
@ -403,6 +403,8 @@
|
||||
+bootdelay=0
|
||||
+bootfile=openwrt-mediatek-mt7622-bananapi_bpi-r64-initramfs-recovery.itb
|
||||
+bootfile_upg=openwrt-mediatek-mt7622-bananapi_bpi-r64-squashfs-sysupgrade.itb
|
||||
+bootfile_fip=openwrt-mediatek-mt7622-bananapi_bpi-r64-emmc-bl31-uboot.fip
|
||||
+bootfile_bl2=openwrt-mediatek-mt7622-bananapi_bpi-r64-emmc-preloader.bin
|
||||
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
|
||||
+bootmenu_default=0
|
||||
+bootmenu_delay=0
|
||||
@ -414,8 +416,10 @@
|
||||
+bootmenu_3=Boot recovery system from eMMC.=run boot_recovery ; run bootmenu_confirm_return
|
||||
+bootmenu_4=Load production system via TFTP then write to eMMC.=setenv noboot 1 ; run boot_tftp_production ; setenv noboot ; run bootmenu_confirm_return
|
||||
+bootmenu_5=Load recovery system via TFTP then write to eMMC.=setenv noboot 1 ; run boot_tftp_recovery ; setenv noboot ; run bootmenu_confirm_return
|
||||
+bootmenu_6=Reboot.=reset
|
||||
+bootmenu_7=Reset all settings to factory defaults.=run reset_factory ; reset
|
||||
+bootmenu_6=[31mLoad BL31+U-Boot FIP via TFTP then write to eMMC.[0m=run boot_tftp_write_fip ; run bootmenu_confirm_return
|
||||
+bootmenu_7=[31mLoad BL2 preloader via TFTP then write to eMMC.[0m=run boot_tftp_write_bl2 ; run bootmenu_confirm_return
|
||||
+bootmenu_8=Reboot.=reset
|
||||
+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
|
||||
+boot_default=run bootcmd ; run boot_recovery ; run boot_tftp_forever
|
||||
+boot_first=if button reset ; then run boot_tftp_forever ; fi ; bootmenu
|
||||
+boot_production=led bpi-r64:pio:green on ; run emmc_read_production && bootm $loadaddr#$bootconf
|
||||
@ -424,9 +428,13 @@
|
||||
+boot_tftp_forever=led bpi-r64:pio:blue on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done
|
||||
+boot_tftp_production=tftpboot $loadaddr $bootfile_upg && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
|
||||
+boot_tftp_recovery=tftpboot $loadaddr $bootfile && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
|
||||
+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2
|
||||
+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip
|
||||
+boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr
|
||||
+emmc_write_production=iminfo $fileaddr && mmc dev 0 && part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol
|
||||
+emmc_write_recovery=iminfo $fileaddr && mmc dev 0 && part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol
|
||||
+emmc_write_bl2=mmc dev 0 1 && mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $loadaddr 0x0 0x100 ; mmc partconf 0 1 1 0
|
||||
+emmc_write_fip=mmc dev 0 0 && mmc erase 0x1000 0x1000 && mmc write $loadaddr 0x1000 0x1000 && mmc erase 0x2000 0x800
|
||||
+emmc_read_production=mmc dev 0 && part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol
|
||||
+emmc_read_recovery=mmc dev 0 && part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol
|
||||
+mmc_write_vol=imszb $fileaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$part_size && mmc write $fileaddr 0x$part_addr 0x$image_size
|
||||
|
||||
@ -44,6 +44,7 @@ ALLWIFIBOARDS:= \
|
||||
linksys_mr8300-v0 \
|
||||
luma_wrtq-329acn \
|
||||
mikrotik_hap-ac2 \
|
||||
mikrotik_sxtsq-5-ac \
|
||||
mobipromo_cm520-79f \
|
||||
p2w_r619ac \
|
||||
nec_wg2600hp3 \
|
||||
@ -129,6 +130,7 @@ $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300))
|
||||
$(eval $(call generate-ipq-wifi-package,linksys_mr8300-v0,Linksys MR8300))
|
||||
$(eval $(call generate-ipq-wifi-package,luma_wrtq-329acn,Luma WRTQ-329ACN))
|
||||
$(eval $(call generate-ipq-wifi-package,mikrotik_hap-ac2,Mikrotik hAP ac2))
|
||||
$(eval $(call generate-ipq-wifi-package,mikrotik_sxtsq-5-ac,MikroTik SXTsq 5 ac))
|
||||
$(eval $(call generate-ipq-wifi-package,mobipromo_cm520-79f,MobiPromo CM520-79F))
|
||||
$(eval $(call generate-ipq-wifi-package,p2w_r619ac,P&W R619AC))
|
||||
$(eval $(call generate-ipq-wifi-package,nec_wg2600hp3,NEC Platforms WG2600HP3))
|
||||
|
||||
BIN
package/firmware/ipq-wifi/board-mikrotik_sxtsq-5-ac.qca4019
Normal file
BIN
package/firmware/ipq-wifi/board-mikrotik_sxtsq-5-ac.qca4019
Normal file
Binary file not shown.
@ -885,6 +885,22 @@ endef
|
||||
$(eval $(call KernelPackage,macvlan))
|
||||
|
||||
|
||||
define KernelPackage/ipvlan
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=IP-VLAN support
|
||||
KCONFIG:=CONFIG_IPVLAN
|
||||
FILES:=$(LINUX_DIR)/drivers/net/ipvlan/ipvlan.ko
|
||||
AUTOLOAD:=$(call AutoProbe,ipvlan)
|
||||
endef
|
||||
|
||||
define KernelPackage/ipvlan/description
|
||||
A kernel module which allows one to create virtual interfaces that
|
||||
map packets to or from specific IP addresses to a particular interface
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,ipvlan))
|
||||
|
||||
|
||||
define KernelPackage/tulip
|
||||
TITLE:=Tulip family network device support
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-mii
|
||||
@ -1199,6 +1215,25 @@ endef
|
||||
$(eval $(call KernelPackage,mlx5-core))
|
||||
|
||||
|
||||
define KernelPackage/qlcnic
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-hwmon-core
|
||||
TITLE:=QLogic QLE8240 and QLE8242 device support
|
||||
KCONFIG:= \
|
||||
CONFIG_QLCNIC \
|
||||
CONFIG_QLCNIC_HWMON=y
|
||||
FILES:=$(LINUX_DIR)/drivers/net/ethernet/qlogic/qlcnic/qlcnic.ko
|
||||
AUTOLOAD:=$(call AutoProbe,qlcnic)
|
||||
endef
|
||||
|
||||
define KernelPackage/qlcnic/description
|
||||
This driver supports QLogic QLE8240 and QLE8242 Converged Ethernet
|
||||
devices.
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,qlcnic))
|
||||
|
||||
|
||||
define KernelPackage/sfp
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=SFP cage support
|
||||
|
||||
@ -0,0 +1,118 @@
|
||||
Date: Mon, 19 Apr 2021 14:59:56 +0800
|
||||
From: Ping-Ke Shih <pkshih@realtek.com>
|
||||
To: <kvalo@codeaurora.org>
|
||||
CC: <linux-wireless@vger.kernel.org>, <mail@maciej.szmigiero.name>,
|
||||
<Larry.Finger@lwfinger.net>
|
||||
Subject: [PATCH] rtlwifi: implement set_tim by update beacon content
|
||||
|
||||
Once beacon content is changed, we update the content to wifi card by
|
||||
send_beacon_frame(). Then, STA with PS can wake up properly to receive its
|
||||
packets.
|
||||
|
||||
Since we update beacon content to PCI wifi devices every beacon interval,
|
||||
the only one usb device, 8192CU, needs to update beacon content when
|
||||
mac80211 calling set_tim.
|
||||
|
||||
Reported-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 32 +++++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtlwifi/core.h | 1 +
|
||||
drivers/net/wireless/realtek/rtlwifi/usb.c | 3 ++
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 +
|
||||
4 files changed, 37 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -1018,6 +1018,25 @@ static void send_beacon_frame(struct iee
|
||||
}
|
||||
}
|
||||
|
||||
+void rtl_update_beacon_work_callback(struct work_struct *work)
|
||||
+{
|
||||
+ struct rtl_works *rtlworks =
|
||||
+ container_of(work, struct rtl_works, update_beacon_work);
|
||||
+ struct ieee80211_hw *hw = rtlworks->hw;
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct ieee80211_vif *vif = rtlpriv->mac80211.vif;
|
||||
+
|
||||
+ if (!vif) {
|
||||
+ WARN_ONCE(true, "no vif to update beacon\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ mutex_lock(&rtlpriv->locks.conf_mutex);
|
||||
+ send_beacon_frame(hw, vif);
|
||||
+ mutex_unlock(&rtlpriv->locks.conf_mutex);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(rtl_update_beacon_work_callback);
|
||||
+
|
||||
static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_bss_conf *bss_conf,
|
||||
@@ -1747,6 +1766,18 @@ static void rtl_op_flush(struct ieee8021
|
||||
rtlpriv->intf_ops->flush(hw, queues, drop);
|
||||
}
|
||||
|
||||
+static int rtl_op_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
|
||||
+ bool set)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
+
|
||||
+ if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192CU)
|
||||
+ schedule_work(&rtlpriv->works.update_beacon_work);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* Description:
|
||||
* This routine deals with the Power Configuration CMD
|
||||
* parsing for RTL8723/RTL8188E Series IC.
|
||||
@@ -1903,6 +1934,7 @@ const struct ieee80211_ops rtl_ops = {
|
||||
.sta_add = rtl_op_sta_add,
|
||||
.sta_remove = rtl_op_sta_remove,
|
||||
.flush = rtl_op_flush,
|
||||
+ .set_tim = rtl_op_set_tim,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(rtl_ops);
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.h
|
||||
@@ -60,5 +60,6 @@ void rtl_bb_delay(struct ieee80211_hw *h
|
||||
bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb);
|
||||
bool rtl_btc_status_false(void);
|
||||
void rtl_dm_diginit(struct ieee80211_hw *hw, u32 cur_igval);
|
||||
+void rtl_update_beacon_work_callback(struct work_struct *work);
|
||||
|
||||
#endif
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
@@ -807,6 +807,7 @@ static void rtl_usb_stop(struct ieee8021
|
||||
|
||||
tasklet_kill(&rtlusb->rx_work_tasklet);
|
||||
cancel_work_sync(&rtlpriv->works.lps_change_work);
|
||||
+ cancel_work_sync(&rtlpriv->works.update_beacon_work);
|
||||
|
||||
flush_workqueue(rtlpriv->works.rtl_wq);
|
||||
|
||||
@@ -1033,6 +1034,8 @@ int rtl_usb_probe(struct usb_interface *
|
||||
rtl_fill_h2c_cmd_work_callback);
|
||||
INIT_WORK(&rtlpriv->works.lps_change_work,
|
||||
rtl_lps_change_work_callback);
|
||||
+ INIT_WORK(&rtlpriv->works.update_beacon_work,
|
||||
+ rtl_update_beacon_work_callback);
|
||||
|
||||
rtlpriv->usb_data_index = 0;
|
||||
init_completion(&rtlpriv->firmware_loading_complete);
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2487,6 +2487,7 @@ struct rtl_works {
|
||||
|
||||
struct work_struct lps_change_work;
|
||||
struct work_struct fill_h2c_cmd;
|
||||
+ struct work_struct update_beacon_work;
|
||||
};
|
||||
|
||||
struct rtl_debug {
|
||||
@ -11,9 +11,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git
|
||||
PKG_SOURCE_DATE:=2021-04-20
|
||||
PKG_SOURCE_VERSION:=cd23727f72b7859ba572c4e273247578c2124926
|
||||
PKG_MIRROR_HASH:=a43516e3502274e0ba64348481364158996ddb0019c35c9dcd2d5a257de67e98
|
||||
PKG_SOURCE_DATE:=2021-04-30
|
||||
PKG_SOURCE_VERSION:=c45f0b584b4b86f8250f90ea19afca271c114fa2
|
||||
PKG_MIRROR_HASH:=24ad04791254a0523cd15a4fec6116d9ff121e006c93e5e41459f91347b33ec2
|
||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
@ -25,7 +25,7 @@ PKG_CONFIG_DEPENDS := \
|
||||
CONFIG_PACKAGE_kmod-brcm-wl-mimo \
|
||||
CONFIG_PACKAGE_kmod-cfg80211
|
||||
|
||||
IWINFO_ABI_VERSION:=20210420
|
||||
IWINFO_ABI_VERSION:=20210430
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
||||
@ -149,6 +149,7 @@
|
||||
phy-map = <0x2>;
|
||||
phy-address = <0x1>;
|
||||
phy-handle = <&phy>;
|
||||
phy-mode = "rgmii-id";
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
|
||||
@ -202,7 +202,7 @@
|
||||
+subsys_initcall(ar5312_gpio_init);
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -189,6 +189,7 @@ config ATH25
|
||||
@@ -190,6 +190,7 @@ config ATH25
|
||||
select CEVT_R4K
|
||||
select CSRC_R4K
|
||||
select DMA_NONCOHERENT
|
||||
|
||||
@ -219,7 +219,6 @@
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
cs-gpios = <0>, <0>;
|
||||
|
||||
flash0: flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
|
||||
@ -107,8 +107,6 @@
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
cs-gpios = <0>, <0>;
|
||||
|
||||
flash0: flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
|
||||
@ -163,8 +163,6 @@
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
cs-gpios = <0>, <0>;
|
||||
|
||||
flash0: flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
|
||||
@ -114,8 +114,6 @@
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
cs-gpios = <0>, <0>;
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
|
||||
@ -256,5 +256,6 @@ define Device/zyxel_nbg6716
|
||||
IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
|
||||
zyxel-factory
|
||||
UBINIZE_OPTS := -E 5
|
||||
DEFAULT := n
|
||||
endef
|
||||
TARGET_DEVICES += zyxel_nbg6716
|
||||
|
||||
@ -44,6 +44,11 @@ ath79_setup_macs()
|
||||
label_mac="$mac_base"
|
||||
lan_mac="$mac_base"
|
||||
;;
|
||||
mikrotik,routerboard-922uags-5hpacd)
|
||||
label_mac="$mac_base"
|
||||
lan_mac="$mac_base"
|
||||
wan_mac=$(macaddr_add $mac_base 1)
|
||||
;;
|
||||
*)
|
||||
label_mac="$mac_base"
|
||||
wan_mac="$mac_base"
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
From 55e2fff639d4297ffeb478113aef6d3e26c2c4c2 Mon Sep 17 00:00:00 2001
|
||||
From: David Bauer <mail@david-bauer.net>
|
||||
Date: Wed, 17 Feb 2021 02:44:55 +0100
|
||||
Subject: [PATCH 1/2] spi: ath79: add SPI_MASTER_GPIO_SS flag
|
||||
|
||||
Add the SPI_MASTER_GPIO_SS flag for the spi-ath79 driver. Otherwise,
|
||||
the custom chipselect function is never called. This breaks hardware,
|
||||
where the three dedicated chipselect lines are used instead of generic
|
||||
GPIO pins.
|
||||
|
||||
Fixes commit 4a07b8bcd503 ("spi: bitbang: Make chipselect callback optional")
|
||||
|
||||
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
---
|
||||
drivers/spi/spi-ath79.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/spi/spi-ath79.c
|
||||
+++ b/drivers/spi/spi-ath79.c
|
||||
@@ -186,6 +186,7 @@ static int ath79_spi_probe(struct platfo
|
||||
|
||||
master->use_gpio_descriptors = true;
|
||||
master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
|
||||
+ master->flags = SPI_MASTER_GPIO_SS;
|
||||
|
||||
sp->bitbang.master = master;
|
||||
sp->bitbang.chipselect = ath79_spi_chipselect;
|
||||
@ -0,0 +1,26 @@
|
||||
From e2e9f6d9f9bd7449ff113c157b639ce1a24b9d3f Mon Sep 17 00:00:00 2001
|
||||
From: David Bauer <mail@david-bauer.net>
|
||||
Date: Sat, 24 Apr 2021 16:14:48 +0200
|
||||
Subject: [PATCH 2/2] spi: ath79: set number of chipselect lines
|
||||
|
||||
All chipsets from AR7100 up to QCA9563 have three dedicated chipselect
|
||||
lines for the integrated SPI controller. Remove the number of
|
||||
chipselects from the platform data, as there is no need to manually set
|
||||
this to a different value.
|
||||
|
||||
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
---
|
||||
drivers/spi/spi-ath79.c | 2 +-
|
||||
include/linux/platform_data/spi-ath79.h | 1 -
|
||||
2 files changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/spi/spi-ath79.c
|
||||
+++ b/drivers/spi/spi-ath79.c
|
||||
@@ -187,6 +187,7 @@ static int ath79_spi_probe(struct platfo
|
||||
master->use_gpio_descriptors = true;
|
||||
master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
|
||||
master->flags = SPI_MASTER_GPIO_SS;
|
||||
+ master->num_chipselect = 3;
|
||||
|
||||
sp->bitbang.master = master;
|
||||
sp->bitbang.chipselect = ath79_spi_chipselect;
|
||||
@ -15,7 +15,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -217,6 +217,8 @@ config ATH79
|
||||
@@ -218,6 +218,8 @@ config ATH79
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_SUPPORTS_MIPS16
|
||||
select SYS_SUPPORTS_ZBOOT_UART_PROM
|
||||
|
||||
@ -93,7 +93,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
+module_platform_driver(gpio_export_driver);
|
||||
--- a/drivers/gpio/gpiolib-sysfs.c
|
||||
+++ b/drivers/gpio/gpiolib-sysfs.c
|
||||
@@ -563,7 +563,7 @@ static struct class gpio_class = {
|
||||
@@ -571,7 +571,7 @@ static struct class gpio_class = {
|
||||
*
|
||||
* Returns zero on success, else an error.
|
||||
*/
|
||||
@ -102,7 +102,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
{
|
||||
struct gpio_chip *chip;
|
||||
struct gpio_device *gdev;
|
||||
@@ -625,6 +625,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
@@ -633,6 +633,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
offset = gpio_chip_hwgpio(desc);
|
||||
if (chip->names && chip->names[offset])
|
||||
ioname = chip->names[offset];
|
||||
@ -111,7 +111,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
dev = device_create_with_groups(&gpio_class, &gdev->dev,
|
||||
MKDEV(0, 0), data, gpio_groups,
|
||||
@@ -646,6 +648,12 @@ err_unlock:
|
||||
@@ -654,6 +656,12 @@ err_unlock:
|
||||
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
#define USB_VENDOR_ID_BELKIN 0x050d
|
||||
#define USB_DEVICE_ID_FLIP_KVM 0x3201
|
||||
|
||||
@@ -1257,6 +1260,9 @@
|
||||
@@ -1258,6 +1261,9 @@
|
||||
#define USB_VENDOR_ID_XAT 0x2505
|
||||
#define USB_DEVICE_ID_XAT_CSR 0x0220
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -291,6 +291,9 @@ config BCM63XX
|
||||
@@ -292,6 +292,9 @@ config BCM63XX
|
||||
select SYNC_R4K
|
||||
select DMA_NONCOHERENT
|
||||
select IRQ_MIPS_CPU
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
From f1f811410af297c848e9ec17eaa280d190fdce10 Mon Sep 17 00:00:00 2001
|
||||
From 7e4404113686868858a34210c28ae122e967aa64 Mon Sep 17 00:00:00 2001
|
||||
From: Mauri Sandberg <sandberg@mailfence.com>
|
||||
Date: Tue, 23 Feb 2021 18:09:31 +0200
|
||||
Subject: [PATCH] mtd: cfi_cmdset_0002: AMD chip 0x2201 - write words
|
||||
Date: Tue, 9 Mar 2021 19:48:59 +0200
|
||||
Subject: [PATCH] mtd: cfi_cmdset_0002: Disable buffered writes for AMD chip
|
||||
0x2201
|
||||
|
||||
Buffer writes do not work with AMD chip 0x2201. The chip in question
|
||||
is a AMD/Spansion/Cypress Semiconductor S29GL256N and datasheet [1]
|
||||
@ -32,6 +33,8 @@ Tested on a Buffalo wzr-hp-g300nh running kernel 5.10.16.
|
||||
or https://datasheetspdf.com/pdf-file/565708/SPANSION/S29GL256N/1
|
||||
|
||||
Signed-off-by: Mauri Sandberg <sandberg@mailfence.com>
|
||||
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
|
||||
Link: https://lore.kernel.org/r/20210309174859.362060-1-sandberg@mailfence.com
|
||||
---
|
||||
drivers/mtd/chips/cfi_cmdset_0002.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
@ -43,7 +46,7 @@ Signed-off-by: Mauri Sandberg <sandberg@mailfence.com>
|
||||
struct map_info *map = mtd->priv;
|
||||
struct cfi_private *cfi = map->fldrv_priv;
|
||||
+
|
||||
+ if ((cfi->mfr == CFI_MFR_AMD) && (cfi->id == 0x2201))
|
||||
+ if (cfi->mfr == CFI_MFR_AMD && cfi->id == 0x2201)
|
||||
+ return;
|
||||
+
|
||||
if (cfi->cfiq->BufWriteTimeoutTyp) {
|
||||
@ -0,0 +1,72 @@
|
||||
From c5d66587b8900201e1530b7c18d41e87bd5812f4 Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Date: Thu, 15 Apr 2021 17:37:48 -0700
|
||||
Subject: [PATCH] net: ethernet: mediatek: ppe: fix busy wait loop
|
||||
|
||||
The intention is for the loop to timeout if the body does not succeed.
|
||||
The current logic calls time_is_before_jiffies(timeout) which is false
|
||||
until after the timeout, so the loop body never executes.
|
||||
|
||||
Fix by using readl_poll_timeout as a more standard and less error-prone
|
||||
solution.
|
||||
|
||||
Fixes: ba37b7caf1ed ("net: ethernet: mtk_eth_soc: add support for initializing the PPE")
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Cc: Felix Fietkau <nbd@nbd.name>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 20 +++++++++-----------
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 1 +
|
||||
2 files changed, 10 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -2,9 +2,8 @@
|
||||
/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
|
||||
|
||||
#include <linux/kernel.h>
|
||||
-#include <linux/jiffies.h>
|
||||
-#include <linux/delay.h>
|
||||
#include <linux/io.h>
|
||||
+#include <linux/iopoll.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include "mtk_ppe.h"
|
||||
@@ -44,18 +43,17 @@ static u32 ppe_clear(struct mtk_ppe *ppe
|
||||
|
||||
static int mtk_ppe_wait_busy(struct mtk_ppe *ppe)
|
||||
{
|
||||
- unsigned long timeout = jiffies + HZ;
|
||||
-
|
||||
- while (time_is_before_jiffies(timeout)) {
|
||||
- if (!(ppe_r32(ppe, MTK_PPE_GLO_CFG) & MTK_PPE_GLO_CFG_BUSY))
|
||||
- return 0;
|
||||
+ int ret;
|
||||
+ u32 val;
|
||||
|
||||
- usleep_range(10, 20);
|
||||
- }
|
||||
+ ret = readl_poll_timeout(ppe->base + MTK_PPE_GLO_CFG, val,
|
||||
+ !(val & MTK_PPE_GLO_CFG_BUSY),
|
||||
+ 20, MTK_PPE_WAIT_TIMEOUT_US);
|
||||
|
||||
- dev_err(ppe->dev, "PPE table busy");
|
||||
+ if (ret)
|
||||
+ dev_err(ppe->dev, "PPE table busy");
|
||||
|
||||
- return -ETIMEDOUT;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static void mtk_ppe_cache_clear(struct mtk_ppe *ppe)
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
@@ -12,6 +12,7 @@
|
||||
#define MTK_PPE_ENTRIES_SHIFT 3
|
||||
#define MTK_PPE_ENTRIES (1024 << MTK_PPE_ENTRIES_SHIFT)
|
||||
#define MTK_PPE_HASH_MASK (MTK_PPE_ENTRIES - 1)
|
||||
+#define MTK_PPE_WAIT_TIMEOUT_US 1000000
|
||||
|
||||
#define MTK_FOE_IB1_UNBIND_TIMESTAMP GENMASK(7, 0)
|
||||
#define MTK_FOE_IB1_UNBIND_PACKETS GENMASK(23, 8)
|
||||
@ -1,16 +1,23 @@
|
||||
From 3f57d8c40fea9b20543cab4da12f4680d2ef182c Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 26 Aug 2020 16:52:12 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix rx vlan offload
|
||||
Date: Thu, 22 Apr 2021 22:20:54 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix RX VLAN offload
|
||||
|
||||
The VLAN ID in the rx descriptor is only valid if the RX_DMA_VID bit is set
|
||||
Fixes frames wrongly marked with VLAN tags
|
||||
The VLAN ID in the rx descriptor is only valid if the RX_DMA_VTAG bit is
|
||||
set. Fixes frames wrongly marked with VLAN tags.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
[Ilya: fix commit message]
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 +-
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1324,7 +1324,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1319,7 +1319,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
skb->protocol = eth_type_trans(skb, netdev);
|
||||
|
||||
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
|
||||
@ -1,17 +1,23 @@
|
||||
From 5196c417854942e218a59ec87bf7d414b3bd581e Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 27 Aug 2020 09:44:43 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: unmap rx data before calling
|
||||
Date: Thu, 22 Apr 2021 22:20:55 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: unmap RX data before calling
|
||||
build_skb
|
||||
|
||||
Since build_skb accesses the data area (for initializing shinfo), dma unmap
|
||||
needs to happen before that call
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
[Ilya: split build_skb cleanup fix into a separate commit]
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1297,17 +1297,18 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1298,6 +1298,9 @@ static int mtk_poll_rx(struct napi_struc
|
||||
goto release_desc;
|
||||
}
|
||||
|
||||
@ -21,11 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* receive data */
|
||||
skb = build_skb(data, ring->frag_size);
|
||||
if (unlikely(!skb)) {
|
||||
- skb_free_frag(new_data);
|
||||
+ skb_free_frag(data);
|
||||
netdev->stats.rx_dropped++;
|
||||
- goto release_desc;
|
||||
+ goto skip_rx;
|
||||
@@ -1307,8 +1310,6 @@ static int mtk_poll_rx(struct napi_struc
|
||||
}
|
||||
skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
|
||||
|
||||
@ -34,11 +36,3 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
|
||||
skb->dev = netdev;
|
||||
skb_put(skb, pktlen);
|
||||
@@ -1325,6 +1326,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
skb_record_rx_queue(skb, 0);
|
||||
napi_gro_receive(napi, skb);
|
||||
|
||||
+skip_rx:
|
||||
ring->data[idx] = new_data;
|
||||
rxd->rxd1 = (unsigned int)dma_addr;
|
||||
|
||||
@ -0,0 +1,38 @@
|
||||
From 787082ab9f7be4711e52f67c388535eda74a1269 Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Date: Thu, 22 Apr 2021 22:20:56 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix build_skb cleanup
|
||||
|
||||
In case build_skb fails, call skb_free_frag on the correct pointer. Also
|
||||
update the DMA structures with the new mapping before exiting, because
|
||||
the mapping was successful
|
||||
|
||||
Suggested-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1304,9 +1304,9 @@ static int mtk_poll_rx(struct napi_struc
|
||||
/* receive data */
|
||||
skb = build_skb(data, ring->frag_size);
|
||||
if (unlikely(!skb)) {
|
||||
- skb_free_frag(new_data);
|
||||
+ skb_free_frag(data);
|
||||
netdev->stats.rx_dropped++;
|
||||
- goto release_desc;
|
||||
+ goto skip_rx;
|
||||
}
|
||||
skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
|
||||
|
||||
@@ -1326,6 +1326,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
skb_record_rx_queue(skb, 0);
|
||||
napi_gro_receive(napi, skb);
|
||||
|
||||
+skip_rx:
|
||||
ring->data[idx] = new_data;
|
||||
rxd->rxd1 = (unsigned int)dma_addr;
|
||||
|
||||
@ -1,11 +1,16 @@
|
||||
From c30c4a82739090a2de4a4e3f245355ea4fb3ec14 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 8 Jun 2020 17:01:12 +0200
|
||||
Date: Thu, 22 Apr 2021 22:20:57 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: use napi_consume_skb
|
||||
|
||||
Should improve performance, since it can use bulk free
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 19 ++++++++++++-------
|
||||
1 file changed, 12 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@ -43,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
itxd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
||||
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
||||
@@ -1386,7 +1391,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -1388,7 +1393,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
done[mac]++;
|
||||
budget--;
|
||||
}
|
||||
@ -52,7 +57,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
ring->last_free = desc;
|
||||
atomic_inc(&ring->free_count);
|
||||
@@ -1423,7 +1428,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
@@ -1425,7 +1430,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
budget--;
|
||||
}
|
||||
|
||||
@ -61,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
desc = &ring->dma[cpu];
|
||||
ring->last_free = desc;
|
||||
@@ -1625,7 +1630,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
@@ -1627,7 +1632,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
|
||||
if (ring->buf) {
|
||||
for (i = 0; i < MTK_DMA_SIZE; i++)
|
||||
@ -1,7 +1,7 @@
|
||||
From 3630d519d7c3eab92567658690e44ffe0517d109 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 8 Jun 2020 17:02:39 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: significantly reduce mdio bus
|
||||
access latency
|
||||
Date: Thu, 22 Apr 2021 22:20:58 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: reduce MDIO bus access latency
|
||||
|
||||
usleep_range often ends up sleeping much longer than the 10-20us provided
|
||||
as a range here. This causes significant latency in mdio bus acceses,
|
||||
@ -11,7 +11,11 @@ Use cond_resched instead of usleep_range, since the MDIO access does not
|
||||
take much time
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@ -1,14 +1,18 @@
|
||||
From 16ef670789b252b221700adc413497ed2f941d8a Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 26 Aug 2020 16:55:54 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix unnecessary tx queue
|
||||
stops
|
||||
Date: Thu, 22 Apr 2021 22:20:59 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: remove unnecessary TX queue stops
|
||||
|
||||
When running short on descriptors, only stop the queue for the netdev that tx
|
||||
was attempted for. By the time the something tries to send on the other netdev,
|
||||
the ring might have some more room already
|
||||
When running short on descriptors, only stop the queue for the netdev that
|
||||
tx was attempted for. By the time something tries to send on the other
|
||||
netdev, the ring might have some more room already.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 15 ++-------------
|
||||
1 file changed, 2 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@ -1,16 +1,21 @@
|
||||
From 59555a8d0dd39bf60b7ca1ba5e7393d293f7398d Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 26 Aug 2020 16:58:55 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: use larger burst size for
|
||||
qdma tx
|
||||
Date: Thu, 22 Apr 2021 22:21:00 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: use larger burst size for QDMA TX
|
||||
|
||||
Improves tx performance
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 +-
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -2191,7 +2191,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||
@@ -2193,7 +2193,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
|
||||
mtk_w32(eth,
|
||||
MTK_TX_WB_DDONE | MTK_TX_DMA_EN |
|
||||
@ -1,12 +1,17 @@
|
||||
From 6b4423b258b91032c50a5efca15d3d9bb194ea1d Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 26 Aug 2020 16:59:41 +0200
|
||||
Date: Thu, 22 Apr 2021 22:21:01 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: increase DMA ring sizes
|
||||
|
||||
256 descriptors is not enough for multi-gigabit traffic under load on MT7622.
|
||||
Bump it to 512 to improve performance
|
||||
256 descriptors is not enough for multi-gigabit traffic under load on
|
||||
MT7622. Bump it to 512 to improve performance.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@ -1,12 +1,20 @@
|
||||
From e9229ffd550b2d8c4997c67a501dbc3919fd4e26 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 26 Aug 2020 17:02:30 +0200
|
||||
Date: Thu, 22 Apr 2021 22:21:02 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: implement dynamic interrupt
|
||||
moderation
|
||||
|
||||
Reduces the number of interrupts under load
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
[Ilya: add documentation for new struct fields]
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/Kconfig | 1 +
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 96 +++++++++++++++++++--
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 41 +++++++--
|
||||
3 files changed, 124 insertions(+), 14 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/Kconfig
|
||||
+++ b/drivers/net/ethernet/mediatek/Kconfig
|
||||
@ -35,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
while (done < budget) {
|
||||
struct net_device *netdev;
|
||||
@@ -1311,6 +1312,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1312,6 +1313,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
else
|
||||
skb_checksum_none_assert(skb);
|
||||
skb->protocol = eth_type_trans(skb, netdev);
|
||||
@ -43,7 +51,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
|
||||
(trxd.rxd2 & RX_DMA_VTAG))
|
||||
@@ -1342,6 +1344,12 @@ rx_done:
|
||||
@@ -1344,6 +1346,12 @@ rx_done:
|
||||
mtk_update_rx_cpu_idx(eth);
|
||||
}
|
||||
|
||||
@ -56,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
return done;
|
||||
}
|
||||
|
||||
@@ -1434,6 +1442,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
@@ -1436,6 +1444,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
static int mtk_poll_tx(struct mtk_eth *eth, int budget)
|
||||
{
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
@ -64,7 +72,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
unsigned int done[MTK_MAX_DEVS];
|
||||
unsigned int bytes[MTK_MAX_DEVS];
|
||||
int total = 0, i;
|
||||
@@ -1451,8 +1460,14 @@ static int mtk_poll_tx(struct mtk_eth *e
|
||||
@@ -1453,8 +1462,14 @@ static int mtk_poll_tx(struct mtk_eth *e
|
||||
continue;
|
||||
netdev_completed_queue(eth->netdev[i], done[i], bytes[i]);
|
||||
total += done[i];
|
||||
@ -79,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (mtk_queue_stopped(eth) &&
|
||||
(atomic_read(&ring->free_count) > ring->thresh))
|
||||
mtk_wake_queue(eth);
|
||||
@@ -2127,6 +2142,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||
@@ -2129,6 +2144,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||
{
|
||||
struct mtk_eth *eth = _eth;
|
||||
|
||||
@ -87,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
||||
__napi_schedule(ð->rx_napi);
|
||||
mtk_rx_irq_disable(eth, MTK_RX_DONE_INT);
|
||||
@@ -2139,6 +2155,7 @@ static irqreturn_t mtk_handle_irq_tx(int
|
||||
@@ -2141,6 +2157,7 @@ static irqreturn_t mtk_handle_irq_tx(int
|
||||
{
|
||||
struct mtk_eth *eth = _eth;
|
||||
|
||||
@ -95,7 +103,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (likely(napi_schedule_prep(ð->tx_napi))) {
|
||||
__napi_schedule(ð->tx_napi);
|
||||
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
||||
@@ -2323,6 +2340,9 @@ static int mtk_stop(struct net_device *d
|
||||
@@ -2325,6 +2342,9 @@ static int mtk_stop(struct net_device *d
|
||||
napi_disable(ð->tx_napi);
|
||||
napi_disable(ð->rx_napi);
|
||||
|
||||
@ -105,7 +113,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
||||
mtk_stop_dma(eth, MTK_QDMA_GLO_CFG);
|
||||
mtk_stop_dma(eth, MTK_PDMA_GLO_CFG);
|
||||
@@ -2375,6 +2395,64 @@ err_disable_clks:
|
||||
@@ -2377,6 +2397,64 @@ err_disable_clks:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -170,7 +178,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int mtk_hw_init(struct mtk_eth *eth)
|
||||
{
|
||||
int i, val, ret;
|
||||
@@ -2396,9 +2474,6 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -2398,9 +2476,6 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
goto err_disable_pm;
|
||||
}
|
||||
|
||||
@ -180,12 +188,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* disable delay and normal interrupt */
|
||||
mtk_tx_irq_disable(eth, ~0);
|
||||
mtk_rx_irq_disable(eth, ~0);
|
||||
@@ -2437,11 +2512,10 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -2439,11 +2514,11 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
/* Enable RX VLan Offloading */
|
||||
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
|
||||
|
||||
- /* enable interrupt delay for RX */
|
||||
- mtk_w32(eth, MTK_PDMA_DELAY_RX_DELAY, MTK_PDMA_DELAY_INT);
|
||||
+ /* set interrupt delays based on current Net DIM sample */
|
||||
+ mtk_dim_rx(ð->rx_dim.work);
|
||||
+ mtk_dim_tx(ð->tx_dim.work);
|
||||
|
||||
@ -194,7 +203,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
mtk_tx_irq_disable(eth, ~0);
|
||||
mtk_rx_irq_disable(eth, ~0);
|
||||
|
||||
@@ -2946,6 +3020,13 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -2948,6 +3023,13 @@ static int mtk_probe(struct platform_dev
|
||||
spin_lock_init(ð->page_lock);
|
||||
spin_lock_init(ð->tx_irq_lock);
|
||||
spin_lock_init(ð->rx_irq_lock);
|
||||
@ -260,7 +269,30 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* QDMA Interrupt grouping registers */
|
||||
#define MTK_QDMA_INT_GRP1 0x1a20
|
||||
@@ -905,6 +911,18 @@ struct mtk_eth {
|
||||
@@ -843,6 +849,7 @@ struct mtk_sgmii {
|
||||
* @page_lock: Make sure that register operations are atomic
|
||||
* @tx_irq__lock: Make sure that IRQ register operations are atomic
|
||||
* @rx_irq__lock: Make sure that IRQ register operations are atomic
|
||||
+ * @dim_lock: Make sure that Net DIM operations are atomic
|
||||
* @dummy_dev: we run 2 netdevs on 1 physical DMA ring and need a
|
||||
* dummy for NAPI to work
|
||||
* @netdev: The netdev instances
|
||||
@@ -861,6 +868,14 @@ struct mtk_sgmii {
|
||||
* @rx_ring_qdma: Pointer to the memory holding info about the QDMA RX ring
|
||||
* @tx_napi: The TX NAPI struct
|
||||
* @rx_napi: The RX NAPI struct
|
||||
+ * @rx_events: Net DIM RX event counter
|
||||
+ * @rx_packets: Net DIM RX packet counter
|
||||
+ * @rx_bytes: Net DIM RX byte counter
|
||||
+ * @rx_dim: Net DIM RX context
|
||||
+ * @tx_events: Net DIM TX event counter
|
||||
+ * @tx_packets: Net DIM TX packet counter
|
||||
+ * @tx_bytes: Net DIM TX byte counter
|
||||
+ * @tx_dim: Net DIM TX context
|
||||
* @scratch_ring: Newer SoCs need memory for a second HW managed TX ring
|
||||
* @phy_scratch_ring: physical address of scratch_ring
|
||||
* @scratch_head: The scratch memory that scratch_ring points to.
|
||||
@@ -905,6 +920,18 @@ struct mtk_eth {
|
||||
|
||||
const struct mtk_soc_data *soc;
|
||||
|
||||
@ -1,17 +1,23 @@
|
||||
From 4e6bf609569c59b6bd6acf4a607c096cbd820d79 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 27 Aug 2020 06:32:03 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: cache hardware pointer of last
|
||||
freed tx descriptor
|
||||
Date: Thu, 22 Apr 2021 22:21:03 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: cache HW pointer of last freed TX
|
||||
descriptor
|
||||
|
||||
The value is only updated by the CPU, so it is cheaper to access from the ring
|
||||
data structure than from a hardware register
|
||||
The value is only updated by the CPU, so it is cheaper to access from the
|
||||
ring data structure than from a hardware register.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 8 ++++----
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 ++
|
||||
2 files changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1362,7 +1362,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -1364,7 +1364,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
struct mtk_tx_buf *tx_buf;
|
||||
u32 cpu, dma;
|
||||
|
||||
@ -20,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
dma = mtk_r32(eth, MTK_QTX_DRX_PTR);
|
||||
|
||||
desc = mtk_qdma_phys_to_virt(ring, cpu);
|
||||
@@ -1396,6 +1396,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -1398,6 +1398,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
cpu = next_cpu;
|
||||
}
|
||||
|
||||
@ -28,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
mtk_w32(eth, cpu, MTK_QTX_CRX_PTR);
|
||||
|
||||
return budget;
|
||||
@@ -1596,6 +1597,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -1598,6 +1599,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
atomic_set(&ring->free_count, MTK_DMA_SIZE - 2);
|
||||
ring->next_free = &ring->dma[0];
|
||||
ring->last_free = &ring->dma[MTK_DMA_SIZE - 1];
|
||||
@ -36,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ring->thresh = MAX_SKB_FRAGS;
|
||||
|
||||
/* make sure that all changes to the dma ring are flushed before we
|
||||
@@ -1609,9 +1611,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -1611,9 +1613,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
mtk_w32(eth,
|
||||
ring->phys + ((MTK_DMA_SIZE - 1) * sz),
|
||||
MTK_QTX_CRX_PTR);
|
||||
@ -1,13 +1,18 @@
|
||||
From 816ac3e6e67bdd78d86226c6eb53619780750e92 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 27 Aug 2020 09:24:25 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: only read the full rx
|
||||
descriptor if DMA is done
|
||||
Date: Thu, 22 Apr 2021 22:21:04 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: only read the full RX descriptor
|
||||
if DMA is done
|
||||
|
||||
Uncached memory access is expensive, and there is no need to access all
|
||||
descriptor words if we can't process them anyway
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@ -1,12 +1,16 @@
|
||||
From 16769a8923fad5a5377253bcd76b0e0d64976c73 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Fri, 4 Sep 2020 18:14:05 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: avoid rearming interrupt if
|
||||
napi_complete returns false
|
||||
Date: Thu, 22 Apr 2021 22:21:05 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: reduce unnecessary interrupts
|
||||
|
||||
Reduces unnecessary interrupts
|
||||
Avoid rearming interrupt if napi_complete returns false
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@ -0,0 +1,110 @@
|
||||
From db2c7b353db3b3f71b55f9ff4627d8a786446fbe Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Date: Thu, 22 Apr 2021 22:21:06 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: rework NAPI callbacks
|
||||
|
||||
Use napi_complete_done to communicate total TX and RX work done to NAPI.
|
||||
Count total RX work up instead of remaining work down for clarity.
|
||||
Remove unneeded local variables for clarity. Use do {} while instead of
|
||||
goto for clarity.
|
||||
|
||||
Suggested-by: Jakub Kicinski <kuba@kernel.org>
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 54 +++++++++------------
|
||||
1 file changed, 24 insertions(+), 30 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1496,7 +1496,6 @@ static void mtk_handle_status_irq(struct
|
||||
static int mtk_napi_tx(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct mtk_eth *eth = container_of(napi, struct mtk_eth, tx_napi);
|
||||
- u32 status, mask;
|
||||
int tx_done = 0;
|
||||
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
||||
@@ -1505,21 +1504,19 @@ static int mtk_napi_tx(struct napi_struc
|
||||
tx_done = mtk_poll_tx(eth, budget);
|
||||
|
||||
if (unlikely(netif_msg_intr(eth))) {
|
||||
- status = mtk_r32(eth, eth->tx_int_status_reg);
|
||||
- mask = mtk_r32(eth, eth->tx_int_mask_reg);
|
||||
dev_info(eth->dev,
|
||||
- "done tx %d, intr 0x%08x/0x%x\n",
|
||||
- tx_done, status, mask);
|
||||
+ "done tx %d, intr 0x%08x/0x%x\n", tx_done,
|
||||
+ mtk_r32(eth, eth->tx_int_status_reg),
|
||||
+ mtk_r32(eth, eth->tx_int_mask_reg));
|
||||
}
|
||||
|
||||
if (tx_done == budget)
|
||||
return budget;
|
||||
|
||||
- status = mtk_r32(eth, eth->tx_int_status_reg);
|
||||
- if (status & MTK_TX_DONE_INT)
|
||||
+ if (mtk_r32(eth, eth->tx_int_status_reg) & MTK_TX_DONE_INT)
|
||||
return budget;
|
||||
|
||||
- if (napi_complete(napi))
|
||||
+ if (napi_complete_done(napi, tx_done))
|
||||
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
|
||||
|
||||
return tx_done;
|
||||
@@ -1528,36 +1525,33 @@ static int mtk_napi_tx(struct napi_struc
|
||||
static int mtk_napi_rx(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct mtk_eth *eth = container_of(napi, struct mtk_eth, rx_napi);
|
||||
- u32 status, mask;
|
||||
- int rx_done = 0;
|
||||
- int remain_budget = budget;
|
||||
+ int rx_done_total = 0;
|
||||
|
||||
mtk_handle_status_irq(eth);
|
||||
|
||||
-poll_again:
|
||||
- mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS);
|
||||
- rx_done = mtk_poll_rx(napi, remain_budget, eth);
|
||||
+ do {
|
||||
+ int rx_done;
|
||||
|
||||
- if (unlikely(netif_msg_intr(eth))) {
|
||||
- status = mtk_r32(eth, MTK_PDMA_INT_STATUS);
|
||||
- mask = mtk_r32(eth, MTK_PDMA_INT_MASK);
|
||||
- dev_info(eth->dev,
|
||||
- "done rx %d, intr 0x%08x/0x%x\n",
|
||||
- rx_done, status, mask);
|
||||
- }
|
||||
- if (rx_done == remain_budget)
|
||||
- return budget;
|
||||
+ mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS);
|
||||
+ rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
|
||||
+ rx_done_total += rx_done;
|
||||
+
|
||||
+ if (unlikely(netif_msg_intr(eth))) {
|
||||
+ dev_info(eth->dev,
|
||||
+ "done rx %d, intr 0x%08x/0x%x\n", rx_done,
|
||||
+ mtk_r32(eth, MTK_PDMA_INT_STATUS),
|
||||
+ mtk_r32(eth, MTK_PDMA_INT_MASK));
|
||||
+ }
|
||||
|
||||
- status = mtk_r32(eth, MTK_PDMA_INT_STATUS);
|
||||
- if (status & MTK_RX_DONE_INT) {
|
||||
- remain_budget -= rx_done;
|
||||
- goto poll_again;
|
||||
- }
|
||||
+ if (rx_done_total == budget)
|
||||
+ return budget;
|
||||
+
|
||||
+ } while (mtk_r32(eth, MTK_PDMA_INT_STATUS) & MTK_RX_DONE_INT);
|
||||
|
||||
- if (napi_complete(napi))
|
||||
+ if (napi_complete_done(napi, rx_done_total))
|
||||
mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);
|
||||
|
||||
- return rx_done + budget - remain_budget;
|
||||
+ return rx_done_total;
|
||||
}
|
||||
|
||||
static int mtk_tx_alloc(struct mtk_eth *eth)
|
||||
@ -1,12 +1,18 @@
|
||||
From fa817272c37ef78e25dc14e4760ac78a7043a18a Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sun, 13 Sep 2020 08:27:24 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: set PPE flow hash as skb hash
|
||||
if present
|
||||
Date: Thu, 22 Apr 2021 22:21:07 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: set PPE flow hash as skb hash if
|
||||
present
|
||||
|
||||
This improves GRO performance
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
[Ilya: Use MTK_RXD4_FOE_ENTRY instead of GENMASK(13, 0)]
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@ -30,8 +36,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
skb->protocol = eth_type_trans(skb, netdev);
|
||||
bytes += pktlen;
|
||||
|
||||
+ hash = trxd.rxd4 & GENMASK(13, 0);
|
||||
+ if (hash != GENMASK(13, 0)) {
|
||||
+ hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
|
||||
+ if (hash != MTK_RXD4_FOE_ENTRY) {
|
||||
+ hash = jhash_1word(hash, 0);
|
||||
+ skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
|
||||
+ }
|
||||
@ -0,0 +1,71 @@
|
||||
From 3bc8e0aff23be0526af0dbc7973a8866a08d73f1 Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Date: Thu, 22 Apr 2021 22:21:08 -0700
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: use iopoll.h macro for DMA init
|
||||
|
||||
Replace a tight busy-wait loop without a pause with a standard
|
||||
readx_poll_timeout_atomic routine with a 5 us poll period.
|
||||
|
||||
Tested by booting a MT7621 device to ensure the driver initializes
|
||||
properly.
|
||||
|
||||
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 29 +++++++++------------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
|
||||
2 files changed, 14 insertions(+), 17 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -2033,25 +2033,22 @@ static int mtk_set_features(struct net_d
|
||||
/* wait for DMA to finish whatever it is doing before we start using it again */
|
||||
static int mtk_dma_busy_wait(struct mtk_eth *eth)
|
||||
{
|
||||
- unsigned long t_start = jiffies;
|
||||
+ unsigned int reg;
|
||||
+ int ret;
|
||||
+ u32 val;
|
||||
|
||||
- while (1) {
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
|
||||
- if (!(mtk_r32(eth, MTK_QDMA_GLO_CFG) &
|
||||
- (MTK_RX_DMA_BUSY | MTK_TX_DMA_BUSY)))
|
||||
- return 0;
|
||||
- } else {
|
||||
- if (!(mtk_r32(eth, MTK_PDMA_GLO_CFG) &
|
||||
- (MTK_RX_DMA_BUSY | MTK_TX_DMA_BUSY)))
|
||||
- return 0;
|
||||
- }
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
||||
+ reg = MTK_QDMA_GLO_CFG;
|
||||
+ else
|
||||
+ reg = MTK_PDMA_GLO_CFG;
|
||||
|
||||
- if (time_after(jiffies, t_start + MTK_DMA_BUSY_TIMEOUT))
|
||||
- break;
|
||||
- }
|
||||
+ ret = readx_poll_timeout_atomic(__raw_readl, eth->base + reg, val,
|
||||
+ !(val & (MTK_RX_DMA_BUSY | MTK_TX_DMA_BUSY)),
|
||||
+ 5, MTK_DMA_BUSY_TIMEOUT_US);
|
||||
+ if (ret)
|
||||
+ dev_err(eth->dev, "DMA init timeout\n");
|
||||
|
||||
- dev_err(eth->dev, "DMA init timeout\n");
|
||||
- return -1;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int mtk_dma_init(struct mtk_eth *eth)
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -213,7 +213,7 @@
|
||||
#define MTK_TX_DMA_BUSY BIT(1)
|
||||
#define MTK_RX_DMA_EN BIT(2)
|
||||
#define MTK_TX_DMA_EN BIT(0)
|
||||
-#define MTK_DMA_BUSY_TIMEOUT HZ
|
||||
+#define MTK_DMA_BUSY_TIMEOUT_US 1000000
|
||||
|
||||
/* QDMA Reset Index Register */
|
||||
#define MTK_QDMA_RST_IDX 0x1A08
|
||||
@ -0,0 +1,120 @@
|
||||
From 40b5d2f15c091fa9c854acde91ad2acb504027d7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= <opensource@vdorst.com>
|
||||
Date: Mon, 12 Apr 2021 08:50:31 +0200
|
||||
Subject: [PATCH] net: dsa: mt7530: Add support for EEE features
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This patch adds EEE support.
|
||||
|
||||
Signed-off-by: René van Dorst <opensource@vdorst.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/dsa/mt7530.c | 43 ++++++++++++++++++++++++++++++++++++++++
|
||||
drivers/net/dsa/mt7530.h | 14 ++++++++++++-
|
||||
2 files changed, 56 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2277,6 +2277,17 @@ static void mt753x_phylink_mac_link_up(s
|
||||
mcr |= PMCR_RX_FC_EN;
|
||||
}
|
||||
|
||||
+ if (mode == MLO_AN_PHY && phydev && phy_init_eee(phydev, 0) >= 0) {
|
||||
+ switch (speed) {
|
||||
+ case SPEED_1000:
|
||||
+ mcr |= PMCR_FORCE_EEE1G;
|
||||
+ break;
|
||||
+ case SPEED_100:
|
||||
+ mcr |= PMCR_FORCE_EEE100;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
mt7530_set(priv, MT7530_PMCR_P(port), mcr);
|
||||
}
|
||||
|
||||
@@ -2507,6 +2518,36 @@ mt753x_phy_write(struct dsa_switch *ds,
|
||||
return priv->info->phy_write(ds, port, regnum, val);
|
||||
}
|
||||
|
||||
+static int mt753x_get_mac_eee(struct dsa_switch *ds, int port,
|
||||
+ struct ethtool_eee *e)
|
||||
+{
|
||||
+ struct mt7530_priv *priv = ds->priv;
|
||||
+ u32 eeecr = mt7530_read(priv, MT7530_PMEEECR_P(port));
|
||||
+
|
||||
+ e->tx_lpi_enabled = !(eeecr & LPI_MODE_EN);
|
||||
+ e->tx_lpi_timer = GET_LPI_THRESH(eeecr);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int mt753x_set_mac_eee(struct dsa_switch *ds, int port,
|
||||
+ struct ethtool_eee *e)
|
||||
+{
|
||||
+ struct mt7530_priv *priv = ds->priv;
|
||||
+ u32 set, mask = LPI_THRESH_MASK | LPI_MODE_EN;
|
||||
+
|
||||
+ if (e->tx_lpi_timer > 0xFFF)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ set = SET_LPI_THRESH(e->tx_lpi_timer);
|
||||
+ if (!e->tx_lpi_enabled)
|
||||
+ /* Force LPI Mode without a delay */
|
||||
+ set |= LPI_MODE_EN;
|
||||
+ mt7530_rmw(priv, MT7530_PMEEECR_P(port), mask, set);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const struct dsa_switch_ops mt7530_switch_ops = {
|
||||
.get_tag_protocol = mtk_get_tag_protocol,
|
||||
.setup = mt753x_setup,
|
||||
@@ -2535,6 +2576,8 @@ static const struct dsa_switch_ops mt753
|
||||
.phylink_mac_an_restart = mt753x_phylink_mac_an_restart,
|
||||
.phylink_mac_link_down = mt753x_phylink_mac_link_down,
|
||||
.phylink_mac_link_up = mt753x_phylink_mac_link_up,
|
||||
+ .get_mac_eee = mt753x_get_mac_eee,
|
||||
+ .set_mac_eee = mt753x_set_mac_eee,
|
||||
};
|
||||
|
||||
static const struct mt753x_info mt753x_table[] = {
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -240,6 +240,8 @@ enum mt7530_vlan_port_attr {
|
||||
#define PMCR_RX_EN BIT(13)
|
||||
#define PMCR_BACKOFF_EN BIT(9)
|
||||
#define PMCR_BACKPR_EN BIT(8)
|
||||
+#define PMCR_FORCE_EEE1G BIT(7)
|
||||
+#define PMCR_FORCE_EEE100 BIT(6)
|
||||
#define PMCR_TX_FC_EN BIT(5)
|
||||
#define PMCR_RX_FC_EN BIT(4)
|
||||
#define PMCR_FORCE_SPEED_1000 BIT(3)
|
||||
@@ -264,7 +266,8 @@ enum mt7530_vlan_port_attr {
|
||||
#define PMCR_LINK_SETTINGS_MASK (PMCR_TX_EN | PMCR_FORCE_SPEED_1000 | \
|
||||
PMCR_RX_EN | PMCR_FORCE_SPEED_100 | \
|
||||
PMCR_TX_FC_EN | PMCR_RX_FC_EN | \
|
||||
- PMCR_FORCE_FDX | PMCR_FORCE_LNK)
|
||||
+ PMCR_FORCE_FDX | PMCR_FORCE_LNK | \
|
||||
+ PMCR_FORCE_EEE1G | PMCR_FORCE_EEE100)
|
||||
#define PMCR_CPU_PORT_SETTING(id) (PMCR_FORCE_MODE_ID((id)) | \
|
||||
PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | \
|
||||
PMCR_BACKOFF_EN | PMCR_BACKPR_EN | \
|
||||
@@ -273,6 +276,15 @@ enum mt7530_vlan_port_attr {
|
||||
PMCR_FORCE_SPEED_1000 | \
|
||||
PMCR_FORCE_FDX | PMCR_FORCE_LNK)
|
||||
|
||||
+#define MT7530_PMEEECR_P(x) (0x3004 + (x) * 0x100)
|
||||
+#define WAKEUP_TIME_1000(x) (((x) & 0xFF) << 24)
|
||||
+#define WAKEUP_TIME_100(x) (((x) & 0xFF) << 16)
|
||||
+#define LPI_THRESH_MASK GENMASK(15, 4)
|
||||
+#define LPI_THRESH_SHT 4
|
||||
+#define SET_LPI_THRESH(x) (((x) << LPI_THRESH_SHT) & LPI_THRESH_MASK)
|
||||
+#define GET_LPI_THRESH(x) (((x) & LPI_THRESH_MASK) >> LPI_THRESH_SHT)
|
||||
+#define LPI_MODE_EN BIT(0)
|
||||
+
|
||||
#define MT7530_PMSR_P(x) (0x3008 + (x) * 0x100)
|
||||
#define PMSR_EEE1G BIT(7)
|
||||
#define PMSR_EEE100M BIT(6)
|
||||
@ -0,0 +1,75 @@
|
||||
From 3007b05df4301aad179acc6ca1c3645785576df6 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Lobakin <alobakin@pm.me>
|
||||
Date: Mon, 19 Apr 2021 12:53:06 +0000
|
||||
Subject: gro: fix napi_gro_frags() Fast GRO breakage due to IP
|
||||
alignment check
|
||||
|
||||
Commit 7ad18ff6449cbd6beb26b53128ddf56d2685aa93 upstream.
|
||||
|
||||
Commit 38ec4944b593 ("gro: ensure frag0 meets IP header alignment")
|
||||
did the right thing, but missed the fact that napi_gro_frags() logics
|
||||
calls for skb_gro_reset_offset() *before* pulling Ethernet header
|
||||
to the skb linear space.
|
||||
That said, the introduced check for frag0 address being aligned to 4
|
||||
always fails for it as Ethernet header is obviously 14 bytes long,
|
||||
and in case with NET_IP_ALIGN its start is not aligned to 4.
|
||||
|
||||
Fix this by adding @nhoff argument to skb_gro_reset_offset() which
|
||||
tells if an IP header is placed right at the start of frag0 or not.
|
||||
This restores Fast GRO for napi_gro_frags() that became very slow
|
||||
after the mentioned commit, and preserves the introduced check to
|
||||
avoid silent unaligned accesses.
|
||||
|
||||
From v1 [0]:
|
||||
- inline tiny skb_gro_reset_offset() to let the code be optimized
|
||||
more efficively (esp. for the !NET_IP_ALIGN case) (Eric);
|
||||
- pull in Reviewed-by from Eric.
|
||||
|
||||
[0] https://lore.kernel.org/netdev/20210418114200.5839-1-alobakin@pm.me
|
||||
|
||||
Fixes: 38ec4944b593 ("gro: ensure frag0 meets IP header alignment")
|
||||
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: Alexander Lobakin <alobakin@pm.me>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/core/dev.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -5395,7 +5395,7 @@ static struct list_head *gro_list_prepar
|
||||
return head;
|
||||
}
|
||||
|
||||
-static void skb_gro_reset_offset(struct sk_buff *skb)
|
||||
+static inline void skb_gro_reset_offset(struct sk_buff *skb, u32 nhoff)
|
||||
{
|
||||
const struct skb_shared_info *pinfo = skb_shinfo(skb);
|
||||
const skb_frag_t *frag0 = &pinfo->frags[0];
|
||||
@@ -5407,7 +5407,7 @@ static void skb_gro_reset_offset(struct
|
||||
if (skb_mac_header(skb) == skb_tail_pointer(skb) &&
|
||||
pinfo->nr_frags &&
|
||||
!PageHighMem(skb_frag_page(frag0)) &&
|
||||
- (!NET_IP_ALIGN || !(skb_frag_off(frag0) & 3))) {
|
||||
+ (!NET_IP_ALIGN || !((skb_frag_off(frag0) + nhoff) & 3))) {
|
||||
NAPI_GRO_CB(skb)->frag0 = skb_frag_address(frag0);
|
||||
NAPI_GRO_CB(skb)->frag0_len = min_t(unsigned int,
|
||||
skb_frag_size(frag0),
|
||||
@@ -5640,7 +5640,7 @@ gro_result_t napi_gro_receive(struct nap
|
||||
skb_mark_napi_id(skb, napi);
|
||||
trace_napi_gro_receive_entry(skb);
|
||||
|
||||
- skb_gro_reset_offset(skb);
|
||||
+ skb_gro_reset_offset(skb, 0);
|
||||
|
||||
ret = napi_skb_finish(napi, skb, dev_gro_receive(napi, skb));
|
||||
trace_napi_gro_receive_exit(ret);
|
||||
@@ -5733,7 +5733,7 @@ static struct sk_buff *napi_frags_skb(st
|
||||
napi->skb = NULL;
|
||||
|
||||
skb_reset_mac_header(skb);
|
||||
- skb_gro_reset_offset(skb);
|
||||
+ skb_gro_reset_offset(skb, hlen);
|
||||
|
||||
if (unlikely(skb_gro_header_hard(skb, hlen))) {
|
||||
eth = skb_gro_header_slow(skb, hlen, 0);
|
||||
@ -0,0 +1,32 @@
|
||||
From a8d2bb0559b5fefa5173ff4e7496cc6250db2c8a Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Korotin <dkorotin@wavecomp.com>
|
||||
Date: Thu, 12 Sep 2019 22:53:45 +0000
|
||||
Subject: [PATCH] mips: Kconfig: Add ARCH_HAS_FORTIFY_SOURCE
|
||||
|
||||
FORTIFY_SOURCE detects various overflows at compile and run time.
|
||||
(6974f0c4555e ("include/linux/string.h:
|
||||
add the option of fortified string.h functions)
|
||||
|
||||
ARCH_HAS_FORTIFY_SOURCE means that the architecture can be built and
|
||||
run with CONFIG_FORTIFY_SOURCE.
|
||||
|
||||
Since mips can be built and run with that flag,
|
||||
select ARCH_HAS_FORTIFY_SOURCE as default.
|
||||
|
||||
Signed-off-by: Dmitry Korotin <dkorotin@wavecomp.com>
|
||||
Signed-off-by: Paul Burton <paul.burton@mips.com>
|
||||
Cc: linux-mips@vger.kernel.org
|
||||
---
|
||||
arch/mips/Kconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -7,6 +7,7 @@ config MIPS
|
||||
select ARCH_CLOCKSOURCE_DATA
|
||||
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
||||
select ARCH_HAS_UBSAN_SANITIZE_ALL
|
||||
+ select ARCH_HAS_FORTIFY_SOURCE
|
||||
select ARCH_SUPPORTS_UPROBES
|
||||
select ARCH_USE_BUILTIN_BSWAP
|
||||
select ARCH_USE_CMPXCHG_LOCKREF if 64BIT
|
||||
@ -0,0 +1,107 @@
|
||||
From e01c91a360793298c9e1656a61faceff01487a43 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sat, 23 May 2020 23:50:34 +0800
|
||||
Subject: [PATCH] MIPS: Fix exception handler memcpy()
|
||||
|
||||
The exception handler subroutines are declared as a single char, but
|
||||
when copied to the required addresses the copy length is 0x80.
|
||||
|
||||
When range checks are enabled for memcpy() this results in a build
|
||||
failure, with error messages such as:
|
||||
|
||||
In file included from arch/mips/mti-malta/malta-init.c:15:
|
||||
In function 'memcpy',
|
||||
inlined from 'mips_nmi_setup' at arch/mips/mti-malta/malta-init.c:98:2:
|
||||
include/linux/string.h:376:4: error: call to '__read_overflow2' declared with attribute error: detected read beyond size of object passed as 2nd parameter
|
||||
376 | __read_overflow2();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
|
||||
Change the declarations to use type char[].
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Signed-off-by: YunQiang Su <syq@debian.org>
|
||||
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
---
|
||||
arch/mips/loongson64/common/init.c | 4 ++--
|
||||
arch/mips/mti-malta/malta-init.c | 8 ++++----
|
||||
arch/mips/pistachio/init.c | 8 ++++----
|
||||
3 files changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/arch/mips/loongson64/common/init.c
|
||||
+++ b/arch/mips/loongson64/common/init.c
|
||||
@@ -18,10 +18,10 @@ unsigned long __maybe_unused _loongson_a
|
||||
static void __init mips_nmi_setup(void)
|
||||
{
|
||||
void *base;
|
||||
- extern char except_vec_nmi;
|
||||
+ extern char except_vec_nmi[];
|
||||
|
||||
base = (void *)(CAC_BASE + 0x380);
|
||||
- memcpy(base, &except_vec_nmi, 0x80);
|
||||
+ memcpy(base, except_vec_nmi, 0x80);
|
||||
flush_icache_range((unsigned long)base, (unsigned long)base + 0x80);
|
||||
}
|
||||
|
||||
--- a/arch/mips/mti-malta/malta-init.c
|
||||
+++ b/arch/mips/mti-malta/malta-init.c
|
||||
@@ -90,24 +90,24 @@ static void __init console_config(void)
|
||||
static void __init mips_nmi_setup(void)
|
||||
{
|
||||
void *base;
|
||||
- extern char except_vec_nmi;
|
||||
+ extern char except_vec_nmi[];
|
||||
|
||||
base = cpu_has_veic ?
|
||||
(void *)(CAC_BASE + 0xa80) :
|
||||
(void *)(CAC_BASE + 0x380);
|
||||
- memcpy(base, &except_vec_nmi, 0x80);
|
||||
+ memcpy(base, except_vec_nmi, 0x80);
|
||||
flush_icache_range((unsigned long)base, (unsigned long)base + 0x80);
|
||||
}
|
||||
|
||||
static void __init mips_ejtag_setup(void)
|
||||
{
|
||||
void *base;
|
||||
- extern char except_vec_ejtag_debug;
|
||||
+ extern char except_vec_ejtag_debug[];
|
||||
|
||||
base = cpu_has_veic ?
|
||||
(void *)(CAC_BASE + 0xa00) :
|
||||
(void *)(CAC_BASE + 0x300);
|
||||
- memcpy(base, &except_vec_ejtag_debug, 0x80);
|
||||
+ memcpy(base, except_vec_ejtag_debug, 0x80);
|
||||
flush_icache_range((unsigned long)base, (unsigned long)base + 0x80);
|
||||
}
|
||||
|
||||
--- a/arch/mips/pistachio/init.c
|
||||
+++ b/arch/mips/pistachio/init.c
|
||||
@@ -83,12 +83,12 @@ phys_addr_t mips_cdmm_phys_base(void)
|
||||
static void __init mips_nmi_setup(void)
|
||||
{
|
||||
void *base;
|
||||
- extern char except_vec_nmi;
|
||||
+ extern char except_vec_nmi[];
|
||||
|
||||
base = cpu_has_veic ?
|
||||
(void *)(CAC_BASE + 0xa80) :
|
||||
(void *)(CAC_BASE + 0x380);
|
||||
- memcpy(base, &except_vec_nmi, 0x80);
|
||||
+ memcpy(base, except_vec_nmi, 0x80);
|
||||
flush_icache_range((unsigned long)base,
|
||||
(unsigned long)base + 0x80);
|
||||
}
|
||||
@@ -96,12 +96,12 @@ static void __init mips_nmi_setup(void)
|
||||
static void __init mips_ejtag_setup(void)
|
||||
{
|
||||
void *base;
|
||||
- extern char except_vec_ejtag_debug;
|
||||
+ extern char except_vec_ejtag_debug[];
|
||||
|
||||
base = cpu_has_veic ?
|
||||
(void *)(CAC_BASE + 0xa00) :
|
||||
(void *)(CAC_BASE + 0x300);
|
||||
- memcpy(base, &except_vec_ejtag_debug, 0x80);
|
||||
+ memcpy(base, except_vec_ejtag_debug, 0x80);
|
||||
flush_icache_range((unsigned long)base,
|
||||
(unsigned long)base + 0x80);
|
||||
}
|
||||
@ -1,7 +1,8 @@
|
||||
From f1f811410af297c848e9ec17eaa280d190fdce10 Mon Sep 17 00:00:00 2001
|
||||
From 7e4404113686868858a34210c28ae122e967aa64 Mon Sep 17 00:00:00 2001
|
||||
From: Mauri Sandberg <sandberg@mailfence.com>
|
||||
Date: Tue, 23 Feb 2021 18:09:31 +0200
|
||||
Subject: [PATCH] mtd: cfi_cmdset_0002: AMD chip 0x2201 - write words
|
||||
Date: Tue, 9 Mar 2021 19:48:59 +0200
|
||||
Subject: [PATCH] mtd: cfi_cmdset_0002: Disable buffered writes for AMD chip
|
||||
0x2201
|
||||
|
||||
Buffer writes do not work with AMD chip 0x2201. The chip in question
|
||||
is a AMD/Spansion/Cypress Semiconductor S29GL256N and datasheet [1]
|
||||
@ -32,6 +33,8 @@ Tested on a Buffalo wzr-hp-g300nh running kernel 5.10.16.
|
||||
or https://datasheetspdf.com/pdf-file/565708/SPANSION/S29GL256N/1
|
||||
|
||||
Signed-off-by: Mauri Sandberg <sandberg@mailfence.com>
|
||||
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
|
||||
Link: https://lore.kernel.org/r/20210309174859.362060-1-sandberg@mailfence.com
|
||||
---
|
||||
drivers/mtd/chips/cfi_cmdset_0002.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
@ -43,7 +46,7 @@ Signed-off-by: Mauri Sandberg <sandberg@mailfence.com>
|
||||
struct map_info *map = mtd->priv;
|
||||
struct cfi_private *cfi = map->fldrv_priv;
|
||||
+
|
||||
+ if ((cfi->mfr == CFI_MFR_AMD) && (cfi->id == 0x2201))
|
||||
+ if (cfi->mfr == CFI_MFR_AMD && cfi->id == 0x2201)
|
||||
+ return;
|
||||
+
|
||||
if (cfi->cfiq->BufWriteTimeoutTyp) {
|
||||
@ -66,13 +66,13 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -5404,8 +5404,7 @@ static void skb_gro_reset_offset(struct
|
||||
@@ -5404,8 +5404,7 @@ static inline void skb_gro_reset_offset(
|
||||
NAPI_GRO_CB(skb)->frag0 = NULL;
|
||||
NAPI_GRO_CB(skb)->frag0_len = 0;
|
||||
|
||||
- if (skb_mac_header(skb) == skb_tail_pointer(skb) &&
|
||||
- pinfo->nr_frags &&
|
||||
+ if (!skb_headlen(skb) && pinfo->nr_frags &&
|
||||
!PageHighMem(skb_frag_page(frag0))) {
|
||||
!PageHighMem(skb_frag_page(frag0)) &&
|
||||
(!NET_IP_ALIGN || !((skb_frag_off(frag0) + nhoff) & 3))) {
|
||||
NAPI_GRO_CB(skb)->frag0 = skb_frag_address(frag0);
|
||||
NAPI_GRO_CB(skb)->frag0_len = min_t(unsigned int,
|
||||
|
||||
@ -25,7 +25,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -4926,6 +4926,80 @@ static int mv88e6xxx_port_mdb_del(struct
|
||||
@@ -4922,6 +4922,80 @@ static int mv88e6xxx_port_mdb_del(struct
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static int mv88e6xxx_port_egress_floods(struct dsa_switch *ds, int port,
|
||||
bool unicast, bool multicast)
|
||||
{
|
||||
@@ -4980,6 +5054,8 @@ static const struct dsa_switch_ops mv88e
|
||||
@@ -4976,6 +5050,8 @@ static const struct dsa_switch_ops mv88e
|
||||
.port_mdb_prepare = mv88e6xxx_port_mdb_prepare,
|
||||
.port_mdb_add = mv88e6xxx_port_mdb_add,
|
||||
.port_mdb_del = mv88e6xxx_port_mdb_del,
|
||||
|
||||
@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -4993,7 +4993,7 @@ static void mv88e6xxx_port_mirror_del(st
|
||||
@@ -4989,7 +4989,7 @@ static void mv88e6xxx_port_mirror_del(st
|
||||
if (chip->info->ops->set_egress_port(chip,
|
||||
direction,
|
||||
dsa_upstream_port(ds,
|
||||
|
||||
@ -1014,14 +1014,14 @@ CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_AES=y
|
||||
# CONFIG_CRYPTO_AES_586 is not set
|
||||
# CONFIG_CRYPTO_AES_ARM is not set
|
||||
# CONFIG_CRYPTO_AES_ARM_BS is not set
|
||||
# CONFIG_CRYPTO_AES_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_AES_ARM64 is not set
|
||||
# CONFIG_CRYPTO_AES_ARM64_BS is not set
|
||||
# CONFIG_CRYPTO_AES_ARM64_CE is not set
|
||||
# CONFIG_CRYPTO_AES_ARM64_CE_CCM is not set
|
||||
# CONFIG_CRYPTO_AES_ARM64_CE_BLK is not set
|
||||
# CONFIG_CRYPTO_AES_ARM64_CE_CCM is not set
|
||||
# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set
|
||||
# CONFIG_CRYPTO_AES_ARM_BS is not set
|
||||
# CONFIG_CRYPTO_AES_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_AES_NI_INTEL is not set
|
||||
# CONFIG_CRYPTO_AES_TI is not set
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
@ -1109,8 +1109,8 @@ CONFIG_CRYPTO_ALGAPI2=y
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
# CONFIG_CRYPTO_GHASH is not set
|
||||
# CONFIG_CRYPTO_GHASH_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_GHASH_ARM64_CE is not set
|
||||
# CONFIG_CRYPTO_GHASH_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL is not set
|
||||
# CONFIG_CRYPTO_HASH is not set
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
@ -1167,14 +1167,14 @@ CONFIG_CRYPTO_PCRYPT=y
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA1_ARM is not set
|
||||
# CONFIG_CRYPTO_SHA1_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_SHA1_ARM64_CE is not set
|
||||
# CONFIG_CRYPTO_SHA1_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_SHA1_ARM_NEON is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA256_ARM is not set
|
||||
# CONFIG_CRYPTO_SHA256_ARM64 is not set
|
||||
# CONFIG_CRYPTO_SHA2_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_SHA2_ARM64_CE is not set
|
||||
# CONFIG_CRYPTO_SHA2_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_SHA3 is not set
|
||||
# CONFIG_CRYPTO_SHA3_ARM64 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
@ -2662,6 +2662,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
# CONFIG_IPV6_TUNNEL is not set
|
||||
# CONFIG_IPV6_VTI is not set
|
||||
# CONFIG_IPVLAN is not set
|
||||
# CONFIG_IPVTAP is not set
|
||||
# CONFIG_IPW2100 is not set
|
||||
# CONFIG_IPW2100_DEBUG is not set
|
||||
CONFIG_IPW2100_MONITOR=y
|
||||
@ -3272,6 +3273,7 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
|
||||
# CONFIG_MFD_SEC_CORE is not set
|
||||
# CONFIG_MFD_SI476X_CORE is not set
|
||||
# CONFIG_MFD_SKY81452 is not set
|
||||
# CONFIG_MFD_SL28CPLD is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_SMSC is not set
|
||||
# CONFIG_MFD_STMFX is not set
|
||||
@ -3567,8 +3569,8 @@ CONFIG_MTD_OF_PARTS=y
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||
# CONFIG_MTD_PHYSMAP_GEMINI is not set
|
||||
# CONFIG_MTD_PHYSMAP_IXP4XX is not set
|
||||
# CONFIG_MTD_PHYSMAP_GPIO_ADDR is not set
|
||||
# CONFIG_MTD_PHYSMAP_IXP4XX is not set
|
||||
CONFIG_MTD_PHYSMAP_OF=y
|
||||
# CONFIG_MTD_PHYSMAP_OF_GEMINI is not set
|
||||
# CONFIG_MTD_PHYSMAP_OF_VERSATILE is not set
|
||||
@ -4009,8 +4011,6 @@ CONFIG_NFS_V3=y
|
||||
# CONFIG_NF_CONNTRACK_EVENTS is not set
|
||||
# CONFIG_NF_CONNTRACK_FTP is not set
|
||||
# CONFIG_NF_CONNTRACK_H323 is not set
|
||||
# CONFIG_NF_CONNTRACK_IPV4 is not set
|
||||
# CONFIG_NF_CONNTRACK_IPV6 is not set
|
||||
# CONFIG_NF_CONNTRACK_IRC is not set
|
||||
# CONFIG_NF_CONNTRACK_LABELS is not set
|
||||
# CONFIG_NF_CONNTRACK_MARK is not set
|
||||
|
||||
@ -2434,6 +2434,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
# CONFIG_IPV6_TUNNEL is not set
|
||||
# CONFIG_IPV6_VTI is not set
|
||||
# CONFIG_IPVLAN is not set
|
||||
# CONFIG_IPVTAP is not set
|
||||
# CONFIG_IPW2100 is not set
|
||||
# CONFIG_IPW2100_DEBUG is not set
|
||||
CONFIG_IPW2100_MONITOR=y
|
||||
@ -3687,8 +3688,6 @@ CONFIG_NFS_V3=y
|
||||
# CONFIG_NF_CONNTRACK_EVENTS is not set
|
||||
# CONFIG_NF_CONNTRACK_FTP is not set
|
||||
# CONFIG_NF_CONNTRACK_H323 is not set
|
||||
# CONFIG_NF_CONNTRACK_IPV4 is not set
|
||||
# CONFIG_NF_CONNTRACK_IPV6 is not set
|
||||
# CONFIG_NF_CONNTRACK_IRC is not set
|
||||
# CONFIG_NF_CONNTRACK_LABELS is not set
|
||||
# CONFIG_NF_CONNTRACK_MARK is not set
|
||||
@ -6128,8 +6127,8 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
# CONFIG_USB_RCAR_PHY is not set
|
||||
# CONFIG_USB_RENESAS_USBHS is not set
|
||||
# CONFIG_USB_RIO500 is not set
|
||||
# CONFIG_USB_ROLE_SWITCH is not set
|
||||
# CONFIG_USB_ROLES_INTEL_XHCI is not set
|
||||
# CONFIG_USB_ROLE_SWITCH is not set
|
||||
# CONFIG_USB_RTL8150 is not set
|
||||
# CONFIG_USB_RTL8152 is not set
|
||||
# CONFIG_USB_S2255 is not set
|
||||
|
||||
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1158,6 +1158,10 @@ config SYNC_R4K
|
||||
@@ -1159,6 +1159,10 @@ config SYNC_R4K
|
||||
config MIPS_MACHINE
|
||||
def_bool n
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
@@ -909,7 +909,7 @@ static int get_chip(struct map_info *map
|
||||
@@ -913,7 +913,7 @@ static int get_chip(struct map_info *map
|
||||
return 0;
|
||||
|
||||
case FL_ERASING:
|
||||
|
||||
@ -7,7 +7,7 @@ Signed-off-by: George Kashperko <george@znau.edu.ua>
|
||||
1 file changed, 1 insertion(+)
|
||||
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
@@ -2053,6 +2053,7 @@ static int __xipram do_write_buffer(stru
|
||||
@@ -2057,6 +2057,7 @@ static int __xipram do_write_buffer(stru
|
||||
|
||||
/* Write Buffer Load */
|
||||
map_write(map, CMD(0x25), cmd_adr);
|
||||
|
||||
@ -1,121 +0,0 @@
|
||||
From 9cfb2d426c38272f245e9e6f62b3552d1ed5852b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= <opensource@vdorst.com>
|
||||
Date: Tue, 21 Apr 2020 00:18:08 +0200
|
||||
Subject: [PATCH] net: dsa: mt7530: Support EEE features
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: René van Dorst <opensource@vdorst.com>
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2264,9 +2264,13 @@ static void mt753x_phylink_mac_link_up(s
|
||||
switch (speed) {
|
||||
case SPEED_1000:
|
||||
mcr |= PMCR_FORCE_SPEED_1000;
|
||||
+ if (priv->eee_enable & BIT(port))
|
||||
+ mcr |= PMCR_FORCE_EEE1G;
|
||||
break;
|
||||
case SPEED_100:
|
||||
mcr |= PMCR_FORCE_SPEED_100;
|
||||
+ if (priv->eee_enable & BIT(port))
|
||||
+ mcr |= PMCR_FORCE_EEE100;
|
||||
break;
|
||||
}
|
||||
if (duplex == DUPLEX_FULL) {
|
||||
@@ -2507,6 +2511,54 @@ mt753x_phy_write(struct dsa_switch *ds,
|
||||
return priv->info->phy_write(ds, port, regnum, val);
|
||||
}
|
||||
|
||||
+static int mt7530_get_mac_eee(struct dsa_switch *ds, int port,
|
||||
+ struct ethtool_eee *e)
|
||||
+{
|
||||
+ struct mt7530_priv *priv = ds->priv;
|
||||
+ u32 eeecr, pmsr;
|
||||
+
|
||||
+ e->eee_enabled = !!(priv->eee_enable & BIT(port));
|
||||
+
|
||||
+ if (e->eee_enabled) {
|
||||
+ eeecr = mt7530_read(priv, MT7530_PMEEECR_P(port));
|
||||
+ e->tx_lpi_enabled = !(eeecr & LPI_MODE_EN);
|
||||
+ e->tx_lpi_timer = (eeecr >> 4) & 0xFFF;
|
||||
+ pmsr = mt7530_read(priv, MT7530_PMSR_P(port));
|
||||
+ e->eee_active = e->eee_enabled && !!(pmsr & PMSR_EEE1G);
|
||||
+ } else {
|
||||
+ e->tx_lpi_enabled = 0;
|
||||
+ e->tx_lpi_timer = 0;
|
||||
+ e->eee_active = 0;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int mt7530_set_mac_eee(struct dsa_switch *ds, int port,
|
||||
+ struct ethtool_eee *e)
|
||||
+{
|
||||
+ struct mt7530_priv *priv = ds->priv;
|
||||
+ u32 eeecr;
|
||||
+
|
||||
+ if (e->tx_lpi_enabled && e->tx_lpi_timer > 0xFFF)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (e->eee_enabled) {
|
||||
+ priv->eee_enable |= BIT(port);
|
||||
+ //MT7530_PMEEECR_P
|
||||
+ eeecr = mt7530_read(priv, MT7530_PMEEECR_P(port));
|
||||
+ eeecr &= 0xFFFF0000;
|
||||
+ if (!e->tx_lpi_enabled)
|
||||
+ eeecr |= LPI_MODE_EN;
|
||||
+ eeecr = LPI_THRESH(e->tx_lpi_timer);
|
||||
+ mt7530_write(priv, MT7530_PMEEECR_P(port), eeecr);
|
||||
+ } else {
|
||||
+ priv->eee_enable &= ~(BIT(port));
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const struct dsa_switch_ops mt7530_switch_ops = {
|
||||
.get_tag_protocol = mtk_get_tag_protocol,
|
||||
.setup = mt753x_setup,
|
||||
@@ -2535,6 +2587,8 @@ static const struct dsa_switch_ops mt753
|
||||
.phylink_mac_an_restart = mt753x_phylink_mac_an_restart,
|
||||
.phylink_mac_link_down = mt753x_phylink_mac_link_down,
|
||||
.phylink_mac_link_up = mt753x_phylink_mac_link_up,
|
||||
+ .get_mac_eee = mt7530_get_mac_eee,
|
||||
+ .set_mac_eee = mt7530_set_mac_eee,
|
||||
};
|
||||
|
||||
static const struct mt753x_info mt753x_table[] = {
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -240,6 +240,8 @@ enum mt7530_vlan_port_attr {
|
||||
#define PMCR_RX_EN BIT(13)
|
||||
#define PMCR_BACKOFF_EN BIT(9)
|
||||
#define PMCR_BACKPR_EN BIT(8)
|
||||
+#define PMCR_FORCE_EEE1G BIT(7)
|
||||
+#define PMCR_FORCE_EEE100 BIT(6)
|
||||
#define PMCR_TX_FC_EN BIT(5)
|
||||
#define PMCR_RX_FC_EN BIT(4)
|
||||
#define PMCR_FORCE_SPEED_1000 BIT(3)
|
||||
@@ -289,6 +291,12 @@ enum mt7530_vlan_port_attr {
|
||||
#define MT7531_DBG_CNT(x) (0x3018 + (x) * 0x100)
|
||||
#define MT7531_DIS_CLR BIT(31)
|
||||
|
||||
+#define MT7530_PMEEECR_P(x) (0x3004 + (x) * 0x100)
|
||||
+#define WAKEUP_TIME_1000(x) ((x & 0xFF) << 24)
|
||||
+#define WAKEUP_TIME_100(x) ((x & 0xFF) << 16)
|
||||
+#define LPI_THRESH(x) ((x & 0xFFF) << 4)
|
||||
+#define LPI_MODE_EN BIT(0)
|
||||
+
|
||||
/* Register for MIB */
|
||||
#define MT7530_PORT_MIB_COUNTER(x) (0x4000 + (x) * 0x100)
|
||||
#define MT7530_MIB_CCR 0x4fe0
|
||||
@@ -732,6 +740,7 @@ struct mt7530_priv {
|
||||
unsigned int p5_intf_sel;
|
||||
u8 mirror_rx;
|
||||
u8 mirror_tx;
|
||||
+ u8 eee_enable;
|
||||
|
||||
struct mt7530_port ports[MT7530_NUM_PORTS];
|
||||
/* protect among processes for registers access*/
|
||||
@ -25,7 +25,7 @@ Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -2036,7 +2036,8 @@ config CPU_MIPS32
|
||||
@@ -2037,7 +2037,8 @@ config CPU_MIPS32
|
||||
|
||||
config CPU_MIPS64
|
||||
bool
|
||||
|
||||
@ -9,7 +9,7 @@ Acked-by: Rob Landley <rob@landley.net>
|
||||
---
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1068,9 +1068,6 @@ config FW_ARC
|
||||
@@ -1069,9 +1069,6 @@ config FW_ARC
|
||||
config ARCH_MAY_HAVE_PC_FDC
|
||||
bool
|
||||
|
||||
@ -19,7 +19,7 @@ Acked-by: Rob Landley <rob@landley.net>
|
||||
config CEVT_BCM1480
|
||||
bool
|
||||
|
||||
@@ -3043,6 +3040,18 @@ choice
|
||||
@@ -3044,6 +3041,18 @@ choice
|
||||
bool "Extend builtin kernel arguments with bootloader arguments"
|
||||
endchoice
|
||||
|
||||
|
||||
@ -1,106 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Subject: [PATCH] mips: allow the compiler to optimize memset, memcmp, memcpy for better performance and (in some instances) smaller code
|
||||
|
||||
lede-commit: 07e59c7bc7f375f792ec9734be42fe4fa391a8bb
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
arch/mips/boot/compressed/Makefile | 3 ++-
|
||||
arch/mips/include/asm/string.h | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
arch/mips/lib/Makefile | 2 +-
|
||||
arch/mips/lib/memcmp.c | 22 ++++++++++++++++++++++
|
||||
4 files changed, 63 insertions(+), 2 deletions(-)
|
||||
create mode 100644 arch/mips/lib/memcmp.c
|
||||
|
||||
--- a/arch/mips/boot/compressed/Makefile
|
||||
+++ b/arch/mips/boot/compressed/Makefile
|
||||
@@ -23,7 +23,8 @@ KBUILD_CFLAGS := $(filter-out -pg, $(KBU
|
||||
KBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS))
|
||||
|
||||
KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ \
|
||||
- -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull"
|
||||
+ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" \
|
||||
+ -D__ZBOOT__
|
||||
|
||||
KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
|
||||
-DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \
|
||||
--- a/arch/mips/include/asm/string.h
|
||||
+++ b/arch/mips/include/asm/string.h
|
||||
@@ -19,4 +19,42 @@ extern void *memcpy(void *__to, __const_
|
||||
#define __HAVE_ARCH_MEMMOVE
|
||||
extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
|
||||
|
||||
+#ifndef __ZBOOT__
|
||||
+#define memset(__s, __c, len) \
|
||||
+({ \
|
||||
+ size_t __len = (len); \
|
||||
+ void *__ret; \
|
||||
+ if (__builtin_constant_p(len) && __len >= 64) \
|
||||
+ __ret = memset((__s), (__c), __len); \
|
||||
+ else \
|
||||
+ __ret = __builtin_memset((__s), (__c), __len); \
|
||||
+ __ret; \
|
||||
+})
|
||||
+
|
||||
+#define memcpy(dst, src, len) \
|
||||
+({ \
|
||||
+ size_t __len = (len); \
|
||||
+ void *__ret; \
|
||||
+ if (__builtin_constant_p(len) && __len >= 64) \
|
||||
+ __ret = memcpy((dst), (src), __len); \
|
||||
+ else \
|
||||
+ __ret = __builtin_memcpy((dst), (src), __len); \
|
||||
+ __ret; \
|
||||
+})
|
||||
+
|
||||
+#define memmove(dst, src, len) \
|
||||
+({ \
|
||||
+ size_t __len = (len); \
|
||||
+ void *__ret; \
|
||||
+ if (__builtin_constant_p(len) && __len >= 64) \
|
||||
+ __ret = memmove((dst), (src), __len); \
|
||||
+ else \
|
||||
+ __ret = __builtin_memmove((dst), (src), __len); \
|
||||
+ __ret; \
|
||||
+})
|
||||
+
|
||||
+#define __HAVE_ARCH_MEMCMP
|
||||
+#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len))
|
||||
+#endif
|
||||
+
|
||||
#endif /* _ASM_STRING_H */
|
||||
--- a/arch/mips/lib/Makefile
|
||||
+++ b/arch/mips/lib/Makefile
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \
|
||||
mips-atomic.o strncpy_user.o \
|
||||
- strnlen_user.o uncached.o
|
||||
+ strnlen_user.o uncached.o memcmp.o
|
||||
|
||||
obj-y += iomap_copy.o
|
||||
obj-$(CONFIG_PCI) += iomap-pci.o
|
||||
--- /dev/null
|
||||
+++ b/arch/mips/lib/memcmp.c
|
||||
@@ -0,0 +1,22 @@
|
||||
+/*
|
||||
+ * copied from linux/lib/string.c
|
||||
+ *
|
||||
+ * Copyright (C) 1991, 1992 Linus Torvalds
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/string.h>
|
||||
+
|
||||
+#undef memcmp
|
||||
+int memcmp(const void *cs, const void *ct, size_t count)
|
||||
+{
|
||||
+ const unsigned char *su1, *su2;
|
||||
+ int res = 0;
|
||||
+
|
||||
+ for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
|
||||
+ if ((res = *su1 - *su2) != 0)
|
||||
+ break;
|
||||
+ return res;
|
||||
+}
|
||||
+EXPORT_SYMBOL(memcmp);
|
||||
+
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
@@ -909,7 +909,7 @@ static int get_chip(struct map_info *map
|
||||
@@ -913,7 +913,7 @@ static int get_chip(struct map_info *map
|
||||
return 0;
|
||||
|
||||
case FL_ERASING:
|
||||
|
||||
@ -7,7 +7,7 @@ Signed-off-by: George Kashperko <george@znau.edu.ua>
|
||||
1 file changed, 1 insertion(+)
|
||||
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
@@ -2054,6 +2054,7 @@ static int __xipram do_write_buffer(stru
|
||||
@@ -2058,6 +2058,7 @@ static int __xipram do_write_buffer(stru
|
||||
|
||||
/* Write Buffer Load */
|
||||
map_write(map, CMD(0x25), cmd_adr);
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#include <net/net_namespace.h>
|
||||
#ifdef CONFIG_SYSCTL
|
||||
#include <linux/sysctl.h>
|
||||
@@ -454,6 +455,56 @@ static int ct_cpu_seq_show(struct seq_fi
|
||||
@@ -455,6 +456,56 @@ static int ct_cpu_seq_show(struct seq_fi
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static const struct seq_operations ct_cpu_seq_ops = {
|
||||
.start = ct_cpu_seq_start,
|
||||
.next = ct_cpu_seq_next,
|
||||
@@ -467,8 +518,9 @@ static int nf_conntrack_standalone_init_
|
||||
@@ -468,8 +519,9 @@ static int nf_conntrack_standalone_init_
|
||||
kuid_t root_uid;
|
||||
kgid_t root_gid;
|
||||
|
||||
|
||||
@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static bool enable_hooks __read_mostly;
|
||||
MODULE_PARM_DESC(enable_hooks, "Always enable conntrack hooks");
|
||||
module_param(enable_hooks, bool, 0000);
|
||||
@@ -649,6 +652,7 @@ enum nf_ct_sysctl_index {
|
||||
@@ -650,6 +653,7 @@ enum nf_ct_sysctl_index {
|
||||
NF_SYSCTL_CT_PROTO_TIMEOUT_GRE_STREAM,
|
||||
#endif
|
||||
|
||||
@ -57,7 +57,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__NF_SYSCTL_CT_LAST_SYSCTL,
|
||||
};
|
||||
|
||||
@@ -975,6 +979,13 @@ static struct ctl_table nf_ct_sysctl_tab
|
||||
@@ -976,6 +980,13 @@ static struct ctl_table nf_ct_sysctl_tab
|
||||
.proc_handler = proc_dointvec_jiffies,
|
||||
},
|
||||
#endif
|
||||
|
||||
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__u16 tc_index; /* traffic control index */
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -5469,6 +5469,9 @@ static enum gro_result dev_gro_receive(s
|
||||
@@ -5470,6 +5470,9 @@ static enum gro_result dev_gro_receive(s
|
||||
int same_flow;
|
||||
int grow;
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (netif_elide_gro(skb->dev))
|
||||
goto normal;
|
||||
|
||||
@@ -7264,6 +7267,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
@@ -7265,6 +7268,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
&upper_dev->adj_list.lower);
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||
struct net_device *upper_dev, bool master,
|
||||
void *upper_priv, void *upper_info,
|
||||
@@ -7314,6 +7359,7 @@ static int __netdev_upper_dev_link(struc
|
||||
@@ -7315,6 +7360,7 @@ static int __netdev_upper_dev_link(struc
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
ret = notifier_to_errno(ret);
|
||||
@@ -7407,6 +7453,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||
@@ -7408,6 +7454,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||
|
||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
|
||||
@@ -8137,6 +8184,7 @@ int dev_set_mac_address(struct net_devic
|
||||
@@ -8138,6 +8185,7 @@ int dev_set_mac_address(struct net_devic
|
||||
if (err)
|
||||
return err;
|
||||
dev->addr_assign_type = NET_ADDR_SET;
|
||||
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
static int netif_rx_internal(struct sk_buff *skb);
|
||||
static int call_netdevice_notifiers_info(unsigned long val,
|
||||
@@ -5911,6 +5912,11 @@ void __napi_schedule(struct napi_struct
|
||||
@@ -5912,6 +5913,11 @@ void __napi_schedule(struct napi_struct
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
local_irq_save(flags);
|
||||
____napi_schedule(this_cpu_ptr(&softnet_data), n);
|
||||
local_irq_restore(flags);
|
||||
@@ -5958,6 +5964,11 @@ EXPORT_SYMBOL(napi_schedule_prep);
|
||||
@@ -5959,6 +5965,11 @@ EXPORT_SYMBOL(napi_schedule_prep);
|
||||
*/
|
||||
void __napi_schedule_irqoff(struct napi_struct *n)
|
||||
{
|
||||
@ -119,7 +119,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
____napi_schedule(this_cpu_ptr(&softnet_data), n);
|
||||
}
|
||||
EXPORT_SYMBOL(__napi_schedule_irqoff);
|
||||
@@ -6219,9 +6230,89 @@ static void init_gro_hash(struct napi_st
|
||||
@@ -6220,9 +6231,89 @@ static void init_gro_hash(struct napi_st
|
||||
napi->gro_bitmask = 0;
|
||||
}
|
||||
|
||||
@ -209,7 +209,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
INIT_LIST_HEAD(&napi->poll_list);
|
||||
hrtimer_init(&napi->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_PINNED);
|
||||
napi->timer.function = napi_watchdog;
|
||||
@@ -6238,6 +6329,7 @@ void netif_napi_add(struct net_device *d
|
||||
@@ -6239,6 +6330,7 @@ void netif_napi_add(struct net_device *d
|
||||
#ifdef CONFIG_NETPOLL
|
||||
napi->poll_owner = -1;
|
||||
#endif
|
||||
@ -217,7 +217,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
set_bit(NAPI_STATE_SCHED, &napi->state);
|
||||
set_bit(NAPI_STATE_NPSVC, &napi->state);
|
||||
list_add_rcu(&napi->dev_list, &dev->napi_list);
|
||||
@@ -6278,6 +6370,7 @@ static void flush_gro_hash(struct napi_s
|
||||
@@ -6279,6 +6371,7 @@ static void flush_gro_hash(struct napi_s
|
||||
void netif_napi_del(struct napi_struct *napi)
|
||||
{
|
||||
might_sleep();
|
||||
@ -225,7 +225,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (napi_hash_del(napi))
|
||||
synchronize_net();
|
||||
list_del_init(&napi->dev_list);
|
||||
@@ -6290,50 +6383,18 @@ EXPORT_SYMBOL(netif_napi_del);
|
||||
@@ -6291,50 +6384,18 @@ EXPORT_SYMBOL(netif_napi_del);
|
||||
|
||||
static int napi_poll(struct napi_struct *n, struct list_head *repoll)
|
||||
{
|
||||
@ -280,7 +280,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* Some drivers may have called napi_schedule
|
||||
* prior to exhausting their budget.
|
||||
@@ -10313,6 +10374,10 @@ static int __init net_dev_init(void)
|
||||
@@ -10314,6 +10375,10 @@ static int __init net_dev_init(void)
|
||||
sd->backlog.weight = weight_p;
|
||||
}
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -5080,6 +5080,7 @@ static int mv88e6xxx_register_switch(str
|
||||
@@ -5076,6 +5076,7 @@ static int mv88e6xxx_register_switch(str
|
||||
ds->ops = &mv88e6xxx_switch_ops;
|
||||
ds->ageing_time_min = chip->info->age_time_coeff;
|
||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||
|
||||
@ -45,6 +45,14 @@ engenius,ens620ext)
|
||||
ucidef_set_led_netdev "lan1" "LAN1" "green:lan1" "eth0"
|
||||
ucidef_set_led_netdev "lan2" "LAN2" "green:lan2" "eth1"
|
||||
;;
|
||||
mikrotik,sxtsq-5-ac)
|
||||
ucidef_set_rssimon "wlan0" "200000" "1"
|
||||
ucidef_set_led_rssi "rssilow" "rssilow" "green:rssilow" "wlan0" "1" "100"
|
||||
ucidef_set_led_rssi "rssimediumlow" "rssimediumlow" "green:rssimediumlow" "wlan0" "21" "100"
|
||||
ucidef_set_led_rssi "rssimedium" "rssimedium" "green:rssimedium" "wlan0" "41" "100"
|
||||
ucidef_set_led_rssi "rssimediumhigh" "rssimediumhigh" "green:rssimediumhigh" "wlan0" "61" "100"
|
||||
ucidef_set_led_rssi "rssihigh" "rssihigh" "green:rssihigh" "wlan0" "81" "100"
|
||||
;;
|
||||
mobipromo,cm520-79f)
|
||||
ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth1"
|
||||
ucidef_set_led_switch "lan1" "LAN1" "blue:lan1" "switch0" "0x10"
|
||||
|
||||
@ -28,6 +28,7 @@ ipq40xx_setup_interfaces()
|
||||
engenius,eap1300|\
|
||||
engenius,emd1|\
|
||||
meraki,mr33|\
|
||||
mikrotik,sxtsq-5-ac|\
|
||||
netgear,ex6100v2|\
|
||||
netgear,ex6150v2|\
|
||||
zyxel,wre6606)
|
||||
@ -177,6 +178,10 @@ ipq40xx_setup_macs()
|
||||
lan_mac=$(macaddr_add $wan_mac 1)
|
||||
label_mac="$wan_mac"
|
||||
;;
|
||||
mikrotik,sxtsq-5-ac)
|
||||
lan_mac=$(cat /sys/firmware/mikrotik/hard_config/mac_base)
|
||||
label_mac="$lan_mac"
|
||||
;;
|
||||
p2w,r619ac|\
|
||||
p2w,r619ac-128m)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
|
||||
@ -256,7 +256,8 @@ case "$FIRMWARE" in
|
||||
caldata_valid "202f" || caldata_extract "ART" 0x5000 0x2f20
|
||||
ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) +3)
|
||||
;;
|
||||
mikrotik,hap-ac2)
|
||||
mikrotik,hap-ac2|\
|
||||
mikrotik,sxtsq-5-ac)
|
||||
wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
|
||||
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
|
||||
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x0 0x2f20 )
|
||||
|
||||
@ -113,7 +113,8 @@ platform_do_upgrade() {
|
||||
CI_KERNPART="part.safe"
|
||||
nand_do_upgrade "$1"
|
||||
;;
|
||||
mikrotik,hap-ac2)
|
||||
mikrotik,hap-ac2|\
|
||||
mikrotik,sxtsq-5-ac)
|
||||
[ "$(rootfs_type)" = "tmpfs" ] && mtd erase firmware
|
||||
default_do_upgrade "$1"
|
||||
;;
|
||||
|
||||
@ -0,0 +1,242 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
/* Copyright (c) 2020, Robert Marko <robimarko@gmail.com> */
|
||||
|
||||
#include "qcom-ipq4019.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/soc/qcom,tcsr.h>
|
||||
|
||||
/ {
|
||||
model = "MikroTik SXTsq 5 ac (RBSXTsqG-5acD)";
|
||||
compatible = "mikrotik,sxtsq-5-ac";
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x10000000>;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
aliases {
|
||||
led-boot = &led_user;
|
||||
led-failsafe = &led_user;
|
||||
led-running = &led_user;
|
||||
led-upgrade = &led_user;
|
||||
};
|
||||
|
||||
soc {
|
||||
rng@22000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
mdio@90000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
counter@4a1000 {
|
||||
compatible = "qcom,qca-gcnt";
|
||||
reg = <0x4a1000 0x4>;
|
||||
};
|
||||
|
||||
tcsr@1949000 {
|
||||
compatible = "qcom,tcsr";
|
||||
reg = <0x1949000 0x100>;
|
||||
qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
|
||||
};
|
||||
|
||||
ess_tcsr@1953000 {
|
||||
compatible = "qcom,tcsr";
|
||||
reg = <0x1953000 0x1000>;
|
||||
qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
|
||||
};
|
||||
|
||||
tcsr@1957000 {
|
||||
compatible = "qcom,tcsr";
|
||||
reg = <0x1957000 0x100>;
|
||||
qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
|
||||
};
|
||||
|
||||
crypto@8e3a000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
watchdog@b017000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ess-psgmii@98000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
edma@c080000 {
|
||||
status = "okay";
|
||||
phy-mode = "rgmii";
|
||||
qcom,num_gmac = <1>;
|
||||
qcom,single-phy;
|
||||
};
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
gpios = <&tlmm 63 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <KEY_RESTART>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
power {
|
||||
label = "blue:power";
|
||||
gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "keep";
|
||||
panic-indicator;
|
||||
};
|
||||
|
||||
led_user: user {
|
||||
label = "green:user";
|
||||
gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
rssilow {
|
||||
label = "green:rssilow";
|
||||
gpios = <&tlmm 58 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
rssimediumlow {
|
||||
label = "green:rssimediumlow";
|
||||
gpios = <&tlmm 1 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
rssimedium {
|
||||
label = "green:rssimedium";
|
||||
gpios = <&tlmm 2 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
rssimediumhigh {
|
||||
label = "green:rssimediumhigh";
|
||||
gpios = <&tlmm 4 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
rssihigh {
|
||||
label = "green:rssihigh";
|
||||
gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&tlmm {
|
||||
serial_pins: serial_pinmux {
|
||||
mux {
|
||||
pins = "gpio60", "gpio61";
|
||||
function = "blsp_uart0";
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
spi_0_pins: spi_0_pinmux {
|
||||
pin {
|
||||
function = "blsp_spi0";
|
||||
pins = "gpio55", "gpio56", "gpio57";
|
||||
drive-strength = <2>;
|
||||
bias-disable;
|
||||
};
|
||||
pin_cs {
|
||||
function = "gpio";
|
||||
pins = "gpio54";
|
||||
drive-strength = <2>;
|
||||
bias-disable;
|
||||
output-high;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&blsp_dma {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&blsp1_spi1 {
|
||||
status = "okay";
|
||||
|
||||
pinctrl-0 = <&spi_0_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
flash@0 {
|
||||
reg = <0>;
|
||||
compatible = "jedec,spi-nor";
|
||||
spi-max-frequency = <40000000>;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "Qualcomm";
|
||||
reg = <0x0 0x80000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@80000 {
|
||||
compatible = "mikrotik,routerboot-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
label = "RouterBoot";
|
||||
reg = <0x80000 0x80000>;
|
||||
read-only;
|
||||
|
||||
hard_config {
|
||||
read-only;
|
||||
};
|
||||
|
||||
dtb_config {
|
||||
read-only;
|
||||
};
|
||||
|
||||
soft_config {
|
||||
};
|
||||
};
|
||||
|
||||
partition@100000 {
|
||||
compatible = "mikrotik,minor";
|
||||
label = "firmware";
|
||||
reg = <0x100000 0xf00000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&blsp1_uart1 {
|
||||
status = "okay";
|
||||
|
||||
pinctrl-0 = <&serial_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&cryptobam {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&wifi1 {
|
||||
status = "okay";
|
||||
|
||||
qcom,ath10k-calibration-variant = "MikroTik-SXTsq-5-ac";
|
||||
};
|
||||
|
||||
&gmac0 {
|
||||
qcom,phy_mdio_addr = <4>;
|
||||
qcom,poll_required = <1>;
|
||||
qcom,forced_speed = <1000>;
|
||||
qcom,forced_duplex = <1>;
|
||||
vlan_tag = <1 0x20>;
|
||||
};
|
||||
|
||||
&mdio {
|
||||
status = "okay";
|
||||
};
|
||||
@ -18,3 +18,11 @@ define Device/mikrotik_hap-ac2
|
||||
kmod-ath10k-ct-smallbuffers
|
||||
endef
|
||||
TARGET_DEVICES += mikrotik_hap-ac2
|
||||
|
||||
define Device/mikrotik_sxtsq-5-ac
|
||||
$(call Device/mikrotik_nor)
|
||||
DEVICE_MODEL := SXTsq 5 ac (RBSXTsqG-5acD)
|
||||
SOC := qcom-ipq4018
|
||||
DEVICE_PACKAGES := ipq-wifi-mikrotik_sxtsq-5-ac rssileds
|
||||
endef
|
||||
TARGET_DEVICES += mikrotik_sxtsq-5-ac
|
||||
|
||||
@ -93,7 +93,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
+module_platform_driver(gpio_export_driver);
|
||||
--- a/drivers/gpio/gpiolib-sysfs.c
|
||||
+++ b/drivers/gpio/gpiolib-sysfs.c
|
||||
@@ -563,7 +563,7 @@ static struct class gpio_class = {
|
||||
@@ -571,7 +571,7 @@ static struct class gpio_class = {
|
||||
*
|
||||
* Returns zero on success, else an error.
|
||||
*/
|
||||
@ -102,7 +102,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
{
|
||||
struct gpio_chip *chip;
|
||||
struct gpio_device *gdev;
|
||||
@@ -625,6 +625,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
@@ -633,6 +633,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
offset = gpio_chip_hwgpio(desc);
|
||||
if (chip->names && chip->names[offset])
|
||||
ioname = chip->names[offset];
|
||||
@ -111,7 +111,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
dev = device_create_with_groups(&gpio_class, &gdev->dev,
|
||||
MKDEV(0, 0), data, gpio_groups,
|
||||
@@ -646,6 +648,12 @@ err_unlock:
|
||||
@@ -654,6 +656,12 @@ err_unlock:
|
||||
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -837,11 +837,61 @@ dtb-$(CONFIG_ARCH_QCOM) += \
|
||||
@@ -837,11 +837,62 @@ dtb-$(CONFIG_ARCH_QCOM) += \
|
||||
qcom-apq8074-dragonboard.dtb \
|
||||
qcom-apq8084-ifc6540.dtb \
|
||||
qcom-apq8084-mtp.dtb \
|
||||
@ -32,6 +32,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
+ qcom-ipq4018-jalapeno.dtb \
|
||||
+ qcom-ipq4018-meshpoint-one.dtb \
|
||||
+ qcom-ipq4018-hap-ac2.dtb \
|
||||
+ qcom-ipq4018-sxtsq-5-ac.dtb \
|
||||
+ qcom-ipq4018-nbg6617.dtb \
|
||||
+ qcom-ipq4019-oap100.dtb \
|
||||
+ qcom-ipq4018-pa1200.dtb \
|
||||
|
||||
@ -136,7 +136,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
{
|
||||
--- a/drivers/gpio/gpiolib-sysfs.c
|
||||
+++ b/drivers/gpio/gpiolib-sysfs.c
|
||||
@@ -563,7 +563,7 @@ static struct class gpio_class = {
|
||||
@@ -571,7 +571,7 @@ static struct class gpio_class = {
|
||||
*
|
||||
* Returns zero on success, else an error.
|
||||
*/
|
||||
@ -145,7 +145,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
{
|
||||
struct gpio_chip *chip;
|
||||
struct gpio_device *gdev;
|
||||
@@ -625,6 +625,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
@@ -633,6 +633,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
offset = gpio_chip_hwgpio(desc);
|
||||
if (chip->names && chip->names[offset])
|
||||
ioname = chip->names[offset];
|
||||
@ -154,7 +154,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
dev = device_create_with_groups(&gpio_class, &gdev->dev,
|
||||
MKDEV(0, 0), data, gpio_groups,
|
||||
@@ -646,6 +648,12 @@ err_unlock:
|
||||
@@ -654,6 +656,12 @@ err_unlock:
|
||||
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -2378,6 +2378,12 @@ config MIPS_VPE_LOADER
|
||||
@@ -2379,6 +2379,12 @@ config MIPS_VPE_LOADER
|
||||
Includes a loader for loading an elf relocatable object
|
||||
onto another VPE and running it.
|
||||
|
||||
|
||||
@ -152,7 +152,7 @@ This reverts commit cf9441adb1a35506d7606866c382b9d8614169b5.
|
||||
dev_name(&pdev->dev), asrc_priv);
|
||||
--- a/sound/soc/fsl/fsl_esai.c
|
||||
+++ b/sound/soc/fsl/fsl_esai.c
|
||||
@@ -977,8 +977,10 @@ static int fsl_esai_probe(struct platfor
|
||||
@@ -979,8 +979,10 @@ static int fsl_esai_probe(struct platfor
|
||||
PTR_ERR(esai_priv->spbaclk));
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
|
||||
@ -172,10 +172,10 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ethernet-phy@8 {
|
||||
ethernet-phy@7 {
|
||||
/* Marvell AQRate AQR112W - no driver */
|
||||
compatible = "ethernet-phy-ieee802.3-c45";
|
||||
reg = <0x8>;
|
||||
reg = <0x7>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -76,9 +76,11 @@ define Device/bananapi_bpi-r64
|
||||
DEVICE_DTS := mt7622-bananapi-bpi-r64
|
||||
DEVICE_DTS_OVERLAY := mt7622-bananapi-bpi-r64-pcie1 mt7622-bananapi-bpi-r64-sata
|
||||
DEVICE_PACKAGES := kmod-ata-ahci-mtk kmod-btmtkuart kmod-usb3 e2fsprogs mkf2fs f2fsck
|
||||
ARTIFACTS := sdcard.img.gz snand-preloader.bin snand-bl31-uboot.fip
|
||||
ARTIFACTS := emmc-preloader.bin emmc-bl31-uboot.fip sdcard.img.gz snand-preloader.bin snand-bl31-uboot.fip
|
||||
IMAGES := sysupgrade.itb
|
||||
KERNEL_INITRAMFS_SUFFIX := -recovery.itb
|
||||
ARTIFACT/emmc-preloader.bin := bl2 emmc-2ddr
|
||||
ARTIFACT/emmc-bl31-uboot.fip := bl31-uboot bananapi_bpi-r64-emmc
|
||||
ARTIFACT/snand-preloader.bin := bl2 snand-2ddr
|
||||
ARTIFACT/snand-bl31-uboot.fip := bl31-uboot bananapi_bpi-r64-snand
|
||||
ARTIFACT/sdcard.img.gz := mt7622-gpt sdmmc |\
|
||||
|
||||
@ -330,6 +330,7 @@ CONFIG_MODULES_USE_ELF_REL=y
|
||||
CONFIG_MTD_BLOCK2MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_NAND_MTK_BMT is not set
|
||||
# CONFIG_MTD_PARSER_TRX is not set
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPLIT_FIRMWARE=y
|
||||
CONFIG_MTD_SPLIT_UIMAGE_FW=y
|
||||
|
||||
@ -240,6 +240,7 @@ CONFIG_MTD_NAND_CORE=y
|
||||
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
|
||||
CONFIG_MTD_NAND_MTK=y
|
||||
# CONFIG_MTD_NAND_MTK_BMT is not set
|
||||
# CONFIG_MTD_PARSER_TRX is not set
|
||||
CONFIG_MTD_RAW_NAND=y
|
||||
CONFIG_MTD_SPI_NAND=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
|
||||
@ -37,7 +37,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/clk.h>
|
||||
@@ -2482,6 +2483,13 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -2473,6 +2474,13 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
if (ret)
|
||||
goto err_disable_pm;
|
||||
|
||||
@ -51,7 +51,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
||||
ret = device_reset(eth->dev);
|
||||
if (ret) {
|
||||
@@ -3061,6 +3069,16 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -3053,6 +3061,16 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -266,15 +266,19 @@
|
||||
|
||||
ethphy0: ethernet-phy@0 { /* Marvell 88E1518 */
|
||||
reg = <0>;
|
||||
marvell,reg-init = <0x3 0x10 0x1 0x1991>, /* LED function */
|
||||
<0x3 0x11 0x1 0x4401>, /* LED polarity */
|
||||
<0x3 0x12 0x1 0x4905>; /* LED timer */
|
||||
marvell,reg-init = <0x2 0x10 0xffff 0x0006>, /* disable CLK125 */
|
||||
<0x3 0x10 0x0000 0x1991>, /* LED function */
|
||||
<0x3 0x11 0x0000 0x4401>, /* LED polarity */
|
||||
<0x3 0x12 0x0000 0x4905>; /* LED timer */
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&pciec {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&pmx_pcie>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
/* Connected to uPD720202 USB 3.0 Host */
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
@ -436,4 +440,9 @@
|
||||
marvell,pins = "mpp55", "mpp57", "mpp62";
|
||||
marvell,function = "gpio";
|
||||
};
|
||||
|
||||
pmx_pcie: pmx-pcie {
|
||||
marvell,pins = "mpp56", "mpp60";
|
||||
marvell,function = "pcie";
|
||||
};
|
||||
};
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: René van Dorst <opensource@vdorst.com>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -2901,6 +2901,7 @@ static const struct net_device_ops mtk_n
|
||||
@@ -2893,6 +2893,7 @@ static const struct net_device_ops mtk_n
|
||||
|
||||
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
||||
{
|
||||
@ -22,7 +22,7 @@ Signed-off-by: René van Dorst <opensource@vdorst.com>
|
||||
const __be32 *_id = of_get_property(np, "reg", NULL);
|
||||
phy_interface_t phy_mode;
|
||||
struct phylink *phylink;
|
||||
@@ -2993,6 +2994,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -2985,6 +2986,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
|
||||
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH - MTK_RX_ETH_HLEN;
|
||||
|
||||
|
||||
@ -93,7 +93,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
+module_platform_driver(gpio_export_driver);
|
||||
--- a/drivers/gpio/gpiolib-sysfs.c
|
||||
+++ b/drivers/gpio/gpiolib-sysfs.c
|
||||
@@ -563,7 +563,7 @@ static struct class gpio_class = {
|
||||
@@ -571,7 +571,7 @@ static struct class gpio_class = {
|
||||
*
|
||||
* Returns zero on success, else an error.
|
||||
*/
|
||||
@ -102,7 +102,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
{
|
||||
struct gpio_chip *chip;
|
||||
struct gpio_device *gdev;
|
||||
@@ -625,6 +625,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
@@ -633,6 +633,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||
offset = gpio_chip_hwgpio(desc);
|
||||
if (chip->names && chip->names[offset])
|
||||
ioname = chip->names[offset];
|
||||
@ -111,7 +111,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
dev = device_create_with_groups(&gpio_class, &gdev->dev,
|
||||
MKDEV(0, 0), data, gpio_groups,
|
||||
@@ -646,6 +648,12 @@ err_unlock:
|
||||
@@ -654,6 +656,12 @@ err_unlock:
|
||||
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -625,6 +625,7 @@ config RALINK
|
||||
@@ -626,6 +626,7 @@ config RALINK
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
select SYS_SUPPORTS_MIPS16
|
||||
|
||||
@ -71,13 +71,13 @@ Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
|
||||
+ phys_addr_t size;
|
||||
+
|
||||
+ for (size = 32 * SZ_1M; size < 256 * SZ_1M; size <<= 1) {
|
||||
+ if (!memcmp(dm, dm + size, sizeof(detect_magic)))
|
||||
+ if (!__builtin_memcmp(dm, dm + size, sizeof(detect_magic)))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if ((size == 256 * SZ_1M) &&
|
||||
+ (CPHYSADDR(dm + size) < MT7621_LOWMEM_MAX_SIZE) &&
|
||||
+ memcmp(dm, dm + size, sizeof(detect_magic))) {
|
||||
+ __builtin_memcmp(dm, dm + size, sizeof(detect_magic))) {
|
||||
+ add_memory_region(MT7621_LOWMEM_BASE, MT7621_LOWMEM_MAX_SIZE,
|
||||
+ BOOT_MEM_RAM);
|
||||
+ add_memory_region(MT7621_HIGHMEM_BASE, MT7621_HIGHMEM_SIZE,
|
||||
|
||||
@ -14,9 +14,13 @@ choice
|
||||
bool "Binutils 2.34"
|
||||
select BINUTILS_VERSION_2_34
|
||||
|
||||
config BINUTILS_USE_VERSION_2_35_1
|
||||
bool "Binutils 2.35.1"
|
||||
select BINUTILS_VERSION_2_35_1
|
||||
config BINUTILS_USE_VERSION_2_35_2
|
||||
bool "Binutils 2.35.2"
|
||||
select BINUTILS_VERSION_2_35_2
|
||||
|
||||
config BINUTILS_USE_VERSION_2_36_1
|
||||
bool "Binutils 2.36.1"
|
||||
select BINUTILS_VERSION_2_36_1
|
||||
endchoice
|
||||
|
||||
config EXTRA_BINUTILS_CONFIG_OPTIONS
|
||||
|
||||
@ -5,11 +5,15 @@ config BINUTILS_VERSION_2_34
|
||||
default y if !TOOLCHAINOPTS
|
||||
bool
|
||||
|
||||
config BINUTILS_VERSION_2_35_1
|
||||
config BINUTILS_VERSION_2_35_2
|
||||
bool
|
||||
|
||||
config BINUTILS_VERSION_2_36_1
|
||||
bool
|
||||
|
||||
config BINUTILS_VERSION
|
||||
string
|
||||
default "2.32" if BINUTILS_VERSION_2_32
|
||||
default "2.34" if BINUTILS_VERSION_2_34
|
||||
default "2.35.1" if BINUTILS_VERSION_2_35_1
|
||||
default "2.35.2" if BINUTILS_VERSION_2_35_2
|
||||
default "2.36.1" if BINUTILS_VERSION_2_36_1
|
||||
|
||||
@ -23,8 +23,12 @@ ifeq ($(PKG_VERSION),2.34)
|
||||
PKG_HASH:=f00b0e8803dc9bab1e2165bd568528135be734df3fabf8d0161828cd56028952
|
||||
endif
|
||||
|
||||
ifeq ($(PKG_VERSION),2.35.1)
|
||||
PKG_HASH:=3ced91db9bf01182b7e420eab68039f2083aed0a214c0424e257eae3ddee8607
|
||||
ifeq ($(PKG_VERSION),2.35.2)
|
||||
PKG_HASH:=dcd5b0416e7b0a9b24bed76cd8c6c132526805761863150a26d016415b8bdc7b
|
||||
endif
|
||||
|
||||
ifeq ($(PKG_VERSION),2.36.1)
|
||||
PKG_HASH:=e81d9edf373f193af428a0f256674aea62a9d74dfe93f65192d4eae030b0f3b0
|
||||
endif
|
||||
|
||||
HOST_BUILD_PARALLEL:=1
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
--- a/ld/Makefile.am
|
||||
+++ b/ld/Makefile.am
|
||||
@@ -50,7 +50,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
|
||||
# We put the scripts in the directory $(scriptdir)/ldscripts.
|
||||
# We can't put the scripts in $(datadir) because the SEARCH_DIR
|
||||
# directives need to be different for native and cross linkers.
|
||||
-scriptdir = $(tooldir)/lib
|
||||
+scriptdir = $(libdir)
|
||||
|
||||
EMUL = @EMUL@
|
||||
EMULATION_OFILES = @EMULATION_OFILES@
|
||||
--- a/ld/Makefile.in
|
||||
+++ b/ld/Makefile.in
|
||||
@@ -561,7 +561,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
|
||||
# We put the scripts in the directory $(scriptdir)/ldscripts.
|
||||
# We can't put the scripts in $(datadir) because the SEARCH_DIR
|
||||
# directives need to be different for native and cross linkers.
|
||||
-scriptdir = $(tooldir)/lib
|
||||
+scriptdir = $(libdir)
|
||||
BASEDIR = $(srcdir)/..
|
||||
BFDDIR = $(BASEDIR)/bfd
|
||||
INCDIR = $(BASEDIR)/include
|
||||
@ -0,0 +1,18 @@
|
||||
--- a/bfd/elfxx-mips.c
|
||||
+++ b/bfd/elfxx-mips.c
|
||||
@@ -8053,6 +8053,7 @@ _bfd_mips_elf_create_dynamic_sections (b
|
||||
|
||||
name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
|
||||
bh = NULL;
|
||||
+ if (0) {
|
||||
if (!(_bfd_generic_link_add_one_symbol
|
||||
(info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
|
||||
NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
|
||||
@@ -8065,6 +8066,7 @@ _bfd_mips_elf_create_dynamic_sections (b
|
||||
|
||||
if (! bfd_elf_link_record_dynamic_symbol (info, h))
|
||||
return FALSE;
|
||||
+ }
|
||||
|
||||
if (! mips_elf_hash_table (info)->use_rld_obj_head)
|
||||
{
|
||||
@ -0,0 +1,38 @@
|
||||
--- a/bfd/config.bfd
|
||||
+++ b/bfd/config.bfd
|
||||
@@ -896,12 +896,12 @@ case "${targ}" in
|
||||
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
|
||||
;;
|
||||
mips64*el-*-linux*)
|
||||
- targ_defvec=mips_elf32_ntrad_le_vec
|
||||
- targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
|
||||
+ targ_defvec=mips_elf64_trad_le_vec
|
||||
+ targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_be_vec"
|
||||
;;
|
||||
mips64*-*-linux*)
|
||||
- targ_defvec=mips_elf32_ntrad_be_vec
|
||||
- targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
|
||||
+ targ_defvec=mips_elf64_trad_be_vec
|
||||
+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec"
|
||||
;;
|
||||
mips*el-*-linux*)
|
||||
targ_defvec=mips_elf32_trad_le_vec
|
||||
--- a/ld/configure.tgt
|
||||
+++ b/ld/configure.tgt
|
||||
@@ -531,12 +531,12 @@ mips*-*-vxworks*) targ_emul=elf32ebmipvx
|
||||
;;
|
||||
mips*-*-windiss) targ_emul=elf32mipswindiss
|
||||
;;
|
||||
-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
|
||||
- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
|
||||
+mips64*el-*-linux-*) targ_emul=elf64ltsmip
|
||||
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
-mips64*-*-linux-*) targ_emul=elf32btsmipn32
|
||||
- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
|
||||
+mips64*-*-linux-*) targ_emul=elf64btsmip
|
||||
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
mips*el-*-linux-*) targ_emul=elf32ltsmip
|
||||
@ -12,8 +12,8 @@ PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=12ff80b312c11b0284df7a1c5cb9be6418f85228
|
||||
PKG_MIRROR_HASH:=84b7715886320794f9787976b20c868f5d6967e0ab08e6c821a8d42103c0721b
|
||||
PKG_SOURCE_VERSION:=3f5080aedd164c1f92a53552dd3e0b82ac6d2bd3
|
||||
PKG_MIRROR_HASH:=93b1f5dad3deeca05c4a897aa553f0f4423cde68c5640cc333166dc78d112bf4
|
||||
PKG_SOURCE_URL:=https://sourceware.org/git/glibc.git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user