about phosphor pid control package

Will Liang (梁永鉉) Will.Liang at quantatw.com
Thu May 9 16:33:05 AEST 2019


Hi,

> -----Original Message-----
> From: Patrick Venture [mailto:venture at google.com]
> Sent: Thursday, May 9, 2019 12:36 AM
> To: Will Liang (梁永鉉) <Will.Liang at quantatw.com>
> Cc: OpenBMC Maillist <openbmc at lists.ozlabs.org>
> Subject: Re: about phosphor pid control package
> 
> On Wed, May 8, 2019 at 6:46 AM Will Liang (梁永鉉)
> <Will.Liang at quantatw.com> wrote:
> >
> > Hi,
> >
> > I have a question about getFailSafeMode().
> >
> > Currently, only sensors that are defined as "temp" types can be checked for
> failure.
> > I did not find any "fan" type sensors to check if the fan has failed.
> > Our project need to check the fan fail so  I want to add another "fan" sensor
> type to check.
> 
> 
> 
> >
> > Can I add one more "for loop" to check the fan sensor in updateSensors()
> function in zone.cpp??
> >
> > for (const auto& t : _thermalInputs)
> > {
> >     ........
> > }
> > for (const auto& t : _fanInputs)
> > {
> >     ........
> > }
> 
> updateSensors is deliberately not talking to the fans because they're not
> considered inputs into the thermal config, they're controlled outputs -- the
> question I have is, what would you like to do if a fan isn't responding?
> failsafemode drives the fans to a specific pre-defined speed to keep it from
> thermal issues.  If a fan is failing to respond, one can't drive it -- perhaps one
> can drive the others to some failsafe?

If a fan fails, we need to enter the fail safe mode to increase the other fan duty.

> If so, one needs to update the failsafe for a zone outside of the thermal sensors,
> but rather where the fans are checked (void
> PIDZone::updateFanTelemetry(void))

I add following code into the PIDZone::updateFanTelemetry(void) function to check the fan fail. 
If the fan fails, it will enter fail safe mode.
  if (sensor->getFailed())
  {
  	failSafeSensors.insert(f);
  }
  else
  {
  	// Check if it's in there: remove it.
    auto kt = _failSafeSensors.find(f);
    if (kt != _failSafeSensors.end())
  {
  	failSafeSensors.erase(kt);
  }
   
But one more question I have is that the above code can only check if a single fan has failed.
Our project needs to check for dual-fan failures. Do you have any suggestions for checking the failure of the dual-fan?

Will
> >
> > BRs,
> > Will


More information about the openbmc mailing list