From patchwork Tue Jul 25 09:23:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herve Codina X-Patchwork-Id: 12567 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp2356721vqg; Tue, 25 Jul 2023 02:58:31 -0700 (PDT) X-Google-Smtp-Source: APBJJlHF2fb/flTpe9NL3GxVrfgO/XwkI39tQRaoJM5hU3hDDIxeJeliCAtzY6rzUPxV11eydPLQ X-Received: by 2002:a17:907:2c68:b0:994:1fee:3065 with SMTP id ib8-20020a1709072c6800b009941fee3065mr12532699ejc.15.1690279110846; Tue, 25 Jul 2023 02:58:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690279110; cv=none; d=google.com; s=arc-20160816; b=ME5/PCokgUyHhg7gXcPvcFRie84mVgikI5eTUrlEhH3PCk0D7/KrnxoGZ0TLKcRVNb B/An4dCya5nMoOocKZtQ9d21dPG2EQlIg8K8YMsXPlFkJEiuMbEhzEg8VvtQGRd2Qqly 6saaCGxergazCho86G5KnQSfjCocRw/ZevqwtfCnHM4WpZ+d7rITHtj+Dm4Ev09HXgN+ 0O7p1LgbZTHZ8a3hO7gRCF/UUdeESAmj1Pkb++cgulMWynhw6sXEmnCRcIWxmxwbnoE3 Nsao6TPZHKVZzHeFlPOw2SKSuOjtIk2tcK52VXtLKvxT0WQWMk5AGi25m02+W12g5G9R IrPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=riOX6rIatkFwyFiJq7u0RSBgvHWDaUFJMYsDyR1VXlk=; fh=j5z+1OhFuGBFoHpqsKfNW8PvbyYDiDyztgOSDrYZWKg=; b=qPs2IEUvduWwI8oxZdrMlwrAF73v7oPRSUnuq3fWzRGZRCmL8XEBW+Xmac/jks13lx +GTIHmsRRepMpZX+AaD+XcAd0YHW/bnKoSqOOTBWYg+Hme3gPpJvUoZpjjPqZmdUuWWk qg8+txiJ85r3b8310dUvj7qebRVm9o28DS8mAVt6uD8K1/t9zfUj8sfpMvqgXLMY/Bjo y2k00KjVO5tN3gy6s3jtx2+BzI/DXUOJIBn+0zi96QaLDrNfIjyK4m7kHrO8WwfkrUDZ MFce2YkuvY8pI0oxDSNGqZvYXWpGy3rD07FJQfwxz+HaPeZQxMXW6mUYVigUDM46AHlo 2D8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=UhvXRFTc; 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=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m25-20020a170906161900b0099238b86eecsi7531307ejd.566.2023.07.25.02.58.07; Tue, 25 Jul 2023 02:58:30 -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=@bootlin.com header.s=gm1 header.b=UhvXRFTc; 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=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232171AbjGYJZD (ORCPT + 99 others); Tue, 25 Jul 2023 05:25:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231222AbjGYJZB (ORCPT ); Tue, 25 Jul 2023 05:25:01 -0400 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 30509E4D; Tue, 25 Jul 2023 02:24:57 -0700 (PDT) Received: by mail.gandi.net (Postfix) with ESMTPA id 43FFA40005; Tue, 25 Jul 2023 09:24:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1690277095; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=riOX6rIatkFwyFiJq7u0RSBgvHWDaUFJMYsDyR1VXlk=; b=UhvXRFTcpzeYtjOMKD7VpEpOLe9hIpVIzKE0Gks4W5C9gUjskfrY0amYCyGGadiRvcfh6g hrCeS30hqbwHnl8L8RtcVmBcxrOFztUZNm+wl+z5UiUKyNi/k12XdycWRyfAjeV9ImkHi/ WcCNRbCcAPoySfI4B96OWRWUFHR6s24Xc2ewKkFFrQ2ZXnMO7yWeCob9e4YFpPUoiD0N31 B1bdSQ1/GekeohVaPP/mDEXrf6h/UCcQUKOWU8b+chTVrTPe6WYWqBkA2d/tw2Yf7ELvDZ GbxMWc6UrWixB2NxQUIgDZjm4m/goSyZ/Yt7uCRUMXoBj0LYAwjwi88k+e3krw== From: Herve Codina To: Herve Codina , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Linus Walleij , Qiang Zhao , Li Yang , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen , Christophe Leroy Cc: netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, alsa-devel@alsa-project.org, Thomas Petazzoni Subject: [PATCH 00/26] Add support for QMC HDLC, framer infrastruture and PEF2256 framer Date: Tue, 25 Jul 2023 11:23:36 +0200 Message-ID: <20230725092417.43706-1-herve.codina@bootlin.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 X-GND-Sasl: herve.codina@bootlin.com X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772386108961447546 X-GMAIL-MSGID: 1772386108961447546 Hi, I have a system where I need to handle an HDLC interface and some audio data. The HDLC data are transferred using a TDM bus on which a PEF2256 (E1/T1 framer) is present. The PEF2256 transfers data from/to the TDM bus to/from the E1 line. This PEF2256 is connected to a PowerQUICC SoC for the control path and the TDM is connected to the SoC (QMC component) for the data path. From the QMC HDLC driver, I need to handle HDLC data using the QMC, carrier detection using the PEF2256 (E1 line carrier) and set/get some PEF2256 configuration. The QMC HDLC driver considers the PEF2256 as a generic framer. It performs operations that involve the PEF2256 through the generic framer API. The audio data are exchanged with the PEF2256 using a CPU DAI connected to the TDM bus through the QMC and the PEF2256 needs to be seen as a codec in order to be linked to the CPU DAI. The codec handles the carrier detection using the PEF2256 and reports the carrier state to the ALSA subsystem using the ASoC jack detection. The codec, even if instantiated by the PEF2256 driver, considers the PEF2256 as a generic framer. The generic framer has: - 2 consumers (QMC HDLC drv and codec) - 1 provider (PEF2256) So, the design is the following: +------------------+ +---------+ | QMC | <- TDM -> | PEF2256 | <-> E1 +---------+ | +-------------+ | | | | CPU DAI | <-data--> | QMC channel | | | | +---------+ | +-------------+ | | | +--------------+ | +-------------+ | | | | QMC HDLC drv | <-data--> | QMC channel | | | | +--------------+ | +-------------+ | | | ^ +------------------+ | | | +--------+ +-------------+ | | +-> | framer | <-> | PEF2256 drv | <- local bus ->| | | | | | +---------+ +-> | | | | | +--------+ | +-------+ | +-------------------> | codec | | | +-------+ | +-------------+ Further more, the TDM timeslots used by the QMC HDLC driver need to be configured at runtime (QMC dynamic timeslots). Several weeks ago, I sent two series related to this topic: - Add the Lantiq PEF2256 audio support [1] - RFC Add support for QMC HDLC and PHY [2] This current series is a rework of these two series taking into account feedbacks previously received. In order to implement all of this, I do the following: 1) Perform some fixes (patches 1, 2) 2) Introduce the QMC HDLC driver (patches 3, 4, 5) 3) Add QMC dynamic timeslot support (patches 6 - 16) 4) Add timeslots change support in QMC HDLC (patch 17) 5) Introduce framer infrastructure (patch 18) 6) Add PEF2256 framer provider (patches 19, 20, 21, 22, 23) 7) Add framer codec as a framer consumer (patch 24) 8) Add framer support as a framer consumer in QMC HDLC (patch 25, 26) The series contains the full story and detailed modifications. If needed, the series can be split and/or commmits can be squashed. Let me know. Best regards, Hervé [1]: https://lore.kernel.org/all/20230417171601.74656-1-herve.codina@bootlin.com/ [2]: https://lore.kernel.org/all/20230323103154.264546-1-herve.codina@bootlin.com/ Herve Codina (26): soc: fsl: cpm1: qmc: Fix rx channel reset soc: fsl: cpm1: qmc: Extend the API to provide Rx status dt-bindings: net: Add support for QMC HDLC net: wan: Add support for QMC HDLC MAINTAINERS: Add the Freescale QMC HDLC driver entry soc: fsl: cpm1: qmc: Introduce available timeslots masks soc: fsl: cpm1: qmc: Rename qmc_setup_tsa* to qmc_init_tsa* soc: fsl: cpm1: qmc: Introduce qmc_chan_setup_tsa* soc: fsl: cpm1: qmc: Remove no more needed checks from qmc_check_chans() soc: fsl: cpm1: qmc: Check available timeslots in qmc_check_chans() soc: fsl: cpm1: qmc: Add support for disabling channel TSA entries soc: fsl: cpm1: qmc: Split Tx and Rx TSA entries setup soc: fsl: cpm1: qmc: Introduce is_tsa_64rxtx flag soc: fsl: cpm1: qmc: Handle timeslot entries at channel start() and stop() soc: fsl: cpm1: qmc: Remove timeslots handling from setup_chan() soc: fsl: cpm1: qmc: Introduce functions to change timeslots at runtime wan: qmc_hdlc: Add runtime timeslots changes support net: wan: Add framer framework support dt-bindings: net: Add the Lantiq PEF2256 E1/T1/J1 framer mfd: core: Ensure disabled devices are skiped without aborting net: wan: framer: Add support for the Lantiq PEF2256 framer pinctrl: Add support for the Lantic PEF2256 pinmux MAINTAINERS: Add the Lantiq PEF2256 driver entry ASoC: codecs: Add support for the framer codec dt-bindings: net: fsl,qmc-hdlc: Add framer support net: wan: fsl_qmc_hdlc: Add framer support .../devicetree/bindings/net/fsl,qmc-hdlc.yaml | 46 + .../bindings/net/lantiq,pef2256.yaml | 226 +++++ MAINTAINERS | 17 + drivers/mfd/mfd-core.c | 18 +- drivers/net/wan/Kconfig | 14 + drivers/net/wan/Makefile | 3 + drivers/net/wan/framer/Kconfig | 35 + drivers/net/wan/framer/Makefile | 7 + drivers/net/wan/framer/framer-core.c | 935 ++++++++++++++++++ drivers/net/wan/framer/pef2256/Makefile | 8 + drivers/net/wan/framer/pef2256/pef2256-regs.h | 250 +++++ drivers/net/wan/framer/pef2256/pef2256.c | 880 +++++++++++++++++ drivers/net/wan/fsl_qmc_hdlc.c | 820 +++++++++++++++ drivers/pinctrl/Kconfig | 14 + drivers/pinctrl/Makefile | 1 + drivers/pinctrl/pinctrl-pef2256-regs.h | 65 ++ drivers/pinctrl/pinctrl-pef2256.c | 310 ++++++ drivers/soc/fsl/qe/qmc.c | 467 +++++++-- include/linux/framer/framer-provider.h | 194 ++++ include/linux/framer/framer.h | 215 ++++ include/linux/framer/pef2256.h | 31 + include/soc/fsl/qe/qmc.h | 25 +- sound/soc/codecs/Kconfig | 15 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/framer-codec.c | 423 ++++++++ sound/soc/fsl/fsl_qmc_audio.c | 2 +- 26 files changed, 4929 insertions(+), 94 deletions(-) create mode 100644 Documentation/devicetree/bindings/net/fsl,qmc-hdlc.yaml create mode 100644 Documentation/devicetree/bindings/net/lantiq,pef2256.yaml create mode 100644 drivers/net/wan/framer/Kconfig create mode 100644 drivers/net/wan/framer/Makefile create mode 100644 drivers/net/wan/framer/framer-core.c create mode 100644 drivers/net/wan/framer/pef2256/Makefile create mode 100644 drivers/net/wan/framer/pef2256/pef2256-regs.h create mode 100644 drivers/net/wan/framer/pef2256/pef2256.c create mode 100644 drivers/net/wan/fsl_qmc_hdlc.c create mode 100644 drivers/pinctrl/pinctrl-pef2256-regs.h create mode 100644 drivers/pinctrl/pinctrl-pef2256.c create mode 100644 include/linux/framer/framer-provider.h create mode 100644 include/linux/framer/framer.h create mode 100644 include/linux/framer/pef2256.h create mode 100644 sound/soc/codecs/framer-codec.c