CC: [email protected] BCC: [email protected] CC: [email protected] TO: Saurabh Sengar <[email protected]> CC: Michal Simek <[email protected]> CC: Appana Durga Kedareswara Rao <[email protected]> CC: Radhey Shyam Pandey <[email protected]> CC: Sarath Babu Naidu Gaddam <[email protected]> CC: Swati Agarwal <[email protected]>
tree: https://github.com/Xilinx/linux-xlnx xlnx_rebase_v5.15_LTS head: ea33365bd1a8cf667a122498e8f551df05609f92 commit: ee94241b2118ddd38a456b2b805fc584b57de58f [225/1039] net: axienet: added multichannel DMA support :::::: branch date: 4 days ago :::::: commit date: 8 weeks ago config: x86_64-randconfig-m001-20220328 (https://download.01.org/0day-ci/archive/20220329/[email protected]/config) compiler: gcc-9 (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: drivers/net/ethernet/xilinx/xilinx_axienet_main.c:3050 axienet_probe() warn: missing error code 'ret' Old smatch warnings: drivers/net/ethernet/xilinx/xilinx_axienet_main.c:204 axienet_dma_bd_init() error: uninitialized symbol 'ret'. drivers/net/ethernet/xilinx/xilinx_axienet_main.c:3110 axienet_probe() warn: inconsistent indenting vim +/ret +3050 drivers/net/ethernet/xilinx/xilinx_axienet_main.c a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2770 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2771 /** 2be586205ca2b8 Srikanth Thokala 2015-05-05 2772 * axienet_probe - Axi Ethernet probe function. 95219aa538e11d Srikanth Thokala 2015-05-05 2773 * @pdev: Pointer to platform device structure. 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2774 * b0d081c524b46c Michal Simek 2015-05-05 2775 * Return: 0, on success 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2776 * Non-zero error value on failure. 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2777 * 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2778 * This is the probe routine for Axi Ethernet driver. This is called before 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2779 * any other driver routines are invoked. It allocates and sets up the Ethernet 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2780 * device. Parses through device tree and populates fields of 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2781 * axienet_local. It registers the Ethernet device. 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2782 */ 2be586205ca2b8 Srikanth Thokala 2015-05-05 2783 static int axienet_probe(struct platform_device *pdev) 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2784 { 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 2785 int (*axienet_clk_init)(struct platform_device *pdev, 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 2786 struct clk **axi_aclk, struct clk **axis_clk, 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 2787 struct clk **ref_clk, struct clk **tmpclk) = 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 2788 axienet_clk_init; c9e6ca8b3f1707 Appana Durga Kedareswara Rao 2021-01-22 2789 int ret = 0; ee94241b2118dd Saurabh Sengar 2021-01-22 2790 #ifdef CONFIG_XILINX_AXI_EMAC_HWTSTAMP 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2791 struct device_node *np; ee94241b2118dd Saurabh Sengar 2021-01-22 2792 #endif 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2793 struct axienet_local *lp; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2794 struct net_device *ndev; 83216e3988cd19 Michael Walle 2021-04-12 2795 u8 mac_addr[ETH_ALEN]; ee94241b2118dd Saurabh Sengar 2021-01-22 2796 struct resource *ethres; 8495659bf93c8e Srikanth Thokala 2015-05-05 2797 u32 value; ee94241b2118dd Saurabh Sengar 2021-01-22 2798 u16 num_queues = XAE_MAX_QUEUES; ee94241b2118dd Saurabh Sengar 2021-01-22 2799 bool slave = false; ee94241b2118dd Saurabh Sengar 2021-01-22 2800 ee94241b2118dd Saurabh Sengar 2021-01-22 2801 ret = of_property_read_u16(pdev->dev.of_node, "xlnx,num-queues", ee94241b2118dd Saurabh Sengar 2021-01-22 2802 &num_queues); ee94241b2118dd Saurabh Sengar 2021-01-22 2803 if (ret) { ee94241b2118dd Saurabh Sengar 2021-01-22 2804 #ifndef CONFIG_AXIENET_HAS_MCDMA ee94241b2118dd Saurabh Sengar 2021-01-22 2805 num_queues = 1; ee94241b2118dd Saurabh Sengar 2021-01-22 2806 #endif ee94241b2118dd Saurabh Sengar 2021-01-22 2807 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2808 ee94241b2118dd Saurabh Sengar 2021-01-22 2809 ndev = alloc_etherdev_mq(sizeof(*lp), num_queues); 41de8d4cff21a2 Joe Perches 2012-01-29 2810 if (!ndev) 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2811 return -ENOMEM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2812 95219aa538e11d Srikanth Thokala 2015-05-05 2813 platform_set_drvdata(pdev, ndev); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2814 95219aa538e11d Srikanth Thokala 2015-05-05 2815 SET_NETDEV_DEV(ndev, &pdev->dev); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2816 ndev->flags &= ~IFF_MULTICAST; /* clear multicast */ 28e24c62ab3062 Eric Dumazet 2013-12-02 2817 ndev->features = NETIF_F_SG; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2818 ndev->netdev_ops = &axienet_netdev_ops; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2819 ndev->ethtool_ops = &axienet_ethtool_ops; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2820 d894be57ca92c8 Jarod Wilson 2016-10-20 2821 /* MTU range: 64 - 9000 */ d894be57ca92c8 Jarod Wilson 2016-10-20 2822 ndev->min_mtu = 64; d894be57ca92c8 Jarod Wilson 2016-10-20 2823 ndev->max_mtu = XAE_JUMBO_MTU; d894be57ca92c8 Jarod Wilson 2016-10-20 2824 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2825 lp = netdev_priv(ndev); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2826 lp->ndev = ndev; 95219aa538e11d Srikanth Thokala 2015-05-05 2827 lp->dev = &pdev->dev; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2828 lp->options = XAE_OPTION_DEFAULTS; ee94241b2118dd Saurabh Sengar 2021-01-22 2829 lp->num_tx_queues = num_queues; ee94241b2118dd Saurabh Sengar 2021-01-22 2830 lp->num_rx_queues = num_queues; 8b09ca823ffb4e Robert Hancock 2019-06-06 2831 lp->rx_bd_num = RX_BD_NUM_DEFAULT; 8b09ca823ffb4e Robert Hancock 2019-06-06 2832 lp->tx_bd_num = TX_BD_NUM_DEFAULT; 57baf8cc70ea4c Robert Hancock 2021-02-12 2833 b11bfb9a19f9d7 Robert Hancock 2021-03-25 2834 lp->axi_clk = devm_clk_get_optional(&pdev->dev, "s_axi_lite_clk"); b11bfb9a19f9d7 Robert Hancock 2021-03-25 2835 if (!lp->axi_clk) { b11bfb9a19f9d7 Robert Hancock 2021-03-25 2836 /* For backward compatibility, if named AXI clock is not present, b11bfb9a19f9d7 Robert Hancock 2021-03-25 2837 * treat the first clock specified as the AXI clock. b11bfb9a19f9d7 Robert Hancock 2021-03-25 2838 */ b11bfb9a19f9d7 Robert Hancock 2021-03-25 2839 lp->axi_clk = devm_clk_get_optional(&pdev->dev, NULL); b11bfb9a19f9d7 Robert Hancock 2021-03-25 2840 } b11bfb9a19f9d7 Robert Hancock 2021-03-25 2841 if (IS_ERR(lp->axi_clk)) { b11bfb9a19f9d7 Robert Hancock 2021-03-25 2842 ret = PTR_ERR(lp->axi_clk); 57baf8cc70ea4c Robert Hancock 2021-02-12 2843 goto free_netdev; 57baf8cc70ea4c Robert Hancock 2021-02-12 2844 } b11bfb9a19f9d7 Robert Hancock 2021-03-25 2845 ret = clk_prepare_enable(lp->axi_clk); 57baf8cc70ea4c Robert Hancock 2021-02-12 2846 if (ret) { b11bfb9a19f9d7 Robert Hancock 2021-03-25 2847 dev_err(&pdev->dev, "Unable to enable AXI clock: %d\n", ret); 57baf8cc70ea4c Robert Hancock 2021-02-12 2848 goto free_netdev; 57baf8cc70ea4c Robert Hancock 2021-02-12 2849 } 57baf8cc70ea4c Robert Hancock 2021-02-12 2850 b11bfb9a19f9d7 Robert Hancock 2021-03-25 2851 lp->misc_clks[0].id = "axis_clk"; b11bfb9a19f9d7 Robert Hancock 2021-03-25 2852 lp->misc_clks[1].id = "ref_clk"; b11bfb9a19f9d7 Robert Hancock 2021-03-25 2853 lp->misc_clks[2].id = "mgt_clk"; b11bfb9a19f9d7 Robert Hancock 2021-03-25 2854 b11bfb9a19f9d7 Robert Hancock 2021-03-25 2855 ret = devm_clk_bulk_get_optional(&pdev->dev, XAE_NUM_MISC_CLOCKS, lp->misc_clks); b11bfb9a19f9d7 Robert Hancock 2021-03-25 2856 if (ret) b11bfb9a19f9d7 Robert Hancock 2021-03-25 2857 goto cleanup_clk; b11bfb9a19f9d7 Robert Hancock 2021-03-25 2858 b11bfb9a19f9d7 Robert Hancock 2021-03-25 2859 ret = clk_bulk_prepare_enable(XAE_NUM_MISC_CLOCKS, lp->misc_clks); b11bfb9a19f9d7 Robert Hancock 2021-03-25 2860 if (ret) b11bfb9a19f9d7 Robert Hancock 2021-03-25 2861 goto cleanup_clk; b11bfb9a19f9d7 Robert Hancock 2021-03-25 2862 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2863 /* Map device registers */ 47651c51c02fc4 Yang Yingliang 2021-06-10 2864 lp->regs = devm_platform_get_and_ioremap_resource(pdev, 0, ðres); fcc028c106e575 Krzysztof Kozlowski 2015-07-09 2865 if (IS_ERR(lp->regs)) { fcc028c106e575 Krzysztof Kozlowski 2015-07-09 2866 ret = PTR_ERR(lp->regs); 59cd4f19267a0a Robert Hancock 2021-03-11 2867 goto cleanup_clk; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2868 } 7fa0043d5c74c6 Robert Hancock 2019-06-11 2869 lp->regs_start = ethres->start; 46aa27df885321 Srikanth Thokala 2015-05-05 2870 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2871 /* Setup checksum offload, but default to off if not specified */ 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2872 lp->features = 0; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2873 a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2874 if (pdev->dev.of_node) { a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2875 const struct of_device_id *match; a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2876 a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2877 match = of_match_node(axienet_of_match, pdev->dev.of_node); 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 2878 if (match && match->data) { a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2879 lp->axienet_config = match->data; 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 2880 axienet_clk_init = lp->axienet_config->clk_init; 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 2881 } a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2882 } a2fc9e93fefa1f Appana Durga Kedareswara Rao 2020-01-24 2883 8495659bf93c8e Srikanth Thokala 2015-05-05 2884 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,txcsum", &value); 8495659bf93c8e Srikanth Thokala 2015-05-05 2885 if (!ret) { c9e6ca8b3f1707 Appana Durga Kedareswara Rao 2021-01-22 2886 dev_info(&pdev->dev, "TX_CSUM %d\n", value); c9e6ca8b3f1707 Appana Durga Kedareswara Rao 2021-01-22 2887 8495659bf93c8e Srikanth Thokala 2015-05-05 2888 switch (value) { 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2889 case 1: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2890 lp->csum_offload_on_tx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2891 XAE_FEATURE_PARTIAL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2892 lp->features |= XAE_FEATURE_PARTIAL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2893 /* Can checksum TCP/UDP over IPv4. */ c9e6ca8b3f1707 Appana Durga Kedareswara Rao 2021-01-22 2894 ndev->features |= NETIF_F_IP_CSUM | NETIF_F_SG; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2895 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2896 case 2: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2897 lp->csum_offload_on_tx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2898 XAE_FEATURE_FULL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2899 lp->features |= XAE_FEATURE_FULL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2900 /* Can checksum TCP/UDP over IPv4. */ c9e6ca8b3f1707 Appana Durga Kedareswara Rao 2021-01-22 2901 ndev->features |= NETIF_F_IP_CSUM | NETIF_F_SG; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2902 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2903 default: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2904 lp->csum_offload_on_tx_path = XAE_NO_CSUM_OFFLOAD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2905 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2906 } 8495659bf93c8e Srikanth Thokala 2015-05-05 2907 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,rxcsum", &value); 8495659bf93c8e Srikanth Thokala 2015-05-05 2908 if (!ret) { c9e6ca8b3f1707 Appana Durga Kedareswara Rao 2021-01-22 2909 dev_info(&pdev->dev, "RX_CSUM %d\n", value); c9e6ca8b3f1707 Appana Durga Kedareswara Rao 2021-01-22 2910 8495659bf93c8e Srikanth Thokala 2015-05-05 2911 switch (value) { 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2912 case 1: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2913 lp->csum_offload_on_rx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2914 XAE_FEATURE_PARTIAL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2915 lp->features |= XAE_FEATURE_PARTIAL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2916 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2917 case 2: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2918 lp->csum_offload_on_rx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2919 XAE_FEATURE_FULL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2920 lp->features |= XAE_FEATURE_FULL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2921 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2922 default: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2923 lp->csum_offload_on_rx_path = XAE_NO_CSUM_OFFLOAD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2924 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2925 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2926 /* For supporting jumbo frames, the Axi Ethernet hardware must have f080a8c35d8932 Srikanth Thokala 2015-05-05 2927 * a larger Rx/Tx Memory. Typically, the size must be large so that f080a8c35d8932 Srikanth Thokala 2015-05-05 2928 * we can enable jumbo option and start supporting jumbo frames. f080a8c35d8932 Srikanth Thokala 2015-05-05 2929 * Here we check for memory allocated for Rx/Tx in the hardware from f080a8c35d8932 Srikanth Thokala 2015-05-05 2930 * the device-tree and accordingly set flags. f080a8c35d8932 Srikanth Thokala 2015-05-05 2931 */ 8495659bf93c8e Srikanth Thokala 2015-05-05 2932 of_property_read_u32(pdev->dev.of_node, "xlnx,rxmem", &lp->rxmem); ee06b1728b9564 Alvaro G. M 2017-07-17 2933 6c8f06bb2e5147 Robert Hancock 2021-02-12 2934 lp->switch_x_sgmii = of_property_read_bool(pdev->dev.of_node, 6c8f06bb2e5147 Robert Hancock 2021-02-12 2935 "xlnx,switch-x-sgmii"); 6c8f06bb2e5147 Robert Hancock 2021-02-12 2936 ee06b1728b9564 Alvaro G. M 2017-07-17 2937 /* Start with the proprietary, and broken phy_type */ ee06b1728b9564 Alvaro G. M 2017-07-17 2938 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,phy-type", &value); ee06b1728b9564 Alvaro G. M 2017-07-17 2939 if (!ret) { ee06b1728b9564 Alvaro G. M 2017-07-17 2940 switch (value) { ee06b1728b9564 Alvaro G. M 2017-07-17 2941 case XAE_PHY_TYPE_MII: ee06b1728b9564 Alvaro G. M 2017-07-17 2942 lp->phy_mode = PHY_INTERFACE_MODE_MII; ee06b1728b9564 Alvaro G. M 2017-07-17 2943 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2944 case XAE_PHY_TYPE_GMII: ee06b1728b9564 Alvaro G. M 2017-07-17 2945 lp->phy_mode = PHY_INTERFACE_MODE_GMII; ee06b1728b9564 Alvaro G. M 2017-07-17 2946 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2947 case XAE_PHY_TYPE_RGMII_2_0: ee06b1728b9564 Alvaro G. M 2017-07-17 2948 lp->phy_mode = PHY_INTERFACE_MODE_RGMII_ID; ee06b1728b9564 Alvaro G. M 2017-07-17 2949 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2950 case XAE_PHY_TYPE_SGMII: ee06b1728b9564 Alvaro G. M 2017-07-17 2951 lp->phy_mode = PHY_INTERFACE_MODE_SGMII; ee06b1728b9564 Alvaro G. M 2017-07-17 2952 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2953 case XAE_PHY_TYPE_1000BASE_X: ee06b1728b9564 Alvaro G. M 2017-07-17 2954 lp->phy_mode = PHY_INTERFACE_MODE_1000BASEX; ee06b1728b9564 Alvaro G. M 2017-07-17 2955 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2956 default: 9dce88e232cf19 Appana Durga Kedareswara Rao 2020-01-24 2957 /* Don't error out as phy-type is an optional property */ 9dce88e232cf19 Appana Durga Kedareswara Rao 2020-01-24 2958 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2959 } ee06b1728b9564 Alvaro G. M 2017-07-17 2960 } else { 0c65b2b90d13c1 Andrew Lunn 2019-11-04 2961 ret = of_get_phy_mode(pdev->dev.of_node, &lp->phy_mode); 0c65b2b90d13c1 Andrew Lunn 2019-11-04 2962 if (ret) 59cd4f19267a0a Robert Hancock 2021-03-11 2963 goto cleanup_clk; ee06b1728b9564 Alvaro G. M 2017-07-17 2964 } 6c8f06bb2e5147 Robert Hancock 2021-02-12 2965 if (lp->switch_x_sgmii && lp->phy_mode != PHY_INTERFACE_MODE_SGMII && 6c8f06bb2e5147 Robert Hancock 2021-02-12 2966 lp->phy_mode != PHY_INTERFACE_MODE_1000BASEX) { 6c8f06bb2e5147 Robert Hancock 2021-02-12 2967 dev_err(&pdev->dev, "xlnx,switch-x-sgmii only supported with SGMII or 1000BaseX\n"); 6c8f06bb2e5147 Robert Hancock 2021-02-12 2968 ret = -EINVAL; 59cd4f19267a0a Robert Hancock 2021-03-11 2969 goto cleanup_clk; 6c8f06bb2e5147 Robert Hancock 2021-02-12 2970 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2971 f6420dd2cc68a9 Appana Durga Kedareswara Rao 2020-01-24 2972 lp->eth_hasnobuf = of_property_read_bool(pdev->dev.of_node, f6420dd2cc68a9 Appana Durga Kedareswara Rao 2020-01-24 2973 "xlnx,eth-hasnobuf"); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2974 lp->eth_hasptp = of_property_read_bool(pdev->dev.of_node, bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2975 "xlnx,eth-hasptp"); f6420dd2cc68a9 Appana Durga Kedareswara Rao 2020-01-24 2976 9dce88e232cf19 Appana Durga Kedareswara Rao 2020-01-24 2977 if (lp->axienet_config->mactype == XAXIENET_1G && !lp->eth_hasnobuf) 9dce88e232cf19 Appana Durga Kedareswara Rao 2020-01-24 2978 lp->eth_irq = platform_get_irq(pdev, 0); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2979 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2980 #ifdef CONFIG_XILINX_AXI_EMAC_HWTSTAMP bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2981 struct resource txtsres, rxtsres; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2982 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2983 /* Find AXI Stream FIFO */ bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2984 np = of_parse_phandle(pdev->dev.of_node, "axififo-connected", 0); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2985 if (IS_ERR(np)) { bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2986 dev_err(&pdev->dev, "could not find TX Timestamp FIFO\n"); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2987 ret = PTR_ERR(np); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2988 goto free_netdev; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2989 } bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2990 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2991 ret = of_address_to_resource(np, 0, &txtsres); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2992 if (ret) { bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2993 dev_err(&pdev->dev, "unable to get Tx Timestamp resource\n"); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2994 goto free_netdev; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2995 } bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2996 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2997 lp->tx_ts_regs = devm_ioremap_resource(&pdev->dev, &txtsres); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2998 if (IS_ERR(lp->tx_ts_regs)) { bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 2999 dev_err(&pdev->dev, "could not map Tx Timestamp regs\n"); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3000 ret = PTR_ERR(lp->tx_ts_regs); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3001 goto free_netdev; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3002 } bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3003 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3004 if (lp->axienet_config->mactype == XAXIENET_10G_25G) { bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3005 np = of_parse_phandle(pdev->dev.of_node, "xlnx,rxtsfifo", bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3006 0); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3007 if (IS_ERR(np)) { bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3008 dev_err(&pdev->dev, bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3009 "couldn't find rx-timestamp FIFO\n"); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3010 ret = PTR_ERR(np); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3011 goto free_netdev; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3012 } bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3013 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3014 ret = of_address_to_resource(np, 0, &rxtsres); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3015 if (ret) { bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3016 dev_err(&pdev->dev, bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3017 "unable to get rx-timestamp resource\n"); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3018 goto free_netdev; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3019 } bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3020 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3021 lp->rx_ts_regs = devm_ioremap_resource(&pdev->dev, &rxtsres); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3022 if (IS_ERR(lp->rx_ts_regs)) { bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3023 dev_err(&pdev->dev, "couldn't map rx-timestamp regs\n"); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3024 ret = PTR_ERR(lp->rx_ts_regs); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3025 goto free_netdev; bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3026 } bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3027 lp->tx_ptpheader = devm_kzalloc(&pdev->dev, bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3028 XXVENET_TS_HEADER_LEN, bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3029 GFP_KERNEL); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3030 } bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3031 bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3032 of_node_put(np); bf05571deda79b Appana Durga Kedareswara Rao 2020-01-24 3033 #endif ee94241b2118dd Saurabh Sengar 2021-01-22 3034 if (!slave) { ee94241b2118dd Saurabh Sengar 2021-01-22 3035 #ifdef CONFIG_AXIENET_HAS_MCDMA ee94241b2118dd Saurabh Sengar 2021-01-22 3036 ret = axienet_mcdma_probe(pdev, lp, ndev); ee94241b2118dd Saurabh Sengar 2021-01-22 3037 #else ee94241b2118dd Saurabh Sengar 2021-01-22 3038 ret = axienet_dma_probe(pdev, ndev); ee94241b2118dd Saurabh Sengar 2021-01-22 3039 #endif 46aa27df885321 Srikanth Thokala 2015-05-05 3040 if (ret) { ee94241b2118dd Saurabh Sengar 2021-01-22 3041 pr_err("Getting DMA resource failed\n"); ee94241b2118dd Saurabh Sengar 2021-01-22 3042 goto free_netdev; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3043 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3044 ee94241b2118dd Saurabh Sengar 2021-01-22 3045 if (dma_set_mask_and_coherent(lp->dev, DMA_BIT_MASK(lp->dma_mask)) != 0) { ee94241b2118dd Saurabh Sengar 2021-01-22 3046 dev_warn(&pdev->dev, "default to %d-bit dma mask\n", XAE_DMA_MASK_MIN); ee94241b2118dd Saurabh Sengar 2021-01-22 3047 if (dma_set_mask_and_coherent(lp->dev, ee94241b2118dd Saurabh Sengar 2021-01-22 3048 DMA_BIT_MASK(XAE_DMA_MASK_MIN)) != 0) { ee94241b2118dd Saurabh Sengar 2021-01-22 3049 dev_err(&pdev->dev, "dma_set_mask_and_coherent failed, aborting\n"); ee94241b2118dd Saurabh Sengar 2021-01-22 @3050 goto free_netdev; f735c40ed93cca Andre Przywara 2020-03-24 3051 } 5fff0151b3244d Andre Przywara 2020-03-24 3052 } 5fff0151b3244d Andre Przywara 2020-03-24 3053 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3054 ret = axienet_dma_clk_init(pdev); 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3055 if (ret) { 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3056 if (ret != -EPROBE_DEFER) 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3057 dev_err(&pdev->dev, "DMA clock init failed %d\n", ret); 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3058 goto free_netdev; 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3059 } ee94241b2118dd Saurabh Sengar 2021-01-22 3060 } 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3061 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3062 ret = axienet_clk_init(pdev, &lp->aclk, &lp->eth_sclk, 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3063 &lp->eth_refclk, &lp->eth_dclk); 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3064 if (ret) { 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3065 if (ret != -EPROBE_DEFER) 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3066 dev_err(&pdev->dev, "Ethernet clock init failed %d\n", ret); 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3067 goto err_disable_clk; 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3068 } 353f7909290557 Appana Durga Kedareswara Rao 2021-01-22 3069 ee94241b2118dd Saurabh Sengar 2021-01-22 3070 lp->eth_irq = platform_get_irq(pdev, 0); ee94241b2118dd Saurabh Sengar 2021-01-22 3071 /* Check for Ethernet core IRQ (optional) */ ee94241b2118dd Saurabh Sengar 2021-01-22 3072 if (lp->eth_irq <= 0) ee94241b2118dd Saurabh Sengar 2021-01-22 3073 dev_info(&pdev->dev, "Ethernet core IRQ not defined\n"); ee94241b2118dd Saurabh Sengar 2021-01-22 3074 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3075 /* Retrieve the MAC address */ 83216e3988cd19 Michael Walle 2021-04-12 3076 ret = of_get_mac_address(pdev->dev.of_node, mac_addr); 83216e3988cd19 Michael Walle 2021-04-12 3077 if (!ret) { da90e38003e2f0 Tobias Klauser 2016-12-07 3078 axienet_set_mac_address(ndev, mac_addr); 83216e3988cd19 Michael Walle 2021-04-12 3079 } else { 83216e3988cd19 Michael Walle 2021-04-12 3080 dev_warn(&pdev->dev, "could not find MAC address property: %d\n", 83216e3988cd19 Michael Walle 2021-04-12 3081 ret); 83216e3988cd19 Michael Walle 2021-04-12 3082 axienet_set_mac_address(ndev, NULL); 83216e3988cd19 Michael Walle 2021-04-12 3083 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3084 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3085 lp->coalesce_count_rx = XAXIDMA_DFT_RX_THRESHOLD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3086 lp->coalesce_count_tx = XAXIDMA_DFT_TX_THRESHOLD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3087 95219aa538e11d Srikanth Thokala 2015-05-05 3088 lp->phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); 46aa27df885321 Srikanth Thokala 2015-05-05 3089 if (lp->phy_node) { 09a0354cadec26 Robert Hancock 2019-06-06 3090 ret = axienet_mdio_setup(lp); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3091 if (ret) 09a0354cadec26 Robert Hancock 2019-06-06 3092 dev_warn(&pdev->dev, 09a0354cadec26 Robert Hancock 2019-06-06 3093 "error registering MDIO bus: %d\n", ret); 46aa27df885321 Srikanth Thokala 2015-05-05 3094 } 1a02556086fc0e Robert Hancock 2020-10-28 3095 if (lp->phy_mode == PHY_INTERFACE_MODE_SGMII || 1a02556086fc0e Robert Hancock 2020-10-28 3096 lp->phy_mode == PHY_INTERFACE_MODE_1000BASEX) { 1a02556086fc0e Robert Hancock 2020-10-28 3097 if (!lp->phy_node) { 1a02556086fc0e Robert Hancock 2020-10-28 3098 dev_err(&pdev->dev, "phy-handle required for 1000BaseX/SGMII\n"); 1a02556086fc0e Robert Hancock 2020-10-28 3099 ret = -EINVAL; 59cd4f19267a0a Robert Hancock 2021-03-11 3100 goto cleanup_mdio; 1a02556086fc0e Robert Hancock 2020-10-28 3101 } 1a02556086fc0e Robert Hancock 2020-10-28 3102 lp->pcs_phy = of_mdio_find_device(lp->phy_node); 1a02556086fc0e Robert Hancock 2020-10-28 3103 if (!lp->pcs_phy) { 1a02556086fc0e Robert Hancock 2020-10-28 3104 ret = -EPROBE_DEFER; 59cd4f19267a0a Robert Hancock 2021-03-11 3105 goto cleanup_mdio; 1a02556086fc0e Robert Hancock 2020-10-28 3106 } 1a02556086fc0e Robert Hancock 2020-10-28 3107 lp->phylink_config.pcs_poll = true; 1a02556086fc0e Robert Hancock 2020-10-28 3108 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3109 f5203a3d9b25fa Robert Hancock 2019-06-06 3110 lp->phylink_config.dev = &ndev->dev; f5203a3d9b25fa Robert Hancock 2019-06-06 3111 lp->phylink_config.type = PHYLINK_NETDEV; f5203a3d9b25fa Robert Hancock 2019-06-06 3112 f5203a3d9b25fa Robert Hancock 2019-06-06 3113 lp->phylink = phylink_create(&lp->phylink_config, pdev->dev.fwnode, f5203a3d9b25fa Robert Hancock 2019-06-06 3114 lp->phy_mode, f5203a3d9b25fa Robert Hancock 2019-06-06 3115 &axienet_phylink_ops); f5203a3d9b25fa Robert Hancock 2019-06-06 3116 if (IS_ERR(lp->phylink)) { f5203a3d9b25fa Robert Hancock 2019-06-06 3117 ret = PTR_ERR(lp->phylink); f5203a3d9b25fa Robert Hancock 2019-06-06 3118 dev_err(&pdev->dev, "phylink_create error (%i)\n", ret); 59cd4f19267a0a Robert Hancock 2021-03-11 3119 goto cleanup_mdio; f5203a3d9b25fa Robert Hancock 2019-06-06 3120 } f5203a3d9b25fa Robert Hancock 2019-06-06 3121 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
