[PATCH 3/9] bus: fsl-mc: dpio: add APIs for DPIO objects

Ruxandra Ioana Radulescu ruxandra.radulescu at nxp.com
Wed Nov 2 14:50:02 UTC 2016


> -----Original Message-----
> From: Stuart Yoder [mailto:stuart.yoder at nxp.com]
> Sent: Friday, October 21, 2016 5:02 PM
> To: gregkh at linuxfoundation.org
> Cc: German Rivera <german.rivera at nxp.com>; devel at driverdev.osuosl.org;
> linux-kernel at vger.kernel.org; agraf at suse.de; arnd at arndb.de; Leo Li
> <leoyang.li at nxp.com>; Ruxandra Ioana Radulescu
> <ruxandra.radulescu at nxp.com>; Roy Pledge <roy.pledge at nxp.com>; Stuart
> Yoder <stuart.yoder at nxp.com>
> Subject: [PATCH 3/9] bus: fsl-mc: dpio: add APIs for DPIO objects
> 
> From: Ioana Radulescu <ruxandra.radulescu at nxp.com>
> 
> Add the command build/parse APIs for operating on DPIO objects through
> the DPAA2 Management Complex.
> 
> Signed-off-by: Ioana Radulescu <ruxandra.radulescu at nxp.com>
> Signed-off-by: Roy Pledge <roy.pledge at nxp.com>
> Signed-off-by: Stuart Yoder <stuart.yoder at nxp.com>
> ---
>  drivers/bus/fsl-mc/Kconfig         |  10 ++
>  drivers/bus/fsl-mc/Makefile        |   3 +
>  drivers/bus/fsl-mc/dpio/Makefile   |   9 ++
>  drivers/bus/fsl-mc/dpio/dpio-cmd.h | 198
> ++++++++++++++++++++++++++++++++
>  drivers/bus/fsl-mc/dpio/dpio.c     | 229
> +++++++++++++++++++++++++++++++++++++
>  drivers/bus/fsl-mc/dpio/dpio.h     | 108 +++++++++++++++++
>  6 files changed, 557 insertions(+)
>  create mode 100644 drivers/bus/fsl-mc/dpio/Makefile
>  create mode 100644 drivers/bus/fsl-mc/dpio/dpio-cmd.h
>  create mode 100644 drivers/bus/fsl-mc/dpio/dpio.c
>  create mode 100644 drivers/bus/fsl-mc/dpio/dpio.h
> 
> diff --git a/drivers/bus/fsl-mc/Kconfig b/drivers/bus/fsl-mc/Kconfig
> index 5c009ab..a10aaf0 100644
> --- a/drivers/bus/fsl-mc/Kconfig
> +++ b/drivers/bus/fsl-mc/Kconfig
> @@ -15,3 +15,13 @@ config FSL_MC_BUS
>  	  architecture.  The fsl-mc bus driver handles discovery of
>  	  DPAA2 objects (which are represented as Linux devices) and
>  	  binding objects to drivers.
> +
> +config FSL_MC_DPIO
> +        tristate "QorIQ DPAA2 DPIO driver"
> +        depends on FSL_MC_BUS
> +        help
> +	  Driver for the DPAA2 DPIO object.  A DPIO provides queue and
> +	  buffer management facilities for software to interact with
> +	  other DPAA2 objects. This driver does not expose the DPIO
> +	  objects individually, but groups them under a service layer
> +	  API.
> diff --git a/drivers/bus/fsl-mc/Makefile b/drivers/bus/fsl-mc/Makefile
> index d56afee..d18df72 100644
> --- a/drivers/bus/fsl-mc/Makefile
> +++ b/drivers/bus/fsl-mc/Makefile
> @@ -17,3 +17,6 @@ mc-bus-driver-objs := fsl-mc-bus.o \
>  		      fsl-mc-msi.o \
>  		      dpmcp.o \
>  		      dpbp.o
> +
> +# MC DPIO driver
> +obj-$(CONFIG_FSL_MC_DPIO) += dpio/
> diff --git a/drivers/bus/fsl-mc/dpio/Makefile b/drivers/bus/fsl-
> mc/dpio/Makefile
> new file mode 100644
> index 0000000..128befc
> --- /dev/null
> +++ b/drivers/bus/fsl-mc/dpio/Makefile
> @@ -0,0 +1,9 @@
> +#
> +# QorIQ DPAA2 DPIO driver
> +#
> +
> +subdir-ccflags-y := -Werror
> +
> +obj-$(CONFIG_FSL_MC_DPIO) += fsl-mc-dpio.o
> +
> +fsl-mc-dpio-objs := dpio.o
> diff --git a/drivers/bus/fsl-mc/dpio/dpio-cmd.h b/drivers/bus/fsl-
> mc/dpio/dpio-cmd.h
> new file mode 100644
> index 0000000..b25a4cc
> --- /dev/null
> +++ b/drivers/bus/fsl-mc/dpio/dpio-cmd.h
> @@ -0,0 +1,198 @@
> +/*
> + * Copyright 2013-2016 Freescale Semiconductor Inc.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions are
> met:
> + * * Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * * Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * * Neither the name of the above-listed copyright holders nor the
> + * names of any contributors may be used to endorse or promote products
> + * derived from this software without specific prior written permission.
> + *
> + * ALTERNATIVELY, this software may be distributed under the terms of the
> + * GNU General Public License ("GPL") as published by the Free Software
> + * Foundation, either version 2 of that License or (at your option) any
> + * later version.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> CONTRIBUTORS "AS IS"
> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
> PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
> CONTRIBUTORS BE
> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
> OR
> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> PROCUREMENT OF
> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
> BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> WHETHER IN
> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
> OTHERWISE)
> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> ADVISED OF THE
> + * POSSIBILITY OF SUCH DAMAGE.
> + */
> +#ifndef _FSL_DPIO_CMD_H
> +#define _FSL_DPIO_CMD_H
> +
> +/* DPIO Version */
> +#define DPIO_VER_MAJOR			4
> +#define DPIO_VER_MINOR			2
> +
> +/* Command Versioning */
> +
> +#define DPIO_CMD_ID_OFFSET		4
> +#define DPIO_CMD_BASE_VERSION		1
> +
> +#define DPIO_CMD(id)	((id << DPIO_CMD_ID_OFFSET) |
> DPIO_CMD_BASE_VERSION)
> +
> +/* Command IDs */
> +#define DPIO_CMDID_CLOSE				DPIO_CMD(0x800)
> +#define DPIO_CMDID_OPEN
> 	DPIO_CMD(0x803)
> +#define DPIO_CMDID_CREATE
> 	DPIO_CMD(0x903)
> +#define DPIO_CMDID_DESTROY
> 	DPIO_CMD(0x983)
> +#define DPIO_CMDID_GET_API_VERSION
> 	DPIO_CMD(0xa03)
> +
> +#define DPIO_CMDID_ENABLE
> 	DPIO_CMD(0x002)
> +#define DPIO_CMDID_DISABLE
> 	DPIO_CMD(0x003)
> +#define DPIO_CMDID_GET_ATTR
> 	DPIO_CMD(0x004)
> +#define DPIO_CMDID_RESET				DPIO_CMD(0x005)
> +#define DPIO_CMDID_IS_ENABLED
> 	DPIO_CMD(0x006)
> +
> +#define DPIO_CMDID_SET_IRQ
> 	DPIO_CMD(0x010)
> +#define DPIO_CMDID_GET_IRQ
> 	DPIO_CMD(0x011)
> +#define DPIO_CMDID_SET_IRQ_ENABLE
> 	DPIO_CMD(0x012)
> +#define DPIO_CMDID_GET_IRQ_ENABLE
> 	DPIO_CMD(0x013)
> +#define DPIO_CMDID_SET_IRQ_MASK
> 	DPIO_CMD(0x014)
> +#define DPIO_CMDID_GET_IRQ_MASK
> 	DPIO_CMD(0x015)
> +#define DPIO_CMDID_GET_IRQ_STATUS
> 	DPIO_CMD(0x016)
> +#define DPIO_CMDID_CLEAR_IRQ_STATUS
> 	DPIO_CMD(0x017)
> +
> +#define DPIO_CMDID_SET_STASHING_DEST
> 	DPIO_CMD(0x120)
> +#define DPIO_CMDID_GET_STASHING_DEST
> 	DPIO_CMD(0x121)
> +#define DPIO_CMDID_ADD_STATIC_DEQUEUE_CHANNEL
> 	DPIO_CMD(0x122)
> +#define DPIO_CMDID_REMOVE_STATIC_DEQUEUE_CHANNEL
> 	DPIO_CMD(0x123)
> +
> +struct dpio_cmd_open {
> +	__le32 dpio_id;
> +};
> +
> +#define DPIO_CHANNEL_MODE_MASK		0x3
> +
> +struct dpio_cmd_create {
> +	__le16 pad0;
> +	u8 channel_mode;
> +	u8 pad1;
> +	u8 num_priorities;
> +
> +};
> +
> +#define DPIO_ENABLE			1
> +
> +struct dpio_rsp_is_enabled {
> +	u8 enabled;
> +};
> +
> +struct dpio_cmd_set_irq {
> +	/* cmd word 0 */
> +	u8 irq_index;
> +	u8 pad[3];
> +	__le32 irq_val;
> +	/* cmd word 1 */
> +	__le64 irq_addr;
> +	/* cmd word 2 */
> +	__le32 irq_num;
> +};
> +
> +struct dpio_cmd_get_irq {
> +	__le32 pad;
> +	u8 irq_index;
> +};
> +
> +struct dpio_rsp_get_irq {
> +	/* response word 0 */
> +	__le32 irq_val;
> +	__le32 pad;
> +	/* response word 1 */
> +	__le64 irq_addr;
> +	/* response word 2 */
> +	__le32 irq_num;
> +	__le32 type;
> +};
> +
> +struct dpio_cmd_set_irq_enable {
> +	u8 enable;
> +	u8 pad[3];
> +	u8 irq_index;
> +};
> +
> +struct dpio_cmd_get_irq_enable {
> +	__le32 pad;
> +	u8 irq_index;
> +};
> +
> +struct dpio_rsp_get_irq_enable {
> +	u8 enabled;
> +};
> +
> +struct dpio_cmd_set_irq_mask {
> +	__le32 mask;
> +	u8 irq_index;
> +};
> +
> +struct dpio_cmd_get_irq_mask {
> +	__le32 pad;
> +	u8 irq_index;
> +};
> +
> +struct dpio_rsp_get_irq_mask {
> +	__le32 mask;
> +};
> +
> +struct dpio_cmd_get_irq_status {
> +	__le32 status;
> +	u8 irq_index;
> +};
> +
> +struct dpio_rsp_get_irq_status {
> +	__le32 status;
> +};
> +
> +struct dpio_cmd_clear_irq_status {
> +	__le32 status;
> +	u8 irq_index;
> +};
> +
> +struct dpio_rsp_get_attr {
> +	/* cmd word 0 */
> +	__le32 id;
> +	__le16 qbman_portal_id;
> +	u8 num_priorities;
> +	u8 channel_mode;
> +	/* cmd word 1 */
> +	__le64 qbman_portal_ce_addr;
> +	/* cmd word 2 */
> +	__le64 qbman_portal_ci_addr;
> +	/* cmd word 3 */
> +	__le32 pad;
> +	__le32 qbman_version;
> +};
> +
> +struct dpio_cmd_set_stashing_dest {
> +	u8 sdest;
> +};
> +
> +struct dpio_rsp_get_stashing_dest {
> +	u8 sdest;
> +};
> +
> +struct dpio_cmd_add_static_dequeue_channel {
> +	__le32 dpcon_id;
> +};
> +
> +struct dpio_rsp_add_static_dequeue_channel {
> +	u8 channel_index;
> +};
> +
> +struct dpio_cmd_remove_static_dequeue_channel {
> +	__le32 dpcon_id;
> +};

Hi Stuart, looks like you removed unused API functions from dpio.h
and dpio.c, but not the structures and CMDID defines associated with
them, which are now dead code.

Thanks,
Ioana


More information about the devel mailing list