x86-power-control
Bills, Jason M
jason.m.bills at linux.intel.com
Wed Oct 23 04:14:45 AEDT 2019
On 10/21/2019 6:15 PM, Vijay Khemka wrote:
>
>
> On 10/21/19, 4:04 PM, "Bills, Jason M" <jason.m.bills at linux.intel.com> wrote:
>
>
>
> On 10/18/2019 4:04 PM, Vijay Khemka wrote:
> >
> >
> > On 10/18/19, 11:02 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:
> >
> >
> >
> > 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?
> >
> > No, It is not working because it simplpy sets power_out to '0'. But to power on
> > it should got down as 0 and come back to 1 after a delay. Which happens only
> > in case of powerButtonMask set to true. I guess we may need to fix this.
>
> Ahh, okay. I think I see the issue now.
>
> The issue is that because releasing the GPIO on a system with
> pass-through, sets the power button back to the hardware default
> automatically, the software setting doesn't matter, so it is left at 0.
>
> If you don't need to keep holding the GPIO line for POWER_OUT, I think
> you can just add the code to revert the POWER_OUT value when the timer
> expires.
>
> Take this line:
> // Set the masked GPIO line back to the opposite value
> maskedGPIOLine.set_value(!value);
> From here:
> https://github.com/openbmc/x86-power-control/blob/master/power-control-x86/src/power_control.cpp#L891
>
> And add it here:
> https://github.com/openbmc/x86-power-control/blob/master/power-control-x86/src/power_control.cpp#L932
>
> I already did that as a work around, testing different scenario. Will send patch once I see it working.
>
> I also want to make these timeout values as configurable, either I can add these as a property in dbus interface or
> Entity-manager or have a separate config json file. What would you prefer.
Another option that may be simpler is to move the values that you want
to configure out to a header file and then override the header in a
bbappend. Then you don't need to read or parse any additional
configuration information at run time.
>
>
> >
> >
>
>
More information about the openbmc
mailing list