[Pdbg] [PATCH v2 08/15] main: Switch to path based target selection

Alistair Popple alistair at popple.id.au
Tue Nov 13 15:19:11 AEDT 2018


On Tuesday, 13 November 2018 3:16:22 PM AEDT Alistair Popple wrote:
> Looks good, happy to see this code start to disappear.
> 
> > @@ -523,19 +519,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);
> 
> Do you think there's any value in keeping this function rather than just
> changing the existing code to call path_target_add() directly? It's not part
> of any external API so it seems to just add an unnecessary indirection.

Actually better yet might be to just delete these functions and rename the new 
path_target_add() and path_target_selected() to target_select() and 
target_selected()?

- Alistair

> >  }
> >  
> >  bool target_selected(struct pdbg_target *target)
> >  {
> > 
> > -	return (bool) pdbg_target_priv(target);
> > +	return path_target_selected(target);
> 
> Ditto.
> 
> - Alistair
> 
> >  }
> >  
> >  /* Returns the sum of return codes. This can be used to count how many
> > 
> > targets the callback was run on. */ @@ -554,7 +543,6 @@ int
> > for_each_child_target(char *class, struct pdbg_target *parent,
> > 
> >  		index = pdbg_target_index(target);
> >  		assert(index != -1);
> > 
> > -		pdbg_target_probe(target);
> > 
> >  		status = pdbg_target_status(target);
> >  		if (status != PDBG_TARGET_ENABLED)
> >  		
> >  			continue;
> > 
> > @@ -578,7 +566,6 @@ int for_each_target(char *class, int (*cb)(struct
> > pdbg_target *, uint32_t, uint6
> > 
> >  		index = pdbg_target_index(target);
> >  		assert(index != -1);
> > 
> > -		pdbg_target_probe(target);
> > 
> >  		status = pdbg_target_status(target);
> >  		if (status != PDBG_TARGET_ENABLED)
> >  		
> >  			continue;
> > 
> > @@ -603,8 +590,6 @@ void for_each_target_release(char *class)
> > 
> >  static bool target_selection(void)
> >  {
> > 
> > -	struct pdbg_target *fsi, *pib, *chip, *thread;
> > -
> > 
> >  	switch (backend) {
> >  
> >  #ifdef TARGET_ARM
> >  
> >  	case I2C:
> > @@ -671,63 +656,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_target_set_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 'pdbg -a probe' 
to
> > get a list of all valid targets\n"); +		return false;
> > +	}
> > +
> > 
> >  	return true;
> >  
> >  }
> > 
> > @@ -860,8 +799,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;
> >  
> >  }




More information about the Pdbg mailing list