sink = coresight_get_enabled_sink(true);
        }
 
-       if (!sink)
-               goto err;
-
        mask = &event_data->mask;
 
        /*
                        continue;
                }
 
+               /*
+                * No sink provided - look for a default sink for one of the
+                * devices. At present we only support topology where all CPUs
+                * use the same sink [N:1], so only need to find one sink. The
+                * coresight_build_path later will remove any CPU that does not
+                * attach to the sink, or if we have not found a sink.
+                */
+               if (!sink)
+                       sink = coresight_find_default_sink(csdev);
+
                /*
                 * Building a path doesn't enable it, it simply builds a
                 * list of devices from source to sink that can be
                *etm_event_cpu_path_ptr(event_data, cpu) = path;
        }
 
+       /* no sink found for any CPU - cannot trace */
+       if (!sink)
+               goto err;
+
        /* If we don't have any CPUs ready for tracing, abort */
        cpu = cpumask_first(mask);
        if (cpu >= nr_cpu_ids)