int rtw_fw_write_data_rsvd_page(struct rtw_dev *rtwdev, u16 pg_addr,
                                u8 *buf, u32 size)
 {
-       u8 bckp[2];
+       u8 bckp[3];
        u8 val;
        u16 rsvd_pg_head;
        u32 bcn_valid_addr;
        if (!size)
                return -EINVAL;
 
+       bckp[2] = rtw_read8(rtwdev, REG_BCN_CTRL);
+
        if (rtw_chip_wcpu_11n(rtwdev)) {
                rtw_write32_set(rtwdev, REG_DWBCN0_CTRL, BIT_BCN_VALID);
        } else {
        val |= BIT_ENSWBCN >> 8;
        rtw_write8(rtwdev, REG_CR + 1, val);
 
+       rtw_write8(rtwdev, REG_BCN_CTRL,
+                  (bckp[2] & ~BIT_EN_BCN_FUNCTION) | BIT_DIS_TSF_UDT);
+
        if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) {
                val = rtw_read8(rtwdev, REG_FWHW_TXQ_CTRL + 2);
                bckp[1] = val;
        rsvd_pg_head = rtwdev->fifo.rsvd_boundary;
        rtw_write16(rtwdev, REG_FIFOPAGE_CTRL_2,
                    rsvd_pg_head | BIT_BCN_VALID_V1);
+       rtw_write8(rtwdev, REG_BCN_CTRL, bckp[2]);
        if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE)
                rtw_write8(rtwdev, REG_FWHW_TXQ_CTRL + 2, bckp[1]);
        rtw_write8(rtwdev, REG_CR + 1, bckp[0]);