From patchwork Fri Aug 18 16:38:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 715031 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3570DC7EE2C for ; Fri, 18 Aug 2023 16:42:31 +0000 (UTC) Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 98BC4E93; Fri, 18 Aug 2023 18:41:39 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 98BC4E93 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1692376949; bh=A5gy8AlwI1bM/6pbQN6xN09ieGONbAOBnreq327GgSA=; h=From:To:Cc:Subject:Date:List-Id:List-Archive:List-Help:List-Owner: List-Post:List-Subscribe:List-Unsubscribe:From; b=Ctt/KFYTwB34cPYCdO0kvdFgW7PdkuVVAPdRtqOvWYuGaqQrRJyVuwzmcpQ1oE5EE b/Dh0MCFeO2AWke7FLdoOj8lo3usxS11DfIza9mDlVz7klNiI2xWkVNZU5KTaInANI sUn+q2KnBqJGghOTkfO4Z0q6FHP2TPYkcJd6r1lE= Received: by alsa1.perex.cz (Postfix, from userid 50401) id EA2ECF8059F; Fri, 18 Aug 2023 18:40:17 +0200 (CEST) Received: from mailman-core.alsa-project.org (mailman-core.alsa-project.org [10.254.200.10]) by alsa1.perex.cz (Postfix) with ESMTP id 26106F8059F; Fri, 18 Aug 2023 18:40:17 +0200 (CEST) Received: by alsa1.perex.cz (Postfix, from userid 50401) id D017BF80558; Fri, 18 Aug 2023 18:40:09 +0200 (CEST) Received: from pegase1.c-s.fr (unknown [90.115.179.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 90BA6F80027 for ; Fri, 18 Aug 2023 18:40:02 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 90BA6F80027 Received: from localhost (mailhub3.si.c-s.fr [192.168.12.233]) by localhost (Postfix) with ESMTP id 4RS6zd3Vwdz9vh6; Fri, 18 Aug 2023 18:39:57 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ok8P6jc0Im6f; Fri, 18 Aug 2023 18:39:57 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 4RS6zb6BlNz9vh2; Fri, 18 Aug 2023 18:39:55 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id CBB398B763; Fri, 18 Aug 2023 18:39:55 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id 5beDYZ15lM4Q; Fri, 18 Aug 2023 18:39:55 +0200 (CEST) Received: from PO20335.IDSI0.si.c-s.fr (PO17626.IDSI0.si.c-s.fr [172.19.54.29]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 2064B8B76C; Fri, 18 Aug 2023 18:39:55 +0200 (CEST) Received: from PO20335.IDSI0.si.c-s.fr (localhost [127.0.0.1]) by PO20335.IDSI0.si.c-s.fr (8.17.1/8.16.1) with ESMTPS id 37IGdnC1141935 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 18 Aug 2023 18:39:49 +0200 Received: (from chleroy@localhost) by PO20335.IDSI0.si.c-s.fr (8.17.1/8.17.1/Submit) id 37IGdfGJ141922; Fri, 18 Aug 2023 18:39:41 +0200 X-Authentication-Warning: PO20335.IDSI0.si.c-s.fr: chleroy set sender to christophe.leroy@csgroup.eu using -f From: Christophe Leroy 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 , Randy Dunlap 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 v4 00/28] Add support for QMC HDLC, framer infrastruture and PEF2256 framer (v4) Date: Fri, 18 Aug 2023 18:38:54 +0200 Message-ID: X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1692376733; l=10866; i=christophe.leroy@csgroup.eu; s=20211009; h=from:subject:message-id; bh=835G2+Dp1ba8DphKmbFdPRBzL9um9unEywPAxrJCQm4=; b=5997gMHilOeMKEtdjViSSuw8u3fSBtNmAMIrRP3FiSsrVAJNLPDw4ypo8RmXIPrGZoappExBe ANDgcgUJ5EBDsC0hs5U1QAqDFXb5s53H6/6hBXFlU4ImeGfN/sjH0W5 X-Developer-Key: i=christophe.leroy@csgroup.eu; a=ed25519; pk=HIzTzUj91asvincQGOFx6+ZF5AoUuP9GdOtQChs7Mm0= Message-ID-Hash: BXYQNRSGXFSGMOL4SOW4YBONRD2KP6IE X-Message-ID-Hash: BXYQNRSGXFSGMOL4SOW4YBONRD2KP6IE X-MailFrom: christophe.leroy@csgroup.eu X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-alsa-devel.alsa-project.org-0; header-match-alsa-devel.alsa-project.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.8 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Herve Codina Hi, TLDR: This is a resend of v3 with a build failure fix in patch 21. No other changes. 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, 3, 4) 2) Introduce the QMC HDLC driver (patches 5, 6, 7) 3) Add QMC dynamic timeslot support (patches 8 - 18) 4) Add timeslots change support in QMC HDLC (patch 19) 5) Introduce framer infrastructure (patch 20) 6) Add PEF2256 framer provider (patches 11, 22, 23, 24, 25) 7) Add framer codec as a framer consumer (patch 26) 8) Add framer support as a framer consumer in QMC HDLC (patch 27, 28) 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. Compare to the previous iteration https://lore.kernel.org/linux-kernel/20230726150225.483464-1-herve.codina@bootlin.com/ This v3 series mainly: - Fixes some implementation details. - Adds a new patch (patch 5) to remove existing inline keyword in the QMC driver. - Squashes patches related to the QMC HDLC binding together. 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/ Changes v3 -> v4 - Fixes build failure with CONFIG_MODULES in patch 21 (net: wan: Add framer framework support) Changes v2 -> v3 - Patches 1, 2, 3, 4 Add 'Reviewed-by: Christophe Leroy ' - New patch Remove inline keyword from the existing registers accessors helpers - Patch 6 (patches 5, 27 in v2) Update the binding title Squash patch 27 - Patch 7 (patch 6 in v2) Remove the cast in netdev_to_qmc_hdlc() Add 'Reviewed-by: Christophe Leroy ' - Patch 8 (patch 7 in v2): No change - Patches 9, 10 (patches 8, 9 in v2) Add 'Reviewed-by: Christophe Leroy ' - Patch 11 (patch 10 in v2) Remove inline keyword from the introduced qmc_clrsetbits16() helper Add 'Reviewed-by: Christophe Leroy ' - Patches 12, 13, 14, 15, 16, 17, 18, 19, 20 Add 'Reviewed-by: Christophe Leroy ' - Patch 21 (patch 20 in v2) Remove unneeded framer NULL pointer check Add 'Reviewed-by: Christophe Leroy ' - Patch 22 (patch 21 in v2) Change sclkr and sclkx clocks description Remove the framer phandle property from the framer subnodes (ie. from framer-codec nodes) - Patch 23 (patch 22 in v2) Initialize 'disabled' variable at declaration Fix commit log Add 'Reviewed-by: Christophe Leroy ' - Patch 24 (patch 23 in v2) Remove inline keyword from the existing registers accessors helpers Use dev_warn_ratelimited() in default interrupt handler Add 'Reviewed-by: Christophe Leroy ' - Patch 25 (patch 24 in v2) Replace #include "linux/bitfield.h" by #include Fold the pinctrl anonymous struct into the struct pef2256_pinctrl Update commit log Add 'Reviewed-by: Christophe Leroy ' - Patch 26 (patch 25 in v2) Add 'Reviewed-by: Christophe Leroy ' - Patch 27 (patch 26 in v2) Fix error message Changed the ch.max computation in framer_dai_hw_rule_channels_by_format() Add 'Reviewed-by: Christophe Leroy ' - Patch 28 Add 'Reviewed-by: Christophe Leroy ' Changes v1 -> v2 - Patches 1, 2 (New in v2) Fix __iomem addresses declaration - Patch 19 (17 in v1) Fix a compilation warning - Patch 26 (24 in v1) Fix a typo in Kconfig file Fix issues raised by sparse (make C=1) Herve Codina (28): soc: fsl: cpm1: tsa: Fix __iomem addresses declaration soc: fsl: cpm1: qmc: Fix __iomem addresses declaration soc: fsl: cpm1: qmc: Fix rx channel reset soc: fsl: cpm1: qmc: Extend the API to provide Rx status soc: fsl: cpm1: qmc: Remove inline function specifiers 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 net: wan: fsl_qmc_hdlc: Add framer support .../devicetree/bindings/net/fsl,qmc-hdlc.yaml | 46 + .../bindings/net/lantiq,pef2256.yaml | 219 +++++ MAINTAINERS | 17 + drivers/mfd/mfd-core.c | 17 +- 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 | 886 ++++++++++++++++++ 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 | 308 ++++++ drivers/soc/fsl/qe/qmc.c | 501 ++++++++-- drivers/soc/fsl/qe/tsa.c | 22 +- include/linux/framer/framer-provider.h | 194 ++++ include/linux/framer/framer.h | 199 ++++ 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 | 413 ++++++++ sound/soc/fsl/fsl_qmc_audio.c | 2 +- 27 files changed, 4872 insertions(+), 122 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