x86-power-control

Bills, Jason M jason.m.bills at linux.intel.com
Sat Oct 19 05:00:18 AEDT 2019



On 10/17/2019 4:52 PM, Vijay Khemka wrote:
> 
> 
> On 10/17/19, 4:27 PM, "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:
> 
>      
>      
>      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.
> So to use x-86-power-control, either we need to have IPMI command to enable
> this or some other daemon has to set this property. Can we have this feature
> optional. I guess this is a prt og GPIO passthrough.

Yes, this is part of GPIO passthrough.  When the GPIO is requested, 
passthrough is disabled in the pinctrl driver.  So, to mask the power 
button (disable passthrough), power-control requests and holds the 
"POWER_OUT" GPIO line.

It should behave normally without this property ever getting set.

>      
>      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);
> 
> This function will not run power on/off sequence until button mask is set. It
> Will only set GPIO value which is not enough for powering on/off.

Something else is going on, here.  The powerButtonMask is a separate 
feature from driving the "POWER_OUT" pin.  If powerButtonMask is not 
set, then the power on/off should function normally.  There is a special 
case in the setGPIOOutputForMs() code to handle when "POWER_OUT" is 
driven while powerButtonMask is true:

     // If the requested GPIO is masked, use the mask line to set the output
     if (powerButtonMask && name == "POWER_OUT")
     {
         return setMaskedGPIOOutputForMs(powerButtonMask, name, value,
                                         durationMs);
     }
     ...
     // No mask set, so request and set the GPIO normally

So, "POWER_OUT" should work either way, but the default behavior is to 
function without powerButtonMask set.  Are you seeing failures on your 
platform when powerButtonMask is false?


More information about the openbmc mailing list