GPIO state in qemu
Rashmica Gupta
rashmica.g at gmail.com
Wed Sep 11 11:12:34 AEST 2019
On Mon, 2019-09-09 at 19:02 +0200, Cédric Le Goater wrote:
> On 09/09/2019 18:20, James Feist wrote:
> > On 9/6/19 11:05 AM, Joel Stanley wrote:
> > > At the osfc hackathon today James and I were talking about Qemu's
> > > new support for modelling GPIOs. Here's some documentation on how
> > > it can be used.
> > >
> > > To set a pin's state in the monitor:
> > >
> > > qom-set gpio gpioA0 true
> > >
> > > To do the equivalent in code:
> > >
> > > object_property_set_bool(OBJECT(&s->gpio), true, "gpioA0",
> > > &error_abort);
> >
> > I'm trying to use object_property_set_bool in hw/arm/aspeed.c in an
> > i2c_init block and I'm noticing by the time uboot is reached that
> > the registers are reset back to the default.
>
> These routines are called before the machine and devices are reseted.
>
> > If I use qom-set it seems to work correctly.
>
> The machine has been reseted.
>
> > Where is the correct place to put the object_property_set_bool so
> > that it doesn't get reset by the time it's ready to be read? Does
> > AspeedBoardConfig need a gpio_init as well as an i2c_init?
>
> we would need to change the default reset value in the reset handler
> of the GPIO device model : aspeed_gpio_reset(). We don't have a way
> to set default values yet, all 0s for now.
>
> Rashmica,
>
> Would it be complex to add a set of default values with which we
> could memset the ->sets array in the reset handler() like we do
> for SCU ?
>
I think it should be pretty straightforward. Do we want one statically
defined set of default values per SoC version?
> Having a different set of default values per machine would require
> a second set of properties under AspeedGPIOState and some slight
> rework of aspeed_gpio_get/set_pin.
>
Why would it require rework of get/set pin?
> Didn't you have a patch for reset tolerant values some time ago ?
>
Yes, but it was a bit hacky and I didn't have a good way to test it. We
need to share a property with the wdt and differentiate between a SoC
reset, full system reset and a full wdt reset. Iirc we only use the
reset tolerant values for a SoC reset? I assume we would want to set
the default values for all three types of reset?
> Thanks,
>
> C.
More information about the openbmc
mailing list