From patchwork Thu Dec 10 03:39:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 11963107 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 51F28C4167B for ; Thu, 10 Dec 2020 03:40:28 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CB72B2184D for ; Thu, 10 Dec 2020 03:40:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CB72B2184D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=5MSI9uYH1/fl15MEWgpouJ6AF7Aa3Q3tjDiOGqgukWU=; b=eN7L3Jhq2jBiWe8N4OUUNId2bL IuehN5DSlhWJakPQ/l/41Kb3wUC6Z2HIjvZHiY1A7q1POO214rUfsyEGcFgpUKVVhbZSPdV9zToNJ GJSntz3OiKmWCKZuK+Co/RNK0eP0y6xaAJPnDRStxBCWk0RPR/EULIUJT6GCD+75wdlo3fr1rFacF 20AueqChefvSWFpeZnAZKOXh8x3ScEtGpVdTj9jiPK4sQn/2nza+8qdJDVVzTe2XvnbChyUGSlwjW F2hP1pZdST+Dfev89Ubi8a+hFKX7qFv0hoBhpV13ueEPVM+LRlpAty4qjnPjSSfplfH3E6OvFBS12 omg6RPQQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knCoV-0004XK-1z; Thu, 10 Dec 2020 03:40:19 +0000 Received: from esa4.hgst.iphmx.com ([216.71.154.42]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1knCoR-0004VV-QP for linux-riscv@lists.infradead.org; Thu, 10 Dec 2020 03:40:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1607571615; x=1639107615; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=AOVsh0+S5vlV5NJoh60iMGpbXHnoQoTeIoycMJBgF3I=; b=Z2hVACkE8vkxd1LPKd0pidHxgg80wlAZ1DtooTPcoMxRuaLQvSwonNvE h4EvGIz0etGcHlrC9uFCIdUJ1gHPbHfmku33Xh79X0CydT9FWA8sXAGAj 8Q+qv+8730rGskW4BeA0MjrkhMpDts7mLSFGf0hGfMTrN6YpZgrOdZSmj 67tn+MJupHn7YU8gEviaeqNsPQ7bXtwt5fMqseESCns3LheUuUc9sK0Js fhJ0Yy7aqEku2gsIVeADlMAZLLwxl5y1Idzt2hoB1+Ie0gZT9cbQDhNh/ yNoSWxX88xcRpTWQs+Smx4oFhjyu66qb3PNDokuM4hM4o929TcHYKuhmj A==; IronPort-SDR: u9EYnpnMHMCJzKDZ7eKnu6fYIu18P5qt0uYbW0cLLr5GOOVeXT/2Qi7WSEtORIdlrQRlC5bGVh FcQn/nGPnnSZZK/OmZqbncFWaGJ4jT41ki6IMt7mCAO5wphUW0sFUPbgTnzgSNPVgs+UUUMyDa AxMsCiNsPY/EsuQjolnTBpt/Ybm8+mCKH6A2+pFGBiEi/qRj1yZc0ZkYRvhh2/P+KPugPVWkWE Dl90mEax0yu0iG4JlgPoIGnt96SbbiKJx9kbwyyfBo0aWyjSqoHHyYF+vUB+Jt9ESkBefHGeWZ LrI= X-IronPort-AV: E=Sophos;i="5.78,407,1599494400"; d="scan'208";a="154813102" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 10 Dec 2020 11:40:13 +0800 IronPort-SDR: fvRdhkCOcMa/iaupyWQLiVzk/DABQFPfNCCAijl9uA53TNXroot9KX6MgUMgaJwGrc4cY59xrb VIpwVeiih3uTjm6usJJLS8osC8eSH7hpk= Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Dec 2020 19:24:09 -0800 IronPort-SDR: PwK+Sp6EEeVEmnCBjtU+QXWWZhbLzGMdlS515ynQu5EkjFGDYfwtp9MuMROgbdBgP5hWCe2WBq YsukJhp0j+cg== WDCIronportException: Internal Received: from wdapacbjl0003.my.asia.wdc.com (HELO twashi.fujisawa.hgst.com) ([10.84.71.173]) by uls-op-cesaip01.wdc.com with ESMTP; 09 Dec 2020 19:40:11 -0800 From: Damien Le Moal To: Palmer Dabbelt , linux-riscv@lists.infradead.org, Rob Herring , devicetree@vger.kernel.org, Stephen Boyd , linux-clk@vger.kernel.org, Linus Walleij , linux-gpio@vger.kernel.org, Philipp Zabel Subject: [PATCH v7 00/22] RISC-V Kendryte K210 support improvements Date: Thu, 10 Dec 2020 12:39:41 +0900 Message-Id: <20201210034003.222297-1-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201209_224016_063830_5CADE01C X-CRM114-Status: GOOD ( 24.68 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sean Anderson Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org This series of patches improves support for boards based on the Canaan Kendryte K210 RISC-V dual core SoC. Minimal support for this SoC is already included in the kernel. These patches complete it, enabling support for most peripherals present on the SoC as well as introducing device trees for the various K210 boards available on the market today from SiPeed and Kendryte. Pathes 1 to 4 are various fixes for riscv arch code and riscv dependent devices. Of note here is patch 3 which fix system calls execution in the no MMU case, and patch 4 which simplifies DTB builtin handling. Patch 5 fixes naming of directories and configuration options to use the K210 SoC vendor name (Canaan) instead of its branding name (Kendryte). Patch 6 is a preparatory patch cleaning up the K210 system controller driver to facilitate introducing the SoC clock driver. The following patches 7 to 11 document device tree bindings for the SoC drivers. The implementation of these drivers is provided in patches 12, 13 and 14, respectively implementing the SoC clock driver, reset controller and SOC pin function control. Patches 15 to 20 update the existing K210 device tree and add new device tree files for several K210 based boards: MAIX Bit, MAIXDUINO, MAIX Dock and MAIX Go boards from SiPeed and the KD233 development board from Canaan. Finally the last two patches updates the k210 nommu defconfig to include the newly implemented drivers and provide a new default configuration file enabling SD card support. A lot of the work on the device tree and on the K210 drivers come from the work by Sean Anderson for the U-Boot project support of the K210 SoC. Sean also helped with debugging many aspects of this series. A tree with all patches applied is available here: https://github.com/damien-lemoal/linux, k210-sysctl-v20 branch. A demonstration of this series used on a SiPeed MAIX Dock board together with an I2C servo controller can be seen here: https://damien-lemoal.github.io/linux-robot-arm/#example This tree was used to build userspace busybox environment image that is then copied onto an SD card formatted with ext2: https://github.com/damien-lemoal/buildroot Of note is that running this userspace environment requires a revert of commit 2217b982624680d19a80ebb4600d05c8586c4f96 introduced during the 5.9 development cycle. Without this revert, execution of the init process fails. A problem with the riscv port of elf2flt is suspected but not confirmed. I am now starting to investigate this problem. Reviews and comments are as always much welcome. Changes from v6: * Annotate struct platform_driver variables with __refdata to avoid section mismatch compilation errors * Add empty sentinel entry to of_device_id tables of the sysctl, reset and pinctrl drivers. Changes from v5: * Addressed Philipp's comment on the reset controller driver * Added patch 6 to reduce the size of the clock driver patch (now patch 12). Changes from v4: * Simplified reset controller driver using of_xlate callback as suggested by Philipp * Fixed compilation error when using other configs than one of the nommu_k210 defconfigs. * Addressed most clock driver comments from Stephen. * Removed CONFIG_GPIO_SYSFS from defconfigs * Rebased on 5.10-rc7 Changes from V3: * Add one entry per driver in MAINTAINERS file Changes from V2: * Add MAINTAINERS file entry for the SoC support, listing myself as maintainer. * Removed use of postcore_initcall() for declaring the drivers, using the regular builtin_platform_driver() instead. * Fixed fpio pinctrl driver bindings documentation as commented by Geert: removed input-schmitt and added input-schmitt-disable, fixed typo and added input-disable and output-disable. * Fixed device tree to have cs-gpios active low, as per the default, as active high necessity was an artifact of the gpio level double inversion bug fixed recently. * Removed CONFIG_VT from defconfigs to reduce the kernel image size as suggested by Geert. Changes from v1: * Improved DT bindings documentation * SPI and GPIO patches removed from this series (and being processed directly through the relevant subsystems directly) * Improved device trees * Various cleanup and improvments of the drivers Damien Le Moal (22): riscv: Fix kernel time_init() riscv: Fix sifive serial driver riscv: Enable interrupts during syscalls with M-Mode riscv: Fix builtin DTB handling riscv: Use vendor name for K210 SoC support riscv: cleanup Canaan Kendryte K210 sysctl driver dt-bindings: Add Canaan vendor prefix dt-binding: clock: Document canaan,k210-clk bindings dt-bindings: reset: Document canaan,k210-rst bindings dt-bindings: pinctrl: Document canaan,k210-fpioa bindings dt-binding: mfd: Document canaan,k210-sysctl bindings riscv: Add Canaan Kendryte K210 clock driver riscv: Add Canaan Kendryte K210 reset controller riscv: Add Canaan Kendryte K210 FPIOA driver riscv: Update Canaan Kendryte K210 device tree riscv: Add SiPeed MAIX BiT board device tree riscv: Add SiPeed MAIX DOCK board device tree riscv: Add SiPeed MAIX GO board device tree riscv: Add SiPeed MAIXDUINO board device tree riscv: Add Kendryte KD233 board device tree riscv: Update Canaan Kendryte K210 defconfig riscv: Add Canaan Kendryte K210 SD card defconfig .../bindings/clock/canaan,k210-clk.yaml | 54 + .../bindings/mfd/canaan,k210-sysctl.yaml | 116 ++ .../bindings/pinctrl/canaan,k210-fpioa.yaml | 171 +++ .../bindings/reset/canaan,k210-rst.yaml | 40 + .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 23 + arch/riscv/Kconfig.socs | 33 +- arch/riscv/Makefile | 2 +- arch/riscv/boot/dts/Makefile | 2 +- arch/riscv/boot/dts/canaan/Makefile | 5 + arch/riscv/boot/dts/canaan/k210.dtsi | 622 ++++++++++ arch/riscv/boot/dts/canaan/k210_generic.dts | 46 + arch/riscv/boot/dts/canaan/k210_kd233.dts | 178 +++ arch/riscv/boot/dts/canaan/k210_maix_bit.dts | 227 ++++ arch/riscv/boot/dts/canaan/k210_maix_dock.dts | 229 ++++ arch/riscv/boot/dts/canaan/k210_maix_go.dts | 237 ++++ arch/riscv/boot/dts/canaan/k210_maixduino.dts | 201 ++++ arch/riscv/boot/dts/kendryte/Makefile | 4 - arch/riscv/boot/dts/kendryte/k210.dts | 23 - arch/riscv/boot/dts/kendryte/k210.dtsi | 125 -- arch/riscv/configs/nommu_k210_defconfig | 39 +- .../riscv/configs/nommu_k210_sdcard_defconfig | 93 ++ arch/riscv/include/asm/soc.h | 38 - arch/riscv/kernel/entry.S | 9 + arch/riscv/kernel/soc.c | 27 - arch/riscv/kernel/time.c | 3 + arch/riscv/mm/init.c | 6 +- drivers/clk/Kconfig | 8 + drivers/clk/Makefile | 1 + drivers/clk/clk-k210.c | 1005 +++++++++++++++++ drivers/pinctrl/Kconfig | 13 + drivers/pinctrl/Makefile | 1 + drivers/pinctrl/pinctrl-k210.c | 985 ++++++++++++++++ drivers/reset/Kconfig | 10 + drivers/reset/Makefile | 1 + drivers/reset/reset-k210.c | 131 +++ drivers/soc/Kconfig | 2 +- drivers/soc/Makefile | 2 +- drivers/soc/canaan/Kconfig | 12 + drivers/soc/canaan/Makefile | 3 + drivers/soc/canaan/k210-sysctl.c | 78 ++ drivers/soc/kendryte/Kconfig | 14 - drivers/soc/kendryte/Makefile | 3 - drivers/soc/kendryte/k210-sysctl.c | 260 ----- drivers/tty/serial/sifive.c | 1 + include/dt-bindings/clock/k210-clk.h | 55 +- include/dt-bindings/pinctrl/k210-fpioa.h | 276 +++++ include/dt-bindings/reset/k210-rst.h | 42 + include/soc/canaan/k210-sysctl.h | 43 + 49 files changed, 4970 insertions(+), 531 deletions(-) create mode 100644 Documentation/devicetree/bindings/clock/canaan,k210-clk.yaml create mode 100644 Documentation/devicetree/bindings/mfd/canaan,k210-sysctl.yaml create mode 100644 Documentation/devicetree/bindings/pinctrl/canaan,k210-fpioa.yaml create mode 100644 Documentation/devicetree/bindings/reset/canaan,k210-rst.yaml create mode 100644 arch/riscv/boot/dts/canaan/Makefile create mode 100644 arch/riscv/boot/dts/canaan/k210.dtsi create mode 100644 arch/riscv/boot/dts/canaan/k210_generic.dts create mode 100644 arch/riscv/boot/dts/canaan/k210_kd233.dts create mode 100644 arch/riscv/boot/dts/canaan/k210_maix_bit.dts create mode 100644 arch/riscv/boot/dts/canaan/k210_maix_dock.dts create mode 100644 arch/riscv/boot/dts/canaan/k210_maix_go.dts create mode 100644 arch/riscv/boot/dts/canaan/k210_maixduino.dts delete mode 100644 arch/riscv/boot/dts/kendryte/Makefile delete mode 100644 arch/riscv/boot/dts/kendryte/k210.dts delete mode 100644 arch/riscv/boot/dts/kendryte/k210.dtsi create mode 100644 arch/riscv/configs/nommu_k210_sdcard_defconfig create mode 100644 drivers/clk/clk-k210.c create mode 100644 drivers/pinctrl/pinctrl-k210.c create mode 100644 drivers/reset/reset-k210.c create mode 100644 drivers/soc/canaan/Kconfig create mode 100644 drivers/soc/canaan/Makefile create mode 100644 drivers/soc/canaan/k210-sysctl.c delete mode 100644 drivers/soc/kendryte/Kconfig delete mode 100644 drivers/soc/kendryte/Makefile delete mode 100644 drivers/soc/kendryte/k210-sysctl.c create mode 100644 include/dt-bindings/pinctrl/k210-fpioa.h create mode 100644 include/dt-bindings/reset/k210-rst.h create mode 100644 include/soc/canaan/k210-sysctl.h