Files
linux-nv-oot/drivers/net/wireless/realtek/rtl8852ce/phl/phl_int.h
Shobek Attupurath c9aa3b2f1b rtl8852ce: Add v126-10 to fix disconnect with new channel
Issue - When WiFi operating channel is switched, at times the wifi
role index and role bitmap show that there is already a role
assigned for the channel context and this causes a failure in association. Kernel warning is shown when this occurs.

Fix - Update driver to v126-10 that fixes this issue.

[   57.590860] Call trace:
[   57.590861]  rtw_phl_chanctx_add+0x528/0x8f4 [rtl8852ce]
[   57.590947]  rtw_clear_is_accepted_status+0x4a4/0xbb8 [rtl8852ce]
[   57.591033]  cur_req_hdl+0x3c/0x4c [rtl8852ce]
[   57.591118]  msg_dispatch+0x2dc/0x3f8 [rtl8852ce]
[   57.591204]  dispr_thread_loop_hdl+0x270/0x2dc [rtl8852ce]
[   57.591289]  dispr_share_thread_loop_hdl+0x10/0x1c [rtl8852ce]
[   57.591374]  share_thread_hdl+0xb8/0x1a0 [rtl8852ce]
[   57.591459]  kthread+0x110/0x124
[   57.591466]  ret_from_fork+0x10/0x20

Bug 5440351
Bug 5442104

Change-Id: Ie78c70c1ea7a789351a2ba4ad445c4d0062281da
Signed-off-by: Shobek Attupurath <sattupurath@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3426784
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: Ashutosh Jha <ajha@nvidia.com>
2025-08-11 20:27:49 -07:00

48 lines
1.6 KiB
C

/******************************************************************************
*
* Copyright(c) 2024 Realtek Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*****************************************************************************/
#ifndef _PHL_INT_H_
#define _PHL_INT_H_
void rtw_phl_enable_interrupt_sync(struct rtw_phl_com_t* phl_com);
void rtw_phl_disable_interrupt_sync(struct rtw_phl_com_t* phl_com);
static inline void phl_restore_interrupt_sync(struct rtw_phl_com_t* phl_com, bool wlock, bool rx)
{
#ifdef CONFIG_SYNC_INTERRUPT
struct rtw_phl_evt_ops *evt_ops = &phl_com->evt_ops;
evt_ops->interrupt_restore(phl_com->drv_priv, rx);
#else
#if defined(CONFIG_PCI_HCI)
struct phl_info_t *phl_info = (struct phl_info_t *)phl_com->phl_priv;
if (wlock) {
void *drv = phl_to_drvpriv(phl_info);
struct hci_info_t *hci_info = (struct hci_info_t *)phl_info->hci;
_os_spinlockfg sp_flags;
_os_spinlock(drv, &hci_info->int_hdl_lock, _irq, &sp_flags);
if (hci_info->int_disabled == false)
rtw_hal_restore_interrupt(phl_com, phl_info->hal);
_os_spinunlock(drv, &hci_info->int_hdl_lock, _irq, &sp_flags);
} else {
rtw_hal_restore_interrupt(phl_com, phl_info->hal);
}
#endif
#endif
}
#endif /*_PHL_INT_H_*/