Merge tag 'thermal-v5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thermal...
[linux-2.6-microblaze.git] / include / linux / remoteproc.h
index 9c07d79..e7b7bab 100644 (file)
@@ -73,7 +73,7 @@ struct resource_table {
        u32 ver;
        u32 num;
        u32 reserved[2];
-       u32 offset[0];
+       u32 offset[];
 } __packed;
 
 /**
@@ -87,7 +87,7 @@ struct resource_table {
  */
 struct fw_rsc_hdr {
        u32 type;
-       u8 data[0];
+       u8 data[];
 } __packed;
 
 /**
@@ -306,7 +306,7 @@ struct fw_rsc_vdev {
        u8 status;
        u8 num_of_vrings;
        u8 reserved[2];
-       struct fw_rsc_vdev_vring vring[0];
+       struct fw_rsc_vdev_vring vring[];
 } __packed;
 
 struct rproc;
@@ -355,6 +355,8 @@ enum rsc_handling_status {
 
 /**
  * struct rproc_ops - platform-specific device handlers
+ * @prepare:   prepare device for code loading
+ * @unprepare: unprepare device after stop
  * @start:     power on the device and boot it
  * @stop:      power off the device
  * @kick:      kick a virtqueue (virtqueue id given as a parameter)
@@ -373,6 +375,8 @@ enum rsc_handling_status {
  *             panic at least the returned number of milliseconds
  */
 struct rproc_ops {
+       int (*prepare)(struct rproc *rproc);
+       int (*unprepare)(struct rproc *rproc);
        int (*start)(struct rproc *rproc);
        int (*stop)(struct rproc *rproc);
        void (*kick)(struct rproc *rproc, int vqid);
@@ -489,7 +493,7 @@ struct rproc {
        struct list_head node;
        struct iommu_domain *domain;
        const char *name;
-       char *firmware;
+       const char *firmware;
        void *priv;
        struct rproc_ops *ops;
        struct device dev;
@@ -518,6 +522,7 @@ struct rproc {
        struct list_head dump_segments;
        int nb_vdev;
        u8 elf_class;
+       u16 elf_machine;
 };
 
 /**
@@ -599,6 +604,11 @@ int rproc_add(struct rproc *rproc);
 int rproc_del(struct rproc *rproc);
 void rproc_free(struct rproc *rproc);
 
+struct rproc *devm_rproc_alloc(struct device *dev, const char *name,
+                              const struct rproc_ops *ops,
+                              const char *firmware, int len);
+int devm_rproc_add(struct device *dev, struct rproc *rproc);
+
 void rproc_add_carveout(struct rproc *rproc, struct rproc_mem_entry *mem);
 
 struct rproc_mem_entry *
@@ -622,6 +632,7 @@ int rproc_coredump_add_custom_segment(struct rproc *rproc,
                                                     struct rproc_dump_segment *segment,
                                                     void *dest),
                                      void *priv);
+int rproc_coredump_set_elf_info(struct rproc *rproc, u8 class, u16 machine);
 
 static inline struct rproc_vdev *vdev_to_rvdev(struct virtio_device *vdev)
 {