[PATCH v3 4/6] uio: Add X-Gene QMTM UIO driver

Ankit Jindal ankit.jindal at linaro.org
Mon Oct 20 23:23:54 PDT 2014


On 21 October 2014 11:47, Varka Bhadram <varkabhadram at gmail.com> wrote:
> On 10/21/2014 11:46 AM, Ankit Jindal wrote:
>>
>> On 21 October 2014 11:34, Varka Bhadram <varkabhadram at gmail.com> wrote:
>>>
>>> On 10/21/2014 11:26 AM, Ankit Jindal wrote:
>>>>
>>>> The Applied Micro X-Gene SOC has on-chip QMTM (Queue manager
>>>> and Traffic manager) which is hardware based Queue or Ring
>>>> manager. This QMTM device can be used in conjunction with
>>>> other devices such as DMA Engine, Ethernet, Security Engine,
>>>> etc to assign work based on queues or rings.
>>>>
>>>> This patch allows user space access to X-Gene QMTM device.
>>>>
>>>> Signed-off-by: Ankit Jindal <ankit.jindal at linaro.org>
>>>> Signed-off-by: Tushar Jagad <tushar.jagad at linaro.org>
>>>
>>>
>>> (...)
>>>
>>>
>>>> +
>>>> +static int qmtm_probe(struct platform_device *pdev)
>>>> +{
>>>> +       struct uio_info *info;
>>>> +       struct uio_qmtm_dev *qmtm_dev;
>>>> +       struct resource *csr;
>>>> +       struct resource *fabric;
>>>> +       struct resource qpool;
>>>> +       unsigned int num_queues;
>>>> +       unsigned int devid;
>>>> +       phandle qpool_phandle;
>>>> +       struct device_node *qpool_node;
>>>> +       int ret;
>>>> +
>>>> +       qmtm_dev = devm_kzalloc(&pdev->dev, sizeof(struct uio_qmtm_dev),
>>>> +                               GFP_KERNEL);
>>>> +       if (!qmtm_dev)
>>>> +               return -ENOMEM;
>>>> +
>>>> +       qmtm_dev->info = devm_kzalloc(&pdev->dev, sizeof(*info),
>>>> GFP_KERNEL);
>>>> +       if (!qmtm_dev->info)
>>>> +               return -ENOMEM;
>>>> +
>>>> +       /* Power on qmtm in case its not done as part of boot-loader */
>>>> +       qmtm_dev->qmtm_clk = devm_clk_get(&pdev->dev, NULL);
>>>> +       if (IS_ERR(qmtm_dev->qmtm_clk)) {
>>>> +               dev_err(&pdev->dev, "Failed to get clock\n");
>>>> +               ret = PTR_ERR(qmtm_dev->qmtm_clk);
>>>> +               return ret;
>>>> +       }
>>>> +
>>>> +       csr = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>>>> +       if (!csr) {
>>>> +               ret = -ENODEV;
>>>> +               dev_err(&pdev->dev, "No QMTM CSR resource specified\n");
>>>> +               goto out_err;
>>>> +       }
>>>> +
>>>
>>>
>>> This error check is not required. *csr* is checked in
>>> devm_ioremap_resource().
>>
>> I think its better to do sanity check before calling any function.
>
>
> It will be the duplication of code for sanity check. This sanity check is
> happening
> with devm_ioremap_resource(). No need to check it explicitly.

Okie, will remove it in next revision.

>
>>>> +       if (!csr->start) {
>>>> +               ret = -EINVAL;
>>>> +               dev_err(&pdev->dev, "Invalid CSR resource\n");
>>>> +               goto out_err;
>>>> +       }
>>>> +
>>>> +       fabric = platform_get_resource(pdev, IORESOURCE_MEM, 1);
>>>> +       if (!fabric) {
>>>> +               ret = -ENODEV;
>>>> +               dev_err(&pdev->dev, "No QMTM Fabric resource
>>>> specified\n");
>>>> +               goto out_err;
>>>> +       }
>>>> +
>>>
>>>
>>> same
>>
>> We do not ioremap this address.
>
>
> Ok..
>
> --
> Regards,
> Varka Bhadram.
>
Thanks,
Ankit



More information about the linux-arm-kernel mailing list