x86-power-control

Bills, Jason M jason.m.bills at linux.intel.com
Fri Oct 18 10:25:33 AEDT 2019



On 10/17/2019 3:32 PM, Vijay Khemka wrote:
> 
> On 10/17/19, 9:03 AM, "openbmc on behalf of Bills, Jason M" <openbmc-bounces+vijaykhemka=fb.com at lists.ozlabs.org on behalf of jason.m.bills at linux.intel.com> wrote:
> 
>      Hi Vijay
>      
>      On 10/16/2019 6:13 PM, Vijay Khemka wrote:
>      > One more question on code, I see following code requires powerButtonMask
>      > to be set before aquiring GPIO line. Please let me know who sets this
>      > powerButtonMask to true. I know this is related to GPIO passthrough but
>      > still couldn’t understand where in code it gets set until someone call
>      > set-property of dbus.
>      
>      powerButtonMask is a gpiod::line object that returns true if it
>      references a GPIO line and false otherwise.
> 
> I understood code but my point here is there will not be any
> gpiod::line object if powerButtonMask is defined as false. And
> initially it is defined as false means tehre will not be any line
> object created until someone sets it to true. And I don't see it
> any way to set it true other than set-property through dbus.

That's correct.  Masking the power button is something that is done by 
some component outside of power-control.

For example, we currently use it with the Set Front Panel Button Enables 
IPMI command to enable/disable the power button.  So, it is only masked 
when requested.

The actual "POWER_OUT" line for power-control is not permanently 
created, but is asserted using temporary calls like this one:
setGPIOOutputForMs("POWER_OUT", 0, powerPulseTimeMs);

https://github.com/openbmc/x86-power-control/blob/master/power-control-x86/src/power_control.cpp#L946

>      
>      >
>      > power_control::powerButtonIface->register_property(
>      >
>      > "ButtonMasked", false, [](constboolrequested, bool& current) {
>      >
>      > if(requested)
>      >
>      > {
>      >
>      > if(power_control::powerButtonMask)
>      >
>      > {
>      This will return if powerButtonMask already references a GPIO.
>      
>      >
>      > return1;
>      >
>      > }
>      >
>      > if(!power_control::setGPIOOutput(
>      >
>      > "POWER_OUT", 1, power_control::powerButtonMask))
>      Otherwise, this will request the "POWER_OUT" GPIO and assign it to
>      powerButtonMask (which will make it return true).
>      
>      >
>      > {
>      >
>      > throwstd::runtime_error("Failed to request GPIO");
>      >
>      > return0;
>      >
>      > }
>      >
>      > std::cerr << "Power Button Masked.\n";
>      >
>      > }
>      >
>      > else
>      >
>      > {
>      >
>      > if(!power_control::powerButtonMask)
>      >
>      > {
>      This will return if powerButtonMask does not reference a GPIO line.
>      
>      >
>      > return1;
>      >
>      > }
>      >
>      > std::cerr << "Power Button Un-masked\n";
>      >
>      > power_control::powerButtonMask.reset();
>      Otherwise this will reset powerButtonMask to release the "POWER_OUT"
>      GPIO (which will make it return false).
>      
>      >
>      > }
>      >
>      > Regards
>      >
>      > -Vijay
>      >
>      
> 


More information about the openbmc mailing list