On 4/20/23 5:06 AM, Jonathan Cameron wrote:
On Wed, 19 Apr 2023 13:21:55 -0700
Dave Jiang <dave.jiang@xxxxxxxxx> wrote:
Provide a helper to find the ACPI0017 device in order to issue the _DSM.
The helper will take the 'struct device' from a cxl_port and iterate until
the root device is reached. The ACPI handle will be returned from the root
device.
Signed-off-by: Dave Jiang <dave.jiang@xxxxxxxxx>
Question inline. If the answer is no then this looks fine to me.
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
+/**
+ * cxl_acpi_get_rootdev_handle - get the ACPI handle of the CXL root device
+ * @dev: 'struct device' to start searching from. Should be from cxl_port->dev.
+ *
+ * Return: acpi_handle on success, errptr of errno on error.
+ *
+ * Looks for the ACPI0017 device and return the ACPI handle
+ **/
Could we implement this in terms of find_cxl_root()? I think that will
end up giving you the same device though I haven't tested it.
Yes I can simplify this. Thanks.
+acpi_handle cxl_acpi_get_rootdev_handle(struct device *dev)
+{
+ struct device *itr = dev;
+ struct device *root_dev;
+ acpi_handle handle;
+
+ if (!dev)
+ return ERR_PTR(-EINVAL);
+
+ while (itr->parent) {
+ root_dev = itr;
+ itr = itr->parent;
+ }
+
+ if (!dev_is_platform(root_dev))
+ return ERR_PTR(-ENODEV);
+
+ handle = ACPI_HANDLE(root_dev);
+ if (!handle)
+ return ERR_PTR(-ENODEV);
+
+ return handle;
+}
+EXPORT_SYMBOL_NS_GPL(cxl_acpi_get_rootdev_handle, CXL);