}
 }
 
-struct rtw89_btc_fbtc_cysta_cpu {
-       u8 fver;
-       u8 rsvd;
-       u16 cycles;
-       u16 cycles_a2dp[CXT_FLCTRL_MAX];
-       u16 a2dpept;
-       u16 a2dpeptto;
-       u16 tavg_cycle[CXT_MAX];
-       u16 tmax_cycle[CXT_MAX];
-       u16 tmaxdiff_cycle[CXT_MAX];
-       u16 tavg_a2dp[CXT_FLCTRL_MAX];
-       u16 tmax_a2dp[CXT_FLCTRL_MAX];
-       u16 tavg_a2dpept;
-       u16 tmax_a2dpept;
-       u16 tavg_lk;
-       u16 tmax_lk;
-       u32 slot_cnt[CXST_MAX];
-       u32 bcn_cnt[CXBCN_MAX];
-       u32 leakrx_cnt;
-       u32 collision_cnt;
-       u32 skip_cnt;
-       u32 exception;
-       u32 except_cnt;
-       u16 tslot_cycle[BTC_CYCLE_SLOT_MAX];
-};
-
-static void rtw89_btc_fbtc_cysta_to_cpu(const struct rtw89_btc_fbtc_cysta *src,
-                                       struct rtw89_btc_fbtc_cysta_cpu *dst)
-{
-       static_assert(sizeof(*src) == sizeof(*dst));
-
-#define __CPY_U8(_x)   ({dst->_x = src->_x; })
-#define __CPY_LE16(_x) ({dst->_x = le16_to_cpu(src->_x); })
-#define __CPY_LE16S(_x)        ({int _i; for (_i = 0; _i < ARRAY_SIZE(dst->_x); _i++) \
-                                  dst->_x[_i] = le16_to_cpu(src->_x[_i]); })
-#define __CPY_LE32(_x) ({dst->_x = le32_to_cpu(src->_x); })
-#define __CPY_LE32S(_x)        ({int _i; for (_i = 0; _i < ARRAY_SIZE(dst->_x); _i++) \
-                                  dst->_x[_i] = le32_to_cpu(src->_x[_i]); })
-
-       __CPY_U8(fver);
-       __CPY_U8(rsvd);
-       __CPY_LE16(cycles);
-       __CPY_LE16S(cycles_a2dp);
-       __CPY_LE16(a2dpept);
-       __CPY_LE16(a2dpeptto);
-       __CPY_LE16S(tavg_cycle);
-       __CPY_LE16S(tmax_cycle);
-       __CPY_LE16S(tmaxdiff_cycle);
-       __CPY_LE16S(tavg_a2dp);
-       __CPY_LE16S(tmax_a2dp);
-       __CPY_LE16(tavg_a2dpept);
-       __CPY_LE16(tmax_a2dpept);
-       __CPY_LE16(tavg_lk);
-       __CPY_LE16(tmax_lk);
-       __CPY_LE32S(slot_cnt);
-       __CPY_LE32S(bcn_cnt);
-       __CPY_LE32(leakrx_cnt);
-       __CPY_LE32(collision_cnt);
-       __CPY_LE32(skip_cnt);
-       __CPY_LE32(exception);
-       __CPY_LE32(except_cnt);
-       __CPY_LE16S(tslot_cycle);
-
-#undef __CPY_U8
-#undef __CPY_LE16
-#undef __CPY_LE16S
-#undef __CPY_LE32
-#undef __CPY_LE32S
-}
-
 #define BTC_LEAK_AP_TH 10
 #define BTC_CYSTA_CHK_PERIOD 100
 
        struct rtw89_btc_bt_info *bt = &btc->cx.bt;
        struct rtw89_btc_fbtc_rpt_ctrl *prpt;
        struct rtw89_btc_fbtc_rpt_ctrl_v1 *prpt_v1;
-       struct rtw89_btc_fbtc_cysta *pcysta_le32 = NULL;
+       struct rtw89_btc_fbtc_cysta *pcysta = NULL;
        struct rtw89_btc_fbtc_cysta_v1 *pcysta_v1 = NULL;
-       struct rtw89_btc_fbtc_cysta_cpu pcysta[1];
        struct rtw89_btc_prpt *btc_prpt = NULL;
        void *rpt_content = NULL, *pfinfo = NULL;
        u8 rpt_type = 0;
                pcinfo = &pfwinfo->rpt_fbtc_cysta.cinfo;
                if (chip->chip_id == RTL8852A) {
                        pfinfo = &pfwinfo->rpt_fbtc_cysta.finfo;
-                       pcysta_le32 = &pfwinfo->rpt_fbtc_cysta.finfo;
-                       rtw89_btc_fbtc_cysta_to_cpu(pcysta_le32, pcysta);
+                       pcysta = &pfwinfo->rpt_fbtc_cysta.finfo;
                        pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_cysta.finfo);
                } else {
                        pfinfo = &pfwinfo->rpt_fbtc_cysta.finfo_v1;
                break;
        case BTC_RPT_TYPE_CYSTA:
                if (chip->chip_id == RTL8852A) {
-                       if (pcysta->cycles < BTC_CYSTA_CHK_PERIOD)
+                       if (le16_to_cpu(pcysta->cycles) < BTC_CYSTA_CHK_PERIOD)
                                break;
                        /* Check Leak-AP */
-                       if (pcysta->slot_cnt[CXST_LK] != 0 &&
-                           pcysta->leakrx_cnt != 0 && dm->tdma_now.rxflctrl) {
-                               if (pcysta->slot_cnt[CXST_LK] <
-                                   BTC_LEAK_AP_TH * pcysta->leakrx_cnt)
+                       if (le32_to_cpu(pcysta->slot_cnt[CXST_LK]) != 0 &&
+                           le32_to_cpu(pcysta->leakrx_cnt) != 0 && dm->tdma_now.rxflctrl) {
+                               if (le32_to_cpu(pcysta->slot_cnt[CXST_LK]) <
+                                   BTC_LEAK_AP_TH * le32_to_cpu(pcysta->leakrx_cnt))
                                        dm->leak_ap = 1;
                        }
 
                        else
                                wl_slot_set = le16_to_cpu(dm->slot_now[CXST_W1].dur);
 
-                       if (pcysta->tavg_cycle[CXT_WL] > wl_slot_set) {
-                               diff_t = pcysta->tavg_cycle[CXT_WL] - wl_slot_set;
+                       if (le16_to_cpu(pcysta->tavg_cycle[CXT_WL]) > wl_slot_set) {
+                               diff_t = le16_to_cpu(pcysta->tavg_cycle[CXT_WL]) - wl_slot_set;
                                _chk_btc_err(rtwdev,
                                             BTC_DCNT_WL_SLOT_DRIFT, diff_t);
                        }
 
                        _chk_btc_err(rtwdev, BTC_DCNT_W1_FREEZE,
-                                    pcysta->slot_cnt[CXST_W1]);
+                                    le32_to_cpu(pcysta->slot_cnt[CXST_W1]));
                        _chk_btc_err(rtwdev, BTC_DCNT_W1_FREEZE,
-                                    pcysta->slot_cnt[CXST_B1]);
+                                    le32_to_cpu(pcysta->slot_cnt[CXST_B1]));
                        _chk_btc_err(rtwdev, BTC_DCNT_CYCLE_FREEZE,
-                                    (u32)pcysta->cycles);
+                                    le16_to_cpu(pcysta->cycles));
                } else {
                        if (le16_to_cpu(pcysta_v1->cycles) < BTC_CYSTA_CHK_PERIOD)
                                break;
        struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
        struct rtw89_btc_rpt_cmn_info *pcinfo = NULL;
        struct rtw89_btc_fbtc_cysta *pcysta_le32 = NULL;
-       struct rtw89_btc_fbtc_cysta_cpu pcysta[1];
        union rtw89_btc_fbtc_rxflct r;
        u8 i, cnt = 0, slot_pair;
        u16 cycle, c_begin, c_end, store_index;
                return;
 
        pcysta_le32 = &pfwinfo->rpt_fbtc_cysta.finfo;
-       rtw89_btc_fbtc_cysta_to_cpu(pcysta_le32, pcysta);
        seq_printf(m,
                   " %-15s : cycle:%d, bcn[all:%d/all_ok:%d/bt:%d/bt_ok:%d]",
-                  "[cycle_cnt]", pcysta->cycles, pcysta->bcn_cnt[CXBCN_ALL],
-                  pcysta->bcn_cnt[CXBCN_ALL_OK],
-                  pcysta->bcn_cnt[CXBCN_BT_SLOT],
-                  pcysta->bcn_cnt[CXBCN_BT_OK]);
+                  "[cycle_cnt]",
+                  le16_to_cpu(pcysta_le32->cycles),
+                  le32_to_cpu(pcysta_le32->bcn_cnt[CXBCN_ALL]),
+                  le32_to_cpu(pcysta_le32->bcn_cnt[CXBCN_ALL_OK]),
+                  le32_to_cpu(pcysta_le32->bcn_cnt[CXBCN_BT_SLOT]),
+                  le32_to_cpu(pcysta_le32->bcn_cnt[CXBCN_BT_OK]));
 
        for (i = 0; i < CXST_MAX; i++) {
-               if (!pcysta->slot_cnt[i])
+               if (!le32_to_cpu(pcysta_le32->slot_cnt[i]))
                        continue;
-               seq_printf(m,
-                          ", %d:%d", (u32)i, pcysta->slot_cnt[i]);
+               seq_printf(m, ", %d:%d", (u32)i,
+                          le32_to_cpu(pcysta_le32->slot_cnt[i]));
        }
 
        if (dm->tdma_now.rxflctrl) {
-               seq_printf(m,
-                          ", leak_rx:%d", pcysta->leakrx_cnt);
+               seq_printf(m, ", leak_rx:%d",
+                          le32_to_cpu(pcysta_le32->leakrx_cnt));
        }
 
-       if (pcysta->collision_cnt) {
-               seq_printf(m,
-                          ", collision:%d", pcysta->collision_cnt);
+       if (le32_to_cpu(pcysta_le32->collision_cnt)) {
+               seq_printf(m, ", collision:%d",
+                          le32_to_cpu(pcysta_le32->collision_cnt));
        }
 
-       if (pcysta->skip_cnt) {
-               seq_printf(m,
-                          ", skip:%d", pcysta->skip_cnt);
+       if (le32_to_cpu(pcysta_le32->skip_cnt)) {
+               seq_printf(m, ", skip:%d",
+                          le32_to_cpu(pcysta_le32->skip_cnt));
        }
        seq_puts(m, "\n");
 
        seq_printf(m, " %-15s : avg_t[wl:%d/bt:%d/lk:%d.%03d]",
                   "[cycle_time]",
-                  pcysta->tavg_cycle[CXT_WL],
-                  pcysta->tavg_cycle[CXT_BT],
-                  pcysta->tavg_lk / 1000, pcysta->tavg_lk % 1000);
-       seq_printf(m,
-                  ", max_t[wl:%d/bt:%d/lk:%d.%03d]",
-                  pcysta->tmax_cycle[CXT_WL],
-                  pcysta->tmax_cycle[CXT_BT],
-                  pcysta->tmax_lk / 1000, pcysta->tmax_lk % 1000);
-       seq_printf(m,
-                  ", maxdiff_t[wl:%d/bt:%d]\n",
-                  pcysta->tmaxdiff_cycle[CXT_WL],
-                  pcysta->tmaxdiff_cycle[CXT_BT]);
-
-       if (pcysta->cycles == 0)
+                  le16_to_cpu(pcysta_le32->tavg_cycle[CXT_WL]),
+                  le16_to_cpu(pcysta_le32->tavg_cycle[CXT_BT]),
+                  le16_to_cpu(pcysta_le32->tavg_lk) / 1000,
+                  le16_to_cpu(pcysta_le32->tavg_lk) % 1000);
+       seq_printf(m, ", max_t[wl:%d/bt:%d/lk:%d.%03d]",
+                  le16_to_cpu(pcysta_le32->tmax_cycle[CXT_WL]),
+                  le16_to_cpu(pcysta_le32->tmax_cycle[CXT_BT]),
+                  le16_to_cpu(pcysta_le32->tmax_lk) / 1000,
+                  le16_to_cpu(pcysta_le32->tmax_lk) % 1000);
+       seq_printf(m, ", maxdiff_t[wl:%d/bt:%d]\n",
+                  le16_to_cpu(pcysta_le32->tmaxdiff_cycle[CXT_WL]),
+                  le16_to_cpu(pcysta_le32->tmaxdiff_cycle[CXT_BT]));
+
+       if (le16_to_cpu(pcysta_le32->cycles) == 0)
                return;
 
        /* 1 cycle record 1 wl-slot and 1 bt-slot */
        slot_pair = BTC_CYCLE_SLOT_MAX / 2;
 
-       if (pcysta->cycles <= slot_pair)
+       if (le16_to_cpu(pcysta_le32->cycles) <= slot_pair)
                c_begin = 1;
        else
-               c_begin = pcysta->cycles - slot_pair + 1;
+               c_begin = le16_to_cpu(pcysta_le32->cycles) - slot_pair + 1;
 
-       c_end = pcysta->cycles;
+       c_end = le16_to_cpu(pcysta_le32->cycles);
 
        for (cycle = c_begin; cycle <= c_end; cycle++) {
                cnt++;
                if (cnt % (BTC_CYCLE_SLOT_MAX / 4) == 1)
                        seq_printf(m,
                                   " %-15s : ->b%02d->w%02d", "[cycle_step]",
-                                  pcysta->tslot_cycle[store_index],
-                                  pcysta->tslot_cycle[store_index + 1]);
+                                  le16_to_cpu(pcysta_le32->tslot_cycle[store_index]),
+                                  le16_to_cpu(pcysta_le32->tslot_cycle[store_index + 1]));
                else
                        seq_printf(m,
                                   "->b%02d->w%02d",
-                                  pcysta->tslot_cycle[store_index],
-                                  pcysta->tslot_cycle[store_index + 1]);
+                                  le16_to_cpu(pcysta_le32->tslot_cycle[store_index]),
+                                  le16_to_cpu(pcysta_le32->tslot_cycle[store_index + 1]));
                if (cnt % (BTC_CYCLE_SLOT_MAX / 4) == 0 || cnt == c_end)
                        seq_puts(m, "\n");
        }
                seq_printf(m,
                           " %-15s : a2dp_ept:%d, a2dp_late:%d",
                           "[a2dp_t_sta]",
-                          pcysta->a2dpept, pcysta->a2dpeptto);
+                          le16_to_cpu(pcysta_le32->a2dpept),
+                          le16_to_cpu(pcysta_le32->a2dpeptto));
 
                seq_printf(m,
                           ", avg_t:%d, max_t:%d",
-                          pcysta->tavg_a2dpept, pcysta->tmax_a2dpept);
+                          le16_to_cpu(pcysta_le32->tavg_a2dpept),
+                          le16_to_cpu(pcysta_le32->tmax_a2dpept));
                r.val = dm->tdma_now.rxflctrl;
 
                if (r.type && r.tgln_n) {
                        seq_printf(m,
                                   ", cycle[PSTDMA:%d/TDMA:%d], ",
-                                  pcysta->cycles_a2dp[CXT_FLCTRL_ON],
-                                  pcysta->cycles_a2dp[CXT_FLCTRL_OFF]);
+                                  le16_to_cpu(pcysta_le32->cycles_a2dp[CXT_FLCTRL_ON]),
+                                  le16_to_cpu(pcysta_le32->cycles_a2dp[CXT_FLCTRL_OFF]));
 
                        seq_printf(m,
                                   "avg_t[PSTDMA:%d/TDMA:%d], ",
-                                  pcysta->tavg_a2dp[CXT_FLCTRL_ON],
-                                  pcysta->tavg_a2dp[CXT_FLCTRL_OFF]);
+                                  le16_to_cpu(pcysta_le32->tavg_a2dp[CXT_FLCTRL_ON]),
+                                  le16_to_cpu(pcysta_le32->tavg_a2dp[CXT_FLCTRL_OFF]));
 
                        seq_printf(m,
                                   "max_t[PSTDMA:%d/TDMA:%d]",
-                                  pcysta->tmax_a2dp[CXT_FLCTRL_ON],
-                                  pcysta->tmax_a2dp[CXT_FLCTRL_OFF]);
+                                  le16_to_cpu(pcysta_le32->tmax_a2dp[CXT_FLCTRL_ON]),
+                                  le16_to_cpu(pcysta_le32->tmax_a2dp[CXT_FLCTRL_OFF]));
                }
                seq_puts(m, "\n");
        }