staging: fsl-mc: update dprc binary interface to v5.1
authorStuart Yoder <stuart.yoder@nxp.com>
Mon, 11 Apr 2016 16:48:59 +0000 (11:48 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 30 Apr 2016 01:00:45 +0000 (18:00 -0700)
The meaning of the "status" parameter in dprc_get_irq_status
has changed, and this patch updates the flib and caller
of the API.

Signed-off-by: Stuart Yoder <stuart.yoder@nxp.com>
Acked-by: German Rivera <german.rivera@nxp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/fsl-mc/bus/dprc-cmd.h
drivers/staging/fsl-mc/bus/dprc-driver.c
drivers/staging/fsl-mc/bus/dprc.c
drivers/staging/fsl-mc/bus/mc-msi.c
drivers/staging/fsl-mc/include/dprc.h

index 6552c2034947ed5b9e82f70514a8e10c3e230a8c..d0198f5d2c1f0f5c2597cfcc1a12e2a0b43c1ceb 100644 (file)
@@ -41,8 +41,8 @@
 #define _FSL_DPRC_CMD_H
 
 /* DPRC Version */
-#define DPRC_VER_MAJOR                         4
-#define DPRC_VER_MINOR                         0
+#define DPRC_VER_MAJOR                         5
+#define DPRC_VER_MINOR                         1
 
 /* Command IDs */
 #define DPRC_CMDID_CLOSE                       0x800
index 31488a7b9e8679d5b9250490657930037232e2ca..4334f3c287eca573bb26b214088abba320beb5f5 100644 (file)
@@ -423,6 +423,7 @@ static irqreturn_t dprc_irq0_handler_thread(int irq_num, void *arg)
        if (WARN_ON(!msi_desc || msi_desc->irq != (u32)irq_num))
                goto out;
 
+       status = 0;
        error = dprc_get_irq_status(mc_io, 0, mc_dev->mc_handle, 0,
                                    &status);
        if (error < 0) {
index 381b9a96a14bd5cb692df987d9362e852eb311b4..a2c47377cc4e2d3bccd64510b4e543dbd823e293 100644 (file)
@@ -265,7 +265,7 @@ int dprc_get_irq(struct fsl_mc_io *mc_io,
        /* retrieve response parameters */
        irq_cfg->val = mc_dec(cmd.params[0], 0, 32);
        irq_cfg->paddr = mc_dec(cmd.params[1], 0, 64);
-       irq_cfg->user_irq_id = mc_dec(cmd.params[2], 0, 32);
+       irq_cfg->irq_num = mc_dec(cmd.params[2], 0, 32);
        *type = mc_dec(cmd.params[2], 32, 32);
 
        return 0;
@@ -296,7 +296,7 @@ int dprc_set_irq(struct fsl_mc_io *mc_io,
        cmd.params[0] |= mc_enc(32, 8, irq_index);
        cmd.params[0] |= mc_enc(0, 32, irq_cfg->val);
        cmd.params[1] |= mc_enc(0, 64, irq_cfg->paddr);
-       cmd.params[2] |= mc_enc(0, 32, irq_cfg->user_irq_id);
+       cmd.params[2] |= mc_enc(0, 32, irq_cfg->irq_num);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
@@ -466,6 +466,7 @@ int dprc_get_irq_status(struct fsl_mc_io *mc_io,
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_IRQ_STATUS,
                                          cmd_flags, token);
+       cmd.params[0] |= mc_enc(0, 32, *status);
        cmd.params[0] |= mc_enc(32, 8, irq_index);
 
        /* send command to mc*/
@@ -948,6 +949,7 @@ int dprc_get_obj(struct fsl_mc_io *mc_io,
        obj_desc->state = mc_dec(cmd.params[1], 32, 32);
        obj_desc->ver_major = mc_dec(cmd.params[2], 0, 16);
        obj_desc->ver_minor = mc_dec(cmd.params[2], 16, 16);
+       obj_desc->flags = mc_dec(cmd.params[2], 32, 16);
        obj_desc->type[0] = mc_dec(cmd.params[3], 0, 8);
        obj_desc->type[1] = mc_dec(cmd.params[3], 8, 8);
        obj_desc->type[2] = mc_dec(cmd.params[3], 16, 8);
@@ -1042,6 +1044,7 @@ int dprc_get_obj_desc(struct fsl_mc_io *mc_io,
        obj_desc->state = (u32)mc_dec(cmd.params[1], 32, 32);
        obj_desc->ver_major = (u16)mc_dec(cmd.params[2], 0, 16);
        obj_desc->ver_minor = (u16)mc_dec(cmd.params[2], 16, 16);
+       obj_desc->flags = mc_dec(cmd.params[2], 32, 16);
        obj_desc->type[0] = (char)mc_dec(cmd.params[3], 0, 8);
        obj_desc->type[1] = (char)mc_dec(cmd.params[3], 8, 8);
        obj_desc->type[2] = (char)mc_dec(cmd.params[3], 16, 8);
@@ -1108,7 +1111,7 @@ int dprc_set_obj_irq(struct fsl_mc_io *mc_io,
        cmd.params[0] |= mc_enc(32, 8, irq_index);
        cmd.params[0] |= mc_enc(0, 32, irq_cfg->val);
        cmd.params[1] |= mc_enc(0, 64, irq_cfg->paddr);
-       cmd.params[2] |= mc_enc(0, 32, irq_cfg->user_irq_id);
+       cmd.params[2] |= mc_enc(0, 32, irq_cfg->irq_num);
        cmd.params[2] |= mc_enc(32, 32, obj_id);
        cmd.params[3] |= mc_enc(0, 8, obj_type[0]);
        cmd.params[3] |= mc_enc(8, 8, obj_type[1]);
@@ -1189,7 +1192,7 @@ int dprc_get_obj_irq(struct fsl_mc_io *mc_io,
        /* retrieve response parameters */
        irq_cfg->val = (u32)mc_dec(cmd.params[0], 0, 32);
        irq_cfg->paddr = (u64)mc_dec(cmd.params[1], 0, 64);
-       irq_cfg->user_irq_id = (int)mc_dec(cmd.params[2], 0, 32);
+       irq_cfg->irq_num = (int)mc_dec(cmd.params[2], 0, 32);
        *type = (int)mc_dec(cmd.params[2], 32, 32);
 
        return 0;
@@ -1437,14 +1440,8 @@ EXPORT_SYMBOL(dprc_set_obj_label);
  * @endpoint1: Endpoint 1 configuration parameters
  * @endpoint2: Endpoint 2 configuration parameters
  * @cfg: Connection configuration. The connection configuration is ignored for
- *     connections made to DPMAC objects, where rate is set according to
- *     MAC configuration.
- *     The committed rate is the guaranteed rate for the connection.
- *     The maximum rate is an upper limit allowed for the connection; it is
- *     expected to be equal or higher than the committed rate.
- *     When committed and maximum rates are both zero, the connection is set
- *     to "best effort" mode, having lower priority compared to connections
- *     with committed or maximum rates.
+ *      connections made to DPMAC objects, where rate is retrieved from the
+ *      MAC configuration.
  *
  * Return:     '0' on Success; Error code otherwise.
  */
@@ -1555,7 +1552,10 @@ int dprc_disconnect(struct fsl_mc_io *mc_io,
 * @token:      Token of DPRC object
 * @endpoint1:  Endpoint 1 configuration parameters
 * @endpoint2:  Returned endpoint 2 configuration parameters
-* @state:      Returned link state: 1 - link is up, 0 - link is down
+* @state:      Returned link state:
+*              1 - link is up;
+*              0 - link is down;
+*              -1 - no connection (endpoint2 information is irrelevant)
 *
 * Return:     '0' on Success; -ENAVAIL if connection does not exist.
 */
index 3a8258ff44267ba7c390fa18e62a3e2eacd6e733..ba48add505366e00c6939408410ffdf45c4ca191 100644 (file)
@@ -65,7 +65,7 @@ static void __fsl_mc_msi_write_msg(struct fsl_mc_device *mc_bus_dev,
        irq_cfg.paddr = ((u64)msi_desc->msg.address_hi << 32) |
                        msi_desc->msg.address_lo;
        irq_cfg.val = msi_desc->msg.data;
-       irq_cfg.user_irq_id = msi_desc->irq;
+       irq_cfg.irq_num = msi_desc->irq;
 
        if (owner_mc_dev == mc_bus_dev) {
                /*
index 94c492706315af51e08809e3a7c2f2f5db3f8433..593b2bbe7f714379f767a79aa38ec7fb4a830e5a 100644 (file)
@@ -94,11 +94,6 @@ int dprc_close(struct fsl_mc_io *mc_io,
  */
 #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED  0x00000008
 
-/* IOMMU bypass - indicates whether objects of this container are permitted
- * to bypass the IOMMU.
- */
-#define DPRC_CFG_OPT_IOMMU_BYPASS              0x00000010
-
 /* AIOP - Indicates that container belongs to AIOP.  */
 #define DPRC_CFG_OPT_AIOP                      0x00000020
 
@@ -173,12 +168,12 @@ int dprc_reset_container(struct fsl_mc_io *mc_io,
  * struct dprc_irq_cfg - IRQ configuration
  * @paddr:     Address that must be written to signal a message-based interrupt
  * @val:       Value to write into irq_addr address
- * @user_irq_id: A user defined number associated with this IRQ
+ * @irq_num:   A user defined number associated with this IRQ
  */
 struct dprc_irq_cfg {
             phys_addr_t        paddr;
             u32                val;
-            int                user_irq_id;
+            int                irq_num;
 };
 
 int dprc_set_irq(struct fsl_mc_io      *mc_io,
@@ -352,6 +347,14 @@ int dprc_get_obj_count(struct fsl_mc_io *mc_io,
 /* Plugged state - Indicates that the object is plugged */
 #define DPRC_OBJ_STATE_PLUGGED         0x00000002
 
+/**
+ * Shareability flag - Object flag indicating no memory shareability.
+ * the object generates memory accesses that are non coherent with other
+ * masters;
+ * user is responsible for proper memory handling through IOMMU configuration.
+ */
+#define DPRC_OBJ_FLAG_NO_MEM_SHAREABILITY              0x0001
+
 /**
  * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj()
  * @type: Type of object: NULL terminated string
@@ -363,6 +366,7 @@ int dprc_get_obj_count(struct fsl_mc_io *mc_io,
  * @region_count: Number of mappable regions supported by the object
  * @state: Object state: combination of DPRC_OBJ_STATE_ states
  * @label: Object label
+ * @flags: Object's flags
  */
 struct dprc_obj_desc {
        char type[16];
@@ -374,6 +378,7 @@ struct dprc_obj_desc {
        u8 region_count;
        u32 state;
        char label[16];
+       u16 flags;
 };
 
 int dprc_get_obj(struct fsl_mc_io      *mc_io,