Item: separate PCIe Function's properties into new interface
Currently, the PCIeDevice interface describes properties for up to eight
PCIe functions, but no association to individual PCIe functions is
defined. To implement the Redfish Drive and NetworkInterface schemas,
this change is necessary because those schemas associate with the
specific PCIe function resources that produce them.
This commit moves PCIe Function properties from PCIe Device to an
independent PCIeFunction interface. The dbus object tree layout could
be:
```
/xyz/openbmc_project/inventory/item/PCIeDevice0
| xyz.openbmc_project.Inventory.Item.PCIeDevice
|---/xyz/openbmc_project/inventory/item/PCIeDevice0/PCIeFunction0
| xyz.openbmc_project.Inventory.Item.PCIeFunction
|---/xyz/openbmc_project/inventory/item/PCIeDevice0/PCIeFunction1
| xyz.openbmc_project.Inventory.Item.PCIeFunction
|---/xyz/openbmc_project/inventory/item/PCIeDevice0/PCIeFunction2
| xyz.openbmc_project.Inventory.Item.PCIeFunction
```
TODO: The PCIe function's properties in the PCIeDevice interface shall
be removed when bmcweb [1] and peci-pcie [2] are updated.
[1]: https://github.com/openbmc/bmcweb/blob/0fa3418803cb0af347903ae0b7d741f63d49cd32/redfish-core/lib/pcie.hpp#L628
[2]: https://github.com/openbmc/peci-pcie/blob/ec7361d5bce6be90effc2bed0adfea3df48f13d1/src/peci_pcie.cpp#L612
Change-Id: Ifba85d4ecb4847b737f1ace86bf8520ec31c0f03
Signed-off-by: Thang Tran <thuutran@amperecomputing.com>
diff --git a/gen/xyz/openbmc_project/Inventory/Item/PCIeFunction/meson.build b/gen/xyz/openbmc_project/Inventory/Item/PCIeFunction/meson.build
new file mode 100644
index 0000000..798e3ea
--- /dev/null
+++ b/gen/xyz/openbmc_project/Inventory/Item/PCIeFunction/meson.build
@@ -0,0 +1,40 @@
+# Generated file; do not modify.
+
+sdbusplus_current_path = 'xyz/openbmc_project/Inventory/Item/PCIeFunction'
+
+generated_sources += custom_target(
+ 'xyz/openbmc_project/Inventory/Item/PCIeFunction__cpp'.underscorify(),
+ input: [
+ '../../../../../../yaml/xyz/openbmc_project/Inventory/Item/PCIeFunction.interface.yaml',
+ ],
+ output: [
+ 'common.hpp',
+ 'server.hpp',
+ 'server.cpp',
+ 'aserver.hpp',
+ 'client.hpp',
+ ],
+ depend_files: sdbusplusplus_depfiles,
+ command: [
+ sdbuspp_gen_meson_prog,
+ '--command',
+ 'cpp',
+ '--output',
+ meson.current_build_dir(),
+ '--tool',
+ sdbusplusplus_prog,
+ '--directory',
+ meson.current_source_dir() / '../../../../../../yaml',
+ 'xyz/openbmc_project/Inventory/Item/PCIeFunction',
+ ],
+ install: should_generate_cpp,
+ install_dir: [
+ get_option('includedir') / sdbusplus_current_path,
+ get_option('includedir') / sdbusplus_current_path,
+ false,
+ get_option('includedir') / sdbusplus_current_path,
+ get_option('includedir') / sdbusplus_current_path,
+ ],
+ build_by_default: should_generate_cpp,
+)
+
diff --git a/gen/xyz/openbmc_project/Inventory/Item/meson.build b/gen/xyz/openbmc_project/Inventory/Item/meson.build
index 41047af..c77a230 100644
--- a/gen/xyz/openbmc_project/Inventory/Item/meson.build
+++ b/gen/xyz/openbmc_project/Inventory/Item/meson.build
@@ -17,6 +17,7 @@
subdir('Global')
subdir('NetworkInterface')
subdir('PCIeDevice')
+subdir('PCIeFunction')
subdir('PCIeSlot')
subdir('PCIeSwitch')
subdir('Panel')
@@ -503,6 +504,30 @@
)
generated_markdown += custom_target(
+ 'xyz/openbmc_project/Inventory/Item/PCIeFunction__markdown'.underscorify(),
+ input: [
+ '../../../../../yaml/xyz/openbmc_project/Inventory/Item/PCIeFunction.interface.yaml',
+ ],
+ output: ['PCIeFunction.md'],
+ depend_files: sdbusplusplus_depfiles,
+ command: [
+ sdbuspp_gen_meson_prog,
+ '--command',
+ 'markdown',
+ '--output',
+ meson.current_build_dir(),
+ '--tool',
+ sdbusplusplus_prog,
+ '--directory',
+ meson.current_source_dir() / '../../../../../yaml',
+ 'xyz/openbmc_project/Inventory/Item/PCIeFunction',
+ ],
+ install: should_generate_markdown,
+ install_dir: [inst_markdown_dir / sdbusplus_current_path],
+ build_by_default: should_generate_markdown,
+)
+
+generated_markdown += custom_target(
'xyz/openbmc_project/Inventory/Item/PCIeSlot__markdown'.underscorify(),
input: [
'../../../../../yaml/xyz/openbmc_project/Inventory/Item/PCIeSlot.interface.yaml',
diff --git a/yaml/xyz/openbmc_project/Inventory/Item/Drive.interface.yaml b/yaml/xyz/openbmc_project/Inventory/Item/Drive.interface.yaml
index ae721fb..97b2a46 100644
--- a/yaml/xyz/openbmc_project/Inventory/Item/Drive.interface.yaml
+++ b/yaml/xyz/openbmc_project/Inventory/Item/Drive.interface.yaml
@@ -110,3 +110,13 @@
- name: Unknown
description: >
The locked state of the drive is not known.
+
+associations:
+ - name: produced_by
+ description: >
+ Objects that implement Drive can optionally implement the produced_by
+ association to provide a link back to a PCIe function.
+ reverse_names:
+ - producing
+ required_endpoint_interfaces:
+ - xyz.openbmc_project.Inventory.Item.PCIeFunction
diff --git a/yaml/xyz/openbmc_project/Inventory/Item/NetworkInterface.interface.yaml b/yaml/xyz/openbmc_project/Inventory/Item/NetworkInterface.interface.yaml
index b1251a1..fd8523e 100644
--- a/yaml/xyz/openbmc_project/Inventory/Item/NetworkInterface.interface.yaml
+++ b/yaml/xyz/openbmc_project/Inventory/Item/NetworkInterface.interface.yaml
@@ -5,3 +5,13 @@
type: string
description: >
MAC address of the item
+
+associations:
+ - name: produced_by
+ description: >
+ Objects that implement NetworkInterface can optionally implement the
+ produced_by association to provide a link back to a PCIe function.
+ reverse_names:
+ - producing
+ required_endpoint_interfaces:
+ - xyz.openbmc_project.Inventory.Item.PCIeFunction
diff --git a/yaml/xyz/openbmc_project/Inventory/Item/PCIeDevice.interface.yaml b/yaml/xyz/openbmc_project/Inventory/Item/PCIeDevice.interface.yaml
index 2d85e3f..f020a73 100644
--- a/yaml/xyz/openbmc_project/Inventory/Item/PCIeDevice.interface.yaml
+++ b/yaml/xyz/openbmc_project/Inventory/Item/PCIeDevice.interface.yaml
@@ -1,7 +1,9 @@
description: >
This defines a PCIe device to be exposed for system management. It includes
the device properties and function properties for all 8 possible functions
- that are needed for the device identification.
+ that are needed for the device identification. The PCIe function's
+ properties are deprecated, they have been replaced with PCIeFunction
+ interface.
properties:
- name: DeviceType
@@ -24,266 +26,330 @@
- name: Function0ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function0DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function0DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function0FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function0RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function0SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function0SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function0VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function1ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function1DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function1DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function1FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function1RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function1SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function1SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function1VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function2ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function2DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function2DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function2FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function2RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function2SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function2SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function2VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function3ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function3DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function3DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function3FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function3RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function3SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function3SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function3VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function4ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function4DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function4DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function4FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function4RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function4SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function4SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function4VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function5ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function5DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function5DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function5FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function5RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function5SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function5SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function5VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function6ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function6DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function6DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function6FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function6RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function6SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function6SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function6VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function7ClassCode
type: string
description: >
- The Class Code for this function.
+ The Class Code for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function7DeviceClass
type: string
description: >
- The Device Class for this function.
+ The Device Class for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function7DeviceId
type: string
description: >
- The Device ID for this function.
+ The Device ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function7FunctionType
type: string
description: >
- Indicates if the function is Physical or Virtual
+ Indicates if the function is Physical or Virtual This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function7RevisionId
type: string
description: >
- The Revision ID for this function.
+ The Revision ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: Function7SubsystemId
type: string
description: >
- The Subsystem ID for this function.
+ The Subsystem ID for this function. This property is deprecated, it
+ has been replaced with PCIeFunction interface.
- name: Function7SubsystemVendorId
type: string
description: >
- The Subsystem Vendor ID for this function.
+ The Subsystem Vendor ID for this function. This property is
+ deprecated, it has been replaced with PCIeFunction interface.
- name: Function7VendorId
type: string
description: >
- The Vendor ID for this function.
+ The Vendor ID for this function. This property is deprecated, it has
+ been replaced with PCIeFunction interface.
- name: MaxLanes
type: size
@@ -330,3 +396,11 @@
- associated_pcie_device
required_endpoint_interfaces:
- xyz.openbmc_project.Inventory.Item.PCIeSlot
+
+ - name: exposing
+ description: >
+ Objects that implement PCIeDevice can optionally implement the
+ upstexposing association to provide a link back to a PCIe function.
+ reverse_names:
+ - exposed_by
+ required_endpoint_interfaces: xyz.openbmc_project.Inventory.Item.PCIeFunction
diff --git a/yaml/xyz/openbmc_project/Inventory/Item/PCIeFunction.interface.yaml b/yaml/xyz/openbmc_project/Inventory/Item/PCIeFunction.interface.yaml
new file mode 100644
index 0000000..466dc47
--- /dev/null
+++ b/yaml/xyz/openbmc_project/Inventory/Item/PCIeFunction.interface.yaml
@@ -0,0 +1,172 @@
+description: >
+ This defines a PCIe function to be exposed for system management. It
+ includes the function properties that are shown in the space configuration.
+
+properties:
+ - name: BusNumber
+ type: byte
+ description: >
+ Indicates the Bus number in the BDF byte.
+ - name: DeviceNumber
+ type: byte
+ description: >
+ Indicates the Device number in the BDF byte.
+ - name: FunctionNumber
+ type: byte
+ description: >
+ Indicates the Function number in the BDF byte.
+ - name: DeviceId
+ type: uint16
+ description: >
+ The Device ID for this function.
+ - name: RevisionId
+ type: byte
+ description: >
+ The Revision ID for this function.
+ - name: SubsystemId
+ type: uint16
+ description: >
+ The Subsystem ID for this function.
+ - name: SubsystemVendorId
+ type: uint16
+ description: >
+ The Subsystem Vendor ID for this function.
+ - name: VendorId
+ type: uint16
+ description: >
+ The Vendor ID for this function.
+ - name: BaseClassCode
+ type: byte
+ description: >
+ The Base Class Code for this function.
+ - name: SubClassCode
+ type: byte
+ description: >
+ The SubClass for this function.
+ - name: ProgrammingInterface
+ type: byte
+ description: >
+ The PIFClass Code for this function.
+ - name: DeviceClass
+ type: enum[self.DeviceClasses]
+ default: Unknown
+ description: >
+ The class for this PCIe function.
+ - name: FunctionType
+ type: enum[self.FunctionTypes]
+ default: Unknown
+ description: >
+ Indicates if the function is Physical or Virtual
+
+enumerations:
+ - name: DeviceClasses
+ description: >
+ Possible Device Classes
+ values:
+ - name: Unknown
+ description: >
+ An unknown class
+ - name: Bridge
+ description: >
+ A bridge
+ - name: CommunicationController
+ description: >
+ A communication controller
+ - name: Coprocessor
+ description: >
+ A coprocessor
+ - name: DisplayController
+ description: >
+ A display controller
+ - name: DockingStation
+ description: >
+ A docking station
+ - name: EncryptionController
+ description: >
+ An encryption controller
+ - name: GenericSystemPeripheral
+ description: >
+ A generic system peripheral
+ - name: InputDeviceController
+ description: >
+ An input device controller
+ - name: IntelligentController
+ description: >
+ An intelligent controller
+ - name: MassStorageController
+ description: >
+ A mass storage controller
+ - name: MemoryController
+ description: >
+ A memory controller
+ - name: MultimediaController
+ description: >
+ A multimedia controller
+ - name: NetworkController
+ description: >
+ A network controller
+ - name: NonEssentialInstrumentation
+ description: >
+ A non-essential instrumentation
+ - name: Other
+ description: >
+ Other class. The function Class Code needs to be verified
+ - name: ProcessingAccelerators
+ description: >
+ A processing accelerators
+ - name: Processor
+ description: >
+ A processor
+ - name: SatelliteCommunicationsController
+ description: >
+ A satellite communications controller
+ - name: SerialBusController
+ description: >
+ A serial bus controller
+ - name: SignalProcessingController
+ description: >
+ A signal processing controller
+ - name: UnassignedClass
+ description: >
+ An unassigned class
+ - name: UnclassifiedDevice
+ description: >
+ An unclassified device
+ - name: WirelessController
+ description: >
+ A wireless controller
+
+ - name: FunctionTypes
+ description: >
+ Possible Function Type
+ values:
+ - name: Unknown
+ description: >
+ An unknown function type
+ - name: Physical
+ description: >
+ A physical PCIe function
+ - name: Virtual
+ description: >
+ A virtual PCIe function
+
+associations:
+ - name: exposed_by
+ description: >
+ Objects that implement PCIeFunction can implement the exposed_by
+ association to provide a link back to a PCIe Device.
+ reverse_names:
+ - exposing
+ required_endpoint_interfaces:
+ - xyz.openbmc_project.Inventory.Item.PCIeDevice
+
+ - name: producing
+ description: >
+ Objects that implement PCIeFunction can optionally implement the
+ producing association to provide a link back to an item.
+ reverse_names:
+ - produced_by
+ required_endpoint_interfaces:
+ - xyz.openbmc_project.Inventory.Item.NetworkInterface
+ - xyz.openbmc_project.Inventory.Item.Drive
+ - xyz.openbmc_project.Inventory.Item.StorageController
diff --git a/yaml/xyz/openbmc_project/Inventory/Item/StorageController.interface.yaml b/yaml/xyz/openbmc_project/Inventory/Item/StorageController.interface.yaml
index 554aca3..cf4e259 100644
--- a/yaml/xyz/openbmc_project/Inventory/Item/StorageController.interface.yaml
+++ b/yaml/xyz/openbmc_project/Inventory/Item/StorageController.interface.yaml
@@ -1,2 +1,12 @@
description: >
Implement to provide storage controller attributes.
+
+associations:
+ - name: produced_by
+ description: >
+ Objects that implement StorageController can optionally implement the
+ produced_by association to provide a link back to a PCIe function.
+ reverse_names:
+ - producing
+ required_endpoint_interfaces:
+ - xyz.openbmc_project.Inventory.Item.PCIeFunction