Description:    read only
                 Will return "user" or "factory" depending on the image loaded
                 onto the card.
+
+What:           /sys/class/cxl/<card>/load_image_on_perst
+Date:           December 2014
+Contact:        linuxppc-dev@lists.ozlabs.org
+Description:    read/write
+                Valid entries are "none", "user", and "factory".
+                "none" means PERST will not cause image to be loaded to the
+                card.  A power cycle is required to load the image.
+                "none" could be useful for debugging because the trace arrays
+                are preserved.
+                "user" and "factory" means PERST will cause either the user or
+                user or factory image to be loaded.
+                Default is to reload on PERST whichever image the card has
+                loaded.
 
        return scnprintf(buf, PAGE_SIZE, "factory\n");
 }
 
+static ssize_t load_image_on_perst_show(struct device *device,
+                                struct device_attribute *attr,
+                                char *buf)
+{
+       struct cxl *adapter = to_cxl_adapter(device);
+
+       if (!adapter->perst_loads_image)
+               return scnprintf(buf, PAGE_SIZE, "none\n");
+
+       if (adapter->perst_select_user)
+               return scnprintf(buf, PAGE_SIZE, "user\n");
+       return scnprintf(buf, PAGE_SIZE, "factory\n");
+}
+
+static ssize_t load_image_on_perst_store(struct device *device,
+                                struct device_attribute *attr,
+                                const char *buf, size_t count)
+{
+       struct cxl *adapter = to_cxl_adapter(device);
+       int rc;
+
+       if (!strncmp(buf, "none", 4))
+               adapter->perst_loads_image = false;
+       else if (!strncmp(buf, "user", 4)) {
+               adapter->perst_select_user = true;
+               adapter->perst_loads_image = true;
+       } else if (!strncmp(buf, "factory", 7)) {
+               adapter->perst_select_user = false;
+               adapter->perst_loads_image = true;
+       } else
+               return -EINVAL;
+
+       if ((rc = cxl_update_image_control(adapter)))
+               return rc;
+
+       return count;
+}
+
 static struct device_attribute adapter_attrs[] = {
        __ATTR_RO(caia_version),
        __ATTR_RO(psl_revision),
        __ATTR_RO(base_image),
        __ATTR_RO(image_loaded),
+       __ATTR_RW(load_image_on_perst),
 };