)]}'
{
  "commit": "e6b8fd16c289a81f2919bc5aa3ddf0e5a29af1e0",
  "tree": "953de5d69658544fbbb73c28c3ac5c5514a887a8",
  "parents": [
    "5ce8fede0c83594083ec3ceba224e669ab89e189"
  ],
  "author": {
    "name": "Gary Beihl",
    "email": "garybeihl@microsoft.com",
    "time": "Wed Apr 08 20:20:39 2026 -0400"
  },
  "committer": {
    "name": "Deepak Kodihalli",
    "email": "deepak.kodihalli.83@gmail.com",
    "time": "Thu May 07 16:22:29 2026 +0000"
  },
  "message": "platform-mc: Add entity-type-specific D-Bus inventory interfaces\n\nPldmEntityReq unconditionally inherits Inventory.Item.Board\nregardless of the actual PLDM entity type. A GPU terminus therefore\nexposes an Inventory.Item.Board interface, making it\nindistinguishable from an actual board when bmcweb enumerates the\nRedfish Chassis collection via the object mapper.\n\nbmcweb\u0027s Chassis aggregation queries the mapper for objects\nimplementing specific Inventory.Item.* interfaces, and emits the\ncorresponding Redfish @odata.type (Chassis, Accelerator, Processor,\netc.) based on which interface is found. Today, all PLDM termini\nshow up as generic Board because that is the only interface\nPldmEntityReq implements, regardless of what the device actually\nis.\n\nRefactor PldmEntityReq into a class template parameterized by the\nsdbusplus Item server type, with a PldmEntityBase abstract base\nproviding the property setters via the Decorator interfaces\n(Asset, AssetTag, Revision, Compatible). A createPldmEntity()\nfactory function selects the correct template instantiation based\non the PLDM entity type reported by the Entity Auxiliary Names\nPDR:\n\n  System Chassis      -\u003e Inventory.Item.Chassis\n  Processor           -\u003e Inventory.Item.Cpu\n  Memory Module       -\u003e Inventory.Item.Dimm\n  Fan                 -\u003e Inventory.Item.Fan\n  Power Supply        -\u003e Inventory.Item.PowerSupply\n  GPU / Accelerator   -\u003e Inventory.Item.Accelerator\n  Board / SysBoard / Card / default -\u003e Inventory.Item.Board\n\nThis change deliberately does NOT touch the D-Bus object path\nconvention. Per OpenBMC conventions (as followed by entity-manager\nand other services), D-Bus object paths are opaque identifiers\nand should not be parsed or treated as semantic by consumers.\nAll meaning is carried by the interfaces the object implements,\nwhich is exactly what this change corrects.\n\nThe existing /system/board/\u003cname\u003e path prefix is a historical\nnamespace label matching entity-manager\u0027s convention, not a type\nclaim about the underlying device. A GPU terminus after this\nchange implements Inventory.Item.Accelerator while living at\n/system/board/GPU0, which looks odd in busctl tree but is\ncorrect by the established convention.\n\nTested: Unit test createPldmEntityTest exercises all 10 entity\ntype mappings (System Chassis, Processor, Memory Module, Fan,\nPower Supply, GPU, Accelerator, Board, SysBoard, Card) plus\nunknown-type fallback, verifying each produces a non-null entity\nwith working property setters through the PldmEntityBase\nabstract interface. Docker CI passes (format, build, all unit\ntests, 50.6% line coverage). End-to-end on Renode evb-ast2600\nwith PldmFirmwareDevice (entity type 152/GPU) over MCTP serial\nconfirms the terminus object at /xyz/openbmc_project/inventory/\nsystem/board/GPU0 implements Inventory.Item.Accelerator (Robot\nFramework test ASPEED_PLDM_Inventory: 2/2 passed).\n\nPS7 review feedback (Brad Bishop):\n  - Default-construct the move ctor/assignment for PldmEntityBase\n    and PldmEntityReq instead of deleting them. Class users should\n    be in control of ownership semantics rather than getting the\n    deleted-by-default behavior baked in by the inventory layer.\n  - Rename the lowercase server-type aliases to CamelCase\n    (assetserver -\u003e AssetServer, etc.) per OpenBMC style.\n\nChange-Id: Ia143edef5083a58dbe65864e63f7ede37e5e7594\nSigned-off-by: Gary Beihl \u003cgarybeihl@microsoft.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bb46383bedae5dba73559578a7dba59b802866a8",
      "old_mode": 33188,
      "old_path": "meson.build",
      "new_id": "dfd41c3209df20ffb45bdf6ec57c601d6952d494",
      "new_mode": 33188,
      "new_path": "meson.build"
    },
    {
      "type": "delete",
      "old_id": "bc7037944f43834d4d2b3ff14b3c0c75f167724b",
      "old_mode": 33188,
      "old_path": "platform-mc/dbus_impl_fru.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "a1ae430901bc47b134e21a915f229e97202f8e41",
      "old_mode": 33188,
      "old_path": "platform-mc/dbus_impl_fru.hpp",
      "new_id": "088a56fcd6ad39cd5b09c27e262c511d0615918a",
      "new_mode": 33188,
      "new_path": "platform-mc/dbus_impl_fru.hpp"
    },
    {
      "type": "modify",
      "old_id": "3c40dae83f86cdf693bc018fa2c948ae08b40119",
      "old_mode": 33188,
      "old_path": "platform-mc/terminus.cpp",
      "new_id": "2afbbc76743dd70310c06597f5e901762324c910",
      "new_mode": 33188,
      "new_path": "platform-mc/terminus.cpp"
    },
    {
      "type": "modify",
      "old_id": "b9b6c5a21fc445cf446339eb7f36c1f0913b9ddb",
      "old_mode": 33188,
      "old_path": "platform-mc/terminus.hpp",
      "new_id": "ac26086254b993aaa50735208ab679a4a92a2789",
      "new_mode": 33188,
      "new_path": "platform-mc/terminus.hpp"
    },
    {
      "type": "modify",
      "old_id": "2d722e9369affc7f27c3bd33790386bd4f78bad1",
      "old_mode": 33188,
      "old_path": "platform-mc/test/meson.build",
      "new_id": "e2411db180e2eee6dea8f1b247e5167530654279",
      "new_mode": 33188,
      "new_path": "platform-mc/test/meson.build"
    },
    {
      "type": "modify",
      "old_id": "b70f3ba8f0bb8597612e2481cc81c4586e773ee5",
      "old_mode": 33188,
      "old_path": "platform-mc/test/terminus_test.cpp",
      "new_id": "eca1357f62924ca5178c9ed0a16041cfd8576244",
      "new_mode": 33188,
      "new_path": "platform-mc/test/terminus_test.cpp"
    }
  ]
}
