*     are 0 in the mask should be randomised, bits that are 1 should
  *     be taken from the @mac_addr
  * @scan_6ghz: relevant for split scan request only,
- *     true if this is the second scan request
+ *     true if this is a 6 GHz scan request
+ * @first_part: %true if this is the first part of a split scan request or a
+ *     scan that was not split. May be %true for a @scan_6ghz scan if no other
+ *     channels were requested
  * @n_6ghz_params: number of 6 GHz params
  * @scan_6ghz_params: 6 GHz params
  * @bssid: BSSID to scan for (most commonly, the wildcard BSSID)
        unsigned long scan_start;
        bool no_cck;
        bool scan_6ghz;
+       bool first_part;
        u32 n_6ghz_params;
        struct cfg80211_scan_6ghz_params *scan_6ghz_params;
        s8 tsf_report_link_id;
 
        return false;
 }
 
-static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev)
+static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev,
+                             bool first_part)
 {
        u8 i;
        struct cfg80211_colocated_ap *ap;
        size_t size, offs_ssids, offs_6ghz_params, offs_ies;
 
        rdev_req->req.scan_6ghz = true;
+       rdev_req->req.first_part = first_part;
 
        if (!rdev->wiphy.bands[NL80211_BAND_6GHZ])
                return -EOPNOTSUPP;
                 * If this scan follows a previous scan, save the scan start
                 * info from the first part of the scan
                 */
-               if (old)
+               if (!first_part && !WARN_ON(!old))
                        rdev->int_scan_req->info = old->info;
 
                err = rdev_scan(rdev, request);
        struct cfg80211_scan_request_int *rdev_req = rdev->scan_req;
        u32 n_channels = 0, idx, i;
 
-       if (!(rdev->wiphy.flags & WIPHY_FLAG_SPLIT_SCAN_6GHZ))
+       if (!(rdev->wiphy.flags & WIPHY_FLAG_SPLIT_SCAN_6GHZ)) {
+               rdev_req->req.first_part = true;
                return rdev_scan(rdev, rdev_req);
+       }
 
        for (i = 0; i < rdev_req->req.n_channels; i++) {
                if (rdev_req->req.channels[i]->band != NL80211_BAND_6GHZ)
        }
 
        if (!n_channels)
-               return cfg80211_scan_6ghz(rdev);
+               return cfg80211_scan_6ghz(rdev, true);
 
        request = kzalloc(struct_size(request, req.channels, n_channels),
                          GFP_KERNEL);
        }
 
        rdev_req->req.scan_6ghz = false;
+       rdev_req->req.first_part = true;
        rdev->int_scan_req = request;
        return rdev_scan(rdev, request);
 }
        if (wdev_running(wdev) &&
            (rdev->wiphy.flags & WIPHY_FLAG_SPLIT_SCAN_6GHZ) &&
            !rdev_req->req.scan_6ghz && !request->info.aborted &&
-           !cfg80211_scan_6ghz(rdev))
+           !cfg80211_scan_6ghz(rdev, false))
                return;
 
        /*