From: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Cc: dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org,
jeffrey.t.kirsher-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
jiri-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
gongyangming-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
xiaokun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
tangchaofei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
haifeng.wei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
yisen.zhuang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
yankejian-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
charles.chenxin-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
linuxarm-hv44wF8Li93QT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH v10 03/22] IB/hns: Add initial main frame driver and get cfg info
Date: Fri, 24 Jun 2016 14:48:31 +0300 [thread overview]
Message-ID: <20160624114831.GD23995@leon.nu> (raw)
In-Reply-To: <1466087730-54856-4-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 11191 bytes --]
On Thu, Jun 16, 2016 at 10:35:11PM +0800, Lijun Ou wrote:
> This patch mainly added the initial bare main driver. It
> could get the relative configure information of net node.
>
> Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
> Signed-off-by: Nenglong Zhao <zhaonenglong-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>
> Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
> ---
> PATCH v9:
> This fixes comments given by Leon Romanovsky over the PATCH v8:
> Link: https://lkml.org/lkml/2016/6/9/56
>
> PATCH v8/v7/v6:
> - No change over the PATCH v5
>
> PATCH v5:
> - The initial patch which was redesigned based on the second patch
> in PATCH v4
> ---
> ---
> drivers/infiniband/hw/hns/hns_roce_device.h | 73 ++++++++++
> drivers/infiniband/hw/hns/hns_roce_main.c | 200 ++++++++++++++++++++++++++++
> 2 files changed, 273 insertions(+)
> create mode 100644 drivers/infiniband/hw/hns/hns_roce_device.h
> create mode 100644 drivers/infiniband/hw/hns/hns_roce_main.c
>
> diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
> new file mode 100644
> index 0000000..946b470
> --- /dev/null
> +++ b/drivers/infiniband/hw/hns/hns_roce_device.h
> @@ -0,0 +1,73 @@
> +/*
> + * Copyright (c) 2016 Hisilicon Limited.
> + *
> + * This software is available to you under a choice of one of two
> + * licenses. You may choose to be licensed under the terms of the GNU
> + * General Public License (GPL) Version 2, available from the file
> + * COPYING in the main directory of this source tree, or the
> + * OpenIB.org BSD license below:
> + *
> + * 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.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + */
> +
> +#ifndef _HNS_ROCE_DEVICE_H
> +#define _HNS_ROCE_DEVICE_H
> +
> +#include <linux/platform_device.h>
> +#include <linux/radix-tree.h>
> +#include <linux/semaphore.h>
> +#include <rdma/ib_addr.h>
> +#include <rdma/ib_smi.h>
> +#include <rdma/ib_umem.h>
> +#include <rdma/ib_user_verbs.h>
> +#include <rdma/ib_verbs.h>
> +
> +#define DRV_NAME "hns_roce"
> +
> +#define HNS_ROCE_MAX_IRQ_NUM 34
> +#define HNS_ROCE_MAX_PORTS 6
> +
> +struct hns_roce_ib_iboe {
> + struct net_device *netdevs[HNS_ROCE_MAX_PORTS];
> + u8 phy_port[HNS_ROCE_MAX_PORTS];
> +};
> +
> +struct hns_roce_caps {
> + u8 num_ports;
> +};
> +
> +struct hns_roce_dev {
> + struct ib_device ib_dev;
> + struct platform_device *pdev;
> + const char *irq_names;
> + struct hns_roce_ib_iboe iboe;
> +
> + int irq[HNS_ROCE_MAX_IRQ_NUM];
> + u8 __iomem *reg_base;
> + struct hns_roce_caps caps;
> +
> + int cmd_mod;
> + int loop_idc;
> +};
> +
> +#endif /* _HNS_ROCE_DEVICE_H */
> diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
> new file mode 100644
> index 0000000..8924ce3
> --- /dev/null
> +++ b/drivers/infiniband/hw/hns/hns_roce_main.c
> @@ -0,0 +1,200 @@
> +/*
> + * Copyright (c) 2016 Hisilicon Limited.
> + * Copyright (c) 2007, 2008 Mellanox Technologies. All rights reserved.
> + *
> + * This software is available to you under a choice of one of two
> + * licenses. You may choose to be licensed under the terms of the GNU
> + * General Public License (GPL) Version 2, available from the file
> + * COPYING in the main directory of this source tree, or the
> + * OpenIB.org BSD license below:
> + *
> + * 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.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + */
> +
> +#include <linux/cdev.h>
> +#include <linux/delay.h>
> +#include <linux/device.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/ethtool.h>
> +#include <linux/etherdevice.h>
> +#include <linux/fs.h>
> +#include <linux/init.h>
> +#include <linux/interrupt.h>
> +#include <linux/kernel.h>
> +#include <linux/list.h>
> +#include <linux/module.h>
> +#include <linux/netdevice.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/of_net.h>
> +#include <linux/of_platform.h>
> +#include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <net/ipv6.h>
> +#include <net/addrconf.h>
> +#include <rdma/ib_addr.h>
> +#include <rdma/ib_smi.h>
> +#include <rdma/ib_umem.h>
> +#include <rdma/ib_user_verbs.h>
> +#include <rdma/ib_verbs.h>
> +#include "hns_roce_device.h"
Most of the headers are not needed here.
Please clean them.
> +
> +static int hns_roce_get_cfg(struct hns_roce_dev *hr_dev)
> +{
> + int i;
> + u8 phy_port;
> + int port_cnt = 0;
> + struct device *dev = &hr_dev->pdev->dev;
> + struct device_node *np = dev->of_node;
> + struct device_node *net_node;
> + struct net_device *netdev = NULL;
> + struct platform_device *pdev = NULL;
> + struct resource *res;
> +
> + if (!of_device_is_compatible(np, "hisilicon,hns-roce-v1")) {
> + dev_err(dev, "device no compatible!\n");
> + return -EINVAL;
> + }
> +
> + res = platform_get_resource(hr_dev->pdev, IORESOURCE_MEM, 0);
> + hr_dev->reg_base = devm_ioremap_resource(dev, res);
> + if (!hr_dev->reg_base)
> + return -ENOMEM;
> +
> + for (i = 0; i < HNS_ROCE_MAX_PORTS; i++) {
> + net_node = of_parse_phandle(np, "eth-handle", i);
> + if (net_node) {
> + pdev = of_find_device_by_node(net_node);
> + netdev = platform_get_drvdata(pdev);
> + phy_port = (u8)i;
> + if (netdev) {
> + hr_dev->iboe.netdevs[port_cnt] = netdev;
> + hr_dev->iboe.phy_port[port_cnt] = phy_port;
> + } else {
> + return -ENODEV;
> + }
> + port_cnt++;
> + }
> + }
Do you want to check port_cnt value, before continue?
> +
> + hr_dev->caps.num_ports = port_cnt;
> +
> + /* Cmd issue mode: 0 is poll, 1 is event */
> + hr_dev->cmd_mod = 1;
> + hr_dev->loop_idc = 0;
> +
> + for (i = 0; i < HNS_ROCE_MAX_IRQ_NUM; i++) {
> + hr_dev->irq[i] = platform_get_irq(hr_dev->pdev, i);
> + if (hr_dev->irq[i] <= 0) {
> + dev_err(dev, "Get No.%d irq resource failed!\n", i);
> + return -EINVAL;
> + }
> +
> + if (of_property_read_string_index(np, "interrupt-names", i,
> + &hr_dev->irq_names))
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +/**
> +* hns_roce_probe - RoCE driver entrance
> +* @pdev: pointer to platform device
> +* Return : int
> +*
> +*/
> +static int hns_roce_probe(struct platform_device *pdev)
> +{
> + int ret;
> + struct hns_roce_dev *hr_dev;
> + struct device *dev = &pdev->dev;
> +
> + hr_dev = (struct hns_roce_dev *)ib_alloc_device(sizeof(*hr_dev));
> + if (!hr_dev)
> + return -ENOMEM;
> +
> + memset((u8 *)hr_dev + sizeof(struct ib_device), 0,
> + sizeof(struct hns_roce_dev) - sizeof(struct ib_device));
> +
> + hr_dev->pdev = pdev;
> + platform_set_drvdata(pdev, hr_dev);
> +
> + if (!dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64ULL)))
> + dev_info(dev, "set mask to 64bit\n");
> + else if (!dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32ULL)))
> + dev_info(dev, "set mask to 32bit\n");
> + else {
> + dev_err(dev, "No usable DMA addressing mode\n");
Can you please use one style in your prints "set mask..." vs. "No usable
.."?
> + ret = -EIO;
> + goto error_failed_get_cfg;
> + }
> +
> + ret = hns_roce_get_cfg(hr_dev);
> + if (ret) {
> + dev_err(dev, "Get Configuration failed!\n");
> + goto error_failed_get_cfg;
> + }
> +
> +error_failed_get_cfg:
> + ib_dealloc_device(&hr_dev->ib_dev);
> +
> + return ret;
> +}
> +
> +/**
> +* hns_roce_remove - remove roce device
> +* @pdev: pointer to platform device
> +*/
> +static int hns_roce_remove(struct platform_device *pdev)
> +{
> + struct hns_roce_dev *hr_dev = platform_get_drvdata(pdev);
> +
> + ib_dealloc_device(&hr_dev->ib_dev);
> +
> + return 0;
> +}
> +
> +static const struct of_device_id hns_roce_of_match[] = {
> + { .compatible = "hisilicon,hns-roce-v1",},
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, hns_roce_of_match);
> +
> +static struct platform_driver hns_roce_driver = {
> + .probe = hns_roce_probe,
> + .remove = hns_roce_remove,
> + .driver = {
> + .name = DRV_NAME,
> + .of_match_table = hns_roce_of_match,
> + },
> +};
> +
> +module_platform_driver(hns_roce_driver);
> +
> +MODULE_LICENSE("GPL v2");
I'm not a lawyer and don't know if relicensing is possible, but original
code (mlx4) was licensed under GPL/BSD.
> +MODULE_AUTHOR("Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>");
> +MODULE_AUTHOR("Nenglong Zhao <zhaonenglong-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>");
> +MODULE_AUTHOR("Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>");
> +MODULE_DESCRIPTION("HISILICON RoCE driver");
> +MODULE_ALIAS("platform:" DRV_NAME);
Is this alias needed? Did you check it? Will it concatenate strings?
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Leon Romanovsky <leon@kernel.org>
To: Lijun Ou <oulijun@huawei.com>
Cc: dledford@redhat.com, sean.hefty@intel.com,
hal.rosenstock@gmail.com, davem@davemloft.net,
jeffrey.t.kirsher@intel.com, jiri@mellanox.com,
ogerlitz@mellanox.com, linux-rdma@vger.kernel.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
gongyangming@huawei.com, xiaokun@huawei.com,
tangchaofei@huawei.com, haifeng.wei@huawei.com,
yisen.zhuang@huawei.com, yankejian@huawei.com,
charles.chenxin@huawei.com, linuxarm@huawei.com
Subject: Re: [PATCH v10 03/22] IB/hns: Add initial main frame driver and get cfg info
Date: Fri, 24 Jun 2016 14:48:31 +0300 [thread overview]
Message-ID: <20160624114831.GD23995@leon.nu> (raw)
In-Reply-To: <1466087730-54856-4-git-send-email-oulijun@huawei.com>
[-- Attachment #1: Type: text/plain, Size: 10999 bytes --]
On Thu, Jun 16, 2016 at 10:35:11PM +0800, Lijun Ou wrote:
> This patch mainly added the initial bare main driver. It
> could get the relative configure information of net node.
>
> Signed-off-by: Wei Hu <xavier.huwei@huawei.com>
> Signed-off-by: Nenglong Zhao <zhaonenglong@hisilicon.com>
> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> ---
> PATCH v9:
> This fixes comments given by Leon Romanovsky over the PATCH v8:
> Link: https://lkml.org/lkml/2016/6/9/56
>
> PATCH v8/v7/v6:
> - No change over the PATCH v5
>
> PATCH v5:
> - The initial patch which was redesigned based on the second patch
> in PATCH v4
> ---
> ---
> drivers/infiniband/hw/hns/hns_roce_device.h | 73 ++++++++++
> drivers/infiniband/hw/hns/hns_roce_main.c | 200 ++++++++++++++++++++++++++++
> 2 files changed, 273 insertions(+)
> create mode 100644 drivers/infiniband/hw/hns/hns_roce_device.h
> create mode 100644 drivers/infiniband/hw/hns/hns_roce_main.c
>
> diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
> new file mode 100644
> index 0000000..946b470
> --- /dev/null
> +++ b/drivers/infiniband/hw/hns/hns_roce_device.h
> @@ -0,0 +1,73 @@
> +/*
> + * Copyright (c) 2016 Hisilicon Limited.
> + *
> + * This software is available to you under a choice of one of two
> + * licenses. You may choose to be licensed under the terms of the GNU
> + * General Public License (GPL) Version 2, available from the file
> + * COPYING in the main directory of this source tree, or the
> + * OpenIB.org BSD license below:
> + *
> + * 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.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + */
> +
> +#ifndef _HNS_ROCE_DEVICE_H
> +#define _HNS_ROCE_DEVICE_H
> +
> +#include <linux/platform_device.h>
> +#include <linux/radix-tree.h>
> +#include <linux/semaphore.h>
> +#include <rdma/ib_addr.h>
> +#include <rdma/ib_smi.h>
> +#include <rdma/ib_umem.h>
> +#include <rdma/ib_user_verbs.h>
> +#include <rdma/ib_verbs.h>
> +
> +#define DRV_NAME "hns_roce"
> +
> +#define HNS_ROCE_MAX_IRQ_NUM 34
> +#define HNS_ROCE_MAX_PORTS 6
> +
> +struct hns_roce_ib_iboe {
> + struct net_device *netdevs[HNS_ROCE_MAX_PORTS];
> + u8 phy_port[HNS_ROCE_MAX_PORTS];
> +};
> +
> +struct hns_roce_caps {
> + u8 num_ports;
> +};
> +
> +struct hns_roce_dev {
> + struct ib_device ib_dev;
> + struct platform_device *pdev;
> + const char *irq_names;
> + struct hns_roce_ib_iboe iboe;
> +
> + int irq[HNS_ROCE_MAX_IRQ_NUM];
> + u8 __iomem *reg_base;
> + struct hns_roce_caps caps;
> +
> + int cmd_mod;
> + int loop_idc;
> +};
> +
> +#endif /* _HNS_ROCE_DEVICE_H */
> diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
> new file mode 100644
> index 0000000..8924ce3
> --- /dev/null
> +++ b/drivers/infiniband/hw/hns/hns_roce_main.c
> @@ -0,0 +1,200 @@
> +/*
> + * Copyright (c) 2016 Hisilicon Limited.
> + * Copyright (c) 2007, 2008 Mellanox Technologies. All rights reserved.
> + *
> + * This software is available to you under a choice of one of two
> + * licenses. You may choose to be licensed under the terms of the GNU
> + * General Public License (GPL) Version 2, available from the file
> + * COPYING in the main directory of this source tree, or the
> + * OpenIB.org BSD license below:
> + *
> + * 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.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + */
> +
> +#include <linux/cdev.h>
> +#include <linux/delay.h>
> +#include <linux/device.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/ethtool.h>
> +#include <linux/etherdevice.h>
> +#include <linux/fs.h>
> +#include <linux/init.h>
> +#include <linux/interrupt.h>
> +#include <linux/kernel.h>
> +#include <linux/list.h>
> +#include <linux/module.h>
> +#include <linux/netdevice.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/of_net.h>
> +#include <linux/of_platform.h>
> +#include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <net/ipv6.h>
> +#include <net/addrconf.h>
> +#include <rdma/ib_addr.h>
> +#include <rdma/ib_smi.h>
> +#include <rdma/ib_umem.h>
> +#include <rdma/ib_user_verbs.h>
> +#include <rdma/ib_verbs.h>
> +#include "hns_roce_device.h"
Most of the headers are not needed here.
Please clean them.
> +
> +static int hns_roce_get_cfg(struct hns_roce_dev *hr_dev)
> +{
> + int i;
> + u8 phy_port;
> + int port_cnt = 0;
> + struct device *dev = &hr_dev->pdev->dev;
> + struct device_node *np = dev->of_node;
> + struct device_node *net_node;
> + struct net_device *netdev = NULL;
> + struct platform_device *pdev = NULL;
> + struct resource *res;
> +
> + if (!of_device_is_compatible(np, "hisilicon,hns-roce-v1")) {
> + dev_err(dev, "device no compatible!\n");
> + return -EINVAL;
> + }
> +
> + res = platform_get_resource(hr_dev->pdev, IORESOURCE_MEM, 0);
> + hr_dev->reg_base = devm_ioremap_resource(dev, res);
> + if (!hr_dev->reg_base)
> + return -ENOMEM;
> +
> + for (i = 0; i < HNS_ROCE_MAX_PORTS; i++) {
> + net_node = of_parse_phandle(np, "eth-handle", i);
> + if (net_node) {
> + pdev = of_find_device_by_node(net_node);
> + netdev = platform_get_drvdata(pdev);
> + phy_port = (u8)i;
> + if (netdev) {
> + hr_dev->iboe.netdevs[port_cnt] = netdev;
> + hr_dev->iboe.phy_port[port_cnt] = phy_port;
> + } else {
> + return -ENODEV;
> + }
> + port_cnt++;
> + }
> + }
Do you want to check port_cnt value, before continue?
> +
> + hr_dev->caps.num_ports = port_cnt;
> +
> + /* Cmd issue mode: 0 is poll, 1 is event */
> + hr_dev->cmd_mod = 1;
> + hr_dev->loop_idc = 0;
> +
> + for (i = 0; i < HNS_ROCE_MAX_IRQ_NUM; i++) {
> + hr_dev->irq[i] = platform_get_irq(hr_dev->pdev, i);
> + if (hr_dev->irq[i] <= 0) {
> + dev_err(dev, "Get No.%d irq resource failed!\n", i);
> + return -EINVAL;
> + }
> +
> + if (of_property_read_string_index(np, "interrupt-names", i,
> + &hr_dev->irq_names))
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +/**
> +* hns_roce_probe - RoCE driver entrance
> +* @pdev: pointer to platform device
> +* Return : int
> +*
> +*/
> +static int hns_roce_probe(struct platform_device *pdev)
> +{
> + int ret;
> + struct hns_roce_dev *hr_dev;
> + struct device *dev = &pdev->dev;
> +
> + hr_dev = (struct hns_roce_dev *)ib_alloc_device(sizeof(*hr_dev));
> + if (!hr_dev)
> + return -ENOMEM;
> +
> + memset((u8 *)hr_dev + sizeof(struct ib_device), 0,
> + sizeof(struct hns_roce_dev) - sizeof(struct ib_device));
> +
> + hr_dev->pdev = pdev;
> + platform_set_drvdata(pdev, hr_dev);
> +
> + if (!dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64ULL)))
> + dev_info(dev, "set mask to 64bit\n");
> + else if (!dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32ULL)))
> + dev_info(dev, "set mask to 32bit\n");
> + else {
> + dev_err(dev, "No usable DMA addressing mode\n");
Can you please use one style in your prints "set mask..." vs. "No usable
.."?
> + ret = -EIO;
> + goto error_failed_get_cfg;
> + }
> +
> + ret = hns_roce_get_cfg(hr_dev);
> + if (ret) {
> + dev_err(dev, "Get Configuration failed!\n");
> + goto error_failed_get_cfg;
> + }
> +
> +error_failed_get_cfg:
> + ib_dealloc_device(&hr_dev->ib_dev);
> +
> + return ret;
> +}
> +
> +/**
> +* hns_roce_remove - remove roce device
> +* @pdev: pointer to platform device
> +*/
> +static int hns_roce_remove(struct platform_device *pdev)
> +{
> + struct hns_roce_dev *hr_dev = platform_get_drvdata(pdev);
> +
> + ib_dealloc_device(&hr_dev->ib_dev);
> +
> + return 0;
> +}
> +
> +static const struct of_device_id hns_roce_of_match[] = {
> + { .compatible = "hisilicon,hns-roce-v1",},
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, hns_roce_of_match);
> +
> +static struct platform_driver hns_roce_driver = {
> + .probe = hns_roce_probe,
> + .remove = hns_roce_remove,
> + .driver = {
> + .name = DRV_NAME,
> + .of_match_table = hns_roce_of_match,
> + },
> +};
> +
> +module_platform_driver(hns_roce_driver);
> +
> +MODULE_LICENSE("GPL v2");
I'm not a lawyer and don't know if relicensing is possible, but original
code (mlx4) was licensed under GPL/BSD.
> +MODULE_AUTHOR("Wei Hu <xavier.huwei@huawei.com>");
> +MODULE_AUTHOR("Nenglong Zhao <zhaonenglong@hisilicon.com>");
> +MODULE_AUTHOR("Lijun Ou <oulijun@huawei.com>");
> +MODULE_DESCRIPTION("HISILICON RoCE driver");
> +MODULE_ALIAS("platform:" DRV_NAME);
Is this alias needed? Did you check it? Will it concatenate strings?
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-06-24 11:48 UTC|newest]
Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-16 14:35 [PATCH v10 00/22] Add HiSilicon RoCE driver Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 01/22] net: hns: Add reset function support for " Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-24 11:49 ` Leon Romanovsky
2016-06-27 6:41 ` oulijun
2016-06-27 6:41 ` oulijun
2016-06-16 14:35 ` [PATCH v10 02/22] devicetree: bindings: IB: Add binding document for HiSilicon RoCE Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 04/22] IB/hns: Add RoCE engine reset function Lijun Ou
2016-06-16 14:35 ` Lijun Ou
[not found] ` <1466087730-54856-5-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-24 14:59 ` Leon Romanovsky
2016-06-24 14:59 ` Leon Romanovsky
[not found] ` <576E5C21.5030904@huawei.com>
2016-06-27 8:01 ` Leon Romanovsky
[not found] ` <20160627080122.GA3584-2ukJVAZIZ/Y@public.gmane.org>
2016-06-27 8:31 ` oulijun
2016-06-27 8:31 ` oulijun
2016-06-27 8:31 ` oulijun
[not found] ` <5770E465.1070702-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-28 6:31 ` Wei Hu (Xavier)
2016-06-28 6:31 ` Wei Hu (Xavier)
2016-06-28 6:31 ` Wei Hu (Xavier)
[not found] ` <577219CD.2000604-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-28 8:09 ` Leon Romanovsky
2016-06-28 8:09 ` Leon Romanovsky
2016-06-16 14:35 ` [PATCH v10 05/22] IB/hns: Add initial profile resource Lijun Ou
2016-06-16 14:35 ` Lijun Ou
[not found] ` <1466087730-54856-6-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-24 15:10 ` Leon Romanovsky
2016-06-24 15:10 ` Leon Romanovsky
[not found] ` <20160624151048.GF23995-2ukJVAZIZ/Y@public.gmane.org>
2016-06-28 6:56 ` oulijun
2016-06-28 6:56 ` oulijun
2016-06-28 6:56 ` oulijun
[not found] ` <1466087730-54856-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-16 14:35 ` [PATCH v10 03/22] IB/hns: Add initial main frame driver and get cfg info Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` Lijun Ou
[not found] ` <1466087730-54856-4-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-24 11:48 ` Leon Romanovsky [this message]
2016-06-24 11:48 ` Leon Romanovsky
[not found] ` <576E5D0B.7010003@huawei.com>
[not found] ` <576E5D0B.7010003-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-27 7:00 ` Leon Romanovsky
2016-06-27 7:00 ` Leon Romanovsky
[not found] ` <20160627070054.GK23995-2ukJVAZIZ/Y@public.gmane.org>
2016-06-27 7:29 ` Wei Hu (Xavier)
2016-06-27 7:29 ` Wei Hu (Xavier)
2016-06-27 7:29 ` Wei Hu (Xavier)
2016-06-16 14:35 ` [PATCH v10 06/22] IB/hns: Add initial cmd operation Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` Lijun Ou
[not found] ` <1466087730-54856-7-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-20 13:33 ` Leon Romanovsky
2016-06-20 13:33 ` Leon Romanovsky
2016-06-21 10:50 ` Wei Hu (Xavier)
2016-06-21 10:50 ` Wei Hu (Xavier)
2016-06-21 11:28 ` Leon Romanovsky
2016-06-21 13:01 ` Wei Hu (Xavier)
2016-06-21 13:01 ` Wei Hu (Xavier)
2016-06-22 4:54 ` Leon Romanovsky
2016-06-22 6:50 ` Wei Hu (Xavier)
2016-06-22 6:50 ` Wei Hu (Xavier)
[not found] ` <576A352F.8000700-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-22 7:28 ` Leon Romanovsky
[not found] ` <20160622072845.GE9762-2ukJVAZIZ/Y@public.gmane.org>
2016-06-22 7:33 ` Wei Hu (Xavier)
[not found] ` <576A3F49.6040305-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-22 7:41 ` Leon Romanovsky
[not found] ` <20160622074108.GF9762-2ukJVAZIZ/Y@public.gmane.org>
2016-06-22 7:48 ` Wei Hu (Xavier)
2016-06-16 14:35 ` [PATCH v10 12/22] IB/hns: Set mtu and gid support Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 14/22] IB/hns: Add operations support for IB device and port Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 22/22] MAINTAINERS: Add maintainers for HiSilicon RoCE driver Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-24 15:55 ` [PATCH v10 00/22] Add " Leon Romanovsky
2016-06-24 15:55 ` Leon Romanovsky
2016-06-16 14:35 ` [PATCH v10 07/22] IB/hns: Add event queue support Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-24 15:46 ` Leon Romanovsky
[not found] ` <20160624154643.GG23995-2ukJVAZIZ/Y@public.gmane.org>
2016-06-24 15:56 ` Doug Ledford
2016-06-24 15:56 ` Doug Ledford
2016-06-29 8:53 ` oulijun
2016-06-29 8:53 ` oulijun
2016-06-29 8:53 ` oulijun
2016-06-29 10:41 ` Leon Romanovsky
2016-06-16 14:35 ` [PATCH v10 08/22] IB/hns: Add icm support Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-17 9:58 ` Leon Romanovsky
[not found] ` <57677314.70909@huawei.com>
[not found] ` <57677314.70909-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-20 6:06 ` Leon Romanovsky
2016-06-20 6:06 ` Leon Romanovsky
[not found] ` <20160620060614.GC1172-2ukJVAZIZ/Y@public.gmane.org>
2016-06-20 7:49 ` Wei Hu (Xavier)
2016-06-20 7:49 ` Wei Hu (Xavier)
2016-06-20 7:49 ` Wei Hu (Xavier)
2016-06-20 9:27 ` Leon Romanovsky
[not found] ` <20160620092719.GE1172-2ukJVAZIZ/Y@public.gmane.org>
2016-06-20 9:48 ` Wei Hu (Xavier)
2016-06-20 9:48 ` Wei Hu (Xavier)
2016-06-20 9:48 ` Wei Hu (Xavier)
[not found] ` <5767BBDF.6010309-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-20 13:04 ` Leon Romanovsky
2016-06-20 13:04 ` Leon Romanovsky
[not found] ` <20160620130422.GA4526-2ukJVAZIZ/Y@public.gmane.org>
2016-06-21 4:37 ` Wei Hu (Xavier)
2016-06-21 4:37 ` Wei Hu (Xavier)
2016-06-21 4:37 ` Wei Hu (Xavier)
[not found] ` <5768C493.6000300-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-21 11:55 ` Leon Romanovsky
2016-06-21 11:55 ` Leon Romanovsky
2016-06-22 3:53 ` Wei Hu (Xavier)
2016-06-22 3:53 ` Wei Hu (Xavier)
[not found] ` <576A0BAD.1070803-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-22 5:27 ` Leon Romanovsky
2016-06-16 14:35 ` [PATCH v10 09/22] IB/hns: Add hca support Lijun Ou
2016-06-16 14:35 ` Lijun Ou
[not found] ` <1466087730-54856-10-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-06-24 15:50 ` Leon Romanovsky
2016-06-24 15:50 ` Leon Romanovsky
2016-06-16 14:35 ` [PATCH v10 10/22] IB/hns: Add process flow to init RoCE engine Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 11/22] IB/hns: Add IB device registration Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 13/22] IB/hns: Add interface of the protocol stack registration Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 15/22] IB/hns: Add PD operations support Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 16/22] IB/hns: Add ah " Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 17/22] IB/hns: Add QP " Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 18/22] IB/hns: Add CQ " Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 19/22] IB/hns: Add memory region " Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 20/22] IB/hns: Add operation for getting immutable port Lijun Ou
2016-06-16 14:35 ` Lijun Ou
2016-06-16 14:35 ` [PATCH v10 21/22] IB/hns: Kconfig and Makefile for RoCE module Lijun Ou
2016-06-16 14:35 ` Lijun Ou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160624114831.GD23995@leon.nu \
--to=leon-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=charles.chenxin-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org \
--cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=gongyangming-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=haifeng.wei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=jeffrey.t.kirsher-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=jiri-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linuxarm-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=tangchaofei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=xiaokun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=yankejian-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=yisen.zhuang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.