From patchwork Fri Mar 17 08:09:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?WWFuY2hhbyBZYW5nICjmnajlvabotoUp?= X-Patchwork-Id: 6796 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp210133wrt; Fri, 17 Mar 2023 01:13:37 -0700 (PDT) X-Google-Smtp-Source: AK7set+ClE4cNj97St0JfUm7ZwlFo4LbFyRYRU4KCgwRoLIT9gutPwfp3phVk6ULcKsZuzl2fg7b X-Received: by 2002:a17:902:7296:b0:1a0:463d:fd09 with SMTP id d22-20020a170902729600b001a0463dfd09mr6012474pll.1.1679040817296; Fri, 17 Mar 2023 01:13:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679040817; cv=none; d=google.com; s=arc-20160816; b=IA6GwIFB1xruaXhoCAdk7sk6ZpzFGvkVv7luDO7C0yWtcdjQiAz/wsOv+OsUg0hfXj SWAEuWbIsq5PEYyxxfLWvm8HuTd2u2vzLGWsLI7BEhC5LF1pjdskY6SR9ZFYIf2AJLGY iavtvTo47ffXNGJUnpoc0Xj9pkC1o/RkKadeJ+UuUayw7vHwXz4LdQrDsWHL6udqVF20 OhSISzbudl9K0hQ9NmJQeCdGL0Iw1TgvaNWFrRDz74I/B8N0PIgaan9w4lqZQaIRpoHt HVbHu2akPqWuDOcD1CR7QDJgkYbZqHAg+klPVD5r9C5H1P4Aba9dMsnJ4/cQaNOpEPzI 8qBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from :dkim-signature; bh=wPNZGq9769g/pZ0c8S3aTcBp9/DvHhBujsNsv2apsPk=; b=dEC+upmfFTxFlPGcFu17QmZjqfVhDdGKiQA5iVaXTF/17K6GMcjovgibwEaZ2asOLX gRwd4r07dzc5k11xJBFUx5LGkBymWr3tpiDQkJq5s6/naY6efOa8jpkA06Xl1pUzbHh7 wEI0GAqHMMuo6qk3CSjWJSZLVvRoxghrtrvCuuLn94ZA1bRHYVje+cEqJuOuJnAFgt1A 0GDdL+b0GM710+UZFqQMGHWozqRFpybZbJfEYhslCccjHHSqkyyImcC0er7NWlGZjLF1 O6z7Cva7gx7Ls0UOv2Y9Dy5+bELVMr8LT9bekcjH3eqG398+stt3P5zVkoc4IAVeectJ kb2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=tL6hIKqf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bf7-20020a170902b90700b0019abd3a98efsi1774444plb.91.2023.03.17.01.13.23; Fri, 17 Mar 2023 01:13:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=tL6hIKqf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231322AbjCQILT (ORCPT + 99 others); Fri, 17 Mar 2023 04:11:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231363AbjCQILG (ORCPT ); Fri, 17 Mar 2023 04:11:06 -0400 Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD8E9C48BC; Fri, 17 Mar 2023 01:10:38 -0700 (PDT) X-UUID: 258ba47ec49b11ed91027fb02e0f1d65-20230317 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:MIME-Version:Message-ID:Date:Subject:CC:To:From; bh=wPNZGq9769g/pZ0c8S3aTcBp9/DvHhBujsNsv2apsPk=; b=tL6hIKqfHIsamWZu+NwEcsUAph3Hiw7epn2vw5yeKxPGXQnSxQNU612rn/0ulDEZNWd6piIdEPdOD7/4KUw+2mh3eP4owybFnBj2hxmGRIJkhQWzzUCf5g5rdH0J24s/rp+h7T/WF5R1ixLBJY5LTXSzIkB9kvDLnnZ/Kj+p9Uo=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.21,REQID:254263ff-7603-438e-8f60-23978b4e797e,IP:0,U RL:0,TC:0,Content:-25,EDM:0,RT:0,SF:95,FILE:0,BULK:0,RULE:Release_Ham,ACTI ON:release,TS:70 X-CID-INFO: VERSION:1.1.21,REQID:254263ff-7603-438e-8f60-23978b4e797e,IP:0,URL :0,TC:0,Content:-25,EDM:0,RT:0,SF:95,FILE:0,BULK:0,RULE:Spam_GS981B3D,ACTI ON:quarantine,TS:70 X-CID-META: VersionHash:83295aa,CLOUDID:f7ac1af6-ddba-41c3-91d9-10eeade8eac7,B ulkID:2303171610170RKENYNS,BulkQuantity:0,Recheck:0,SF:38|29|28|17|19|48,T C:nil,Content:0,EDM:-3,IP:nil,URL:11|1,File:nil,Bulk:nil,QS:nil,BEC:nil,CO L:0,OSI:0,OSA:0,AV:0 X-CID-BVR: 0,NGT X-CID-BAS: 0,NGT,0,_ X-UUID: 258ba47ec49b11ed91027fb02e0f1d65-20230317 Received: from mtkmbs10n1.mediatek.inc [(172.21.101.34)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 732450788; Fri, 17 Mar 2023 16:10:14 +0800 Received: from mtkmbs11n2.mediatek.inc (172.21.101.187) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.25; Fri, 17 Mar 2023 16:10:13 +0800 Received: from mcddlt001.gcn.mediatek.inc (10.19.240.15) by mtkmbs11n2.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.1118.25 via Frontend Transport; Fri, 17 Mar 2023 16:10:11 +0800 From: Yanchao Yang To: Loic Poulain , Sergey Ryazanov , Johannes Berg , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , netdev ML , kernel ML CC: Intel experts , Chetan , MTK ML , Liang Lu , Haijun Liu , Hua Yang , Ting Wang , Felix Chen , Mingliang Xu , Min Dong , Aiden Wang , Guohao Zhang , Chris Feng , Yanchao Yang , Lambert Wang , Mingchuang Qiao , Xiayu Zhang , Haozhe Chang Subject: [PATCH net-next v4 00/10] net: wwan: tmi: PCIe driver for MediaTek M.2 modem Date: Fri, 17 Mar 2023 16:09:32 +0800 Message-ID: <20230317080942.183514-1-yanchao.yang@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 X-MTK: N X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760601904396332282?= X-GMAIL-MSGID: =?utf-8?q?1760601904396332282?= TMI(T-series Modem Interface) is the PCIe host device driver for MediaTek's modem. The driver uses the WWAN framework infrastructure to create the following control ports and network interfaces for data transactions. * /dev/wwan0at0 - Interface that supports AT commands. * /dev/wwan0mbim0 - Interface conforming to the MBIM protocol. * wwan0-X - Primary network interface for IP traffic. The main blocks in the TMI driver are: * HW layer - Abstracts the hardware bus operations for the device, and provides generic interfaces for the transaction layer to get the device's information and control the device's behavior. It includes: * PCIe - Implements probe, removal and interrupt handling. * MHCCIF (Modem Host Cross-Core Interface) - Provides interrupt channels for bidirectional event notification such as handshake and port enumeration. * Transaction layer - Implements data transactions for the control plane and the data plane. It includes: * DPMAIF (Data Plane Modem AP Interface) - Controls the hardware that provides uplink and downlink queues for the data path. The data exchange takes place using circular buffers to share data buffer addresses and metadata to describe the packets. * CLDMA (Cross Layer DMA) - Manages the hardware used by the port layer to send control messages to the device using MediaTek's CCCI (Cross-Core Communication Interface) protocol. * TX Services - Dispatch packets from the port layer to the device. * RX Services - Dispatch packets to the port layer when receiving packets from the device. * Port layer - Provides control plane and data plane interfaces to userspace. It includes: * Control Plane - Provides device node interfaces for controlling data transactions. * Data Plane - Provides network link interfaces wwanX (0, 1, 2...) for IP data transactions. * Core logic - Contains the core logic to keep the device working. It includes: * FSM (Finite State Machine) - Monitors the state of the device, and notifies each module when the state changes. The compilation of the TMI driver is enabled by the CONFIG_MTK_TMI config option which depends on CONFIG_WWAN. List of contributors: Min Dong Ting Wang Hua Yang Mingliang Xu Felix Chen Aiden Wang Guohao Zhang Chris Feng Yanchao Yang Michael Cai Lambert Wang Mingchuang Qiao Xiayu Zhang Haozhe Chang V4: - Refine the naming of labels paired with goto statements. - Avoid defensive programming, and remove some redundant input parameter checks. - Remove include path declaration from the module Makefile. V3: - Remove exception handling and power management modules, and reduce data plane's features, etc. V2: - Remove wrapper function, use kernel interfaces instead, ex, dma_map_single, dma_pool_zalloc, ... - Refine comments to meet kerneldoc format specification. - Use interfaces in bitfield.h to perform bitmask related operations. - Remove unused functions from patch-1. - Remove patch2 (net: wwan: tmi: Add buffer management). Yanchao Yang (10): net: wwan: tmi: Add PCIe core net: wwan: tmi: Add control plane transaction layer net: wwan: tmi: Add control DMA interface net: wwan: tmi: Add control port net: wwan: tmi: Add FSM thread net: wwan: tmi: Add AT & MBIM WWAN ports net: wwan: tmi: Introduce data plane hardware interface net: wwan: tmi: Add data plane transaction layer net: wwan: tmi: Introduce WWAN interface net: wwan: tmi: Add maintainers and documentation .../networking/device_drivers/wwan/index.rst | 1 + .../networking/device_drivers/wwan/tmi.rst | 48 + MAINTAINERS | 11 + drivers/net/wwan/Kconfig | 14 + drivers/net/wwan/Makefile | 1 + drivers/net/wwan/mediatek/Makefile | 18 + drivers/net/wwan/mediatek/mtk_cldma.c | 280 ++ drivers/net/wwan/mediatek/mtk_cldma.h | 160 + drivers/net/wwan/mediatek/mtk_common.h | 30 + drivers/net/wwan/mediatek/mtk_ctrl_plane.c | 418 +++ drivers/net/wwan/mediatek/mtk_ctrl_plane.h | 111 + drivers/net/wwan/mediatek/mtk_data_plane.h | 101 + drivers/net/wwan/mediatek/mtk_dev.c | 50 + drivers/net/wwan/mediatek/mtk_dev.h | 217 ++ drivers/net/wwan/mediatek/mtk_dpmaif.c | 2864 +++++++++++++++++ drivers/net/wwan/mediatek/mtk_dpmaif_drv.h | 201 ++ drivers/net/wwan/mediatek/mtk_fsm.c | 844 +++++ drivers/net/wwan/mediatek/mtk_fsm.h | 145 + drivers/net/wwan/mediatek/mtk_port.c | 1066 ++++++ drivers/net/wwan/mediatek/mtk_port.h | 231 ++ drivers/net/wwan/mediatek/mtk_port_io.c | 547 ++++ drivers/net/wwan/mediatek/mtk_port_io.h | 45 + drivers/net/wwan/mediatek/mtk_wwan.c | 511 +++ .../wwan/mediatek/pcie/mtk_cldma_drv_t800.c | 930 ++++++ .../wwan/mediatek/pcie/mtk_cldma_drv_t800.h | 22 + .../wwan/mediatek/pcie/mtk_dpmaif_drv_t800.c | 1545 +++++++++ .../wwan/mediatek/pcie/mtk_dpmaif_reg_t800.h | 319 ++ drivers/net/wwan/mediatek/pcie/mtk_pci.c | 982 ++++++ drivers/net/wwan/mediatek/pcie/mtk_pci.h | 144 + drivers/net/wwan/mediatek/pcie/mtk_reg.h | 80 + 30 files changed, 11936 insertions(+) create mode 100644 Documentation/networking/device_drivers/wwan/tmi.rst create mode 100644 drivers/net/wwan/mediatek/Makefile create mode 100644 drivers/net/wwan/mediatek/mtk_cldma.c create mode 100644 drivers/net/wwan/mediatek/mtk_cldma.h create mode 100644 drivers/net/wwan/mediatek/mtk_common.h create mode 100644 drivers/net/wwan/mediatek/mtk_ctrl_plane.c create mode 100644 drivers/net/wwan/mediatek/mtk_ctrl_plane.h create mode 100644 drivers/net/wwan/mediatek/mtk_data_plane.h create mode 100644 drivers/net/wwan/mediatek/mtk_dev.c create mode 100644 drivers/net/wwan/mediatek/mtk_dev.h create mode 100644 drivers/net/wwan/mediatek/mtk_dpmaif.c create mode 100644 drivers/net/wwan/mediatek/mtk_dpmaif_drv.h create mode 100644 drivers/net/wwan/mediatek/mtk_fsm.c create mode 100644 drivers/net/wwan/mediatek/mtk_fsm.h create mode 100644 drivers/net/wwan/mediatek/mtk_port.c create mode 100644 drivers/net/wwan/mediatek/mtk_port.h create mode 100644 drivers/net/wwan/mediatek/mtk_port_io.c create mode 100644 drivers/net/wwan/mediatek/mtk_port_io.h create mode 100644 drivers/net/wwan/mediatek/mtk_wwan.c create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_cldma_drv_t800.c create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_cldma_drv_t800.h create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_dpmaif_drv_t800.c create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_dpmaif_reg_t800.h create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.c create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.h create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_reg.h