Fan PWM monitoring and control

Patrick Venture venture at google.com
Thu Sep 19 02:05:37 AEST 2019


On Wed, Sep 18, 2019 at 2:30 AM rgrs <rgrs at protonmail.com> wrote:
>
> Hi Patrick, Matt,
>
> I tried instructions from this wiki: https://developer.ibm.com/linuxonpower/2019/01/07/how-to-port-openbmc/
> There is no GPIO to detect presence of fans, so tach readings is used instead.
>
> Here's what I did while trying to enable Fan control:
>
> 1. Added Fan tach sensor in hwmon (adt7462.conf) is in the form LABEL=FANx_RPM
> 2. "ipmi-sensor-inventory.yaml" has below config:
>
> 60: &fan_tach
>   sensorType: 0x04
>   path: /xyz/openbmc_project/sensors/fan_tach/FAN0_RPM
>   sensorReadingType: 0x01
>   multiplierM: 100
>   offsetB: 0
>   bExp: 0
>   unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
>   scale: 0
>   rExp: 0
>   serviceInterface: org.freedesktop.DBus.Properties
>   readingType: readingData
>   interfaces:
>         xyz.openbmc_project.Sensor.Value:
>             Value:
>                 Offsets:
>                     0xFF:
>                         type: int64_t
>
> and FAN PWM as
>
> 89: &fanpwm
>     sensorType: 0x04
>     path: /xyz/openbmc_project/sensors/fan_tach/FAN0_RPM
>     sensorReadingType: 0x01
>     multiplierM: 1
>     offsetB: 0
>     bExp: 0
>     mutability: Mutability::Write

You may need to add ::Read here too, I'm not sure anymore, but you can
check the script that builds this:

https://github.com/openbmc/phosphor-host-ipmid/blob/master/scripts/writesensor.mako.cpp#L69

It'll default to read, but if you've only set write, I don't know.

>     serviceInterface: org.freedesktop.DBus.Properties
>     readingType: readingData
>     interfaces:
>         xyz.openbmc_project.Control.FanPwm:
>             Target:
>                 Offsets:
>                     0xFF:
>                         type: uint64_t
>
>
> 3. I copied meta-romulus/recipes-phosphor/fans to my platform and changed FAN names from "fanx" to "FANx_RPM" in yaml files.
>
> This is what get in busctl tree related to Fans:
> (I expected to see FanPwm entries in busctl and I'm not sure why there are multiple entries in inventory).
>
> Service xyz.openbmc_project.Hwmon-2429843755.Hwmon1:
> `-/xyz
>   `-/xyz/openbmc_project
>     `-/xyz/openbmc_project/sensors
>       |-/xyz/openbmc_project/sensors/fan_tach
>       | |-/xyz/openbmc_project/sensors/fan_tach/FAN0_RPM
>       | |-/xyz/openbmc_project/sensors/fan_tach/FAN1_RPM
>       | |-/xyz/openbmc_project/sensors/fan_tach/FAN2_RPM
>       | `-/xyz/openbmc_project/sensors/fan_tach/FAN3_RPM
>       `-/xyz/openbmc_project/sensors/temperature
>         `-/xyz/openbmc_project/sensors/temperature/BACKPLANE_TEMP

You don't get a separate entry for the PWM from phosphor-hwmon.

It's a separate interface on the same service and path.

I recommend you introspect on the path and see what interfaces are
available (as well as adding "| read" above):

busctl introspect --no-pager
xyz.openbmc_project.Hwmon-2429843755.Hwmon1
/xyz/openbmc_project/sensors/fan_tach/FAN0_RPM

>
> Service xyz.openbmc_project.Inventory.Manager:
> `-/xyz
>   `-/xyz/openbmc_project
>     `-/xyz/openbmc_project/inventory
>       `-/xyz/openbmc_project/inventory/system
>         `-/xyz/openbmc_project/inventory/system/chassis
>           `-/xyz/openbmc_project/inventory/system/chassis/motherboard
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN0
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN0/FAN0
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN0_RPM
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN0_RPM/FAN0_RPM
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN1
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN1/FAN1
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN1_RPM
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN1_RPM/FAN1_RPM
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN2
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN2/FAN2
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN2_RPM
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN2_RPM/FAN2_RPM
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN3
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN3/FAN3
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN3_RPM
>             | `-/xyz/openbmc_project/inventory/system/chassis/motherboard/FAN3_RPM/FAN3_RPM
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
>             |-/xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
>             `-/xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
>
>
> Thanks,
> Raj
>
>
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> On Tuesday, September 17, 2019 9:18 PM, Patrick Venture <venture at google.com> wrote:
>
> > On Tue, Sep 17, 2019 at 8:32 AM Matthew Barth msbarth at linux.ibm.com wrote:
> >
> > > On 9/17/19 5:40 AM, rgrs wrote:
> > >
> > > > Hi,
> > > > I need some help with phosphor hwmon related to fan sensors.
> > > > I'm trying to control Fans in a server motherboard using ADT7462
> > > > controller. Hw mon porting is done and the sysfs interfaces are working
> > > > as expected.
> > > > While I am able to read RPM, i don't find pwm/target to control the fans
> > > > exposed as dbus objects.
> > > > Do you have the hwmon config set similar to this to denote the fan
> > > > targets are of PWM type?
> > >
> > > https://github.com/openbmc/openbmc/blob/master/meta-ibm/meta-romulus/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-tacho-controller%401e786000.conf
> > >
> > > > busctl --no-page tree xyz.openbmc_project.FanSensor
> > > >
> > > > ====================================================
> > > >
> > > > Failed to introspect object / of service xyz.openbmc_project.FanSensor:
> > > > The name is not activatable
> > > > No objects discovered.
> > > > That does not look like a hwmon service name. If you are using
> > > > phosphor-objmgr, you can use `# mapper get-service /xyz/openbmc_project/sensors/fan_tach` otherwise you'll need to find the
> > > > hwmon service name associated with your fan controller device.
> >
> > running`busctl tree --no-pager` will just list everything, and you
> > should see your fans in there. You can use the mapper too. I was
> > curious, are you using entity-manager/dbus-sensors? When you mention
> > FanSensor as the service, that's what it sounds like.
> >
> > > > I came across this post, I think it is similar to my issue.
> > > > (https://gerrit.openbmc-project.xyz/c/openbmc/phosphor-hwmon/+/8353)
> > > > Please someone point to latest documentation or reference Fan porting
> > > > from openBMC repo?
> > > > What are the exact fields in YAML that are used create FanPWM objects.
> > > > The Romulus machine should be a good reference for PWM based fan control
> > > > using phosphor-hwmon. It uses the
> > > > phosphor-fan-presence/[control|monitor] apps for controlling and
> > > > monitoring fans
> > >
> > > https://github.com/openbmc/openbmc/tree/master/meta-ibm/meta-romulus
> > >
> > > > (I'm using Feb release in my sandbox,
> > > > https://github.com/openbmc/docs/blob/master/release/release-notes.md#26-feb-4-2019)
> > > > Thanks,
> > > > Raj
> > >
> > > Matt
>
>


More information about the openbmc mailing list