From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EADADC77B7D for ; Wed, 10 May 2023 10:10:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236264AbjEJKKn (ORCPT ); Wed, 10 May 2023 06:10:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235881AbjEJKKm (ORCPT ); Wed, 10 May 2023 06:10:42 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C3D59CC for ; Wed, 10 May 2023 03:10:40 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-50bc25f0c7dso12924952a12.3 for ; Wed, 10 May 2023 03:10:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683713439; x=1686305439; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=A+6oHru7C70uRBlUD0hl5QSN+B+mjxZ6Dk4I39zF6EI=; b=sUmAeBWpzb3WDh9zH4niy04bUeH+g0ngakgbEfHiKmbsrs3voOBKmVGLtwaV1UDz/w 5VxEi0oJeAMlc/NIRoGrEu413p9xtc6vGQsYphalKVAoLM1QOoTA64Rg/QiRbGOiI4Ue Sgu4lBsUrhuHXw+yKvVml3I+1X1M9mUyW3HXR5lmnCMDDEbzx2kFkIJQixHdsZUnkJUT xaan/KNxSPIIvyk/TSnXhE3qNGV2JHEOL20B/aKkgR7F95zX1VWnUSSV656DQdAfg2gd pdw1LSM9fWMYsqpgw/ZeUs/1hhb0NYoIIJ8/5YDZ/f1odxe0MB8FctM32Wii6UGGIuVk 63Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683713439; x=1686305439; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=A+6oHru7C70uRBlUD0hl5QSN+B+mjxZ6Dk4I39zF6EI=; b=h5lpG7VA0cCPmIXK4WjKnqlBtWZQFBFmFLhQ7HC200TTWzWp/vN/AKTCLfGPjQIypU t7ZFddRswRKx741KScl6YEHMGsYfBpCB0nPMLPsXy/I/T4en+Vn+UH6BQzdH7ClyUpVe endhnpwmfqx5hkpshSfF+obCE11d4Oq+J+QF4KzQzq+W919iUBty44wACMrqBJ72JlRp c+r80QqVFujOizk+Jl77pgSkOGpyjgG+/o9y1Y205hdml7ZBIjTqc2On6HOFB/28+eOC uNRIFJhzi+0uuiKjEwxuEvtjMwOtlUr+K26O29wj6LnjcTgxpH/YoPRsdBpk4QRBCl+c AWhg== X-Gm-Message-State: AC+VfDz3hpS1p6ge3ve43IFq6YpLmOutFNcyX3kN1jTBFbnrl1pQwVl7 xMx2pWDsYR2TI8QSTbr7enB/rg== X-Google-Smtp-Source: ACHHUZ59S3F8tS4Fb8+6T/WWQrM0r38Q4aXeTYbnbUuCE1kf9BaB9hkpLvkXrFNpewQE0GQOjz5xrg== X-Received: by 2002:a17:907:1687:b0:958:cc8:bd55 with SMTP id hc7-20020a170907168700b009580cc8bd55mr16959522ejc.0.1683713439248; Wed, 10 May 2023 03:10:39 -0700 (PDT) Received: from ?IPV6:2a02:810d:15c0:828:c175:a0f9:6928:8c9d? ([2a02:810d:15c0:828:c175:a0f9:6928:8c9d]) by smtp.gmail.com with ESMTPSA id s3-20020a170906bc4300b0095fde299e83sm2438459ejv.214.2023.05.10.03.10.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 10 May 2023 03:10:38 -0700 (PDT) Message-ID: Date: Wed, 10 May 2023 12:10:37 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH net-next V3 3/3] net: axienet: Introduce dmaengine support Content-Language: en-US To: Sarath Babu Naidu Gaddam , davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org Cc: linux@armlinux.org.uk, michal.simek@amd.com, radhey.shyam.pandey@amd.com, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, anirudha.sarangi@amd.com, harini.katakam@amd.com, git@amd.com References: <20230510085031.1116327-1-sarath.babu.naidu.gaddam@amd.com> <20230510085031.1116327-4-sarath.babu.naidu.gaddam@amd.com> From: Krzysztof Kozlowski In-Reply-To: <20230510085031.1116327-4-sarath.babu.naidu.gaddam@amd.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org On 10/05/2023 10:50, Sarath Babu Naidu Gaddam wrote: > Add dmaengine framework to communicate with the xilinx DMAengine > driver(AXIDMA). > > Axi ethernet driver uses separate channels for transmit and receive. > Add support for these channels to handle TX and RX with skb and > appropriate callbacks. Also add axi ethernet core interrupt for > +/** > + * axienet_setup_dma_chan - request the dma channels. > + * @ndev: Pointer to net_device structure > + * > + * Return: 0, on success. > + * non-zero error value on failure > + * > + * This function requests the TX and RX channels. It also submits the > + * allocated skb buffers and call back APIs to dmaengine. > + * > + */ > +static int axienet_setup_dma_chan(struct net_device *ndev) > +{ > + struct axienet_local *lp = netdev_priv(ndev); > + int i, ret; > + > + lp->tx_chan = dma_request_chan(lp->dev, "tx_chan0"); > + if (IS_ERR(lp->tx_chan)) { > + ret = PTR_ERR(lp->tx_chan); > + if (ret != -EPROBE_DEFER) > + netdev_err(ndev, "No Ethernet DMA (TX) channel found\n"); dev_err_probe seems suitable here. > + return ret; > + } > + > + lp->rx_chan = dma_request_chan(lp->dev, "rx_chan0"); > + if (IS_ERR(lp->rx_chan)) { > + ret = PTR_ERR(lp->rx_chan); > + if (ret != -EPROBE_DEFER) > + netdev_err(ndev, "No Ethernet DMA (RX) channel found\n"); dev_err_probe > + goto err_dma_request_rx; > + } > + lp->skb_cache = kmem_cache_create("ethernet", sizeof(struct axi_skbuff), > + 0, 0, NULL); > + if (!lp->skb_cache) { > + ret = -ENOMEM; > + goto err_kmem; > + } > + /* TODO: Instead of BD_NUM_DEFAULT use runtime support*/ > + for (i = 0; i < RX_BUF_NUM_DEFAULT; i++) > + axienet_rx_submit_desc(ndev); > + dma_async_issue_pending(lp->rx_chan); > + > + return 0; > +err_kmem: > + dma_release_channel(lp->rx_chan); > +err_dma_request_rx: > + dma_release_channel(lp->tx_chan); > + return ret; > +} > + > +/** > + * axienet_init_dmaengine - init the dmaengine code. > + * @ndev: Pointer to net_device structure > + * > + * Return: 0, on success. > + * non-zero error value on failure > + * > + * This is the dmaengine initialization code. > + */ > +static inline int axienet_init_dmaengine(struct net_device *ndev) > +{ > + int ret; > + > + ret = axienet_setup_dma_chan(ndev); > + > + if (ret < 0) > + return ret; > + > + return 0; > +} > + > /** > * axienet_init_legacy_dma - init the dma legacy code. > * @ndev: Pointer to net_device structure > @@ -1239,7 +1520,20 @@ static int axienet_open(struct net_device *ndev) > > phylink_start(lp->phylink); > > - if (!AXIENET_USE_DMA(lp)) { > + if (AXIENET_USE_DMA(lp)) { > + ret = axienet_init_dmaengine(ndev); > + if (ret < 0) > + goto error_code; > + > + /* Enable interrupts for Axi Ethernet core (if defined) */ > + if (lp->eth_irq > 0) { > + ret = request_irq(lp->eth_irq, axienet_eth_irq, IRQF_SHARED, > + ndev->name, ndev); > + if (ret) > + goto error_code; > + } > + > + } else { > ret = axienet_init_legacy_dma(ndev); > if (ret) > goto error_code; > @@ -1287,6 +1581,12 @@ static int axienet_stop(struct net_device *ndev) > free_irq(lp->tx_irq, ndev); > free_irq(lp->rx_irq, ndev); > axienet_dma_bd_release(ndev); > + } else { > + dmaengine_terminate_all(lp->tx_chan); > + dmaengine_terminate_all(lp->rx_chan); > + > + dma_release_channel(lp->rx_chan); > + dma_release_channel(lp->tx_chan); > } > > axienet_iow(lp, XAE_IE_OFFSET, 0); > @@ -2136,6 +2436,33 @@ static int axienet_probe(struct platform_device *pdev) > } > netif_napi_add(ndev, &lp->napi_rx, axienet_rx_poll); > netif_napi_add(ndev, &lp->napi_tx, axienet_tx_poll); > + } else { > + struct xilinx_vdma_config cfg; > + struct dma_chan *tx_chan; > + > + lp->eth_irq = platform_get_irq_optional(pdev, 0); > + tx_chan = dma_request_chan(lp->dev, "tx_chan0"); > + > + if (IS_ERR(tx_chan)) { > + ret = PTR_ERR(tx_chan); > + if (ret != -EPROBE_DEFER) > + dev_err(&pdev->dev, "No Ethernet DMA (TX) channel found\n"); dev_err_probe Best regards, Krzysztof