@@ -73,10 +73,6 @@ static int i2c_addr = 0x50;
#define MAX_LINUX_CPUS (MAX_PROCESSORS * MAX_CHIPS * MAX_THREADS)
-static int **processorsel[MAX_PROCESSORS];
-static int *chipsel[MAX_PROCESSORS][MAX_CHIPS];
-static int threadsel[MAX_PROCESSORS][MAX_CHIPS][MAX_THREADS];
-
#define MAX_PATH_ARGS 16
static const char *pathsel[MAX_PATH_ARGS];
@@ -522,19 +518,12 @@ static bool parse_options(int argc, char *argv[])
void target_select(struct pdbg_target *target)
{
- /* We abuse the private data pointer atm to indicate the target is
- * selected */
- pdbg_target_priv_set(target, (void *) 1);
-}
-
-void target_unselect(struct pdbg_target *target)
-{
- pdbg_target_priv_set(target, NULL);
+ path_target_add(target);
}
bool target_selected(struct pdbg_target *target)
{
- return (bool) pdbg_target_priv(target);
+ return path_target_selected(target);
}
/* Returns the sum of return codes. This can be used to count how many targets the callback was run on. */
@@ -600,10 +589,8 @@ void for_each_target_release(char *class)
}
}
-static bool target_selection(void)
+static bool target_selection(const char *prog)
{
- struct pdbg_target *fsi, *pib, *chip, *thread;
-
switch (backend) {
#ifdef TARGET_ARM
case I2C:
@@ -670,63 +657,17 @@ static bool target_selection(void)
return false;
}
- /* At this point we should have a device-tree loaded. We want
- * to walk the tree and disabled nodes we don't care about
- * prior to probing. */
- pdbg_for_each_class_target("pib", pib) {
- int proc_index = pdbg_target_index(pib);
-
- if (backend == I2C && device_node)
- pdbg_set_target_property(pib, "bus", device_node, strlen(device_node) + 1);
-
- if (processorsel[proc_index]) {
- target_select(pib);
- pdbg_for_each_target("core", pib, chip) {
- int chip_index = pdbg_target_index(chip);
- if (pdbg_parent_index(chip, "pib") != proc_index)
- continue;
-
- if (chipsel[proc_index][chip_index]) {
- target_select(chip);
- pdbg_for_each_target("thread", chip, thread) {
- int thread_index = pdbg_target_index(thread);
- if (threadsel[proc_index][chip_index][thread_index])
- target_select(thread);
- else
- target_unselect(thread);
- }
- } else
- target_unselect(chip);
- }
-
- /* This is kinda broken as we're overloading what '-c'
- * means - it's now up to each command to select targets
- * based on core/chiplet. We really need a better
- * solution to target selection. */
- pdbg_for_each_target("chiplet", pib, chip) {
- int chip_index = pdbg_target_index(chip);
- if (chipsel[proc_index][chip_index]) {
- target_select(chip);
- } else
- target_unselect(chip);
- }
- } else
- target_unselect(pib);
- }
-
- pdbg_for_each_class_target("fsi", fsi) {
- int index = pdbg_target_index(fsi);
- if (processorsel[index])
- target_select(fsi);
- else
- target_unselect(fsi);
- }
-
if (pathsel_count) {
if (!path_target_parse(pathsel, pathsel_count))
return false;
}
+ if (!path_target_present()) {
+ printf("No valid targets found or specified. Try adding -p/-c/-t options to specify a target.\n");
+ printf("Alternatively run '%s -a probe' to get a list of all valid targets\n", basename(prog));
+ return false;
+ }
+
return true;
}
@@ -819,7 +760,7 @@ int main(int argc, char *argv[])
device_node = default_target(backend);
/* Disable unselected targets */
- if (!target_selection())
+ if (!target_selection(argv[0]))
return 1;
atexit(atexit_release);
@@ -853,8 +794,5 @@ found_action:
if (rc > 0)
return 0;
- printf("No valid targets found or specified. Try adding -p/-c/-t options to specify a target.\n");
- printf("Alternatively run '%s -a probe' to get a list of all valid targets\n",
- basename(argv[0]));
return 1;
}
Drop the old target selection code. Signed-off-by: Amitay Isaacs <amitay@ozlabs.org> --- src/main.c | 82 +++++++----------------------------------------------- 1 file changed, 10 insertions(+), 72 deletions(-)