Server Power On mystery
Mike Jones
proclivis at gmail.com
Tue Aug 25 04:28:59 AEST 2020
Milton,
This is giving me a good start and I am digging through the docs.
I want to test my concepts, so for each of these, I’ll write what I think is true and you can tell me where I am wrong, and put a question where I am not sure.
- BMC power is assumed to be independent from BMC power
- Enabling chassis power can interact with a HotSwap device or power path switching device, or an IBC, etc, to power on/off everything in the chassis but the BMC
- When the Host is off, does this imply it has no power, or that the host is in an idle state and not running but has power applied?
- For the above question, I assume most systems are VRM based
- What about auxiliary supplies? Suppose a design has an FPGA or DSP independent from the host. Are these expected to follow chassis or host power? In non-CPU systems, the poweron of an FPGA and other support chips can have a complicated sequence. Is that handled in an integrated fashion with the VRM or independently?
Mike
> On Aug 23, 2020, at 9:22 PM, Milton Miller II <miltonm at us.ibm.com> wrote:
>
> Resend as plain text.
>
>> On August 21, 2020, Mike Jones wrote:>I am trying to understand how
>> the Server power button in the webui
>>> works.
>>>
>>> As before, using raspberry pi, and I’ll leave project links at the
>>> end for anyone that wants to use them. Things work up to monitoring
>>> voltages. Note the conf project has a phosphor branch for the full
>>> monty.>>To reverse engineer, I setup: dbus-monitor —system >
>> someFile.log
>>>
>>> There is a message for systemd1.Manager; member=StartUnit and best I
>>> can tell, somehow this gets routed to systemd to start some service
>>> or run some exe. I see this mentioned in the dbus transactions:
>>>
>>> "obmc-host-start at 0.target”
>>>
>>> And that is in /lib/systemd/system and depends
>>> on obmc-host-startmin at 0.target, but that does not depend on any
>>> service. So that is a dead end. It also depends on a reboot
>> attempts,
>>> but I think that is not responsible for power on/off.
>>>
>>> Then there are chassis services, but I cannot find a link from
>>> obmc-host-start at 0.target to objc-chassis-poweron at 0.target.
>>
>>
>>
>>>> In this
>>> doc: https://github.com/openbmc/docs/blob/master/architecture/openbm
>> c
>>> -systemd.md
>>>
>>> It shows:
>>>
>>>
>>> ls -1 /lib/systemd/system/obmc-chassis-poweron\@0.target.requires/
>>> op-power-start at 0.service op-wait-power-on at 0.service>>But when I “ls”
>> that path, the above dependencies are not there.
>>> There is only a dependency on phosphor-fan-presence-tach at 0.service
>>>
>>> There is some state service that lead to things with xzy paths, and
>> I
>>> eventually found /run/systemd/units. These have file names starting
>>> with “invocation” in the names and link to GUID like nodes that
>> don’t
>>> “cat” like a normal file. So I am not sure how those work. Is there
>>> some kernel driver that works like sysfs so that these nodes are not
>>> traditional files?
>>>
>>> What I am trying to understand is two things:
>>>
>>> - Interaction with the power regulator
>>> - Interaction with the host cpu
>>>
>>> So my hope is someone can connect the dots of the path from the dbus
>>> to systemd through the targets to a service executable doing the
>> work
>>> so I can try to replace them with:
>>>
>>> - Something that turns the regulators on/off, with pmbus in this
>>> case.
>>> - Something that can behave like a host to keep the system happy
>> like
>>> a real system.
>>
>>
>>
>> Hi. There is some design documentation here
>>
>> https://github.com/openbmc/docs/blob/master/designs/state-management- <https://github.com/openbmc/docs/blob/master/designs/state-management->
>> and-external-interfaces.md
>>
>> and that links to phosphor-state-manager which has a lot of the units
>>
>> that kick off power and state transitions.
>>
>>
>> The op-power-start are for systems following the OpenPOWER reference
>> designs. The regulators are sequenced by an external microcontroller
>>
>> based on the state of a POWER_ON gpio from the BMC and a return
>> PGOOD to indicate the state. There are also other op- prefixed units
>> that
>> initiate the host processor initialization (after the units check
>> that fans are
>> running as you found).
>>
>> There is also a watchdog that is started when the host is started and
>>
>> pinged and stopped via IPMI.
>>
>> If you are prototyping for a x86 system, there are alternative
>> power implementations where the gpio toggles to represent a
>> main power button push and their start cpu sequences. I think
>> there are also arm systems but don't know what they are using
>> for host interaction.
>>
>> I hope this advances your investigation and learning.
>>
>> milton
>>
>>>> Mike
>>>
>>> My repos
>>> ——————
>>>
>>> https://github.com/Proclivis/meta-pmbus-raspberrypi.git
>>> https://github.com/Proclivis/meta-pmbus-phosphor.git
>>> https://github.com/Proclivis/conf-openbmc-adi.git
>>>
>>> The monitor messages for StartUnit
>>> ———
>>>
>>> method call time=1598039669.247458 sender=:1.48 ->
>>> destination=org.freedesktop.systemd1 serial=33
>>> path=/org/freedesktop/systemd1;
>>> interface=org.freedesktop.systemd1.Manager; member=StartUnit
>>> string "obmc-host-start at 0.target"
>>> string "replace"
>>> method call time=1598039669.276170 sender=:1.3 ->
>>> destination=org.freedesktop.DBus serial=775
>>> path=/org/freedesktop/DBus; interface=org.freedesktop.DBus;
>>> member=GetConnectionUnixUser
>>> string ":1.48"
>>> method return time=1598039669.276234 sender=org.freedesktop.DBus ->
>>> destination=:1.3 serial=4294967295 reply_serial=775
>>> uint32 0
>>> method call time=1598039669.280376 sender=:1.3 ->
>>> destination=org.freedesktop.DBus serial=776
>>> path=/org/freedesktop/DBus; interface=org.freedesktop.DBus;
>>> member=AddMatch
>>> string
>>> "type='signal',sender='org.freedesktop.DBus',path='/org/freedesktop/
>> D
>>> Bus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0
>> =
>>> ':1.48'"
>>> method return time=1598039669.280661 sender=org.freedesktop.DBus ->
>>> destination=:1.3 serial=4294967295 reply_serial=776
>>> method call time=1598039669.280701 sender=:1.3 ->
>>> destination=org.freedesktop.DBus serial=777
>>> path=/org/freedesktop/DBus; interface=org.freedesktop.DBus;
>>> member=GetNameOwner
>>> string ":1.48"
>>> method return time=1598039669.280738 sender=org.freedesktop.DBus ->
>>> destination=:1.3 serial=4294967295 reply_serial=777
>>> string ":1.48"
>>> signal time=1598039669.280774 sender=:1.3 -> destination=(null
>>> destination) serial=778 path=/org/freedesktop/systemd1;
>>> interface=org.freedesktop.systemd1.Manager; member=UnitNew
>>> string "obmc-host-start at 0.target"
>>> object path
>>> "/org/freedesktop/systemd1/unit/obmc_2dhost_2dstart_400_2etarget"
>>> signal time=1598039669.280823 sender=:1.3 -> destination=(null
>>> destination) serial=779 path=/org/freedesktop/systemd1;
>>> interface=org.freedesktop.systemd1.Manager; member=JobNew
>>> uint32 1105
>>> object path "/org/freedesktop/systemd1/job/1105"
>>> string "obmc-host-start at 0.target"
>>> method return time=1598039669.280883 sender=:1.3 ->
>> destination=:1.48
>>> serial=780 reply_serial=33
>>> object path "/org/freedesktop/systemd1/job/1105"
>>> signal time=1598039669.281305 sender=:1.48 -> destination=(null
>>> destination) serial=34 path=/xyz/openbmc_project/state/host0;
>>> interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
>>> string "xyz.openbmc_project.State.Host"
>>> array [
>>> dict entry(
>>> string "RequestedHostTransition"
>>> variant string
>>> "xyz.openbmc_project.State.Host.Transition.On"
>>> )
>>> ]
>>> array [
>>> ]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/openbmc/attachments/20200824/834b0000/attachment-0001.htm>
More information about the openbmc
mailing list