Commit ac061998 authored by Stuart Yoder's avatar Stuart Yoder Committed by Greg Kroah-Hartman

staging: fsl-mc: update dprc binary interface to v5.1

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: default avatarStuart Yoder <stuart.yoder@nxp.com>
Acked-by: default avatarGerman Rivera <german.rivera@nxp.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6606c073
...@@ -41,8 +41,8 @@ ...@@ -41,8 +41,8 @@
#define _FSL_DPRC_CMD_H #define _FSL_DPRC_CMD_H
/* DPRC Version */ /* DPRC Version */
#define DPRC_VER_MAJOR 4 #define DPRC_VER_MAJOR 5
#define DPRC_VER_MINOR 0 #define DPRC_VER_MINOR 1
/* Command IDs */ /* Command IDs */
#define DPRC_CMDID_CLOSE 0x800 #define DPRC_CMDID_CLOSE 0x800
......
...@@ -423,6 +423,7 @@ static irqreturn_t dprc_irq0_handler_thread(int irq_num, void *arg) ...@@ -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)) if (WARN_ON(!msi_desc || msi_desc->irq != (u32)irq_num))
goto out; goto out;
status = 0;
error = dprc_get_irq_status(mc_io, 0, mc_dev->mc_handle, 0, error = dprc_get_irq_status(mc_io, 0, mc_dev->mc_handle, 0,
&status); &status);
if (error < 0) { if (error < 0) {
......
...@@ -265,7 +265,7 @@ int dprc_get_irq(struct fsl_mc_io *mc_io, ...@@ -265,7 +265,7 @@ int dprc_get_irq(struct fsl_mc_io *mc_io,
/* retrieve response parameters */ /* retrieve response parameters */
irq_cfg->val = mc_dec(cmd.params[0], 0, 32); irq_cfg->val = mc_dec(cmd.params[0], 0, 32);
irq_cfg->paddr = mc_dec(cmd.params[1], 0, 64); 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); *type = mc_dec(cmd.params[2], 32, 32);
return 0; return 0;
...@@ -296,7 +296,7 @@ int dprc_set_irq(struct fsl_mc_io *mc_io, ...@@ -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(32, 8, irq_index);
cmd.params[0] |= mc_enc(0, 32, irq_cfg->val); cmd.params[0] |= mc_enc(0, 32, irq_cfg->val);
cmd.params[1] |= mc_enc(0, 64, irq_cfg->paddr); 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*/ /* send command to mc*/
return mc_send_command(mc_io, &cmd); return mc_send_command(mc_io, &cmd);
...@@ -466,6 +466,7 @@ int dprc_get_irq_status(struct fsl_mc_io *mc_io, ...@@ -466,6 +466,7 @@ int dprc_get_irq_status(struct fsl_mc_io *mc_io,
/* prepare command */ /* prepare command */
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_IRQ_STATUS, cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_IRQ_STATUS,
cmd_flags, token); cmd_flags, token);
cmd.params[0] |= mc_enc(0, 32, *status);
cmd.params[0] |= mc_enc(32, 8, irq_index); cmd.params[0] |= mc_enc(32, 8, irq_index);
/* send command to mc*/ /* send command to mc*/
...@@ -948,6 +949,7 @@ int dprc_get_obj(struct fsl_mc_io *mc_io, ...@@ -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->state = mc_dec(cmd.params[1], 32, 32);
obj_desc->ver_major = mc_dec(cmd.params[2], 0, 16); obj_desc->ver_major = mc_dec(cmd.params[2], 0, 16);
obj_desc->ver_minor = mc_dec(cmd.params[2], 16, 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[0] = mc_dec(cmd.params[3], 0, 8);
obj_desc->type[1] = mc_dec(cmd.params[3], 8, 8); obj_desc->type[1] = mc_dec(cmd.params[3], 8, 8);
obj_desc->type[2] = mc_dec(cmd.params[3], 16, 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, ...@@ -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->state = (u32)mc_dec(cmd.params[1], 32, 32);
obj_desc->ver_major = (u16)mc_dec(cmd.params[2], 0, 16); 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->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[0] = (char)mc_dec(cmd.params[3], 0, 8);
obj_desc->type[1] = (char)mc_dec(cmd.params[3], 8, 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); 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, ...@@ -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(32, 8, irq_index);
cmd.params[0] |= mc_enc(0, 32, irq_cfg->val); cmd.params[0] |= mc_enc(0, 32, irq_cfg->val);
cmd.params[1] |= mc_enc(0, 64, irq_cfg->paddr); 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[2] |= mc_enc(32, 32, obj_id);
cmd.params[3] |= mc_enc(0, 8, obj_type[0]); cmd.params[3] |= mc_enc(0, 8, obj_type[0]);
cmd.params[3] |= mc_enc(8, 8, obj_type[1]); 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, ...@@ -1189,7 +1192,7 @@ int dprc_get_obj_irq(struct fsl_mc_io *mc_io,
/* retrieve response parameters */ /* retrieve response parameters */
irq_cfg->val = (u32)mc_dec(cmd.params[0], 0, 32); irq_cfg->val = (u32)mc_dec(cmd.params[0], 0, 32);
irq_cfg->paddr = (u64)mc_dec(cmd.params[1], 0, 64); 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); *type = (int)mc_dec(cmd.params[2], 32, 32);
return 0; return 0;
...@@ -1437,14 +1440,8 @@ EXPORT_SYMBOL(dprc_set_obj_label); ...@@ -1437,14 +1440,8 @@ EXPORT_SYMBOL(dprc_set_obj_label);
* @endpoint1: Endpoint 1 configuration parameters * @endpoint1: Endpoint 1 configuration parameters
* @endpoint2: Endpoint 2 configuration parameters * @endpoint2: Endpoint 2 configuration parameters
* @cfg: Connection configuration. The connection configuration is ignored for * @cfg: Connection configuration. The connection configuration is ignored for
* connections made to DPMAC objects, where rate is set according to * connections made to DPMAC objects, where rate is retrieved from the
* MAC configuration. * 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.
* *
* Return: '0' on Success; Error code otherwise. * Return: '0' on Success; Error code otherwise.
*/ */
...@@ -1555,7 +1552,10 @@ int dprc_disconnect(struct fsl_mc_io *mc_io, ...@@ -1555,7 +1552,10 @@ int dprc_disconnect(struct fsl_mc_io *mc_io,
* @token: Token of DPRC object * @token: Token of DPRC object
* @endpoint1: Endpoint 1 configuration parameters * @endpoint1: Endpoint 1 configuration parameters
* @endpoint2: Returned endpoint 2 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. * Return: '0' on Success; -ENAVAIL if connection does not exist.
*/ */
......
...@@ -65,7 +65,7 @@ static void __fsl_mc_msi_write_msg(struct fsl_mc_device *mc_bus_dev, ...@@ -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) | irq_cfg.paddr = ((u64)msi_desc->msg.address_hi << 32) |
msi_desc->msg.address_lo; msi_desc->msg.address_lo;
irq_cfg.val = msi_desc->msg.data; 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) { if (owner_mc_dev == mc_bus_dev) {
/* /*
......
...@@ -94,11 +94,6 @@ int dprc_close(struct fsl_mc_io *mc_io, ...@@ -94,11 +94,6 @@ int dprc_close(struct fsl_mc_io *mc_io,
*/ */
#define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED 0x00000008 #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. */ /* AIOP - Indicates that container belongs to AIOP. */
#define DPRC_CFG_OPT_AIOP 0x00000020 #define DPRC_CFG_OPT_AIOP 0x00000020
...@@ -173,12 +168,12 @@ int dprc_reset_container(struct fsl_mc_io *mc_io, ...@@ -173,12 +168,12 @@ int dprc_reset_container(struct fsl_mc_io *mc_io,
* struct dprc_irq_cfg - IRQ configuration * struct dprc_irq_cfg - IRQ configuration
* @paddr: Address that must be written to signal a message-based interrupt * @paddr: Address that must be written to signal a message-based interrupt
* @val: Value to write into irq_addr address * @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 { struct dprc_irq_cfg {
phys_addr_t paddr; phys_addr_t paddr;
u32 val; u32 val;
int user_irq_id; int irq_num;
}; };
int dprc_set_irq(struct fsl_mc_io *mc_io, 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, ...@@ -352,6 +347,14 @@ int dprc_get_obj_count(struct fsl_mc_io *mc_io,
/* Plugged state - Indicates that the object is plugged */ /* Plugged state - Indicates that the object is plugged */
#define DPRC_OBJ_STATE_PLUGGED 0x00000002 #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() * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj()
* @type: Type of object: NULL terminated string * @type: Type of object: NULL terminated string
...@@ -363,6 +366,7 @@ int dprc_get_obj_count(struct fsl_mc_io *mc_io, ...@@ -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 * @region_count: Number of mappable regions supported by the object
* @state: Object state: combination of DPRC_OBJ_STATE_ states * @state: Object state: combination of DPRC_OBJ_STATE_ states
* @label: Object label * @label: Object label
* @flags: Object's flags
*/ */
struct dprc_obj_desc { struct dprc_obj_desc {
char type[16]; char type[16];
...@@ -374,6 +378,7 @@ struct dprc_obj_desc { ...@@ -374,6 +378,7 @@ struct dprc_obj_desc {
u8 region_count; u8 region_count;
u32 state; u32 state;
char label[16]; char label[16];
u16 flags;
}; };
int dprc_get_obj(struct fsl_mc_io *mc_io, int dprc_get_obj(struct fsl_mc_io *mc_io,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment