#include <linux/dma-map-ops.h>
 #include <linux/platform_data/x86/apple.h>
 #include <linux/pgtable.h>
+#include <linux/crc32.h>
 
 #include "internal.h"
 
        return 0;
 }
 
+static void acpi_store_pld_crc(struct acpi_device *adev)
+{
+       struct acpi_pld_info *pld;
+       acpi_status status;
+
+       status = acpi_get_physical_device_location(adev->handle, &pld);
+       if (ACPI_FAILURE(status))
+               return;
+
+       adev->pld_crc = crc32(~0, pld, sizeof(*pld));
+       ACPI_FREE(pld);
+}
+
 static int __acpi_device_add(struct acpi_device *device,
                             void (*release)(struct device *))
 {
        if (device->wakeup.flags.valid)
                list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list);
 
+       acpi_store_pld_crc(device);
+
        mutex_unlock(&acpi_device_lock);
 
        if (device->parent)