From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759814AbbIVXh6 (ORCPT ); Tue, 22 Sep 2015 19:37:58 -0400 Received: from mail-bl2on0137.outbound.protection.outlook.com ([65.55.169.137]:16099 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751664AbbIVXh4 (ORCPT ); Tue, 22 Sep 2015 19:37:56 -0400 X-Greylist: delayed 895 seconds by postgrey-1.27 at vger.kernel.org; Tue, 22 Sep 2015 19:37:56 EDT Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none;freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; From: "J. German Rivera" To: , , , CC: , , , , , , , , , , , "J. German Rivera" Subject: [PATCH v2 4/6] staging: fsl-mc: up-rev dpmcp binary interface to v2.0 Date: Tue, 22 Sep 2015 18:08:57 -0500 Message-ID: <1442963339-32084-5-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1442963339-32084-1-git-send-email-German.Rivera@freescale.com> References: <1442963339-32084-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD014;1:qNE9LdcFyyMhpPFOiOHgxJc9BJgscWkgiMLr7e7Rq2uXf7uIM/wHaQLp6whErz7q54OscT3VMEO6g1q7c2aXwMvChe8aMFJC420zxkDo3JJEMi2DVfW3gqTL0r9hAEPC0TMoXIs432MlZqJLith7fC5xduDa3DR67MT/q16k1x+UBnHD39IiOkHgN8yXJ6k2afrH/yCaTM1hKia11SWda7WzFGLKx6IyOoriUd8uIgPDMi9wnsoo2MXabYMuRwel4Aowe3hDtEhSkj1IE1ExIUG351I2kBJ/luaeYiUwziDykYjYgnYElPpwkTx1ZTxjElaHFp5aKuyA9YvwwvtHKO1LMLp6wbAKmGUdxY3jfHVlkwMqP4DxGltf9dY42WD3V0wFKmO2MpkDCFCSqQeQDQ== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(45074003)(85426001)(229853001)(5001960100002)(62966003)(46102003)(105606002)(2201001)(47776003)(87936001)(86362001)(104016004)(6806005)(189998001)(48376002)(575784001)(11100500001)(19580395003)(36756003)(50226001)(92566002)(5003940100001)(106466001)(5001860100001)(64706001)(19580405001)(76176999)(50466002)(107886002)(5001920100001)(5007970100001)(5001830100001)(68736005)(4001540100001)(77096005)(5001770100001)(97736004)(2950100001)(50986999)(77156002)(81156007)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:SN1PR0301MB1646;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1646;2:ZWGT+xNNfsf3LgDHt/hhtJOsgNAEjDBZSVuJBjf1gbbDpqevPlQBXaunmsoRE3nLDL1u4BdPIVpZPFAdrcq0TO5VqArDM6F9iLVQiUOVJW3M4ckyu16iwDugWp4hhAYy1u1mRw7eVyPUdf9CkmiZwliy8sGaZcWDc1GuOtnaTMs=;3:6Ds55iDuQezuAFmctYmYN1jE/s/IvYQ7iuBiaCXv8CS/N/DGGU0OA5XMlUhcV7reyCuYDmMM8hkNlBE3C57kuWwGojN7T/bE5EWtWlb0IA/pB1wtngWGdCCiL0qEJYuC2yC/rKXe8xXd7eww0rth/+UjA2ElvOfYKG//BPoDaa3+orwat9UGone2atM6xUIo+Xtu8YI0F2HvoZWTcW90hNroAiapb1BS3VYeXZ6tZ8A=;25:Pejaq9p6Ln0bRBsoU02L+C5KdbZqSE6NURT5J0rYard72gffjOQPg/9vSkwx1hWD/zO+jJY/Y+TdCFh4qMwSoXJP0o76DI61heGQwoIFdIfBe6T3/o7CSabUmdLuiT+xdPLRu92R8jA+zi/ZBPcZ6Pq40ayXIhZizjZgP3ebB2Mi1cZUSu6nQFxVZckbkOJtpDGCc4RXlPLg6skeI3L7fNP+QoX9FuLAULqqtS/b23CNLKnd3JWUmKC9vZ2fjh90 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0301MB1646; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1646;20:Mg1VuIDTt/kv9bPiy3tv69kGoL1ly39tQTf+ulJ9Y/ckBcRnVqxhSW0yxOOYpv2dbMSu+xSOQ7fmZUkV/eWi3EYlHO70mUAqv36+xGi70oDQLz8W/HXFVRuC6MChVoG9hivmko53qPaFs/NY+KQ8kLkhv9yGpO+ftx90mARfBj7sUQYC6zZiwXn13vz219cYRDEGoXxMf29KDbda06LdosirqzQU+K5lWADJ9rFtOwVzDZ2Z+YacvBUnoX9CHFR683L2w9auVr06S/MhRcMzZZa6osMxmC3cnx0J18Rr4F+aMbcvcEmIKu258r3PZu+cvTCWEUx/ekbnsY9BagkqWuGVRJRU4Mbal6RtT+rH+ng=;4:ef9W6dnRFrHdWpEMClUb1Z7dg3hwrEZX9TI3z8z4Vj24njppLWvzsCFgI2A35WBR5lbtaID/pLVJZfnmIOt4Gu4cEvmQ4JTfZ5k3EIHwnNP1Darau0ephcdOQPpFNs7bVKMeR5ciwDtENCRznesbPSK7eOvyC/LKCtzJSjpDF+BC9o+NHBW3O/utRoPuAX5pZNZ8WUjoSRBRvsNw9WYz9ekSEgyNWB7ZH+0BfP5L6i1J2QeyBU1HGKsJ8unkvqNaumfg69T5LsjHhyr/lpVYhF2nvJNabVNbQxUTAQW092h048I4v9L5rs6zlzHyw65QYVZyNuo8owUGisF2rK5nV4FxOsyJjjmjxQhuwYtynX8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(3002001);SRVR:SN1PR0301MB1646;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0301MB1646; X-Forefront-PRVS: 0707248B64 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR0301MB1646;23:YiiMftmfP2VhyNVw/FIF9Av1J2Uff2BJkV3phMO?= =?us-ascii?Q?cP62MKDIMY7IviDgtXi06i/DauM4cocQSRbcpPe6Uu/8COMZb8SWSLrfpX4f?= =?us-ascii?Q?4/vsf+a0YUZYbbz9BcSrT8C+FRH2qKfVnX1K6NKLRCNzjLtbYWcGrS/K6vfl?= =?us-ascii?Q?jDC1ndmA4y49h0FcjAHrzqXDdL866EoCgYC2/7xR1jN+gNKATEbKiBfTDXyw?= =?us-ascii?Q?FFysQfuym0qsNbBxnDbQ+J8nLIJNn8m7jfLtMRXnCkGPVF6wpJ8f6iamxoaV?= =?us-ascii?Q?cENDquwrUHH/kPa2ziRxBkzT0ycaNWNwqwQHzzR7PBRMRoaxk7+lxOlWELqw?= =?us-ascii?Q?rAkdWSlj5wL5PRPqgStp2z2EpBo0fHBOKF9hPX15mA5poZ9s9exHDwTjjRZg?= =?us-ascii?Q?ttbv4zMTkr1LC/CmGRCP4yIRIQxjhMnpR7UoN3hCp9zm+GuvBeAb3da40UcC?= =?us-ascii?Q?CnbHiXpcuSX3izR433G7eKHWC/4/EoVoMmE4x51qoAZUkJc5oavwVnz/6PyF?= =?us-ascii?Q?PbLslSkjU7hXXycojgLznIPU4QhJjQrNZgiPksPob43X/yZ29t1Dkj69bpO2?= =?us-ascii?Q?rrApMmL9efCc/FixBawBGszwGsywjmFnd66gfWz4H1Cln7FioxFbZGcvJVxc?= =?us-ascii?Q?pweNZVlZnD/JMkZTNipeu8UdW4khftRqox65UHhBCZhrOTLCQHuZjWqwmAHB?= =?us-ascii?Q?AnmhqQqFb9GST+wufhureYc6DJpPUDFpUKJWk1ci6ybi7vMXuhGfEDLOU83z?= =?us-ascii?Q?QULt94mUiwS0G1f41OhaN81DIr2jHuN2eI7fS6b9Y24jZLNBLFh1vwZ4iH13?= =?us-ascii?Q?17SFYsCgu42EvNC7TCtMV89KD9puMxQJeqqigsPriy62N+zgTwI/Yeni28pP?= =?us-ascii?Q?m9eX/vLGXDdhQWPGu96gkGqd+IzWm7rgJwzTDBcKlODpqM+Re6NEo9b6n+kt?= =?us-ascii?Q?YHvrFDabuEXev3yUTETCLVX7vTr/DA/crjdKIafF8KfG009XolQYBK8/8LZS?= =?us-ascii?Q?XxkkR3jI14IILzmc+hwJQHNe91GvuVCLQeULb/mpbg5DDhXQWzMl0xKy9t75?= =?us-ascii?Q?+aphLHLL6QG/fDok10fibFLxpg37zAWOsJ6inlzWVZQ7j+rFn8EwXtFlryTA?= =?us-ascii?Q?EHE//okUButTSwTeypdO8dIQ4pT5G/iFACCD5ZPGnXpz0ZU0GbTOGysscufh?= =?us-ascii?Q?IuQKzAyzPF1AgULVOpDYhiWwr4Wab8rQwnw5XZl0IurNvM/5PtM9bco4dTjf?= =?us-ascii?Q?lmCqwTnzpTQxdfbzF91u79JkhndoCYzWVgOpXlWzQM8zytZLupXO46AwVndx?= =?us-ascii?Q?955N/fAeI0omBfQ/5bbe1DuJlacIHFg5BnN7+YEukfF6A?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1646;5:Bm3T7b+nVhc5UadJF+XMpWa92MH3LUtwNaxFsHzQCgm8HUwR1FHlUiYgXmZCMV2dbnpcRCAcwk8OEIREtej9EDK5wWeSO8ImPhR+cNIOM99NA31Td8h+zw8/jAg1TYKlaCsrefPstRBYWZAzngS3Lg==;24:/sojSucUuXQY7+z956t2DTzLBPubnN+caDktquxGknI0NaDmhe5qp5YPFAyyuQywVeCLDazYoakRNHs8GzY0ul4qGxxMF3fvPuF8j0ngFGo=;20:SQVKwaMXzn78/6EgBnlTfWot5eLEl2F/K1PmxbW/dh4avJ/jbuy6MlXCIXWDAC/um5GEDfgkAFIw8jhIGz4hDw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2015 23:22:59.2434 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0301MB1646 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add cmd_flags parameter to all dpbp APIs to comply with the dpmcp 2.0 MC interface. Updated version major number. Pass irq args in struct instead of separate args. Signed-off-by: J. German Rivera --- drivers/staging/fsl-mc/bus/dpmcp-cmd.h | 2 +- drivers/staging/fsl-mc/bus/dpmcp.c | 123 ++++++++++++++++++------------ drivers/staging/fsl-mc/bus/dpmcp.h | 123 +++++++++++++++++++----------- drivers/staging/fsl-mc/bus/mc-allocator.c | 6 +- 4 files changed, 157 insertions(+), 97 deletions(-) diff --git a/drivers/staging/fsl-mc/bus/dpmcp-cmd.h b/drivers/staging/fsl-mc/bus/dpmcp-cmd.h index 57f326b..6cc0fed 100644 --- a/drivers/staging/fsl-mc/bus/dpmcp-cmd.h +++ b/drivers/staging/fsl-mc/bus/dpmcp-cmd.h @@ -34,7 +34,7 @@ /* DPMCP Version */ #define DPMCP_VER_MAJOR 2 -#define DPMCP_VER_MINOR 0 +#define DPMCP_VER_MINOR 1 /* Command IDs */ #define DPMCP_CMDID_CLOSE 0x800 diff --git a/drivers/staging/fsl-mc/bus/dpmcp.c b/drivers/staging/fsl-mc/bus/dpmcp.c index 6b9da5b..ee63380 100644 --- a/drivers/staging/fsl-mc/bus/dpmcp.c +++ b/drivers/staging/fsl-mc/bus/dpmcp.c @@ -34,14 +34,18 @@ #include "dpmcp.h" #include "dpmcp-cmd.h" -int dpmcp_open(struct fsl_mc_io *mc_io, int dpmcp_id, uint16_t *token) +int dpmcp_open(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + int dpmcp_id, + uint16_t *token) { struct mc_command cmd = { 0 }; int err; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_OPEN, - MC_CMD_PRI_LOW, 0); + cmd_flags, + 0); cmd.params[0] |= mc_enc(0, 32, dpmcp_id); /* send command to mc*/ @@ -55,12 +59,15 @@ int dpmcp_open(struct fsl_mc_io *mc_io, int dpmcp_id, uint16_t *token) return err; } -int dpmcp_close(struct fsl_mc_io *mc_io, uint16_t token) +int dpmcp_close(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token) { struct mc_command cmd = { 0 }; /* prepare command */ - cmd.header = mc_encode_cmd_header(DPMCP_CMDID_CLOSE, MC_CMD_PRI_HIGH, + cmd.header = mc_encode_cmd_header(DPMCP_CMDID_CLOSE, + cmd_flags, token); /* send command to mc*/ @@ -68,15 +75,17 @@ int dpmcp_close(struct fsl_mc_io *mc_io, uint16_t token) } int dpmcp_create(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, const struct dpmcp_cfg *cfg, - uint16_t *token) + uint16_t *token) { struct mc_command cmd = { 0 }; int err; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_CREATE, - MC_CMD_PRI_LOW, 0); + cmd_flags, + 0); cmd.params[0] |= mc_enc(0, 32, cfg->portal_id); /* send command to mc*/ @@ -90,65 +99,71 @@ int dpmcp_create(struct fsl_mc_io *mc_io, return 0; } -int dpmcp_destroy(struct fsl_mc_io *mc_io, uint16_t token) +int dpmcp_destroy(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token) { struct mc_command cmd = { 0 }; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_DESTROY, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); /* send command to mc*/ return mc_send_command(mc_io, &cmd); } -int dpmcp_reset(struct fsl_mc_io *mc_io, uint16_t token) +int dpmcp_reset(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token) { struct mc_command cmd = { 0 }; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_RESET, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); /* send command to mc*/ return mc_send_command(mc_io, &cmd); } int dpmcp_set_irq(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint64_t irq_addr, - uint32_t irq_val, - int user_irq_id) + uint8_t irq_index, + struct dpmcp_irq_cfg *irq_cfg) { struct mc_command cmd = { 0 }; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_SET_IRQ, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(0, 8, irq_index); - cmd.params[0] |= mc_enc(32, 32, irq_val); - cmd.params[1] |= mc_enc(0, 64, irq_addr); - cmd.params[2] |= mc_enc(0, 32, user_irq_id); + cmd.params[0] |= mc_enc(32, 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); /* send command to mc*/ return mc_send_command(mc_io, &cmd); } int dpmcp_get_irq(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - int *type, - uint64_t *irq_addr, - uint32_t *irq_val, - int *user_irq_id) + uint8_t irq_index, + int *type, + struct dpmcp_irq_cfg *irq_cfg) { struct mc_command cmd = { 0 }; int err; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_GET_IRQ, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(32, 8, irq_index); /* send command to mc*/ @@ -157,23 +172,25 @@ int dpmcp_get_irq(struct fsl_mc_io *mc_io, return err; /* retrieve response parameters */ - *irq_val = (uint32_t)mc_dec(cmd.params[0], 0, 32); - *irq_addr = (uint64_t)mc_dec(cmd.params[1], 0, 64); - *user_irq_id = (int)mc_dec(cmd.params[2], 0, 32); + irq_cfg->val = (uint32_t)mc_dec(cmd.params[0], 0, 32); + irq_cfg->paddr = (uint64_t)mc_dec(cmd.params[1], 0, 64); + irq_cfg->user_irq_id = (int)mc_dec(cmd.params[2], 0, 32); *type = (int)mc_dec(cmd.params[2], 32, 32); return 0; } int dpmcp_set_irq_enable(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint8_t en) + uint8_t irq_index, + uint8_t en) { struct mc_command cmd = { 0 }; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_SET_IRQ_ENABLE, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(0, 8, en); cmd.params[0] |= mc_enc(32, 8, irq_index); @@ -182,16 +199,18 @@ int dpmcp_set_irq_enable(struct fsl_mc_io *mc_io, } int dpmcp_get_irq_enable(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint8_t *en) + uint8_t irq_index, + uint8_t *en) { struct mc_command cmd = { 0 }; int err; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_GET_IRQ_ENABLE, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(32, 8, irq_index); /* send command to mc*/ @@ -205,15 +224,17 @@ int dpmcp_get_irq_enable(struct fsl_mc_io *mc_io, } int dpmcp_set_irq_mask(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t mask) + uint8_t irq_index, + uint32_t mask) { struct mc_command cmd = { 0 }; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_SET_IRQ_MASK, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(0, 32, mask); cmd.params[0] |= mc_enc(32, 8, irq_index); @@ -222,16 +243,18 @@ int dpmcp_set_irq_mask(struct fsl_mc_io *mc_io, } int dpmcp_get_irq_mask(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t *mask) + uint8_t irq_index, + uint32_t *mask) { struct mc_command cmd = { 0 }; int err; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_GET_IRQ_MASK, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(32, 8, irq_index); /* send command to mc*/ @@ -245,16 +268,18 @@ int dpmcp_get_irq_mask(struct fsl_mc_io *mc_io, } int dpmcp_get_irq_status(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t *status) + uint8_t irq_index, + uint32_t *status) { struct mc_command cmd = { 0 }; int err; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_GET_IRQ_STATUS, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(32, 8, irq_index); /* send command to mc*/ @@ -268,15 +293,17 @@ int dpmcp_get_irq_status(struct fsl_mc_io *mc_io, } int dpmcp_clear_irq_status(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t status) + uint8_t irq_index, + uint32_t status) { struct mc_command cmd = { 0 }; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_CLEAR_IRQ_STATUS, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); cmd.params[0] |= mc_enc(0, 32, status); cmd.params[0] |= mc_enc(32, 8, irq_index); @@ -285,15 +312,17 @@ int dpmcp_clear_irq_status(struct fsl_mc_io *mc_io, } int dpmcp_get_attributes(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - struct dpmcp_attr *attr) + struct dpmcp_attr *attr) { struct mc_command cmd = { 0 }; int err; /* prepare command */ cmd.header = mc_encode_cmd_header(DPMCP_CMDID_GET_ATTR, - MC_CMD_PRI_LOW, token); + cmd_flags, + token); /* send command to mc*/ err = mc_send_command(mc_io, &cmd); diff --git a/drivers/staging/fsl-mc/bus/dpmcp.h b/drivers/staging/fsl-mc/bus/dpmcp.h index 5e7c219..164684f 100644 --- a/drivers/staging/fsl-mc/bus/dpmcp.h +++ b/drivers/staging/fsl-mc/bus/dpmcp.h @@ -41,6 +41,7 @@ struct fsl_mc_io; /** * dpmcp_open() - Open a control session for the specified object. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @dpmcp_id: DPMCP unique ID * @token: Returned token; use in subsequent API calls * @@ -54,7 +55,10 @@ struct fsl_mc_io; * * Return: '0' on Success; Error code otherwise. */ -int dpmcp_open(struct fsl_mc_io *mc_io, int dpmcp_id, uint16_t *token); +int dpmcp_open(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + int dpmcp_id, + uint16_t *token); /* Get portal ID from pool */ #define DPMCP_GET_PORTAL_ID_FROM_POOL (-1) @@ -62,6 +66,7 @@ int dpmcp_open(struct fsl_mc_io *mc_io, int dpmcp_id, uint16_t *token); /** * dpmcp_close() - Close the control session of the object * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * * After this function is called, no further operations are @@ -69,12 +74,14 @@ int dpmcp_open(struct fsl_mc_io *mc_io, int dpmcp_id, uint16_t *token); * * Return: '0' on Success; Error code otherwise. */ -int dpmcp_close(struct fsl_mc_io *mc_io, uint16_t token); +int dpmcp_close(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token); /** - * struct dpmcp_cfg() - Structure representing DPMCP configuration + * struct dpmcp_cfg - Structure representing DPMCP configuration * @portal_id: Portal ID; 'DPMCP_GET_PORTAL_ID_FROM_POOL' to get the portal ID - * from pool + * from pool */ struct dpmcp_cfg { int portal_id; @@ -83,6 +90,7 @@ struct dpmcp_cfg { /** * dpmcp_create() - Create the DPMCP object. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @cfg: Configuration structure * @token: Returned token; use in subsequent API calls * @@ -101,81 +109,91 @@ struct dpmcp_cfg { * Return: '0' on Success; Error code otherwise. */ int dpmcp_create(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, const struct dpmcp_cfg *cfg, - uint16_t *token); + uint16_t *token); /** * dpmcp_destroy() - Destroy the DPMCP object and release all its resources. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * * Return: '0' on Success; error code otherwise. */ -int dpmcp_destroy(struct fsl_mc_io *mc_io, uint16_t token); +int dpmcp_destroy(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token); /** * dpmcp_reset() - Reset the DPMCP, returns the object to initial state. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * * Return: '0' on Success; Error code otherwise. */ -int dpmcp_reset(struct fsl_mc_io *mc_io, uint16_t token); +int dpmcp_reset(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token); /* IRQ */ -/*! - * @name dpmcp IRQ Index and Events - */ +/* IRQ Index */ #define DPMCP_IRQ_INDEX 0 -/*!< Irq index */ +/* irq event - Indicates that the link state changed */ #define DPMCP_IRQ_EVENT_CMD_DONE 0x00000001 -/*!< irq event - Indicates that the link state changed */ -/* @} */ + +/** + * struct dpmcp_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 + */ +struct dpmcp_irq_cfg { + uint64_t paddr; + uint32_t val; + int user_irq_id; +}; /** * dpmcp_set_irq() - Set IRQ information for the DPMCP to trigger an interrupt. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: Identifies the interrupt index to configure - * @irq_addr: Address that must be written to - * signal a message-based interrupt - * @irq_val: Value to write into irq_addr address - * @user_irq_id: A user defined number associated with this IRQ + * @irq_cfg: IRQ configuration * * Return: '0' on Success; Error code otherwise. */ int dpmcp_set_irq(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint64_t irq_addr, - uint32_t irq_val, - int user_irq_id); + uint8_t irq_index, + struct dpmcp_irq_cfg *irq_cfg); /** * dpmcp_get_irq() - Get IRQ information from the DPMCP. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: The interrupt index to configure * @type: Interrupt type: 0 represents message interrupt - * type (both irq_addr and irq_val are valid) - * @irq_addr: Returned address that must be written to - * signal the message-based interrupt - * @irq_val: Value to write into irq_addr address - * @user_irq_id: A user defined number associated with this IRQ + * type (both irq_addr and irq_val are valid) + * @irq_cfg: IRQ attributes * * Return: '0' on Success; Error code otherwise. */ int dpmcp_get_irq(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - int *type, - uint64_t *irq_addr, - uint32_t *irq_val, - int *user_irq_id); + uint8_t irq_index, + int *type, + struct dpmcp_irq_cfg *irq_cfg); /** * dpmcp_set_irq_enable() - Set overall interrupt state. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: The interrupt index to configure * @en: Interrupt state - enable = 1, disable = 0 @@ -188,13 +206,15 @@ int dpmcp_get_irq(struct fsl_mc_io *mc_io, * Return: '0' on Success; Error code otherwise. */ int dpmcp_set_irq_enable(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint8_t en); + uint8_t irq_index, + uint8_t en); /** * dpmcp_get_irq_enable() - Get overall interrupt state * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: The interrupt index to configure * @en: Returned interrupt state - enable = 1, disable = 0 @@ -202,13 +222,15 @@ int dpmcp_set_irq_enable(struct fsl_mc_io *mc_io, * Return: '0' on Success; Error code otherwise. */ int dpmcp_get_irq_enable(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint8_t *en); + uint8_t irq_index, + uint8_t *en); /** * dpmcp_set_irq_mask() - Set interrupt mask. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: The interrupt index to configure * @mask: Event mask to trigger interrupt; @@ -221,14 +243,16 @@ int dpmcp_get_irq_enable(struct fsl_mc_io *mc_io, * * Return: '0' on Success; Error code otherwise. */ -int dpmcp_set_irq_mask(struct fsl_mc_io *mc_io, +int dpmcp_set_irq_mask(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t mask); + uint8_t irq_index, + uint32_t mask); /** * dpmcp_get_irq_mask() - Get interrupt mask. * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: The interrupt index to configure * @mask: Returned event mask to trigger interrupt @@ -238,15 +262,17 @@ int dpmcp_set_irq_mask(struct fsl_mc_io *mc_io, * * Return: '0' on Success; Error code otherwise. */ -int dpmcp_get_irq_mask(struct fsl_mc_io *mc_io, +int dpmcp_get_irq_mask(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t *mask); + uint8_t irq_index, + uint32_t *mask); /** * dpmcp_get_irq_status() - Get the current status of any pending interrupts. * * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: The interrupt index to configure * @status: Returned interrupts status - one bit per cause: @@ -256,14 +282,16 @@ int dpmcp_get_irq_mask(struct fsl_mc_io *mc_io, * Return: '0' on Success; Error code otherwise. */ int dpmcp_get_irq_status(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t *status); + uint8_t irq_index, + uint32_t *status); /** * dpmcp_clear_irq_status() - Clear a pending interrupt's status * * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @irq_index: The interrupt index to configure * @status: Bits to clear (W1C) - one bit per cause: @@ -273,9 +301,10 @@ int dpmcp_get_irq_status(struct fsl_mc_io *mc_io, * Return: '0' on Success; Error code otherwise. */ int dpmcp_clear_irq_status(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - uint8_t irq_index, - uint32_t status); + uint8_t irq_index, + uint32_t status); /** * struct dpmcp_attr - Structure representing DPMCP attributes @@ -299,13 +328,15 @@ struct dpmcp_attr { * dpmcp_get_attributes - Retrieve DPMCP attributes. * * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPMCP object * @attr: Returned object's attributes * * Return: '0' on Success; Error code otherwise. */ int dpmcp_get_attributes(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, uint16_t token, - struct dpmcp_attr *attr); + struct dpmcp_attr *attr); #endif /* __FSL_DPMCP_H */ diff --git a/drivers/staging/fsl-mc/bus/mc-allocator.c b/drivers/staging/fsl-mc/bus/mc-allocator.c index e36235d..376ce80 100644 --- a/drivers/staging/fsl-mc/bus/mc-allocator.c +++ b/drivers/staging/fsl-mc/bus/mc-allocator.c @@ -373,19 +373,19 @@ int fsl_mc_portal_reset(struct fsl_mc_io *mc_io) if (WARN_ON(!mc_dev)) return -EINVAL; - error = dpmcp_open(mc_io, mc_dev->obj_desc.id, &token); + error = dpmcp_open(mc_io, 0, mc_dev->obj_desc.id, &token); if (error < 0) { dev_err(&mc_dev->dev, "dpmcp_open() failed: %d\n", error); return error; } - error = dpmcp_reset(mc_io, token); + error = dpmcp_reset(mc_io, 0, token); if (error < 0) { dev_err(&mc_dev->dev, "dpmcp_reset() failed: %d\n", error); return error; } - error = dpmcp_close(mc_io, token); + error = dpmcp_close(mc_io, 0, token); if (error < 0) { dev_err(&mc_dev->dev, "dpmcp_close() failed: %d\n", error); return error; -- 2.3.3