GPIO state in qemu

Cédric Le Goater clg at kaod.org
Thu Sep 12 02:13:12 AEST 2019


On 11/09/2019 03:12, Rashmica Gupta wrote:
> 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?

yes, to start with, like we do in SCU. 

But we would need a property for the specific needs of a board, which 
value would override the default SoC reset values. 

>> 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?

because we would only need the logic to set the value and the helper 
aspeed_gpio_update() does more. 

C.



More information about the openbmc mailing list