staging: fsl-mc: uprev binary interface to match MC v10.x
PATCH 14/14 staging: fsl-mc: uprev binary interface to match MC v10.x
From: Ioana Ciornei <[email protected]>
DPAA2 will not support MC firmware versions prior to MC v10.x. Update the MC interface code and drivers to reflect this.
-update the object .h files and code that builds commands to include
the new command version in the command header
-object versions are no longer available in the object attributes,
so remove references to them and instead get the version from the new get_api_version() command
-create/destroy commands for all objects have new arguments -dpmng_get_container_id() is replaced by dprc_get_container_id()
All MC firmware versions >= 10 will be supported going forward.
--- drivers/staging/fsl-mc/bus/dpbp-cmd.h | 57 +++++++++++--------- drivers/staging/fsl-mc/bus/dpbp.c | 67 ++++++++++++++++++------ drivers/staging/fsl-mc/bus/dpmcp-cmd.h | 45 ++++++++++------ drivers/staging/fsl-mc/bus/dpmcp.c | 66 +++++++++++++++++------ drivers/staging/fsl-mc/bus/dpmcp.h | 16 ++---- drivers/staging/fsl-mc/bus/dpmng-cmd.h | 13 ++--- drivers/staging/fsl-mc/bus/dpmng.c | 33 ------------ drivers/staging/fsl-mc/bus/dprc-cmd.h | 89 +++++++++++++++++--------------- drivers/staging/fsl-mc/bus/dprc-driver.c | 19 +++++-- drivers/staging/fsl-mc/bus/dprc.c | 65 ++++++++++++++++++++++- drivers/staging/fsl-mc/bus/fsl-mc-bus.c | 22 ++------ drivers/staging/fsl-mc/bus/mc-sys.c | 8 +-- drivers/staging/fsl-mc/include/dpbp.h | 21 ++++---- drivers/staging/fsl-mc/include/dprc.h | 19 ++++--- drivers/staging/fsl-mc/include/mc-cmd.h | 41 +++++++++++---- 15 files changed, 355 insertions(+), 226 deletions(-)
drivers/staging/fsl-mc/bus/dpbp-cmd.h +34 -23
@@ -33,37 +33,48 @@#define _FSL_DPBP_CMD_H/* DPBP Version */ -#define DPBP_VER_MAJOR 2 +#define DPBP_VER_MAJOR 3#define DPBP_VER_MINOR 2 +/* Command versioning */ +#define DPBP_CMD_BASE_VERSION 1 +#define DPBP_CMD_ID_OFFSET 4 + +#define DPBP_CMD (id) ((id << DPBP_CMD_ID_OFFSET) | DPBP_CMD_BASE_VERSION) +/* Command IDs */ -#define DPBP_CMDID_CLOSE 0x800 -#define DPBP_CMDID_OPEN 0x804 -#define DPBP_CMDID_CREATE 0x904 -#define DPBP_CMDID_DESTROY 0x900 - -#define DPBP_CMDID_ENABLE 0x002 -#define DPBP_CMDID_DISABLE 0x003 -#define DPBP_CMDID_GET_ATTR 0x004 -#define DPBP_CMDID_RESET 0x005 -#define DPBP_CMDID_IS_ENABLED 0x006 - -#define DPBP_CMDID_SET_IRQ 0x010 -#define DPBP_CMDID_GET_IRQ 0x011 -#define DPBP_CMDID_SET_IRQ_ENABLE 0x012 -#define DPBP_CMDID_GET_IRQ_ENABLE 0x013 -#define DPBP_CMDID_SET_IRQ_MASK 0x014 -#define DPBP_CMDID_GET_IRQ_MASK 0x015 -#define DPBP_CMDID_GET_IRQ_STATUS 0x016 -#define DPBP_CMDID_CLEAR_IRQ_STATUS 0x017 - -#define DPBP_CMDID_SET_NOTIFICATIONS 0x01b0 -#define DPBP_CMDID_GET_NOTIFICATIONS 0x01b1 +#define DPBP_CMDID_CLOSE DPBP_CMD(0x800) +#define DPBP_CMDID_OPEN DPBP_CMD(0x804) +#define DPBP_CMDID_CREATE DPBP_CMD(0x904) +#define DPBP_CMDID_DESTROY DPBP_CMD(0x984) +#define DPBP_CMDID_GET_API_VERSION DPBP_CMD(0xa04) + +#define DPBP_CMDID_ENABLE DPBP_CMD(0x002) +#define DPBP_CMDID_DISABLE DPBP_CMD(0x003) +#define DPBP_CMDID_GET_ATTR DPBP_CMD(0x004) +#define DPBP_CMDID_RESET DPBP_CMD(0x005) +#define DPBP_CMDID_IS_ENABLED DPBP_CMD(0x006) + +#define DPBP_CMDID_SET_IRQ DPBP_CMD(0x010) +#define DPBP_CMDID_GET_IRQ DPBP_CMD(0x011) +#define DPBP_CMDID_SET_IRQ_ENABLE DPBP_CMD(0x012) +#define DPBP_CMDID_GET_IRQ_ENABLE DPBP_CMD(0x013) +#define DPBP_CMDID_SET_IRQ_MASK DPBP_CMD(0x014) +#define DPBP_CMDID_GET_IRQ_MASK DPBP_CMD(0x015) +#define DPBP_CMDID_GET_IRQ_STATUS DPBP_CMD(0x016) +#define DPBP_CMDID_CLEAR_IRQ_STATUS DPBP_CMD(0x017) + +#define DPBP_CMDID_SET_NOTIFICATIONS DPBP_CMD(0x01b0) +#define DPBP_CMDID_GET_NOTIFICATIONS DPBP_CMD(0x01b1)struct dpbp_cmd_open {__le32 dpbp_id; }; +struct dpbp_cmd_destroy { +__le32 object_id; +}; +#define DPBP_ENABLE 0x1struct dpbp_rsp_is_enabled {
drivers/staging/fsl-mc/bus/dpbp.c +50 -17
123 lines not on this page · raw message
drivers/staging/fsl-mc/bus/dpmcp-cmd.h +28 -17
59 lines not on this page · raw message
drivers/staging/fsl-mc/bus/dpmcp.c +51 -15
121 lines not on this page · raw message
drivers/staging/fsl-mc/bus/dpmcp.h +4 -12
@@ -61,13 +61,15 @@ struct dpmcp_cfg { };int dpmcp_create (struct fsl_mc_io *mc_io, +u16 dprc_token,u32 cmd_flags,const struct dpmcp_cfg *cfg, -u16 *token); +u32 *obj_id);int dpmcp_destroy (struct fsl_mc_io *mc_io, +u16 dprc_token,u32 cmd_flags, -u16 token); +u32 obj_id); int dpmcp_reset(struct fsl_mc_io *mc_io, u32 cmd_flags,
@@ -137,19 +139,9 @@ int dpmcp_get_irq_status(struct fsl_mc_io *mc_io,/** * struct dpmcp_attr - Structure representing DPMCP attributes * @id: DPMCP object ID -* @version: DPMCP version */ struct dpmcp_attr {int id; -/** -* struct version - Structure representing DPMCP version -* @major: DPMCP major version -* @minor: DPMCP minor version -*/ -struct { -u16 major; -u16 minor; - } version; }; int dpmcp_get_attributes(struct fsl_mc_io *mc_io,
drivers/staging/fsl-mc/bus/dpmng-cmd.h +7 -6
@@ -40,13 +40,14 @@ #ifndef __FSL_DPMNG_CMD_H #define __FSL_DPMNG_CMD_H -/* Command IDs */ -#define DPMNG_CMDID_GET_CONT_ID 0x830 -#define DPMNG_CMDID_GET_VERSION 0x831 +/* Command versioning */ +#define DPMNG_CMD_BASE_VERSION 1 +#define DPMNG_CMD_ID_OFFSET 4 -struct dpmng_rsp_get_container_id { - __le32 container_id; -}; +#define DPMNG_CMD(id) ((id << DPMNG_CMD_ID_OFFSET) | DPMNG_CMD_BASE_VERSION) + +/* Command IDs */ +#define DPMNG_CMDID_GET_VERSION DPMNG_CMD(0x831) struct dpmng_rsp_get_version { __le32 revision;
drivers/staging/fsl-mc/bus/dpmng.c +0 -33
@@ -72,36 +72,3 @@ int mc_get_version(struct fsl_mc_io *mc_io, }EXPORT_SYMBOL (mc_get_version); -/** -* dpmng_get_container_id() - Get container ID associated with a given portal. -* @mc_io: Pointer to MC portal's I/O object -* @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' -* @container_id: Requested container ID -* -* Return: '0' on Success; Error code otherwise. -*/ -int dpmng_get_container_id (struct fsl_mc_io *mc_io, -u32 cmd_flags, -int *container_id) -{ -struct mc_command cmd = {0 }; -struct dpmng_rsp_get_container_id *rsp_params; -int err; - -/* prepare command */ - cmd.header =mc_encode_cmd_header (DPMNG_CMDID_GET_CONT_ID , - cmd_flags, -0 ); - -/* send command to mc*/ - err =mc_send_command (mc_io, &cmd); -if (err) -return err; - -/* retrieve response parameters */ - rsp_params = (struct dpmng_rsp_get_container_id *)cmd.params; - *container_id =le32_to_cpu (rsp_params->container_id); - -return 0 ; -} -
drivers/staging/fsl-mc/bus/dprc-cmd.h +47 -42
104 lines not on this page · raw message
drivers/staging/fsl-mc/bus/dprc-driver.c +14 -5
@@ -597,6 +597,7 @@ static int dprc_probe(struct fsl_mc_device *mc_dev)struct fsl_mc_bus *mc_bus =to_fsl_mc_bus (mc_dev);bool mc_io_created = false;bool msi_domain_set = false; +u16 major_ver, minor_ver;if (WARN_ON (strcmp (mc_dev->obj_desc.type,"dprc" ) !=0 ))return -EINVAL ;
@@ -669,13 +670,21 @@ static int dprc_probe(struct fsl_mc_device *mc_dev) goto error_cleanup_open; } -if (mc_bus->dprc_attr.version.major <DPRC_MIN_VER_MAJOR || - (mc_bus->dprc_attr.version.major ==DPRC_MIN_VER_MAJOR && - mc_bus->dprc_attr.version.minor <DPRC_MIN_VER_MINOR )) { + error =dprc_get_api_version (mc_dev->mc_io,0 , + &major_ver, + &minor_ver); +if (error <0 ) { +dev_err (&mc_dev->dev,"dprc_get_api_version() failed: %d\n" , + error); + goto error_cleanup_open; + } + +if (major_ver <DPRC_MIN_VER_MAJOR || + (major_ver ==DPRC_MIN_VER_MAJOR && + minor_ver <DPRC_MIN_VER_MINOR )) {dev_err (&mc_dev->dev,"ERROR: DPRC version %d.%d not supported\n" , - mc_bus->dprc_attr.version.major, - mc_bus->dprc_attr.version.minor); + major_ver, minor_ver); error = -ENOTSUPP ; goto error_cleanup_open; }
drivers/staging/fsl-mc/bus/dprc.c +63 -2
74 lines not on this page · raw message
drivers/staging/fsl-mc/bus/fsl-mc-bus.c +4 -18
@@ -311,21 +311,6 @@ static int get_dprc_icid(struct fsl_mc_io *mc_io,return error; } -static int get_dprc_version (struct fsl_mc_io *mc_io, -int container_id,u16 *major,u16 *minor) -{ -struct dprc_attributes attr; -int error; - - error =get_dprc_attr (mc_io, container_id, &attr); -if (error ==0 ) { - *major = attr.version.major; - *minor = attr.version.minor; - } - -return error; -} -static int translate_mc_addr (struct fsl_mc_device *mc_dev,enum dprc_region_type mc_region_type,u64 mc_offset,phys_addr_t *phys_addr)
@@ -787,7 +772,7 @@ static int fsl_mc_bus_probe(struct platform_device *pdev)if (error <0 ) goto error_cleanup_mc_io; - error =dpmng_get_container_id (mc_io,0 , &container_id); + error =dprc_get_container_id (mc_io,0 , &container_id);if (error <0 ) {dev_err (&pdev->dev,"dpmng_get_container_id() failed: %d\n" , error);
@@ -795,8 +780,9 @@ static int fsl_mc_bus_probe(struct platform_device *pdev) }memset (&obj_desc,0 ,sizeof (struct dprc_obj_desc )); - error =get_dprc_version (mc_io, container_id, - &obj_desc.ver_major, &obj_desc.ver_minor); + error =dprc_get_api_version (mc_io,0 , + &obj_desc.ver_major, + &obj_desc.ver_minor);if (error <0 ) goto error_cleanup_mc_io;
drivers/staging/fsl-mc/bus/mc-sys.c +4 -4
@@ -67,7 +67,7 @@ static u16 mc_cmd_hdr_read_cmdid(struct mc_command *cmd)struct mc_cmd_header *hdr = (struct mc_cmd_header *)&cmd->header;u16 cmd_id =le16_to_cpu (hdr->cmd_id); -return (cmd_id &MC_CMD_HDR_CMDID_MASK ) >>MC_CMD_HDR_CMDID_SHIFT ; +return cmd_id; }static int mc_status_to_error (enum mc_cmd_status status)
@@ -200,7 +200,7 @@ static int mc_polling_wait_preemptible(struct fsl_mc_io *mc_io,if (time_after_eq (jiffies, jiffies_until_timeout)) {dev_dbg (mc_io->dev, -"MC command timed out (portal: %#llx, obj handle: %#x, command: %#x)\n" , +"MC command timed out (portal: %#llx, dprc handle: %#x, command: %#x)\n" , mc_io->portal_phys_addr, (unsigned int )mc_cmd_hdr_read_token (cmd), (unsigned int )mc_cmd_hdr_read_cmdid (cmd));
@@ -240,7 +240,7 @@ static int mc_polling_wait_atomic(struct fsl_mc_io *mc_io, timeout_usecs -=MC_CMD_COMPLETION_POLLING_MAX_SLEEP_USECS ;if (timeout_usecs ==0 ) {dev_dbg (mc_io->dev, -"MC command timed out (portal: %#llx, obj handle: %#x, command: %#x)\n" , +"MC command timed out (portal: %#llx, dprc handle: %#x, command: %#x)\n" , mc_io->portal_phys_addr, (unsigned int )mc_cmd_hdr_read_token (cmd), (unsigned int )mc_cmd_hdr_read_cmdid (cmd));
@@ -294,7 +294,7 @@ int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd)if (status !=MC_CMD_STATUS_OK ) { dev_dbg(mc_io->dev, - "MC command failed: portal: %#llx, obj handle: %#x, command: %#x, status: %s (%#x)\n", + "MC command failed: portal: %#llx, dprc handle: %#x, command: %#x, status: %s (%#x)\n", mc_io->portal_phys_addr, (unsigned int)mc_cmd_hdr_read_token(cmd), (unsigned int)mc_cmd_hdr_read_cmdid(cmd),
drivers/staging/fsl-mc/include/dpbp.h +9 -12
@@ -58,13 +58,15 @@ struct dpbp_cfg { };int dpbp_create (struct fsl_mc_io *mc_io, +u16 dprc_token,u32 cmd_flags,const struct dpbp_cfg *cfg, -u16 *token); +u32 *obj_id);int dpbp_destroy (struct fsl_mc_io *mc_io, +u16 dprc_token,u32 cmd_flags, -u16 token); +u32 obj_id); int dpbp_enable(struct fsl_mc_io *mc_io, u32 cmd_flags,
@@ -147,21 +149,11 @@ int dpbp_clear_irq_status(struct fsl_mc_io *mc_io,/** * struct dpbp_attr - Structure representing DPBP attributes * @id: DPBP object ID -* @version: DPBP version * @bpid: Hardware buffer pool ID; should be used as an argument in * acquire/release operations on buffers */ struct dpbp_attr {int id; -/** -* struct version - Structure representing DPBP version -* @major: DPBP major version -* @minor: DPBP minor version -*/ -struct { -u16 major; -u16 minor; - } version;u16 bpid; };
@@ -217,6 +209,11 @@ int dpbp_get_notifications(struct fsl_mc_io *mc_io,u16 token, struct dpbp_notification_cfg *cfg); +int dpbp_get_api_version (struct fsl_mc_io *mc_io, +u32 cmd_flags, +u16 *major_ver, +u16 *minor_ver); +/** @} */ #endif /* __FSL_DPBP_H */
drivers/staging/fsl-mc/include/dprc.h +9 -10
@@ -239,22 +239,12 @@ int dprc_clear_irq_status(struct fsl_mc_io *mc_io,* @icid: Container's ICID * @portal_id: Container's portal ID * @options: Container's options as set at container's creation -* @version: DPRC version */ struct dprc_attributes {int container_id;u16 icid;int portal_id;u64 options; -/** -* struct version - DPRC version -* @major: DPRC major version -* @minor: DPRC minor version -*/ -struct { -u16 major; -u16 minor; - } version; }; int dprc_get_attributes(struct fsl_mc_io *mc_io,
@@ -551,5 +541,14 @@ int dprc_get_connection(struct fsl_mc_io *mc_io,struct dprc_endpoint *endpoint2, int *state); +int dprc_get_api_version (struct fsl_mc_io *mc_io, +u32 cmd_flags, +u16 *major_ver, +u16 *minor_ver); + +int dprc_get_container_id (struct fsl_mc_io *mc_io, +u32 cmd_flags, +int *container_id); +#endif /* _FSL_DPRC_H */
drivers/staging/fsl-mc/include/mc-cmd.h +31 -10
65 lines not on this page · raw message
Signature · 1 line
1.9.0
Greg KH
maintainerQuoted 11 lines · Stuart Yoder
From: Ioana Ciornei <[email protected]>
DPAA2 will not support MC firmware versions prior to MC v10.x. Update the MC interface code and drivers to reflect this.
-update the object .h files and code that builds commands to include
the new command version in the command header
-object versions are no longer available in the object attributes,
so remove references to them and instead get the version from the newget_api_version()command
-create/destroy commands for all objects have new arguments -dpmng_get_container_id() is replaced bydprc_get_container_id()
Again, that's a lot of different things to do all at once, can you break this up?
thanks,
greg k-h