tree daf6149b3099449137236c5a6c68a20c100cf0e5
parent dc31c054fe2e85e084e0c4555a6cc7d258936f93
author Joel Stanley <joel@jms.id.au> 1578019998 +1100
committer Brad Bishop <bradleyb@fuzziesquirrel.com> 1578489732 -0500

croserver: Bump for fsi device path fix

Upstream now accepts linker flags from the environment, so remove
the hard codeded --hash-style=gnu option from the conigure step.

Jason Albert (3):
      Add ecmdChipTarget hash support to pyapi
      Defined __deepcopy__ functions on classes
      Added python support for vector<vector<databuffer>>

Joel Stanley (2):
      Fix device paths again
      server: Fix linking

Kahn Evans (10):
      More complete use of ECMD_REMOVE_SCOM_FUNCTIONS compile flag
      Use chipUnitNum instead of core in targets
      Resolve doxygen errors/warnings
      Adding spy APIs to pass in multiple images
      Updated query code as well
      Use const ecmdChipTargets in new APIs
      update to version 14.19
      Revert to checking all return codes instead of just a single one for non-enum retry.
      Syncing up with what's in Cronus
      Use system _AIX compile flag

Lakshminarayana R. Kammath (1):
      Adding support for LDFLAGS and SLDFLAGS to pickup value from environment

Matt K. Light (6):
      update fapi2::ReturnCode
      get/putspi
      get/putspi links and htxt
      fix doxygen param name
      fix serverlock authorization storage
      fix target for ecmdGetPbaUnit

(From meta-openpower rev: c02a90c17ab5b19bd1c2d4db3cb5af78ac474b2a)

Change-Id: If64c0394ed0d39cac432c205785eb4ce2069d662
Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
