struct sta_rec_state *state;
        struct sta_rec_phy *phy;
        struct tlv *tlv;
+       u16 supp_rates;
 
        /* starec ht */
        if (sta->ht_cap.ht_supported) {
 
        tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_RA, sizeof(*ra_info));
        ra_info = (struct sta_rec_ra_info *)tlv;
-       ra_info->legacy = cpu_to_le16((u16)sta->supp_rates[band]);
+
+       supp_rates = sta->supp_rates[band];
+       if (band == NL80211_BAND_2GHZ)
+               supp_rates = FIELD_PREP(RA_LEGACY_OFDM, supp_rates >> 4) |
+                            FIELD_PREP(RA_LEGACY_CCK, supp_rates & 0xf);
+       else
+               supp_rates = FIELD_PREP(RA_LEGACY_OFDM, supp_rates);
+
+       ra_info->legacy = cpu_to_le16(supp_rates);
 
        if (sta->ht_cap.ht_supported)
                memcpy(ra_info->rx_mcs_bitmask, sta->ht_cap.mcs.rx_mask,