Server Power On mystery

Mike proclivis at gmail.com
Tue Aug 25 05:36:10 AEST 2020


So for example, if a system had a PMbus HotSwap, a VR for the CPU, and an auxiliary PMBus sequencer for an FPGA, and an I2C mux, and the host and aux supplies required different state management, where they don’t sequence together, how would that be done? By learning how the current pieces play together I can imagine multiple new use cases and prototype them.

As for faking or neutering the host function, it’s just to remove side effects to prove out solutions.

Longer term are goals related to remote update of PMBus device EEPROM. Say, give file to webui, power supply settings are updated. More on that later from one of the PMBus technical working group. Stay tuned. But the raspi will be a basis for testing updates, assuming we succeed. 

These are little different goal than how do I do X for design Y.

What makes it hard is the documentation is not complete and folk knowledge required is high. I’m not complaining. It’s just reality.

Mike

Sent from my iPhone

> On Aug 24, 2020, at 1:11 PM, Mike <proclivis at gmail.com> wrote:
> 
> Ed,
> 
> My goals are atypical 
> 
> - Understand typical obmc use cases to see how various ADI devices would fit in: Hot Swap, Power Sequencers, PMBus regulators 
> - Try these use cases in raspi by neutering or faking the host
> - Create linux drivers to support obmc
> 
> Mike
> 
> Sent from my iPhone
> 
>> On Aug 24, 2020, at 12:41 PM, Ed Tanous <ed at tanous.net> wrote:
>> 
>> I think the best thing would be to start off by stating exactly what
>> you're trying to accomplish, and we can go from there.  As is, you're
>> using a raspberry pi, which doesn't have a "host" in the normal BMC
>> sense, so I'm really confused as to what you're hoping to do with the
>> host power button.  Are you trying to reboot the raspberry pi?  Reboot
>> a host connected through some other means?
>> 
>> -Ed
>> 
>>>> On Fri, Aug 21, 2020 at 3:29 PM Mike Jones <proclivis at gmail.com> wrote:
>>> 
>>> Hi,
>>> 
>>> 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/openbmc-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.
>>> 
>>> 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/DBus',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 [
>>>  ]


More information about the openbmc mailing list