From nobody Thu Apr 2 00:08:14 2026 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 B480D3D88EA for ; Tue, 24 Mar 2026 08:51:01 +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=1774342264; cv=none; b=izGF/ZT0U19Bao+4OlKik61s85Tbp25la0ET8OkL4v7AuB2uHX0MdyJpyMq3l7qoihJK6bCf8Loqdln0ZgFtylu2/n6BCvSHG1XKImaGWSRzVgrMCiIgGsj28hhZYWmzIQRTHop5iQvEjKmHqMPJw2X4NszXnK8G8CuVHUigHxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774342264; c=relaxed/simple; bh=K1aC662L+9k1UBZVFhUowzAz5oxoOxQNzAXHwIk90M4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IY9GQ2gLXclsoc/FCUKR8a6MWqbKXT513uWkoO8gWpKHvKe7B0A87MfKpMwKQAGCyXtTglhyPrq+1kcYoAoadDwfXGWSC+zA5GRc2HEMBVnyEGr1cDpxE/28Kv5Uq9YA/+tGdQgUunAkFZ6MOO6ZWJKIo/LVHjNjCXX3ph8XcgU= 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=ZGFgS/zD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YJ7Zd3Wf; 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="ZGFgS/zD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YJ7Zd3Wf" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62O3eDxD1761785 for ; Tue, 24 Mar 2026 08:51:00 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= mRU5A0a5cwKQRPXDBHimTxYKv1NzaEwLlulVirlsnTE=; b=ZGFgS/zDbc/3svNE Clx/XhMnJcgoPHKB3xOHVH95mWagVD6NpWglYBryW04BEp/J8i5ONvfJe94px1pl Yt7idxrn9TvzkJASXDc5HjJpn+hinIWnnJ4snAJ4Fd0EPQ1jk3n16kELywdGMqQc JFsunyDCNG5ctedXf5+u1vy4lW86m8dcD//cF9oFiR7PwxkzHiz6asdW9a6idehc BzEzZP8Rwxr+Nv2Mxxo47+x1Mu3lhz5wLC5ZrCQITomSdZ1yMqpKktvAHWX5rQGT mEyG/YDqh/DAwvkfXjHMkuJmC92xoi3QVBAKhwb20nUF1+eQPEoT0QPtnU+DH5H5 /LhkVQ== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d36f0bnv6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 24 Mar 2026 08:51:00 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b06b68783dso24292945ad.3 for ; Tue, 24 Mar 2026 01:51:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774342259; x=1774947059; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=mRU5A0a5cwKQRPXDBHimTxYKv1NzaEwLlulVirlsnTE=; b=YJ7Zd3Wfry9ZIMZwt5U+j5XFC9AuXhyeGbU+06o5+ckN+EeAP3kkJ6t+hzkWIqgm9g APmrVoj1A01uNmq4nBiEFyuqQCZuD+Fodkq718f7BTUK77MmI6lMSaDKkFgLnHjPkz6v 62/iodAbFLqZY9AcnqPJZwXLqK3KfKRCujpZA8N2D/3xKovBYN1qSrmnICxsonUkunw4 Aeulspq/ZY8zGrv3rNJy7sUNN70Sm9i9/Q8Oar2ClWufhaWF85xPU7pyX32PQzs6j+4E RDz8KvuirhZRnplK7ema3WCQye1wKUT+DVD/dyaqsSy1fKTBahqVryCY+kbBBUy8BZBI GSrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774342259; x=1774947059; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=mRU5A0a5cwKQRPXDBHimTxYKv1NzaEwLlulVirlsnTE=; b=nmmtCNN4c0FYkzbGV3d/iu6lwoe/GifSVPFrcqApbCEG3D32fXQIQodZpOE25Avm5R TpaV/BbOzgwee7ToBa1G8NdGizrgR+doUlRGYIQox2C0HfEg4/0tq99s/eVmOJxUMZ24 dgWjmDGL+TkGWAauWm6tsR6HSdSMFFdP2sn1ACfl2IA7CRaDmRidMHAdTsBTJ7UXuVHk kcaO5UoPmy9UWZhVH7l8RQFBg8aQyK1yJ4vcClMapeHrSL2n9KiuE/gGYa3n58ye/SaZ kgB4Rqt+RYD2wrWjVmIGmr32NXTaWMpy8/Sj4dSVTmsmvPqFtjM5u5nGJ78w/N2AFRHs VsSQ== X-Forwarded-Encrypted: i=1; AJvYcCUfrthTQz5s8u/hHUWs3bRV0NhjRxMOocaYWna3GubAT9dU8zMXd+hAre2TNpLGW0osMHMnhFxcfZpkx64=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9ekuK7DQJnKZ62wwib11KobAVje4JR7u2lRyTOrdZK4dtEfL5 jCeAFDa5D03ed4GVm7M5tuLfsw8D94CxvWyRE9bo0snzvziRbkjnmAY/dIs4shHqhDqOgNwZY3u rq/09lmaFC08E0qf/GKCg/l1KQ8H7dEu15m46kUZtLlyjj31zgMQw4IE9H5w06xYD8bA= X-Gm-Gg: ATEYQzyj+FDq0a2u6yuCIe/60gHAQ52O2AT/TRnr/UwO4kcnirHoDrYCunV5Sk/Xo/S XdXOCBZ36FUpvXiA4BXwiZPsJ2SRfMow9BbJ5EHaO+dEXoriFlgp3AVQGMM/bOVfUa2+hkGm7xY N0tQVnU994yvEYvA/gxnDfFY1Rp6Gyv5d4tvU4QANDcPx0iUXMRYGnsf142V7AcW++r5VmYoBOo dXdiDyN+1PdIb7GX44zAyUtDeOVrZFyqceJT4R/C5qY5psZ93GEmtrkXuLO25PiJdW3uMDXM611 OGxDAv5X4t1qJRoJB8NbLlTlIiJ3TvkJ/6qXdm7xqWPud7FgehVAIeA/07kc4TNcZxf+tucomZ5 ah4rYd/goSWvjT23ZZlq4+U46ClXvpat4InRotYLDufACz/Tl8NOKdefKGiE= X-Received: by 2002:a17:902:e811:b0:2ae:6d9e:ed57 with SMTP id d9443c01a7336-2b0827393efmr148796795ad.21.1774342258920; Tue, 24 Mar 2026 01:50:58 -0700 (PDT) X-Received: by 2002:a17:902:e811:b0:2ae:6d9e:ed57 with SMTP id d9443c01a7336-2b0827393efmr148796495ad.21.1774342258405; Tue, 24 Mar 2026 01:50:58 -0700 (PDT) Received: from hu-vpernami-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b08366c4f1sm135752265ad.59.2026.03.24.01.50.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 01:50:57 -0700 (PDT) From: Vivek Pernamitta Date: Tue, 24 Mar 2026 14:20:48 +0530 Subject: [PATCH v9 1/2] net: mhi: Enable Ethernet interface support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260324-vdev_eth_next-20260323-v9-1-da6e4e486437@oss.qualcomm.com> References: <20260324-vdev_eth_next-20260323-v9-0-da6e4e486437@oss.qualcomm.com> In-Reply-To: <20260324-vdev_eth_next-20260323-v9-0-da6e4e486437@oss.qualcomm.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Vivek Pernamitta X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774342251; l=5503; i=vivek.pernamitta@oss.qualcomm.com; s=20241114; h=from:subject:message-id; bh=K1aC662L+9k1UBZVFhUowzAz5oxoOxQNzAXHwIk90M4=; b=sgOmrsIK8+CE32MgGD03/jPgfErI4vlIL0LvdbZeixVWnvCjHa7Sxq5wyOL8f7vKXqMY47bB7 IlvlYNm2x0zDCvgu8eSOWbS0Z98VYhpKE99vUxbBb3G1knjOYqXS82A X-Developer-Key: i=vivek.pernamitta@oss.qualcomm.com; a=ed25519; pk=HDwn8xReb8K52LA6/CJc6S9Zik8gDCZ5LO4Cypff71Y= X-Authority-Analysis: v=2.4 cv=b+q/I9Gx c=1 sm=1 tr=0 ts=69c25074 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=WxnqTDRJW-rUwrNVdAYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: kS2WWorCOkdXfKRp0a66YZ3z1u7ZMVmv X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDA3MCBTYWx0ZWRfX3p69c9FTORYW G3IQXhaFUl0Bb9Yuk/iEPbUpUJ7JvmodO+8BGZrJfchEcc+z0qJNvdHrmDUm7oB2OhIK9X3fz27 jqahxFL6e1xSCrsTdotGzBoJkIdZ+1a8rl/Oqgh2hQ1cZyUkOefaISM4+8BijmNWeV5xhCaIDE2 CNyceA4/f6cUwr3uFlxsAN8i8whmqMF/eNzc+wtvN1u/J0tFtwmU9e4uv6qi1JitJxRQ7B0Bbxq iwFhM3XoVGLnnRVeSxCFk63ApgCdzkHIR8cQWQ+/bRXHZLD6hzaU4txOgoHHL0qYlShr2cOMGbm 0E1z9ndePS3utmFEbTViDVsazJVsEgGFCIpdAXZFWnCIhcSDXLgQDKLCZrgY5FV1wn3hkXAHfxr 157HvuUi0ntrKEaAgjgJkIn+02srCrTuutW1zYxR7wJGF6ZGua/pXWc8wIs06deKGaLomP5qh7X zkJGlUh0jRRlJH4fcgA== X-Proofpoint-GUID: kS2WWorCOkdXfKRp0a66YZ3z1u7ZMVmv 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-24_02,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 adultscore=0 malwarescore=0 bulkscore=0 suspectscore=0 phishscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603240070 Add support to configure a new client as Ethernet type over MHI by setting "mhi_device_info.ethernet_if =3D 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=E2=80=99s 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..87d8c61fab983005eaea99603d7= 4a557d1483b6e 100644 --- a/drivers/net/mhi_net.c +++ b/drivers/net/mhi_net.c @@ -4,6 +4,7 @@ * Copyright (C) 2020 Linaro Ltd */ =20 +#include #include #include #include @@ -42,6 +43,7 @@ struct mhi_net_dev { =20 struct mhi_device_info { const char *netname; + bool ethernet_if; }; =20 static int mhi_ndo_open(struct net_device *ndev) @@ -119,11 +121,29 @@ static void mhi_ndo_get_stats64(struct net_device *nd= ev, } while (u64_stats_fetch_retry(&mhi_netdev->stats.tx_syncp, start)); } =20 +static int mhi_mac_address(struct net_device *dev, void *p) +{ + if (dev->type =3D=3D ARPHRD_ETHER) + return eth_mac_addr(dev, p); + + return 0; +} + +static int mhi_validate_address(struct net_device *dev) +{ + if (dev->type =3D=3D ARPHRD_ETHER) + return eth_validate_addr(dev); + + return 0; +} + static const struct net_device_ops mhi_netdev_ops =3D { .ndo_open =3D mhi_ndo_open, .ndo_stop =3D mhi_ndo_stop, .ndo_start_xmit =3D mhi_ndo_xmit, .ndo_get_stats64 =3D mhi_ndo_get_stats64, + .ndo_set_mac_address =3D mhi_mac_address, + .ndo_validate_addr =3D mhi_validate_address, }; =20 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 =3D 1000; } =20 +static void mhi_ethernet_setup(struct net_device *ndev) +{ + ndev->netdev_ops =3D &mhi_netdev_ops; + ether_setup(ndev); + ndev->max_mtu =3D 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 *mh= i_dev, skb =3D mhi_net_skb_agg(mhi_netdev, skb); mhi_netdev->skbagg_head =3D NULL; } - - switch (skb->data[0] & 0xf0) { - case 0x40: - skb->protocol =3D htons(ETH_P_IP); - break; - case 0x60: - skb->protocol =3D htons(ETH_P_IPV6); - break; - default: - skb->protocol =3D htons(ETH_P_MAP); - break; + if (mhi_netdev->ndev->type =3D=3D ARPHRD_ETHER) { + skb->protocol =3D eth_type_trans(skb, mhi_netdev->ndev); + } else { + switch (skb->data[0] & 0xf0) { + case 0x40: + skb->protocol =3D htons(ETH_P_IP); + break; + case 0x60: + skb->protocol =3D htons(ETH_P_IPV6); + break; + default: + skb->protocol =3D htons(ETH_P_MAP); + break; + } } =20 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; =20 + if (!!ndev->header_ops) + eth_hw_addr_random(ndev); + mhi_netdev =3D netdev_priv(ndev); =20 dev_set_drvdata(&mhi_dev->dev, mhi_netdev); @@ -356,7 +389,8 @@ static int mhi_net_probe(struct mhi_device *mhi_dev, int err; =20 ndev =3D 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; =20 @@ -386,11 +420,18 @@ static const struct mhi_device_info mhi_swip0 =3D { .netname =3D "mhi_swip%d", }; =20 +static const struct mhi_device_info mhi_eth0 =3D { + .netname =3D "eth%d", + .ethernet_if =3D true, +}; + static const struct mhi_device_id mhi_net_id_table[] =3D { /* Hardware accelerated data PATH (to modem IPA), protocol agnostic */ { .chan =3D "IP_HW0", .driver_data =3D (kernel_ulong_t)&mhi_hwip0 }, /* Software data PATH (to modem CPU) */ { .chan =3D "IP_SW0", .driver_data =3D (kernel_ulong_t)&mhi_swip0 }, + { .chan =3D "IP_ETH0", .driver_data =3D (kernel_ulong_t)&mhi_eth0 }, + { .chan =3D "IP_ETH1", .driver_data =3D (kernel_ulong_t)&mhi_eth0 }, {} }; MODULE_DEVICE_TABLE(mhi, mhi_net_id_table); --=20 2.34.1