From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A71B2EBB86 for ; Wed, 25 Mar 2026 06:53:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774421593; cv=none; b=MZeW9uNJXlAihNo5BN0nknjbSdnnqHsd65upDx25He+07MHQVgC1Bngm3pwRX5WFRu2yM8asA5Bomf5FNyex4lcLGTkof0ghRbDW0s6d85gi1Xa0E7915/8ut31Q2ioXm5pILklAmfqAdm4fqrtpzftR7MdAsudxa1XVLWVPY1I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774421593; c=relaxed/simple; bh=8H+GdAKBFaCchsjv5ttuJOMI+f0XuIoJ1n1G5Tfk6vA=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=dfzmS5uOns1r5B31FVr0krgXal+b0J8fPirqvQ7I2EVVdK/m7Te2dbgHyAmqyZ2mJKCYj/fjf4p+eeIavNrtZlFJpzSctf7dO19EZ23wK4wjvYtgYRt+lYf9DtOofXfJn1vp7J+oasPJbiOKdPOtnt8wGT63LGp7HUhz7TqQVG0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=QfrAd8Ls; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Oyp0gIA1; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="QfrAd8Ls"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Oyp0gIA1" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62P5QhNd1862785 for ; Wed, 25 Mar 2026 06:53:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= UI7m2+0UYHSeLOdZmZkD5IzpLl2JDpfBb2Td0CnCpfk=; b=QfrAd8Ls5ooL30O9 SS2DrmlSMnutr4g8mjVXa1K377COiWNwGWgGa3JMkDXiZ0kigwZcw7mRnCNJUXmO i/mVpb+KAj7w8AOapWh/3BSxEvw32FCSUrO3VkqWi76TbkZdGxTVVD7/mzOZdbp0 342DEVghTgL+8Sq7QFf5mIQA9Cb5HrpwIn/cXf2eRCQMlgeyMicjOjGMPvrFg3DW Fg44UWCfjMi1tq8BYhtr5/s0RUqw/iI5suuYblji4C8jkIsDLThuXBGFCSXepuxm G6EIy+sb5+JgTs7E7hHuZdm16sJrzzTdT+hpAJzjYNCRD/L+xeHdyZcAA1y9Ljn3 c+jQuQ== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d40rasts2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 25 Mar 2026 06:53:10 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c7424d91b2dso3682516a12.1 for ; Tue, 24 Mar 2026 23:53:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774421590; x=1775026390; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=UI7m2+0UYHSeLOdZmZkD5IzpLl2JDpfBb2Td0CnCpfk=; b=Oyp0gIA1sCAWNt7KDHhRoidFPwYRcT8FiabMTcjnFk/ZZfs4RcLvxa5yRm1k0wwUfo AigJ4dUigzQCTjT9QtGEwSw0e7UMTqS9gWSlvQsrqiSBawzfFjqtIvUokexRWcwx+Hmb 91ejbp/Ye+RyMEgX/3FaAzQwbj9QI80c9gSVCKvGworU5QOtd8uANZefMc3bbEz3Rs5f SQwIfxWndeqjyd4Ean1jh0NiV0ENAeXvdCD10CQgASN9UaXjQ0j2DRuIMfjhs+nSCfsg PBSDGX2limNt+tF89jnO8MHrlWNAZtan9E5TpyV9+dpe+r7KSopLRIAilzXKBeiPVpSS vaDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774421590; x=1775026390; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UI7m2+0UYHSeLOdZmZkD5IzpLl2JDpfBb2Td0CnCpfk=; b=rKdN2jroKEwn4dl/6SoBdDzvxENFf7JfcylFYkCV0iVb2bg6Qu+iOujrKsIjppYJDu tBnysDqNPVsFPkSLPg5x6JpJeh9SdyGKxn7mmtlnUDqiLN5gtgnAZE1W38QXgK7040sJ roWaVVZPfVBCpYFgwy77mbm7bcLHd4vZu7B3n4e6EJOtwKGyrAxKWe5d2bLGOBOqPCMS gibpjoHKFElJkmngsgIU99BYuuSD67ZHM/UDXM3KD5dw4RxfBdtmfUMLnunHk4f7ytTQ rlTnRAib2Xj3+IUXz3mV0lh40uqh6KpYCBjNPZ8O/a+ocTnsHMoiIEoR0e6HlT25sBw1 mFAA== X-Forwarded-Encrypted: i=1; AJvYcCXVna5LYhlkQH2WBxtWGlozPh9Xvn7PgKvSrYWI4hWil6SAkj3cZPCM3quZcW3WQ4XUONaQa5hnv9dLbXA=@vger.kernel.org X-Gm-Message-State: AOJu0YwZKQhHMQM47HShhRIIQT2ezjBKXticboNFldPZ8lHk/W/QejH4 w9/7loaBjeirw8on/cUvX0DLHzYO47vDhcdznGu5hlpz2AfZhOgrz9XJ2bBab1B7pZkMdnCKjqt KzHayY+j82spAUsj9YYBU9A2T3A5At3vijRAFc4/JgnCdPsU7p20RT//NDizRvG1k6lE= X-Gm-Gg: ATEYQzz1AsX4x3wDp1kj5suHJD/BVweJ9wW/KLwc1yEg5aYED2K5hjZjdZ+LMVvh16e nItSc6SlMlHuiVrufntqOTJyr1RhFIkbu/aEPo7afgNf+QkwlKGQF6CFaGI73hP/tchnAslG67/ cZ8uqRRBYJH0J2vYE0JZmHurX8O0cbTl7g5ccdguze42QFXcyVpXAU0Ir9T8HBFhm3Dcdai7ISz IwbUS2ED8ad3E6vftuewGdADV0V0m/01WMGXWSllFElBPCZk88B+MmYMdQoEp1Nbo1pD55tBAL2 W4+OrJzfHz5SzkZwB0VPwZMBO1tpwsp5T3wxaV3j70bLrX7BlzMlXKgjo4YiyppglWFXWucLOZB 1AadkqPrqVLl/mJY1P5PU3254sNdVp2JNEYCqoAIIxmdUFAH3QfiCkJ8c X-Received: by 2002:a05:6a00:3d4b:b0:81f:394a:4897 with SMTP id d2e1a72fcca58-82c6e0d4280mr2597266b3a.44.1774421589782; Tue, 24 Mar 2026 23:53:09 -0700 (PDT) X-Received: by 2002:a05:6a00:3d4b:b0:81f:394a:4897 with SMTP id d2e1a72fcca58-82c6e0d4280mr2597246b3a.44.1774421589280; Tue, 24 Mar 2026 23:53:09 -0700 (PDT) Received: from [10.218.37.132] ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82c66487634sm3576109b3a.29.2026.03.24.23.53.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 24 Mar 2026 23:53:08 -0700 (PDT) Message-ID: <1bc9ab9f-e59d-4dad-aa0d-c4d6fefc957d@oss.qualcomm.com> Date: Wed, 25 Mar 2026 12:23:04 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v9 1/2] net: mhi: Enable Ethernet interface support To: Loic Poulain Cc: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , netdev@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260324-vdev_eth_next-20260323-v9-0-da6e4e486437@oss.qualcomm.com> <20260324-vdev_eth_next-20260323-v9-1-da6e4e486437@oss.qualcomm.com> Content-Language: en-US From: vivek pernamitta In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Authority-Analysis: v=2.4 cv=Jvr8bc4C c=1 sm=1 tr=0 ts=69c38656 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=UIrkJHBKaNELrq0Sgc0A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: p-fnFLTrmcWdmfZN-ycZff82GXRKcvto X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI1MDA0NyBTYWx0ZWRfXxsTdy7Ir3V4u N0wvwhJo01Dv1xKfJDyod240fz4xeCTR/2jJshuRRJvshPgaIqIi7cu/Az+5Mandd5rSvjafXv0 AqdRpHeXIPOctIXahpM7UaRCDDujBzXX5gcej9VB9b8Pn549XbPSMR3ph+Dkk2BHrNBwNDW7xyx fhGbvcISfxe863XLdXYyIzAshAKJ1bconhgEE+k3vp++/jd9dg+d8A+q/bLQzEnKJsdWWAR+vby 8NBh8cntmTVrZ/1HMK82Bkgv9kAPJvoYcSAM+j35WVEgvXr95Ue7B3UkZKHvsQG9gptXfIL9jt+ dhi3qNzkTKoF45JOdEzSLh+czUARk13fw6eG0NENfugmqnD10eiFwwnT5HROD2WKOzamLOWM9QG BvWtqOA3dFwr+vv/JU1d2MU8xp4Q6rh4nqsCmUDq4WjwqkWpRPjnuOn8iJNHcdpgQE4mjEV4acz x7FNWzIJRrwmj75AbDA== X-Proofpoint-GUID: p-fnFLTrmcWdmfZN-ycZff82GXRKcvto X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-25_02,2026-03-24_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 phishscore=0 priorityscore=1501 spamscore=0 clxscore=1015 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603250047 On 3/24/2026 3:35 PM, Loic Poulain wrote: > Hi Vivek, > > On Tue, Mar 24, 2026 at 10:02 AM Vivek Pernamitta > wrote: >> >> Add support to configure a new client as Ethernet type over MHI by >> setting "mhi_device_info.ethernet_if = true". Create a new Ethernet >> interface named eth%d. This complements existing NET driver support. >> >> Allocate MHI netdevs using NET_NAME_ENUM to reflect kernel-enumerated >> naming. This updates the reported name_assign_type for MHI net >> interfaces created by this driver, aligning naming semantics across >> existing and new devices. No functional or interface naming changes >> are introduced >> >> Introduce ETH0 and ETH1 network interfaces required for NETCONF >> and S-plane components. >> >> IP_ETH channels represent the Ethernet interface exposed by the >> MHI device. The driver creates a corresponding netdev instance, >> allowing the host to access and operate the device’s Ethernet >> interface. >> >> NETCONF: >> Use NETCONF protocol for configuration operations such as fetching, >> modifying, and deleting network device configurations. >> >> S-plane: >> Support frequency and time synchronization between O-DUs and O-RUs >> using Synchronous Ethernet and IEEE 1588. Assume PTP transport over >> L2 Ethernet (ITU-T G.8275.1) for full timing support; allow PTP over >> UDP/IP (ITU-T G.8275.2) with reduced reliability. as per ORAN spec >> O-RAN.WG4.CUS.0-R003-v12.00. >> >> Signed-off-by: Vivek Pernamitta >> --- >> drivers/net/mhi_net.c | 65 +++++++++++++++++++++++++++++++++++++++++---------- >> 1 file changed, 53 insertions(+), 12 deletions(-) >> >> diff --git a/drivers/net/mhi_net.c b/drivers/net/mhi_net.c >> index ae169929a9d8e449b5a427993abf68e8d032fae2..87d8c61fab983005eaea99603d74a557d1483b6e 100644 >> --- a/drivers/net/mhi_net.c >> +++ b/drivers/net/mhi_net.c >> @@ -4,6 +4,7 @@ >> * Copyright (C) 2020 Linaro Ltd >> */ >> >> +#include >> #include >> #include >> #include >> @@ -42,6 +43,7 @@ struct mhi_net_dev { >> >> struct mhi_device_info { >> const char *netname; >> + bool ethernet_if; >> }; >> >> static int mhi_ndo_open(struct net_device *ndev) >> @@ -119,11 +121,29 @@ static void mhi_ndo_get_stats64(struct net_device *ndev, >> } while (u64_stats_fetch_retry(&mhi_netdev->stats.tx_syncp, start)); >> } >> >> +static int mhi_mac_address(struct net_device *dev, void *p) >> +{ >> + if (dev->type == ARPHRD_ETHER) >> + return eth_mac_addr(dev, p); >> + >> + return 0; > > return -EOPNOTSUPP ? Sure , will make changes > >> +} >> + >> +static int mhi_validate_address(struct net_device *dev) >> +{ >> + if (dev->type == ARPHRD_ETHER) >> + return eth_validate_addr(dev); >> + >> + return 0; >> +} >> + >> static const struct net_device_ops mhi_netdev_ops = { >> .ndo_open = mhi_ndo_open, >> .ndo_stop = mhi_ndo_stop, >> .ndo_start_xmit = mhi_ndo_xmit, >> .ndo_get_stats64 = mhi_ndo_get_stats64, >> + .ndo_set_mac_address = mhi_mac_address, >> + .ndo_validate_addr = mhi_validate_address, >> }; >> >> static void mhi_net_setup(struct net_device *ndev) >> @@ -140,6 +160,13 @@ static void mhi_net_setup(struct net_device *ndev) >> ndev->tx_queue_len = 1000; >> } >> >> +static void mhi_ethernet_setup(struct net_device *ndev) >> +{ >> + ndev->netdev_ops = &mhi_netdev_ops; >> + ether_setup(ndev); >> + ndev->max_mtu = ETH_MAX_MTU; >> +} >> + >> static struct sk_buff *mhi_net_skb_agg(struct mhi_net_dev *mhi_netdev, >> struct sk_buff *skb) >> { >> @@ -208,17 +235,20 @@ static void mhi_net_dl_callback(struct mhi_device *mhi_dev, >> skb = mhi_net_skb_agg(mhi_netdev, skb); >> mhi_netdev->skbagg_head = NULL; >> } >> - >> - switch (skb->data[0] & 0xf0) { >> - case 0x40: >> - skb->protocol = htons(ETH_P_IP); >> - break; >> - case 0x60: >> - skb->protocol = htons(ETH_P_IPV6); >> - break; >> - default: >> - skb->protocol = htons(ETH_P_MAP); >> - break; >> + if (mhi_netdev->ndev->type == ARPHRD_ETHER) { >> + skb->protocol = eth_type_trans(skb, mhi_netdev->ndev); >> + } else { >> + switch (skb->data[0] & 0xf0) { >> + case 0x40: >> + skb->protocol = htons(ETH_P_IP); >> + break; >> + case 0x60: >> + skb->protocol = htons(ETH_P_IPV6); >> + break; >> + default: >> + skb->protocol = htons(ETH_P_MAP); >> + break; >> + } >> } >> >> u64_stats_update_begin(&mhi_netdev->stats.rx_syncp); >> @@ -306,6 +336,9 @@ static int mhi_net_newlink(struct mhi_device *mhi_dev, struct net_device *ndev) >> struct mhi_net_dev *mhi_netdev; >> int err; >> >> + if (!!ndev->header_ops) > > The double negation does nothing useful here, you don't need it. OK sure , will correct it >> + eth_hw_addr_random(ndev); >> + >> mhi_netdev = netdev_priv(ndev); >> >> dev_set_drvdata(&mhi_dev->dev, mhi_netdev); >> @@ -356,7 +389,8 @@ static int mhi_net_probe(struct mhi_device *mhi_dev, >> int err; >> >> ndev = alloc_netdev(sizeof(struct mhi_net_dev), info->netname, >> - NET_NAME_PREDICTABLE, mhi_net_setup); >> + NET_NAME_ENUM, info->ethernet_if ? >> + mhi_ethernet_setup : mhi_net_setup); >> if (!ndev) >> return -ENOMEM; >> >> @@ -386,11 +420,18 @@ static const struct mhi_device_info mhi_swip0 = { >> .netname = "mhi_swip%d", >> }; >> >> +static const struct mhi_device_info mhi_eth0 = { >> + .netname = "eth%d", > > We named other interfaces `mhi_hwipX/mhi_swipX`, would it make sense > to have similar naming here as well? > Thanks for suggestion. Incorporated the recommendation to use eth%d for Ethernet interface naming. https://lore.kernel.org/all/20250725171053.03c0c44d@kernel.org/ >> + .ethernet_if = true, >> +}; >> + >> static const struct mhi_device_id mhi_net_id_table[] = { >> /* Hardware accelerated data PATH (to modem IPA), protocol agnostic */ >> { .chan = "IP_HW0", .driver_data = (kernel_ulong_t)&mhi_hwip0 }, >> /* Software data PATH (to modem CPU) */ >> { .chan = "IP_SW0", .driver_data = (kernel_ulong_t)&mhi_swip0 }, >> + { .chan = "IP_ETH0", .driver_data = (kernel_ulong_t)&mhi_eth0 }, >> + { .chan = "IP_ETH1", .driver_data = (kernel_ulong_t)&mhi_eth0 }, >> {} >> }; >> MODULE_DEVICE_TABLE(mhi, mhi_net_id_table); >> >> -- >> 2.34.1 >> >>