remoteproc: Introduce rproc features
authorPeng Fan <peng.fan@nxp.com>
Wed, 28 Sep 2022 06:47:55 +0000 (14:47 +0800)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Wed, 28 Sep 2022 16:46:21 +0000 (10:46 -0600)
remote processor may support:
 - boot recovery with help from main processor
 - self recovery without help from main processor
 - iommu
 - etc

Introduce rproc features could simplify code to avoid adding more bool
flags

Acked-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20220928064756.4059662-2-peng.fan@oss.nxp.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
drivers/remoteproc/remoteproc_internal.h
include/linux/remoteproc.h

index bf1fb7b..d4dbb8d 100644 (file)
@@ -39,6 +39,21 @@ struct rproc_vdev_data {
        struct fw_rsc_vdev *rsc;
 };
 
+static inline bool rproc_has_feature(struct rproc *rproc, unsigned int feature)
+{
+       return test_bit(feature, rproc->features);
+}
+
+static inline int rproc_set_feature(struct rproc *rproc, unsigned int feature)
+{
+       if (feature >= RPROC_MAX_FEATURES)
+               return -EINVAL;
+
+       set_bit(feature, rproc->features);
+
+       return 0;
+}
+
 /* from remoteproc_core.c */
 void rproc_release(struct kref *kref);
 int rproc_of_parse_firmware(struct device *dev, int index,
index 1abf56a..fe8978e 100644 (file)
@@ -490,6 +490,20 @@ struct rproc_dump_segment {
 };
 
 /**
+ * enum rproc_features - features supported
+ *
+ * @RPROC_FEAT_ATTACH_ON_RECOVERY: The remote processor does not need help
+ *                                from Linux to recover, such as firmware
+ *                                loading. Linux just needs to attach after
+ *                                recovery.
+ */
+
+enum rproc_features {
+       RPROC_FEAT_ATTACH_ON_RECOVERY,
+       RPROC_MAX_FEATURES,
+};
+
+/**
  * struct rproc - represents a physical remote processor device
  * @node: list node of this rproc object
  * @domain: iommu domain
@@ -530,6 +544,7 @@ struct rproc_dump_segment {
  * @elf_machine: firmware ELF machine
  * @cdev: character device of the rproc
  * @cdev_put_on_release: flag to indicate if remoteproc should be shutdown on @char_dev release
+ * @features: indicate remoteproc features
  */
 struct rproc {
        struct list_head node;
@@ -570,6 +585,7 @@ struct rproc {
        u16 elf_machine;
        struct cdev cdev;
        bool cdev_put_on_release;
+       DECLARE_BITMAP(features, RPROC_MAX_FEATURES);
 };
 
 /**