rtl8852ce: Add driver v126-1 to fix kernel panic

Fix kernel panic observed in rtl8852ce driver

[  179.040508] Call trace:
[  179.040512]  rtw_fsm_stop+0x138/0x174 [rtl8852ce]
[  179.040592]  rtw_fsm_notify_disconnect+0x50/0x60 [rtl8852ce][  179.040672]  rtw_free_assoc_resources+0x128/0x330 [rtl8852ce]
[  179.040751]  rtw_indicate_disconnect+0x4cc/0x984 [rtl8852ce]
[  179.040831]  rtw_indicate_disconnect+0x978/0x984 [rtl8852ce]
[  179.040910]  cur_req_hdl+0x3c/0x4c [rtl8852ce]
[  179.040988]  msg_dispatch+0x2dc/0x3f8 [rtl8852ce][  179.041067]  dispr_thread_loop_hdl+0x270/0x2dc [rtl8852ce]
[  179.041146]  dispr_share_thread_loop_hdl+0x10/0x1c [rtl8852ce]
[  179.041225]  share_thread_hdl+0xb8/0x1a0 [rtl8852ce]
[  179.041305]  kthread+0x110/0x124
[  179.041325]  ret_from_fork+0x10/0x20[  179.041348] Code: f9400273 eb16027f 540000c0 b4ffff15 (f9402e60)
[  179.041353] ---[ end trace 0000000000000000 ]---

Bug 5207091

Change-Id: I22d153c0ef970efad888fcce668d0d19e95f4e17
Signed-off-by: Shobek Attupurath <sattupurath@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3415007
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
This commit is contained in:
Shobek Attupurath
2025-07-18 23:12:45 +00:00
committed by mobile promotions
parent 7434e9a293
commit 9146af2407
13 changed files with 96 additions and 60 deletions

View File

@@ -14,9 +14,6 @@ EXTRA_CFLAGS += -Wno-unused-label
#EXTRA_CFLAGS += -Wno-unused-function #EXTRA_CFLAGS += -Wno-unused-function
EXTRA_CFLAGS += -Wno-unused EXTRA_CFLAGS += -Wno-unused
#EXTRA_CFLAGS += -Wno-uninitialized #EXTRA_CFLAGS += -Wno-uninitialized
EXTRA_CFLAGS += -Wno-missing-prototypes
EXTRA_CFLAGS += -Wno-missing-declarations
EXTRA_CFLAGS += -Wno-enum-conversion
############ ANDROID COMMON KERNEL ############ ############ ANDROID COMMON KERNEL ############
# clang # clang
@@ -38,8 +35,7 @@ ifeq ($(GCC_VER_49),1)
EXTRA_CFLAGS += -Wno-date-time # Fix compile error && warning on gcc 4.9 and later EXTRA_CFLAGS += -Wno-date-time # Fix compile error && warning on gcc 4.9 and later
endif endif
SOURCETREE = $(srctree.nvidia-oot)/drivers/net/wireless/realtek/rtl8852ce EXTRA_CFLAGS += -I$(src)/include
EXTRA_CFLAGS += -I$(SOURCETREE)/include
EXTRA_LDFLAGS += --strip-debug EXTRA_LDFLAGS += --strip-debug
@@ -165,8 +161,8 @@ endif
CONFIG_RTW_DEBUG = y CONFIG_RTW_DEBUG = y
# default log level is _DRV_INFO_ = 4, # default log level is _DRV_INFO_ = 4,
# please refer to "How_to_set_driver_debug_log_level.doc" to set the available level. # please refer to "How_to_set_driver_debug_log_level.doc" to set the available level.
CONFIG_RTW_LOG_LEVEL = 0 CONFIG_RTW_LOG_LEVEL = 4
CONFIG_RTW_PHL_LOG_LEVEL = 0 CONFIG_RTW_PHL_LOG_LEVEL = 3
# CONFIG_RTW_APPEND_LOGLEVEL decide if append kernel log level to each messages. # CONFIG_RTW_APPEND_LOGLEVEL decide if append kernel log level to each messages.
# default "n" for don't append. # default "n" for don't append.
@@ -242,8 +238,7 @@ CONFIG_ROAMING_FLAG = 0x3f
CONFIG_ROAM_SCAN_ORDER = 526 CONFIG_ROAM_SCAN_ORDER = 526
###################### Platform Related ####################### ###################### Platform Related #######################
CONFIG_PLATFORM_TEGRA = y CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_RTL8198D = n CONFIG_PLATFORM_RTL8198D = n
CONFIG_PLATFORM_ANDROID_X86 = n CONFIG_PLATFORM_ANDROID_X86 = n
CONFIG_PLATFORM_ANDROID_INTEL_X86 = n CONFIG_PLATFORM_ANDROID_INTEL_X86 = n
@@ -773,16 +768,6 @@ ifeq ($(CONFIG_DBG_AX_CAM), y)
EXTRA_CFLAGS += -DCONFIG_DBG_AX_CAM EXTRA_CFLAGS += -DCONFIG_DBG_AX_CAM
endif endif
ifeq ($(CONFIG_PLATFORM_TEGRA), y)
ARCH = arm64
KVER := $(shell uname -r)
KSRC := /lib/modules/$(KVER)/build
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
EXTRA_CFLAGS += -Wno-error=date-time
MODULE_NAME = rtl8852ce
endif
ifeq ($(CONFIG_I386_BUILD_VERIFY), y) ifeq ($(CONFIG_I386_BUILD_VERIFY), y)
EXTRA_CFLAGS += -DCONFIG_I386_BUILD_VERIFY EXTRA_CFLAGS += -DCONFIG_I386_BUILD_VERIFY
endif endif
@@ -799,18 +784,8 @@ endif
include $(wildcard $(DRV_PATH)/platform/*.mk) include $(wildcard $(DRV_PATH)/platform/*.mk)
# Import platform specific compile options # Import platform specific compile options
EXTRA_CFLAGS += -I$(SOURCETREE)/platform EXTRA_CFLAGS += -I$(src)/platform
#_PLATFORM_FILES := platform/platform_ops.o #_PLATFORM_FILES := platform/platform_ops.o
ifeq ($(CONFIG_PCI_HCI), y)
EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
_PLATFORM_FILES := platform/platform_linux_pc_pci.o
OBJS += $(_PLATFORM_FILES)
# Core Config
CONFIG_MSG_NUM = 128
EXTRA_CFLAGS += -DCONFIG_MSG_NUM=$(CONFIG_MSG_NUM)
#EXTRA_CFLAGS += -DCONFIG_TX_SKB_ORPHAN
endif
_PLATFORM_FILES += platform/platform_ops.o
OBJS += $(_PLATFORM_FILES) OBJS += $(_PLATFORM_FILES)
########### CUSTOMER ################################ ########### CUSTOMER ################################
@@ -830,7 +805,7 @@ endif
ifneq ($(KERNELRELEASE),) ifneq ($(KERNELRELEASE),)
########### COMMON ################################# ########### COMMON #################################
include $(SOURCETREE)/common.mk include $(src)/common.mk
EXTRA_CFLAGS += -DPHL_PLATFORM_LINUX EXTRA_CFLAGS += -DPHL_PLATFORM_LINUX
EXTRA_CFLAGS += -DCONFIG_PHL_ARCH EXTRA_CFLAGS += -DCONFIG_PHL_ARCH
@@ -851,10 +826,11 @@ ifeq ($(DIRTY_FOR_WORK), y)
EXTRA_CFLAGS += -DDIRTY_FOR_WORK EXTRA_CFLAGS += -DDIRTY_FOR_WORK
endif endif
include $(SOURCETREE)/phl/phl.mk include $(src)/phl/phl.mk
obj-m := $(MODULE_NAME).o
obj-$(CONFIG_RTL8852CE) := $(MODULE_NAME).o
obj-$(CONFIG_RTL8852CE) := $(MODULE_NAME).o
$(MODULE_NAME)-y = $(OBJS) $(MODULE_NAME)-y = $(OBJS)
############# MEMORY MANAGMENT ############# ############# MEMORY MANAGMENT #############

View File

@@ -99,7 +99,7 @@ _CORE_FILES := core/rtw_fsm.o \
_CORE_FILES += core/rtw_phl.o \ _CORE_FILES += core/rtw_phl.o \
core/rtw_phl_cmd.o core/rtw_phl_cmd.o
EXTRA_CFLAGS += -I$(SOURCETREE)/core/crypto EXTRA_CFLAGS += -I$(src)/core/crypto
_CORE_FILES += core/crypto/aes-internal.o \ _CORE_FILES += core/crypto/aes-internal.o \
core/crypto/aes-internal-enc.o \ core/crypto/aes-internal-enc.o \
core/crypto/aes-gcm.o \ core/crypto/aes-gcm.o \

View File

@@ -21,6 +21,7 @@
/* #define USE_PHL_CMD_DISPR */ /* #define USE_PHL_CMD_DISPR */
#define MAX_OBJ_NUM 8
#define CLOCK_NUM 3 #define CLOCK_NUM 3
#define CLOCK_UNIT 10 #define CLOCK_UNIT 10
#define IS_CLK_OFF(clk) (clk->remain < 0) /* Negative value means disabled */ #define IS_CLK_OFF(clk) (clk->remain < 0) /* Negative value means disabled */
@@ -1582,22 +1583,81 @@ msg_fail:
return _FAIL; return _FAIL;
} }
static void fsm_ucast_msg(struct fsm_priv *fsmpriv,
struct sta_info *psta, char *pbuf, u32 sz, u16 event)
{
struct fsm_root *root = fsmpriv->root;
struct fsm_main *fsm;
struct fsm_obj *obj;
struct fsm_obj *obj_ary[MAX_OBJ_NUM];
int i, obj_num = 0;
if (!psta)
return;
memset(obj_ary, 0, sizeof(obj_ary));
list_for_each_entry(fsm, &root->q_share_thd.q, list) {
if (fsm_status(fsm) != FSM_STATUS_ENABLE)
continue;
_rtw_spinlock_bh(&fsm->obj_queue.lock);
list_for_each_entry(obj, &fsm->obj_queue.q, list) {
if (obj->psta == psta) {
obj_ary[obj_num++] = obj;
if (obj_num > MAX_OBJ_NUM) {
FSM_WARN_(obj->fsm, "obj num exceed, event %04x(%s)\n",
event, fsm_evt_name(obj->fsm, event));
_rtw_spinunlock_bh(&fsm->obj_queue.lock);
goto done;
}
}
}
_rtw_spinunlock_bh(&fsm->obj_queue.lock);
}
done:
for (i = 0; i < obj_num; i++)
fsm_gen_msg(obj_ary[i], pbuf, sz, event);
}
#if 0
static void fsm_bcast_msg(struct fsm_priv *fsmpriv, static void fsm_bcast_msg(struct fsm_priv *fsmpriv,
struct sta_info *psta, char *pbuf, u32 sz, u16 event) struct sta_info *psta, char *pbuf, u32 sz, u16 event)
{ {
struct fsm_root *root = fsmpriv->root; struct fsm_root *root = fsmpriv->root;
struct fsm_main *fsm; struct fsm_main *fsm;
struct fsm_obj *obj; struct fsm_obj *obj;
struct fsm_obj *obj_ary[MAX_OBJ_NUM];
int i, obj_num = 0;
if (!psta)
return;
memset(obj_ary, 0, sizeof(obj_ary));
list_for_each_entry(fsm, &root->q_share_thd.q, list) { list_for_each_entry(fsm, &root->q_share_thd.q, list) {
if (fsm_status(fsm) != FSM_STATUS_ENABLE) if (fsm_status(fsm) != FSM_STATUS_ENABLE)
continue; continue;
_rtw_spinlock_bh(&fsm->obj_queue.lock);
list_for_each_entry(obj, &fsm->obj_queue.q, list) { list_for_each_entry(obj, &fsm->obj_queue.q, list) {
if (!psta || (psta && obj->psta == psta)) if (!psta || (psta && obj->psta == psta))
fsm_gen_msg(obj, pbuf, sz, event); obj_ary[obj_num++] = obj;
if (obj_num > MAX_OBJ_NUM) {
FSM_WARN_(obj->fsm, "obj num exceed, event %04x(%s)\n",
event, fsm_evt_name(obj->fsm, event));
_rtw_spinunlock_bh(&fsm->obj_queue.lock);
goto done;
} }
} }
}
_rtw_spinunlock_bh(&fsm->obj_queue.lock);
}
done:
for (i = 0; i < obj_num; i++)
fsm_gen_msg(obj_ary[i], pbuf, sz, event);
} }
#endif
void rtw_fsm_notify_connect(struct fsm_priv *fsmpriv, struct sta_info *psta, int res) void rtw_fsm_notify_connect(struct fsm_priv *fsmpriv, struct sta_info *psta, int res)
{ {
@@ -1606,9 +1666,9 @@ void rtw_fsm_notify_connect(struct fsm_priv *fsmpriv, struct sta_info *psta, int
pself = rtw_get_stainfo(&a->stapriv, a->phl_role->mac_addr); pself = rtw_get_stainfo(&a->stapriv, a->phl_role->mac_addr);
if (res >= 0) /* success */ if (res >= 0) /* success */
fsm_bcast_msg(fsmpriv, pself, (char *)psta, 0, FSM_EV_CONNECTED); fsm_ucast_msg(fsmpriv, pself, (char *)psta, 0, FSM_EV_CONNECTED);
else else
fsm_bcast_msg(fsmpriv, pself, (char *)psta, 0, FSM_EV_CONNECT_FAIL); fsm_ucast_msg(fsmpriv, pself, (char *)psta, 0, FSM_EV_CONNECT_FAIL);
} }
void rtw_fsm_notify_disconnect(struct fsm_priv *fsmpriv, struct sta_info *psta) void rtw_fsm_notify_disconnect(struct fsm_priv *fsmpriv, struct sta_info *psta)
@@ -1618,17 +1678,17 @@ void rtw_fsm_notify_disconnect(struct fsm_priv *fsmpriv, struct sta_info *psta)
pself = rtw_get_stainfo(&a->stapriv, a->phl_role->mac_addr); pself = rtw_get_stainfo(&a->stapriv, a->phl_role->mac_addr);
if (pself) if (pself)
fsm_bcast_msg(fsmpriv, psta, (char *)pself, 0, FSM_EV_DISCONNECTED); fsm_ucast_msg(fsmpriv, psta, (char *)pself, 0, FSM_EV_DISCONNECTED);
} }
void rtw_fsm_notify_scan_start(struct fsm_priv *fsmpriv, struct sta_info *psta) void rtw_fsm_notify_scan_start(struct fsm_priv *fsmpriv, struct sta_info *psta)
{ {
fsm_bcast_msg(fsmpriv, psta, NULL, 0, FSM_EV_SCAN_START); fsm_ucast_msg(fsmpriv, psta, NULL, 0, FSM_EV_SCAN_START);
} }
void rtw_fsm_notify_scan_done(struct fsm_priv *fsmpriv, struct sta_info *psta) void rtw_fsm_notify_scan_done(struct fsm_priv *fsmpriv, struct sta_info *psta)
{ {
fsm_bcast_msg(fsmpriv, psta, NULL, 0, FSM_EV_SCAN_DONE); fsm_ucast_msg(fsmpriv, psta, NULL, 0, FSM_EV_SCAN_DONE);
} }
/** Debug funcitons /** Debug funcitons

View File

@@ -177,8 +177,8 @@ sint _rtw_init_mlme_priv(_adapter *padapter)
#else #else
#define RTW_ROAM_SCAN_RESULT_EXP_MS (10*1000) #define RTW_ROAM_SCAN_RESULT_EXP_MS (10*1000)
#endif #endif
#define RTW_ROAM_SCAN_INTERVAL (2) /* 5*(2 second)*/ #define RTW_ROAM_SCAN_INTERVAL (5) /* 5*(2 second)*/
#define RTW_ROAM_RSSI_THRESHOLD 45 #define RTW_ROAM_RSSI_THRESHOLD 30
#define RTW_ROAM_RSSI_IDLE_TH RTW_ROAM_RSSI_THRESHOLD #define RTW_ROAM_RSSI_IDLE_TH RTW_ROAM_RSSI_THRESHOLD
#define RTW_ROAM_RSSI_BUSY_TH RTW_ROAM_RSSI_THRESHOLD + 5 #define RTW_ROAM_RSSI_BUSY_TH RTW_ROAM_RSSI_THRESHOLD + 5

View File

@@ -1 +1 @@
#define DRIVERVERSION "v1.19.16_nv-126-g455ab52c9.20241107_Certified_Module" #define DRIVERVERSION "v1.19.16_nv-126-1-g1b567deb3.20250716_Certified_Module"

View File

@@ -7,10 +7,10 @@
ifeq ($(CONFIG_PHL_ARCH), y) ifeq ($(CONFIG_PHL_ARCH), y)
phl_path := phl/$(HAL) phl_path := phl/$(HAL)
phl_path_d1 := $(SOURCETREE)/phl/$(HAL) phl_path_d1 := $(src)/phl/$(HAL)
else else
phl_path := $(HAL) phl_path := $(HAL)
phl_path_d1 := $(SOURCETREE)/$(HAL) phl_path_d1 := $(src)/$(HAL)
endif endif
# Base directory # Base directory

View File

@@ -2,10 +2,10 @@
ifeq ($(CONFIG_PHL_ARCH), y) ifeq ($(CONFIG_PHL_ARCH), y)
phl_path := phl/ phl_path := phl/
phl_path_d1 := $(SOURCETREE)/phl/$(HAL) phl_path_d1 := $(src)/phl/$(HAL)
else else
phl_path := phl_path :=
phl_path_d1 := $(SOURCETREE)/$(HAL) phl_path_d1 := $(src)/$(HAL)
endif endif
_HAL_FILES := $(phl_path)$(HAL)/hal_api_mac.o \ _HAL_FILES := $(phl_path)$(HAL)/hal_api_mac.o \

View File

@@ -7,10 +7,10 @@ HAL = hal_g6
ifeq ($(CONFIG_PHL_ARCH), y) ifeq ($(CONFIG_PHL_ARCH), y)
phl_path := phl/hal_g6 phl_path := phl/hal_g6
phl_path_d1 := $(SOURCETREE)/phl/$(HAL) phl_path_d1 := $(src)/phl/$(HAL)
else else
phl_path := hal_g6 phl_path := hal_g6
phl_path_d1 := $(SOURCETREE)/$(HAL) phl_path_d1 := $(src)/$(HAL)
endif endif
# Base directory # Base directory

View File

@@ -7,10 +7,10 @@
ifeq ($(CONFIG_PHL_ARCH), y) ifeq ($(CONFIG_PHL_ARCH), y)
phl_path := phl/$(HAL) phl_path := phl/$(HAL)
phl_path_d1 := $(SOURCETREE)/phl/$(HAL) phl_path_d1 := $(src)/phl/$(HAL)
else else
phl_path := $(HAL) phl_path := $(HAL)
phl_path_d1 := $(SOURCETREE)/$(HAL) phl_path_d1 := $(src)/$(HAL)
endif endif
# Base directory # Base directory

View File

@@ -7,10 +7,10 @@
ifeq ($(CONFIG_PHL_ARCH), y) ifeq ($(CONFIG_PHL_ARCH), y)
phl_path := phl/$(HAL) phl_path := phl/$(HAL)
phl_path_d1 := $(SOURCETREE)/phl/$(HAL) phl_path_d1 := $(src)/phl/$(HAL)
else else
phl_path := $(HAL) phl_path := $(HAL)
phl_path_d1 := $(SOURCETREE)/$(HAL) phl_path_d1 := $(src)/$(HAL)
endif endif
# Base directory # Base directory

View File

@@ -11,10 +11,10 @@ endif
ifeq ($(CONFIG_PHL_ARCH), y) ifeq ($(CONFIG_PHL_ARCH), y)
phl_path := phl/ phl_path := phl/
phl_path_d1 := $(SOURCETREE)/phl/$(HAL) phl_path_d1 := $(src)/phl/$(HAL)
else else
phl_path := phl_path :=
phl_path_d1 := $(SOURCETREE)/$(HAL) phl_path_d1 := $(src)/$(HAL)
endif endif
_PHL_FILES := $(phl_path)phl_init.o \ _PHL_FILES := $(phl_path)phl_init.o \

View File

@@ -343,12 +343,12 @@ next_ch:
goto next_ch; goto next_ch;
} }
else { else {
PHL_INFO("%s: scan done\n", __func__); printk("%s: scan done\n", __func__);
return NULL; return NULL;
} }
param->done_num = param->ch_num - sctrl->chlist.cnt; param->done_num = param->ch_num - sctrl->chlist.cnt;
PHL_INFO("%s:[%d] idx=%d, r=%d, ch=%d, p=%d\n", __func__, printk("%s:[%d] idx=%d, r=%d, ch=%d, p=%d\n", __func__,
band_idx, sctrl->ch_idx, sctrl->chlist.cnt, sctrl->scan_ch->channel, band_idx, sctrl->ch_idx, sctrl->chlist.cnt, sctrl->scan_ch->channel,
phl_get_passing_time_ms(param->start_time)); phl_get_passing_time_ms(param->start_time));

View File

@@ -26,16 +26,16 @@
#define __PHL_GIT_INFO_H__ #define __PHL_GIT_INFO_H__
/*@--------------------------[Define] ---------------------------------------*/ /*@--------------------------[Define] ---------------------------------------*/
#define RTK_CORE_SHA1 "455ab52c9370743897f9a49005601e716c23ea73" #define RTK_CORE_SHA1 "1b567deb317b6f9c4afa584602c34212ac1be727"
#define RTK_PHL_SHA1 "cb718610a2b894e972b2c1179b4c24775480605e" #define RTK_PHL_SHA1 "cb718610a2b894e972b2c1179b4c24775480605e"
#define RTK_HALMAC_SHA1 "a8003e258e7ceec767c2e329732e7e3b63934473" #define RTK_HALMAC_SHA1 "a8003e258e7ceec767c2e329732e7e3b63934473"
#define RTK_HALBB_SHA1 "8f07cd65ef4ef6867255f3a95706e417c8d31bf3" #define RTK_HALBB_SHA1 "8f07cd65ef4ef6867255f3a95706e417c8d31bf3"
#define RTK_HALRF_SHA1 "01c1864e02ade0c1d1482c85d6bb0fa0f4799651" #define RTK_HALRF_SHA1 "01c1864e02ade0c1d1482c85d6bb0fa0f4799651"
#define RTK_BTC_SHA1 "33bcdb9f10f24aa8b92ee86a7076f89faf6ccbed" #define RTK_BTC_SHA1 "33bcdb9f10f24aa8b92ee86a7076f89faf6ccbed"
#define RTK_CORE_TAGINFO "v1.19.16_nv-126-g455ab52c9" #define RTK_CORE_TAGINFO "v1.19.16_nv-126-1-g1b567deb3"
#define RTK_PHL_TAGINFO "PHL_1_19_111_0100-86-gcb718610a" #define RTK_PHL_TAGINFO "PHL_1_19_111_0100-86-gcb718610a"
#define RTK_HALMAC_TAGINFO "HALMAC_0_29_95_0-1-ga8003e258" #define RTK_HALMAC_TAGINFO "HALMAC_0_29_95_0-1-ga8003e258e"
#define RTK_HALBB_TAGINFO "HALBB_029_167_15-2-g8f07cd65" #define RTK_HALBB_TAGINFO "HALBB_029_167_15-2-g8f07cd65"
#define RTK_HALRF_TAGINFO "HALRF_029_00_161_HOTFIX_001-0-g01c1864e" #define RTK_HALRF_TAGINFO "HALRF_029_00_161_HOTFIX_001-0-g01c1864e"
#define RTK_BTC_TAGINFO "HALBTC_029_087-8-g33bcdb9" #define RTK_BTC_TAGINFO "HALBTC_029_087-8-g33bcdb9"