if (up_req->msg.req_type == DP_CONNECTION_STATUS_NOTIFY) {
                const struct drm_dp_connection_status_notify *conn_stat =
                        &up_req->msg.u.conn_stat;
+               bool handle_csn;
 
                drm_dbg_kms(mgr->dev, "Got CSN: pn: %d ldps:%d ddps: %d mcs: %d ip: %d pdt: %d\n",
                            conn_stat->port_number,
                            conn_stat->message_capability_status,
                            conn_stat->input_port,
                            conn_stat->peer_device_type);
+
+               mutex_lock(&mgr->probe_lock);
+               handle_csn = mgr->mst_primary->link_address_sent;
+               mutex_unlock(&mgr->probe_lock);
+
+               if (!handle_csn) {
+                       drm_dbg_kms(mgr->dev, "Got CSN before finish topology probing. Skip it.");
+                       kfree(up_req);
+                       goto out;
+               }
        } else if (up_req->msg.req_type == DP_RESOURCE_STATUS_NOTIFY) {
                const struct drm_dp_resource_status_notify *res_stat =
                        &up_req->msg.u.resource_stat;