Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
bec5211deb
@ -1,2 +1,2 @@
|
|||||||
LINUX_VERSION-6.6 = .85
|
LINUX_VERSION-6.6 = .87
|
||||||
LINUX_KERNEL_HASH-6.6.85 = 5ebaccf4ca3428cd26817bae62171f4efd270eed866a3e3d0a1d9e970b7b7529
|
LINUX_KERNEL_HASH-6.6.87 = 8957e5c2dacdbc47a16dbf1f6303ca7088409be6197a3881f752313275357ac6
|
||||||
|
@ -290,8 +290,8 @@ ifeq ($(DUMP),1)
|
|||||||
CPU_CFLAGS_archs = -mcpu=archs
|
CPU_CFLAGS_archs = -mcpu=archs
|
||||||
endif
|
endif
|
||||||
ifeq ($(ARCH),riscv64)
|
ifeq ($(ARCH),riscv64)
|
||||||
CPU_TYPE ?= riscv64
|
CPU_TYPE ?= generic
|
||||||
CPU_CFLAGS_riscv64:=-mabi=lp64d -march=rv64imafdc
|
CPU_CFLAGS_generic:=-mabi=lp64d -march=rv64gc
|
||||||
endif
|
endif
|
||||||
ifeq ($(ARCH),loongarch64)
|
ifeq ($(ARCH),loongarch64)
|
||||||
CPU_TYPE ?= generic
|
CPU_TYPE ?= generic
|
||||||
|
@ -43,6 +43,7 @@ endef
|
|||||||
define Trusted-Firmware-A/Default
|
define Trusted-Firmware-A/Default
|
||||||
BUILD_TARGET:=layerscape
|
BUILD_TARGET:=layerscape
|
||||||
BUILD_SUBTARGET:=armv8_64b
|
BUILD_SUBTARGET:=armv8_64b
|
||||||
|
BUILD_DEVICES:=fsl_$(1)
|
||||||
DEPENDS:=+layerscape-rcw +u-boot-fsl_$(1)
|
DEPENDS:=+layerscape-rcw +u-boot-fsl_$(1)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -282,10 +282,10 @@
|
|||||||
+bootcmd=run check_buttons ; if pstore check ; then run boot_recovery ; else run boot_ubi ; fi
|
+bootcmd=run check_buttons ; if pstore check ; then run boot_recovery ; else run boot_ubi ; fi
|
||||||
+bootconf=config-1
|
+bootconf=config-1
|
||||||
+bootdelay=0
|
+bootdelay=0
|
||||||
+bootfile=openwrt-mediatek-filogic-netis_nx31-initramfs-recovery.itb
|
+bootfile=immortalwrt-mediatek-filogic-netis_nx31-initramfs-recovery.itb
|
||||||
+bootfile_bl2=openwrt-mediatek-filogic-netis_nx31-preloader.bin
|
+bootfile_bl2=immortalwrt-mediatek-filogic-netis_nx31-preloader.bin
|
||||||
+bootfile_fip=openwrt-mediatek-filogic-netis_nx31-bl31-uboot.fip
|
+bootfile_fip=immortalwrt-mediatek-filogic-netis_nx31-bl31-uboot.fip
|
||||||
+bootfile_upg=openwrt-mediatek-filogic-netis_nx31-squashfs-sysupgrade.itb
|
+bootfile_upg=immortalwrt-mediatek-filogic-netis_nx31-squashfs-sysupgrade.itb
|
||||||
+bootled_status=blue:status
|
+bootled_status=blue:status
|
||||||
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
|
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
|
||||||
+bootmenu_default=0
|
+bootmenu_default=0
|
||||||
|
@ -146,6 +146,20 @@ define U-Boot/nanopi-r4se-rk3399
|
|||||||
friendlyarm_nanopi-r4se
|
friendlyarm_nanopi-r4se
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define U-Boot/rock-4c-plus-rk3399
|
||||||
|
$(U-Boot/rk3399/Default)
|
||||||
|
NAME:=ROCK 4C+
|
||||||
|
BUILD_DEVICES:= \
|
||||||
|
radxa_rock-4c-plus
|
||||||
|
endef
|
||||||
|
|
||||||
|
define U-Boot/rock-4se-rk3399
|
||||||
|
$(U-Boot/rk3399/Default)
|
||||||
|
NAME:=ROCK 4SE
|
||||||
|
BUILD_DEVICES:= \
|
||||||
|
radxa_rock-4se
|
||||||
|
endef
|
||||||
|
|
||||||
define U-Boot/rock-pi-4-rk3399
|
define U-Boot/rock-pi-4-rk3399
|
||||||
$(U-Boot/rk3399/Default)
|
$(U-Boot/rk3399/Default)
|
||||||
NAME:=ROCK Pi 4
|
NAME:=ROCK Pi 4
|
||||||
@ -389,6 +403,8 @@ UBOOT_TARGETS := \
|
|||||||
nanopc-t4-rk3399 \
|
nanopc-t4-rk3399 \
|
||||||
nanopi-r4s-rk3399 \
|
nanopi-r4s-rk3399 \
|
||||||
nanopi-r4se-rk3399 \
|
nanopi-r4se-rk3399 \
|
||||||
|
rock-4c-plus-rk3399 \
|
||||||
|
rock-4se-rk3399 \
|
||||||
rock-pi-4-rk3399 \
|
rock-pi-4-rk3399 \
|
||||||
rockpro64-rk3399 \
|
rockpro64-rk3399 \
|
||||||
rock-pi-s-rk3308 \
|
rock-pi-s-rk3308 \
|
||||||
|
@ -119,6 +119,7 @@ gatonetworks,gdsp)
|
|||||||
glinet,gl-mt3000)
|
glinet,gl-mt3000)
|
||||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x80000" "0x20000"
|
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x80000" "0x20000"
|
||||||
;;
|
;;
|
||||||
|
mercusys,mr80x-v3|\
|
||||||
mercusys,mr90x-v1|\
|
mercusys,mr90x-v1|\
|
||||||
routerich,ax3000|\
|
routerich,ax3000|\
|
||||||
tenbay,wr3000k|\
|
tenbay,wr3000k|\
|
||||||
|
@ -25,6 +25,8 @@ define Package/layerscape-fman
|
|||||||
CATEGORY:=Firmware
|
CATEGORY:=Firmware
|
||||||
TITLE:=NXP FMan ucode
|
TITLE:=NXP FMan ucode
|
||||||
DEPENDS:=@TARGET_layerscape
|
DEPENDS:=@TARGET_layerscape
|
||||||
|
DEFAULT:=y if TARGET_layerscape_armv8_64b
|
||||||
|
HIDDEN:=1
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
|
@ -27,6 +27,8 @@ define Package/layerscape-ddr-phy
|
|||||||
CATEGORY:=Firmware
|
CATEGORY:=Firmware
|
||||||
TITLE:=NXP Layerscape DDR PHY firmware
|
TITLE:=NXP Layerscape DDR PHY firmware
|
||||||
DEPENDS:=@TARGET_layerscape
|
DEPENDS:=@TARGET_layerscape
|
||||||
|
DEFAULT:=y if TARGET_layerscape_armv8_64b
|
||||||
|
HIDDEN:=1
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
|
@ -26,6 +26,8 @@ define Package/layerscape-dpl
|
|||||||
CATEGORY:=Firmware
|
CATEGORY:=Firmware
|
||||||
TITLE:=NXP DPL firmware
|
TITLE:=NXP DPL firmware
|
||||||
DEPENDS:=@TARGET_layerscape
|
DEPENDS:=@TARGET_layerscape
|
||||||
|
DEFAULT:=y if TARGET_layerscape_armv8_64b
|
||||||
|
HIDDEN:=1
|
||||||
endef
|
endef
|
||||||
|
|
||||||
MAKE_PATH:=config
|
MAKE_PATH:=config
|
||||||
|
@ -25,6 +25,8 @@ define Package/layerscape-mc
|
|||||||
CATEGORY:=Firmware
|
CATEGORY:=Firmware
|
||||||
TITLE:=NXP MC firmware
|
TITLE:=NXP MC firmware
|
||||||
DEPENDS:=@TARGET_layerscape
|
DEPENDS:=@TARGET_layerscape
|
||||||
|
DEFAULT:=y if TARGET_layerscape_armv8_64b
|
||||||
|
HIDDEN:=1
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
|
@ -25,6 +25,8 @@ define Package/layerscape-rcw
|
|||||||
CATEGORY:=Firmware
|
CATEGORY:=Firmware
|
||||||
TITLE:=NXP Layerscape RCW binaries
|
TITLE:=NXP Layerscape RCW binaries
|
||||||
DEPENDS:=@TARGET_layerscape
|
DEPENDS:=@TARGET_layerscape
|
||||||
|
DEFAULT:=y if TARGET_layerscape_armv7
|
||||||
|
HIDDEN:=1
|
||||||
endef
|
endef
|
||||||
|
|
||||||
BOARDS := \
|
BOARDS := \
|
||||||
|
@ -5,3 +5,11 @@ define Package/ath12k-firmware-wcn7850/install
|
|||||||
$(PKG_BUILD_DIR)/ath12k/WCN7850/hw2.0/* $(1)/lib/firmware/ath12k/WCN7850/hw2.0/
|
$(PKG_BUILD_DIR)/ath12k/WCN7850/hw2.0/* $(1)/lib/firmware/ath12k/WCN7850/hw2.0/
|
||||||
endef
|
endef
|
||||||
$(eval $(call BuildPackage,ath12k-firmware-wcn7850))
|
$(eval $(call BuildPackage,ath12k-firmware-wcn7850))
|
||||||
|
|
||||||
|
Package/ath12k-firmware-qcn9274 = $(call Package/firmware-default,QCN9274 ath12k firmware)
|
||||||
|
define Package/ath12k-firmware-qcn9274/install
|
||||||
|
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN9274/hw2.0
|
||||||
|
$(INSTALL_DATA) \
|
||||||
|
$(PKG_BUILD_DIR)/ath12k/QCN9274/hw2.0/* $(1)/lib/firmware/ath12k/QCN9274/hw2.0/
|
||||||
|
endef
|
||||||
|
$(eval $(call BuildPackage,ath12k-firmware-qcn9274))
|
||||||
|
@ -7,8 +7,7 @@ Rollback some APIs to fix compilation errors.
|
|||||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||||
---
|
---
|
||||||
ath10k-6.14/ahb.c | 2 +-
|
ath10k-6.14/ahb.c | 2 +-
|
||||||
ath10k-6.14/mac.c | 5 ++---
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
2 files changed, 3 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/ath10k-6.14/ahb.c
|
--- a/ath10k-6.14/ahb.c
|
||||||
+++ b/ath10k-6.14/ahb.c
|
+++ b/ath10k-6.14/ahb.c
|
||||||
@ -21,26 +20,3 @@ Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
int ath10k_ahb_init(void)
|
int ath10k_ahb_init(void)
|
||||||
--- a/ath10k-6.14/mac.c
|
|
||||||
+++ b/ath10k-6.14/mac.c
|
|
||||||
@@ -9607,10 +9607,9 @@ exit:
|
|
||||||
|
|
||||||
static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
|
|
||||||
struct ieee80211_vif *vif,
|
|
||||||
- struct ieee80211_link_sta *link_sta,
|
|
||||||
+ struct ieee80211_sta *sta,
|
|
||||||
u32 changed)
|
|
||||||
{
|
|
||||||
- struct ieee80211_sta *sta = link_sta->sta;
|
|
||||||
struct ath10k *ar = hw->priv;
|
|
||||||
struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
|
|
||||||
struct ath10k_vif *arvif = (void *)vif->drv_priv;
|
|
||||||
@@ -10603,7 +10602,7 @@ static const struct ieee80211_ops ath10k
|
|
||||||
.reconfig_complete = ath10k_reconfig_complete,
|
|
||||||
.get_survey = ath10k_get_survey,
|
|
||||||
.set_bitrate_mask = ath10k_mac_op_set_bitrate_mask,
|
|
||||||
- .link_sta_rc_update = ath10k_sta_rc_update,
|
|
||||||
+ .sta_rc_update = ath10k_sta_rc_update,
|
|
||||||
.offset_tsf = ath10k_offset_tsf,
|
|
||||||
.get_tsf = ath10k_get_tsf,
|
|
||||||
.ampdu_action = ath10k_ampdu_action,
|
|
||||||
|
@ -35,9 +35,9 @@ define Package/bcm63xx-cfe/install
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/InstallDev
|
define Build/InstallDev
|
||||||
rm -rf $(KERNEL_BUILD_DIR)/$(PKG_NAME)
|
rm -rf $(STAGING_DIR_IMAGE)/$(PKG_NAME)
|
||||||
mkdir -p $(KERNEL_BUILD_DIR)/$(PKG_NAME)
|
mkdir -p $(STAGING_DIR_IMAGE)/$(PKG_NAME)
|
||||||
$(CP) -r $(PKG_BUILD_DIR)/* $(KERNEL_BUILD_DIR)/$(PKG_NAME)
|
$(CP) -r $(PKG_BUILD_DIR)/* $(STAGING_DIR_IMAGE)/$(PKG_NAME)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,bcm63xx-cfe))
|
$(eval $(call BuildPackage,bcm63xx-cfe))
|
||||||
|
@ -674,7 +674,7 @@ static void gpio_keys_irq_close(struct gpio_keys_button_dev *bdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gpio_keys_remove(struct platform_device *pdev)
|
static void gpio_keys_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct gpio_keys_button_dev *bdev = platform_get_drvdata(pdev);
|
struct gpio_keys_button_dev *bdev = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
@ -684,13 +684,11 @@ static int gpio_keys_remove(struct platform_device *pdev)
|
|||||||
gpio_keys_polled_close(bdev);
|
gpio_keys_polled_close(bdev);
|
||||||
else
|
else
|
||||||
gpio_keys_irq_close(bdev);
|
gpio_keys_irq_close(bdev);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver gpio_keys_driver = {
|
static struct platform_driver gpio_keys_driver = {
|
||||||
.probe = gpio_keys_probe,
|
.probe = gpio_keys_probe,
|
||||||
.remove = gpio_keys_remove,
|
.remove_new = gpio_keys_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "gpio-keys",
|
.name = "gpio-keys",
|
||||||
.of_match_table = of_match_ptr(gpio_keys_of_match),
|
.of_match_table = of_match_ptr(gpio_keys_of_match),
|
||||||
@ -699,7 +697,7 @@ static struct platform_driver gpio_keys_driver = {
|
|||||||
|
|
||||||
static struct platform_driver gpio_keys_polled_driver = {
|
static struct platform_driver gpio_keys_polled_driver = {
|
||||||
.probe = gpio_keys_polled_probe,
|
.probe = gpio_keys_polled_probe,
|
||||||
.remove = gpio_keys_remove,
|
.remove_new = gpio_keys_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "gpio-keys-polled",
|
.name = "gpio-keys-polled",
|
||||||
.of_match_table = of_match_ptr(gpio_keys_polled_of_match),
|
.of_match_table = of_match_ptr(gpio_keys_polled_of_match),
|
||||||
|
@ -2780,7 +2780,7 @@ static int ltq_mei_probe(struct platform_device *pdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ltq_mei_remove(struct platform_device *pdev)
|
static void ltq_mei_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int num;
|
int num;
|
||||||
@ -2794,7 +2794,6 @@ static int ltq_mei_remove(struct platform_device *pdev)
|
|||||||
IFX_MEI_ExitDevice (i);
|
IFX_MEI_ExitDevice (i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id ltq_mei_match[] = {
|
static const struct of_device_id ltq_mei_match[] = {
|
||||||
@ -2804,7 +2803,7 @@ static const struct of_device_id ltq_mei_match[] = {
|
|||||||
|
|
||||||
static struct platform_driver ltq_mei_driver = {
|
static struct platform_driver ltq_mei_driver = {
|
||||||
.probe = ltq_mei_probe,
|
.probe = ltq_mei_probe,
|
||||||
.remove = ltq_mei_remove,
|
.remove_new = ltq_mei_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "lantiq,mei-xway",
|
.name = "lantiq,mei-xway",
|
||||||
.of_match_table = ltq_mei_match,
|
.of_match_table = ltq_mei_match,
|
||||||
|
@ -1865,7 +1865,7 @@ INIT_PRIV_DATA_FAIL:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ltq_atm_remove(struct platform_device *pdev)
|
static void ltq_atm_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int port_num;
|
int port_num;
|
||||||
struct ltq_atm_ops *ops = platform_get_drvdata(pdev);
|
struct ltq_atm_ops *ops = platform_get_drvdata(pdev);
|
||||||
@ -1885,13 +1885,11 @@ static int ltq_atm_remove(struct platform_device *pdev)
|
|||||||
ops->shutdown();
|
ops->shutdown();
|
||||||
|
|
||||||
clear_priv_data();
|
clear_priv_data();
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver ltq_atm_driver = {
|
static struct platform_driver ltq_atm_driver = {
|
||||||
.probe = ltq_atm_probe,
|
.probe = ltq_atm_probe,
|
||||||
.remove = ltq_atm_remove,
|
.remove_new = ltq_atm_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "atm",
|
.name = "atm",
|
||||||
.of_match_table = ltq_atm_match,
|
.of_match_table = ltq_atm_match,
|
||||||
|
@ -143,7 +143,7 @@ static int ltq_deu_probe(struct platform_device *pdev)
|
|||||||
* \ingroup IFX_DEU_FUNCTIONS
|
* \ingroup IFX_DEU_FUNCTIONS
|
||||||
* \brief remove the loaded crypto algorithms
|
* \brief remove the loaded crypto algorithms
|
||||||
*/
|
*/
|
||||||
static int ltq_deu_remove(struct platform_device *pdev)
|
static void ltq_deu_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
//#ifdef CONFIG_CRYPTO_DEV_PWR_SAVE_MODE
|
//#ifdef CONFIG_CRYPTO_DEV_PWR_SAVE_MODE
|
||||||
#if defined(CONFIG_CRYPTO_DEV_DES)
|
#if defined(CONFIG_CRYPTO_DEV_DES)
|
||||||
@ -168,8 +168,6 @@ static int ltq_deu_remove(struct platform_device *pdev)
|
|||||||
ifxdeu_fini_md5_hmac ();
|
ifxdeu_fini_md5_hmac ();
|
||||||
#endif
|
#endif
|
||||||
printk("DEU has exited successfully\n");
|
printk("DEU has exited successfully\n");
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -193,7 +191,7 @@ MODULE_DEVICE_TABLE(of, ltq_deu_match);
|
|||||||
|
|
||||||
static struct platform_driver ltq_deu_driver = {
|
static struct platform_driver ltq_deu_driver = {
|
||||||
.probe = ltq_deu_probe,
|
.probe = ltq_deu_probe,
|
||||||
.remove = ltq_deu_remove,
|
.remove_new = ltq_deu_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "deu",
|
.name = "deu",
|
||||||
.of_match_table = ltq_deu_match,
|
.of_match_table = ltq_deu_match,
|
||||||
|
@ -1566,7 +1566,7 @@ INIT_PRIV_DATA_FAIL:
|
|||||||
* Output:
|
* Output:
|
||||||
* none
|
* none
|
||||||
*/
|
*/
|
||||||
static int ltq_ptm_remove(struct platform_device *pdev)
|
static void ltq_ptm_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1591,13 +1591,11 @@ static int ltq_ptm_remove(struct platform_device *pdev)
|
|||||||
ifx_ptm_uninit_chip();
|
ifx_ptm_uninit_chip();
|
||||||
|
|
||||||
clear_priv_data();
|
clear_priv_data();
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver ltq_ptm_driver = {
|
static struct platform_driver ltq_ptm_driver = {
|
||||||
.probe = ltq_ptm_probe,
|
.probe = ltq_ptm_probe,
|
||||||
.remove = ltq_ptm_remove,
|
.remove_new = ltq_ptm_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "ptm",
|
.name = "ptm",
|
||||||
.of_match_table = ltq_ptm_match,
|
.of_match_table = ltq_ptm_match,
|
||||||
|
@ -1079,7 +1079,7 @@ INIT_PRIV_DATA_FAIL:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ltq_ptm_remove(struct platform_device *pdev)
|
static void ltq_ptm_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
ifx_mei_atm_showtime_enter = NULL;
|
ifx_mei_atm_showtime_enter = NULL;
|
||||||
@ -1103,8 +1103,6 @@ static int ltq_ptm_remove(struct platform_device *pdev)
|
|||||||
ifx_ptm_uninit_chip();
|
ifx_ptm_uninit_chip();
|
||||||
|
|
||||||
clear_priv_data();
|
clear_priv_data();
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MODULE
|
#ifndef MODULE
|
||||||
@ -1135,7 +1133,7 @@ static int __init queue_gamma_map_setup(char *line)
|
|||||||
#endif
|
#endif
|
||||||
static struct platform_driver ltq_ptm_driver = {
|
static struct platform_driver ltq_ptm_driver = {
|
||||||
.probe = ltq_ptm_probe,
|
.probe = ltq_ptm_probe,
|
||||||
.remove = ltq_ptm_remove,
|
.remove_new = ltq_ptm_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "ptm",
|
.name = "ptm",
|
||||||
.of_match_table = ltq_ptm_match,
|
.of_match_table = ltq_ptm_match,
|
||||||
|
@ -658,7 +658,7 @@ $(eval $(call KernelPackage,dsa-realtek))
|
|||||||
|
|
||||||
define KernelPackage/dsa-rtl8366rb
|
define KernelPackage/dsa-rtl8366rb
|
||||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||||
TITLE:=Realtek RTL8365MB switch DSA support
|
TITLE:=Realtek RTL8366RB switch DSA support
|
||||||
DEPENDS:=+kmod-dsa-realtek @!TARGET_x86 @!TARGET_bcm47xx @!TARGET_uml
|
DEPENDS:=+kmod-dsa-realtek @!TARGET_x86 @!TARGET_bcm47xx @!TARGET_uml
|
||||||
KCONFIG:= \
|
KCONFIG:= \
|
||||||
CONFIG_NET_DSA_REALTEK_RTL8366RB \
|
CONFIG_NET_DSA_REALTEK_RTL8366RB \
|
||||||
|
@ -538,7 +538,7 @@ $(eval $(call KernelPackage,usb-dwc3-octeon))
|
|||||||
|
|
||||||
define KernelPackage/usb-dwc3-qcom
|
define KernelPackage/usb-dwc3-qcom
|
||||||
TITLE:=DWC3 Qualcomm USB driver
|
TITLE:=DWC3 Qualcomm USB driver
|
||||||
DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax) +kmod-usb-dwc3
|
DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax||TARGET_qualcommbe) +kmod-usb-dwc3
|
||||||
KCONFIG:= CONFIG_USB_DWC3_QCOM
|
KCONFIG:= CONFIG_USB_DWC3_QCOM
|
||||||
FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko
|
FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko
|
||||||
AUTOLOAD:=$(call AutoLoad,53,dwc3-qcom,1)
|
AUTOLOAD:=$(call AutoLoad,53,dwc3-qcom,1)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
@@ -9919,6 +9919,21 @@ static int ath10k_mac_init_rd(struct ath
|
@@ -9920,6 +9920,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +22,7 @@
|
|||||||
int ath10k_mac_register(struct ath10k *ar)
|
int ath10k_mac_register(struct ath10k *ar)
|
||||||
{
|
{
|
||||||
static const u32 cipher_suites[] = {
|
static const u32 cipher_suites[] = {
|
||||||
@@ -10281,6 +10296,12 @@ int ath10k_mac_register(struct ath10k *a
|
@@ -10282,6 +10297,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||||
|
|
||||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
|||||||
if (ret)
|
if (ret)
|
||||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
@@ -10297,7 +10297,7 @@ int ath10k_mac_register(struct ath10k *a
|
@@ -10298,7 +10298,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||||
|
|
||||||
#ifdef CPTCFG_MAC80211_LEDS
|
#ifdef CPTCFG_MAC80211_LEDS
|
||||||
|
@ -41,7 +41,7 @@ Signed-off-by: Ziyang Huang <hzyitc@outlook.com>
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ab->qmi.target_mem[idx].paddr = 0;
|
ab->qmi.target_mem[idx].paddr = 0;
|
||||||
@@ -2292,6 +2296,7 @@ static int ath11k_qmi_load_file_target_m
|
@@ -2295,6 +2299,7 @@ static int ath11k_qmi_load_file_target_m
|
||||||
struct qmi_wlanfw_bdf_download_resp_msg_v01 resp;
|
struct qmi_wlanfw_bdf_download_resp_msg_v01 resp;
|
||||||
struct qmi_txn txn;
|
struct qmi_txn txn;
|
||||||
const u8 *temp = data;
|
const u8 *temp = data;
|
||||||
@ -49,7 +49,7 @@ Signed-off-by: Ziyang Huang <hzyitc@outlook.com>
|
|||||||
void __iomem *bdf_addr = NULL;
|
void __iomem *bdf_addr = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
u32 remaining = len;
|
u32 remaining = len;
|
||||||
@@ -2303,7 +2308,9 @@ static int ath11k_qmi_load_file_target_m
|
@@ -2306,7 +2311,9 @@ static int ath11k_qmi_load_file_target_m
|
||||||
memset(&resp, 0, sizeof(resp));
|
memset(&resp, 0, sizeof(resp));
|
||||||
|
|
||||||
if (ab->hw_params.fixed_bdf_addr) {
|
if (ab->hw_params.fixed_bdf_addr) {
|
||||||
|
@ -91,9 +91,9 @@ Signed-off-by: George Moussalem <george.moussalem@outlook.com>
|
|||||||
#endif /* _HIF_H_ */
|
#endif /* _HIF_H_ */
|
||||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
@@ -2184,6 +2184,8 @@ static int ath11k_qmi_request_device_inf
|
@@ -2187,6 +2187,8 @@ static int ath11k_qmi_request_device_inf
|
||||||
ab->mem = bar_addr_va;
|
if (!ab->hw_params.ce_remap)
|
||||||
ab->mem_len = resp.bar_size;
|
ab->mem_ce = ab->mem;
|
||||||
|
|
||||||
+ ath11k_hif_config_static_window(ab);
|
+ ath11k_hif_config_static_window(ab);
|
||||||
+
|
+
|
||||||
|
@ -89,7 +89,7 @@ Signed-off-by: George Moussalem <george.moussalem@outlook.com>
|
|||||||
/* SMBIOS type containing Board Data File Name Extension */
|
/* SMBIOS type containing Board Data File Name Extension */
|
||||||
#define ATH11K_SMBIOS_BDF_EXT_TYPE 0xF8
|
#define ATH11K_SMBIOS_BDF_EXT_TYPE 0xF8
|
||||||
|
|
||||||
@@ -945,6 +948,7 @@ struct ath11k_base {
|
@@ -951,6 +954,7 @@ struct ath11k_base {
|
||||||
struct list_head peers;
|
struct list_head peers;
|
||||||
wait_queue_head_t peer_mapping_wq;
|
wait_queue_head_t peer_mapping_wq;
|
||||||
u8 mac_addr[ETH_ALEN];
|
u8 mac_addr[ETH_ALEN];
|
||||||
|
@ -132,7 +132,7 @@ Signed-off-by: Sriram R <srirrama@codeaurora.org>
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* HTT definitions */
|
/* HTT definitions */
|
||||||
@@ -1712,5 +1718,6 @@ void ath11k_dp_shadow_init_timer(struct
|
@@ -1689,5 +1695,6 @@ void ath11k_dp_shadow_init_timer(struct
|
||||||
struct ath11k_hp_update_timer *update_timer,
|
struct ath11k_hp_update_timer *update_timer,
|
||||||
u32 interval, u32 ring_id);
|
u32 interval, u32 ring_id);
|
||||||
void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab);
|
void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab);
|
||||||
|
@ -532,7 +532,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5994,7 +6009,7 @@ static int ath12k_mac_start(struct ath12
|
@@ -5995,7 +6010,7 @@ static int ath12k_mac_start(struct ath12
|
||||||
|
|
||||||
/* TODO: Do we need to enable ANI? */
|
/* TODO: Do we need to enable ANI? */
|
||||||
|
|
||||||
@ -541,7 +541,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
|
|
||||||
ar->num_started_vdevs = 0;
|
ar->num_started_vdevs = 0;
|
||||||
ar->num_created_vdevs = 0;
|
ar->num_created_vdevs = 0;
|
||||||
@@ -6174,6 +6189,9 @@ static void ath12k_mac_stop(struct ath12
|
@@ -6175,6 +6190,9 @@ static void ath12k_mac_stop(struct ath12
|
||||||
cancel_delayed_work_sync(&ar->scan.timeout);
|
cancel_delayed_work_sync(&ar->scan.timeout);
|
||||||
cancel_work_sync(&ar->regd_update_work);
|
cancel_work_sync(&ar->regd_update_work);
|
||||||
cancel_work_sync(&ar->ab->rfkill_work);
|
cancel_work_sync(&ar->ab->rfkill_work);
|
||||||
@ -551,7 +551,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
|
|
||||||
spin_lock_bh(&ar->data_lock);
|
spin_lock_bh(&ar->data_lock);
|
||||||
list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) {
|
list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) {
|
||||||
@@ -6420,6 +6438,117 @@ static void ath12k_mac_op_update_vif_off
|
@@ -6421,6 +6439,117 @@ static void ath12k_mac_op_update_vif_off
|
||||||
ath12k_mac_update_vif_offload(arvif);
|
ath12k_mac_update_vif_offload(arvif);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -669,7 +669,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
static int ath12k_mac_vdev_create(struct ath12k *ar, struct ieee80211_vif *vif)
|
static int ath12k_mac_vdev_create(struct ath12k *ar, struct ieee80211_vif *vif)
|
||||||
{
|
{
|
||||||
struct ath12k_hw *ah = ar->ah;
|
struct ath12k_hw *ah = ar->ah;
|
||||||
@@ -6534,6 +6663,7 @@ static int ath12k_mac_vdev_create(struct
|
@@ -6535,6 +6664,7 @@ static int ath12k_mac_vdev_create(struct
|
||||||
arvif->vdev_id, ret);
|
arvif->vdev_id, ret);
|
||||||
goto err_peer_del;
|
goto err_peer_del;
|
||||||
}
|
}
|
||||||
@ -677,7 +677,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
break;
|
break;
|
||||||
case WMI_VDEV_TYPE_STA:
|
case WMI_VDEV_TYPE_STA:
|
||||||
param_id = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
|
param_id = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
|
||||||
@@ -6572,6 +6702,13 @@ static int ath12k_mac_vdev_create(struct
|
@@ -6573,6 +6703,13 @@ static int ath12k_mac_vdev_create(struct
|
||||||
arvif->vdev_id, ret);
|
arvif->vdev_id, ret);
|
||||||
goto err_peer_del;
|
goto err_peer_del;
|
||||||
}
|
}
|
||||||
@ -691,7 +691,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -6912,6 +7049,11 @@ static void ath12k_mac_op_remove_interfa
|
@@ -6913,6 +7050,11 @@ static void ath12k_mac_op_remove_interfa
|
||||||
ath12k_dbg(ab, ATH12K_DBG_MAC, "mac remove interface (vdev %d)\n",
|
ath12k_dbg(ab, ATH12K_DBG_MAC, "mac remove interface (vdev %d)\n",
|
||||||
arvif->vdev_id);
|
arvif->vdev_id);
|
||||||
|
|
||||||
@ -703,7 +703,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
||||||
ret = ath12k_peer_delete(ar, arvif->vdev_id, vif->addr);
|
ret = ath12k_peer_delete(ar, arvif->vdev_id, vif->addr);
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -7752,6 +7894,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
|
@@ -7753,6 +7895,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
|
||||||
ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
|
ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
|
||||||
ath12k_mac_monitor_stop(ar);
|
ath12k_mac_monitor_stop(ar);
|
||||||
|
|
||||||
@ -718,7 +718,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
mutex_unlock(&ar->conf_mutex);
|
mutex_unlock(&ar->conf_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8290,6 +8440,14 @@ ath12k_mac_op_reconfig_complete(struct i
|
@@ -8291,6 +8441,14 @@ ath12k_mac_op_reconfig_complete(struct i
|
||||||
ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
|
ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
|
||||||
ar->pdev->pdev_id);
|
ar->pdev->pdev_id);
|
||||||
|
|
||||||
@ -733,7 +733,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||||||
if (ab->is_reset) {
|
if (ab->is_reset) {
|
||||||
recovery_count = atomic_inc_return(&ab->recovery_count);
|
recovery_count = atomic_inc_return(&ab->recovery_count);
|
||||||
|
|
||||||
@@ -9339,6 +9497,9 @@ static void ath12k_mac_setup(struct ath1
|
@@ -9340,6 +9498,9 @@ static void ath12k_mac_setup(struct ath1
|
||||||
|
|
||||||
INIT_WORK(&ar->wmi_mgmt_tx_work, ath12k_mgmt_over_wmi_tx_work);
|
INIT_WORK(&ar->wmi_mgmt_tx_work, ath12k_mgmt_over_wmi_tx_work);
|
||||||
skb_queue_head_init(&ar->wmi_mgmt_tx_queue);
|
skb_queue_head_init(&ar->wmi_mgmt_tx_queue);
|
||||||
|
@ -0,0 +1,67 @@
|
|||||||
|
From 24f587572acf7509127dbdfcbf1b681ef84eeba0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aaradhana Sahu <quic_aarasahu@quicinc.com>
|
||||||
|
Date: Thu, 16 Jan 2025 08:58:35 +0530
|
||||||
|
Subject: [PATCH] wifi: ath12k: Fetch regdb.bin file from board-2.bin
|
||||||
|
|
||||||
|
Currently, ath12k_core_fetch_regdb() finds regdb.bin file through
|
||||||
|
board id's but in board-2.bin file regdb.bin file is present with
|
||||||
|
default board id because of which regdb.bin is not fetched.
|
||||||
|
|
||||||
|
Add support to fetch regdb.bin file from board-2.bin through
|
||||||
|
default board id.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Aaradhana Sahu <quic_aarasahu@quicinc.com>
|
||||||
|
Reviewed-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||||
|
Link: https://patch.msgid.link/20250116032835.118397-1-quic_aarasahu@quicinc.com
|
||||||
|
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/core.c | 12 +++++++-----
|
||||||
|
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/core.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/core.c
|
||||||
|
@@ -161,7 +161,7 @@ EXPORT_SYMBOL(ath12k_core_resume);
|
||||||
|
|
||||||
|
static int __ath12k_core_create_board_name(struct ath12k_base *ab, char *name,
|
||||||
|
size_t name_len, bool with_variant,
|
||||||
|
- bool bus_type_mode)
|
||||||
|
+ bool bus_type_mode, bool with_default)
|
||||||
|
{
|
||||||
|
/* strlen(',variant=') + strlen(ab->qmi.target.bdf_ext) */
|
||||||
|
char variant[9 + ATH12K_QMI_BDF_EXT_STR_LENGTH] = { 0 };
|
||||||
|
@@ -192,7 +192,9 @@ static int __ath12k_core_create_board_na
|
||||||
|
"bus=%s,qmi-chip-id=%d,qmi-board-id=%d%s",
|
||||||
|
ath12k_bus_str(ab->hif.bus),
|
||||||
|
ab->qmi.target.chip_id,
|
||||||
|
- ab->qmi.target.board_id, variant);
|
||||||
|
+ with_default ?
|
||||||
|
+ ATH12K_BOARD_ID_DEFAULT : ab->qmi.target.board_id,
|
||||||
|
+ variant);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -204,19 +206,19 @@ static int __ath12k_core_create_board_na
|
||||||
|
static int ath12k_core_create_board_name(struct ath12k_base *ab, char *name,
|
||||||
|
size_t name_len)
|
||||||
|
{
|
||||||
|
- return __ath12k_core_create_board_name(ab, name, name_len, true, false);
|
||||||
|
+ return __ath12k_core_create_board_name(ab, name, name_len, true, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ath12k_core_create_fallback_board_name(struct ath12k_base *ab, char *name,
|
||||||
|
size_t name_len)
|
||||||
|
{
|
||||||
|
- return __ath12k_core_create_board_name(ab, name, name_len, false, false);
|
||||||
|
+ return __ath12k_core_create_board_name(ab, name, name_len, false, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ath12k_core_create_bus_type_board_name(struct ath12k_base *ab, char *name,
|
||||||
|
size_t name_len)
|
||||||
|
{
|
||||||
|
- return __ath12k_core_create_board_name(ab, name, name_len, false, true);
|
||||||
|
+ return __ath12k_core_create_board_name(ab, name, name_len, false, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct firmware *ath12k_core_firmware_request(struct ath12k_base *ab,
|
@ -0,0 +1,153 @@
|
|||||||
|
From patchwork Mon Mar 10 13:28:18 2025
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Mantas <mantas@8devices.com>
|
||||||
|
X-Patchwork-Id: 14010032
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com
|
||||||
|
[209.85.167.41])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2ADD522A4DA
|
||||||
|
for <linux-wireless@vger.kernel.org>; Mon, 10 Mar 2025 13:28:47 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=209.85.167.41
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1741613330; cv=none;
|
||||||
|
b=Vx8zckt7S92zrauuzzoNjX/1eXhlbq+4R3uNXCWPCBFXXHBuAHrmXrDOQILh1g+IfyWOgpyXyibTTkLg6IWREXcA/OjV+V9ehNaQaHJAt4D14uxuNW6uIDA56myF+bhdmiZnfGZfK3puVBjeCAMbZwGhc81dTR3RaEhKYP93Wcg=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1741613330; c=relaxed/simple;
|
||||||
|
bh=yRMCaDQnvsF6vQ/w9rLRB/etZre1sSzpWUDTNGX0zAk=;
|
||||||
|
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc;
|
||||||
|
b=rFopB9f+nOXbmGbGXoo4SeBAV82xQ6nydiMDCiYAw7sELURejS0lK9xQZolnRGeyNtHnQgix39lrcilr6cdvGMhaziXzS6RYlY2WyoHTMxHwYGUIa9McnJ1AkCczdVv6SgeNUlVVEgAZBqH0Q2pmd5b91h/PMc/aPdQm9SQY8IU=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=quarantine dis=none) header.from=8devices.com;
|
||||||
|
spf=pass smtp.mailfrom=8devices.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=8devices.com header.i=@8devices.com
|
||||||
|
header.b=LitRbtOU; arc=none smtp.client-ip=209.85.167.41
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=quarantine dis=none) header.from=8devices.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=8devices.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=8devices.com header.i=@8devices.com
|
||||||
|
header.b="LitRbtOU"
|
||||||
|
Received: by mail-lf1-f41.google.com with SMTP id
|
||||||
|
2adb3069b0e04-5499c5d9691so1866539e87.2
|
||||||
|
for <linux-wireless@vger.kernel.org>;
|
||||||
|
Mon, 10 Mar 2025 06:28:47 -0700 (PDT)
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||||
|
d=8devices.com; s=8devices; t=1741613326; x=1742218126;
|
||||||
|
darn=vger.kernel.org;
|
||||||
|
h=cc:to:message-id:content-transfer-encoding:mime-version:subject
|
||||||
|
:date:from:from:to:cc:subject:date:message-id:reply-to;
|
||||||
|
bh=6+w3029kfHch5SeD/z0zur2K64cd98za9hhmN/ji0MY=;
|
||||||
|
b=LitRbtOUxDhUPycKFo/pzuJu9Y11QmpYSvOmkgM9TcNEOsBvLk8z0EJ7+xy24ijRGJ
|
||||||
|
Xz16V9Z1kJGkXBK90klI6s3RjVBQf+dxf37t2kdQWdrgOE2VhXjnnV5zP7odCkMmOViw
|
||||||
|
2UmKSvagsxc6KojE2OYyd+vR3hmL+4fCtegorXMaRrf0Brje8XJmViAUgbc+IAtfL0Ao
|
||||||
|
pnig300fAb4WbnmIJIRiOUKoTESjbJRkUehGJkhe1ztiPE1F86AVMXw5IrDBR/WtMin1
|
||||||
|
9nYYDqfSGvI7fOvfStfZ9hS0ShIhBNd5naccyQ7c0xSTvXJ51vUvNvdZuufm9OKsbQ99
|
||||||
|
nh4g==
|
||||||
|
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||||
|
d=1e100.net; s=20230601; t=1741613326; x=1742218126;
|
||||||
|
h=cc:to:message-id:content-transfer-encoding:mime-version:subject
|
||||||
|
:date:from:x-gm-message-state:from:to:cc:subject:date:message-id
|
||||||
|
:reply-to;
|
||||||
|
bh=6+w3029kfHch5SeD/z0zur2K64cd98za9hhmN/ji0MY=;
|
||||||
|
b=Gx+AX3aIV66kzjGLGOToc2CuQrnfaWn43yZW2rgRpKJv03162undTbo+SdaI8s+8mY
|
||||||
|
aKrYsNOOqI4h6pHCZsVkBzqVh5ZOs+xJbJaHEETGzyBYA2sy0bdDwDUr0rIzJUD8ZYiw
|
||||||
|
736zfMRE2rxfOLoVIcfBLXMUcR2d63n/4wxgr1s5HVV3o8uEZ5gxNDnz5p/QabiWbT3m
|
||||||
|
AMSVVaOBUTRnd9GcZhzYfKboT7SNrTJz0emqSWPKCWfm8dYIzH3TuIGULfRu5UA1/Y2H
|
||||||
|
Q6ZbLmcYu5+VDKCtQl4nSmun3WUNAyPoeg5PCB1YcuCpqKcjU8l5Kkn+JxNjYAG432us
|
||||||
|
Z5xQ==
|
||||||
|
X-Forwarded-Encrypted: i=1;
|
||||||
|
AJvYcCVigvWgctGNxtYGpBtNhTPBpQPHa7l14ZVktj/Oe1W8p1xwSIjIViAk2X3sDC23bbrmI41TVZbgJZDGCMFJ6g==@vger.kernel.org
|
||||||
|
X-Gm-Message-State: AOJu0YxJFjAixTwr8dSwTYmdvbVzm/jbyVk+gQV6pF/9Vep5xeVdJMWa
|
||||||
|
TE+4MHJDPdO8dA16Yn/y5c8pLBEYKqRlo8uDHNKV6e5ldbv18Xv6bR163j+rVCQ=
|
||||||
|
X-Gm-Gg: ASbGncsUwV1fquQPNOfmTge/yCSzRhyC7+A8STTBe3n+C2XDK1UV8IswQL5UEXlb268
|
||||||
|
mumVPzu1Ex8+Nh+quKWT+CIR3WR0NRXm1oiG0N+Cu2Mm4cm4mipqrV9Yxd6x5OMsG32XKd6r0iQ
|
||||||
|
gr7joJETyo6k1TGc6i0LyoIabLOCc7Nkeu7BD+URUnBvoeQyXBdJpX0bbdvANKW5DrUeX1GkUA7
|
||||||
|
0o4dZYtRola31Z1W9xZMdSefhmI4zZE4uy/RyR/FkQq2Zqk9FGct8DOKoHpOPa0DHVMy0lQAiNI
|
||||||
|
KNg6OYtuJY+/6TpDoZzNpooiLi29WL6hqlpkmlZeluuCBG6HlSbZTQ==
|
||||||
|
X-Google-Smtp-Source:
|
||||||
|
AGHT+IGIixTut4yqDWp69RPz6EjMMq4lD94Ez1yhsRnow6NgvTk6WmKPLFavYgOJC+xGczTQmaocLw==
|
||||||
|
X-Received: by 2002:a05:6512:1112:b0:549:5850:f275 with SMTP id
|
||||||
|
2adb3069b0e04-54990ec8e60mr4354451e87.50.1741613326121;
|
||||||
|
Mon, 10 Mar 2025 06:28:46 -0700 (PDT)
|
||||||
|
Received: from [127.0.1.1] ([78.62.132.154])
|
||||||
|
by smtp.gmail.com with ESMTPSA id
|
||||||
|
2adb3069b0e04-5498b1bcaecsm1460408e87.200.2025.03.10.06.28.45
|
||||||
|
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
|
||||||
|
Mon, 10 Mar 2025 06:28:45 -0700 (PDT)
|
||||||
|
From: Mantas Pucka <mantas@8devices.com>
|
||||||
|
Date: Mon, 10 Mar 2025 15:28:18 +0200
|
||||||
|
Subject: [PATCH ath-next] wifi: ath12k: limit WMI_SCAN_CHAN_LIST_CMDID
|
||||||
|
argument size
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Message-Id: <20250310-limit-wmi-chanlist-v1-1-8f0fb45459a7@8devices.com>
|
||||||
|
X-B4-Tracking: v=1; b=H4sIAPHozmcC/x2MSwqEMBAFryK9tiGJ+MGriIuMtvpAM0MSHEG8u
|
||||||
|
9FNQVG8d1IQDwnUZid52RHwdUl0ntGwWDcLY0xORplSFVrxig2R/xv46StCZF0Pn2Y0ibaiNPx
|
||||||
|
5mXC8px3ZuLCTI1J/XTfUqQSebgAAAA==
|
||||||
|
X-Change-ID: 20250310-limit-wmi-chanlist-17cb8d27cba6
|
||||||
|
To: ath12k@lists.infradead.org
|
||||||
|
Cc: Johannes Berg <johannes@sipsolutions.net>,
|
||||||
|
Jeff Johnson <jjohnson@kernel.org>, linux-wireless@vger.kernel.org,
|
||||||
|
linux-kernel@vger.kernel.org, Mantas Pucka <mantas@8devices.com>
|
||||||
|
X-Mailer: b4 0.14.2
|
||||||
|
|
||||||
|
When using BDF with both 5GHz and 6GHz bands enabled on QCN9274, interface
|
||||||
|
fails to start. It happens because FW fails to process
|
||||||
|
WMI_SCAN_CHAN_LIST_CMDID with argument size >2048, resulting in a command
|
||||||
|
timeout. The current code allows splitting channel list across multiple WMI
|
||||||
|
commands but uses WMI max_msg_len (4096) as chunk size, which is still too
|
||||||
|
large.
|
||||||
|
|
||||||
|
Fix this by limiting the number of channels sent at once, using the value
|
||||||
|
specified in WMI interface description [1].
|
||||||
|
|
||||||
|
[1] https://git.codelinaro.org/clo/qsdk/platform/vendor/qcom-opensource/wlan/fw-api/-/blob/NHSS.QSDK.13.0.0.6/fw/wmi_unified.h#L6459
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Mantas Pucka <mantas@8devices.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.c | 3 +++
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.h | 2 ++
|
||||||
|
2 files changed, 5 insertions(+)
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
base-commit: 42aa76e608ca845c98e79f9e23af0bdb07b2eb1d
|
||||||
|
change-id: 20250310-limit-wmi-chanlist-17cb8d27cba6
|
||||||
|
|
||||||
|
Best regards,
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
@@ -2558,6 +2558,9 @@ int ath12k_wmi_send_scan_chan_list_cmd(s
|
||||||
|
max_chan_limit = (wmi->wmi_ab->max_msg_len[ar->pdev_idx] - len) /
|
||||||
|
sizeof(*chan_info);
|
||||||
|
|
||||||
|
+ if (max_chan_limit > WMI_MAX_NUM_CHAN_PER_WMI_CMD)
|
||||||
|
+ max_chan_limit = WMI_MAX_NUM_CHAN_PER_WMI_CMD;
|
||||||
|
+
|
||||||
|
num_send_chans = min(arg->nallchans, max_chan_limit);
|
||||||
|
|
||||||
|
arg->nallchans -= num_send_chans;
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
@@ -3743,6 +3743,8 @@ struct wmi_stop_scan_cmd {
|
||||||
|
__le32 pdev_id;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
+#define WMI_MAX_NUM_CHAN_PER_WMI_CMD 58
|
||||||
|
+
|
||||||
|
struct ath12k_wmi_scan_chan_list_arg {
|
||||||
|
u32 pdev_id;
|
||||||
|
u16 nallchans;
|
@ -0,0 +1,137 @@
|
|||||||
|
From patchwork Thu Mar 13 09:00:56 2025
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Mantas <mantas@8devices.com>
|
||||||
|
X-Patchwork-Id: 14014575
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com
|
||||||
|
[209.85.167.49])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id F210C2641F0
|
||||||
|
for <linux-wireless@vger.kernel.org>; Thu, 13 Mar 2025 09:01:28 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=209.85.167.49
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1741856491; cv=none;
|
||||||
|
b=CeFjBZstZXxg4oQQPPON0u0Mw9kvUaCubWSfpcWvN2italvlwccDBr+izqIzCXwxYaoAedVR6iHEQv+LBtIHOsMWHOCI9E6jYAPqjbEUEU0RMdvujKLVFvFXYR4UaRDAMzDGMlFF1qc0pY0sYR4FYfFBBQOarHn2sjZ/csIyj4k=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1741856491; c=relaxed/simple;
|
||||||
|
bh=oLhlWw1tOovRHEGC4gsbi6BHKYXLNDYOrtVP3tTS5nE=;
|
||||||
|
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc;
|
||||||
|
b=baAfN8drFOEwQR9LVuWoVsd3jkMbQECK7Zuc68EzbbJwM4Zb0tbziTk1vvqED+f9JPOMbjRyjvV1hvy3svqZr7OuTZJdSM41D+DsbHvw0jEhaRlKwzpLWuOn9lu56ahcAsvx4A4JRawEK90smoYpejhxkdlSrxqRBh1ey3RwmQU=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=quarantine dis=none) header.from=8devices.com;
|
||||||
|
spf=pass smtp.mailfrom=8devices.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=8devices.com header.i=@8devices.com
|
||||||
|
header.b=FdBxu3P+; arc=none smtp.client-ip=209.85.167.49
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=quarantine dis=none) header.from=8devices.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=8devices.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=8devices.com header.i=@8devices.com
|
||||||
|
header.b="FdBxu3P+"
|
||||||
|
Received: by mail-lf1-f49.google.com with SMTP id
|
||||||
|
2adb3069b0e04-54943bb8006so648002e87.0
|
||||||
|
for <linux-wireless@vger.kernel.org>;
|
||||||
|
Thu, 13 Mar 2025 02:01:28 -0700 (PDT)
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||||
|
d=8devices.com; s=8devices; t=1741856487; x=1742461287;
|
||||||
|
darn=vger.kernel.org;
|
||||||
|
h=cc:to:message-id:content-transfer-encoding:mime-version:subject
|
||||||
|
:date:from:from:to:cc:subject:date:message-id:reply-to;
|
||||||
|
bh=uj7GGUjO2Cb2hoHrzMda/fIIQwFl12ddzGuw5jrHW8M=;
|
||||||
|
b=FdBxu3P+gf3qNd4jxSOCYUJ1meLFYAm0ou6lnEyomeeXDBFwITM6FM0cgBdXgmkLWZ
|
||||||
|
ZKowNImwE9FKqNGxpg2tZ4obR9aM7HzzkxV3TE+1aIiocbr/5xyXQU+/AUvaM3vui/8d
|
||||||
|
SFiwhX9FwFKdrYi1Og4XFD2aBhA5Fzp0U27grJYGTLchEfkr9Om43y3vZ7w2ENEBU0SO
|
||||||
|
7NFmSwx7BmflIybP2sGCUzjacGQzzec0zz256EY7GpZH9r19jgWiCe1YGWdlxDaRhWze
|
||||||
|
xV4okbZKydpYlUU/qGsgn23cRQuFCvMobvfkmTwsGYwlN4bAzq/cHw83YEFrUzYOngZK
|
||||||
|
z7bg==
|
||||||
|
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||||
|
d=1e100.net; s=20230601; t=1741856487; x=1742461287;
|
||||||
|
h=cc:to:message-id:content-transfer-encoding:mime-version:subject
|
||||||
|
:date:from:x-gm-message-state:from:to:cc:subject:date:message-id
|
||||||
|
:reply-to;
|
||||||
|
bh=uj7GGUjO2Cb2hoHrzMda/fIIQwFl12ddzGuw5jrHW8M=;
|
||||||
|
b=PhLIANoGtdl34d9fFH7uxPyg1K5yPGRwimsWPVhHon98V9QP64+qUbifocbfojxz8u
|
||||||
|
NEVzhOx0kfmsmkBxUzuRCu6xuTAF8LmjBpAJJxo3/4nqY67np8iZt/MITzx6egbMOUAs
|
||||||
|
txqj0rzXwr55N/9yAD/QuD6bBcd8PcNMPp0CjFAt39AyK6De3BEIcA7b/eLoY3lifaxJ
|
||||||
|
9U5ZZ/dHXwSIr9xuE1EB6pT5FbHcI8iWJTDJ8NdBcmWC8qtGAAMzlzWqHU0nOAJEjwEc
|
||||||
|
T+oaJr8fTAgq4B5OvS1cNClscZHvoM3zlIoczwPPoBZCtUi2gThz9R4BrBxepdoZl1qq
|
||||||
|
NZQA==
|
||||||
|
X-Forwarded-Encrypted: i=1;
|
||||||
|
AJvYcCUSbJyRkEPLa3fw7FZX3Ci6+/o8dqI0hd6pkVT20pi6Ufgze7nBQXa+qdK3OM5Ng2TFBrym8JoyBo//MwDHng==@vger.kernel.org
|
||||||
|
X-Gm-Message-State: AOJu0Ywjzq2sFNyTMNPyxDt+721RyXdLbDPrF5PY3LnwpKaTfduyXkMF
|
||||||
|
K/7N3Cpb/71aQsMXwmIbXAOGeLVWLBQHdYnQLZlsCTjVNArIjgiX7tNB0Mq56+qYtR9PdMrBAt8
|
||||||
|
m
|
||||||
|
X-Gm-Gg: ASbGncvDd0SdjhjPfzaKTXW4e0hclZuKu4pZ4d0XD5/Q6dnv09ZObgGjJbIRrAhYizp
|
||||||
|
zWc8CwidDk8UYPX/OhiAyDhS4XRKRy2QG03sZh17aHDhishhmCE+mcqe+YUM+F4ns/05sAR2MeP
|
||||||
|
wu/Rz6NS6UD4ihGNReTORGB3X4n9I5dgdNheFyqbrRX+Js4zXuvn1jgoEWawfovOu/4HAlnv+7p
|
||||||
|
1ufgXBXJGVj6+OGzyNOyYloTB/Csok3zU9yBfrU+G19mpGaF86t/6yxmUIXCO+cWfbu2GIhVZp3
|
||||||
|
RmSiDo/spnsvtYVGCPc6v9jALz83YcknTLkX8u+08AOkJKK7Mh8rKlCvbfZcB355
|
||||||
|
X-Google-Smtp-Source:
|
||||||
|
AGHT+IE2NulrNIo+M5vahinpDWyI9BdSgzdREdo+l0AN7HhcxOd01ZBOpT3HYFht1EVpKj5T7Edrrw==
|
||||||
|
X-Received: by 2002:a05:6512:ba6:b0:549:8f21:bc0e with SMTP id
|
||||||
|
2adb3069b0e04-54990eb1987mr9398593e87.32.1741856486697;
|
||||||
|
Thu, 13 Mar 2025 02:01:26 -0700 (PDT)
|
||||||
|
Received: from [127.0.1.1] ([78.62.132.154])
|
||||||
|
by smtp.gmail.com with ESMTPSA id
|
||||||
|
2adb3069b0e04-549ba88591csm142134e87.187.2025.03.13.02.01.25
|
||||||
|
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
|
||||||
|
Thu, 13 Mar 2025 02:01:25 -0700 (PDT)
|
||||||
|
From: Mantas Pucka <mantas@8devices.com>
|
||||||
|
Date: Thu, 13 Mar 2025 11:00:56 +0200
|
||||||
|
Subject: [PATCH] wifi: ath12k: fix 5GHz operation on wideband QCN9274
|
||||||
|
radios
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Message-Id: <20250313-ath12-wideband-caps-v1-1-23ac4247cd8a@8devices.com>
|
||||||
|
X-B4-Tracking: v=1; b=H4sIAMee0mcC/x3MQQqAIBBA0avErBvIsUi6SrSwHGs2FhoVhHdPW
|
||||||
|
r7F/y8kjsIJhuqFyJck2UOBqitYNhtWRnHFQA11jVYa7bkpwlsczzY4XOyRkNqZjOqNcZ6hlEd
|
||||||
|
kL89/HaecP+zWjGtlAAAA
|
||||||
|
X-Change-ID: 20250313-ath12-wideband-caps-24b281788dfe
|
||||||
|
To: ath12k@lists.infradead.org
|
||||||
|
Cc: Johannes Berg <johannes@sipsolutions.net>,
|
||||||
|
Jeff Johnson <jjohnson@kernel.org>, linux-wireless@vger.kernel.org,
|
||||||
|
linux-kernel@vger.kernel.org, Mantas Pucka <mantas@8devices.com>
|
||||||
|
X-Mailer: b4 0.14.2
|
||||||
|
|
||||||
|
Currently ath12k_mac_setup_ht_vht_cap() incorrectly assumes that QCN9274
|
||||||
|
radios with 6GHz band can't support 5GHz as well. This prevents the
|
||||||
|
addition of HT and VHT capabilities for the 5GHz band. Since QCN9274 is
|
||||||
|
capable of operating in multiple bands, remove the 6GHz support check and
|
||||||
|
exception for single_pdev_only (i.e. WCN7850).
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Mantas Pucka <mantas@8devices.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
base-commit: 42aa76e608ca845c98e79f9e23af0bdb07b2eb1d
|
||||||
|
change-id: 20250313-ath12-wideband-caps-24b281788dfe
|
||||||
|
|
||||||
|
Best regards,
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -5185,9 +5185,7 @@ static void ath12k_mac_setup_ht_vht_cap(
|
||||||
|
rate_cap_rx_chainmask);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (cap->supported_bands & WMI_HOST_WLAN_5G_CAP &&
|
||||||
|
- (ar->ab->hw_params->single_pdev_only ||
|
||||||
|
- !ar->supports_6ghz)) {
|
||||||
|
+ if (cap->supported_bands & WMI_HOST_WLAN_5G_CAP) {
|
||||||
|
band = &ar->mac.sbands[NL80211_BAND_5GHZ];
|
||||||
|
ht_cap = cap->band[NL80211_BAND_5GHZ].ht_cap_info;
|
||||||
|
if (ht_cap_info)
|
@ -0,0 +1,469 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:48 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807212
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
|
||||||
|
[205.220.168.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A06681CA6B9
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:13 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.168.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694475; cv=none;
|
||||||
|
b=HjUnHV2ZbMRZne/OD71kC1p0zBs+1+LVanM+3YbUfCnjvvtSry2r0Dj0HBjHnId1ltZw0ebTJaEZDcXBybkc2yiiGRlcH5s4feXisp9WApElGptz2Qn1SEtO3VDLKyE5m56eJftK/dpin6HPZGOk3hMBHkxoo966Jp4vlC9e2rY=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694475; c=relaxed/simple;
|
||||||
|
bh=lJX5iM2Ahf/ROaeR2Kk4suhcbwA47aOSPqyQsesg4A0=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=RYEWdi9+UZKYtzHKfAF5xdIOkpdgQjBK8hE1SX/f0rJDxozjZe1jDY28C+kzN4uhSwcBSwr7pZjMLL8LELNITE6fIk/zDY5UAO/jdeUPBnTrmrckzZOwaCFIQ1nt6ssDZDfpJADBjCIuMXB7HNChH3qSMlmYTV9QTDxpBK0fQxM=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=EtpV59A6; arc=none smtp.client-ip=205.220.168.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="EtpV59A6"
|
||||||
|
Received: from pps.filterd (m0279862.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48IL3WbX003099;
|
||||||
|
Wed, 18 Sep 2024 21:21:07 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
3ukRiLVgAcc9GoJxAaFrgsHYImZ/9ZPgSlMf75Ew/1Y=; b=EtpV59A6K8yD5o5B
|
||||||
|
8JSYPL7TI2tnIQciUmyLNJig3DWGn3AZbFqPjgTYUgoQLHjsNWd+WRAKx13tQhSW
|
||||||
|
peq0OW9986uI1TFVpaw0pwVXoBiStEI5MH/7ThiA5nIAI4hYBI6+iiwL7qWpboSL
|
||||||
|
UrG9sWI35wsgcjedTtrzR2QfpeTAvlnReoac/49o5GAysu1oGDN79VAAP7tDZbO2
|
||||||
|
trx/XdQmW/8iqtRR3Idhjcod6B6ovXKkmAZUHzhp4zRupTUsKOU84X3aTYZQLN/B
|
||||||
|
46HuFZSlOJEB/63Co7I2K8YfQT3FikP2mkrIsDwH78Y2OekhXJWFe7dU4SsX6nh6
|
||||||
|
sIXVxA==
|
||||||
|
Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4gd387e-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:07 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILL6rr020545
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:06 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:06 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
Muna Sinada <quic_msinada@quicinc.com>,
|
||||||
|
"Jeff
|
||||||
|
Johnson" <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 1/9] wifi: ath12k: push HE MU-MIMO params to hardware
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:48 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-2-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-ORIG-GUID: QTgqLsl2p5OGLwWEQsGrsmA8q68U11H8
|
||||||
|
X-Proofpoint-GUID: QTgqLsl2p5OGLwWEQsGrsmA8q68U11H8
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
malwarescore=0 suspectscore=0
|
||||||
|
bulkscore=0 clxscore=1015 spamscore=0 adultscore=0 lowpriorityscore=0
|
||||||
|
mlxlogscore=999 impostorscore=0 mlxscore=0 priorityscore=1501 phishscore=0
|
||||||
|
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
|
||||||
|
definitions=main-2409180140
|
||||||
|
|
||||||
|
Currently, only the HE IE in management frames is updated with
|
||||||
|
respect to MU-MIMO configurations, but this change is not
|
||||||
|
reflected in the hardware. Add support to propagate MU-MIMO
|
||||||
|
configurations to the hardware as well.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Co-developed-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 215 +++++++++++++++++---------
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.h | 15 ++
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.h | 28 +---
|
||||||
|
3 files changed, 156 insertions(+), 102 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -2851,6 +2851,108 @@ static int ath12k_setup_peer_smps(struct
|
||||||
|
ath12k_smps_map[smps]);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int ath12k_mac_set_he_txbf_conf(struct ath12k_vif *arvif)
|
||||||
|
+{
|
||||||
|
+ struct ath12k *ar = arvif->ar;
|
||||||
|
+ u32 param = WMI_VDEV_PARAM_SET_HEMU_MODE;
|
||||||
|
+ u32 value = 0;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ if (!arvif->vif->bss_conf.he_support)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->bss_conf.he_su_beamformer) {
|
||||||
|
+ value |= u32_encode_bits(HE_SU_BFER_ENABLE, HE_MODE_SU_TX_BFER);
|
||||||
|
+ if (arvif->vif->bss_conf.he_mu_beamformer &&
|
||||||
|
+ arvif->vdev_type == WMI_VDEV_TYPE_AP)
|
||||||
|
+ value |= u32_encode_bits(HE_MU_BFER_ENABLE, HE_MODE_MU_TX_BFER);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
|
||||||
|
+ value |= u32_encode_bits(HE_DL_MUOFDMA_ENABLE, HE_MODE_DL_OFDMA) |
|
||||||
|
+ u32_encode_bits(HE_UL_MUOFDMA_ENABLE, HE_MODE_UL_OFDMA);
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->bss_conf.he_full_ul_mumimo)
|
||||||
|
+ value |= u32_encode_bits(HE_UL_MUMIMO_ENABLE, HE_MODE_UL_MUMIMO);
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->bss_conf.he_su_beamformee)
|
||||||
|
+ value |= u32_encode_bits(HE_SU_BFEE_ENABLE, HE_MODE_SU_TX_BFEE);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, value);
|
||||||
|
+ if (ret) {
|
||||||
|
+ ath12k_warn(ar->ab, "failed to set vdev %d HE MU mode: %d\n",
|
||||||
|
+ arvif->vdev_id, ret);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ param = WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE;
|
||||||
|
+ value = u32_encode_bits(HE_VHT_SOUNDING_MODE_ENABLE, HE_VHT_SOUNDING_MODE) |
|
||||||
|
+ u32_encode_bits(HE_TRIG_NONTRIG_SOUNDING_MODE_ENABLE,
|
||||||
|
+ HE_TRIG_NONTRIG_SOUNDING_MODE);
|
||||||
|
+ ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||||
|
+ param, value);
|
||||||
|
+ if (ret) {
|
||||||
|
+ ath12k_warn(ar->ab, "failed to set vdev %d sounding mode: %d\n",
|
||||||
|
+ arvif->vdev_id, ret);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int ath12k_mac_vif_recalc_sta_he_txbf(struct ath12k *ar,
|
||||||
|
+ struct ieee80211_vif *vif,
|
||||||
|
+ struct ieee80211_sta_he_cap *he_cap,
|
||||||
|
+ int *hemode)
|
||||||
|
+{
|
||||||
|
+ struct ieee80211_he_cap_elem he_cap_elem = {};
|
||||||
|
+ struct ieee80211_sta_he_cap *cap_band;
|
||||||
|
+ struct cfg80211_chan_def def;
|
||||||
|
+
|
||||||
|
+ if (!vif->bss_conf.he_support)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (vif->type != NL80211_IFTYPE_STATION)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ if (WARN_ON(ath12k_mac_vif_chan(vif, &def)))
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ if (def.chan->band == NL80211_BAND_2GHZ)
|
||||||
|
+ cap_band = &ar->mac.iftype[NL80211_BAND_2GHZ][vif->type].he_cap;
|
||||||
|
+ else
|
||||||
|
+ cap_band = &ar->mac.iftype[NL80211_BAND_5GHZ][vif->type].he_cap;
|
||||||
|
+
|
||||||
|
+ memcpy(&he_cap_elem, &cap_band->he_cap_elem, sizeof(he_cap_elem));
|
||||||
|
+
|
||||||
|
+ *hemode = 0;
|
||||||
|
+ if (HECAP_PHY_SUBFME_GET(he_cap_elem.phy_cap_info)) {
|
||||||
|
+ if (HECAP_PHY_SUBFMR_GET(he_cap->he_cap_elem.phy_cap_info))
|
||||||
|
+ *hemode |= u32_encode_bits(HE_SU_BFEE_ENABLE, HE_MODE_SU_TX_BFEE);
|
||||||
|
+ if (HECAP_PHY_MUBFMR_GET(he_cap->he_cap_elem.phy_cap_info))
|
||||||
|
+ *hemode |= u32_encode_bits(HE_MU_BFEE_ENABLE, HE_MODE_MU_TX_BFEE);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (vif->type != NL80211_IFTYPE_MESH_POINT) {
|
||||||
|
+ *hemode |= u32_encode_bits(HE_DL_MUOFDMA_ENABLE, HE_MODE_DL_OFDMA) |
|
||||||
|
+ u32_encode_bits(HE_UL_MUOFDMA_ENABLE, HE_MODE_UL_OFDMA);
|
||||||
|
+
|
||||||
|
+ if (HECAP_PHY_ULMUMIMO_GET(he_cap_elem.phy_cap_info))
|
||||||
|
+ if (HECAP_PHY_ULMUMIMO_GET(he_cap->he_cap_elem.phy_cap_info))
|
||||||
|
+ *hemode |= u32_encode_bits(HE_UL_MUMIMO_ENABLE,
|
||||||
|
+ HE_MODE_UL_MUMIMO);
|
||||||
|
+
|
||||||
|
+ if (u32_get_bits(*hemode, HE_MODE_MU_TX_BFEE))
|
||||||
|
+ *hemode |= u32_encode_bits(HE_SU_BFEE_ENABLE, HE_MODE_SU_TX_BFEE);
|
||||||
|
+
|
||||||
|
+ if (u32_get_bits(*hemode, HE_MODE_MU_TX_BFER))
|
||||||
|
+ *hemode |= u32_encode_bits(HE_SU_BFER_ENABLE, HE_MODE_SU_TX_BFER);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void ath12k_bss_assoc(struct ath12k *ar,
|
||||||
|
struct ath12k_vif *arvif,
|
||||||
|
struct ieee80211_bss_conf *bss_conf)
|
||||||
|
@@ -2858,9 +2960,11 @@ static void ath12k_bss_assoc(struct ath1
|
||||||
|
struct ieee80211_vif *vif = arvif->vif;
|
||||||
|
struct ath12k_wmi_vdev_up_params params = {};
|
||||||
|
struct ath12k_wmi_peer_assoc_arg peer_arg;
|
||||||
|
+ struct ieee80211_sta_he_cap he_cap;
|
||||||
|
struct ieee80211_sta *ap_sta;
|
||||||
|
struct ath12k_peer *peer;
|
||||||
|
bool is_auth = false;
|
||||||
|
+ u32 hemode = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
|
@@ -2880,8 +2984,29 @@ static void ath12k_bss_assoc(struct ath1
|
||||||
|
|
||||||
|
ath12k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg, false);
|
||||||
|
|
||||||
|
+ /* he_cap here is updated at assoc success for sta mode only */
|
||||||
|
+ he_cap = ap_sta->deflink.he_cap;
|
||||||
|
+
|
||||||
|
+ /* ap_sta->deflink.he_cap must be protected by rcu_read_lock */
|
||||||
|
+ ret = ath12k_mac_vif_recalc_sta_he_txbf(ar, vif, &he_cap, &hemode);
|
||||||
|
+ if (ret) {
|
||||||
|
+ ath12k_warn(ar->ab, "failed to recalc he txbf for vdev %i on bss %pM: %d\n",
|
||||||
|
+ arvif->vdev_id, bss_conf->bssid, ret);
|
||||||
|
+ rcu_read_unlock();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
rcu_read_unlock();
|
||||||
|
|
||||||
|
+ /* keep this before ath12k_wmi_send_peer_assoc_cmd() */
|
||||||
|
+ ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||||
|
+ WMI_VDEV_PARAM_SET_HEMU_MODE, hemode);
|
||||||
|
+ if (ret) {
|
||||||
|
+ ath12k_warn(ar->ab, "failed to submit vdev param txbf 0x%x: %d\n",
|
||||||
|
+ hemode, ret);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ret = ath12k_wmi_send_peer_assoc_cmd(ar, &peer_arg);
|
||||||
|
if (ret) {
|
||||||
|
ath12k_warn(ar->ab, "failed to run peer assoc for %pM vdev %i: %d\n",
|
||||||
|
@@ -3220,6 +3345,13 @@ static void ath12k_mac_bss_info_changed(
|
||||||
|
ether_addr_copy(arvif->bssid, info->bssid);
|
||||||
|
|
||||||
|
if (changed & BSS_CHANGED_BEACON_ENABLED) {
|
||||||
|
+ if (info->enable_beacon) {
|
||||||
|
+ ret = ath12k_mac_set_he_txbf_conf(arvif);
|
||||||
|
+ if (ret)
|
||||||
|
+ ath12k_warn(ar->ab,
|
||||||
|
+ "failed to set HE TXBF config for vdev: %d\n",
|
||||||
|
+ arvif->vdev_id);
|
||||||
|
+ }
|
||||||
|
ath12k_control_beaconing(arvif, info);
|
||||||
|
|
||||||
|
if (arvif->is_up && vif->bss_conf.he_support &&
|
||||||
|
@@ -5351,11 +5483,14 @@ static void ath12k_mac_copy_he_cap(struc
|
||||||
|
|
||||||
|
he_cap_elem->mac_cap_info[1] &=
|
||||||
|
IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
|
||||||
|
-
|
||||||
|
+ he_cap_elem->phy_cap_info[0] &=
|
||||||
|
+ IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
|
||||||
|
+ IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
|
||||||
|
+ IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
|
||||||
|
+ he_cap_elem->phy_cap_info[0] &=
|
||||||
|
+ ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
|
||||||
|
he_cap_elem->phy_cap_info[5] &=
|
||||||
|
~IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK;
|
||||||
|
- he_cap_elem->phy_cap_info[5] &=
|
||||||
|
- ~IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK;
|
||||||
|
he_cap_elem->phy_cap_info[5] |= num_tx_chains - 1;
|
||||||
|
|
||||||
|
switch (iftype) {
|
||||||
|
@@ -6317,71 +6452,6 @@ static int ath12k_mac_setup_vdev_create_
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static u32
|
||||||
|
-ath12k_mac_prepare_he_mode(struct ath12k_pdev *pdev, u32 viftype)
|
||||||
|
-{
|
||||||
|
- struct ath12k_pdev_cap *pdev_cap = &pdev->cap;
|
||||||
|
- struct ath12k_band_cap *cap_band = NULL;
|
||||||
|
- u32 *hecap_phy_ptr = NULL;
|
||||||
|
- u32 hemode;
|
||||||
|
-
|
||||||
|
- if (pdev->cap.supported_bands & WMI_HOST_WLAN_2G_CAP)
|
||||||
|
- cap_band = &pdev_cap->band[NL80211_BAND_2GHZ];
|
||||||
|
- else
|
||||||
|
- cap_band = &pdev_cap->band[NL80211_BAND_5GHZ];
|
||||||
|
-
|
||||||
|
- hecap_phy_ptr = &cap_band->he_cap_phy_info[0];
|
||||||
|
-
|
||||||
|
- hemode = u32_encode_bits(HE_SU_BFEE_ENABLE, HE_MODE_SU_TX_BFEE) |
|
||||||
|
- u32_encode_bits(HECAP_PHY_SUBFMR_GET(hecap_phy_ptr),
|
||||||
|
- HE_MODE_SU_TX_BFER) |
|
||||||
|
- u32_encode_bits(HECAP_PHY_ULMUMIMO_GET(hecap_phy_ptr),
|
||||||
|
- HE_MODE_UL_MUMIMO);
|
||||||
|
-
|
||||||
|
- /* TODO: WDS and other modes */
|
||||||
|
- if (viftype == NL80211_IFTYPE_AP) {
|
||||||
|
- hemode |= u32_encode_bits(HECAP_PHY_MUBFMR_GET(hecap_phy_ptr),
|
||||||
|
- HE_MODE_MU_TX_BFER) |
|
||||||
|
- u32_encode_bits(HE_DL_MUOFDMA_ENABLE, HE_MODE_DL_OFDMA) |
|
||||||
|
- u32_encode_bits(HE_UL_MUOFDMA_ENABLE, HE_MODE_UL_OFDMA);
|
||||||
|
- } else {
|
||||||
|
- hemode |= u32_encode_bits(HE_MU_BFEE_ENABLE, HE_MODE_MU_TX_BFEE);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return hemode;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static int ath12k_set_he_mu_sounding_mode(struct ath12k *ar,
|
||||||
|
- struct ath12k_vif *arvif)
|
||||||
|
-{
|
||||||
|
- u32 param_id, param_value;
|
||||||
|
- struct ath12k_base *ab = ar->ab;
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- param_id = WMI_VDEV_PARAM_SET_HEMU_MODE;
|
||||||
|
- param_value = ath12k_mac_prepare_he_mode(ar->pdev, arvif->vif->type);
|
||||||
|
- ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||||
|
- param_id, param_value);
|
||||||
|
- if (ret) {
|
||||||
|
- ath12k_warn(ab, "failed to set vdev %d HE MU mode: %d param_value %x\n",
|
||||||
|
- arvif->vdev_id, ret, param_value);
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
- param_id = WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE;
|
||||||
|
- param_value =
|
||||||
|
- u32_encode_bits(HE_VHT_SOUNDING_MODE_ENABLE, HE_VHT_SOUNDING_MODE) |
|
||||||
|
- u32_encode_bits(HE_TRIG_NONTRIG_SOUNDING_MODE_ENABLE,
|
||||||
|
- HE_TRIG_NONTRIG_SOUNDING_MODE);
|
||||||
|
- ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||||
|
- param_id, param_value);
|
||||||
|
- if (ret) {
|
||||||
|
- ath12k_warn(ab, "failed to set vdev %d HE MU mode: %d\n",
|
||||||
|
- arvif->vdev_id, ret);
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
- return ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static void ath12k_mac_update_vif_offload(struct ath12k_vif *arvif)
|
||||||
|
{
|
||||||
|
struct ieee80211_vif *vif = arvif->vif;
|
||||||
|
@@ -7339,7 +7409,6 @@ ath12k_mac_vdev_start_restart(struct ath
|
||||||
|
struct ath12k_base *ab = ar->ab;
|
||||||
|
struct wmi_vdev_start_req_arg arg = {};
|
||||||
|
const struct cfg80211_chan_def *chandef = &ctx->def;
|
||||||
|
- int he_support = arvif->vif->bss_conf.he_support;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
|
@@ -7395,14 +7464,6 @@ ath12k_mac_vdev_start_restart(struct ath
|
||||||
|
spin_unlock_bh(&ab->base_lock);
|
||||||
|
|
||||||
|
/* TODO: Notify if secondary 80Mhz also needs radar detection */
|
||||||
|
- if (he_support) {
|
||||||
|
- ret = ath12k_set_he_mu_sounding_mode(ar, arvif);
|
||||||
|
- if (ret) {
|
||||||
|
- ath12k_warn(ar->ab, "failed to set he mode vdev %i\n",
|
||||||
|
- arg.vdev_id);
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
|
||||||
|
arg.passive |= !!(chandef->chan->flags & IEEE80211_CHAN_NO_IR);
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.h
|
||||||
|
@@ -41,6 +41,21 @@ struct ath12k_generic_iter {
|
||||||
|
#define ATH12K_TX_POWER_MAX_VAL 70
|
||||||
|
#define ATH12K_TX_POWER_MIN_VAL 0
|
||||||
|
|
||||||
|
+#define HECAP_PHY_SUBFMR_GET(hecap_phy) \
|
||||||
|
+ u8_get_bits(hecap_phy[3], IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER)
|
||||||
|
+
|
||||||
|
+#define HECAP_PHY_SUBFME_GET(hecap_phy) \
|
||||||
|
+ u8_get_bits(hecap_phy[4], IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE)
|
||||||
|
+
|
||||||
|
+#define HECAP_PHY_MUBFMR_GET(hecap_phy) \
|
||||||
|
+ u8_get_bits(hecap_phy[4], IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER)
|
||||||
|
+
|
||||||
|
+#define HECAP_PHY_ULMUMIMO_GET(hecap_phy) \
|
||||||
|
+ u8_get_bits(hecap_phy[2], IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO)
|
||||||
|
+
|
||||||
|
+#define HECAP_PHY_ULOFDMA_GET(hecap_phy) \
|
||||||
|
+ u8_get_bits(hecap_phy[2], IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO)
|
||||||
|
+
|
||||||
|
enum ath12k_supported_bw {
|
||||||
|
ATH12K_BW_20 = 0,
|
||||||
|
ATH12K_BW_40 = 1,
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
@@ -2995,31 +2995,6 @@ struct ath12k_wmi_rx_reorder_queue_remov
|
||||||
|
#define WMI_VDEV_PARAM_TXBF_SU_TX_BFER BIT(2)
|
||||||
|
#define WMI_VDEV_PARAM_TXBF_MU_TX_BFER BIT(3)
|
||||||
|
|
||||||
|
-#define HECAP_PHYDWORD_0 0
|
||||||
|
-#define HECAP_PHYDWORD_1 1
|
||||||
|
-#define HECAP_PHYDWORD_2 2
|
||||||
|
-
|
||||||
|
-#define HECAP_PHY_SU_BFER BIT(31)
|
||||||
|
-#define HECAP_PHY_SU_BFEE BIT(0)
|
||||||
|
-#define HECAP_PHY_MU_BFER BIT(1)
|
||||||
|
-#define HECAP_PHY_UL_MUMIMO BIT(22)
|
||||||
|
-#define HECAP_PHY_UL_MUOFDMA BIT(23)
|
||||||
|
-
|
||||||
|
-#define HECAP_PHY_SUBFMR_GET(hecap_phy) \
|
||||||
|
- u32_get_bits(hecap_phy[HECAP_PHYDWORD_0], HECAP_PHY_SU_BFER)
|
||||||
|
-
|
||||||
|
-#define HECAP_PHY_SUBFME_GET(hecap_phy) \
|
||||||
|
- u32_get_bits(hecap_phy[HECAP_PHYDWORD_1], HECAP_PHY_SU_BFEE)
|
||||||
|
-
|
||||||
|
-#define HECAP_PHY_MUBFMR_GET(hecap_phy) \
|
||||||
|
- u32_get_bits(hecap_phy[HECAP_PHYDWORD_1], HECAP_PHY_MU_BFER)
|
||||||
|
-
|
||||||
|
-#define HECAP_PHY_ULMUMIMO_GET(hecap_phy) \
|
||||||
|
- u32_get_bits(hecap_phy[HECAP_PHYDWORD_0], HECAP_PHY_UL_MUMIMO)
|
||||||
|
-
|
||||||
|
-#define HECAP_PHY_ULOFDMA_GET(hecap_phy) \
|
||||||
|
- u32_get_bits(hecap_phy[HECAP_PHYDWORD_0], HECAP_PHY_UL_MUOFDMA)
|
||||||
|
-
|
||||||
|
#define HE_MODE_SU_TX_BFEE BIT(0)
|
||||||
|
#define HE_MODE_SU_TX_BFER BIT(1)
|
||||||
|
#define HE_MODE_MU_TX_BFEE BIT(2)
|
||||||
|
@@ -3031,8 +3006,11 @@ struct ath12k_wmi_rx_reorder_queue_remov
|
||||||
|
#define HE_DL_MUOFDMA_ENABLE 1
|
||||||
|
#define HE_UL_MUOFDMA_ENABLE 1
|
||||||
|
#define HE_DL_MUMIMO_ENABLE 1
|
||||||
|
+#define HE_UL_MUMIMO_ENABLE 1
|
||||||
|
#define HE_MU_BFEE_ENABLE 1
|
||||||
|
#define HE_SU_BFEE_ENABLE 1
|
||||||
|
+#define HE_MU_BFER_ENABLE 1
|
||||||
|
+#define HE_SU_BFER_ENABLE 1
|
||||||
|
|
||||||
|
#define HE_VHT_SOUNDING_MODE_ENABLE 1
|
||||||
|
#define HE_SU_MU_SOUNDING_MODE_ENABLE 1
|
@ -0,0 +1,222 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:49 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807210
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
|
||||||
|
[205.220.168.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B81C317967F
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:12 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.168.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694474; cv=none;
|
||||||
|
b=SYN3tI9xaTiXuxK7CUAD6gXBOqoyS1qZxAGNOXDt4yS1Q6oU0YiwQonIkVrnux7/DC3bCm2JScN5vIxVzkGOkFztaIHlZMM/TRsp6GzSIbZdasVpxySumoe965kRna+5fYAmf4i3wJupfj9p6509u7j6kXzz1ZxlSStR4wLObcE=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694474; c=relaxed/simple;
|
||||||
|
bh=yQPaApb7knqLxhkxSrizMfAanw18TDUbxBPbfnhzlV0=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=W+Rk8/tiKUvP6A8WYQFxi97//4Yj4m/rYPXAg0YP+6K+GXDcFK2VD+yEzmymA/fsenli+7ZEJ1zH6XgzLe4+1QFctCYGnq1LPoD01a4AIF8VqJGVdgs6e1ZwCKv8AOLkZUb09QkmM8Ur4R1xFhc4oVqhlvm3NMc24NERWmxzGjI=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=XJxqlj7h; arc=none smtp.client-ip=205.220.168.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="XJxqlj7h"
|
||||||
|
Received: from pps.filterd (m0279867.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48IHKWuA006417;
|
||||||
|
Wed, 18 Sep 2024 21:21:08 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
hcoreX5pgczyblwh1gpL6Ax4OV0yrVpAaKX7psGXczI=; b=XJxqlj7hhoW4GYMB
|
||||||
|
+B9r7ajbqV+ZxP+/1uDt5veOBY8aQgsorBoEbZFKm+ccV0u5SQJ/fFSomLg8QYpE
|
||||||
|
iojXUyYsGJMsXSPW+OdC0DQ2JrhDEHWFQa/6c3C0sdBE5IGgTa8YiAmYAx/A1ti1
|
||||||
|
ruMNSyT8H/xEKkR953axz1DOGJZfp9dCtOM5Xw6nrqpeUEYBShgvQ+1LLXqrH8U4
|
||||||
|
qUlYW2vKFKJgZUe97nwRrwOiunhTD4M2ARe6xHqZ7bL+2bW27sRTSI69vGrcEdKM
|
||||||
|
Ied7A8KmlUAN5BBsOj5MeKAaoy0+h4iY/9W3JgDfOu+LwjuAaKzgPNrttmPehdhJ
|
||||||
|
Q8q0JQ==
|
||||||
|
Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4kjk65k-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:07 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA01.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILL7IZ032342
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:07 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:06 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
Muna Sinada <quic_msinada@quicinc.com>,
|
||||||
|
"Jeff
|
||||||
|
Johnson" <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 2/9] wifi: ath12k: push EHT MU-MIMO params to hardware
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:49 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-3-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-GUID: DiIEaDHD4453WG2b31qitb3_i0JkAM4u
|
||||||
|
X-Proofpoint-ORIG-GUID: DiIEaDHD4453WG2b31qitb3_i0JkAM4u
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
bulkscore=0 adultscore=0
|
||||||
|
suspectscore=0 mlxscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0
|
||||||
|
phishscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501
|
||||||
|
spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1
|
||||||
|
engine=8.19.0-2408220000 definitions=main-2409180140
|
||||||
|
|
||||||
|
Currently, only the EHT IE in management frames is updated with
|
||||||
|
respect to MU-MIMO configurations, but this change is not
|
||||||
|
reflected in the hardware. Add support to propagate MU-MIMO
|
||||||
|
configurations to the hardware as well for AP mode. Similar
|
||||||
|
support for STA mode will be added in future.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Co-developed-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 50 +++++++++++++++++++++++++++
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.h | 21 +++++++++++
|
||||||
|
2 files changed, 71 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -2953,6 +2953,50 @@ static int ath12k_mac_vif_recalc_sta_he_
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int ath12k_mac_set_eht_txbf_conf(struct ath12k_vif *arvif)
|
||||||
|
+{
|
||||||
|
+ u32 param = WMI_VDEV_PARAM_SET_EHT_MU_MODE;
|
||||||
|
+ struct ath12k *ar = arvif->ar;
|
||||||
|
+ u32 value = 0;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ if (!arvif->vif->bss_conf.eht_support)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->bss_conf.eht_su_beamformer) {
|
||||||
|
+ value |= u32_encode_bits(EHT_SU_BFER_ENABLE, EHT_MODE_SU_TX_BFER);
|
||||||
|
+ if (arvif->vif->bss_conf.eht_mu_beamformer &&
|
||||||
|
+ arvif->vdev_type == WMI_VDEV_TYPE_AP)
|
||||||
|
+ value |= u32_encode_bits(EHT_MU_BFER_ENABLE,
|
||||||
|
+ EHT_MODE_MU_TX_BFER) |
|
||||||
|
+ u32_encode_bits(EHT_DL_MUOFDMA_ENABLE,
|
||||||
|
+ EHT_MODE_DL_OFDMA_MUMIMO) |
|
||||||
|
+ u32_encode_bits(EHT_UL_MUOFDMA_ENABLE,
|
||||||
|
+ EHT_MODE_UL_OFDMA_MUMIMO);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
|
||||||
|
+ value |= u32_encode_bits(EHT_DL_MUOFDMA_ENABLE, EHT_MODE_DL_OFDMA) |
|
||||||
|
+ u32_encode_bits(EHT_UL_MUOFDMA_ENABLE, EHT_MODE_UL_OFDMA);
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->bss_conf.eht_80mhz_full_bw_ul_mumimo)
|
||||||
|
+ value |= u32_encode_bits(EHT_UL_MUMIMO_ENABLE, EHT_MODE_MUMIMO);
|
||||||
|
+
|
||||||
|
+ if (arvif->vif->bss_conf.eht_su_beamformee)
|
||||||
|
+ value |= u32_encode_bits(EHT_SU_BFEE_ENABLE,
|
||||||
|
+ EHT_MODE_SU_TX_BFEE);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, value);
|
||||||
|
+ if (ret) {
|
||||||
|
+ ath12k_warn(ar->ab, "failed to set vdev %d EHT MU mode: %d\n",
|
||||||
|
+ arvif->vdev_id, ret);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void ath12k_bss_assoc(struct ath12k *ar,
|
||||||
|
struct ath12k_vif *arvif,
|
||||||
|
struct ieee80211_bss_conf *bss_conf)
|
||||||
|
@@ -3351,6 +3395,12 @@ static void ath12k_mac_bss_info_changed(
|
||||||
|
ath12k_warn(ar->ab,
|
||||||
|
"failed to set HE TXBF config for vdev: %d\n",
|
||||||
|
arvif->vdev_id);
|
||||||
|
+
|
||||||
|
+ ret = ath12k_mac_set_eht_txbf_conf(arvif);
|
||||||
|
+ if (ret)
|
||||||
|
+ ath12k_warn(ar->ab,
|
||||||
|
+ "failed to set EHT TXBF config for vdev: %d\n",
|
||||||
|
+ arvif->vdev_id);
|
||||||
|
}
|
||||||
|
ath12k_control_beaconing(arvif, info);
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
@@ -1139,6 +1139,7 @@ enum wmi_tlv_vdev_param {
|
||||||
|
WMI_VDEV_PARAM_BSS_COLOR,
|
||||||
|
WMI_VDEV_PARAM_SET_HEMU_MODE,
|
||||||
|
WMI_VDEV_PARAM_HEOPS_0_31 = 0x8003,
|
||||||
|
+ WMI_VDEV_PARAM_SET_EHT_MU_MODE = 0x8005,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum wmi_tlv_peer_flags {
|
||||||
|
@@ -3012,6 +3013,26 @@ struct ath12k_wmi_rx_reorder_queue_remov
|
||||||
|
#define HE_MU_BFER_ENABLE 1
|
||||||
|
#define HE_SU_BFER_ENABLE 1
|
||||||
|
|
||||||
|
+#define EHT_MODE_SU_TX_BFEE BIT(0)
|
||||||
|
+#define EHT_MODE_SU_TX_BFER BIT(1)
|
||||||
|
+#define EHT_MODE_MU_TX_BFEE BIT(2)
|
||||||
|
+#define EHT_MODE_MU_TX_BFER BIT(3)
|
||||||
|
+#define EHT_MODE_DL_OFDMA BIT(4)
|
||||||
|
+#define EHT_MODE_UL_OFDMA BIT(5)
|
||||||
|
+#define EHT_MODE_MUMIMO BIT(6)
|
||||||
|
+#define EHT_MODE_DL_OFDMA_TXBF BIT(7)
|
||||||
|
+#define EHT_MODE_DL_OFDMA_MUMIMO BIT(8)
|
||||||
|
+#define EHT_MODE_UL_OFDMA_MUMIMO BIT(9)
|
||||||
|
+
|
||||||
|
+#define EHT_DL_MUOFDMA_ENABLE 1
|
||||||
|
+#define EHT_UL_MUOFDMA_ENABLE 1
|
||||||
|
+#define EHT_DL_MUMIMO_ENABLE 1
|
||||||
|
+#define EHT_UL_MUMIMO_ENABLE 1
|
||||||
|
+#define EHT_MU_BFEE_ENABLE 1
|
||||||
|
+#define EHT_SU_BFEE_ENABLE 1
|
||||||
|
+#define EHT_MU_BFER_ENABLE 1
|
||||||
|
+#define EHT_SU_BFER_ENABLE 1
|
||||||
|
+
|
||||||
|
#define HE_VHT_SOUNDING_MODE_ENABLE 1
|
||||||
|
#define HE_SU_MU_SOUNDING_MODE_ENABLE 1
|
||||||
|
#define HE_TRIG_NONTRIG_SOUNDING_MODE_ENABLE 1
|
@ -0,0 +1,162 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:50 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807213
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
|
||||||
|
[205.220.180.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B2B11CB312
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:14 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.180.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694475; cv=none;
|
||||||
|
b=uo8JC/iAnxSCZyXzNFarViwWJNwY+JldG9aDgn6LOK7yCxMusODCN3rw4mSCs0sLxHrfxFouDKWpiKeM7hGb/fzQzU2eh6bHNvzhjOqaTjAsJo7sVGj4L2QK1UPb2ZxMke35L51ztNTVhAc7IS17sn6blDZnU+1+RGRKXskHc78=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694475; c=relaxed/simple;
|
||||||
|
bh=nhEu2OadboIpWVwShgMmYabjiVuEo2mUKJhJlcUzvgI=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=iPc43CIgA4O9RfgxO3cfBBvDShW3nh4Q/MVoL1JTtx8u/9t1CeFY7KstjtKiPdJ6vxx0yhZwXcwCRFfbZdfRduyybDRKPmgqN/VogzkwizBSFWBL41H02pCvee2mV3poTyZz9CnCJ5L7An5k7ARI3Eo6EwsgaAYIncO/tU2Jsao=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=iXyzdRBT; arc=none smtp.client-ip=205.220.180.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="iXyzdRBT"
|
||||||
|
Received: from pps.filterd (m0279869.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48I90GrT001584;
|
||||||
|
Wed, 18 Sep 2024 21:21:09 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
aj0umwCwR0cGrc/Vc7qz7QRYcnU4amMo6KwLL9RZRaA=; b=iXyzdRBTMie5qv2n
|
||||||
|
KocnG3cRtZjxDUMbNTj+in3o4zrIU5RFumLb3ZmgpbCZD9jcmxkc9fcTdtwxUz8e
|
||||||
|
LTodO1mKSkqtOufy45keXIYYJN3lxfFsZtA5bcmG+QCJZJmPaTpMaf9L9Us9e+JZ
|
||||||
|
Ngjh4JNR3UIXn5+UvNGrRNEWeAlCrwf9Z5bWl1mQmwmkVVuH3nMu1IyPidF3tzRk
|
||||||
|
AdQTPkPtpnoGlYwEWL/noPAYTf4OuZrqPCAj31iBfZvq2RjAdWtPx/ayYEQsNKCu
|
||||||
|
xoBLKjb8hppxfGqn06TpV73nTxvhEDwnwBTwfgrr+xVeKvwz6Mrh8aoYBdUeFUAh
|
||||||
|
OiuxDA==
|
||||||
|
Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4hf38cn-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:08 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA03.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILL7e8005093
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:07 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:07 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
Muna Sinada <quic_msinada@quicinc.com>,
|
||||||
|
"Jeff
|
||||||
|
Johnson" <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 3/9] wifi: ath12k: move HE MCS mapper to a separate
|
||||||
|
function
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:50 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-4-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-ORIG-GUID: zHmCiFNBcWNOH7v_I9cuj0l6gmfKvBVa
|
||||||
|
X-Proofpoint-GUID: zHmCiFNBcWNOH7v_I9cuj0l6gmfKvBVa
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
priorityscore=1501 mlxscore=0
|
||||||
|
suspectscore=0 bulkscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015
|
||||||
|
mlxlogscore=999 adultscore=0 malwarescore=0 phishscore=0 impostorscore=0
|
||||||
|
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
|
||||||
|
definitions=main-2409180140
|
||||||
|
|
||||||
|
Refactor the HE MCS mapper functionality in
|
||||||
|
ath12k_mac_copy_he_cap() into a new function.
|
||||||
|
|
||||||
|
This helps improve readability, extensibility and will be used
|
||||||
|
when adding support for 160 MHz bandwidth in subsequent patches.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Co-developed-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 22 ++++++++++++++--------
|
||||||
|
1 file changed, 14 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -5518,12 +5518,24 @@ static __le16 ath12k_mac_setup_he_6ghz_c
|
||||||
|
return cpu_to_le16(bcap->he_6ghz_capa);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void ath12k_mac_set_hemcsmap(struct ath12k_band_cap *band_cap,
|
||||||
|
+ struct ieee80211_sta_he_cap *he_cap)
|
||||||
|
+{
|
||||||
|
+ struct ieee80211_he_mcs_nss_supp *mcs_nss = &he_cap->he_mcs_nss_supp;
|
||||||
|
+
|
||||||
|
+ mcs_nss->rx_mcs_80 = cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||||
|
+ mcs_nss->tx_mcs_80 = cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||||
|
+ mcs_nss->rx_mcs_160 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
+ mcs_nss->tx_mcs_160 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
+ mcs_nss->rx_mcs_80p80 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
+ mcs_nss->tx_mcs_80p80 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void ath12k_mac_copy_he_cap(struct ath12k_band_cap *band_cap,
|
||||||
|
int iftype, u8 num_tx_chains,
|
||||||
|
struct ieee80211_sta_he_cap *he_cap)
|
||||||
|
{
|
||||||
|
struct ieee80211_he_cap_elem *he_cap_elem = &he_cap->he_cap_elem;
|
||||||
|
- struct ieee80211_he_mcs_nss_supp *mcs_nss = &he_cap->he_mcs_nss_supp;
|
||||||
|
|
||||||
|
he_cap->has_he = true;
|
||||||
|
memcpy(he_cap_elem->mac_cap_info, band_cap->he_cap_info,
|
||||||
|
@@ -5561,13 +5573,7 @@ static void ath12k_mac_copy_he_cap(struc
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- mcs_nss->rx_mcs_80 = cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_80 = cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||||
|
- mcs_nss->rx_mcs_160 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_160 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
- mcs_nss->rx_mcs_80p80 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_80p80 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
-
|
||||||
|
+ ath12k_mac_set_hemcsmap(band_cap, he_cap);
|
||||||
|
memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
|
||||||
|
if (he_cap_elem->phy_cap_info[6] &
|
||||||
|
IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT)
|
@ -0,0 +1,186 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:51 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807215
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
|
||||||
|
[205.220.180.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A88651CB32C
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:14 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.180.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694476; cv=none;
|
||||||
|
b=Lkqx2oSLyeGRxKcm+N4Vmg+KOuwHpt6xhgWj9SpyWNXxxWkVExVyHvPrWaP/u4OXd0YjYBJC3Dg0NJYY9WJyL0A3RP8GK++s9CiRloNaEmEjI71S/f3+0HVXu5bCmi8cyiIMFzCpAcNuZ67J7r/WxvNRbeox3iZHmXK1WFUb4Hs=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694476; c=relaxed/simple;
|
||||||
|
bh=nv4kc89H7eGC0FLgCwC70zFDhNkClMNiRf5HjDZHHuQ=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=B1oJWv7vHZKRChjamOFJnRzQVtL7qBs7/Ho9GojLQtHyCKtrCEOJt/lWvhkqISf48/5MaQOCdkHhCrQT/eHP9hZ1wnCdeOKXh6Wmk/QYt9yEcc0X6HT5wUxgpaA3PooH/cMlJCX0c8hyhT7XBm6vWnPwQjt/FnLTubA3uj+X8oE=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=WweZPnje; arc=none smtp.client-ip=205.220.180.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="WweZPnje"
|
||||||
|
Received: from pps.filterd (m0279872.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48IACJst031540;
|
||||||
|
Wed, 18 Sep 2024 21:21:09 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
ARu9Fu0s66NeuLm2pdCBchANS+rlgd275Q/E4KE2T1o=; b=WweZPnjehL/ZQW57
|
||||||
|
4JHJDsl8A5hyljMaJrVPdmZwNktTurJPMpD5z0akqx2dq3bfjzx2rx5NAtMb831x
|
||||||
|
ieysvT1ApK5V32fmb9xzG7FMIU3DH4eqr/9ApZbHFVPTglHrVoVzHJLps3I+Ts5P
|
||||||
|
gi1dsIAdwTai7hW1FchcW/pZ2kJMq6zN7oljoFs7pc1CvzHfIJowQM8gFfslkqlL
|
||||||
|
lvm9A9knvnUlkrEvzgpoZfZxm/91t9bQzkQDTX91wRc0oGR/9liT+z4Sdum2rLwb
|
||||||
|
fri8rhQIw8w1ExGM1nzChPaajmDIsE86ODjDL2xBbd/DcdsVvOYl8ewJ8AX45qNs
|
||||||
|
+LpHtg==
|
||||||
|
Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4j6uagq-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:09 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA03.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILL8gM005103
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:08 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:07 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
Muna Sinada <quic_msinada@quicinc.com>,
|
||||||
|
"Jeff
|
||||||
|
Johnson" <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 4/9] wifi: ath12k: generate rx and tx mcs maps for
|
||||||
|
supported HE mcs
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:51 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-5-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-ORIG-GUID: wHJ63GZpWGKZ4XSyQZiVlsARNAgr5CQM
|
||||||
|
X-Proofpoint-GUID: wHJ63GZpWGKZ4XSyQZiVlsARNAgr5CQM
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
phishscore=0 mlxlogscore=999
|
||||||
|
mlxscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 clxscore=1015
|
||||||
|
adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0
|
||||||
|
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
|
||||||
|
definitions=main-2409180140
|
||||||
|
|
||||||
|
Generate rx and tx mcs maps in ath12k_mac_set_hemcsmap() based
|
||||||
|
on number of supported tx/rx chains and set them in supported
|
||||||
|
mcs/nss for HE capabilities.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Co-developed-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 40 ++++++++++++++++++++-------
|
||||||
|
1 file changed, 30 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -5518,20 +5518,40 @@ static __le16 ath12k_mac_setup_he_6ghz_c
|
||||||
|
return cpu_to_le16(bcap->he_6ghz_capa);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void ath12k_mac_set_hemcsmap(struct ath12k_band_cap *band_cap,
|
||||||
|
+static void ath12k_mac_set_hemcsmap(struct ath12k *ar,
|
||||||
|
+ struct ath12k_pdev_cap *cap,
|
||||||
|
struct ieee80211_sta_he_cap *he_cap)
|
||||||
|
{
|
||||||
|
struct ieee80211_he_mcs_nss_supp *mcs_nss = &he_cap->he_mcs_nss_supp;
|
||||||
|
+ u16 txmcs_map, rxmcs_map;
|
||||||
|
+ u32 i;
|
||||||
|
|
||||||
|
- mcs_nss->rx_mcs_80 = cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_80 = cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||||
|
- mcs_nss->rx_mcs_160 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_160 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
- mcs_nss->rx_mcs_80p80 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_80p80 = cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||||
|
+ rxmcs_map = 0;
|
||||||
|
+ txmcs_map = 0;
|
||||||
|
+ for (i = 0; i < 8; i++) {
|
||||||
|
+ if (i < ar->num_tx_chains &&
|
||||||
|
+ (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||||||
|
+ txmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||||||
|
+ else
|
||||||
|
+ txmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||||||
|
+
|
||||||
|
+ if (i < ar->num_rx_chains &&
|
||||||
|
+ (ar->cfg_rx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||||||
|
+ rxmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||||||
|
+ else
|
||||||
|
+ rxmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ mcs_nss->rx_mcs_80 = cpu_to_le16(rxmcs_map & 0xffff);
|
||||||
|
+ mcs_nss->tx_mcs_80 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
+ mcs_nss->rx_mcs_160 = cpu_to_le16(rxmcs_map & 0xffff);
|
||||||
|
+ mcs_nss->tx_mcs_160 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
+ mcs_nss->rx_mcs_80p80 = cpu_to_le16(rxmcs_map & 0xffff);
|
||||||
|
+ mcs_nss->tx_mcs_80p80 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void ath12k_mac_copy_he_cap(struct ath12k_band_cap *band_cap,
|
||||||
|
+static void ath12k_mac_copy_he_cap(struct ath12k *ar,
|
||||||
|
+ struct ath12k_band_cap *band_cap,
|
||||||
|
int iftype, u8 num_tx_chains,
|
||||||
|
struct ieee80211_sta_he_cap *he_cap)
|
||||||
|
{
|
||||||
|
@@ -5573,7 +5593,7 @@ static void ath12k_mac_copy_he_cap(struc
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- ath12k_mac_set_hemcsmap(band_cap, he_cap);
|
||||||
|
+ ath12k_mac_set_hemcsmap(ar, &ar->pdev->cap, he_cap);
|
||||||
|
memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
|
||||||
|
if (he_cap_elem->phy_cap_info[6] &
|
||||||
|
IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT)
|
||||||
|
@@ -5762,7 +5782,7 @@ static int ath12k_mac_copy_sband_iftype_
|
||||||
|
|
||||||
|
data[idx].types_mask = BIT(i);
|
||||||
|
|
||||||
|
- ath12k_mac_copy_he_cap(band_cap, i, ar->num_tx_chains, he_cap);
|
||||||
|
+ ath12k_mac_copy_he_cap(ar, band_cap, i, ar->num_tx_chains, he_cap);
|
||||||
|
if (band == NL80211_BAND_6GHZ) {
|
||||||
|
data[idx].he_6ghz_capa.capa =
|
||||||
|
ath12k_mac_setup_he_6ghz_cap(cap, band_cap);
|
@ -0,0 +1,141 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:52 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807211
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
|
||||||
|
[205.220.168.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77FB41CA6AC
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:13 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.168.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694475; cv=none;
|
||||||
|
b=RN/ddoo5Vh8RVGeYZ8k8lXTOb7bzs7wSIAQGFjyvpfc9NICOpTDXpM3ai/D/fFtXLR8mFmYa4uIMFdrWML1x/UjZtd+jJnNyL/jo4/t5+ONN0nU4brd/dW7fv/biqLA6CkFbjnw01XnInXLzGT8IIm4NvxBkMy/RVj0tC33y7os=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694475; c=relaxed/simple;
|
||||||
|
bh=bsvgv033jSAPUVmS0VlMcScTn/1aM6tw3aACOOiqxvA=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=rDT2TKhzEg9vR1RSVstUP/e9Z+sWhPbag7vxjm3nmkSJBFS5bR72jSO3YnpEGSQLOgd0c+ou8ce0GQOHHZBEpr8VlMP4o6SK8T3BVg4yPiHhqLzwadektVXzAofZ0K+caSvYUjsPvDd2wH1xDyUPHgvr/DjsPh8bhO1MP80pTYk=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=DbZeRJ9u; arc=none smtp.client-ip=205.220.168.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="DbZeRJ9u"
|
||||||
|
Received: from pps.filterd (m0279867.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48I9TNqc020283;
|
||||||
|
Wed, 18 Sep 2024 21:21:09 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
azR+5F3oXqRD0oIXJq+q0F3HbuiVUYwPuvX5vVskhnw=; b=DbZeRJ9uo40mL5rR
|
||||||
|
p0cASEsdLU8yr/aYeIXTSWCHBf5P73m5S26EYVv6MqTdcnmRT7flYyQWzotNV+gg
|
||||||
|
oHJpR7L5sN+omhK+7gDPRcm5j29/U9+7rMG7I0JwrfR6KbUUNJkrg+omW45ZdRPS
|
||||||
|
/92XJynSBDgzEGETs0AjLe+PLPW4Ucnncc+YscEVm/dtR4f5vQBYwGdCwv4IuczO
|
||||||
|
FJrEmDh3mj7m6JtNVV+A3LT5qS7PCAbiS7qhTAkDfhH9gDZJuUTO2b6ByyO4UkWp
|
||||||
|
afB41wIc4KUDYsTHkThkApxxp0vHfJJLGCweUi+YKYaqvQETgLhHx/UkSRdoRBII
|
||||||
|
N708pg==
|
||||||
|
Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4kjk65m-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:09 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA05.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILL8Gi009579
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:08 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:08 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 5/9] wifi: ath12k: fix TX and RX MCS rate configurations in
|
||||||
|
HE mode
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:52 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-6-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-GUID: JNJY4yItbZ8HP8WQjm82lNqNLkxUdf1v
|
||||||
|
X-Proofpoint-ORIG-GUID: JNJY4yItbZ8HP8WQjm82lNqNLkxUdf1v
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
bulkscore=0 adultscore=0
|
||||||
|
suspectscore=0 mlxscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0
|
||||||
|
phishscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501
|
||||||
|
spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1
|
||||||
|
engine=8.19.0-2408220000 definitions=main-2409180140
|
||||||
|
|
||||||
|
Currently, the TX and RX MCS rate configurations per peer are
|
||||||
|
reversed when sent to the firmware. As a result, RX MCS rates
|
||||||
|
are configured for TX, and vice versa. This commit rectifies
|
||||||
|
the configuration to match what the firmware expects.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.c | 4 ++--
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.h | 2 ++
|
||||||
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
@@ -2140,8 +2140,8 @@ int ath12k_wmi_send_peer_assoc_cmd(struc
|
||||||
|
he_mcs->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HE_RATE_SET,
|
||||||
|
sizeof(*he_mcs));
|
||||||
|
|
||||||
|
- he_mcs->rx_mcs_set = cpu_to_le32(arg->peer_he_rx_mcs_set[i]);
|
||||||
|
- he_mcs->tx_mcs_set = cpu_to_le32(arg->peer_he_tx_mcs_set[i]);
|
||||||
|
+ he_mcs->rx_mcs_set = cpu_to_le32(arg->peer_he_tx_mcs_set[i]);
|
||||||
|
+ he_mcs->tx_mcs_set = cpu_to_le32(arg->peer_he_rx_mcs_set[i]);
|
||||||
|
ptr += sizeof(*he_mcs);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
@@ -3953,7 +3953,9 @@ struct ath12k_wmi_vht_rate_set_params {
|
||||||
|
|
||||||
|
struct ath12k_wmi_he_rate_set_params {
|
||||||
|
__le32 tlv_header;
|
||||||
|
+ /* MCS at which the peer can receive */
|
||||||
|
__le32 rx_mcs_set;
|
||||||
|
+ /* MCS at which the peer can transmit */
|
||||||
|
__le32 tx_mcs_set;
|
||||||
|
} __packed;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,254 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:54 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807218
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
|
||||||
|
[205.220.168.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7A2C15853D
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:29 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.168.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694491; cv=none;
|
||||||
|
b=IDDUnQF/Tnpw/FvWitX7ofLgG/RwY2FyN79K1j9v3STIk2mbRSVtS7kUmHv83gWDgLeingrnJyz3kE7pWhAK5Zt+U/d3HoSbyXlaWdr1m98ZLPJnOIO51q8LBaUW4uPaZbMJiRGvTbhFw+0k6FNjQse034o2zQ5vHk1qETT9XsU=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694491; c=relaxed/simple;
|
||||||
|
bh=4Sbgjg6TXf4A547Y46Qiyw4U55YEFrIGdUXLZjEx5C0=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=Y+NDqrjfpb1iFWpY9XYrVbCXhYRTFGsK7MN6jcsgZur7Ro+ZQsyZfhkFA+t+Bb52hk2p2N7v1TAdqLDK2CiFXaWPy/JfESHATwktCnNG+8/UL3n0VIjl+qxGTWt3pS/aWzI6yQjM2FB6tKc4kMnGX//RrgXhEIrh1M4ROs3IpJ0=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=Kt1nBSex; arc=none smtp.client-ip=205.220.168.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="Kt1nBSex"
|
||||||
|
Received: from pps.filterd (m0279866.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48IJrYUI005813;
|
||||||
|
Wed, 18 Sep 2024 21:21:27 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
7iZtYFy4NRmF2YHXqLd4zDMUbigsFxIkBQ6OeDD3zOs=; b=Kt1nBSex9R0mUQFv
|
||||||
|
fimFwEUDD2mzhj9KyoJnJsvbpzJOV9sBCCp3nPyxHNB66qzQUi/U904HE+wQ26S+
|
||||||
|
Dmo2aGOzcx4GHLU8agTSdb51h1ylcD1ulUXKpEqDIEkWv7leWNteXYTqoj2aUvXQ
|
||||||
|
MH261Yr4HRs5iWT53+FXUrPvY1eipkyG20XH2RcNT7XMMIT29hm5DRVTwU0kzAVU
|
||||||
|
/0hrrSBcgbTJP0KA5zSfO+bFE7fyWSxrjOzt7ugW9KdHlAj5iNAeePRUUlvqSGe7
|
||||||
|
07QprF1ixgWWpsIbUnZdd9UZLPKot8h5Vous/24QLAznqmj/FgipHLT6+Dy61eVq
|
||||||
|
L/T40w==
|
||||||
|
Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4jdu9q1-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:27 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILL9Ux020570
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:09 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:08 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 7/9] wifi: ath12k: clean up 80P80 support
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:54 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-8-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-ORIG-GUID: zOl2cVhwvoAFaH70WioUIdrk_oIr5c-T
|
||||||
|
X-Proofpoint-GUID: zOl2cVhwvoAFaH70WioUIdrk_oIr5c-T
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
phishscore=0 impostorscore=0
|
||||||
|
clxscore=1015 adultscore=0 mlxscore=0 suspectscore=0 malwarescore=0
|
||||||
|
priorityscore=1501 spamscore=0 bulkscore=0 lowpriorityscore=0
|
||||||
|
mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1
|
||||||
|
engine=8.19.0-2408220000 definitions=main-2409180141
|
||||||
|
|
||||||
|
Clean up unused 80P80 references as hardware does not support
|
||||||
|
it. This is applicable to both QCN9274 and WCN7850.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 51 ++++++---------------------
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.c | 5 +--
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.h | 1 -
|
||||||
|
3 files changed, 11 insertions(+), 46 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -206,7 +206,7 @@ ath12k_phymodes[NUM_NL80211_BANDS][ATH12
|
||||||
|
[NL80211_CHAN_WIDTH_40] = MODE_11BE_EHT40,
|
||||||
|
[NL80211_CHAN_WIDTH_80] = MODE_11BE_EHT80,
|
||||||
|
[NL80211_CHAN_WIDTH_160] = MODE_11BE_EHT160,
|
||||||
|
- [NL80211_CHAN_WIDTH_80P80] = MODE_11BE_EHT80_80,
|
||||||
|
+ [NL80211_CHAN_WIDTH_80P80] = MODE_UNKNOWN,
|
||||||
|
[NL80211_CHAN_WIDTH_320] = MODE_11BE_EHT320,
|
||||||
|
},
|
||||||
|
[NL80211_BAND_6GHZ] = {
|
||||||
|
@@ -217,7 +217,7 @@ ath12k_phymodes[NUM_NL80211_BANDS][ATH12
|
||||||
|
[NL80211_CHAN_WIDTH_40] = MODE_11BE_EHT40,
|
||||||
|
[NL80211_CHAN_WIDTH_80] = MODE_11BE_EHT80,
|
||||||
|
[NL80211_CHAN_WIDTH_160] = MODE_11BE_EHT160,
|
||||||
|
- [NL80211_CHAN_WIDTH_80P80] = MODE_11BE_EHT80_80,
|
||||||
|
+ [NL80211_CHAN_WIDTH_80P80] = MODE_UNKNOWN,
|
||||||
|
[NL80211_CHAN_WIDTH_320] = MODE_11BE_EHT320,
|
||||||
|
},
|
||||||
|
|
||||||
|
@@ -2390,17 +2390,6 @@ static void ath12k_peer_assoc_h_he(struc
|
||||||
|
|
||||||
|
switch (sta->deflink.bandwidth) {
|
||||||
|
case IEEE80211_STA_RX_BW_160:
|
||||||
|
- if (he_cap->he_cap_elem.phy_cap_info[0] &
|
||||||
|
- IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) {
|
||||||
|
- v = ath12k_peer_assoc_h_he_limit(v, he_mcs_mask);
|
||||||
|
- arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80_80] = v;
|
||||||
|
-
|
||||||
|
- v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_80p80);
|
||||||
|
- arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80_80] = v;
|
||||||
|
-
|
||||||
|
- arg->peer_he_mcs_count++;
|
||||||
|
- he_tx_mcs = v;
|
||||||
|
- }
|
||||||
|
v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160);
|
||||||
|
arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v;
|
||||||
|
|
||||||
|
@@ -2658,16 +2647,11 @@ static enum wmi_phy_mode ath12k_mac_get_
|
||||||
|
struct ieee80211_sta *sta)
|
||||||
|
{
|
||||||
|
if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_160) {
|
||||||
|
- switch (sta->deflink.vht_cap.cap &
|
||||||
|
- IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) {
|
||||||
|
- case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ:
|
||||||
|
+ if (sta->deflink.vht_cap.cap &
|
||||||
|
+ IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ)
|
||||||
|
return MODE_11AC_VHT160;
|
||||||
|
- case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ:
|
||||||
|
- return MODE_11AC_VHT80_80;
|
||||||
|
- default:
|
||||||
|
- /* not sure if this is a valid case? */
|
||||||
|
- return MODE_11AC_VHT160;
|
||||||
|
- }
|
||||||
|
+
|
||||||
|
+ return MODE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
|
||||||
|
@@ -2689,11 +2673,8 @@ static enum wmi_phy_mode ath12k_mac_get_
|
||||||
|
if (sta->deflink.he_cap.he_cap_elem.phy_cap_info[0] &
|
||||||
|
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G)
|
||||||
|
return MODE_11AX_HE160;
|
||||||
|
- else if (sta->deflink.he_cap.he_cap_elem.phy_cap_info[0] &
|
||||||
|
- IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
|
||||||
|
- return MODE_11AX_HE80_80;
|
||||||
|
- /* not sure if this is a valid case? */
|
||||||
|
- return MODE_11AX_HE160;
|
||||||
|
+
|
||||||
|
+ return MODE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
|
||||||
|
@@ -2721,14 +2702,7 @@ static enum wmi_phy_mode ath12k_mac_get_
|
||||||
|
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G)
|
||||||
|
return MODE_11BE_EHT160;
|
||||||
|
|
||||||
|
- if (sta->deflink.he_cap.he_cap_elem.phy_cap_info[0] &
|
||||||
|
- IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
|
||||||
|
- return MODE_11BE_EHT80_80;
|
||||||
|
-
|
||||||
|
- ath12k_warn(ar->ab, "invalid EHT PHY capability info for 160 Mhz: %d\n",
|
||||||
|
- sta->deflink.he_cap.he_cap_elem.phy_cap_info[0]);
|
||||||
|
-
|
||||||
|
- return MODE_11BE_EHT160;
|
||||||
|
+ return MODE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
|
||||||
|
@@ -5805,8 +5779,6 @@ static void ath12k_mac_set_hemcsmap(stru
|
||||||
|
mcs_nss->tx_mcs_80 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
mcs_nss->rx_mcs_160 = cpu_to_le16(rxmcs_map & 0xffff);
|
||||||
|
mcs_nss->tx_mcs_160 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
- mcs_nss->rx_mcs_80p80 = cpu_to_le16(rxmcs_map & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_80p80 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ath12k_mac_copy_he_cap(struct ath12k *ar,
|
||||||
|
@@ -5828,6 +5800,7 @@ static void ath12k_mac_copy_he_cap(struc
|
||||||
|
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
|
||||||
|
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
|
||||||
|
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
|
||||||
|
+ /* 80PLUS80 is not supported */
|
||||||
|
he_cap_elem->phy_cap_info[0] &=
|
||||||
|
~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
|
||||||
|
he_cap_elem->phy_cap_info[5] &=
|
||||||
|
@@ -8494,10 +8467,6 @@ static __le16
|
||||||
|
ath12k_mac_get_tx_mcs_map(const struct ieee80211_sta_he_cap *he_cap)
|
||||||
|
{
|
||||||
|
if (he_cap->he_cap_elem.phy_cap_info[0] &
|
||||||
|
- IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
|
||||||
|
- return he_cap->he_mcs_nss_supp.tx_mcs_80p80;
|
||||||
|
-
|
||||||
|
- if (he_cap->he_cap_elem.phy_cap_info[0] &
|
||||||
|
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G)
|
||||||
|
return he_cap->he_mcs_nss_supp.tx_mcs_160;
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
@@ -986,10 +986,7 @@ static void ath12k_wmi_put_wmi_channel(s
|
||||||
|
|
||||||
|
chan->mhz = cpu_to_le32(arg->freq);
|
||||||
|
chan->band_center_freq1 = cpu_to_le32(arg->band_center_freq1);
|
||||||
|
- if (arg->mode == MODE_11AC_VHT80_80)
|
||||||
|
- chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq2);
|
||||||
|
- else
|
||||||
|
- chan->band_center_freq2 = 0;
|
||||||
|
+ chan->band_center_freq2 = 0;
|
||||||
|
|
||||||
|
chan->info |= le32_encode_bits(arg->mode, WMI_CHAN_INFO_MODE);
|
||||||
|
if (arg->passive)
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
@@ -3633,7 +3633,6 @@ struct wmi_vdev_install_key_arg {
|
||||||
|
#define WMI_HOST_MAX_HE_RATE_SET 3
|
||||||
|
#define WMI_HECAP_TXRX_MCS_NSS_IDX_80 0
|
||||||
|
#define WMI_HECAP_TXRX_MCS_NSS_IDX_160 1
|
||||||
|
-#define WMI_HECAP_TXRX_MCS_NSS_IDX_80_80 2
|
||||||
|
|
||||||
|
struct wmi_rate_set_arg {
|
||||||
|
u32 num_rates;
|
@ -0,0 +1,399 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:55 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807216
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
|
||||||
|
[205.220.180.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C64DB1CB518
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:15 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.180.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694477; cv=none;
|
||||||
|
b=aWI5JISgL9c0iB/8EAXYKF/Lb2sJoeG+v5+Va4eb/voqwiSQ4FtwPkCC00b9attXvu4dD9wEHGKPW8Uh2kb1tSTl0uNHxijRmLYK2VUWkLHsZ3Pd6VvGoTpbtmOTgsGklZHZiFd+jyWgGkHB4ZBkHSkG9JH6VR44MSIgNj8g14A=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694477; c=relaxed/simple;
|
||||||
|
bh=AYJpDHbXZ0n0NNHQi7/aGcqo7YfyoYhv+FrXZ143wMA=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=jD1C2mzFvENculg9HS0v02iWUDzrWXiuU5GXTyC/0BKAJirnQkOUdVm7u0AEPiMxfkktLT3QCJLuvnKu3ZqSXWNbc2zOdUHTyW12fKdDNHib1WYYySBnfqu4EmiJKGcTE57VFlVdbklngOCDTCqHvVgP7YitGg2fWLPqBP/4yhM=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=OMqc+btb; arc=none smtp.client-ip=205.220.180.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="OMqc+btb"
|
||||||
|
Received: from pps.filterd (m0279872.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48I8sxTR020476;
|
||||||
|
Wed, 18 Sep 2024 21:21:11 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
dFohRj9vqwjJTRRYk31/1oJCFqLLKUuQ/verxCo/cGo=; b=OMqc+btbHl9cHSxO
|
||||||
|
NauW5WX4C34QsGL/4d03QTtCDlctfB5PRmINiP2/jGcVZk3NZWS3d2f5zjPY7+hd
|
||||||
|
uaUDslDMQwvAj1Jay/we1qNaFIPuzj4c9BbHqvvXa0WiCgQWpBC2h2jcFLXbeVHE
|
||||||
|
5bqH+plXU5cz1d2YbsRpCXsdUWL/+S3u6A6/qxj6UraJ1s/rkE4ndQe/AQuf96Ja
|
||||||
|
ylYiZPdtJJXzB6rPDN1bQsSET/PNXzIkrYTaDLF9A6688WU9izJdAjRcsu8oB8o1
|
||||||
|
U+yftDfoegI7+ZyTZ4JUnQs7zJp171L/qsF0U9RONZCIbSLN9pkTo6xp6CrHGeLQ
|
||||||
|
0tCmwQ==
|
||||||
|
Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4j6uagr-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:10 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA05.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILL9IB009589
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:09 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:09 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
P Praneesh <quic_ppranees@quicinc.com>,
|
||||||
|
"Jeff
|
||||||
|
Johnson" <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 8/9] wifi: ath12k: add support for 160 MHz bandwidth
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:55 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-9-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-ORIG-GUID: wO0mnzqAAbcWYLNaoEhU3YfsdCyDJ2hk
|
||||||
|
X-Proofpoint-GUID: wO0mnzqAAbcWYLNaoEhU3YfsdCyDJ2hk
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
phishscore=0 mlxlogscore=999
|
||||||
|
mlxscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 clxscore=1015
|
||||||
|
adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0
|
||||||
|
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
|
||||||
|
definitions=main-2409180140
|
||||||
|
|
||||||
|
Add support to configure maximum NSS in 160 MHz bandwidth.
|
||||||
|
Firmware advertises support for handling NSS ratio information
|
||||||
|
as a part of service ready ext event using nss_ratio_enabled
|
||||||
|
flag. Save this information in ath12k_pdev_cap to calculate
|
||||||
|
NSS ratio.
|
||||||
|
|
||||||
|
Additionally, reorder the code by moving
|
||||||
|
ath12k_peer_assoc_h_phymode() before ath12k_peer_assoc_h_vht()
|
||||||
|
to ensure that arg->peer_phymode correctly reflects the bandwidth
|
||||||
|
in the max NSS calculation.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Co-developed-by: P Praneesh <quic_ppranees@quicinc.com>
|
||||||
|
Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/core.h | 2 +
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 85 ++++++++++++++++++++++----
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.h | 2 +
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.c | 19 +++++-
|
||||||
|
drivers/net/wireless/ath/ath12k/wmi.h | 28 +++++++++
|
||||||
|
5 files changed, 124 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/core.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/core.h
|
||||||
|
@@ -717,6 +717,8 @@ struct ath12k_pdev_cap {
|
||||||
|
u32 tx_chain_mask_shift;
|
||||||
|
u32 rx_chain_mask_shift;
|
||||||
|
struct ath12k_band_cap band[NUM_NL80211_BANDS];
|
||||||
|
+ bool nss_ratio_enabled;
|
||||||
|
+ u8 nss_ratio_info;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mlo_timestamp {
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -2050,6 +2050,34 @@ ath12k_peer_assoc_h_vht_limit(u16 tx_mcs
|
||||||
|
return tx_mcs_set;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static u8 ath12k_get_nss_160mhz(struct ath12k *ar,
|
||||||
|
+ u8 max_nss)
|
||||||
|
+{
|
||||||
|
+ u8 nss_ratio_info = ar->pdev->cap.nss_ratio_info;
|
||||||
|
+ u8 max_sup_nss = 0;
|
||||||
|
+
|
||||||
|
+ switch (nss_ratio_info) {
|
||||||
|
+ case WMI_NSS_RATIO_1BY2_NSS:
|
||||||
|
+ max_sup_nss = max_nss >> 1;
|
||||||
|
+ break;
|
||||||
|
+ case WMI_NSS_RATIO_3BY4_NSS:
|
||||||
|
+ ath12k_warn(ar->ab, "WMI_NSS_RATIO_3BY4_NSS not supported\n");
|
||||||
|
+ break;
|
||||||
|
+ case WMI_NSS_RATIO_1_NSS:
|
||||||
|
+ max_sup_nss = max_nss;
|
||||||
|
+ break;
|
||||||
|
+ case WMI_NSS_RATIO_2_NSS:
|
||||||
|
+ ath12k_warn(ar->ab, "WMI_NSS_RATIO_2_NSS not supported\n");
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ ath12k_warn(ar->ab, "invalid nss ratio received from fw: %d\n",
|
||||||
|
+ nss_ratio_info);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return max_sup_nss;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void ath12k_peer_assoc_h_vht(struct ath12k *ar,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
@@ -2065,6 +2093,7 @@ static void ath12k_peer_assoc_h_vht(stru
|
||||||
|
u8 max_nss, vht_mcs;
|
||||||
|
int i, vht_nss, nss_idx;
|
||||||
|
bool user_rate_valid = true;
|
||||||
|
+ u32 rx_nss, tx_nss, nss_160;
|
||||||
|
|
||||||
|
if (WARN_ON(ath12k_mac_vif_chan(vif, &def)))
|
||||||
|
return;
|
||||||
|
@@ -2159,10 +2188,24 @@ static void ath12k_peer_assoc_h_vht(stru
|
||||||
|
/* TODO: Check */
|
||||||
|
arg->tx_max_mcs_nss = 0xFF;
|
||||||
|
|
||||||
|
- ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
|
||||||
|
- sta->addr, arg->peer_max_mpdu, arg->peer_flags);
|
||||||
|
+ if (arg->peer_phymode == MODE_11AC_VHT160) {
|
||||||
|
+ tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
|
||||||
|
+ rx_nss = min(arg->peer_nss, tx_nss);
|
||||||
|
+ arg->peer_bw_rxnss_override = ATH12K_BW_NSS_MAP_ENABLE;
|
||||||
|
|
||||||
|
- /* TODO: rxnss_override */
|
||||||
|
+ if (!rx_nss) {
|
||||||
|
+ ath12k_warn(ar->ab, "invalid max_nss\n");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ nss_160 = u32_encode_bits(rx_nss - 1, ATH12K_PEER_RX_NSS_160MHZ);
|
||||||
|
+ arg->peer_bw_rxnss_override |= nss_160;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
|
||||||
|
+ "mac vht peer %pM max_mpdu %d flags 0x%x nss_override 0x%x\n",
|
||||||
|
+ sta->addr, arg->peer_max_mpdu, arg->peer_flags,
|
||||||
|
+ arg->peer_bw_rxnss_override);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ath12k_mac_get_max_he_mcs_map(u16 mcs_map, int nss)
|
||||||
|
@@ -2251,6 +2294,7 @@ static void ath12k_peer_assoc_h_he(struc
|
||||||
|
u16 he_tx_mcs = 0, v = 0;
|
||||||
|
int he_nss, nss_idx;
|
||||||
|
bool user_rate_valid = true;
|
||||||
|
+ u32 rx_nss, tx_nss, nss_160;
|
||||||
|
|
||||||
|
if (WARN_ON(ath12k_mac_vif_chan(vif, &def)))
|
||||||
|
return;
|
||||||
|
@@ -2429,11 +2473,28 @@ static void ath12k_peer_assoc_h_he(struc
|
||||||
|
he_mcs_mask[i])
|
||||||
|
max_nss = i + 1;
|
||||||
|
}
|
||||||
|
+ max_nss = min(max_nss, ar->num_tx_chains);
|
||||||
|
arg->peer_nss = min(sta->deflink.rx_nss, max_nss);
|
||||||
|
|
||||||
|
+ if (arg->peer_phymode == MODE_11AX_HE160) {
|
||||||
|
+ tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
|
||||||
|
+ rx_nss = min(arg->peer_nss, tx_nss);
|
||||||
|
+ arg->peer_bw_rxnss_override = ATH12K_BW_NSS_MAP_ENABLE;
|
||||||
|
+
|
||||||
|
+ if (!rx_nss) {
|
||||||
|
+ ath12k_warn(ar->ab, "invalid max_nss\n");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ nss_160 = u32_encode_bits(rx_nss - 1, ATH12K_PEER_RX_NSS_160MHZ);
|
||||||
|
+ arg->peer_bw_rxnss_override |= nss_160;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
|
||||||
|
- "mac he peer %pM nss %d mcs cnt %d\n",
|
||||||
|
- sta->deflink.addr, arg->peer_nss, arg->peer_he_mcs_count);
|
||||||
|
+ "mac he peer %pM nss %d mcs cnt %d nss_override 0x%x\n",
|
||||||
|
+ sta->deflink.addr, arg->peer_nss,
|
||||||
|
+ arg->peer_he_mcs_count,
|
||||||
|
+ arg->peer_bw_rxnss_override);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ath12k_peer_assoc_h_he_6ghz(struct ath12k *ar,
|
||||||
|
@@ -2965,13 +3026,13 @@ static void ath12k_peer_assoc_prepare(st
|
||||||
|
ath12k_peer_assoc_h_basic(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_crypto(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_rates(ar, vif, sta, arg);
|
||||||
|
+ ath12k_peer_assoc_h_phymode(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_ht(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_vht(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_he(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_he_6ghz(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_eht(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_qos(ar, vif, sta, arg);
|
||||||
|
- ath12k_peer_assoc_h_phymode(ar, vif, sta, arg);
|
||||||
|
ath12k_peer_assoc_h_smps(sta, arg);
|
||||||
|
|
||||||
|
/* TODO: amsdu_disable req? */
|
||||||
|
@@ -5551,10 +5612,8 @@ ath12k_create_vht_cap(struct ath12k *ar,
|
||||||
|
|
||||||
|
ath12k_set_vht_txbf_cap(ar, &vht_cap.cap);
|
||||||
|
|
||||||
|
- /* TODO: Enable back VHT160 mode once association issues are fixed */
|
||||||
|
- /* Disabling VHT160 and VHT80+80 modes */
|
||||||
|
- vht_cap.cap &= ~IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
|
||||||
|
- vht_cap.cap &= ~IEEE80211_VHT_CAP_SHORT_GI_160;
|
||||||
|
+ /* 80P80 is not supported */
|
||||||
|
+ vht_cap.cap &= ~IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ;
|
||||||
|
|
||||||
|
rxmcs_map = 0;
|
||||||
|
txmcs_map = 0;
|
||||||
|
@@ -9710,7 +9769,8 @@ static int ath12k_mac_setup_iface_combin
|
||||||
|
combinations[0].radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
|
||||||
|
BIT(NL80211_CHAN_WIDTH_20) |
|
||||||
|
BIT(NL80211_CHAN_WIDTH_40) |
|
||||||
|
- BIT(NL80211_CHAN_WIDTH_80);
|
||||||
|
+ BIT(NL80211_CHAN_WIDTH_80) |
|
||||||
|
+ BIT(NL80211_CHAN_WIDTH_160);
|
||||||
|
|
||||||
|
wiphy->iface_combinations = combinations;
|
||||||
|
wiphy->n_iface_combinations = 1;
|
||||||
|
@@ -9926,6 +9986,9 @@ static int ath12k_mac_hw_register(struct
|
||||||
|
ieee80211_hw_set(hw, SUPPORTS_TX_FRAG);
|
||||||
|
ieee80211_hw_set(hw, REPORTS_LOW_ACK);
|
||||||
|
|
||||||
|
+ if (cap->nss_ratio_enabled)
|
||||||
|
+ ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
|
||||||
|
+
|
||||||
|
if ((ht_cap & WMI_HT_CAP_ENABLED) || ar->supports_6ghz) {
|
||||||
|
ieee80211_hw_set(hw, AMPDU_AGGREGATION);
|
||||||
|
ieee80211_hw_set(hw, TX_AMPDU_SETUP_IN_HW);
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.h
|
||||||
|
@@ -37,6 +37,8 @@ struct ath12k_generic_iter {
|
||||||
|
#define IEEE80211_DISABLE_VHT_MCS_SUPPORT_0_11 BIT(24)
|
||||||
|
|
||||||
|
#define ATH12K_CHAN_WIDTH_NUM 14
|
||||||
|
+#define ATH12K_BW_NSS_MAP_ENABLE BIT(31)
|
||||||
|
+#define ATH12K_PEER_RX_NSS_160MHZ GENMASK(2, 0)
|
||||||
|
|
||||||
|
#define ATH12K_TX_POWER_MAX_VAL 70
|
||||||
|
#define ATH12K_TX_POWER_MIN_VAL 0
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
|
||||||
|
@@ -525,6 +525,10 @@ ath12k_pull_mac_phy_cap_svc_ready_ext(st
|
||||||
|
pdev_cap->he_mcs = le32_to_cpu(mac_caps->he_supp_mcs_5g);
|
||||||
|
pdev_cap->tx_chain_mask = le32_to_cpu(mac_caps->tx_chain_mask_5g);
|
||||||
|
pdev_cap->rx_chain_mask = le32_to_cpu(mac_caps->rx_chain_mask_5g);
|
||||||
|
+ pdev_cap->nss_ratio_enabled =
|
||||||
|
+ WMI_NSS_RATIO_EN_DIS_GET(mac_caps->nss_ratio);
|
||||||
|
+ pdev_cap->nss_ratio_info =
|
||||||
|
+ WMI_NSS_RATIO_INFO_GET(mac_caps->nss_ratio);
|
||||||
|
} else {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
@@ -982,11 +986,24 @@ int ath12k_wmi_vdev_down(struct ath12k *
|
||||||
|
static void ath12k_wmi_put_wmi_channel(struct ath12k_wmi_channel_params *chan,
|
||||||
|
struct wmi_vdev_start_req_arg *arg)
|
||||||
|
{
|
||||||
|
+ u32 center_freq1 = arg->band_center_freq1;
|
||||||
|
+
|
||||||
|
memset(chan, 0, sizeof(*chan));
|
||||||
|
|
||||||
|
chan->mhz = cpu_to_le32(arg->freq);
|
||||||
|
chan->band_center_freq1 = cpu_to_le32(arg->band_center_freq1);
|
||||||
|
- chan->band_center_freq2 = 0;
|
||||||
|
+ if (arg->mode == MODE_11AX_HE160) {
|
||||||
|
+ if (arg->freq > center_freq1)
|
||||||
|
+ chan->band_center_freq1 =
|
||||||
|
+ cpu_to_le32(center_freq1 + 40);
|
||||||
|
+ else
|
||||||
|
+ chan->band_center_freq1 =
|
||||||
|
+ cpu_to_le32(center_freq1 - 40);
|
||||||
|
+
|
||||||
|
+ chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq1);
|
||||||
|
+ } else {
|
||||||
|
+ chan->band_center_freq2 = 0;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
chan->info |= le32_encode_bits(arg->mode, WMI_CHAN_INFO_MODE);
|
||||||
|
if (arg->passive)
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
|
||||||
|
@@ -2264,6 +2264,21 @@ enum wmi_direct_buffer_module {
|
||||||
|
WMI_DIRECT_BUF_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * enum wmi_nss_ratio - NSS ratio received from FW during service ready ext event
|
||||||
|
+ * @WMI_NSS_RATIO_1BY2_NSS: Max nss of 160MHz is equals to half of the max nss of 80MHz
|
||||||
|
+ * @WMI_NSS_RATIO_3BY4_NSS: Max nss of 160MHz is equals to 3/4 of the max nss of 80MHz
|
||||||
|
+ * @WMI_NSS_RATIO_1_NSS: Max nss of 160MHz is equals to the max nss of 80MHz
|
||||||
|
+ * @WMI_NSS_RATIO_2_NSS: Max nss of 160MHz is equals to two times the max nss of 80MHz
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+enum wmi_nss_ratio {
|
||||||
|
+ WMI_NSS_RATIO_1BY2_NSS,
|
||||||
|
+ WMI_NSS_RATIO_3BY4_NSS,
|
||||||
|
+ WMI_NSS_RATIO_1_NSS,
|
||||||
|
+ WMI_NSS_RATIO_2_NSS
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
struct ath12k_wmi_pdev_band_arg {
|
||||||
|
u32 pdev_id;
|
||||||
|
u32 start_freq;
|
||||||
|
@@ -2580,6 +2595,12 @@ struct ath12k_wmi_hw_mode_cap_params {
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
#define WMI_MAX_HECAP_PHY_SIZE (3)
|
||||||
|
+#define WMI_NSS_RATIO_EN_DIS_BITPOS BIT(0)
|
||||||
|
+#define WMI_NSS_RATIO_EN_DIS_GET(_val) \
|
||||||
|
+ le32_get_bits(_val, WMI_NSS_RATIO_EN_DIS_BITPOS)
|
||||||
|
+#define WMI_NSS_RATIO_INFO_BITPOS GENMASK(4, 1)
|
||||||
|
+#define WMI_NSS_RATIO_INFO_GET(_val) \
|
||||||
|
+ le32_get_bits(_val, WMI_NSS_RATIO_INFO_BITPOS)
|
||||||
|
|
||||||
|
/* pdev_id is present in lower 16 bits of pdev_and_hw_link_ids in
|
||||||
|
* ath12k_wmi_mac_phy_caps_params & ath12k_wmi_caps_ext_params.
|
||||||
|
@@ -2621,6 +2642,13 @@ struct ath12k_wmi_mac_phy_caps_params {
|
||||||
|
__le32 he_cap_info_2g_ext;
|
||||||
|
__le32 he_cap_info_5g_ext;
|
||||||
|
__le32 he_cap_info_internal;
|
||||||
|
+ __le32 wireless_modes;
|
||||||
|
+ __le32 low_2ghz_chan_freq;
|
||||||
|
+ __le32 high_2ghz_chan_freq;
|
||||||
|
+ __le32 low_5ghz_chan_freq;
|
||||||
|
+ __le32 high_5ghz_chan_freq;
|
||||||
|
+ __le32 nss_ratio;
|
||||||
|
+
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct ath12k_wmi_hal_reg_caps_ext_params {
|
@ -0,0 +1,191 @@
|
|||||||
|
From patchwork Wed Sep 18 21:20:56 2024
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
X-Patchwork-Id: 13807214
|
||||||
|
X-Patchwork-Delegate: quic_jjohnson@quicinc.com
|
||||||
|
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
|
||||||
|
[205.220.168.131])
|
||||||
|
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||||
|
(No client certificate requested)
|
||||||
|
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A44471CB32B
|
||||||
|
for <linux-wireless@vger.kernel.org>; Wed, 18 Sep 2024 21:21:14 +0000 (UTC)
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
arc=none smtp.client-ip=205.220.168.131
|
||||||
|
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
|
||||||
|
t=1726694476; cv=none;
|
||||||
|
b=YnQUUZ4IfmLtgtYCtYRGhH8uRGd6VL74IRylGv6Ihb2PMO/n5UdfZlDk/m9w0OH4/sSsqULSz2lupiSTwXCPxc+73uK+OUjIEmCfPlNdrtzK2naXyiXAASPqonpnRBnyoIFwaE8zj8AHUqk5TAajedqpK9EnOaboX2XGYVbe0yI=
|
||||||
|
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
|
||||||
|
s=arc-20240116; t=1726694476; c=relaxed/simple;
|
||||||
|
bh=TAPBD6g5pYNuC8Odk6t6JkL8GvKdG9H30IPHTEgA7C0=;
|
||||||
|
h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
|
||||||
|
MIME-Version:Content-Type;
|
||||||
|
b=djAINL+wQRgQaGOI4fotrExnm1Yz5quwEW2I7s85hWLI3gB+HsjwPKWJypllDKm8W0FDcrsoZWFmOrfx0wJ5LIe+OtXJ4ijSG7xcJeGtgDXZ3hAA5ZBk/B+CD+g+NZ3c0mwkSKpUm5dUBPKi1+kJsPuVEwKeCmdMVj8QHSYMXPw=
|
||||||
|
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b=i4iTJD+Z; arc=none smtp.client-ip=205.220.168.131
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dmarc=pass (p=none dis=none) header.from=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
spf=pass smtp.mailfrom=quicinc.com
|
||||||
|
Authentication-Results: smtp.subspace.kernel.org;
|
||||||
|
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com
|
||||||
|
header.b="i4iTJD+Z"
|
||||||
|
Received: from pps.filterd (m0279863.ppops.net [127.0.0.1])
|
||||||
|
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
|
||||||
|
48I9VJ15022098;
|
||||||
|
Wed, 18 Sep 2024 21:21:11 GMT
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
|
||||||
|
cc:content-transfer-encoding:content-type:date:from:in-reply-to
|
||||||
|
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
|
||||||
|
2gwv4CbPGErAHv9NWtZrCSVk7NoZpHzKz9tuTs+8dV4=; b=i4iTJD+ZMXDp8Ul8
|
||||||
|
HTo5IL/NLwS3mnlutEaaL+juUKm+wsFdl/BeMp9CC4H/sapolIhM4Zje9t3H9K0R
|
||||||
|
+z1OxQDEekvWrrfUlikEaUHjOEwQ4YKSPJ+1uAIrbbA3REWeW5z39IITJ3dGU05N
|
||||||
|
hnfPQEiFcPgDbFQv0Iaf434znv8rbOow6dc+M1E6EjpGd92Mq80BpsJqP8Ee0RUr
|
||||||
|
WO3rsws1kXzFs6ELsg/FmC3l6eG9A4z9SUxcZ7QqTaz8aPOAZS/lclN0cOJT7VgK
|
||||||
|
7UNPGoDoJhTmHEX17W/rQR8RiV8c0hMciOuB1sfI7H/1uGkEPMjmfIsEdBjQ/9oa
|
||||||
|
DDiHrg==
|
||||||
|
Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com
|
||||||
|
[129.46.96.20])
|
||||||
|
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4hfk92c-1
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:11 +0000 (GMT)
|
||||||
|
Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
|
||||||
|
[10.47.209.196])
|
||||||
|
by NALASPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
|
||||||
|
48ILLA0u011397
|
||||||
|
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
|
||||||
|
Wed, 18 Sep 2024 21:21:10 GMT
|
||||||
|
Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
|
||||||
|
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
|
||||||
|
15.2.1544.9; Wed, 18 Sep 2024 14:21:09 -0700
|
||||||
|
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
To: <ath12k@lists.infradead.org>
|
||||||
|
CC: <linux-wireless@vger.kernel.org>,
|
||||||
|
Pradeep Kumar Chitrapu
|
||||||
|
<quic_pradeepc@quicinc.com>,
|
||||||
|
Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Subject: [PATCH V8 9/9] wifi: ath12k: add extended NSS bandwidth support for
|
||||||
|
160 MHz
|
||||||
|
Date: Wed, 18 Sep 2024 14:20:56 -0700
|
||||||
|
Message-ID: <20240918212056.4137076-10-quic_pradeepc@quicinc.com>
|
||||||
|
X-Mailer: git-send-email 2.34.1
|
||||||
|
In-Reply-To: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
References: <20240918212056.4137076-1-quic_pradeepc@quicinc.com>
|
||||||
|
Precedence: bulk
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
List-Id: <linux-wireless.vger.kernel.org>
|
||||||
|
List-Subscribe: <mailto:linux-wireless+subscribe@vger.kernel.org>
|
||||||
|
List-Unsubscribe: <mailto:linux-wireless+unsubscribe@vger.kernel.org>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
|
||||||
|
nalasex01a.na.qualcomm.com (10.47.209.196)
|
||||||
|
X-QCInternal: smtphost
|
||||||
|
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
|
||||||
|
signatures=585085
|
||||||
|
X-Proofpoint-GUID: Mta6b5FqdCLrvsiUf1WwMHFr8SiJUh5L
|
||||||
|
X-Proofpoint-ORIG-GUID: Mta6b5FqdCLrvsiUf1WwMHFr8SiJUh5L
|
||||||
|
X-Proofpoint-Virus-Version: vendor=baseguard
|
||||||
|
engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
|
||||||
|
definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
|
||||||
|
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
|
||||||
|
priorityscore=1501
|
||||||
|
clxscore=1015 phishscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0
|
||||||
|
impostorscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0
|
||||||
|
bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1
|
||||||
|
engine=8.19.0-2408220000 definitions=main-2409180140
|
||||||
|
|
||||||
|
Currently rx and tx MCS map for 160 MHz under HE capabilities
|
||||||
|
are not updating properly, when 160 MHz is configured with NSS
|
||||||
|
lesser than max NSS support. Fix this by utilizing
|
||||||
|
nss_ratio_enabled and nss_ratio_info fields sent by firmware
|
||||||
|
in service ready event.
|
||||||
|
|
||||||
|
However, if firmware advertises EXT NSS BW support in VHT caps
|
||||||
|
as 1(1x2) and when nss_ratio_info indicates 1:1, reset the EXT
|
||||||
|
NSS BW Support in VHT caps to 0 which indicates 1x1. This is
|
||||||
|
to avoid incorrectly choosing 1:2 NSS ratio when using the
|
||||||
|
default VHT caps advertised by firmware.
|
||||||
|
|
||||||
|
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath12k/mac.c | 33 ++++++++++++++++++++++-----
|
||||||
|
1 file changed, 27 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -2477,8 +2477,10 @@ static void ath12k_peer_assoc_h_he(struc
|
||||||
|
arg->peer_nss = min(sta->deflink.rx_nss, max_nss);
|
||||||
|
|
||||||
|
if (arg->peer_phymode == MODE_11AX_HE160) {
|
||||||
|
- tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
|
||||||
|
+ tx_nss = ath12k_get_nss_160mhz(ar, ar->num_tx_chains);
|
||||||
|
rx_nss = min(arg->peer_nss, tx_nss);
|
||||||
|
+
|
||||||
|
+ arg->peer_nss = min(sta->deflink.rx_nss, ar->num_rx_chains);
|
||||||
|
arg->peer_bw_rxnss_override = ATH12K_BW_NSS_MAP_ENABLE;
|
||||||
|
|
||||||
|
if (!rx_nss) {
|
||||||
|
@@ -5635,6 +5637,12 @@ ath12k_create_vht_cap(struct ath12k *ar,
|
||||||
|
vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(rxmcs_map);
|
||||||
|
vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(txmcs_map);
|
||||||
|
|
||||||
|
+ /* Check if the HW supports 1:1 NSS ratio and reset
|
||||||
|
+ * EXT NSS BW Support field to 0 to indicate 1:1 ratio
|
||||||
|
+ */
|
||||||
|
+ if (ar->pdev->cap.nss_ratio_info == WMI_NSS_RATIO_1_NSS)
|
||||||
|
+ vht_cap.cap &= ~IEEE80211_VHT_CAP_EXT_NSS_BW_MASK;
|
||||||
|
+
|
||||||
|
return vht_cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -5815,11 +5823,12 @@ static void ath12k_mac_set_hemcsmap(stru
|
||||||
|
struct ieee80211_sta_he_cap *he_cap)
|
||||||
|
{
|
||||||
|
struct ieee80211_he_mcs_nss_supp *mcs_nss = &he_cap->he_mcs_nss_supp;
|
||||||
|
- u16 txmcs_map, rxmcs_map;
|
||||||
|
+ u8 maxtxnss_160 = ath12k_get_nss_160mhz(ar, ar->num_tx_chains);
|
||||||
|
+ u8 maxrxnss_160 = ath12k_get_nss_160mhz(ar, ar->num_rx_chains);
|
||||||
|
+ u16 txmcs_map_160 = 0, rxmcs_map_160 = 0;
|
||||||
|
+ u16 txmcs_map = 0, rxmcs_map = 0;
|
||||||
|
u32 i;
|
||||||
|
|
||||||
|
- rxmcs_map = 0;
|
||||||
|
- txmcs_map = 0;
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
if (i < ar->num_tx_chains &&
|
||||||
|
(ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||||||
|
@@ -5832,12 +5841,24 @@ static void ath12k_mac_set_hemcsmap(stru
|
||||||
|
rxmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||||||
|
else
|
||||||
|
rxmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||||||
|
+
|
||||||
|
+ if (i < maxtxnss_160 &&
|
||||||
|
+ (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||||||
|
+ txmcs_map_160 |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||||||
|
+ else
|
||||||
|
+ txmcs_map_160 |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||||||
|
+
|
||||||
|
+ if (i < maxrxnss_160 &&
|
||||||
|
+ (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||||||
|
+ rxmcs_map_160 |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||||||
|
+ else
|
||||||
|
+ rxmcs_map_160 |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcs_nss->rx_mcs_80 = cpu_to_le16(rxmcs_map & 0xffff);
|
||||||
|
mcs_nss->tx_mcs_80 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
- mcs_nss->rx_mcs_160 = cpu_to_le16(rxmcs_map & 0xffff);
|
||||||
|
- mcs_nss->tx_mcs_160 = cpu_to_le16(txmcs_map & 0xffff);
|
||||||
|
+ mcs_nss->rx_mcs_160 = cpu_to_le16(rxmcs_map_160 & 0xffff);
|
||||||
|
+ mcs_nss->tx_mcs_160 = cpu_to_le16(txmcs_map_160 & 0xffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ath12k_mac_copy_he_cap(struct ath12k *ar,
|
@ -0,0 +1,548 @@
|
|||||||
|
From: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
Date: Mon, 7 Oct 2024 15:00:54 +0300
|
||||||
|
Subject: [PATCH] wifi: mac80211: call rate_control_rate_update() for link STA
|
||||||
|
|
||||||
|
In order to update the right link information, call the update
|
||||||
|
rate_control_rate_update() with the right link_sta, and then
|
||||||
|
pass that through to the driver's sta_rc_update() method. The
|
||||||
|
software rate control still doesn't support it, but that'll be
|
||||||
|
skipped by not having a rate control ref.
|
||||||
|
|
||||||
|
Since it now operates on a link sta, rename the driver method.
|
||||||
|
|
||||||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
|
||||||
|
Link: https://patch.msgid.link/20241007144851.5851b6b5fd41.Ibdf50d96afa4b761dd9b9dfd54a1147e77a75329@changeid
|
||||||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
|
@@ -8507,9 +8507,10 @@ exit:
|
||||||
|
|
||||||
|
static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct ath10k *ar = hw->priv;
|
||||||
|
struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
|
||||||
|
struct ath10k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
@@ -9450,7 +9451,7 @@ static const struct ieee80211_ops ath10k
|
||||||
|
.reconfig_complete = ath10k_reconfig_complete,
|
||||||
|
.get_survey = ath10k_get_survey,
|
||||||
|
.set_bitrate_mask = ath10k_mac_op_set_bitrate_mask,
|
||||||
|
- .sta_rc_update = ath10k_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = ath10k_sta_rc_update,
|
||||||
|
.offset_tsf = ath10k_offset_tsf,
|
||||||
|
.ampdu_action = ath10k_ampdu_action,
|
||||||
|
.get_et_sset_count = ath10k_debug_get_et_sset_count,
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
@@ -5079,9 +5079,10 @@ static void ath11k_mac_op_sta_set_4addr(
|
||||||
|
|
||||||
|
static void ath11k_mac_op_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||||
|
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
@@ -9708,7 +9709,7 @@ static const struct ieee80211_ops ath11k
|
||||||
|
.sta_state = ath11k_mac_op_sta_state,
|
||||||
|
.sta_set_4addr = ath11k_mac_op_sta_set_4addr,
|
||||||
|
.sta_set_txpwr = ath11k_mac_op_sta_set_txpwr,
|
||||||
|
- .sta_rc_update = ath11k_mac_op_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = ath11k_mac_op_sta_rc_update,
|
||||||
|
.conf_tx = ath11k_mac_op_conf_tx,
|
||||||
|
.set_antenna = ath11k_mac_op_set_antenna,
|
||||||
|
.get_antenna = ath11k_mac_op_get_antenna,
|
||||||
|
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||||
|
@@ -4740,9 +4740,10 @@ out:
|
||||||
|
|
||||||
|
static void ath12k_mac_op_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct ath12k *ar;
|
||||||
|
struct ath12k_sta *arsta = ath12k_sta_to_arsta(sta);
|
||||||
|
struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
|
||||||
|
@@ -8684,7 +8685,7 @@ static const struct ieee80211_ops ath12k
|
||||||
|
.set_rekey_data = ath12k_mac_op_set_rekey_data,
|
||||||
|
.sta_state = ath12k_mac_op_sta_state,
|
||||||
|
.sta_set_txpwr = ath12k_mac_op_sta_set_txpwr,
|
||||||
|
- .sta_rc_update = ath12k_mac_op_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = ath12k_mac_op_sta_rc_update,
|
||||||
|
.conf_tx = ath12k_mac_op_conf_tx,
|
||||||
|
.set_antenna = ath12k_mac_op_set_antenna,
|
||||||
|
.get_antenna = ath12k_mac_op_get_antenna,
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
||||||
|
@@ -1357,8 +1357,10 @@ static int ath9k_htc_sta_remove(struct i
|
||||||
|
|
||||||
|
static void ath9k_htc_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta, u32 changed)
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
+ u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv;
|
||||||
|
|
||||||
|
if (!(changed & IEEE80211_RC_SUPP_RATES_CHANGED))
|
||||||
|
@@ -1883,7 +1885,7 @@ struct ieee80211_ops ath9k_htc_ops = {
|
||||||
|
.sta_add = ath9k_htc_sta_add,
|
||||||
|
.sta_remove = ath9k_htc_sta_remove,
|
||||||
|
.conf_tx = ath9k_htc_conf_tx,
|
||||||
|
- .sta_rc_update = ath9k_htc_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = ath9k_htc_sta_rc_update,
|
||||||
|
.bss_info_changed = ath9k_htc_bss_info_changed,
|
||||||
|
.set_key = ath9k_htc_set_key,
|
||||||
|
.get_tsf = ath9k_htc_get_tsf,
|
||||||
|
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||||
|
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||||
|
@@ -4248,8 +4248,9 @@ int iwl_mvm_mac_set_rts_threshold(struct
|
||||||
|
}
|
||||||
|
|
||||||
|
void iwl_mvm_sta_rc_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta, u32 changed)
|
||||||
|
+ struct ieee80211_link_sta *link_sta, u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
|
||||||
|
|
||||||
|
if (changed & (IEEE80211_RC_BW_CHANGED |
|
||||||
|
@@ -6574,7 +6575,7 @@ const struct ieee80211_ops iwl_mvm_hw_op
|
||||||
|
.allow_buffered_frames = iwl_mvm_mac_allow_buffered_frames,
|
||||||
|
.release_buffered_frames = iwl_mvm_mac_release_buffered_frames,
|
||||||
|
.set_rts_threshold = iwl_mvm_mac_set_rts_threshold,
|
||||||
|
- .sta_rc_update = iwl_mvm_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = iwl_mvm_sta_rc_update,
|
||||||
|
.conf_tx = iwl_mvm_mac_conf_tx,
|
||||||
|
.mgd_prepare_tx = iwl_mvm_mac_mgd_prepare_tx,
|
||||||
|
.mgd_complete_tx = iwl_mvm_mac_mgd_complete_tx,
|
||||||
|
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
|
||||||
|
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
|
||||||
|
@@ -1413,7 +1413,7 @@ const struct ieee80211_ops iwl_mvm_mld_h
|
||||||
|
.allow_buffered_frames = iwl_mvm_mac_allow_buffered_frames,
|
||||||
|
.release_buffered_frames = iwl_mvm_mac_release_buffered_frames,
|
||||||
|
.set_rts_threshold = iwl_mvm_mac_set_rts_threshold,
|
||||||
|
- .sta_rc_update = iwl_mvm_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = iwl_mvm_sta_rc_update,
|
||||||
|
.conf_tx = iwl_mvm_mld_mac_conf_tx,
|
||||||
|
.mgd_prepare_tx = iwl_mvm_mac_mgd_prepare_tx,
|
||||||
|
.mgd_complete_tx = iwl_mvm_mac_mgd_complete_tx,
|
||||||
|
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
|
||||||
|
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
|
||||||
|
@@ -2914,7 +2914,7 @@ iwl_mvm_mac_release_buffered_frames(stru
|
||||||
|
bool more_data);
|
||||||
|
int iwl_mvm_mac_set_rts_threshold(struct ieee80211_hw *hw, u32 value);
|
||||||
|
void iwl_mvm_sta_rc_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta, u32 changed);
|
||||||
|
+ struct ieee80211_link_sta *link_sta, u32 changed);
|
||||||
|
void iwl_mvm_mac_mgd_prepare_tx(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_prep_tx_info *info);
|
||||||
|
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
|
||||||
|
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
|
||||||
|
@@ -1163,9 +1163,10 @@ static void mt7915_sta_rc_work(void *dat
|
||||||
|
|
||||||
|
static void mt7915_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct mt7915_phy *phy = mt7915_hw_phy(hw);
|
||||||
|
struct mt7915_dev *dev = phy->dev;
|
||||||
|
struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
|
||||||
|
@@ -1709,7 +1710,7 @@ const struct ieee80211_ops mt7915_ops =
|
||||||
|
.stop_ap = mt7915_stop_ap,
|
||||||
|
.sta_state = mt76_sta_state,
|
||||||
|
.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
|
||||||
|
- .sta_rc_update = mt7915_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = mt7915_sta_rc_update,
|
||||||
|
.set_key = mt7915_set_key,
|
||||||
|
.ampdu_action = mt7915_ampdu_action,
|
||||||
|
.set_rts_threshold = mt7915_set_rts_threshold,
|
||||||
|
--- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
|
||||||
|
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
|
||||||
|
@@ -1060,9 +1060,10 @@ static void mt7996_sta_rc_work(void *dat
|
||||||
|
|
||||||
|
static void mt7996_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct mt7996_phy *phy = mt7996_hw_phy(hw);
|
||||||
|
struct mt7996_dev *dev = phy->dev;
|
||||||
|
|
||||||
|
@@ -1472,7 +1473,7 @@ const struct ieee80211_ops mt7996_ops =
|
||||||
|
.sta_add = mt7996_sta_add,
|
||||||
|
.sta_remove = mt7996_sta_remove,
|
||||||
|
.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
|
||||||
|
- .sta_rc_update = mt7996_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = mt7996_sta_rc_update,
|
||||||
|
.set_key = mt7996_set_key,
|
||||||
|
.ampdu_action = mt7996_ampdu_action,
|
||||||
|
.set_rts_threshold = mt7996_set_rts_threshold,
|
||||||
|
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
|
||||||
|
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
|
||||||
|
@@ -928,8 +928,10 @@ static int rtw_ops_set_sar_specs(struct
|
||||||
|
|
||||||
|
static void rtw_ops_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta, u32 changed)
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
+ u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct rtw_dev *rtwdev = hw->priv;
|
||||||
|
struct rtw_sta_info *si = (struct rtw_sta_info *)sta->drv_priv;
|
||||||
|
|
||||||
|
@@ -973,7 +975,7 @@ const struct ieee80211_ops rtw_ops = {
|
||||||
|
.reconfig_complete = rtw_reconfig_complete,
|
||||||
|
.hw_scan = rtw_ops_hw_scan,
|
||||||
|
.cancel_hw_scan = rtw_ops_cancel_hw_scan,
|
||||||
|
- .sta_rc_update = rtw_ops_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = rtw_ops_sta_rc_update,
|
||||||
|
.set_sar_specs = rtw_ops_set_sar_specs,
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
.suspend = rtw_ops_suspend,
|
||||||
|
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||||
|
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||||
|
@@ -1290,8 +1290,10 @@ out:
|
||||||
|
|
||||||
|
static void rtw89_ops_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta, u32 changed)
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
+ u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct rtw89_dev *rtwdev = hw->priv;
|
||||||
|
|
||||||
|
rtw89_phy_ra_update_sta(rtwdev, sta, changed);
|
||||||
|
@@ -1594,7 +1596,7 @@ const struct ieee80211_ops rtw89_ops = {
|
||||||
|
.remain_on_channel = rtw89_ops_remain_on_channel,
|
||||||
|
.cancel_remain_on_channel = rtw89_ops_cancel_remain_on_channel,
|
||||||
|
.set_sar_specs = rtw89_ops_set_sar_specs,
|
||||||
|
- .sta_rc_update = rtw89_ops_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = rtw89_ops_sta_rc_update,
|
||||||
|
.set_tid_config = rtw89_ops_set_tid_config,
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
.suspend = rtw89_ops_suspend,
|
||||||
|
--- a/drivers/net/wireless/ti/wlcore/main.c
|
||||||
|
+++ b/drivers/net/wireless/ti/wlcore/main.c
|
||||||
|
@@ -5789,9 +5789,10 @@ static int wlcore_op_cancel_remain_on_ch
|
||||||
|
|
||||||
|
static void wlcore_op_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
|
||||||
|
|
||||||
|
wl1271_debug(DEBUG_MAC80211, "mac80211 sta_rc_update");
|
||||||
|
@@ -6052,7 +6053,7 @@ static const struct ieee80211_ops wl1271
|
||||||
|
.assign_vif_chanctx = wlcore_op_assign_vif_chanctx,
|
||||||
|
.unassign_vif_chanctx = wlcore_op_unassign_vif_chanctx,
|
||||||
|
.switch_vif_chanctx = wlcore_op_switch_vif_chanctx,
|
||||||
|
- .sta_rc_update = wlcore_op_sta_rc_update,
|
||||||
|
+ .link_sta_rc_update = wlcore_op_sta_rc_update,
|
||||||
|
.sta_statistics = wlcore_op_sta_statistics,
|
||||||
|
.get_expected_throughput = wlcore_op_get_expected_throughput,
|
||||||
|
CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
|
||||||
|
--- a/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||||
|
+++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||||
|
@@ -2594,10 +2594,11 @@ static void mac80211_hwsim_link_info_cha
|
||||||
|
static void
|
||||||
|
mac80211_hwsim_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
struct mac80211_hwsim_data *data = hw->priv;
|
||||||
|
+ struct ieee80211_sta *sta = link_sta->sta;
|
||||||
|
u32 bw = U32_MAX;
|
||||||
|
int link_id;
|
||||||
|
|
||||||
|
@@ -2607,7 +2608,6 @@ mac80211_hwsim_sta_rc_update(struct ieee
|
||||||
|
link_id++) {
|
||||||
|
enum nl80211_chan_width confbw = NL80211_CHAN_WIDTH_20_NOHT;
|
||||||
|
struct ieee80211_bss_conf *vif_conf;
|
||||||
|
- struct ieee80211_link_sta *link_sta;
|
||||||
|
|
||||||
|
link_sta = rcu_dereference(sta->link[link_id]);
|
||||||
|
|
||||||
|
@@ -2659,7 +2659,7 @@ static int mac80211_hwsim_sta_add(struct
|
||||||
|
|
||||||
|
hwsim_check_magic(vif);
|
||||||
|
hwsim_set_sta_magic(sta);
|
||||||
|
- mac80211_hwsim_sta_rc_update(hw, vif, sta, 0);
|
||||||
|
+ mac80211_hwsim_sta_rc_update(hw, vif, &sta->deflink, 0);
|
||||||
|
|
||||||
|
if (sta->valid_links) {
|
||||||
|
WARN(hweight16(sta->valid_links) > 1,
|
||||||
|
@@ -3961,7 +3961,7 @@ out:
|
||||||
|
.link_info_changed = mac80211_hwsim_link_info_changed, \
|
||||||
|
.tx_last_beacon = mac80211_hwsim_tx_last_beacon, \
|
||||||
|
.sta_notify = mac80211_hwsim_sta_notify, \
|
||||||
|
- .sta_rc_update = mac80211_hwsim_sta_rc_update, \
|
||||||
|
+ .link_sta_rc_update = mac80211_hwsim_sta_rc_update, \
|
||||||
|
.conf_tx = mac80211_hwsim_conf_tx, \
|
||||||
|
.get_survey = mac80211_hwsim_get_survey, \
|
||||||
|
CFG80211_TESTMODE_CMD(mac80211_hwsim_testmode_cmd) \
|
||||||
|
--- a/include/net/mac80211.h
|
||||||
|
+++ b/include/net/mac80211.h
|
||||||
|
@@ -4075,8 +4075,8 @@ struct ieee80211_prep_tx_info {
|
||||||
|
* in @sta_state.
|
||||||
|
* The callback can sleep.
|
||||||
|
*
|
||||||
|
- * @sta_rc_update: Notifies the driver of changes to the bitrates that can be
|
||||||
|
- * used to transmit to the station. The changes are advertised with bits
|
||||||
|
+ * @link_sta_rc_update: Notifies the driver of changes to the bitrates that can
|
||||||
|
+ * be used to transmit to the station. The changes are advertised with bits
|
||||||
|
* from &enum ieee80211_rate_control_changed and the values are reflected
|
||||||
|
* in the station data. This callback should only be used when the driver
|
||||||
|
* uses hardware rate control (%IEEE80211_HW_HAS_RATE_CONTROL) since
|
||||||
|
@@ -4560,10 +4560,10 @@ struct ieee80211_ops {
|
||||||
|
void (*sta_pre_rcu_remove)(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta *sta);
|
||||||
|
- void (*sta_rc_update)(struct ieee80211_hw *hw,
|
||||||
|
- struct ieee80211_vif *vif,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
- u32 changed);
|
||||||
|
+ void (*link_sta_rc_update)(struct ieee80211_hw *hw,
|
||||||
|
+ struct ieee80211_vif *vif,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
+ u32 changed);
|
||||||
|
void (*sta_rate_tbl_update)(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta *sta);
|
||||||
|
--- a/net/mac80211/chan.c
|
||||||
|
+++ b/net/mac80211/chan.c
|
||||||
|
@@ -467,7 +467,7 @@ static void ieee80211_chan_bw_change(str
|
||||||
|
continue;
|
||||||
|
|
||||||
|
link_sta->pub->bandwidth = new_sta_bw;
|
||||||
|
- rate_control_rate_update(local, sband, sta, link_id,
|
||||||
|
+ rate_control_rate_update(local, sband, link_sta,
|
||||||
|
IEEE80211_RC_BW_CHANGED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--- a/net/mac80211/driver-ops.c
|
||||||
|
+++ b/net/mac80211/driver-ops.c
|
||||||
|
@@ -181,9 +181,10 @@ int drv_sta_set_txpwr(struct ieee80211_l
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void drv_sta_rc_update(struct ieee80211_local *local,
|
||||||
|
- struct ieee80211_sub_if_data *sdata,
|
||||||
|
- struct ieee80211_sta *sta, u32 changed)
|
||||||
|
+void drv_link_sta_rc_update(struct ieee80211_local *local,
|
||||||
|
+ struct ieee80211_sub_if_data *sdata,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
+ u32 changed)
|
||||||
|
{
|
||||||
|
sdata = get_bss_sdata(sdata);
|
||||||
|
if (!check_sdata_in_driver(sdata))
|
||||||
|
@@ -193,10 +194,10 @@ void drv_sta_rc_update(struct ieee80211_
|
||||||
|
(sdata->vif.type != NL80211_IFTYPE_ADHOC &&
|
||||||
|
sdata->vif.type != NL80211_IFTYPE_MESH_POINT));
|
||||||
|
|
||||||
|
- trace_drv_sta_rc_update(local, sdata, sta, changed);
|
||||||
|
- if (local->ops->sta_rc_update)
|
||||||
|
- local->ops->sta_rc_update(&local->hw, &sdata->vif,
|
||||||
|
- sta, changed);
|
||||||
|
+ trace_drv_link_sta_rc_update(local, sdata, link_sta, changed);
|
||||||
|
+ if (local->ops->link_sta_rc_update)
|
||||||
|
+ local->ops->link_sta_rc_update(&local->hw, &sdata->vif,
|
||||||
|
+ link_sta, changed);
|
||||||
|
|
||||||
|
trace_drv_return_void(local);
|
||||||
|
}
|
||||||
|
--- a/net/mac80211/driver-ops.h
|
||||||
|
+++ b/net/mac80211/driver-ops.h
|
||||||
|
@@ -594,9 +594,9 @@ int drv_sta_set_txpwr(struct ieee80211_l
|
||||||
|
struct ieee80211_sub_if_data *sdata,
|
||||||
|
struct sta_info *sta);
|
||||||
|
|
||||||
|
-void drv_sta_rc_update(struct ieee80211_local *local,
|
||||||
|
- struct ieee80211_sub_if_data *sdata,
|
||||||
|
- struct ieee80211_sta *sta, u32 changed);
|
||||||
|
+void drv_link_sta_rc_update(struct ieee80211_local *local,
|
||||||
|
+ struct ieee80211_sub_if_data *sdata,
|
||||||
|
+ struct ieee80211_link_sta *link_sta, u32 changed);
|
||||||
|
|
||||||
|
static inline void drv_sta_rate_tbl_update(struct ieee80211_local *local,
|
||||||
|
struct ieee80211_sub_if_data *sdata,
|
||||||
|
--- a/net/mac80211/ibss.c
|
||||||
|
+++ b/net/mac80211/ibss.c
|
||||||
|
@@ -1072,7 +1072,8 @@ static void ieee80211_update_sta_info(st
|
||||||
|
if (sta->sta.deflink.rx_nss != rx_nss)
|
||||||
|
changed |= IEEE80211_RC_NSS_CHANGED;
|
||||||
|
|
||||||
|
- drv_sta_rc_update(local, sdata, &sta->sta, changed);
|
||||||
|
+ drv_link_sta_rc_update(local, sdata, &sta->sta.deflink,
|
||||||
|
+ changed);
|
||||||
|
}
|
||||||
|
|
||||||
|
rcu_read_unlock();
|
||||||
|
--- a/net/mac80211/mesh_plink.c
|
||||||
|
+++ b/net/mac80211/mesh_plink.c
|
||||||
|
@@ -489,7 +489,7 @@ static void mesh_sta_info_init(struct ie
|
||||||
|
if (!test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
|
||||||
|
rate_control_rate_init(sta);
|
||||||
|
else
|
||||||
|
- rate_control_rate_update(local, sband, sta, 0, changed);
|
||||||
|
+ rate_control_rate_update(local, sband, &sta->deflink, changed);
|
||||||
|
out:
|
||||||
|
spin_unlock_bh(&sta->mesh->plink_lock);
|
||||||
|
}
|
||||||
|
--- a/net/mac80211/rate.c
|
||||||
|
+++ b/net/mac80211/rate.c
|
||||||
|
@@ -93,16 +93,15 @@ void rate_control_tx_status(struct ieee8
|
||||||
|
|
||||||
|
void rate_control_rate_update(struct ieee80211_local *local,
|
||||||
|
struct ieee80211_supported_band *sband,
|
||||||
|
- struct sta_info *sta, unsigned int link_id,
|
||||||
|
+ struct link_sta_info *link_sta,
|
||||||
|
u32 changed)
|
||||||
|
{
|
||||||
|
struct rate_control_ref *ref = local->rate_ctrl;
|
||||||
|
+ struct sta_info *sta = link_sta->sta;
|
||||||
|
struct ieee80211_sta *ista = &sta->sta;
|
||||||
|
void *priv_sta = sta->rate_ctrl_priv;
|
||||||
|
struct ieee80211_chanctx_conf *chanctx_conf;
|
||||||
|
|
||||||
|
- WARN_ON(link_id != 0);
|
||||||
|
-
|
||||||
|
if (ref && ref->ops->rate_update) {
|
||||||
|
rcu_read_lock();
|
||||||
|
|
||||||
|
@@ -120,7 +119,8 @@ void rate_control_rate_update(struct iee
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sta->uploaded)
|
||||||
|
- drv_sta_rc_update(local, sta->sdata, &sta->sta, changed);
|
||||||
|
+ drv_link_sta_rc_update(local, sta->sdata, link_sta->pub,
|
||||||
|
+ changed);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ieee80211_rate_control_register(const struct rate_control_ops *ops)
|
||||||
|
--- a/net/mac80211/rate.h
|
||||||
|
+++ b/net/mac80211/rate.h
|
||||||
|
@@ -32,8 +32,7 @@ void rate_control_tx_status(struct ieee8
|
||||||
|
void rate_control_rate_init(struct sta_info *sta);
|
||||||
|
void rate_control_rate_update(struct ieee80211_local *local,
|
||||||
|
struct ieee80211_supported_band *sband,
|
||||||
|
- struct sta_info *sta,
|
||||||
|
- unsigned int link_id,
|
||||||
|
+ struct link_sta_info *link_sta,
|
||||||
|
u32 changed);
|
||||||
|
|
||||||
|
static inline void *rate_control_alloc_sta(struct rate_control_ref *ref,
|
||||||
|
--- a/net/mac80211/rx.c
|
||||||
|
+++ b/net/mac80211/rx.c
|
||||||
|
@@ -3568,7 +3568,7 @@ ieee80211_rx_h_action(struct ieee80211_r
|
||||||
|
|
||||||
|
sband = rx->local->hw.wiphy->bands[status->band];
|
||||||
|
|
||||||
|
- rate_control_rate_update(local, sband, rx->sta, 0,
|
||||||
|
+ rate_control_rate_update(local, sband, rx->link_sta,
|
||||||
|
IEEE80211_RC_SMPS_CHANGED);
|
||||||
|
cfg80211_sta_opmode_change_notify(sdata->dev,
|
||||||
|
rx->sta->addr,
|
||||||
|
@@ -3605,7 +3605,7 @@ ieee80211_rx_h_action(struct ieee80211_r
|
||||||
|
ieee80211_sta_rx_bw_to_chan_width(rx->link_sta);
|
||||||
|
sta_opmode.changed = STA_OPMODE_MAX_BW_CHANGED;
|
||||||
|
|
||||||
|
- rate_control_rate_update(local, sband, rx->sta, 0,
|
||||||
|
+ rate_control_rate_update(local, sband, rx->link_sta,
|
||||||
|
IEEE80211_RC_BW_CHANGED);
|
||||||
|
cfg80211_sta_opmode_change_notify(sdata->dev,
|
||||||
|
rx->sta->addr,
|
||||||
|
--- a/net/mac80211/tdls.c
|
||||||
|
+++ b/net/mac80211/tdls.c
|
||||||
|
@@ -1342,7 +1342,8 @@ static void iee80211_tdls_recalc_chanctx
|
||||||
|
bw = min(bw, ieee80211_sta_cap_rx_bw(&sta->deflink));
|
||||||
|
if (bw != sta->sta.deflink.bandwidth) {
|
||||||
|
sta->sta.deflink.bandwidth = bw;
|
||||||
|
- rate_control_rate_update(local, sband, sta, 0,
|
||||||
|
+ rate_control_rate_update(local, sband,
|
||||||
|
+ &sta->deflink,
|
||||||
|
IEEE80211_RC_BW_CHANGED);
|
||||||
|
/*
|
||||||
|
* if a TDLS peer BW was updated, we need to
|
||||||
|
--- a/net/mac80211/trace.h
|
||||||
|
+++ b/net/mac80211/trace.h
|
||||||
|
@@ -945,31 +945,34 @@ TRACE_EVENT(drv_sta_set_txpwr,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
-TRACE_EVENT(drv_sta_rc_update,
|
||||||
|
+TRACE_EVENT(drv_link_sta_rc_update,
|
||||||
|
TP_PROTO(struct ieee80211_local *local,
|
||||||
|
struct ieee80211_sub_if_data *sdata,
|
||||||
|
- struct ieee80211_sta *sta,
|
||||||
|
+ struct ieee80211_link_sta *link_sta,
|
||||||
|
u32 changed),
|
||||||
|
|
||||||
|
- TP_ARGS(local, sdata, sta, changed),
|
||||||
|
+ TP_ARGS(local, sdata, link_sta, changed),
|
||||||
|
|
||||||
|
TP_STRUCT__entry(
|
||||||
|
LOCAL_ENTRY
|
||||||
|
VIF_ENTRY
|
||||||
|
STA_ENTRY
|
||||||
|
__field(u32, changed)
|
||||||
|
+ __field(u32, link_id)
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_fast_assign(
|
||||||
|
LOCAL_ASSIGN;
|
||||||
|
VIF_ASSIGN;
|
||||||
|
- STA_ASSIGN;
|
||||||
|
+ STA_NAMED_ASSIGN(link_sta->sta);
|
||||||
|
__entry->changed = changed;
|
||||||
|
+ __entry->link_id = link_sta->link_id;
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_printk(
|
||||||
|
- LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " changed: 0x%x",
|
||||||
|
- LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->changed
|
||||||
|
+ LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " (link %d) changed: 0x%x",
|
||||||
|
+ LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id,
|
||||||
|
+ __entry->changed
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
--- a/net/mac80211/vht.c
|
||||||
|
+++ b/net/mac80211/vht.c
|
||||||
|
@@ -766,8 +766,7 @@ void ieee80211_vht_handle_opmode(struct
|
||||||
|
|
||||||
|
if (changed > 0) {
|
||||||
|
ieee80211_recalc_min_chandef(sdata, link_sta->link_id);
|
||||||
|
- rate_control_rate_update(local, sband, link_sta->sta,
|
||||||
|
- link_sta->link_id, changed);
|
||||||
|
+ rate_control_rate_update(local, sband, link_sta, changed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -126,7 +126,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
--- a/net/wireless/trace.h
|
--- a/net/wireless/trace.h
|
||||||
+++ b/net/wireless/trace.h
|
+++ b/net/wireless/trace.h
|
||||||
@@ -1318,19 +1318,21 @@ TRACE_EVENT(rdev_libertas_set_mesh_chann
|
@@ -1322,19 +1322,21 @@ TRACE_EVENT(rdev_libertas_set_mesh_chann
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(rdev_set_monitor_channel,
|
TRACE_EVENT(rdev_set_monitor_channel,
|
||||||
|
@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
|
|||||||
|
|
||||||
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_DATE:=2025-02-14
|
PKG_SOURCE_DATE:=2025-04-11
|
||||||
PKG_SOURCE_VERSION:=e5fef138524e63314cb96ff8314048d175294e95
|
PKG_SOURCE_VERSION:=be28ef77e330fdee28054214c798f028ddfbbc02
|
||||||
PKG_MIRROR_HASH:=4d6ea8669b3034c97f5b341a5473facf4fe21262a2fde71257b57c4d1c86be5e
|
PKG_MIRROR_HASH:=71d0651fd74b00fd83f5ea965483623dd6b33581c9cb0a05552d8e3d29dd2767
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
PKG_USE_NINJA:=0
|
PKG_USE_NINJA:=0
|
||||||
|
47
package/kernel/r8127/Makefile
Normal file
47
package/kernel/r8127/Makefile
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=r8127
|
||||||
|
PKG_VERSION:=11.014.00
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||||
|
PKG_SOURCE_URL:=https://github.com/openwrt/rtl8127/releases/download/$(PKG_VERSION)
|
||||||
|
PKG_HASH:=f496bc16c32d2e8f9482c57d006604c70d9e8d55b4f1f999b88c602de9104094
|
||||||
|
|
||||||
|
PKG_BUILD_PARALLEL:=1
|
||||||
|
PKG_LICENSE:=GPLv2
|
||||||
|
PKG_MAINTAINER:=Alvaro Fernandez Rojas <noltari@gmail.com>
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define KernelPackage/r8127
|
||||||
|
SUBMENU:=Network Devices
|
||||||
|
TITLE:=Realtek RTL8127 PCI 10 Gigabit Ethernet driver
|
||||||
|
DEPENDS:=@PCI_SUPPORT +kmod-libphy
|
||||||
|
FILES:=$(PKG_BUILD_DIR)/src/r8127.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,r8127)
|
||||||
|
PROVIDES:=kmod-r8169
|
||||||
|
VARIANT:=regular
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/r8127-rss
|
||||||
|
$(call KernelPackage/r8127)
|
||||||
|
CONFLICTS:=kmod-r8127
|
||||||
|
TITLE+= (RSS)
|
||||||
|
VARIANT:=rss
|
||||||
|
endef
|
||||||
|
|
||||||
|
ifeq ($(BUILD_VARIANT),rss)
|
||||||
|
PKG_MAKE_FLAGS += ENABLE_RSS_SUPPORT=y
|
||||||
|
endif
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
+$(KERNEL_MAKE) $(PKG_JOBS) \
|
||||||
|
$(PKG_MAKE_FLAGS) \
|
||||||
|
M="$(PKG_BUILD_DIR)/src" \
|
||||||
|
modules
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,r8127))
|
||||||
|
$(eval $(call KernelPackage,r8127-rss))
|
@ -0,0 +1,107 @@
|
|||||||
|
From 5ca1d47e065c0318774a946ffdf76010c78cc164 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chukun Pan <amadeus@jmu.edu.cn>
|
||||||
|
Date: Sat, 10 Aug 2024 20:16:32 +0800
|
||||||
|
Subject: [PATCH] r8127: print link speed and duplex mode
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Like other Ethernet drivers, print link speed and duplex mode
|
||||||
|
when the interface is up. Formatting output at the same time.
|
||||||
|
|
||||||
|
Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
|
||||||
|
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
||||||
|
---
|
||||||
|
src/r8127.h | 2 ++
|
||||||
|
src/r8127_n.c | 48 +++++++++++++++++++++++++++++++++++++++++++++---
|
||||||
|
2 files changed, 47 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/src/r8127.h
|
||||||
|
+++ b/src/r8127.h
|
||||||
|
@@ -1753,6 +1753,11 @@ enum RTL8127_register_content {
|
||||||
|
LinkStatus = 0x02,
|
||||||
|
FullDup = 0x01,
|
||||||
|
|
||||||
|
+#define RTL8127_FULL_DUPLEX_MASK (_10000bpsF | _5000bpsF | _2500bpsF | _1000bpsF | FullDup)
|
||||||
|
+#define RTL8127_SPEED_1000_MASK (_1000bpsF | _1000bpsL | _2500bpsL)
|
||||||
|
+#define RTL8127_SPEED_2500_MASK (_2500bpsF | _5000bpsL)
|
||||||
|
+#define RTL8127_SPEED_5000_MASK (_5000bpsF | _10000bpsL)
|
||||||
|
+
|
||||||
|
/* DBG_reg */
|
||||||
|
Fix_Nak_1 = (1 << 4),
|
||||||
|
Fix_Nak_2 = (1 << 3),
|
||||||
|
--- a/src/r8127_n.c
|
||||||
|
+++ b/src/r8127_n.c
|
||||||
|
@@ -39,6 +39,7 @@
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/version.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
+#include <linux/phy.h>
|
||||||
|
#include <linux/netdevice.h>
|
||||||
|
#include <linux/etherdevice.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
@@ -4746,6 +4747,42 @@ rtl8127_link_down_patch(struct net_devic
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
+static unsigned int rtl8127_phy_duplex(u32 status)
|
||||||
|
+{
|
||||||
|
+ unsigned int duplex = DUPLEX_UNKNOWN;
|
||||||
|
+
|
||||||
|
+ if (status & LinkStatus) {
|
||||||
|
+ if (status & RTL8127_FULL_DUPLEX_MASK)
|
||||||
|
+ duplex = DUPLEX_FULL;
|
||||||
|
+ else
|
||||||
|
+ duplex = DUPLEX_HALF;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return duplex;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int rtl8127_phy_speed(u32 status)
|
||||||
|
+{
|
||||||
|
+ int speed = SPEED_UNKNOWN;
|
||||||
|
+
|
||||||
|
+ if (status & LinkStatus) {
|
||||||
|
+ if (status & _10000bpsF)
|
||||||
|
+ speed = SPEED_10000;
|
||||||
|
+ else if (status & RTL8127_SPEED_5000_MASK)
|
||||||
|
+ speed = SPEED_5000;
|
||||||
|
+ else if (status & RTL8127_SPEED_2500_MASK)
|
||||||
|
+ speed = SPEED_2500;
|
||||||
|
+ else if (status & RTL8127_SPEED_1000_MASK)
|
||||||
|
+ speed = SPEED_1000;
|
||||||
|
+ else if (status & _100bps)
|
||||||
|
+ speed = SPEED_100;
|
||||||
|
+ else if (status & _10bps)
|
||||||
|
+ speed = SPEED_10;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return speed;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
_rtl8127_check_link_status(struct net_device *dev, unsigned int link_state)
|
||||||
|
{
|
||||||
|
@@ -4758,11 +4795,18 @@ _rtl8127_check_link_status(struct net_de
|
||||||
|
if (link_state == R8127_LINK_STATE_ON) {
|
||||||
|
rtl8127_link_on_patch(dev);
|
||||||
|
|
||||||
|
- if (netif_msg_ifup(tp))
|
||||||
|
- printk(KERN_INFO PFX "%s: link up\n", dev->name);
|
||||||
|
+ if (netif_msg_ifup(tp)) {
|
||||||
|
+ const u32 phy_status = RTL_R32(tp, PHYstatus);
|
||||||
|
+ const unsigned int phy_duplex = rtl8127_phy_duplex(phy_status);
|
||||||
|
+ const int phy_speed = rtl8127_phy_speed(phy_status);
|
||||||
|
+ printk(KERN_INFO PFX "%s: Link is Up - %s/%s\n",
|
||||||
|
+ dev->name,
|
||||||
|
+ phy_speed_to_str(phy_speed),
|
||||||
|
+ phy_duplex_to_str(phy_duplex));
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
if (netif_msg_ifdown(tp))
|
||||||
|
- printk(KERN_INFO PFX "%s: link down\n", dev->name);
|
||||||
|
+ printk(KERN_INFO PFX "%s: Link is Down\n", dev->name);
|
||||||
|
|
||||||
|
rtl8127_link_down_patch(dev);
|
||||||
|
}
|
@ -132,18 +132,17 @@ static int ubootenv_probe(struct platform_device *pdev)
|
|||||||
return misc_register(&data->misc);
|
return misc_register(&data->misc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ubootenv_remove(struct platform_device *pdev)
|
static void ubootenv_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct ubootenv_drvdata *data = platform_get_drvdata(pdev);
|
struct ubootenv_drvdata *data = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
data->env = NULL;
|
data->env = NULL;
|
||||||
misc_deregister(&data->misc);
|
misc_deregister(&data->misc);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver ubootenv_driver = {
|
static struct platform_driver ubootenv_driver = {
|
||||||
.probe = ubootenv_probe,
|
.probe = ubootenv_probe,
|
||||||
.remove = ubootenv_remove,
|
.remove_new = ubootenv_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = NAME,
|
.name = NAME,
|
||||||
.of_match_table = of_ubootenv_match,
|
.of_match_table = of_ubootenv_match,
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Restart ath12k radios that take long time to initialize on boot
|
||||||
|
|
||||||
|
[ "${ACTION}" = "add" ] || exit 0
|
||||||
|
[ $(grep -c DRIVER=ath12k_pci /sys/$DEVPATH/device/uevent) -gt 0 ] || exit 0
|
||||||
|
|
||||||
|
. /usr/share/libubox/jshn.sh
|
||||||
|
|
||||||
|
restart_radio() {
|
||||||
|
radio=$1
|
||||||
|
arg="{\"radio\": \"$radio\"}"
|
||||||
|
ubus call network reload
|
||||||
|
ubus call network.wireless down "$arg"
|
||||||
|
ubus call network.wireless up "$arg"
|
||||||
|
}
|
||||||
|
|
||||||
|
json_init
|
||||||
|
json_load "$(ubus -S call network.wireless status)"
|
||||||
|
json_get_keys radios
|
||||||
|
for radio in $radios; do
|
||||||
|
json_select $radio
|
||||||
|
json_get_vars up
|
||||||
|
json_get_vars retry_setup_failed
|
||||||
|
|
||||||
|
json_select config
|
||||||
|
json_get_vars path
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
if [ $up = 0 -a $retry_setup_failed = 1 ] &&
|
||||||
|
[ $(iwinfo nl80211 phyname "path=$path") = "$DEVICENAME" ]; then
|
||||||
|
restart_radio $radio
|
||||||
|
fi
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
done
|
@ -8,13 +8,13 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=dnsmasq
|
PKG_NAME:=dnsmasq
|
||||||
PKG_UPSTREAM_VERSION:=2.90
|
PKG_UPSTREAM_VERSION:=2.91
|
||||||
PKG_VERSION:=$(subst test,~~test,$(subst rc,~rc,$(PKG_UPSTREAM_VERSION)))
|
PKG_VERSION:=$(subst test,~~test,$(subst rc,~rc,$(PKG_UPSTREAM_VERSION)))
|
||||||
PKG_RELEASE:=4
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=https://thekelleys.org.uk/dnsmasq/
|
PKG_SOURCE_URL:=https://thekelleys.org.uk/dnsmasq/
|
||||||
PKG_HASH:=8e50309bd837bfec9649a812e066c09b6988b73d749b7d293c06c57d46a109e4
|
PKG_HASH:=f622682848b33677adb2b6ad08264618a2ae0a01da486a93fd8cd91186b3d153
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
PKG_LICENSE_FILES:=COPYING
|
PKG_LICENSE_FILES:=COPYING
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
From 1ed783b8d7343c42910a61f12a8fc6237eb80417 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Kelley <simon@thekelleys.org.uk>
|
|
||||||
Date: Mon, 19 Feb 2024 12:22:43 +0000
|
|
||||||
Subject: Fix spurious "resource limit exceeded" messages.
|
|
||||||
|
|
||||||
Replies from upstream with a REFUSED rcode can result in
|
|
||||||
log messages stating that a resource limit has been exceeded,
|
|
||||||
which is not the case.
|
|
||||||
|
|
||||||
Thanks to Dominik Derigs and the Pi-hole project for
|
|
||||||
spotting this.
|
|
||||||
---
|
|
||||||
CHANGELOG | 5 +++++
|
|
||||||
src/forward.c | 6 +++---
|
|
||||||
2 files changed, 8 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
--- a/CHANGELOG
|
|
||||||
+++ b/CHANGELOG
|
|
||||||
@@ -1,3 +1,8 @@
|
|
||||||
+version 2.91
|
|
||||||
+ Fix spurious "resource limit exceeded messages". Thanks to
|
|
||||||
+ Dominik Derigs for the bug report.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
version 2.90
|
|
||||||
Fix reversion in --rev-server introduced in 2.88 which
|
|
||||||
caused breakage if the prefix length is not exactly divisible
|
|
||||||
--- a/src/forward.c
|
|
||||||
+++ b/src/forward.c
|
|
||||||
@@ -937,10 +937,10 @@ static void dnssec_validate(struct frec
|
|
||||||
status = dnssec_validate_reply(now, header, plen, daemon->namebuff, daemon->keyname, &forward->class,
|
|
||||||
!option_bool(OPT_DNSSEC_IGN_NS) && (forward->sentto->flags & SERV_DO_DNSSEC),
|
|
||||||
NULL, NULL, NULL, &orig->validate_counter);
|
|
||||||
- }
|
|
||||||
|
|
||||||
- if (STAT_ISEQUAL(status, STAT_ABANDONED))
|
|
||||||
- log_resource = 1;
|
|
||||||
+ if (STAT_ISEQUAL(status, STAT_ABANDONED))
|
|
||||||
+ log_resource = 1;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* Can't validate, as we're missing key data. Put this
|
|
||||||
answer aside, whilst we get that. */
|
|
@ -1,31 +0,0 @@
|
|||||||
From ccff85ad72d2f858d9743d40525128e4f62d41a8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: renmingshuai <renmingshuai@huawei.com>
|
|
||||||
Date: Wed, 21 Feb 2024 00:24:25 +0000
|
|
||||||
Subject: [PATCH] Fix error introduced in
|
|
||||||
51471cafa5a4fa44d6fe490885d9910bd72a5907
|
|
||||||
|
|
||||||
Signed-off-by: renmingshuai <renmingshuai@huawei.com>
|
|
||||||
---
|
|
||||||
src/dnssec.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/src/dnssec.c
|
|
||||||
+++ b/src/dnssec.c
|
|
||||||
@@ -1547,7 +1547,7 @@ static int prove_non_existence_nsec3(str
|
|
||||||
nsecs[i] = NULL; /* Speculative, will be restored if OK. */
|
|
||||||
|
|
||||||
if (!(p = skip_name(nsec3p, header, plen, 15)))
|
|
||||||
- return 0; /* bad packet */
|
|
||||||
+ return DNSSEC_FAIL_BADPACKET; /* bad packet */
|
|
||||||
|
|
||||||
p += 10; /* type, class, TTL, rdlen */
|
|
||||||
|
|
||||||
@@ -1640,7 +1640,7 @@ static int prove_non_existence_nsec3(str
|
|
||||||
if (!wildname)
|
|
||||||
{
|
|
||||||
if (!(wildcard = strchr(next_closest, '.')) || wildcard == next_closest)
|
|
||||||
- return 0;
|
|
||||||
+ return DNSSEC_FAIL_NONSEC;
|
|
||||||
|
|
||||||
wildcard--;
|
|
||||||
*wildcard = '*';
|
|
@ -1,98 +0,0 @@
|
|||||||
From 8ce27433f8b2e17c557cb55e4f16941d309deeac Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Kelley <simon@thekelleys.org.uk>
|
|
||||||
Date: Fri, 17 Jan 2025 17:49:29 +0000
|
|
||||||
Subject: [PATCH] Handle DS queries to auth zones.
|
|
||||||
Origin: upstream, v2.91test8
|
|
||||||
|
|
||||||
When dnsmasq is configured to act as an authoritative server and has
|
|
||||||
an authoritative zone configured, and recieves a query for
|
|
||||||
that zone _as_forwarder_ it answers the query directly rather
|
|
||||||
than forwarding it. This doesn't affect the answer, but it
|
|
||||||
saves dnsmasq forwarding the query to the recusor upstream,
|
|
||||||
whch then bounces it back to dnsmasq in auth mode. The
|
|
||||||
exception should be when the query is for the root of zone, for a DS
|
|
||||||
RR. The answer to that has to come from the parent, via the
|
|
||||||
recursor, and will typically be a proof-of-nonexistence since
|
|
||||||
dnsmasq doesn't support signed zones. This patch suppresses
|
|
||||||
local answers and forces forwarding to the upstream recursor
|
|
||||||
for such queries. It stops breakage when a DNSSEC validating
|
|
||||||
client makes queries to dnsmasq acting as forwarder for a zone
|
|
||||||
for which it is authoritative.
|
|
||||||
|
|
||||||
[ukleinek: drop changes to CHANGELOG to prevent conflicts]
|
|
||||||
---
|
|
||||||
src/forward.c | 52 +++++++++++++++++++++++++++++++++++++--------------
|
|
||||||
1 file changed, 38 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
--- a/src/forward.c
|
|
||||||
+++ b/src/forward.c
|
|
||||||
@@ -1744,15 +1744,27 @@ void receive_query(struct listener *list
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_AUTH
|
|
||||||
- /* find queries for zones we're authoritative for, and answer them directly */
|
|
||||||
+ /* Find queries for zones we're authoritative for, and answer them directly.
|
|
||||||
+ The exception to this is DS queries for the zone route. They
|
|
||||||
+ have to come from the parent zone. Since dnsmasq's auth server
|
|
||||||
+ can't do DNSSEC, the zone will be unsigned, and anything using
|
|
||||||
+ dnsmasq as a forwarder and doing validation will be expecting to
|
|
||||||
+ see the proof of non-existence from the parent. */
|
|
||||||
if (!auth_dns && !option_bool(OPT_LOCALISE))
|
|
||||||
for (zone = daemon->auth_zones; zone; zone = zone->next)
|
|
||||||
- if (in_zone(zone, daemon->namebuff, NULL))
|
|
||||||
- {
|
|
||||||
- auth_dns = 1;
|
|
||||||
- local_auth = 1;
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
+ {
|
|
||||||
+ char *cut;
|
|
||||||
+
|
|
||||||
+ if (in_zone(zone, daemon->namebuff, &cut))
|
|
||||||
+ {
|
|
||||||
+ if (type != T_DS || cut)
|
|
||||||
+ {
|
|
||||||
+ auth_dns = 1;
|
|
||||||
+ local_auth = 1;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_LOOP
|
|
||||||
@@ -2268,15 +2280,27 @@ unsigned char *tcp_request(int confd, ti
|
|
||||||
&peer_addr, auth_dns ? "auth" : "query", qtype);
|
|
||||||
|
|
||||||
#ifdef HAVE_AUTH
|
|
||||||
- /* find queries for zones we're authoritative for, and answer them directly */
|
|
||||||
+ /* Find queries for zones we're authoritative for, and answer them directly.
|
|
||||||
+ The exception to this is DS queries for the zone route. They
|
|
||||||
+ have to come from the parent zone. Since dnsmasq's auth server
|
|
||||||
+ can't do DNSSEC, the zone will be unsigned, and anything using
|
|
||||||
+ dnsmasq as a forwarder and doing validation will be expecting to
|
|
||||||
+ see the proof of non-existence from the parent. */
|
|
||||||
if (!auth_dns && !option_bool(OPT_LOCALISE))
|
|
||||||
for (zone = daemon->auth_zones; zone; zone = zone->next)
|
|
||||||
- if (in_zone(zone, daemon->namebuff, NULL))
|
|
||||||
- {
|
|
||||||
- auth_dns = 1;
|
|
||||||
- local_auth = 1;
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
+ {
|
|
||||||
+ char *cut;
|
|
||||||
+
|
|
||||||
+ if (in_zone(zone, daemon->namebuff, &cut))
|
|
||||||
+ {
|
|
||||||
+ if (qtype != T_DS || cut)
|
|
||||||
+ {
|
|
||||||
+ auth_dns = 1;
|
|
||||||
+ local_auth = 1;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/dnsmasq.c
|
--- a/src/dnsmasq.c
|
||||||
+++ b/src/dnsmasq.c
|
+++ b/src/dnsmasq.c
|
||||||
@@ -2021,6 +2021,10 @@ static void check_dns_listeners(time_t n
|
@@ -2097,6 +2097,10 @@
|
||||||
daemon->pipe_to_parent = pipefd[1];
|
daemon->pipe_to_parent = pipefd[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8,9 +8,9 @@
|
|||||||
+ drop_ubus_listeners();
|
+ drop_ubus_listeners();
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
/* start with no upstream connections. */
|
/* The connected socket inherits non-blocking
|
||||||
for (s = daemon->servers; s; s = s->next)
|
attribute from the listening socket.
|
||||||
s->tcpfd = -1;
|
Reset that here. */
|
||||||
--- a/src/dnsmasq.h
|
--- a/src/dnsmasq.h
|
||||||
+++ b/src/dnsmasq.h
|
+++ b/src/dnsmasq.h
|
||||||
@@ -1670,14 +1670,26 @@ void emit_dbus_signal(int action, struct
|
@@ -1670,14 +1670,26 @@ void emit_dbus_signal(int action, struct
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
# Copyright (C) 2008-2015 OpenWrt.org
|
# Copyright (C) 2008-2015 OpenWrt.org
|
||||||
# shellcheck disable=1091,2034,3037,3043,3045
|
# shellcheck disable=1091,2034,3037,3043,3045,3057
|
||||||
|
|
||||||
START=90
|
START=90
|
||||||
STOP=01
|
STOP=01
|
||||||
@ -24,15 +24,63 @@ LLDPD_RESTART_HASH=${LLDPD_RUN}/lldpd.restart_hash
|
|||||||
|
|
||||||
. "$IPKG_INSTROOT/lib/functions/network.sh"
|
. "$IPKG_INSTROOT/lib/functions/network.sh"
|
||||||
|
|
||||||
|
# Load release info once for all 'find_*' functions
|
||||||
|
[ -s /etc/os-release ] && . /etc/os-release
|
||||||
|
|
||||||
|
# Helper function to truncate output to 31 characters
|
||||||
|
truncate_output() {
|
||||||
|
# Some devices have trouble decoding inventory TLV strings > 31 chars
|
||||||
|
# lldpd truncates inventory TLV to a total TLV length of 36 (of which string = 32)
|
||||||
|
echo "${1:0:31}"
|
||||||
|
}
|
||||||
|
|
||||||
find_release_info()
|
find_release_info()
|
||||||
{
|
{
|
||||||
[ -s /etc/os-release ] && . /etc/os-release
|
|
||||||
[ -z "$PRETTY_NAME" ] && [ -s /etc/openwrt_version ] && \
|
[ -z "$PRETTY_NAME" ] && [ -s /etc/openwrt_version ] && \
|
||||||
PRETTY_NAME="$(cat /etc/openwrt_version)"
|
PRETTY_NAME="$(cat /etc/openwrt_version)"
|
||||||
|
|
||||||
echo "${PRETTY_NAME:-Unknown OpenWrt release} @ $(cat /proc/sys/kernel/hostname)"
|
echo "${PRETTY_NAME:-Unknown OpenWrt release} @ $(cat /proc/sys/kernel/hostname)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
find_hardware_revision()
|
||||||
|
{
|
||||||
|
echo "${OPENWRT_DEVICE_REVISION:-Unknown hardware revision}"
|
||||||
|
}
|
||||||
|
|
||||||
|
find_firmware_info()
|
||||||
|
{
|
||||||
|
echo "${PRETTY_NAME:-Unknown firmware release}"
|
||||||
|
}
|
||||||
|
|
||||||
|
find_software_revision()
|
||||||
|
{
|
||||||
|
echo "${BUILD_ID:-Unknown software revision}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to extract JSON values using jsonfilter
|
||||||
|
extract_json_field() {
|
||||||
|
local _path="$1"
|
||||||
|
jsonfilter -q -i /etc/board.json -e "$_path" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
find_manufacturer_info()
|
||||||
|
{
|
||||||
|
local _id
|
||||||
|
# extract the model->id field, e.g.: "id": "glinet,gl-mt6000",
|
||||||
|
_id=$(extract_json_field '@.model.id')
|
||||||
|
# stash text up to first comma
|
||||||
|
_id="${_id%%,*}"
|
||||||
|
echo "${_id:-Unknown manufacturer}"
|
||||||
|
}
|
||||||
|
|
||||||
|
find_model_info()
|
||||||
|
{
|
||||||
|
local _name
|
||||||
|
# extract the model->name field, e.g.: "name": "GL.iNet GL-MT6000"
|
||||||
|
_name=$(extract_json_field '@.model.name')
|
||||||
|
echo "${_name:-Unknown model name}"
|
||||||
|
}
|
||||||
|
|
||||||
get_config_restart_hash() {
|
get_config_restart_hash() {
|
||||||
local var="$1"
|
local var="$1"
|
||||||
local _string _hash v
|
local _string _hash v
|
||||||
@ -120,6 +168,48 @@ write_lldpd_conf()
|
|||||||
config_load 'lldpd'
|
config_load 'lldpd'
|
||||||
config_get lldp_description 'config' 'lldp_description' "$(find_release_info)"
|
config_get lldp_description 'config' 'lldp_description' "$(find_release_info)"
|
||||||
|
|
||||||
|
# Check the 'do not send inventory' flag
|
||||||
|
local lldpmed_no_inventory
|
||||||
|
config_get_bool lldpmed_no_inventory 'config' 'lldpmed_no_inventory' 0
|
||||||
|
|
||||||
|
if [ "$lldpmed_no_inventory" = 0 ]; then
|
||||||
|
# lldpmed_no_inventory=1 ('-i' in start_service()) prevents these from being sent
|
||||||
|
# TIA TR-41 TLV 127 subtype 0x05
|
||||||
|
local lldp_med_inv_hardware_revision
|
||||||
|
config_get lldp_med_inv_hardware_revision 'config' 'lldp_med_inv_hardware_revision' "$(find_hardware_revision)"
|
||||||
|
lldp_med_inv_hardware_revision=$(truncate_output "$lldp_med_inv_hardware_revision")
|
||||||
|
|
||||||
|
# TIA TR-41 TLV 127 subtype 0x06
|
||||||
|
local lldp_med_inv_firmware_revision
|
||||||
|
config_get lldp_med_inv_firmware_revision 'config' 'lldp_med_inv_firmware_revision' "$(find_firmware_info)"
|
||||||
|
lldp_med_inv_firmware_revision=$(truncate_output "$lldp_med_inv_firmware_revision")
|
||||||
|
|
||||||
|
# TIA TR-41 TLV 127 subtype 0x07
|
||||||
|
local lldp_med_inv_software_revision
|
||||||
|
config_get lldp_med_inv_software_revision 'config' 'lldp_med_inv_software_revision' "$(find_software_revision)"
|
||||||
|
lldp_med_inv_software_revision=$(truncate_output "$lldp_med_inv_software_revision")
|
||||||
|
|
||||||
|
# TIA TR-41 TLV 127 subtype 0x08
|
||||||
|
local lldp_med_inv_serial_number
|
||||||
|
config_get lldp_med_inv_serial_number 'config' 'lldp_med_inv_serial_number'
|
||||||
|
lldp_med_inv_serial_number=$(truncate_output "$lldp_med_inv_serial_number")
|
||||||
|
|
||||||
|
# TIA TR-41 TLV 127 subtype 0x09
|
||||||
|
local lldp_med_inv_manufacturer_name
|
||||||
|
config_get lldp_med_inv_manufacturer_name 'config' 'lldp_med_inv_manufacturer_name' "$(find_manufacturer_info)"
|
||||||
|
lldp_med_inv_manufacturer_name=$(truncate_output "$lldp_med_inv_manufacturer_name")
|
||||||
|
|
||||||
|
# TIA TR-41 TLV 127 subtype 0x0a
|
||||||
|
local lldp_med_inv_model_name
|
||||||
|
config_get lldp_med_inv_model_name 'config' 'lldp_med_inv_model_name' "$(find_model_info)"
|
||||||
|
lldp_med_inv_model_name=$(truncate_output "$lldp_med_inv_model_name")
|
||||||
|
|
||||||
|
# TIA TR-41 TLV 127 subtype 0x0b
|
||||||
|
local lldp_med_inv_asset_id
|
||||||
|
config_get lldp_med_inv_asset_id 'config' 'lldp_med_inv_asset_id'
|
||||||
|
lldp_med_inv_asset_id=$(truncate_output "$lldp_med_inv_asset_id")
|
||||||
|
fi
|
||||||
|
|
||||||
local lldp_hostname
|
local lldp_hostname
|
||||||
config_get lldp_hostname 'config' 'lldp_hostname' "$(cat /proc/sys/kernel/hostname)"
|
config_get lldp_hostname 'config' 'lldp_hostname' "$(cat /proc/sys/kernel/hostname)"
|
||||||
|
|
||||||
@ -182,6 +272,17 @@ write_lldpd_conf()
|
|||||||
[ -n "$lldp_mgmt_ip" ] && echo "configure system ip management pattern" "\"$lldp_mgmt_ip\"" >> "$LLDPD_CONF"
|
[ -n "$lldp_mgmt_ip" ] && echo "configure system ip management pattern" "\"$lldp_mgmt_ip\"" >> "$LLDPD_CONF"
|
||||||
[ -n "$lldp_syscapabilities" ] && echo "configure system capabilities enabled $lldp_syscapabilities" >> "$LLDPD_CONF"
|
[ -n "$lldp_syscapabilities" ] && echo "configure system capabilities enabled $lldp_syscapabilities" >> "$LLDPD_CONF"
|
||||||
|
|
||||||
|
if [ "$lldpmed_no_inventory" = 0 ]; then
|
||||||
|
# Hardware inventory info
|
||||||
|
[ -n "$lldp_med_inv_hardware_revision" ] && echo "configure inventory hardware-revision \"$lldp_med_inv_hardware_revision\"" >> "$LLDPD_CONF"
|
||||||
|
[ -n "$lldp_med_inv_firmware_revision" ] && echo "configure inventory firmware-revision \"$lldp_med_inv_firmware_revision\"" >> "$LLDPD_CONF"
|
||||||
|
[ -n "$lldp_med_inv_software_revision" ] && echo "configure inventory software-revision \"$lldp_med_inv_software_revision\"" >> "$LLDPD_CONF"
|
||||||
|
[ -n "$lldp_med_inv_serial_number" ] && echo "configure inventory serial-number \"$lldp_med_inv_serial_number\"" >> "$LLDPD_CONF"
|
||||||
|
[ -n "$lldp_med_inv_manufacturer_name" ] && echo "configure inventory manufacturer \"$lldp_med_inv_manufacturer_name\"" >> "$LLDPD_CONF"
|
||||||
|
[ -n "$lldp_med_inv_model_name" ] && echo "configure inventory model \"$lldp_med_inv_model_name\"" >> "$LLDPD_CONF"
|
||||||
|
[ -n "$lldp_med_inv_asset_id" ] && echo "configure inventory asset \"$lldp_med_inv_asset_id\"" >> "$LLDPD_CONF"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ] && [ "$lldpmed_fast_start" -gt 0 ]; then
|
if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ] && [ "$lldpmed_fast_start" -gt 0 ]; then
|
||||||
if [ "$lldpmed_fast_start_tx_interval" -gt 0 ]; then
|
if [ "$lldpmed_fast_start_tx_interval" -gt 0 ]; then
|
||||||
echo "configure med fast-start tx-interval $lldpmed_fast_start_tx_interval" >> "$LLDPD_CONF"
|
echo "configure med fast-start tx-interval $lldpmed_fast_start_tx_interval" >> "$LLDPD_CONF"
|
||||||
@ -401,6 +502,14 @@ reload_service() {
|
|||||||
unconfigure system hostname
|
unconfigure system hostname
|
||||||
unconfigure system ip management pattern
|
unconfigure system ip management pattern
|
||||||
unconfigure system platform
|
unconfigure system platform
|
||||||
|
# Hardware inventory info
|
||||||
|
unconfigure inventory hardware-revision
|
||||||
|
unconfigure inventory firmware-revision
|
||||||
|
unconfigure inventory software-revision
|
||||||
|
unconfigure inventory serial-number
|
||||||
|
unconfigure inventory manufacturer
|
||||||
|
unconfigure inventory model
|
||||||
|
unconfigure inventory asset
|
||||||
EOF
|
EOF
|
||||||
if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ]; then
|
if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ]; then
|
||||||
$LLDPCLI -u "$LLDPSOCKET" >/dev/null 2>&1 <<-EOF
|
$LLDPCLI -u "$LLDPSOCKET" >/dev/null 2>&1 <<-EOF
|
||||||
|
@ -99,7 +99,7 @@ function network_socket_handle_request(sock_data, req)
|
|||||||
if (list[name])
|
if (list[name])
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
let allowed;
|
let allowed = net.peers[host].allowed == null;
|
||||||
for (let cur in net.peers[host].allowed) {
|
for (let cur in net.peers[host].allowed) {
|
||||||
if (!wildcard(name, cur))
|
if (!wildcard(name, cur))
|
||||||
continue;
|
continue;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=ca-certificates
|
PKG_NAME:=ca-certificates
|
||||||
PKG_VERSION:=20240203
|
PKG_VERSION:=20241223
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_MAINTAINER:=
|
PKG_MAINTAINER:=
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ PKG_LICENSE_FILES:=debian/copyright
|
|||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=@DEBIAN/pool/main/c/ca-certificates
|
PKG_SOURCE_URL:=@DEBIAN/pool/main/c/ca-certificates
|
||||||
PKG_HASH:=3286d3fc42c4d11b7086711a85f865b44065ce05cf1fb5376b2abed07622a9c6
|
PKG_HASH:=dd8286d0a9dd35c756fea5f1df3fed1510fb891f376903891b003cd9b1ad7e03
|
||||||
PKG_INSTALL:=1
|
PKG_INSTALL:=1
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
@ -135,8 +135,14 @@ export function remove_call(ctx, argv, named)
|
|||||||
if (!data)
|
if (!data)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (let idx in val)
|
for (let idx in val) {
|
||||||
|
if (idx != "" + +idx) {
|
||||||
|
let cur_idx = index(data, idx);
|
||||||
|
if (cur_idx >= 0)
|
||||||
|
idx = cur_idx + 1;
|
||||||
|
}
|
||||||
data[+idx - 1] = null;
|
data[+idx - 1] = null;
|
||||||
|
}
|
||||||
|
|
||||||
cur_obj[name] = filter(data, (v) => v != null);
|
cur_obj[name] = filter(data, (v) => v != null);
|
||||||
if (cur.attribute_allow_empty && !length(cur_obj[name]))
|
if (cur.attribute_allow_empty && !length(cur_obj[name]))
|
||||||
|
@ -12,10 +12,14 @@ include $(INCLUDE_DIR)/package.mk
|
|||||||
define Package/$(PKG_NAME)
|
define Package/$(PKG_NAME)
|
||||||
SECTION:=utils
|
SECTION:=utils
|
||||||
CATEGORY:=Utilities
|
CATEGORY:=Utilities
|
||||||
DEPENDS:=@USB_GADGET_SUPPORT +kmod-usb-gadget +kmod-usb-lib-composite
|
DEPENDS:=@USB_GADGET_SUPPORT +kmod-usb-gadget +kmod-fs-configfs +kmod-usb-lib-composite
|
||||||
TITLE:=init script to create USB gadgets
|
TITLE:=init script to create USB gadgets
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/$(PKG_NAME)/conffiles
|
||||||
|
/etc/config/usbgadget
|
||||||
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@ -35,7 +39,7 @@ define GadgetPreset
|
|||||||
SECTION:=utils
|
SECTION:=utils
|
||||||
CATEGORY:=Utilities
|
CATEGORY:=Utilities
|
||||||
TITLE+= $(2) gadget preset
|
TITLE+= $(2) gadget preset
|
||||||
DEPENDS+= $(3)
|
DEPENDS+= +usbgadget $(3)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/$(PKG_NAME)-$(1)/description
|
define Package/$(PKG_NAME)-$(1)/description
|
||||||
|
@ -8,6 +8,7 @@ endef
|
|||||||
define Device/nec-netbsd-aterm
|
define Device/nec-netbsd-aterm
|
||||||
DEVICE_VENDOR := NEC
|
DEVICE_VENDOR := NEC
|
||||||
LOADER_TYPE := bin
|
LOADER_TYPE := bin
|
||||||
|
LZMA_TEXT_START := 0x82800000
|
||||||
KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | uImage none
|
KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | uImage none
|
||||||
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | uImage none
|
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | uImage none
|
||||||
ARTIFACTS := uboot.bin
|
ARTIFACTS := uboot.bin
|
||||||
|
@ -65,7 +65,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
writel(tmp, base + PCIE_MISC_HARD_PCIE_HARD_DEBUG);
|
writel(tmp, base + PCIE_MISC_HARD_PCIE_HARD_DEBUG);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1536,6 +1551,7 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1537,6 +1552,7 @@ static int brcm_pcie_probe(struct platfo
|
||||||
pcie->gen = (ret < 0) ? 0 : ret;
|
pcie->gen = (ret < 0) ? 0 : ret;
|
||||||
|
|
||||||
pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc");
|
pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc");
|
||||||
|
@ -831,7 +831,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1207,6 +1534,7 @@ static void brcm_pcie_enter_l23(struct b
|
@@ -1208,6 +1535,7 @@ static void brcm_pcie_enter_l23(struct b
|
||||||
|
|
||||||
static int brcm_phy_cntl(struct brcm_pcie *pcie, const int start)
|
static int brcm_phy_cntl(struct brcm_pcie *pcie, const int start)
|
||||||
{
|
{
|
||||||
@ -839,7 +839,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
static const u32 shifts[PCIE_DVT_PMU_PCIE_PHY_CTRL_DAST_NFLDS] = {
|
static const u32 shifts[PCIE_DVT_PMU_PCIE_PHY_CTRL_DAST_NFLDS] = {
|
||||||
PCIE_DVT_PMU_PCIE_PHY_CTRL_DAST_PWRDN_SHIFT,
|
PCIE_DVT_PMU_PCIE_PHY_CTRL_DAST_PWRDN_SHIFT,
|
||||||
PCIE_DVT_PMU_PCIE_PHY_CTRL_DAST_RESET_SHIFT,
|
PCIE_DVT_PMU_PCIE_PHY_CTRL_DAST_RESET_SHIFT,
|
||||||
@@ -1239,6 +1567,9 @@ static int brcm_phy_cntl(struct brcm_pci
|
@@ -1240,6 +1568,9 @@ static int brcm_phy_cntl(struct brcm_pci
|
||||||
dev_err(pcie->dev, "failed to %s phy\n", (start ? "start" : "stop"));
|
dev_err(pcie->dev, "failed to %s phy\n", (start ? "start" : "stop"));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -849,7 +849,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline int brcm_phy_start(struct brcm_pcie *pcie)
|
static inline int brcm_phy_start(struct brcm_pcie *pcie)
|
||||||
@@ -1271,6 +1602,12 @@ static void brcm_pcie_turn_off(struct br
|
@@ -1272,6 +1603,12 @@ static void brcm_pcie_turn_off(struct br
|
||||||
u32p_replace_bits(&tmp, 1, PCIE_MISC_HARD_PCIE_HARD_DEBUG_SERDES_IDDQ_MASK);
|
u32p_replace_bits(&tmp, 1, PCIE_MISC_HARD_PCIE_HARD_DEBUG_SERDES_IDDQ_MASK);
|
||||||
writel(tmp, base + PCIE_MISC_HARD_PCIE_HARD_DEBUG);
|
writel(tmp, base + PCIE_MISC_HARD_PCIE_HARD_DEBUG);
|
||||||
|
|
||||||
@ -862,7 +862,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
/* Shutdown PCIe bridge */
|
/* Shutdown PCIe bridge */
|
||||||
pcie->bridge_sw_init_set(pcie, 1);
|
pcie->bridge_sw_init_set(pcie, 1);
|
||||||
}
|
}
|
||||||
@@ -1301,9 +1638,9 @@ static int brcm_pcie_suspend_noirq(struc
|
@@ -1302,9 +1639,9 @@ static int brcm_pcie_suspend_noirq(struc
|
||||||
if (brcm_phy_stop(pcie))
|
if (brcm_phy_stop(pcie))
|
||||||
dev_err(dev, "Could not stop phy for suspend\n");
|
dev_err(dev, "Could not stop phy for suspend\n");
|
||||||
|
|
||||||
@ -874,7 +874,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1398,7 +1735,7 @@ err_regulator:
|
@@ -1399,7 +1736,7 @@ err_regulator:
|
||||||
if (pcie->sr)
|
if (pcie->sr)
|
||||||
regulator_bulk_disable(pcie->sr->num_supplies, pcie->sr->supplies);
|
regulator_bulk_disable(pcie->sr->num_supplies, pcie->sr->supplies);
|
||||||
err_reset:
|
err_reset:
|
||||||
@ -883,7 +883,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
err_disable_clk:
|
err_disable_clk:
|
||||||
clk_disable_unprepare(pcie->clk);
|
clk_disable_unprepare(pcie->clk);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1410,8 +1747,8 @@ static void __brcm_pcie_remove(struct br
|
@@ -1411,8 +1748,8 @@ static void __brcm_pcie_remove(struct br
|
||||||
brcm_pcie_turn_off(pcie);
|
brcm_pcie_turn_off(pcie);
|
||||||
if (brcm_phy_stop(pcie))
|
if (brcm_phy_stop(pcie))
|
||||||
dev_err(pcie->dev, "Could not stop phy\n");
|
dev_err(pcie->dev, "Could not stop phy\n");
|
||||||
@ -894,7 +894,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
clk_disable_unprepare(pcie->clk);
|
clk_disable_unprepare(pcie->clk);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1429,12 +1766,16 @@ static const int pcie_offsets[] = {
|
@@ -1430,12 +1767,16 @@ static const int pcie_offsets[] = {
|
||||||
[RGR1_SW_INIT_1] = 0x9210,
|
[RGR1_SW_INIT_1] = 0x9210,
|
||||||
[EXT_CFG_INDEX] = 0x9000,
|
[EXT_CFG_INDEX] = 0x9000,
|
||||||
[EXT_CFG_DATA] = 0x9004,
|
[EXT_CFG_DATA] = 0x9004,
|
||||||
@ -911,7 +911,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct pcie_cfg_data generic_cfg = {
|
static const struct pcie_cfg_data generic_cfg = {
|
||||||
@@ -1442,6 +1783,7 @@ static const struct pcie_cfg_data generi
|
@@ -1443,6 +1784,7 @@ static const struct pcie_cfg_data generi
|
||||||
.type = GENERIC,
|
.type = GENERIC,
|
||||||
.perst_set = brcm_pcie_perst_set_generic,
|
.perst_set = brcm_pcie_perst_set_generic,
|
||||||
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
||||||
@ -919,7 +919,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct pcie_cfg_data bcm7425_cfg = {
|
static const struct pcie_cfg_data bcm7425_cfg = {
|
||||||
@@ -1449,6 +1791,7 @@ static const struct pcie_cfg_data bcm742
|
@@ -1450,6 +1792,7 @@ static const struct pcie_cfg_data bcm742
|
||||||
.type = BCM7425,
|
.type = BCM7425,
|
||||||
.perst_set = brcm_pcie_perst_set_generic,
|
.perst_set = brcm_pcie_perst_set_generic,
|
||||||
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
||||||
@ -927,7 +927,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct pcie_cfg_data bcm7435_cfg = {
|
static const struct pcie_cfg_data bcm7435_cfg = {
|
||||||
@@ -1463,12 +1806,15 @@ static const struct pcie_cfg_data bcm490
|
@@ -1464,12 +1807,15 @@ static const struct pcie_cfg_data bcm490
|
||||||
.type = BCM4908,
|
.type = BCM4908,
|
||||||
.perst_set = brcm_pcie_perst_set_4908,
|
.perst_set = brcm_pcie_perst_set_4908,
|
||||||
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
||||||
@ -943,7 +943,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct pcie_cfg_data bcm7278_cfg = {
|
static const struct pcie_cfg_data bcm7278_cfg = {
|
||||||
@@ -1476,6 +1822,7 @@ static const struct pcie_cfg_data bcm727
|
@@ -1477,6 +1823,7 @@ static const struct pcie_cfg_data bcm727
|
||||||
.type = BCM7278,
|
.type = BCM7278,
|
||||||
.perst_set = brcm_pcie_perst_set_7278,
|
.perst_set = brcm_pcie_perst_set_7278,
|
||||||
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_7278,
|
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_7278,
|
||||||
@ -951,7 +951,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct pcie_cfg_data bcm2711_cfg = {
|
static const struct pcie_cfg_data bcm2711_cfg = {
|
||||||
@@ -1483,10 +1830,27 @@ static const struct pcie_cfg_data bcm271
|
@@ -1484,10 +1831,27 @@ static const struct pcie_cfg_data bcm271
|
||||||
.type = BCM2711,
|
.type = BCM2711,
|
||||||
.perst_set = brcm_pcie_perst_set_generic,
|
.perst_set = brcm_pcie_perst_set_generic,
|
||||||
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
.bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
|
||||||
@ -979,7 +979,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
{ .compatible = "brcm,bcm4908-pcie", .data = &bcm4908_cfg },
|
{ .compatible = "brcm,bcm4908-pcie", .data = &bcm4908_cfg },
|
||||||
{ .compatible = "brcm,bcm7211-pcie", .data = &generic_cfg },
|
{ .compatible = "brcm,bcm7211-pcie", .data = &generic_cfg },
|
||||||
{ .compatible = "brcm,bcm7278-pcie", .data = &bcm7278_cfg },
|
{ .compatible = "brcm,bcm7278-pcie", .data = &bcm7278_cfg },
|
||||||
@@ -1527,7 +1891,7 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1528,7 +1892,7 @@ static int brcm_pcie_probe(struct platfo
|
||||||
|
|
||||||
data = of_device_get_match_data(&pdev->dev);
|
data = of_device_get_match_data(&pdev->dev);
|
||||||
if (!data) {
|
if (!data) {
|
||||||
@ -988,7 +988,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1538,6 +1902,7 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1539,6 +1903,7 @@ static int brcm_pcie_probe(struct platfo
|
||||||
pcie->type = data->type;
|
pcie->type = data->type;
|
||||||
pcie->perst_set = data->perst_set;
|
pcie->perst_set = data->perst_set;
|
||||||
pcie->bridge_sw_init_set = data->bridge_sw_init_set;
|
pcie->bridge_sw_init_set = data->bridge_sw_init_set;
|
||||||
@ -996,7 +996,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
|
|
||||||
pcie->base = devm_platform_ioremap_resource(pdev, 0);
|
pcie->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
if (IS_ERR(pcie->base))
|
if (IS_ERR(pcie->base))
|
||||||
@@ -1568,14 +1933,20 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1569,14 +1934,20 @@ static int brcm_pcie_probe(struct platfo
|
||||||
clk_disable_unprepare(pcie->clk);
|
clk_disable_unprepare(pcie->clk);
|
||||||
return PTR_ERR(pcie->perst_reset);
|
return PTR_ERR(pcie->perst_reset);
|
||||||
}
|
}
|
||||||
@ -1019,7 +1019,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
clk_disable_unprepare(pcie->clk);
|
clk_disable_unprepare(pcie->clk);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -1598,6 +1969,33 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1599,6 +1970,33 @@ static int brcm_pcie_probe(struct platfo
|
||||||
dev_err(pcie->dev, "probe of internal MSI failed");
|
dev_err(pcie->dev, "probe of internal MSI failed");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -1053,7 +1053,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
bridge->ops = pcie->type == BCM7425 ? &brcm7425_pcie_ops : &brcm_pcie_ops;
|
bridge->ops = pcie->type == BCM7425 ? &brcm7425_pcie_ops : &brcm_pcie_ops;
|
||||||
@@ -1614,6 +2012,8 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1615,6 +2013,8 @@ static int brcm_pcie_probe(struct platfo
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
writel(tmp, base + PCIE_MISC_MISC_CTRL);
|
writel(tmp, base + PCIE_MISC_MISC_CTRL);
|
||||||
|
|
||||||
brcm_pcie_set_tc_qos(pcie);
|
brcm_pcie_set_tc_qos(pcie);
|
||||||
@@ -1917,6 +1918,7 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1918,6 +1919,7 @@ static int brcm_pcie_probe(struct platfo
|
||||||
|
|
||||||
pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc");
|
pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc");
|
||||||
pcie->l1ss = of_property_read_bool(np, "brcm,enable-l1ss");
|
pcie->l1ss = of_property_read_bool(np, "brcm,enable-l1ss");
|
||||||
|
@ -61,7 +61,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Wait for 100ms after PERST# deassertion; see PCIe CEM specification
|
* Wait for 100ms after PERST# deassertion; see PCIe CEM specification
|
||||||
@@ -1919,6 +1940,7 @@ static int brcm_pcie_probe(struct platfo
|
@@ -1920,6 +1941,7 @@ static int brcm_pcie_probe(struct platfo
|
||||||
pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc");
|
pcie->ssc = of_property_read_bool(np, "brcm,enable-ssc");
|
||||||
pcie->l1ss = of_property_read_bool(np, "brcm,enable-l1ss");
|
pcie->l1ss = of_property_read_bool(np, "brcm,enable-l1ss");
|
||||||
pcie->rcb_mps_mode = of_property_read_bool(np, "brcm,enable-mps-rcb");
|
pcie->rcb_mps_mode = of_property_read_bool(np, "brcm,enable-mps-rcb");
|
||||||
|
@ -56,7 +56,7 @@ Signed-off-by: Richard Oliver <richard.oliver@raspberrypi.com>
|
|||||||
depends on RENESAS_RPCIF
|
depends on RENESAS_RPCIF
|
||||||
--- a/drivers/spi/Makefile
|
--- a/drivers/spi/Makefile
|
||||||
+++ b/drivers/spi/Makefile
|
+++ b/drivers/spi/Makefile
|
||||||
@@ -115,6 +115,7 @@ obj-$(CONFIG_SPI_ROCKCHIP) += spi-rockc
|
@@ -116,6 +116,7 @@ obj-$(CONFIG_SPI_ROCKCHIP) += spi-rockc
|
||||||
obj-$(CONFIG_SPI_ROCKCHIP_SFC) += spi-rockchip-sfc.o
|
obj-$(CONFIG_SPI_ROCKCHIP_SFC) += spi-rockchip-sfc.o
|
||||||
obj-$(CONFIG_SPI_RB4XX) += spi-rb4xx.o
|
obj-$(CONFIG_SPI_RB4XX) += spi-rb4xx.o
|
||||||
obj-$(CONFIG_MACH_REALTEK_RTL) += spi-realtek-rtl.o
|
obj-$(CONFIG_MACH_REALTEK_RTL) += spi-realtek-rtl.o
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/nvme/host/pci.c
|
--- a/drivers/nvme/host/pci.c
|
||||||
+++ b/drivers/nvme/host/pci.c
|
+++ b/drivers/nvme/host/pci.c
|
||||||
@@ -1932,6 +1932,7 @@ static void nvme_free_host_mem(struct nv
|
@@ -1948,6 +1948,7 @@ static void nvme_free_host_mem(struct nv
|
||||||
dev->nr_host_mem_descs = 0;
|
dev->nr_host_mem_descs = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,
|
static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,
|
||||||
u32 chunk_size)
|
u32 chunk_size)
|
||||||
{
|
{
|
||||||
@@ -2000,9 +2001,11 @@ out:
|
@@ -2016,9 +2017,11 @@ out:
|
||||||
dev->host_mem_descs = NULL;
|
dev->host_mem_descs = NULL;
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@ -38,7 +38,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
u64 min_chunk = min_t(u64, preferred, PAGE_SIZE * MAX_ORDER_NR_PAGES);
|
u64 min_chunk = min_t(u64, preferred, PAGE_SIZE * MAX_ORDER_NR_PAGES);
|
||||||
u64 hmminds = max_t(u32, dev->ctrl.hmminds * 4096, PAGE_SIZE * 2);
|
u64 hmminds = max_t(u32, dev->ctrl.hmminds * 4096, PAGE_SIZE * 2);
|
||||||
u64 chunk_size;
|
u64 chunk_size;
|
||||||
@@ -2015,6 +2018,7 @@ static int nvme_alloc_host_mem(struct nv
|
@@ -2031,6 +2034,7 @@ static int nvme_alloc_host_mem(struct nv
|
||||||
nvme_free_host_mem(dev);
|
nvme_free_host_mem(dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
|
|||||||
|
|
||||||
--- a/drivers/pci/probe.c
|
--- a/drivers/pci/probe.c
|
||||||
+++ b/drivers/pci/probe.c
|
+++ b/drivers/pci/probe.c
|
||||||
@@ -968,9 +968,6 @@ static int pci_register_host_bridge(stru
|
@@ -967,9 +967,6 @@ static int pci_register_host_bridge(stru
|
||||||
else
|
else
|
||||||
pr_info("PCI host bridge to bus %s\n", name);
|
pr_info("PCI host bridge to bus %s\n", name);
|
||||||
|
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
From 0553897d77e849a86e836ddf1e0c0dbbd8e64f83 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||||
|
Date: Mon, 20 Jan 2025 10:40:09 +0000
|
||||||
|
Subject: [PATCH] media: i2c: imx477: Add further link frequency options
|
||||||
|
|
||||||
|
https://github.com/raspberrypi/linux/issues/6004 reports further
|
||||||
|
issues with GPS interference.
|
||||||
|
|
||||||
|
Untested, but adds further link frequency options.
|
||||||
|
|
||||||
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||||
|
---
|
||||||
|
drivers/media/i2c/imx477.c | 33 +++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 33 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/media/i2c/imx477.c
|
||||||
|
+++ b/drivers/media/i2c/imx477.c
|
||||||
|
@@ -169,12 +169,18 @@ enum {
|
||||||
|
IMX477_LINK_FREQ_450MHZ,
|
||||||
|
IMX477_LINK_FREQ_453MHZ,
|
||||||
|
IMX477_LINK_FREQ_456MHZ,
|
||||||
|
+ IMX477_LINK_FREQ_459MHZ,
|
||||||
|
+ IMX477_LINK_FREQ_462MHZ,
|
||||||
|
+ IMX477_LINK_FREQ_498MHZ,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const s64 link_freqs[] = {
|
||||||
|
[IMX477_LINK_FREQ_450MHZ] = 450000000,
|
||||||
|
[IMX477_LINK_FREQ_453MHZ] = 453000000,
|
||||||
|
[IMX477_LINK_FREQ_456MHZ] = 456000000,
|
||||||
|
+ [IMX477_LINK_FREQ_459MHZ] = 459000000,
|
||||||
|
+ [IMX477_LINK_FREQ_462MHZ] = 462000000,
|
||||||
|
+ [IMX477_LINK_FREQ_498MHZ] = 498000000,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 450MHz is the nominal "default" link frequency */
|
||||||
|
@@ -193,6 +199,21 @@ static const struct imx477_reg link_456M
|
||||||
|
{0x030F, 0x98},
|
||||||
|
};
|
||||||
|
|
||||||
|
+static const struct imx477_reg link_459Mhz_regs[] = {
|
||||||
|
+ {0x030E, 0x00},
|
||||||
|
+ {0x030F, 0x99},
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct imx477_reg link_462Mhz_regs[] = {
|
||||||
|
+ {0x030E, 0x00},
|
||||||
|
+ {0x030F, 0x9a},
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct imx477_reg link_498Mhz_regs[] = {
|
||||||
|
+ {0x030E, 0x00},
|
||||||
|
+ {0x030F, 0xa6},
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static const struct imx477_reg_list link_freq_regs[] = {
|
||||||
|
[IMX477_LINK_FREQ_450MHZ] = {
|
||||||
|
.regs = link_450Mhz_regs,
|
||||||
|
@@ -206,6 +227,18 @@ static const struct imx477_reg_list link
|
||||||
|
.regs = link_456Mhz_regs,
|
||||||
|
.num_of_regs = ARRAY_SIZE(link_456Mhz_regs)
|
||||||
|
},
|
||||||
|
+ [IMX477_LINK_FREQ_459MHZ] = {
|
||||||
|
+ .regs = link_459Mhz_regs,
|
||||||
|
+ .num_of_regs = ARRAY_SIZE(link_459Mhz_regs)
|
||||||
|
+ },
|
||||||
|
+ [IMX477_LINK_FREQ_462MHZ] = {
|
||||||
|
+ .regs = link_462Mhz_regs,
|
||||||
|
+ .num_of_regs = ARRAY_SIZE(link_462Mhz_regs)
|
||||||
|
+ },
|
||||||
|
+ [IMX477_LINK_FREQ_498MHZ] = {
|
||||||
|
+ .regs = link_498Mhz_regs,
|
||||||
|
+ .num_of_regs = ARRAY_SIZE(link_498Mhz_regs)
|
||||||
|
+ },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct imx477_reg mode_common_regs[] = {
|
@ -0,0 +1,82 @@
|
|||||||
|
From 9da8d6df2051478f0ba16d73c65995955c19cb3a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Elwell <phil@raspberrypi.com>
|
||||||
|
Date: Tue, 18 Mar 2025 13:09:11 +0000
|
||||||
|
Subject: [PATCH] overlays: Fix some unusable fragments
|
||||||
|
|
||||||
|
A forthcoming overlaycheck update looks for dormant fragments with no
|
||||||
|
parameters to enable them. The test discovered some real errors, which
|
||||||
|
this patch fixes, and one case where some fragments aren't yet being
|
||||||
|
used, which this comments out until they are.
|
||||||
|
|
||||||
|
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/overlays/rpi-poe-overlay.dts | 2 +-
|
||||||
|
arch/arm/boot/dts/overlays/rpi-poe-plus-overlay.dts | 2 +-
|
||||||
|
arch/arm/boot/dts/overlays/sx150x-overlay.dts | 2 +-
|
||||||
|
arch/arm/boot/dts/overlays/vc4-kms-dpi-panel-overlay.dts | 4 ++++
|
||||||
|
4 files changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/dts/overlays/rpi-poe-overlay.dts
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/rpi-poe-overlay.dts
|
||||||
|
@@ -145,7 +145,7 @@
|
||||||
|
poe_fan_temp2_hyst = <&trip2>,"hysteresis:0";
|
||||||
|
poe_fan_temp3 = <&trip3>,"temperature:0";
|
||||||
|
poe_fan_temp3_hyst = <&trip3>,"hysteresis:0";
|
||||||
|
- i2c = <0>, "+5+6",
|
||||||
|
+ i2c = <0>, "+7+8",
|
||||||
|
<&fwpwm>,"status=disabled",
|
||||||
|
<&i2c_bus>,"status=okay",
|
||||||
|
<&poe_mfd>,"status=okay",
|
||||||
|
--- a/arch/arm/boot/dts/overlays/rpi-poe-plus-overlay.dts
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/rpi-poe-plus-overlay.dts
|
||||||
|
@@ -28,7 +28,7 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
- i2c = <0>, "+5+6",
|
||||||
|
+ i2c = <0>, "+7+8",
|
||||||
|
<&fwpwm>,"status=disabled",
|
||||||
|
<&rpi_poe_power_supply>,"status=disabled",
|
||||||
|
<&i2c_bus>,"status=okay",
|
||||||
|
--- a/arch/arm/boot/dts/overlays/sx150x-overlay.dts
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/sx150x-overlay.dts
|
||||||
|
@@ -1681,7 +1681,7 @@
|
||||||
|
sx1507-1-3E-int-gpio = <0>,"+67+99", <&sx150x_1_3E_pins>,"brcm,pins:0", <&sx1507_1_3E>,"interrupts:0";
|
||||||
|
sx1507-0-3F-int-gpio = <0>,"+68+100", <&sx150x_0_3F_pins>,"brcm,pins:0", <&sx1507_0_3F>,"interrupts:0";
|
||||||
|
sx1507-1-3F-int-gpio = <0>,"+69+101", <&sx150x_1_3F_pins>,"brcm,pins:0", <&sx1507_1_3F>,"interrupts:0";
|
||||||
|
- sx1507-0-70-int-gpio = <0>,"+60+102", <&sx150x_0_70_pins>,"brcm,pins:0", <&sx1507_0_70>,"interrupts:0";
|
||||||
|
+ sx1507-0-70-int-gpio = <0>,"+70+102", <&sx150x_0_70_pins>,"brcm,pins:0", <&sx1507_0_70>,"interrupts:0";
|
||||||
|
sx1507-1-70-int-gpio = <0>,"+71+103", <&sx150x_1_70_pins>,"brcm,pins:0", <&sx1507_1_70>,"interrupts:0";
|
||||||
|
sx1507-0-71-int-gpio = <0>,"+72+104", <&sx150x_0_71_pins>,"brcm,pins:0", <&sx1507_0_71>,"interrupts:0";
|
||||||
|
sx1507-1-71-int-gpio = <0>,"+73+105", <&sx150x_1_71_pins>,"brcm,pins:0", <&sx1507_1_71>,"interrupts:0";
|
||||||
|
--- a/arch/arm/boot/dts/overlays/vc4-kms-dpi-panel-overlay.dts
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/vc4-kms-dpi-panel-overlay.dts
|
||||||
|
@@ -42,24 +42,28 @@
|
||||||
|
pinctrl-0 = <&dpi_18bit_gpio0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
+#if 0
|
||||||
|
fragment@92 {
|
||||||
|
target = <&dpi>;
|
||||||
|
__dormant__ {
|
||||||
|
pinctrl-0 = <&dpi_gpio0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
+#endif
|
||||||
|
fragment@93 {
|
||||||
|
target = <&dpi>;
|
||||||
|
__dormant__ {
|
||||||
|
pinctrl-0 = <&dpi_16bit_cpadhi_gpio0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
+#if 0
|
||||||
|
fragment@94 {
|
||||||
|
target = <&dpi>;
|
||||||
|
__dormant__ {
|
||||||
|
pinctrl-0 = <&dpi_16bit_gpio0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
at056tn53v1 = <0>, "+0+90";
|
@ -0,0 +1,33 @@
|
|||||||
|
From bba53a117a4a5c29da892962332ff1605990e17a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Elwell <phil@raspberrypi.com>
|
||||||
|
Date: Wed, 26 Mar 2025 11:28:28 +0000
|
||||||
|
Subject: [PATCH] dts: rp1: Don't use DMA with UARTs
|
||||||
|
|
||||||
|
DMA has been enabled on RP1's UART0, but with mixed success. Transmits
|
||||||
|
seem to work, but the DMA interface is not well suited to receiving
|
||||||
|
arbitrary amounts of data. In particular, the PL011 driver is slow to
|
||||||
|
pass on the received data, batching it into large blocks.
|
||||||
|
|
||||||
|
On balance, it's better to just disable the DMA support. As with the
|
||||||
|
other UARTs, the required runes are left in the DTS as comments.
|
||||||
|
|
||||||
|
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/broadcom/rp1.dtsi | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/arm64/boot/dts/broadcom/rp1.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/broadcom/rp1.dtsi
|
||||||
|
@@ -65,9 +65,9 @@
|
||||||
|
interrupts = <RP1_INT_UART0 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
|
||||||
|
clock-names = "uartclk", "apb_pclk";
|
||||||
|
- dmas = <&rp1_dma RP1_DMA_UART0_TX>,
|
||||||
|
- <&rp1_dma RP1_DMA_UART0_RX>;
|
||||||
|
- dma-names = "tx", "rx";
|
||||||
|
+ // dmas = <&rp1_dma RP1_DMA_UART0_TX>,
|
||||||
|
+ // <&rp1_dma RP1_DMA_UART0_RX>;
|
||||||
|
+ // dma-names = "tx", "rx";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
arm,primecell-periphid = <0x00341011>;
|
||||||
|
uart-has-rtscts;
|
@ -33,7 +33,7 @@ define Build/bcm4908img
|
|||||||
cp -r $(DEVICE_NAME)/* $@-bootfs/
|
cp -r $(DEVICE_NAME)/* $@-bootfs/
|
||||||
touch $@-bootfs/1-openwrt
|
touch $@-bootfs/1-openwrt
|
||||||
cp $(DTS_DIR)/$(firstword $(DEVICE_DTS)).dtb $@-bootfs/94908.dtb
|
cp $(DTS_DIR)/$(firstword $(DEVICE_DTS)).dtb $@-bootfs/94908.dtb
|
||||||
cp $(KDIR)/bcm63xx-cfe/$(subst _,$(comma),$(DEVICE_NAME))/cferam.000 $@-bootfs/
|
cp $(STAGING_DIR_IMAGE)/bcm63xx-cfe/$(subst _,$(comma),$(DEVICE_NAME))/cferam.000 $@-bootfs/
|
||||||
cp $(IMAGE_KERNEL) $@-bootfs/vmlinux.lz
|
cp $(IMAGE_KERNEL) $@-bootfs/vmlinux.lz
|
||||||
|
|
||||||
$(STAGING_DIR_HOST)/bin/mkfs.jffs2 --pad=0x800000 --little-endian --squash-uids \
|
$(STAGING_DIR_HOST)/bin/mkfs.jffs2 --pad=0x800000 --little-endian --squash-uids \
|
||||||
|
@ -136,7 +136,7 @@ define Build/cfe-jffs2-cferam
|
|||||||
# will have version 0 and let cferam be the second (version 1).
|
# will have version 0 and let cferam be the second (version 1).
|
||||||
touch $@-cferam/1-openwrt
|
touch $@-cferam/1-openwrt
|
||||||
# Add cferam as the last file in the JFFS2 partition
|
# Add cferam as the last file in the JFFS2 partition
|
||||||
cp $(KDIR)/bcm63xx-cfe/$(CFE_RAM_FILE) $@-cferam/$(CFE_RAM_JFFS2_NAME)
|
cp $(STAGING_DIR_IMAGE)/bcm63xx-cfe/$(CFE_RAM_FILE) $@-cferam/$(CFE_RAM_JFFS2_NAME)
|
||||||
|
|
||||||
# The JFFS2 partition creation should result in the following
|
# The JFFS2 partition creation should result in the following
|
||||||
# layout:
|
# layout:
|
||||||
|
@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
ARCH:=arm
|
ARCH:=arm
|
||||||
BOARD:=gemini
|
BOARD:=gemini
|
||||||
BOARDNAME:=Cortina Systems CS351x
|
BOARDNAME:=Cortina Systems CS351x
|
||||||
FEATURES:=squashfs pci rtc usb dt gpio display ext4 rootfs-part boot-part
|
FEATURES:=squashfs pci rtc usb usbgadget dt gpio display ext4 rootfs-part boot-part
|
||||||
CPU_TYPE:=fa526
|
CPU_TYPE:=fa526
|
||||||
SUBTARGETS:=generic
|
SUBTARGETS:=generic
|
||||||
|
|
||||||
|
11
target/linux/gemini/base-files/etc/board.d/02_usbgadget
Normal file
11
target/linux/gemini/base-files/etc/board.d/02_usbgadget
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
. /lib/functions.sh
|
||||||
|
|
||||||
|
case "$(board_name)" in
|
||||||
|
dlink,dns-313)
|
||||||
|
uci set usbgadget.@preset[0].name="acm"
|
||||||
|
uci set usbgadget.@preset[0].UDC="69000000.usb"
|
||||||
|
uci commit usbgadget
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
4
target/linux/gemini/base-files/etc/inittab
Normal file
4
target/linux/gemini/base-files/etc/inittab
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
::sysinit:/etc/init.d/rcS S boot
|
||||||
|
::shutdown:/etc/init.d/rcS K shutdown
|
||||||
|
::askconsole:/usr/libexec/login.sh
|
||||||
|
ttyGS0::askfirst:/usr/libexec/login.sh
|
@ -170,7 +170,7 @@ define Device/dlink_dns-313
|
|||||||
DEVICE_VENDOR := D-Link
|
DEVICE_VENDOR := D-Link
|
||||||
DEVICE_MODEL := DNS-313 1-Bay Network Storage Enclosure
|
DEVICE_MODEL := DNS-313 1-Bay Network Storage Enclosure
|
||||||
DEVICE_DTS := gemini-dlink-dns-313
|
DEVICE_DTS := gemini-dlink-dns-313
|
||||||
DEVICE_PACKAGES := $(GEMINI_NAS_PACKAGES)
|
DEVICE_PACKAGES := $(GEMINI_NAS_PACKAGES) usbgadget-acm
|
||||||
BLOCKSIZE := 1k
|
BLOCKSIZE := 1k
|
||||||
FILESYSTEMS := ext4
|
FILESYSTEMS := ext4
|
||||||
IMAGES := factory.bin.gz
|
IMAGES := factory.bin.gz
|
||||||
|
@ -1,18 +1,7 @@
|
|||||||
|
From 7304d1909080ef0c9da703500a97f46c98393fcd Mon Sep 17 00:00:00 2001
|
||||||
From: Md Sadre Alam <quic_mdalam@quicinc.com>
|
From: Md Sadre Alam <quic_mdalam@quicinc.com>
|
||||||
To: <broonie@kernel.org>, <robh@kernel.org>, <krzk+dt@kernel.org>,
|
Date: Mon, 24 Feb 2025 16:44:14 +0530
|
||||||
<conor+dt@kernel.org>, <andersson@kernel.org>,
|
Subject: [PATCH] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface
|
||||||
<konradybcio@kernel.org>, <miquel.raynal@bootlin.com>,
|
|
||||||
<richard@nod.at>, <vigneshr@ti.com>,
|
|
||||||
<manivannan.sadhasivam@linaro.org>,
|
|
||||||
<linux-arm-msm@vger.kernel.org>, <linux-spi@vger.kernel.org>,
|
|
||||||
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
|
|
||||||
<linux-mtd@lists.infradead.org>
|
|
||||||
Cc: <quic_srichara@quicinc.com>, <quic_varada@quicinc.com>,
|
|
||||||
<quic_mdalam@quicinc.com>
|
|
||||||
Subject: [PATCH v14 6/8] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface
|
|
||||||
Date: Wed, 20 Nov 2024 14:45:04 +0530 [thread overview]
|
|
||||||
Message-ID: <20241120091507.1404368-7-quic_mdalam@quicinc.com> (raw)
|
|
||||||
In-Reply-To: <20241120091507.1404368-1-quic_mdalam@quicinc.com>
|
|
||||||
|
|
||||||
This driver implements support for the SPI-NAND mode of QCOM NAND Flash
|
This driver implements support for the SPI-NAND mode of QCOM NAND Flash
|
||||||
Interface as a SPI-MEM controller with pipelined ECC capability.
|
Interface as a SPI-MEM controller with pipelined ECC capability.
|
||||||
@ -22,199 +11,23 @@ Signed-off-by: Sricharan Ramabadhran <quic_srichara@quicinc.com>
|
|||||||
Co-developed-by: Varadarajan Narayanan <quic_varada@quicinc.com>
|
Co-developed-by: Varadarajan Narayanan <quic_varada@quicinc.com>
|
||||||
Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com>
|
Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com>
|
||||||
Signed-off-by: Md Sadre Alam <quic_mdalam@quicinc.com>
|
Signed-off-by: Md Sadre Alam <quic_mdalam@quicinc.com>
|
||||||
|
Link: https://patch.msgid.link/20250224111414.2809669-3-quic_mdalam@quicinc.com
|
||||||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||||
---
|
---
|
||||||
|
|
||||||
Change in [v14]
|
|
||||||
|
|
||||||
* No Change
|
|
||||||
|
|
||||||
Change in [v13]
|
|
||||||
|
|
||||||
* Changed return type of qcom_spi_cmd_mapping() from u32 to
|
|
||||||
int to fix the kernel test bot warning
|
|
||||||
* Changed type of variable cmd in qcom_spi_write_page() from u32
|
|
||||||
to int
|
|
||||||
* Removed unused variable s_op from qcom_spi_write_page()
|
|
||||||
* Updated return value variable type from u32 to int in
|
|
||||||
qcom_spi_send_cmdaddr()
|
|
||||||
|
|
||||||
Change in [v12]
|
|
||||||
|
|
||||||
* Added obj-$(CONFIG_SPI_QPIC_SNAND) += qpic_common.o in Makefile
|
|
||||||
to build qpic_common.c based on CONFIG_SPI_QPIC_SNAND
|
|
||||||
|
|
||||||
Change in [v11]
|
|
||||||
|
|
||||||
* Fixed build error reported by kernel test bot
|
|
||||||
* Changed "depends on MTD" to "select MTD" in
|
|
||||||
drivers/spi/Kconfig file
|
|
||||||
|
|
||||||
Change in [v10]
|
|
||||||
|
|
||||||
* Fixed compilation warnings reported by kernel test robot.
|
|
||||||
* Added depends on CONFIG_MTD
|
|
||||||
* removed extra bracket from statement if (i == (num_cw - 1)) in
|
|
||||||
qcom_spi_program_raw() api.
|
|
||||||
|
|
||||||
Change in [v9]
|
|
||||||
|
|
||||||
* Changed data type of addr1, addr2, cmd, to __le32 in qpic_spi_nand
|
|
||||||
structure
|
|
||||||
* In qcom_spi_set_read_loc_first() api added cpu_to_le32() macro to fix
|
|
||||||
compilation warning
|
|
||||||
* In qcom_spi_set_read_loc_last() api added cpu_to_le32() macro to fix
|
|
||||||
compilation warning
|
|
||||||
* In qcom_spi_init() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_ecc_init_ctx_pipelined() api removed unused variables
|
|
||||||
reqs, user, step_size, strength and added cpu_to_le32() macro as well
|
|
||||||
to fix compilation warning
|
|
||||||
* In qcom_spi_read_last_cw() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_check_error() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_read_page_ecc() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_read_page_oob() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_program_raw() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_program_ecc() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_program_oob() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_send_cmdaddr() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
* In qcom_spi_io_op() api added cpu_to_le32() macro to fix compilation
|
|
||||||
warning
|
|
||||||
|
|
||||||
Change in [v8]
|
|
||||||
|
|
||||||
* Included "bitfield.h" file to /spi-qpic-snand.c
|
|
||||||
to fix compilation warning reported by kernel test robot
|
|
||||||
* Removed unused variable "steps" in
|
|
||||||
qcom_spi_ecc_init_ctx_pipelined() to fix compilation warning
|
|
||||||
|
|
||||||
Change in [v7]
|
|
||||||
|
|
||||||
* Added read_oob() and write_oob() api
|
|
||||||
|
|
||||||
* Handled offset value for oob layout
|
|
||||||
|
|
||||||
* Made CONFIG_SPI_QPIC_SNAND as bool
|
|
||||||
|
|
||||||
* Added macro ecceng_to_qspi()
|
|
||||||
|
|
||||||
* Added FIELD_PREP() Macro in spi init
|
|
||||||
|
|
||||||
* Added else condition in
|
|
||||||
qcom_spi_ecc_finish_io_req_pipelined()
|
|
||||||
for corrected ecc
|
|
||||||
|
|
||||||
* Handled multiple error condition for api
|
|
||||||
qcom_spi_cmd_mapping()
|
|
||||||
|
|
||||||
* Fix typo for printing debug message
|
|
||||||
|
|
||||||
Change in [v6]
|
|
||||||
|
|
||||||
* Added separate qpic_spi_nand{...} struct
|
|
||||||
|
|
||||||
* moved qpic_ecc and qcom_ecc_stats struct to
|
|
||||||
spi-qpic-snand.c file, since its spi nand
|
|
||||||
specific
|
|
||||||
|
|
||||||
* Added FIELD_PREP() and GENMASK() macro
|
|
||||||
|
|
||||||
* Removed rawnand.h and partition.h from
|
|
||||||
spi-qpic-snand.c
|
|
||||||
|
|
||||||
* Removed oob_buff assignment form
|
|
||||||
qcom_spi_write_page_cache
|
|
||||||
|
|
||||||
* Added qcom_nand_unalloc() in remove() path
|
|
||||||
|
|
||||||
* Fixes all all comments
|
|
||||||
|
|
||||||
Change in [v5]
|
|
||||||
|
|
||||||
* Added raw_read() and raw_write() api
|
|
||||||
|
|
||||||
* Updated commit message
|
|
||||||
|
|
||||||
* Removed register indirection
|
|
||||||
|
|
||||||
* Added qcom_spi_ prefix to all the api
|
|
||||||
|
|
||||||
* Removed snand_set_reg() api.
|
|
||||||
|
|
||||||
* Fixed nandbiterr issue
|
|
||||||
|
|
||||||
* Removed hardcoded num_cw and made it variable
|
|
||||||
|
|
||||||
* Removed hardcoded value for mtd pagesize
|
|
||||||
|
|
||||||
* Added -ENOSUPPORT in cmd mapping for unsupported
|
|
||||||
commands
|
|
||||||
|
|
||||||
* Replace if..else with switch..case statement
|
|
||||||
|
|
||||||
Change in [v4]
|
|
||||||
|
|
||||||
* No change
|
|
||||||
|
|
||||||
Change in [v3]
|
|
||||||
|
|
||||||
* Set SPI_QPIC_SNAND to n and added COMPILE_TEST in Kconfig
|
|
||||||
|
|
||||||
* Made driver name sorted in Make file
|
|
||||||
|
|
||||||
* Made comment like c++
|
|
||||||
|
|
||||||
* Changed macro to functions, snandc_set_read_loc_last()
|
|
||||||
and snandc_set_read_loc_first()
|
|
||||||
|
|
||||||
* Added error handling in snandc_set_reg()
|
|
||||||
|
|
||||||
* Changed into normal conditional statement for
|
|
||||||
return snandc->ecc_stats.failed ? -EBADMSG :
|
|
||||||
snandc->ecc_stats.bitflips;
|
|
||||||
|
|
||||||
* Remove cast of wbuf in qpic_snand_program_execute()
|
|
||||||
function
|
|
||||||
|
|
||||||
* Made num_cw variable instead hardcoded value
|
|
||||||
|
|
||||||
* changed if..else condition of function qpic_snand_io_op()
|
|
||||||
to switch..case statement
|
|
||||||
|
|
||||||
* Added __devm_spi_alloc_controller() api instead of
|
|
||||||
devm_spi_alloc_master()
|
|
||||||
|
|
||||||
* Disabling clock in remove path
|
|
||||||
|
|
||||||
Change in [v2]
|
|
||||||
|
|
||||||
* Added initial support for SPI-NAND driver
|
|
||||||
|
|
||||||
Change in [v1]
|
|
||||||
|
|
||||||
* Added RFC patch for design review
|
|
||||||
|
|
||||||
drivers/mtd/nand/Makefile | 4 +
|
drivers/mtd/nand/Makefile | 4 +
|
||||||
drivers/spi/Kconfig | 9 +
|
drivers/spi/Kconfig | 9 +
|
||||||
drivers/spi/Makefile | 1 +
|
drivers/spi/Makefile | 1 +
|
||||||
drivers/spi/spi-qpic-snand.c | 1633 ++++++++++++++++++++++++++
|
drivers/spi/spi-qpic-snand.c | 1631 ++++++++++++++++++++++++++
|
||||||
include/linux/mtd/nand-qpic-common.h | 7 +
|
include/linux/mtd/nand-qpic-common.h | 7 +
|
||||||
5 files changed, 1654 insertions(+)
|
5 files changed, 1652 insertions(+)
|
||||||
create mode 100644 drivers/spi/spi-qpic-snand.c
|
create mode 100644 drivers/spi/spi-qpic-snand.c
|
||||||
|
|
||||||
--- a/drivers/mtd/nand/Makefile
|
--- a/drivers/mtd/nand/Makefile
|
||||||
+++ b/drivers/mtd/nand/Makefile
|
+++ b/drivers/mtd/nand/Makefile
|
||||||
@@ -4,7 +4,11 @@ nandcore-objs := core.o bbt.o
|
@@ -3,7 +3,11 @@
|
||||||
|
nandcore-objs := core.o bbt.o
|
||||||
obj-$(CONFIG_MTD_NAND_CORE) += nandcore.o
|
obj-$(CONFIG_MTD_NAND_CORE) += nandcore.o
|
||||||
obj-$(CONFIG_MTD_NAND_ECC_MEDIATEK) += ecc-mtk.o
|
obj-$(CONFIG_MTD_NAND_ECC_MEDIATEK) += ecc-mtk.o
|
||||||
obj-$(CONFIG_MTD_NAND_MTK_BMT) += mtk_bmt.o mtk_bmt_v2.o mtk_bmt_bbt.o mtk_bmt_nmbm.o
|
|
||||||
+ifeq ($(CONFIG_SPI_QPIC_SNAND),y)
|
+ifeq ($(CONFIG_SPI_QPIC_SNAND),y)
|
||||||
+obj-$(CONFIG_SPI_QPIC_SNAND) += qpic_common.o
|
+obj-$(CONFIG_SPI_QPIC_SNAND) += qpic_common.o
|
||||||
+else
|
+else
|
||||||
@ -253,7 +66,7 @@ Change in [v1]
|
|||||||
obj-$(CONFIG_SPI_ROCKCHIP_SFC) += spi-rockchip-sfc.o
|
obj-$(CONFIG_SPI_ROCKCHIP_SFC) += spi-rockchip-sfc.o
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/spi/spi-qpic-snand.c
|
+++ b/drivers/spi/spi-qpic-snand.c
|
||||||
@@ -0,0 +1,1633 @@
|
@@ -0,0 +1,1631 @@
|
||||||
+/*
|
+/*
|
||||||
+ * SPDX-License-Identifier: GPL-2.0
|
+ * SPDX-License-Identifier: GPL-2.0
|
||||||
+ *
|
+ *
|
||||||
@ -314,6 +127,7 @@ Change in [v1]
|
|||||||
+#define BAD_BLOCK_MARKER_SIZE 0x2
|
+#define BAD_BLOCK_MARKER_SIZE 0x2
|
||||||
+#define OOB_BUF_SIZE 128
|
+#define OOB_BUF_SIZE 128
|
||||||
+#define ecceng_to_qspi(eng) container_of(eng, struct qpic_spi_nand, ecc_eng)
|
+#define ecceng_to_qspi(eng) container_of(eng, struct qpic_spi_nand, ecc_eng)
|
||||||
|
+
|
||||||
+struct qpic_snand_op {
|
+struct qpic_snand_op {
|
||||||
+ u32 cmd_reg;
|
+ u32 cmd_reg;
|
||||||
+ u32 addr1_reg;
|
+ u32 addr1_reg;
|
||||||
@ -1456,64 +1270,63 @@ Change in [v1]
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static int qcom_spi_cmd_mapping(struct qcom_nand_controller *snandc, u32 opcode)
|
+static int qcom_spi_cmd_mapping(struct qcom_nand_controller *snandc, u32 opcode, u32 *cmd)
|
||||||
+{
|
+{
|
||||||
+ int cmd = 0x0;
|
|
||||||
+
|
|
||||||
+ switch (opcode) {
|
+ switch (opcode) {
|
||||||
+ case SPINAND_RESET:
|
+ case SPINAND_RESET:
|
||||||
+ cmd = (SPI_WP | SPI_HOLD | SPI_TRANSFER_MODE_x1 | OP_RESET_DEVICE);
|
+ *cmd = (SPI_WP | SPI_HOLD | SPI_TRANSFER_MODE_x1 | OP_RESET_DEVICE);
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_READID:
|
+ case SPINAND_READID:
|
||||||
+ cmd = (SPI_WP | SPI_HOLD | SPI_TRANSFER_MODE_x1 | OP_FETCH_ID);
|
+ *cmd = (SPI_WP | SPI_HOLD | SPI_TRANSFER_MODE_x1 | OP_FETCH_ID);
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_GET_FEATURE:
|
+ case SPINAND_GET_FEATURE:
|
||||||
+ cmd = (SPI_TRANSFER_MODE_x1 | SPI_WP | SPI_HOLD | ACC_FEATURE);
|
+ *cmd = (SPI_TRANSFER_MODE_x1 | SPI_WP | SPI_HOLD | ACC_FEATURE);
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_SET_FEATURE:
|
+ case SPINAND_SET_FEATURE:
|
||||||
+ cmd = (SPI_TRANSFER_MODE_x1 | SPI_WP | SPI_HOLD | ACC_FEATURE |
|
+ *cmd = (SPI_TRANSFER_MODE_x1 | SPI_WP | SPI_HOLD | ACC_FEATURE |
|
||||||
+ QPIC_SET_FEATURE);
|
+ QPIC_SET_FEATURE);
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_READ:
|
+ case SPINAND_READ:
|
||||||
+ if (snandc->qspi->raw_rw) {
|
+ if (snandc->qspi->raw_rw) {
|
||||||
+ cmd = (PAGE_ACC | LAST_PAGE | SPI_TRANSFER_MODE_x1 |
|
+ *cmd = (PAGE_ACC | LAST_PAGE | SPI_TRANSFER_MODE_x1 |
|
||||||
+ SPI_WP | SPI_HOLD | OP_PAGE_READ);
|
+ SPI_WP | SPI_HOLD | OP_PAGE_READ);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ cmd = (PAGE_ACC | LAST_PAGE | SPI_TRANSFER_MODE_x1 |
|
+ *cmd = (PAGE_ACC | LAST_PAGE | SPI_TRANSFER_MODE_x1 |
|
||||||
+ SPI_WP | SPI_HOLD | OP_PAGE_READ_WITH_ECC);
|
+ SPI_WP | SPI_HOLD | OP_PAGE_READ_WITH_ECC);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_ERASE:
|
+ case SPINAND_ERASE:
|
||||||
+ cmd = OP_BLOCK_ERASE | PAGE_ACC | LAST_PAGE | SPI_WP |
|
+ *cmd = OP_BLOCK_ERASE | PAGE_ACC | LAST_PAGE | SPI_WP |
|
||||||
+ SPI_HOLD | SPI_TRANSFER_MODE_x1;
|
+ SPI_HOLD | SPI_TRANSFER_MODE_x1;
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_WRITE_EN:
|
+ case SPINAND_WRITE_EN:
|
||||||
+ cmd = SPINAND_WRITE_EN;
|
+ *cmd = SPINAND_WRITE_EN;
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_PROGRAM_EXECUTE:
|
+ case SPINAND_PROGRAM_EXECUTE:
|
||||||
+ cmd = (PAGE_ACC | LAST_PAGE | SPI_TRANSFER_MODE_x1 |
|
+ *cmd = (PAGE_ACC | LAST_PAGE | SPI_TRANSFER_MODE_x1 |
|
||||||
+ SPI_WP | SPI_HOLD | OP_PROGRAM_PAGE);
|
+ SPI_WP | SPI_HOLD | OP_PROGRAM_PAGE);
|
||||||
+ break;
|
+ break;
|
||||||
+ case SPINAND_PROGRAM_LOAD:
|
+ case SPINAND_PROGRAM_LOAD:
|
||||||
+ cmd = SPINAND_PROGRAM_LOAD;
|
+ *cmd = SPINAND_PROGRAM_LOAD;
|
||||||
+ break;
|
+ break;
|
||||||
+ default:
|
+ default:
|
||||||
+ dev_err(snandc->dev, "Opcode not supported: %u\n", opcode);
|
+ dev_err(snandc->dev, "Opcode not supported: %u\n", opcode);
|
||||||
+ return -EOPNOTSUPP;
|
+ return -EOPNOTSUPP;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ return cmd;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static int qcom_spi_write_page(struct qcom_nand_controller *snandc,
|
+static int qcom_spi_write_page(struct qcom_nand_controller *snandc,
|
||||||
+ const struct spi_mem_op *op)
|
+ const struct spi_mem_op *op)
|
||||||
+{
|
+{
|
||||||
+ int cmd;
|
+ int ret;
|
||||||
|
+ u32 cmd;
|
||||||
+
|
+
|
||||||
+ cmd = qcom_spi_cmd_mapping(snandc, op->cmd.opcode);
|
+ ret = qcom_spi_cmd_mapping(snandc, op->cmd.opcode, &cmd);
|
||||||
+ if (cmd < 0)
|
+ if (ret < 0)
|
||||||
+ return cmd;
|
+ return ret;
|
||||||
+
|
+
|
||||||
+ if (op->cmd.opcode == SPINAND_PROGRAM_LOAD)
|
+ if (op->cmd.opcode == SPINAND_PROGRAM_LOAD)
|
||||||
+ snandc->qspi->data_buf = (u8 *)op->data.buf.out;
|
+ snandc->qspi->data_buf = (u8 *)op->data.buf.out;
|
||||||
@ -1528,12 +1341,10 @@ Change in [v1]
|
|||||||
+ u32 cmd;
|
+ u32 cmd;
|
||||||
+ int ret, opcode;
|
+ int ret, opcode;
|
||||||
+
|
+
|
||||||
+ ret = qcom_spi_cmd_mapping(snandc, op->cmd.opcode);
|
+ ret = qcom_spi_cmd_mapping(snandc, op->cmd.opcode, &cmd);
|
||||||
+ if (ret < 0)
|
+ if (ret < 0)
|
||||||
+ return ret;
|
+ return ret;
|
||||||
+
|
+
|
||||||
+ cmd = ret;
|
|
||||||
+
|
|
||||||
+ s_op.cmd_reg = cmd;
|
+ s_op.cmd_reg = cmd;
|
||||||
+ s_op.addr1_reg = op->addr.val;
|
+ s_op.addr1_reg = op->addr.val;
|
||||||
+ s_op.addr2_reg = 0;
|
+ s_op.addr2_reg = 0;
|
@ -0,0 +1,28 @@
|
|||||||
|
From cf1ba3cb245020459f2ca446b7a7b199839f5d83 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dan Carpenter <dan.carpenter@linaro.org>
|
||||||
|
Date: Thu, 6 Mar 2025 12:40:01 +0300
|
||||||
|
Subject: [PATCH] spi: spi-qpic-snand: Fix ECC_CFG_ECC_DISABLE shift in
|
||||||
|
qcom_spi_read_last_cw()
|
||||||
|
|
||||||
|
The ECC_CFG_ECC_DISABLE define is BIT(0). It's supposed to be used
|
||||||
|
directly instead of used as a shifter.
|
||||||
|
|
||||||
|
Fixes: 7304d1909080 ("spi: spi-qpic: add driver for QCOM SPI NAND flash Interface")
|
||||||
|
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
|
||||||
|
Link: https://patch.msgid.link/2f4b0a0b-2c03-41c0-8a4a-3d789a83832d@stanley.mountain
|
||||||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/spi/spi-qpic-snand.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/spi/spi-qpic-snand.c
|
||||||
|
+++ b/drivers/spi/spi-qpic-snand.c
|
||||||
|
@@ -514,7 +514,7 @@ static int qcom_spi_read_last_cw(struct
|
||||||
|
cfg0 = (ecc_cfg->cfg0_raw & ~(7U << CW_PER_PAGE)) |
|
||||||
|
0 << CW_PER_PAGE;
|
||||||
|
cfg1 = ecc_cfg->cfg1_raw;
|
||||||
|
- ecc_bch_cfg = 1 << ECC_CFG_ECC_DISABLE;
|
||||||
|
+ ecc_bch_cfg = ECC_CFG_ECC_DISABLE;
|
||||||
|
|
||||||
|
snandc->regs->cmd = snandc->qspi->cmd;
|
||||||
|
snandc->regs->cfg0 = cpu_to_le32(cfg0);
|
@ -0,0 +1,35 @@
|
|||||||
|
From d450cdd9c4398add1f2aa7200f2c95f1e3b9f9fa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
|
Date: Thu, 13 Mar 2025 19:31:21 +0100
|
||||||
|
Subject: [PATCH] spi: spi-qpic-snand: avoid memleak in
|
||||||
|
qcom_spi_ecc_init_ctx_pipelined()
|
||||||
|
|
||||||
|
When the allocation of the OOB buffer fails, the
|
||||||
|
qcom_spi_ecc_init_ctx_pipelined() function returns without freeing
|
||||||
|
the memory allocated for 'ecc_cfg' thus it can cause a memory leak.
|
||||||
|
|
||||||
|
Call kfree() to free 'ecc_cfg' before returning from the function
|
||||||
|
to avoid that.
|
||||||
|
|
||||||
|
Fixes: 7304d1909080 ("spi: spi-qpic: add driver for QCOM SPI NAND flash Interface")
|
||||||
|
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
|
Link: https://patch.msgid.link/20250313-qpic-snand-memleak-fix-v1-1-e54e78d1da3a@gmail.com
|
||||||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/spi/spi-qpic-snand.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/spi/spi-qpic-snand.c
|
||||||
|
+++ b/drivers/spi/spi-qpic-snand.c
|
||||||
|
@@ -263,8 +263,10 @@ static int qcom_spi_ecc_init_ctx_pipelin
|
||||||
|
return -ENOMEM;
|
||||||
|
snandc->qspi->oob_buf = kzalloc(mtd->writesize + mtd->oobsize,
|
||||||
|
GFP_KERNEL);
|
||||||
|
- if (!snandc->qspi->oob_buf)
|
||||||
|
+ if (!snandc->qspi->oob_buf) {
|
||||||
|
+ kfree(ecc_cfg);
|
||||||
|
return -ENOMEM;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
memset(snandc->qspi->oob_buf, 0xff, mtd->writesize + mtd->oobsize);
|
||||||
|
|
@ -0,0 +1,49 @@
|
|||||||
|
From d32c4e58545f17caaa854415f854691e32d42075 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
|
Date: Wed, 26 Mar 2025 15:22:19 +0100
|
||||||
|
Subject: [PATCH] spi: SPI_QPIC_SNAND should be tristate and depend on MTD
|
||||||
|
|
||||||
|
SPI_QPIC_SNAND is the only driver that selects MTD instead of depending
|
||||||
|
on it, which could lead to circular dependencies. Moreover, as
|
||||||
|
SPI_QPIC_SNAND is bool, this forces MTD (and various related symbols) to
|
||||||
|
be built-in, as can be seen in an allmodconfig kernel.
|
||||||
|
|
||||||
|
Except for a missing semicolon, there is no reason why SPI_QPIC_SNAND
|
||||||
|
cannot be tristate; all MODULE_*() boilerplate is already present.
|
||||||
|
Hence make SPI_QPIC_SNAND tristate, let it depend on MTD, and add the
|
||||||
|
missing semicolon.
|
||||||
|
|
||||||
|
Fixes: 7304d1909080ef0c ("spi: spi-qpic: add driver for QCOM SPI NAND flash Interface")
|
||||||
|
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
|
Link: https://patch.msgid.link/b63db431cbf35223a4400e44c296293d32c4543c.1742998909.git.geert+renesas@glider.be
|
||||||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/spi/Kconfig | 4 ++--
|
||||||
|
drivers/spi/spi-qpic-snand.c | 2 +-
|
||||||
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/spi/Kconfig
|
||||||
|
+++ b/drivers/spi/Kconfig
|
||||||
|
@@ -871,9 +871,9 @@ config SPI_QCOM_QSPI
|
||||||
|
QSPI(Quad SPI) driver for Qualcomm QSPI controller.
|
||||||
|
|
||||||
|
config SPI_QPIC_SNAND
|
||||||
|
- bool "QPIC SNAND controller"
|
||||||
|
+ tristate "QPIC SNAND controller"
|
||||||
|
depends on ARCH_QCOM || COMPILE_TEST
|
||||||
|
- select MTD
|
||||||
|
+ depends on MTD
|
||||||
|
help
|
||||||
|
QPIC_SNAND (QPIC SPI NAND) driver for Qualcomm QPIC controller.
|
||||||
|
QPIC controller supports both parallel nand and serial nand.
|
||||||
|
--- a/drivers/spi/spi-qpic-snand.c
|
||||||
|
+++ b/drivers/spi/spi-qpic-snand.c
|
||||||
|
@@ -1614,7 +1614,7 @@ static const struct of_device_id qcom_sn
|
||||||
|
.data = &ipq9574_snandc_props,
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
-}
|
||||||
|
+};
|
||||||
|
MODULE_DEVICE_TABLE(of, qcom_snandc_of_match);
|
||||||
|
|
||||||
|
static struct platform_driver qcom_spi_driver = {
|
@ -0,0 +1,29 @@
|
|||||||
|
From f48d80503504257682e493dc17408f2f0b47bcfa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
|
Date: Thu, 20 Mar 2025 19:11:59 +0100
|
||||||
|
Subject: [PATCH] spi: spi-qpic-snand: use kmalloc() for OOB buffer allocation
|
||||||
|
|
||||||
|
The qcom_spi_ecc_init_ctx_pipelined() function allocates zeroed
|
||||||
|
memory for the OOB buffer, then it fills the buffer with '0xff'
|
||||||
|
bytes right after the allocation. In this case zeroing the memory
|
||||||
|
during allocation is superfluous, so use kmalloc() instead of
|
||||||
|
kzalloc() to avoid that.
|
||||||
|
|
||||||
|
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
|
Link: https://patch.msgid.link/20250320-qpic-snand-kmalloc-v1-1-94e267550675@gmail.com
|
||||||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/spi/spi-qpic-snand.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/spi/spi-qpic-snand.c
|
||||||
|
+++ b/drivers/spi/spi-qpic-snand.c
|
||||||
|
@@ -261,7 +261,7 @@ static int qcom_spi_ecc_init_ctx_pipelin
|
||||||
|
ecc_cfg = kzalloc(sizeof(*ecc_cfg), GFP_KERNEL);
|
||||||
|
if (!ecc_cfg)
|
||||||
|
return -ENOMEM;
|
||||||
|
- snandc->qspi->oob_buf = kzalloc(mtd->writesize + mtd->oobsize,
|
||||||
|
+ snandc->qspi->oob_buf = kmalloc(mtd->writesize + mtd->oobsize,
|
||||||
|
GFP_KERNEL);
|
||||||
|
if (!snandc->qspi->oob_buf) {
|
||||||
|
kfree(ecc_cfg);
|
@ -1199,19 +1199,17 @@ static int adm6996_gpio_probe(struct platform_device *pdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int adm6996_gpio_remove(struct platform_device *pdev)
|
static void adm6996_gpio_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct adm6996_priv *priv = platform_get_drvdata(pdev);
|
struct adm6996_priv *priv = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
if (priv && (priv->model == ADM6996M || priv->model == ADM6996L))
|
if (priv && (priv->model == ADM6996M || priv->model == ADM6996L))
|
||||||
unregister_switch(&priv->dev);
|
unregister_switch(&priv->dev);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver adm6996_gpio_driver = {
|
static struct platform_driver adm6996_gpio_driver = {
|
||||||
.probe = adm6996_gpio_probe,
|
.probe = adm6996_gpio_probe,
|
||||||
.remove = adm6996_gpio_remove,
|
.remove_new = adm6996_gpio_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "adm6996_gpio",
|
.name = "adm6996_gpio",
|
||||||
},
|
},
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <linux/lockdep.h>
|
#include <linux/lockdep.h>
|
||||||
#include <linux/ar8216_platform.h>
|
#include <linux/ar8216_platform.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/of.h>
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
#include <linux/mdio.h>
|
#include <linux/mdio.h>
|
||||||
@ -1209,7 +1210,7 @@ ar8327_sw_hw_apply(struct switch_dev *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
ar8327_sw_get_port_igmp_snooping(struct switch_dev *dev,
|
ar8327_sw_get_port_igmp_snooping(struct switch_dev *dev,
|
||||||
const struct switch_attr *attr,
|
const struct switch_attr *attr,
|
||||||
struct switch_val *val)
|
struct switch_val *val)
|
||||||
@ -1227,7 +1228,7 @@ ar8327_sw_get_port_igmp_snooping(struct switch_dev *dev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
ar8327_sw_set_port_igmp_snooping(struct switch_dev *dev,
|
ar8327_sw_set_port_igmp_snooping(struct switch_dev *dev,
|
||||||
const struct switch_attr *attr,
|
const struct switch_attr *attr,
|
||||||
struct switch_val *val)
|
struct switch_val *val)
|
||||||
@ -1245,7 +1246,7 @@ ar8327_sw_set_port_igmp_snooping(struct switch_dev *dev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
ar8327_sw_get_igmp_snooping(struct switch_dev *dev,
|
ar8327_sw_get_igmp_snooping(struct switch_dev *dev,
|
||||||
const struct switch_attr *attr,
|
const struct switch_attr *attr,
|
||||||
struct switch_val *val)
|
struct switch_val *val)
|
||||||
@ -1262,7 +1263,7 @@ ar8327_sw_get_igmp_snooping(struct switch_dev *dev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
ar8327_sw_set_igmp_snooping(struct switch_dev *dev,
|
ar8327_sw_set_igmp_snooping(struct switch_dev *dev,
|
||||||
const struct switch_attr *attr,
|
const struct switch_attr *attr,
|
||||||
struct switch_val *val)
|
struct switch_val *val)
|
||||||
@ -1278,7 +1279,7 @@ ar8327_sw_set_igmp_snooping(struct switch_dev *dev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
ar8327_sw_get_igmp_v3(struct switch_dev *dev,
|
ar8327_sw_get_igmp_v3(struct switch_dev *dev,
|
||||||
const struct switch_attr *attr,
|
const struct switch_attr *attr,
|
||||||
struct switch_val *val)
|
struct switch_val *val)
|
||||||
@ -1294,7 +1295,7 @@ ar8327_sw_get_igmp_v3(struct switch_dev *dev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
ar8327_sw_set_igmp_v3(struct switch_dev *dev,
|
ar8327_sw_set_igmp_v3(struct switch_dev *dev,
|
||||||
const struct switch_attr *attr,
|
const struct switch_attr *attr,
|
||||||
struct switch_val *val)
|
struct switch_val *val)
|
||||||
|
@ -217,19 +217,17 @@ static int b53_mmap_probe(struct platform_device *pdev)
|
|||||||
return b53_swconfig_switch_register(dev);
|
return b53_swconfig_switch_register(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int b53_mmap_remove(struct platform_device *pdev)
|
static void b53_mmap_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct b53_device *dev = platform_get_drvdata(pdev);
|
struct b53_device *dev = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
if (dev)
|
if (dev)
|
||||||
b53_switch_remove(dev);
|
b53_switch_remove(dev);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver b53_mmap_driver = {
|
static struct platform_driver b53_mmap_driver = {
|
||||||
.probe = b53_mmap_probe,
|
.probe = b53_mmap_probe,
|
||||||
.remove = b53_mmap_remove,
|
.remove_new = b53_mmap_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "b53-switch",
|
.name = "b53-switch",
|
||||||
},
|
},
|
||||||
|
@ -354,19 +354,17 @@ static int b53_srab_probe(struct platform_device *pdev)
|
|||||||
return b53_swconfig_switch_register(dev);
|
return b53_swconfig_switch_register(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int b53_srab_remove(struct platform_device *pdev)
|
static void b53_srab_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct b53_device *dev = platform_get_drvdata(pdev);
|
struct b53_device *dev = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
if (dev)
|
if (dev)
|
||||||
b53_switch_remove(dev);
|
b53_switch_remove(dev);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver b53_srab_driver = {
|
static struct platform_driver b53_srab_driver = {
|
||||||
.probe = b53_srab_probe,
|
.probe = b53_srab_probe,
|
||||||
.remove = b53_srab_remove,
|
.remove_new = b53_srab_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "b53-srab-switch",
|
.name = "b53-srab-switch",
|
||||||
},
|
},
|
||||||
|
@ -254,7 +254,7 @@ static int __rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
|
|||||||
#define MDC_MDIO_WRITE_OP 0x0003
|
#define MDC_MDIO_WRITE_OP 0x0003
|
||||||
#define MDC_REALTEK_PHY_ADDR 0x0
|
#define MDC_REALTEK_PHY_ADDR 0x0
|
||||||
|
|
||||||
int __rtl8366_mdio_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
|
static int __rtl8366_mdio_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
|
||||||
{
|
{
|
||||||
u32 phy_id = smi->phy_id;
|
u32 phy_id = smi->phy_id;
|
||||||
struct mii_bus *mbus = smi->ext_mbus;
|
struct mii_bus *mbus = smi->ext_mbus;
|
||||||
@ -1527,7 +1527,7 @@ static void rtl8366_smi_reset(struct rtl8366_smi *smi, bool active)
|
|||||||
reset_control_deassert(smi->reset);
|
reset_control_deassert(smi->reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtl8366_smi_probe_of(struct platform_device *pdev, struct rtl8366_smi *smi)
|
static int rtl8366_smi_probe_of(struct platform_device *pdev, struct rtl8366_smi *smi)
|
||||||
{
|
{
|
||||||
int sck = of_get_named_gpio(pdev->dev.of_node, "gpio-sck", 0);
|
int sck = of_get_named_gpio(pdev->dev.of_node, "gpio-sck", 0);
|
||||||
int sda = of_get_named_gpio(pdev->dev.of_node, "gpio-sda", 0);
|
int sda = of_get_named_gpio(pdev->dev.of_node, "gpio-sda", 0);
|
||||||
@ -1577,7 +1577,7 @@ static inline int rtl8366_smi_probe_of(struct platform_device *pdev, struct rtl8
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int rtl8366_smi_probe_plat(struct platform_device *pdev, struct rtl8366_smi *smi)
|
static int rtl8366_smi_probe_plat(struct platform_device *pdev, struct rtl8366_smi *smi)
|
||||||
{
|
{
|
||||||
struct rtl8366_platform_data *pdata = pdev->dev.platform_data;
|
struct rtl8366_platform_data *pdata = pdev->dev.platform_data;
|
||||||
|
|
||||||
|
@ -1478,7 +1478,7 @@ static int rtl8366rb_probe(struct platform_device *pdev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtl8366rb_remove(struct platform_device *pdev)
|
static void rtl8366rb_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
@ -1488,8 +1488,6 @@ static int rtl8366rb_remove(struct platform_device *pdev)
|
|||||||
rtl8366_smi_cleanup(smi);
|
rtl8366_smi_cleanup(smi);
|
||||||
kfree(smi);
|
kfree(smi);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
@ -1506,7 +1504,7 @@ static struct platform_driver rtl8366rb_driver = {
|
|||||||
.of_match_table = of_match_ptr(rtl8366rb_match),
|
.of_match_table = of_match_ptr(rtl8366rb_match),
|
||||||
},
|
},
|
||||||
.probe = rtl8366rb_probe,
|
.probe = rtl8366rb_probe,
|
||||||
.remove = rtl8366rb_remove,
|
.remove_new = rtl8366rb_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init rtl8366rb_module_init(void)
|
static int __init rtl8366rb_module_init(void)
|
||||||
|
@ -1266,7 +1266,7 @@ static int rtl8366s_probe(struct platform_device *pdev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtl8366s_remove(struct platform_device *pdev)
|
static void rtl8366s_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
@ -1276,8 +1276,6 @@ static int rtl8366s_remove(struct platform_device *pdev)
|
|||||||
rtl8366_smi_cleanup(smi);
|
rtl8366_smi_cleanup(smi);
|
||||||
kfree(smi);
|
kfree(smi);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
@ -1296,7 +1294,7 @@ static struct platform_driver rtl8366s_driver = {
|
|||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
.probe = rtl8366s_probe,
|
.probe = rtl8366s_probe,
|
||||||
.remove = rtl8366s_remove,
|
.remove_new = rtl8366s_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init rtl8366s_module_init(void)
|
static int __init rtl8366s_module_init(void)
|
||||||
|
@ -1801,7 +1801,7 @@ static int rtl8367_probe(struct platform_device *pdev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtl8367_remove(struct platform_device *pdev)
|
static void rtl8367_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
@ -1811,8 +1811,6 @@ static int rtl8367_remove(struct platform_device *pdev)
|
|||||||
rtl8366_smi_cleanup(smi);
|
rtl8366_smi_cleanup(smi);
|
||||||
kfree(smi);
|
kfree(smi);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl8367_shutdown(struct platform_device *pdev)
|
static void rtl8367_shutdown(struct platform_device *pdev)
|
||||||
@ -1839,7 +1837,7 @@ static struct platform_driver rtl8367_driver = {
|
|||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
.probe = rtl8367_probe,
|
.probe = rtl8367_probe,
|
||||||
.remove = rtl8367_remove,
|
.remove_new = rtl8367_remove,
|
||||||
.shutdown = rtl8367_shutdown,
|
.shutdown = rtl8367_shutdown,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1600,7 +1600,7 @@ static int rtl8367b_probe(struct platform_device *pdev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtl8367b_remove(struct platform_device *pdev)
|
static void rtl8367b_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
struct rtl8366_smi *smi = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
@ -1610,8 +1610,6 @@ static int rtl8367b_remove(struct platform_device *pdev)
|
|||||||
rtl8366_smi_cleanup(smi);
|
rtl8366_smi_cleanup(smi);
|
||||||
kfree(smi);
|
kfree(smi);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl8367b_shutdown(struct platform_device *pdev)
|
static void rtl8367b_shutdown(struct platform_device *pdev)
|
||||||
@ -1638,7 +1636,7 @@ static struct platform_driver rtl8367b_driver = {
|
|||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
.probe = rtl8367b_probe,
|
.probe = rtl8367b_probe,
|
||||||
.remove = rtl8367b_remove,
|
.remove_new = rtl8367b_remove,
|
||||||
.shutdown = rtl8367b_shutdown,
|
.shutdown = rtl8367b_shutdown,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1057,7 +1057,7 @@ static struct genl_family switch_fam = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
void
|
static void
|
||||||
of_switch_load_portmap(struct switch_dev *dev)
|
of_switch_load_portmap(struct switch_dev *dev)
|
||||||
{
|
{
|
||||||
struct device_node *port;
|
struct device_node *port;
|
||||||
|
@ -28,6 +28,6 @@ Subject: [PATCH] mtd/nand: add MediaTek NAND bad block managment table
|
|||||||
obj-$(CONFIG_MTD_NAND_CORE) += nandcore.o
|
obj-$(CONFIG_MTD_NAND_CORE) += nandcore.o
|
||||||
obj-$(CONFIG_MTD_NAND_ECC_MEDIATEK) += ecc-mtk.o
|
obj-$(CONFIG_MTD_NAND_ECC_MEDIATEK) += ecc-mtk.o
|
||||||
+obj-$(CONFIG_MTD_NAND_MTK_BMT) += mtk_bmt.o mtk_bmt_v2.o mtk_bmt_bbt.o mtk_bmt_nmbm.o
|
+obj-$(CONFIG_MTD_NAND_MTK_BMT) += mtk_bmt.o mtk_bmt_v2.o mtk_bmt_bbt.o mtk_bmt_nmbm.o
|
||||||
obj-$(CONFIG_MTD_NAND_QCOM) += qpic_common.o
|
ifeq ($(CONFIG_SPI_QPIC_SNAND),y)
|
||||||
obj-y += onenand/
|
obj-$(CONFIG_SPI_QPIC_SNAND) += qpic_common.o
|
||||||
obj-y += raw/
|
else
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/rndis_host.c
|
--- a/drivers/net/usb/rndis_host.c
|
||||||
+++ b/drivers/net/usb/rndis_host.c
|
+++ b/drivers/net/usb/rndis_host.c
|
||||||
@@ -630,6 +630,16 @@ static const struct driver_info zte_rndi
|
@@ -640,6 +640,16 @@ static const struct driver_info wwan_rnd
|
||||||
.tx_fixup = rndis_tx_fixup,
|
.tx_fixup = rndis_tx_fixup,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static const struct usb_device_id products [] = {
|
static const struct usb_device_id products [] = {
|
||||||
@@ -666,6 +676,36 @@ static const struct usb_device_id produc
|
@@ -676,6 +686,36 @@ static const struct usb_device_id produc
|
||||||
USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||||
.driver_info = (unsigned long) &rndis_info,
|
.driver_info = (unsigned long) &rndis_info,
|
||||||
}, {
|
}, {
|
||||||
@ -64,6 +64,6 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
+ USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
+ USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||||
+ .driver_info = (unsigned long) &asr_rndis_info,
|
+ .driver_info = (unsigned long) &asr_rndis_info,
|
||||||
+}, {
|
+}, {
|
||||||
/* Novatel Verizon USB730L */
|
/* Mobile Broadband Modem, seen in Novatel Verizon USB730L and
|
||||||
USB_INTERFACE_INFO(USB_CLASS_MISC, 4, 1),
|
* Telit FN990A (RNDIS)
|
||||||
.driver_info = (unsigned long) &rndis_info,
|
*/
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
From linux-netdev Tue Dec 03 13:04:55 2024
|
|
||||||
From: Dominique Martinet <asmadeus () codewreck ! org>
|
|
||||||
Date: Tue, 03 Dec 2024 13:04:55 +0000
|
|
||||||
To: linux-netdev
|
|
||||||
Subject: [PATCH] net: usb: usbnet: restore usb%d name exception for local mac addresses
|
|
||||||
Message-Id: <20241203130457.904325-1-asmadeus () codewreck ! org>
|
|
||||||
X-MARC-Message: https://marc.info/?l=linux-netdev&m=173323431631309
|
|
||||||
|
|
||||||
From: Dominique Martinet <dominique.martinet@atmark-techno.com>
|
|
||||||
|
|
||||||
The previous commit assumed that local addresses always came from the
|
|
||||||
kernel, but some devices hand out local mac addresses so we ended up
|
|
||||||
with point-to-point devices with a mac set by the driver, renaming to
|
|
||||||
eth%d when they used to be named usb%d.
|
|
||||||
|
|
||||||
Userspace should not rely on device name, but for the sake of stability
|
|
||||||
restore the local mac address check portion of the naming exception:
|
|
||||||
point to point devices which either have no mac set by the driver or
|
|
||||||
have a local mac handed out by the driver will keep the usb%d name.
|
|
||||||
|
|
||||||
Fixes: 8a7d12d674ac ("net: usb: usbnet: fix name regression")
|
|
||||||
Signed-off-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
|
|
||||||
---
|
|
||||||
drivers/net/usb/usbnet.c | 20 ++++++++++++++------
|
|
||||||
1 file changed, 14 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/usb/usbnet.c
|
|
||||||
+++ b/drivers/net/usb/usbnet.c
|
|
||||||
@@ -178,6 +178,17 @@ int usbnet_get_ethernet_addr(struct usbn
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(usbnet_get_ethernet_addr);
|
|
||||||
|
|
||||||
+static bool usbnet_needs_usb_name_format(struct usbnet *dev, struct net_device *net)
|
|
||||||
+{
|
|
||||||
+ /* Point to point devices which don't have a real MAC address
|
|
||||||
+ * (or report a fake local one) have historically used the usb%d
|
|
||||||
+ * naming. Preserve this..
|
|
||||||
+ */
|
|
||||||
+ return (dev->driver_info->flags & FLAG_POINTTOPOINT) != 0 &&
|
|
||||||
+ (is_zero_ether_addr(net->dev_addr) ||
|
|
||||||
+ is_local_ether_addr(net->dev_addr));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void intr_complete (struct urb *urb)
|
|
||||||
{
|
|
||||||
struct usbnet *dev = urb->context;
|
|
||||||
@@ -1766,13 +1777,10 @@ usbnet_probe (struct usb_interface *udev
|
|
||||||
if (status < 0)
|
|
||||||
goto out1;
|
|
||||||
|
|
||||||
- // heuristic: "usb%d" for links we know are two-host,
|
|
||||||
- // else "eth%d" when there's reasonable doubt. userspace
|
|
||||||
- // can rename the link if it knows better.
|
|
||||||
+ /* heuristic: rename to "eth%d" if we are not sure this link
|
|
||||||
+ * is two-host (these links keep "usb%d") */
|
|
||||||
if ((dev->driver_info->flags & FLAG_ETHER) != 0 &&
|
|
||||||
- ((dev->driver_info->flags & FLAG_POINTTOPOINT) == 0 ||
|
|
||||||
- /* somebody touched it*/
|
|
||||||
- !is_zero_ether_addr(net->dev_addr)))
|
|
||||||
+ !usbnet_needs_usb_name_format(dev, net))
|
|
||||||
strscpy(net->name, "eth%d", sizeof(net->name));
|
|
||||||
/* WLAN devices should always be named "wlan%d" */
|
|
||||||
if ((dev->driver_info->flags & FLAG_WLAN) != 0)
|
|
@ -138,7 +138,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
static const struct rt6_info ip6_blk_hole_entry_template = {
|
static const struct rt6_info ip6_blk_hole_entry_template = {
|
||||||
.dst = {
|
.dst = {
|
||||||
.__rcuref = RCUREF_INIT(1),
|
.__rcuref = RCUREF_INIT(1),
|
||||||
@@ -1043,6 +1057,7 @@ static const int fib6_prop[RTN_MAX + 1]
|
@@ -1077,6 +1091,7 @@ static const int fib6_prop[RTN_MAX + 1]
|
||||||
[RTN_BLACKHOLE] = -EINVAL,
|
[RTN_BLACKHOLE] = -EINVAL,
|
||||||
[RTN_UNREACHABLE] = -EHOSTUNREACH,
|
[RTN_UNREACHABLE] = -EHOSTUNREACH,
|
||||||
[RTN_PROHIBIT] = -EACCES,
|
[RTN_PROHIBIT] = -EACCES,
|
||||||
@ -146,7 +146,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
[RTN_THROW] = -EAGAIN,
|
[RTN_THROW] = -EAGAIN,
|
||||||
[RTN_NAT] = -EINVAL,
|
[RTN_NAT] = -EINVAL,
|
||||||
[RTN_XRESOLVE] = -EINVAL,
|
[RTN_XRESOLVE] = -EINVAL,
|
||||||
@@ -1078,6 +1093,10 @@ static void ip6_rt_init_dst_reject(struc
|
@@ -1112,6 +1127,10 @@ static void ip6_rt_init_dst_reject(struc
|
||||||
rt->dst.output = ip6_pkt_prohibit_out;
|
rt->dst.output = ip6_pkt_prohibit_out;
|
||||||
rt->dst.input = ip6_pkt_prohibit;
|
rt->dst.input = ip6_pkt_prohibit;
|
||||||
break;
|
break;
|
||||||
@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
case RTN_THROW:
|
case RTN_THROW:
|
||||||
case RTN_UNREACHABLE:
|
case RTN_UNREACHABLE:
|
||||||
default:
|
default:
|
||||||
@@ -4554,6 +4573,17 @@ static int ip6_pkt_prohibit_out(struct n
|
@@ -4588,6 +4607,17 @@ static int ip6_pkt_prohibit_out(struct n
|
||||||
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
/*
|
/*
|
||||||
* Allocate a dst for local (unicast / anycast) address.
|
* Allocate a dst for local (unicast / anycast) address.
|
||||||
*/
|
*/
|
||||||
@@ -5045,7 +5075,8 @@ static int rtm_to_fib6_config(struct sk_
|
@@ -5079,7 +5109,8 @@ static int rtm_to_fib6_config(struct sk_
|
||||||
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
||||||
rtm->rtm_type == RTN_BLACKHOLE ||
|
rtm->rtm_type == RTN_BLACKHOLE ||
|
||||||
rtm->rtm_type == RTN_PROHIBIT ||
|
rtm->rtm_type == RTN_PROHIBIT ||
|
||||||
@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
cfg->fc_flags |= RTF_REJECT;
|
cfg->fc_flags |= RTF_REJECT;
|
||||||
|
|
||||||
if (rtm->rtm_type == RTN_LOCAL)
|
if (rtm->rtm_type == RTN_LOCAL)
|
||||||
@@ -6307,6 +6338,8 @@ static int ip6_route_dev_notify(struct n
|
@@ -6341,6 +6372,8 @@ static int ip6_route_dev_notify(struct n
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
#endif
|
#endif
|
||||||
@@ -6318,6 +6351,7 @@ static int ip6_route_dev_notify(struct n
|
@@ -6352,6 +6385,7 @@ static int ip6_route_dev_notify(struct n
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
||||||
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -6518,6 +6552,8 @@ static int __net_init ip6_route_net_init
|
@@ -6552,6 +6586,8 @@ static int __net_init ip6_route_net_init
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.fib6_has_custom_rules = false;
|
net->ipv6.fib6_has_custom_rules = false;
|
||||||
@ -211,7 +211,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
||||||
sizeof(*net->ipv6.ip6_prohibit_entry),
|
sizeof(*net->ipv6.ip6_prohibit_entry),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
@@ -6528,11 +6564,21 @@ static int __net_init ip6_route_net_init
|
@@ -6562,11 +6598,21 @@ static int __net_init ip6_route_net_init
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
|
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
||||||
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
@@ -6559,6 +6605,8 @@ out:
|
@@ -6593,6 +6639,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
@ -243,7 +243,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
out_ip6_prohibit_entry:
|
out_ip6_prohibit_entry:
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
out_ip6_null_entry:
|
out_ip6_null_entry:
|
||||||
@@ -6578,6 +6626,7 @@ static void __net_exit ip6_route_net_exi
|
@@ -6612,6 +6660,7 @@ static void __net_exit ip6_route_net_exi
|
||||||
kfree(net->ipv6.ip6_null_entry);
|
kfree(net->ipv6.ip6_null_entry);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
@ -251,7 +251,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
kfree(net->ipv6.ip6_blk_hole_entry);
|
kfree(net->ipv6.ip6_blk_hole_entry);
|
||||||
#endif
|
#endif
|
||||||
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
||||||
@@ -6661,6 +6710,9 @@ void __init ip6_route_init_special_entri
|
@@ -6695,6 +6744,9 @@ void __init ip6_route_init_special_entri
|
||||||
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
||||||
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
|
@ -161,7 +161,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
struct rtnl_link {
|
struct rtnl_link {
|
||||||
rtnl_doit_func doit;
|
rtnl_doit_func doit;
|
||||||
@@ -4978,7 +4978,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
@@ -4981,7 +4981,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
||||||
brport_nla_put_flag(skb, flags, mask,
|
brport_nla_put_flag(skb, flags, mask,
|
||||||
IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
|
IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
|
||||||
brport_nla_put_flag(skb, flags, mask,
|
brport_nla_put_flag(skb, flags, mask,
|
||||||
|
@ -502,6 +502,7 @@ CONFIG_SPI_BITBANG=y
|
|||||||
CONFIG_SPI_GPIO=y
|
CONFIG_SPI_GPIO=y
|
||||||
CONFIG_SPI_MASTER=y
|
CONFIG_SPI_MASTER=y
|
||||||
CONFIG_SPI_MEM=y
|
CONFIG_SPI_MEM=y
|
||||||
|
# CONFIG_SPI_QPIC_SNAND is not set
|
||||||
CONFIG_SPI_QUP=y
|
CONFIG_SPI_QUP=y
|
||||||
CONFIG_SPMI=y
|
CONFIG_SPMI=y
|
||||||
# CONFIG_SPMI_HISI3670 is not set
|
# CONFIG_SPMI_HISI3670 is not set
|
||||||
|
@ -500,6 +500,7 @@ CONFIG_SPARSE_IRQ=y
|
|||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_MASTER=y
|
CONFIG_SPI_MASTER=y
|
||||||
CONFIG_SPI_MEM=y
|
CONFIG_SPI_MEM=y
|
||||||
|
# CONFIG_SPI_QPIC_SNAND is not set
|
||||||
CONFIG_SPI_QUP=y
|
CONFIG_SPI_QUP=y
|
||||||
CONFIG_SPMI=y
|
CONFIG_SPMI=y
|
||||||
# CONFIG_SPMI_HISI3670 is not set
|
# CONFIG_SPMI_HISI3670 is not set
|
||||||
|
@ -31,7 +31,6 @@ define Device/fsl_ls1021a-twr
|
|||||||
DEVICE_VENDOR := NXP
|
DEVICE_VENDOR := NXP
|
||||||
DEVICE_MODEL := TWR-LS1021A
|
DEVICE_MODEL := TWR-LS1021A
|
||||||
DEVICE_VARIANT := Default
|
DEVICE_VARIANT := Default
|
||||||
DEVICE_PACKAGES += ~layerscape-rcw
|
|
||||||
IMAGE/firmware.bin := \
|
IMAGE/firmware.bin := \
|
||||||
ls-clean | \
|
ls-clean | \
|
||||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||||
|
@ -30,7 +30,6 @@ define Device/fsl_ls1012a-frdm
|
|||||||
DEVICE_MODEL := FRDM-LS1012A
|
DEVICE_MODEL := FRDM-LS1012A
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
layerscape-ppfe \
|
layerscape-ppfe \
|
||||||
~trusted-firmware-a-ls1012a-frdm \
|
|
||||||
kmod-ppfe
|
kmod-ppfe
|
||||||
BLOCKSIZE := 256KiB
|
BLOCKSIZE := 256KiB
|
||||||
IMAGE/firmware.bin := \
|
IMAGE/firmware.bin := \
|
||||||
@ -56,7 +55,6 @@ define Device/fsl_ls1012a-rdb
|
|||||||
DEVICE_MODEL := LS1012A-RDB
|
DEVICE_MODEL := LS1012A-RDB
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
layerscape-ppfe \
|
layerscape-ppfe \
|
||||||
~trusted-firmware-a-ls1012a-rdb \
|
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
kmod-iio-fxas21002c-i2c \
|
kmod-iio-fxas21002c-i2c \
|
||||||
kmod-iio-fxos8700-i2c \
|
kmod-iio-fxos8700-i2c \
|
||||||
@ -80,7 +78,6 @@ define Device/fsl_ls1012a-frwy-sdboot
|
|||||||
DEVICE_MODEL := FRWY-LS1012A
|
DEVICE_MODEL := FRWY-LS1012A
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
layerscape-ppfe \
|
layerscape-ppfe \
|
||||||
~trusted-firmware-a-ls1012a-frwy-sdboot \
|
|
||||||
kmod-ppfe
|
kmod-ppfe
|
||||||
DEVICE_DTS := fsl-ls1012a-frwy
|
DEVICE_DTS := fsl-ls1012a-frwy
|
||||||
IMAGES += firmware.bin
|
IMAGES += firmware.bin
|
||||||
@ -105,7 +102,6 @@ define Device/fsl_ls1028a-rdb
|
|||||||
DEVICE_VARIANT := Default
|
DEVICE_VARIANT := Default
|
||||||
KERNEL = kernel-bin | gzip | fit gzip $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb
|
KERNEL = kernel-bin | gzip | fit gzip $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~trusted-firmware-a-ls1028a-rdb \
|
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
kmod-hwmon-lm90 \
|
kmod-hwmon-lm90 \
|
||||||
kmod-rtc-pcf2127
|
kmod-rtc-pcf2127
|
||||||
@ -130,7 +126,6 @@ define Device/fsl_ls1028a-rdb-sdboot
|
|||||||
DEVICE_VARIANT := SD Card Boot
|
DEVICE_VARIANT := SD Card Boot
|
||||||
DEVICE_DTS := fsl-ls1028a-rdb
|
DEVICE_DTS := fsl-ls1028a-rdb
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~trusted-firmware-a-ls1028a-rdb-sdboot \
|
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
kmod-hwmon-lm90 \
|
kmod-hwmon-lm90 \
|
||||||
kmod-rtc-pcf2127
|
kmod-rtc-pcf2127
|
||||||
@ -151,8 +146,6 @@ define Device/fsl_ls1043a-rdb
|
|||||||
DEVICE_MODEL := LS1043A-RDB
|
DEVICE_MODEL := LS1043A-RDB
|
||||||
DEVICE_VARIANT := Default
|
DEVICE_VARIANT := Default
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~layerscape-fman \
|
|
||||||
~trusted-firmware-a-ls1043a-rdb \
|
|
||||||
kmod-ahci-qoriq \
|
kmod-ahci-qoriq \
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
kmod-hwmon-lm90
|
kmod-hwmon-lm90
|
||||||
@ -175,8 +168,6 @@ define Device/fsl_ls1043a-rdb-sdboot
|
|||||||
DEVICE_MODEL := LS1043A-RDB
|
DEVICE_MODEL := LS1043A-RDB
|
||||||
DEVICE_VARIANT := SD Card Boot
|
DEVICE_VARIANT := SD Card Boot
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~layerscape-fman \
|
|
||||||
~trusted-firmware-a-ls1043a-rdb-sdboot \
|
|
||||||
kmod-ahci-qoriq \
|
kmod-ahci-qoriq \
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
kmod-hwmon-lm90
|
kmod-hwmon-lm90
|
||||||
@ -197,9 +188,6 @@ define Device/fsl_ls1046a-frwy
|
|||||||
DEVICE_VENDOR := NXP
|
DEVICE_VENDOR := NXP
|
||||||
DEVICE_MODEL := FRWY-LS1046A
|
DEVICE_MODEL := FRWY-LS1046A
|
||||||
DEVICE_VARIANT := Default
|
DEVICE_VARIANT := Default
|
||||||
DEVICE_PACKAGES += \
|
|
||||||
~layerscape-fman \
|
|
||||||
~trusted-firmware-a-ls1046a-frwy
|
|
||||||
IMAGE/firmware.bin := \
|
IMAGE/firmware.bin := \
|
||||||
ls-clean | \
|
ls-clean | \
|
||||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||||
@ -217,9 +205,6 @@ define Device/fsl_ls1046a-frwy-sdboot
|
|||||||
DEVICE_VENDOR := NXP
|
DEVICE_VENDOR := NXP
|
||||||
DEVICE_MODEL := FRWY-LS1046A
|
DEVICE_MODEL := FRWY-LS1046A
|
||||||
DEVICE_VARIANT := SD Card Boot
|
DEVICE_VARIANT := SD Card Boot
|
||||||
DEVICE_PACKAGES += \
|
|
||||||
~layerscape-fman \
|
|
||||||
~trusted-firmware-a-ls1046a-frwy-sdboot
|
|
||||||
DEVICE_DTS := fsl-ls1046a-frwy
|
DEVICE_DTS := fsl-ls1046a-frwy
|
||||||
IMAGE/sdcard.img.gz := \
|
IMAGE/sdcard.img.gz := \
|
||||||
ls-clean | \
|
ls-clean | \
|
||||||
@ -239,8 +224,6 @@ define Device/fsl_ls1046a-rdb
|
|||||||
DEVICE_MODEL := LS1046A-RDB
|
DEVICE_MODEL := LS1046A-RDB
|
||||||
DEVICE_VARIANT := Default
|
DEVICE_VARIANT := Default
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~layerscape-fman \
|
|
||||||
~trusted-firmware-a-ls1046a-rdb \
|
|
||||||
kmod-ahci-qoriq \
|
kmod-ahci-qoriq \
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
kmod-hwmon-lm90
|
kmod-hwmon-lm90
|
||||||
@ -263,8 +246,6 @@ define Device/fsl_ls1046a-rdb-sdboot
|
|||||||
DEVICE_MODEL := LS1046A-RDB
|
DEVICE_MODEL := LS1046A-RDB
|
||||||
DEVICE_VARIANT := SD Card Boot
|
DEVICE_VARIANT := SD Card Boot
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~layerscape-fman \
|
|
||||||
~trusted-firmware-a-ls1046a-rdb-sdboot \
|
|
||||||
kmod-ahci-qoriq \
|
kmod-ahci-qoriq \
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
kmod-hwmon-lm90
|
kmod-hwmon-lm90
|
||||||
@ -287,9 +268,6 @@ define Device/fsl_ls1088a-rdb
|
|||||||
DEVICE_MODEL := LS1088A-RDB
|
DEVICE_MODEL := LS1088A-RDB
|
||||||
DEVICE_VARIANT := Default
|
DEVICE_VARIANT := Default
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~layerscape-mc \
|
|
||||||
~layerscape-dpl \
|
|
||||||
~trusted-firmware-a-ls1088a-rdb \
|
|
||||||
restool \
|
restool \
|
||||||
kmod-ahci-qoriq \
|
kmod-ahci-qoriq \
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
@ -315,9 +293,6 @@ define Device/fsl_ls1088a-rdb-sdboot
|
|||||||
DEVICE_MODEL := LS1088A-RDB
|
DEVICE_MODEL := LS1088A-RDB
|
||||||
DEVICE_VARIANT := SD Card Boot
|
DEVICE_VARIANT := SD Card Boot
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~layerscape-mc \
|
|
||||||
~layerscape-dpl \
|
|
||||||
~trusted-firmware-a-ls1088a-rdb-sdboot \
|
|
||||||
restool \
|
restool \
|
||||||
kmod-ahci-qoriq \
|
kmod-ahci-qoriq \
|
||||||
kmod-hwmon-ina2xx \
|
kmod-hwmon-ina2xx \
|
||||||
@ -342,9 +317,6 @@ define Device/fsl_ls2088a-rdb
|
|||||||
DEVICE_VENDOR := NXP
|
DEVICE_VENDOR := NXP
|
||||||
DEVICE_MODEL := LS2088ARDB
|
DEVICE_MODEL := LS2088ARDB
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += \
|
||||||
~layerscape-mc \
|
|
||||||
~layerscape-dpl \
|
|
||||||
~trusted-firmware-a-ls2088a-rdb \
|
|
||||||
restool \
|
restool \
|
||||||
kmod-ahci-qoriq
|
kmod-ahci-qoriq
|
||||||
IMAGE/firmware.bin := \
|
IMAGE/firmware.bin := \
|
||||||
@ -365,12 +337,7 @@ define Device/fsl_lx2160a-rdb
|
|||||||
DEVICE_VENDOR := NXP
|
DEVICE_VENDOR := NXP
|
||||||
DEVICE_MODEL := LX2160A-RDB
|
DEVICE_MODEL := LX2160A-RDB
|
||||||
DEVICE_VARIANT := Rev2.0 silicon
|
DEVICE_VARIANT := Rev2.0 silicon
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += restool
|
||||||
~layerscape-mc \
|
|
||||||
~layerscape-dpl \
|
|
||||||
~layerscape-ddr-phy \
|
|
||||||
~trusted-firmware-a-lx2160a-rdb \
|
|
||||||
restool
|
|
||||||
IMAGE/firmware.bin := \
|
IMAGE/firmware.bin := \
|
||||||
ls-clean | \
|
ls-clean | \
|
||||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||||
@ -391,12 +358,7 @@ define Device/fsl_lx2160a-rdb-sdboot
|
|||||||
DEVICE_VENDOR := NXP
|
DEVICE_VENDOR := NXP
|
||||||
DEVICE_MODEL := LX2160A-RDB
|
DEVICE_MODEL := LX2160A-RDB
|
||||||
DEVICE_VARIANT := Rev2.0 silicon SD Card Boot
|
DEVICE_VARIANT := Rev2.0 silicon SD Card Boot
|
||||||
DEVICE_PACKAGES += \
|
DEVICE_PACKAGES += restool
|
||||||
~layerscape-mc \
|
|
||||||
~layerscape-dpl \
|
|
||||||
~layerscape-ddr-phy \
|
|
||||||
~trusted-firmware-a-lx2160a-rdb-sdboot \
|
|
||||||
restool
|
|
||||||
DEVICE_DTS := fsl-lx2160a-rdb
|
DEVICE_DTS := fsl-lx2160a-rdb
|
||||||
IMAGE/sdcard.img.gz := \
|
IMAGE/sdcard.img.gz := \
|
||||||
ls-clean | \
|
ls-clean | \
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user