Received: by 2002:a05:6a10:7420:0:0:0:0 with SMTP id hk32csp3149298pxb; Sun, 20 Feb 2022 10:42:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJyUYQ1e+hFSJAsJOD3PJDBH3/aX5HOb7/jRkAmJOt4CvS0Df7iscqtH1psla/eI1ZcEoZqe X-Received: by 2002:a17:906:715:b0:6b7:21d5:dd0a with SMTP id y21-20020a170906071500b006b721d5dd0amr13083754ejb.500.1645382571303; Sun, 20 Feb 2022 10:42:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645382571; cv=none; d=google.com; s=arc-20160816; b=zNOHCXxM0g0ahtTcra3eIJsBAmBhtBIUk4hNt1foZmcbp7c6U0rLEUet9AQRlrzEDt 3JbOP0IFCildkFjwo39llA88OliBx6ESH/5vNg3OoSj8QUV/uzY/4M4vt1G8VNK111Le DLs3WxKtdanCFa24+SEd4HAQoEqGSuMNzoK5B8WBeXpRq+cbb6BPIHWEOx/XliAqKmTp OlgkvMB8q00zLC0XnrwynJAvI4sjLConHky2J+jqPeR7EYctAzEYHZhUYL+5vv28UHF7 Y/TU61lywoQULHfp4ic4jCqfnjJZYrVjcfQ764d5x9kIE5O7AYDwi342D6dTIIKAbwBi JuVg== 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:sender:hmm_source_type :hmm_attache_num:hmm_source_ip; bh=m+hJ1EumdjfMStwK0mBHwzPwuCSZ3h/aC/zqIoqTXcs=; b=TKqMW3h5cOllIIOiICpB9v9LY7xF5oTNVuhNEbd5kPOT8ISyi15R7XEFsoiD3CYdgy quMqEj++mz/JUbpDtrAXKpAkadR+R6ccUGczs7WFCjIL580Y1Z6YD/bEzNL8IL79T7vW zzySIFc+wOEgIMcjNEwZjh6UvfNgm/UyrMTes7odWrrv5fC99fIcFrgTvS0nEelGsoLF LV57Ci6gwQoE+xjKX9/806c5JWhmSTV/Fp5It4nZEqV9AqH8UAOhiYoLuofdboJBTbar f30TPtA25YH9IsuKSYuRr8gT6iM1gWYj5Rxw0SVqsbb/gc7cqTBS8OfzY8osyZlrIbzb kOMQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b37si10050765edf.286.2022.02.20.10.42.28; Sun, 20 Feb 2022 10:42:51 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244041AbiBTO42 (ORCPT + 99 others); Sun, 20 Feb 2022 09:56:28 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:40804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239021AbiBTO40 (ORCPT ); Sun, 20 Feb 2022 09:56:26 -0500 Received: from 189.cn (ptr.189.cn [183.61.185.102]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 468CF45AD8; Sun, 20 Feb 2022 06:56:01 -0800 (PST) HMM_SOURCE_IP: 10.64.8.41:45934.2136022094 HMM_ATTACHE_NUM: 0000 HMM_SOURCE_TYPE: SMTP Received: from clientip-114.242.206.180 (unknown [10.64.8.41]) by 189.cn (HERMES) with SMTP id EB34A100294; Sun, 20 Feb 2022 22:55:55 +0800 (CST) Received: from ([114.242.206.180]) by gateway-151646-dep-b7fbf7d79-9vctg with ESMTP id a74a3e6ba36d472c8c6f76fc73a8ac17 for mripard@kernel.org; Sun, 20 Feb 2022 22:55:59 CST X-Transaction-ID: a74a3e6ba36d472c8c6f76fc73a8ac17 X-Real-From: 15330273260@189.cn X-Receive-IP: 114.242.206.180 X-MEDUSA-Status: 0 Sender: 15330273260@189.cn From: Sui Jingfeng <15330273260@189.cn> To: Maxime Ripard , Thomas Zimmermann , Roland Scheidegger , Zack Rusin , Christian Gmeiner , David Airlie , Daniel Vetter , Rob Herring , Thomas Bogendoerfer , Dan Carpenter , Krzysztof Kozlowski , Andrey Zhizhikin , Sam Ravnborg , "David S . Miller" , Jiaxun Yang , Lucas Stach , Maarten Lankhorst , Ilia Mirkin , Qing Zhang , suijingfeng Cc: linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v10 0/4] drm/lsdc: add drm driver for loongson display controller Date: Sun, 20 Feb 2022 22:55:50 +0800 Message-Id: <20220220145554.117854-1-15330273260@189.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,FROM_LOCAL_DIGITS, FROM_LOCAL_HEX,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=no 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 There is a display controller in loongson's LS2K1000 SoC and LS7A1000 bridge chip, the display controller is a PCI device in those chips. It has two display pipes but with only one hardware cursor. Each way has a DVO interface which provide RGB888 signals, vertical & horizontal synchronisations, data enable and the pixel clock. Each CRTC is able to scanout from 1920x1080 resolution at 60Hz, the maxmium resolution is 2048x2048 according to the hardware spec. Loongson display controllers are simple which require scanout buffers to be physically contiguous. For LS7A1000 bridge chip, the DC is equipped with a dedicated video RAM which is typically 64MB or more. In this case, VRAM helper based driver is intend to be used. While LS2K1000 is a SoC, only system memory is available. Therefore CMA helper based driver is intend to be used. It is possible to use VRAM helper based solution by carving out part of system memory as VRAM though. For LS7A1000, there are 4 dedicated GPIOs whose control register is located at the DC register space, They are used to emulate two way i2c. One for DVO0, another for DVO1. LS2K1000 and LS2K0500 SoC don't have such GPIO hardwared, they grab i2c adapter from other module, either general purpose GPIO emulated i2c or hardware i2c adapter. +------+ +-----------------------------------+ | DDR4 | | +-------------------+ | +------+ | | PCIe Root complex | LS7A1000 | || MC0 | +--++---------++----+ | +----------+ HT 3.0 | || || | | LS3A4000 |<-------->| +---++---+ +--++--+ +---------+ +------+ | CPU |<-------->| | GC1000 | | LSDC |<-->| DDR3 MC |<->| VRAM | +----------+ | +--------+ +-+--+-+ +---------+ +------+ || MC1 +---------------|--|----------------+ +------+ | | | DDR4 | +-------+ DVO0 | | DVO1 +------+ +------+ VGA <--|ADV7125|<--------+ +-------->|TFP410|--> DVI/HDMI +-------+ +------+ The above picture give a simple usage of LS7A1000, note that the encoder is not necessary adv7125 or tfp410, other candicates can be ch7034b, sil9022 ite66121 and lt8618 etc. v2: Fixup warnings reported by kernel test robot v3: Fix more grammar mistakes in Kconfig reported by Randy Dunlap and give more details about lsdc. v4: 1) Add dts required and explain why device tree is required. 2) Give more description about lsdc and VRAM helper based driver. 3) Fix warnings reported by kernel test robot. 4) Introduce stride_alignment member into struct lsdc_chip_desc, the stride alignment is 256 bytes for ls7a1000, ls2k1000 and ls2k0500. v5: 1) Using writel and readl replace writeq and readq, to fix kernel test robot report build error on other archtecture. 2) Set default fb format to XRGB8888 at crtc reset time. 3) Fix typos. v6: 1) Explain why we are not switch to drm dridge subsystem on ls2k1000. 2) Explain why tiny drm driver is not suitable for us. 3) Give a short description of the trival dirty uppdate implement based on CMA helper. 4) Code clean up v7: 1) Remove select I2C_GPIO and I2C_LS2X in Kconfig, it is not ready now 2) Licensing issues are fixed suggested by Krzysztof Kozlowski. 3) Remove lsdc_pixpll_print(), part of it move to debugfs. 4) Set prefer_shadow to true if vram based driver is in using. 5) Replace double blank lines with single line in all files. 6) Verbose cmd line parameter is replaced with drm_dbg() 7) All warnnings reported by ./scripts/checkpatch.pl --strict are fixed 8) Get edid from dtb support is removed as suggested by Maxime Ripard 9) Fix typos and various improvement v8: 1) Drop damage update implement and its command line. 2) Drop DRM_LSDC_VRAM_DRIVER config option as suggested by Maxime. 3) Deduce DC's identification from its compatible property. 4) Drop the board specific dts patch. 5) Add documention about the display controller device node. v9: 1) Fix the warnings reported by checkpatch script and fix typos v10: 1) Pass `make dt_binding_check` validation 2) Fix typos 3) Fix warnings reported by kernel test robot suijingfeng (4): MIPS: Loongson64: dts: update the display controller device node Documentation/dt: Add descriptions for loongson display controller drm/lsdc: add drm driver for loongson display controller MAINTAINERS: add maintainers for DRM LSDC driver .../loongson/loongson,display-controller.yaml | 122 ++++ MAINTAINERS | 9 + .../boot/dts/loongson/loongson64-2k1000.dtsi | 8 + arch/mips/boot/dts/loongson/ls7a-pch.dtsi | 7 +- drivers/gpu/drm/Kconfig | 2 + drivers/gpu/drm/Makefile | 1 + drivers/gpu/drm/lsdc/Kconfig | 21 + drivers/gpu/drm/lsdc/Makefile | 13 + drivers/gpu/drm/lsdc/lsdc_connector.c | 331 +++++++++ drivers/gpu/drm/lsdc/lsdc_connector.h | 35 + drivers/gpu/drm/lsdc/lsdc_crtc.c | 338 +++++++++ drivers/gpu/drm/lsdc/lsdc_drv.c | 672 ++++++++++++++++++ drivers/gpu/drm/lsdc/lsdc_drv.h | 205 ++++++ drivers/gpu/drm/lsdc/lsdc_encoder.c | 51 ++ drivers/gpu/drm/lsdc/lsdc_i2c.c | 195 +++++ drivers/gpu/drm/lsdc/lsdc_i2c.h | 37 + drivers/gpu/drm/lsdc/lsdc_irq.c | 57 ++ drivers/gpu/drm/lsdc/lsdc_irq.h | 17 + drivers/gpu/drm/lsdc/lsdc_plane.c | 517 ++++++++++++++ drivers/gpu/drm/lsdc/lsdc_pll.c | 573 +++++++++++++++ drivers/gpu/drm/lsdc/lsdc_pll.h | 87 +++ drivers/gpu/drm/lsdc/lsdc_regs.h | 199 ++++++ 22 files changed, 3492 insertions(+), 5 deletions(-) create mode 100644 Documentation/devicetree/bindings/display/loongson/loongson,display-controller.yaml create mode 100644 drivers/gpu/drm/lsdc/Kconfig create mode 100644 drivers/gpu/drm/lsdc/Makefile create mode 100644 drivers/gpu/drm/lsdc/lsdc_connector.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_connector.h create mode 100644 drivers/gpu/drm/lsdc/lsdc_crtc.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_drv.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_drv.h create mode 100644 drivers/gpu/drm/lsdc/lsdc_encoder.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_i2c.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_i2c.h create mode 100644 drivers/gpu/drm/lsdc/lsdc_irq.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_irq.h create mode 100644 drivers/gpu/drm/lsdc/lsdc_plane.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_pll.c create mode 100644 drivers/gpu/drm/lsdc/lsdc_pll.h create mode 100644 drivers/gpu/drm/lsdc/lsdc_regs.h -- 2.25.1