[Pdbg] [PATCH v2 14/15] main: Convert getscom/putscom to use path based targeting

Amitay Isaacs amitay at ozlabs.org
Wed Nov 14 16:56:29 AEDT 2018


On Tue, 2018-11-13 at 16:09 +1100, Alistair Popple wrote:
> On Friday, 9 November 2018 6:10:10 PM AEDT Amitay Isaacs wrote:
> > +static bool scommable(struct pdbg_target *target)
> >  {
> > -	uint64_t value;
> > -
> > -	if (pib_read(target, *addr, &value))
> > -		return 0;
> > +	char *classname;
> > 
> > -	printf("p%d:0x%" PRIx64 " = 0x%016" PRIx64 "\n", index, *addr,
> > value);
> > +	classname = pdbg_target_class_name(target);
> > +	if (!strcmp(classname, "pib") ||
> > +	    !strcmp(classname, "core") ||
> > +	    !strcmp(classname, "thread"))
> > +		return true;
> 
> As we've discussed/agreed this is suboptimal but will work for the
> time being 
> until we come up with a better solution.

Just to confirm, does getscom/putscom work on thread class?  Or it's
only pib and core classes?

> 
> > -	return 1;
> > +	return false;
> >  }
> 
> <snip>
> 
> > +		/* TODO: Restore the <mask> functionality */
> 
> We really should fix that at some point :-) I will take a look at it
> once this 
> series is done.
> 
> > +		if (pib_write(target, addr, data)) {
> > +			printf("%s: failed\n", path);
> > +			free(path);
> > +			continue;
> > +		}
> > +
> > +		count++;
> > +	}
> > +
> > +	return count;
> >  }
> >  OPTCMD_DEFINE_CMD_WITH_ARGS(putscom, putscom, (ADDRESS, DATA,
> > DEFAULT_DATA("0xffffffffffffffff"))); diff --git
> > a/tests/test_hw_bmc.sh
> > b/tests/test_hw_bmc.sh
> > index 9bc1deb..d656a3f 100755
> > --- a/tests/test_hw_bmc.sh
> > +++ b/tests/test_hw_bmc.sh
> > @@ -91,7 +91,7 @@ do_skip
> >  test_run $PDBG -P fsi getcfam 0xc09
> > 
> >  test_result 0 <<EOF
> > -p0:0xf000f = HEX16
> > +/kernelfsi at 0/pib at 1000: 0xf000f = HEX16
> 
> As mentioned in the previous patch I think for the time being we
> should try 
> and maintain the same output if possible. I suspect printing the full
> path 
> will just be confusing so perhaps we could add it as an option?

Sure.  This means that if the selected target is a core, then it will
print "p0:c0:" and for a thread it will print "p0:c0:t0:".

Can we do getscom/putscom on non pib/core/thread targets?  If yes, what
should be the prefix for those targets?


> Also I think we should print the complete translated SCOM address
> rather than 
> the offset pdbg was called with. Thanks!

We need pdbg_target_address_translate() or something similar. IIRC,
there was a patch that added a public wrapper around
get_class_target_addr() but used a bad name.  :-)

I can add that patch back.

Amitay.
-- 

Don't clutch the past so tightly to your chest that it leaves your arms 
full to embrace the present.  - Jan Gildwell



More information about the Pdbg mailing list