From nobody Thu Apr 2 20:27:05 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 B76C232AAA5 for ; Thu, 12 Feb 2026 11:00:36 +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=1770894038; cv=none; b=qVTJQN8biWFWw/vuxvsP5fT6hAJPz2lclkUg1ORGTRN+TjblYwHXIXqOQVDitlxbrerZ27xMK95JNFaciYDgUP+/5QktVIU502RNiL9tflMDjnrSsgftDJmFAXPFuNb5dPomjuBXAEoLKqGJeQRVJWwa2axwaEuAlJ+TKzC7/5c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770894038; c=relaxed/simple; bh=Co1ogNbrXYtnG76P1/DduYW9hZG6P1mt8/oVy79f000=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jFwr9MqcHf0v2RML2g3iaZrEE57C+w7bFqtFwde72As/mmp9x7emeJsBD04uskG78UZK7OC/SIRtAN62B3I9gRpaDrvNQAxJs6iaaepNtDfA1h7YLPJcUXq4/X3VuNz47QwIg5coTBK0d4Qrpr7DpJbIh5e3s/lCWZbD+YgnMIU= 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=lWc2UZUS; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Kx1Gkvf9; 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="lWc2UZUS"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Kx1Gkvf9" 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 61CAGHZT4112098 for ; Thu, 12 Feb 2026 11:00:35 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= JlHNJePS7I7N8MArpoypC6/sjaeOy7o2sv3hro6NbT4=; b=lWc2UZUSVzPaa4Ph B1WADDVdkEUBz535uuE4H5tLIbS2LC2VKyr5eWE5QiJcsidmYErb/dwExVnPQJ2E +6wJOg0A7aRpk3yGCYG0VwDniqo6EIYARowRaJ/TqpsR3D9Z3cmNas2+ekF+ysLx LTxs8AaVThJXeySoekpL1HW9yEImSVrEg7TLGO6AwCqykh7I3TDvQfgV3iUiIhMV NRgdli1On0FLuZSZ66aDJdMLx8BMy3irJNg9M0876TR+kDUXFuk3vPPORMSCsows xFphGIFH+t+/kx+l4rvBS9PUvi3f2z06s241Sw9FCjIO8i0KrJRSuY9qAQ8RYTDx +OBAgQ== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4c9cya84gp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 12 Feb 2026 11:00:35 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-824afcaf003so422535b3a.1 for ; Thu, 12 Feb 2026 03:00:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1770894034; x=1771498834; 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=JlHNJePS7I7N8MArpoypC6/sjaeOy7o2sv3hro6NbT4=; b=Kx1Gkvf97/t6OhqfZ0Bfs8KYe7dqrRhKp4t8+rJkqKOXy0xcoS1VFs8yJj3OmIDJyr OXKYliAWYvxfRUF7mHv8jBjevligcJ+szsCA9BzhSKKxdzVrDoJw1ql0h1Eau+gejfP9 YfkA5czusEmIGyu/57+Kq9iEv3G/sRWwGX8QBUWeKxDnzyCHlEnNZ2q53IClJs92PRVi WMtYGedYguJSEBYsKgjpTVDb0ZB4EvbPKj476RhFmaAO6h8+V//cNZV480GYL1Ip459y zy3psapApFJAqSEBqAgvkHsvxx7xANfM+I9mnPQ9lsATkQJGoMcMgGYVoXhCNIgT1kLh TF5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770894034; x=1771498834; 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=JlHNJePS7I7N8MArpoypC6/sjaeOy7o2sv3hro6NbT4=; b=Gd0Y3KwajNYYq08toVQm0V+YyN9PcUM3WMFz/IeFhy+bV3mBz0SRCjL/64pzULPVxl zaRkJcWkwlBQ/OqF7vxJtH8OgaGGE6nlWgT9lBfZDvAMpHUmD0DuPI3qRgYvI+2ZOZYD mmDFv9lPCAYjaCCAbELDJ4fXcSLd9beoQ8CzsMpciBjMs7PtqjUaVU845PABAXozC3l0 63uroEIAyH9/yHhwTtmlyqflEPUhqHLyi2tEOBWI5sb4fZuEIqIOqmnVWqQ6YWhyvbls wbB8opyYzVYcohmKFu3qK7KTStyaS5+yPaxHIEoKEFxrGD0w8EbGzAudcfWkk5+R93qx T45A== X-Forwarded-Encrypted: i=1; AJvYcCWIX7wQSbGZwRKkr6oph+8Y63owSAl16P/aJg3HQ8JXfSjmtzMxpIWoleqKvwbw1BQoVJ0UY976hvoQpxs=@vger.kernel.org X-Gm-Message-State: AOJu0YxregEvUCv41/u3192NeNtdmYBJCS9iUs58NXeAuvu7hbK+na7s MXpi7U5uO8He8MMPvkJQ6Ca6Scq8Fqv+69JR2B39VjWewvC6y7Zqd/WpP4VqgnBX+hlvagVHbud GkJvXG4Da1un8H4jul9rvKGzJhYgESzMkjrGYociyT6zZIqwlJny0ufG0hpuexqDWkPw= X-Gm-Gg: AZuq6aLyWh8y6hqkUKldv/12HQhK/UHeEkLnNUlAechrMtBGSWVypTDY7ptIvWSGfRE 5T5LNWj+pByHTGmsnWxiqGOvxVvofUym/I70IkRGDii314qONcfe1TnwxMcprrWE/YbmTo9z4yS ie8Xbilc1LC51jINWF00zcoHAkq733cdHnFo5zfU8w91B2YL/w7iz7djfu4hsHvDjxDRPIZfunD SOh4HI+6eTIIHTay03vfziB4WrRF9qhAa0rmAxMrx0PwWmJCrRa/AlxoLlZb/i/YWQvyZVOL37k Xh44xAaGqqETsd8Y38Ly4+fpcdK4hwqGuARqGsttVXW78YnXXwzORyRM1gg3hPZT4zYE9uwsYv0 j9CDaPtYz98qrBNzq+NYld40mlVPCHPXTb0NaJrCkjDBGFVfW X-Received: by 2002:a05:6a00:1da1:b0:81f:3cd5:2072 with SMTP id d2e1a72fcca58-824b03db639mr2377906b3a.3.1770894033661; Thu, 12 Feb 2026 03:00:33 -0800 (PST) X-Received: by 2002:a05:6a00:1da1:b0:81f:3cd5:2072 with SMTP id d2e1a72fcca58-824b03db639mr2377852b3a.3.1770894033072; Thu, 12 Feb 2026 03:00:33 -0800 (PST) Received: from hu-vpernami-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8249e3bd8e6sm4708348b3a.14.2026.02.12.03.00.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Feb 2026 03:00:32 -0800 (PST) From: Vivek Pernamitta X-Google-Original-From: Vivek Pernamitta Date: Thu, 12 Feb 2026 16:30:22 +0530 Subject: [PATCH v8 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: <20260212-eth_vdev_next-20260211-v8-1-0974b3a8d61b@qti.qualcomm.com> References: <20260212-eth_vdev_next-20260211-v8-0-0974b3a8d61b@qti.qualcomm.com> In-Reply-To: <20260212-eth_vdev_next-20260211-v8-0-0974b3a8d61b@qti.qualcomm.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Manivannan Sadhasivam Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, mhi@lists.linux.dev, linux-arm-msm@vger.kernel.org, Vivek Pernamitta X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1770894024; l=5824; i=vpernami@qti.qualcomm.com; s=20241114; h=from:subject:message-id; bh=g0aEVCZ9DgMaz/0aNYMB+qQrxwyAxE9jfedkPvow5Sg=; b=jBhp71u3BZsYtWvdL+cV0UV1XZXLIKTq0xSE8JGDrhgX5tApfi59D4vUwrzXKKFD0hr+f0r4E obIILcFXnL6CjWp0Ewho+LiYIkY11vv8Bq67Mvg0dGssv5+HiQuy6IP X-Developer-Key: i=vpernami@qti.qualcomm.com; a=ed25519; pk=HDwn8xReb8K52LA6/CJc6S9Zik8gDCZ5LO4Cypff71Y= X-Proofpoint-GUID: R0sRcY3g5pcLCdAa3TpdRsEMV3TkcM6S X-Authority-Analysis: v=2.4 cv=OrBCCi/t c=1 sm=1 tr=0 ts=698db2d3 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=Jnl0CxCd8TTYemsjstoA:9 a=QEXdDO2ut3YA:10 a=IoOABgeZipijB_acs4fv:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: R0sRcY3g5pcLCdAa3TpdRsEMV3TkcM6S X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDA4MSBTYWx0ZWRfX7eEAGcn7ze/l pou+HX6qnFrPGHGon56wzjIJ+jWxEr9Fd0ueRbgAUt5mutaHdz3KDVvrXItf1pwlcE1BmJxm6j2 3MY8EaYgHHEJHVAx9w8nWyU66PD5dlQY/uLgLzrLpL8zlcpMuHefWB+wRXhemaeOV6pQW6mk2TZ 7p2j61r5jmJ8+VDrVQh7b4CDTMrxurf9uVVAizmkj8xHSh7TlQkRA79/vvNYkz8PPgFl+OSgrsU VZwrruehlXQkYXyRlM8+ah0F+Gy2YOSoMjIeh9vFjbIxKFEBRBhTG4DlNmUi6DGLjvFZ43FI0cb +duYq6KuMmVB5zqnlZv8gX/WTdAHs91A9dYxDhtcrKvRz6Wp9QHyZsL8GGpmkY5XEsk6PXbXsZQ e+/+n9pMb4O0kfJyfcxvDlysVMS40ayf5VlzUMqcCT9Snsk5CvQhlqmRZ0IPyx/G5pM0GgGNxqG sb+GfIFPjqqzs0AMsBg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_03,2026-02-11_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 impostorscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120081 From: Vivek Pernamitta 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 IP_SW1, ETH0, and ETH1 network interfaces required for M-plane, NETCONF, and S-plane components. M-plane: Implement DU M-Plane software for non-real-time O-RAN management between O-DU and O-RU using NETCONF/YANG and O-RAN WG4 M-Plane YANG models. Provide capability exchange, configuration management, performance monitoring, and fault management per O-RAN.WG4.TS.MP.0- R004-v18.00. 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 | 67 ++++++++++++++++++++++++++++++++++++++++++-----= ---- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/drivers/net/mhi_net.c b/drivers/net/mhi_net.c index ae169929a9d8e449b5a427993abf68e8d032fae2..aa65b267d5c06c76482eaede097= c500edc1cdf7f 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) { @@ -209,16 +236,20 @@ static void mhi_net_dl_callback(struct mhi_device *mh= i_dev, mhi_netdev->skbagg_head =3D NULL; } =20 - 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->header_ops) { + 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 +337,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 +390,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 @@ -380,10 +415,17 @@ static void mhi_net_remove(struct mhi_device *mhi_dev) =20 static const struct mhi_device_info mhi_hwip0 =3D { .netname =3D "mhi_hwip%d", + .ethernet_if =3D false, }; =20 static const struct mhi_device_info mhi_swip0 =3D { .netname =3D "mhi_swip%d", + .ethernet_if =3D false, +}; + +static const struct mhi_device_info mhi_eth0 =3D { + .netname =3D "eth%d", + .ethernet_if =3D true, }; =20 static const struct mhi_device_id mhi_net_id_table[] =3D { @@ -391,6 +433,9 @@ static const struct mhi_device_id mhi_net_id_table[] = =3D { { .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_SW1", .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