From nobody Fri Jun 12 01:56:49 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F733317176 for ; Mon, 8 Jun 2026 02:32:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885969; cv=none; b=jMNgCCap3aO/Rp1T/JI5NMnd48MvvasjNbf6f6svNczle4i7lyf3acVLVNRbRCSH4XZK7VfZyTXdNNkWZWAJ58Nof2i8DU/CIEOv7/EdruJE193MMtm7XC/RxHqbnJXJNGpuqBfTCI9EX1irvU0BYai6Q2pwK0m77PsX9CtcJL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885969; c=relaxed/simple; bh=07WiGulSAq9c2hVE03sspjmSsLQqMIv4OYb6R1D4cy0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AWBpRs6Z47WOn1VxkSG3gAceik9RzfAbRUe4y+FMifIhmeZeFYoeHvRv/bL245icUXxVrBbDwoqwRHFN4flSVFVLdl8uwvolGO1Ra71EBdc4zduTe6ZlwPYertZP/BNYjfGtuLISClj3LhQFPpl08nlqPg16VJ4SHJ5ZlpPqPmg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=rs3PGZxZ; arc=none smtp.client-ip=209.85.214.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rs3PGZxZ" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2bf20f6be6bso28306295ad.3 for ; Sun, 07 Jun 2026 19:32:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780885967; x=1781490767; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mE/QA9NRrIBzmpaNm7qJKCCCXhuuJ1hBihamFPKJO/0=; b=rs3PGZxZV4ue7iZ5FS82No/YI6KmQB+JVBJRw82PWGHPRchvGNbWiXZj3f9wT2TFYa dYwH5DhIMX9P+tvAI351PDX913sVxkYhWCUavMYMocQ0gNkfmjr2wqsljt0skGCDegxz b7yd+XQEYweaJ5Pzv8KAFaT5RKUq2DoiyfV5oGe3gCPZPTQ+gkyRlxo2KynkO+jZaI42 pOT1A2xO9J294Cs5O2NGvme2dE6kckl0rrFYQh5dULjZrL0fgiSjzOj/F8hmPtpM9QXp enZ/x/dFTAt4/wcZNzaqZ4k4E29/coWPgw9jPr/JrNNCxTBCra3+VCaSq/u9mDxFE1wn 0BtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885967; x=1781490767; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=mE/QA9NRrIBzmpaNm7qJKCCCXhuuJ1hBihamFPKJO/0=; b=DqsGOL/huBjTlT85J4pOH6UbGaV8Z80TY+DoPEL19N8QdyX4PMfxFGdXMhg9qnAtP9 leEta/+kdSk1lJ5sj8hM+hvRWmBH/oCKx+M2Yx0ZU8HILENOQwBCkvyWa3qMSnfeIEzX fkYQ3rmQCPA9QRkI3uL/PlXwgQ7772yxyxfGtbfZmb8HbVGYSA4KWwsLBe7+DbBrsmX2 S1sCd9AS1lc0k0VMtph2KPM4cMi7XzVRX2H816dRxTa/a8BbxXhgXrRIY3hVCvmID/Nn TzDTfFC8cslB4lVP9pDXqVMD0y7bGunJUifxIx0ggFLBb2j7RIuf4thbeB/4EvLtuimg Qn5Q== X-Forwarded-Encrypted: i=1; AFNElJ+MJNjrjuwxcfnc6kWWyRYBHLBLnhZebfEgtmis+SuHLYhJo8uwoGXaKgaqJiyfv84j4NzwBIiLL7QvBiI=@vger.kernel.org X-Gm-Message-State: AOJu0YzAGHrn2NRO8PoXi5xigU6lbBT0Y097JkJa87UxQBaFrgLEpnhl 3xT1hLrTkocal22dSGfAAHuGqFlrxzT1B50YT3o2rhFPD3h8mge9T+nD X-Gm-Gg: Acq92OFmhGimEP2zm947rDtZZlCCrlpXnFNwDnU/U972dyB7JSJE5p01079Z2k7vvFs ynsfBzXtT1UrJZEOQDeqLzAvtj3k9OBKY40hqKVuGkMT3NUJX4XbHuD7vYhQLkRfLorpbmYothe GsHNGPdOjBT0F0Dhxus0Y/EIAy3qnHfgXkvTyDxQ44GehAX6nCllyCM1Ubu0J/Q1X2y6wdKl+RR J1KCLRQMboCkwjSqVWDgmqLTdCBQnOUTUAQiRWkLO+bMgV5tkW6EVuZjtyyruYeqh/NC1249gQt LTYxamkqrFaKjSJBkv5Di9saZTYYzIC8FwfEJw2shMYV0c1UsLr/ShuDg0M1JtReW1Vvc++sARR tiFYCooCScoWXxeDenaBDXzpD+zuzpVcCbJh63NbC98sAy3lCref2O9qsqMFUwsvnMOOnsD1wUl DsEPuMlTPF4nz10VRyPJ210hX2+oPJpkNlxQK0wXcD66WW2Le352P8lPL3hBg0m273ACO9kdpeT IQs8d0N5+LA5GqjEp/HTCxcJaFmuYsCxA== X-Received: by 2002:a17:902:ced1:b0:2c0:fa4e:91f6 with SMTP id d9443c01a7336-2c1e7d41eabmr144113125ad.13.1780885967308; Sun, 07 Jun 2026 19:32:47 -0700 (PDT) Received: from localhost.localdomain (60-250-196-139.hinet-ip.hinet.net. [60.250.196.139]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c245dd3b5dsm38143485ad.81.2026.06.07.19.32.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:32:46 -0700 (PDT) From: Joey Lu To: zhengxingda@iscas.ac.cn, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: ychuang3@nuvoton.com, schung@nuvoton.com, yclu4@nuvoton.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joey Lu Subject: [PATCH v3 1/5] dt-bindings: display: verisilicon,dc: generalize for single-output variants Date: Mon, 8 Jun 2026 10:32:33 +0800 Message-ID: <20260608023237.305036-2-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260608023237.305036-1-a0987203069@gmail.com> References: <20260608023237.305036-1-a0987203069@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The existing schema hard-codes the five-clock/three-reset/dual-port topology of the DC8200 IP block, preventing reuse for single-output variants such as the Verisilicon DCUltraLite used in the Nuvoton MA35D1 SoC. Rework the schema so that variant-specific constraints are expressed via allOf/if blocks: - Add nuvoton,ma35d1-dcu to the SoC-specific compatible enum. The generic verisilicon,dc fallback remains the driver-binding string. - Relax the top-level clocks/resets definitions to minItems ranges so the base schema accepts both variants. - Keep ports in the global required list and keep additionalProperties tightened to unevaluatedProperties. - Add an allOf/if block for thead,th1520-dc8200: five-clock (core, axi, ahb, pix0, pix1), three-reset (core, axi, ahb). - Add an allOf/if block for nuvoton,ma35d1-dcu: two-clock (core, pix0), one-reset (core). - Fix a stray space in the port@0 description. - Add a DT example for the Nuvoton MA35D1 DCU Lite using ports/port@0. Signed-off-by: Joey Lu --- .../bindings/display/verisilicon,dc.yaml | 103 +++++++++++++++--- 1 file changed, 90 insertions(+), 13 deletions(-) diff --git a/Documentation/devicetree/bindings/display/verisilicon,dc.yaml = b/Documentation/devicetree/bindings/display/verisilicon,dc.yaml index 9dc35ab973f2..db0260d874c5 100644 --- a/Documentation/devicetree/bindings/display/verisilicon,dc.yaml +++ b/Documentation/devicetree/bindings/display/verisilicon,dc.yaml @@ -17,7 +17,8 @@ properties: items: - enum: - thead,th1520-dc8200 - - const: verisilicon,dc # DC IPs have discoverable ID/revision regis= ters + - nuvoton,ma35d1-dcu + - const: verisilicon,dc # DC IPs have discoverable ID/revision regi= sters =20 reg: maxItems: 1 @@ -26,6 +27,7 @@ properties: maxItems: 1 =20 clocks: + minItems: 2 items: - description: DC Core clock - description: DMA AXI bus clock @@ -34,24 +36,19 @@ properties: - description: Pixel clock of output 1 =20 clock-names: - items: - - const: core - - const: axi - - const: ahb - - const: pix0 - - const: pix1 + minItems: 2 + maxItems: 5 =20 resets: + minItems: 1 items: - description: DC Core reset - description: DMA AXI bus reset - description: Configuration AHB bus reset =20 reset-names: - items: - - const: core - - const: axi - - const: ahb + minItems: 1 + maxItems: 3 =20 ports: $ref: /schemas/graph.yaml#/properties/ports @@ -59,7 +56,7 @@ properties: properties: port@0: $ref: /schemas/graph.yaml#/properties/port - description: The first output channel , endpoint 0 should be + description: The first output channel, endpoint 0 should be used for DPI format output and endpoint 1 should be used for DP format output. =20 @@ -77,7 +74,60 @@ required: - clock-names - ports =20 -additionalProperties: false +allOf: + - if: + properties: + compatible: + contains: + const: thead,th1520-dc8200 + then: + properties: + clocks: + minItems: 5 + maxItems: 5 + + clock-names: + items: + - const: core + - const: axi + - const: ahb + - const: pix0 + - const: pix1 + + resets: + minItems: 3 + maxItems: 3 + + reset-names: + items: + - const: core + - const: axi + - const: ahb + + - if: + properties: + compatible: + contains: + const: nuvoton,ma35d1-dcu + then: + properties: + clocks: + minItems: 2 + maxItems: 2 + + clock-names: + items: + - const: core + - const: pix0 + + resets: + maxItems: 1 + + reset-names: + items: + - const: core + +unevaluatedProperties: false =20 examples: - | @@ -120,3 +170,30 @@ examples: }; }; }; + + - | + #include + #include + #include + + display@40260000 { + compatible =3D "nuvoton,ma35d1-dcu", "verisilicon,dc"; + reg =3D <0x40260000 0x20000>; + interrupts =3D ; + clocks =3D <&clk DCU_GATE>, <&clk DCUP_DIV>; + clock-names =3D "core", "pix0"; + resets =3D <&sys MA35D1_RESET_DISP>; + reset-names =3D "core"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + dpi_out: endpoint { + remote-endpoint =3D <&panel_in>; + }; + }; + }; + }; --=20 2.43.0 From nobody Fri Jun 12 01:56:49 2026 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B5603101A6 for ; Mon, 8 Jun 2026 02:32:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885972; cv=none; b=h30eYT+wGpauCS65/5YPvp4iejYwhnTOEv343YpzzhEDnESd41neKA9C5eIQjLdNxEqXlcQKt0UTL3rr+GnlL3yA6GDtyjJk06zLzMeOzLtu1Njurap/+n1vbIHGoXLr4HTQOieOg1gDpNoULDjbYACkynHPdM+Mpi8WuWAcRp8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885972; c=relaxed/simple; bh=4EbfEqKPkpxq1DREInvkthLhyDGUtt3IiuKNCpx40yY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fOLg/Yx1tU6RD0yQWtUxE9Oxr0dP7U/0xE62gYeHI847RioUegehZmfyM8cIjdMkhDrf+D6TySbgoFhPNokk4VuyRA5ZWqJXcSkJG7eb0/OydOmjB7fZorce+0mamuup/c2Ti+/VQuSjcKE4a8usRcdxvvN/jIVmwwZF3BfQGpo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LmsOGt8j; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LmsOGt8j" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2c0c2c7e0c5so25304655ad.1 for ; Sun, 07 Jun 2026 19:32:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780885971; x=1781490771; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=p0zPEFGhfG3QKVaGDZG1h1mxGzWJiUcHgpOMB7FKbFE=; b=LmsOGt8j2xrplMTrcnG2VLHS7M4HQvqv+CYKSm/0JME6wSjU5LFfta1F/HTDTy98Mt sW8VL6YaJYGg6ZD1pG21PQ5EO1iQpawpBV4BOZFOk5y4oSLSi9Ladwui8fxlyW/PNbBU ZcWqp0D+djx432KuGY9ULiKw2sj8cBw007Sd+u9+WbiPT/d+XBGYTom38Fho7GTEksPQ uHnBUj5zk7yEsn3EYHplkJQtN0cWH3Nn3xLJ60HDV5mNiotcbp96CYq6ll1Iuu3FVfD4 Tvp3g6emb7e2YaujkVQ9JNVxUBkbSrWK7/glm9slMh+Ossv1CnjyS/F/SsGvXG46OtiV xXNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885971; x=1781490771; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=p0zPEFGhfG3QKVaGDZG1h1mxGzWJiUcHgpOMB7FKbFE=; b=q6xk9ryWbOFxOMQTdyJgaWMUdBbOzCgH82pwLRGma268S2rM1WxCMsfXX55IlIVCqR ETeKtCkWN3n5godJ286uIYPX9S5b8SXneJwEn7Cb8YTVOSwfwo2erOAxJYREDEKNVzwd EKS5+gxXqCdIh5iASS7ZbKAobFSr4HAEMaM3Adt6+3N8t/qG63H+kPaJGwXFLCfVFc8p vqON3LFp++PvWOnfiv4Armu4mCRPaxjhmim+NgsgySX+xtmBLoj7TIZmyLL7TjIHGYtx YtM70L2Ja7+Jtz+if9ODUymG4ahDK8QC69/m22nlG7gX/tAhBexKaAH50FfyHs+tZ+uN xW4g== X-Forwarded-Encrypted: i=1; AFNElJ/EhVtzq5OU+Jh7tccTCANJa51VoumnZKAR9KplmXKA2MB4RfYc1LTV2hks3+NeZ5F/seVVLMrnI2xzkyc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2bNfixb0JhJbxjQaKhzZXRWBGNX8vSqSOV24g1RXkyv7iTiMN srs7LmIwpYNrPAvPz2Qkor9dF4eh2f8u+22fdVx0l0RYtszh3fr1urMG X-Gm-Gg: Acq92OEMqWPtHyI4oqkiSNP3CZM0wBph8AP9ImXh+8ReXlCKqq7BzDRn8rlIk+6Z/+a qqDiPjHMZqpVWdavUvrKSE3Nkn/aLY0Ujunx22HCbfWiCDs0vPodwj+BsO1pHa6PZJ2JW9VqzlQ V8RSMrZlczWe3V4xx6hL+pAG2HncxixEDGkVpMytBpqG9HanbJImqCHI2IZCtVhT4F0Zv3rmNOO WEPiwZGHs49k4w3yvdrlfOPOqinabYagKe+hhbOYlsgmjHvivje24VvIGWXpHwgGUFyeLvMiX4x 0FdAuv/OQqPXyOC8hsZAQKkElI9MQvW8pep+weRT1Vdzu9j+M7cbDoWPqWqUkZ8prUv2qW0vogs eVmnmPvOCJmsPIiy5C540UyQSykbyKEdqBzGKgnmJN38Jrxi+l76EHP8R56K2C/08T9ZygUl7Qr SYwpaRn9RorP5YUp49PK0qJMEl0gnCnePZ9Z4a5Aqk2GaaApZ6L7v9wEUMe6cOBpRkYoK/H8jQK d6HtsnmlJgWS0RvqXTHpgc= X-Received: by 2002:a17:902:f606:b0:2c0:ccdb:e02c with SMTP id d9443c01a7336-2c1e7b3fcdbmr158771995ad.7.1780885970776; Sun, 07 Jun 2026 19:32:50 -0700 (PDT) Received: from localhost.localdomain (60-250-196-139.hinet-ip.hinet.net. [60.250.196.139]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c245dd3b5dsm38143485ad.81.2026.06.07.19.32.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:32:50 -0700 (PDT) From: Joey Lu To: zhengxingda@iscas.ac.cn, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: ychuang3@nuvoton.com, schung@nuvoton.com, yclu4@nuvoton.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joey Lu Subject: [PATCH v3 2/5] drm/verisilicon: add register-level macros for DCU Lite Date: Mon, 8 Jun 2026 10:32:34 +0800 Message-ID: <20260608023237.305036-3-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260608023237.305036-1-a0987203069@gmail.com> References: <20260608023237.305036-1-a0987203069@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add register-level constants needed by the forthcoming DCUltraLite hardware ops: VSDC_DISP_IRQ_VSYNC(n) in vs_crtc_regs.h: bit mask for per-output VSYNC interrupt bits in DISP_IRQ_STA (0x147C) / DISP_IRQ_EN (0x1480), which are the IRQ registers used by DCUltraLite in place of the DC8200 TOP_IRQ_ACK / TOP_IRQ_EN registers. VSDC_FB_CONFIG_ENABLE (bit 0), VSDC_FB_CONFIG_VALID (bit 3) and VSDC_FB_CONFIG_RESET (bit 4) in vs_primary_plane_regs.h: control bits in the FB_CONFIG register used by DCUltraLite for framebuffer enable and per-frame commit handshake. No behaviour change for existing DC8200 platforms. Signed-off-by: Joey Lu --- drivers/gpu/drm/verisilicon/vs_crtc_regs.h | 1 + drivers/gpu/drm/verisilicon/vs_primary_plane_regs.h | 3 +++ 2 files changed, 4 insertions(+) diff --git a/drivers/gpu/drm/verisilicon/vs_crtc_regs.h b/drivers/gpu/drm/v= erisilicon/vs_crtc_regs.h index c7930e817635..d4da22b08cd5 100644 --- a/drivers/gpu/drm/verisilicon/vs_crtc_regs.h +++ b/drivers/gpu/drm/verisilicon/vs_crtc_regs.h @@ -54,6 +54,7 @@ #define VSDC_DISP_GAMMA_DATA(n) (0x1460 + 0x4 * (n)) =20 #define VSDC_DISP_IRQ_STA 0x147C +#define VSDC_DISP_IRQ_VSYNC(n) BIT(n) =20 #define VSDC_DISP_IRQ_EN 0x1480 =20 diff --git a/drivers/gpu/drm/verisilicon/vs_primary_plane_regs.h b/drivers/= gpu/drm/verisilicon/vs_primary_plane_regs.h index cbb125c46b39..67d4b00f294e 100644 --- a/drivers/gpu/drm/verisilicon/vs_primary_plane_regs.h +++ b/drivers/gpu/drm/verisilicon/vs_primary_plane_regs.h @@ -16,6 +16,9 @@ #define VSDC_FB_STRIDE(n) (0x1408 + 0x4 * (n)) =20 #define VSDC_FB_CONFIG(n) (0x1518 + 0x4 * (n)) +#define VSDC_FB_CONFIG_ENABLE BIT(0) +#define VSDC_FB_CONFIG_VALID BIT(3) +#define VSDC_FB_CONFIG_RESET BIT(4) #define VSDC_FB_CONFIG_CLEAR_EN BIT(8) #define VSDC_FB_CONFIG_ROT_MASK GENMASK(13, 11) #define VSDC_FB_CONFIG_ROT(v) ((v) << 11) --=20 2.43.0 From nobody Fri Jun 12 01:56:49 2026 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0E793176EF for ; Mon, 8 Jun 2026 02:32:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885976; cv=none; b=WzpkKeBq9QYxdWDPgPVfv07mkjZ1uGyQvy6zp4Ur9V2SqkHBM3P4BFkvYYlG8QVnW+ih8P9khcowKCTgs9KnlqQo3xbD6GVQSCQduEtVL6aPL6wVsYA2vLeOTofR5xp/SlQdJF790ZICj3rO3pZZBMoB72y7uToGiv65iPKX3xM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885976; c=relaxed/simple; bh=gl4dbPz+Mk4KGskRRWCg4K4WVcR9+WReUPSaydfGO4U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gtwTwM0mjwujzc30q3dQHctqpVlEmedBx25Tu3eiLE9Z82HVCqmstW7ci9aypCFmyb2E2foJ5GbBhM7YotKNf4jtt7xLiWIOp8Jy1DudzzCcmYYEZU4uANGPWhAOBwfpFidRVGxp5WD+JxcP5gDnDBOaCAf3UoF74nGbkg6G9zQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dBWgVU0V; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dBWgVU0V" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2bf237e1433so43470305ad.1 for ; Sun, 07 Jun 2026 19:32:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780885974; x=1781490774; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0yGMFcYV1tIohBdQky37z1yVHzNg0LWhm86S/h80lZo=; b=dBWgVU0VjSgM1MoVBzMITCsVYbgLu6vdgIDHAjVVKfgvbzjZqpGduH4j6U6XZXXzy8 d3EF910NzVaDOQhQu4FcgDGrd8PoU/ZveBcVWu94aFzjII2vafG/V36MDDWMIcRBjdyl piZpv0rZOusNBJeTf81mAqQSzWYseBBYGq4AY3tSl/2MZh7D/qdBFXqNr+xUYCUqoW+k tynqwHBu696dIMjRE5Jz/ATAF9Er2lSlTN3px1QGvIHm5saOkLlgiEzySncm7HdVn9w7 xs+WIsIJyiXfn7ViUrnQIhCshMNU/Uu35CkZBZ08zMrjgrQY6QGPFtDdV8Qzd7Xrnqcq cuyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885974; x=1781490774; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0yGMFcYV1tIohBdQky37z1yVHzNg0LWhm86S/h80lZo=; b=i5oQJVocBXGazB6BpGK3atrYJKelgvPZGx5ERe7m8omDTtIfg51h0BepijL3f2AJHF IwY663fjpHfmQuzxlusj7ALSuaS4Ku+qt/RbsaRXkKqGBAMofxIm1OJbyLR0YyI06faf 1ZKEzNUY6E7fHpy6rXcmXZb1BOGt9wZQyY2HFJoanvVpNH23DXaNKGnul3bzZCoAMb6C mLJZxvImB5HUYoZpjN++CO4fEMyk2RXvSE3Ns1TdV2ZqM+HzBXaqlACJT2/x5wvMma6n RvgxybWlcbhmSVnsa2FmnZyKr/JIttIol5wxKa58TMrEwfY7lzLK/43XtYSbYtbDv+9Q lI7w== X-Forwarded-Encrypted: i=1; AFNElJ9OJ40+vqJVJ44FJD0z8Va+ylyrlsNGwrnYsIzy50nKCYjLaF7b6Qlw/+y5MumMtX2ROvpZ+ywEHSVgeRU=@vger.kernel.org X-Gm-Message-State: AOJu0Yzvq2MUvjNiAMIzFH7Yi7Ld2XitZcJpcbBhLXo7pV8075isqqU+ gpEVJH2s4Ent2Qo6oHaYliAccBNw7lHppEmuYbOmA7JBAHNxjWEgo6k0 X-Gm-Gg: Acq92OGQeLUW60lrDb29kn5CIbiBY4K5ad6I/JtM2mA6X9xo0uqp0Hdjc+01A0PfpHi XUWW5gEq/cBNKFFqzoDwW25NCFy5sTvK8N/6q2Lb60Yoyx+4mC8HoMcMS5hAOU1S/mdYCNl3sH9 YCDk1mk9gcH1NjzQDMBg2Fxwq+MQMjyPURHYtE8rbLUCPTRsqU0u0ifpRRn9eCnuBM+39uL0RCd S16cEuNoJXD2zybSJeFr1DPTVzx+38cWQYCenIb8ii8QmHkTS3T1IikOQNnSREOEQN3vLMPsKQD luZFReLyTl3uXG+qs49FxfSXt2c4K0y+0H5B9IyiubSu1riHYWbgyHVXO5AsO60VFu67Gz9Ombk QQM0NRYWVLvmHqHbKDmCJqykbh9MVz0bgRmsSgFv3+WiCG22Bl8svyhHE1dDcpgflQgmp5l7i8+ ZSYWvhSwkoN8wl1FGqr7UKvObWaFjwgrlljDmLB9TvoYaipU1xdQlnDbDB9y7J5eDwuvgLvnFL4 z3KsuAwuDSftbiZq8NhilII0s8WJD3ujg== X-Received: by 2002:a17:902:fc50:b0:2c0:e5ee:f554 with SMTP id d9443c01a7336-2c1e80d29b7mr146237945ad.8.1780885974255; Sun, 07 Jun 2026 19:32:54 -0700 (PDT) Received: from localhost.localdomain (60-250-196-139.hinet-ip.hinet.net. [60.250.196.139]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c245dd3b5dsm38143485ad.81.2026.06.07.19.32.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:32:53 -0700 (PDT) From: Joey Lu To: zhengxingda@iscas.ac.cn, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: ychuang3@nuvoton.com, schung@nuvoton.com, yclu4@nuvoton.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joey Lu Subject: [PATCH v3 3/5] drm/verisilicon: introduce per-variant hardware ops table Date: Mon, 8 Jun 2026 10:32:35 +0800 Message-ID: <20260608023237.305036-4-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260608023237.305036-1-a0987203069@gmail.com> References: <20260608023237.305036-1-a0987203069@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The DC8200 and DCUltraLite share a broadly similar register layout but differ in how the bridge, CRTC, primary plane and IRQ paths are driven. Introduce a vs_dc_funcs vtable so each variant can supply its own implementation without scattering conditionals across multiple files. Add enum vs_dc_generation (VSDC_GEN_DC8000 / VSDC_GEN_DC8200) to vs_hwdb.h and a generation field to struct vs_chip_identity. Annotate all four existing DC8200 HWDB entries with VSDC_GEN_DC8200. Extract the DC8200-specific hardware ops into a new vs_dc8200.c: bridge_enable / bridge_disable - PANEL_CONFIG/START + CONFIG_EX commit enable_vblank / disable_vblank - TOP_IRQ_EN VSYNC bit plane_enable_ex / disable_ex / update_ex - FB_CONFIG_EX path irq_handler - reads TOP_IRQ_ACK Update vs_bridge.c, vs_crtc.c, vs_primary_plane.c and vs_dc.c to dispatch through dc->funcs instead of directly touching registers. vs_crtc.c gains atomic_begin and atomic_flush hooks to allow variants to gate per-frame commit cycles. No behaviour change for existing DC8200 platforms. Signed-off-by: Joey Lu --- drivers/gpu/drm/verisilicon/Makefile | 2 +- drivers/gpu/drm/verisilicon/vs_bridge.c | 20 +--- drivers/gpu/drm/verisilicon/vs_crtc.c | 38 ++++++- drivers/gpu/drm/verisilicon/vs_dc.c | 6 +- drivers/gpu/drm/verisilicon/vs_dc.h | 33 ++++++ drivers/gpu/drm/verisilicon/vs_dc8200.c | 107 ++++++++++++++++++ drivers/gpu/drm/verisilicon/vs_hwdb.c | 4 + drivers/gpu/drm/verisilicon/vs_hwdb.h | 6 + .../gpu/drm/verisilicon/vs_primary_plane.c | 32 +----- 9 files changed, 197 insertions(+), 51 deletions(-) create mode 100644 drivers/gpu/drm/verisilicon/vs_dc8200.c diff --git a/drivers/gpu/drm/verisilicon/Makefile b/drivers/gpu/drm/verisil= icon/Makefile index 426f4bcaa834..9d4cd16452fa 100644 --- a/drivers/gpu/drm/verisilicon/Makefile +++ b/drivers/gpu/drm/verisilicon/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only =20 -verisilicon-dc-objs :=3D vs_bridge.o vs_crtc.o vs_dc.o vs_drm.o vs_hwdb.o \ +verisilicon-dc-objs :=3D vs_bridge.o vs_crtc.o vs_dc.o vs_dc8200.o vs_drm.= o vs_hwdb.o \ vs_plane.o vs_primary_plane.o vs_cursor_plane.o =20 obj-$(CONFIG_DRM_VERISILICON_DC) +=3D verisilicon-dc.o diff --git a/drivers/gpu/drm/verisilicon/vs_bridge.c b/drivers/gpu/drm/veri= silicon/vs_bridge.c index 7a93049368db..6a9af10c64e6 100644 --- a/drivers/gpu/drm/verisilicon/vs_bridge.c +++ b/drivers/gpu/drm/verisilicon/vs_bridge.c @@ -162,15 +162,8 @@ static void vs_bridge_enable_common(struct vs_crtc *cr= tc, VSDC_DISP_PANEL_CONFIG_DE_EN | VSDC_DISP_PANEL_CONFIG_DAT_EN | VSDC_DISP_PANEL_CONFIG_CLK_EN); - regmap_set_bits(dc->regs, VSDC_DISP_PANEL_CONFIG(output), - VSDC_DISP_PANEL_CONFIG_RUNNING); - regmap_clear_bits(dc->regs, VSDC_DISP_PANEL_START, - VSDC_DISP_PANEL_START_MULTI_DISP_SYNC); - regmap_set_bits(dc->regs, VSDC_DISP_PANEL_START, - VSDC_DISP_PANEL_START_RUNNING(output)); - - regmap_set_bits(dc->regs, VSDC_DISP_PANEL_CONFIG_EX(crtc->id), - VSDC_DISP_PANEL_CONFIG_EX_COMMIT); + + dc->funcs->bridge_enable(dc, output); } =20 static void vs_bridge_atomic_enable_dpi(struct drm_bridge *bridge, @@ -228,14 +221,7 @@ static void vs_bridge_atomic_disable(struct drm_bridge= *bridge, struct vs_dc *dc =3D crtc->dc; unsigned int output =3D crtc->id; =20 - regmap_clear_bits(dc->regs, VSDC_DISP_PANEL_START, - VSDC_DISP_PANEL_START_MULTI_DISP_SYNC | - VSDC_DISP_PANEL_START_RUNNING(output)); - regmap_clear_bits(dc->regs, VSDC_DISP_PANEL_CONFIG(output), - VSDC_DISP_PANEL_CONFIG_RUNNING); - - regmap_set_bits(dc->regs, VSDC_DISP_PANEL_CONFIG_EX(crtc->id), - VSDC_DISP_PANEL_CONFIG_EX_COMMIT); + dc->funcs->bridge_disable(dc, output); } =20 static const struct drm_bridge_funcs vs_dpi_bridge_funcs =3D { diff --git a/drivers/gpu/drm/verisilicon/vs_crtc.c b/drivers/gpu/drm/verisi= licon/vs_crtc.c index 0b8a35d09cd2..679d6541ba1b 100644 --- a/drivers/gpu/drm/verisilicon/vs_crtc.c +++ b/drivers/gpu/drm/verisilicon/vs_crtc.c @@ -16,10 +16,33 @@ #include "vs_crtc_regs.h" #include "vs_crtc.h" #include "vs_dc.h" -#include "vs_dc_top_regs.h" #include "vs_drm.h" #include "vs_plane.h" =20 +static void vs_crtc_atomic_begin(struct drm_crtc *crtc, + struct drm_atomic_commit *state) +{ + struct vs_crtc *vcrtc =3D drm_crtc_to_vs_crtc(crtc); + struct vs_dc *dc =3D vcrtc->dc; + unsigned int output =3D vcrtc->id; + + if (dc->funcs->crtc_begin) + dc->funcs->crtc_begin(dc, output); +} + +static void vs_crtc_atomic_flush(struct drm_crtc *crtc, + struct drm_atomic_commit *state) +{ + struct vs_crtc *vcrtc =3D drm_crtc_to_vs_crtc(crtc); + struct vs_dc *dc =3D vcrtc->dc; + unsigned int output =3D vcrtc->id; + + if (dc->funcs->crtc_flush) + dc->funcs->crtc_flush(dc, output); + + drm_crtc_vblank_atomic_flush(crtc, state); +} + static void vs_crtc_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_commit *state) { @@ -30,6 +53,9 @@ static void vs_crtc_atomic_disable(struct drm_crtc *crtc, drm_crtc_vblank_off(crtc); =20 clk_disable_unprepare(dc->pix_clk[output]); + + if (dc->funcs->crtc_disable) + dc->funcs->crtc_disable(dc, output); } =20 static void vs_crtc_atomic_enable(struct drm_crtc *crtc, @@ -42,6 +68,9 @@ static void vs_crtc_atomic_enable(struct drm_crtc *crtc, drm_WARN_ON(&dc->drm_dev->base, clk_prepare_enable(dc->pix_clk[output])); =20 + if (dc->funcs->crtc_enable) + dc->funcs->crtc_enable(dc, output); + drm_crtc_vblank_on(crtc); } =20 @@ -119,7 +148,8 @@ static bool vs_crtc_mode_fixup(struct drm_crtc *crtc, } =20 static const struct drm_crtc_helper_funcs vs_crtc_helper_funcs =3D { - .atomic_flush =3D drm_crtc_vblank_atomic_flush, + .atomic_begin =3D vs_crtc_atomic_begin, + .atomic_flush =3D vs_crtc_atomic_flush, .atomic_enable =3D vs_crtc_atomic_enable, .atomic_disable =3D vs_crtc_atomic_disable, .mode_set_nofb =3D vs_crtc_mode_set_nofb, @@ -132,7 +162,7 @@ static int vs_crtc_enable_vblank(struct drm_crtc *crtc) struct vs_crtc *vcrtc =3D drm_crtc_to_vs_crtc(crtc); struct vs_dc *dc =3D vcrtc->dc; =20 - regmap_set_bits(dc->regs, VSDC_TOP_IRQ_EN, VSDC_TOP_IRQ_VSYNC(vcrtc->id)); + dc->funcs->enable_vblank(dc, vcrtc->id); =20 return 0; } @@ -142,7 +172,7 @@ static void vs_crtc_disable_vblank(struct drm_crtc *crt= c) struct vs_crtc *vcrtc =3D drm_crtc_to_vs_crtc(crtc); struct vs_dc *dc =3D vcrtc->dc; =20 - regmap_clear_bits(dc->regs, VSDC_TOP_IRQ_EN, VSDC_TOP_IRQ_VSYNC(vcrtc->id= )); + dc->funcs->disable_vblank(dc, vcrtc->id); } =20 static const struct drm_crtc_funcs vs_crtc_funcs =3D { diff --git a/drivers/gpu/drm/verisilicon/vs_dc.c b/drivers/gpu/drm/verisili= con/vs_dc.c index dad9967bc10b..c94957024189 100644 --- a/drivers/gpu/drm/verisilicon/vs_dc.c +++ b/drivers/gpu/drm/verisilicon/vs_dc.c @@ -8,9 +8,7 @@ #include #include =20 -#include "vs_crtc.h" #include "vs_dc.h" -#include "vs_dc_top_regs.h" #include "vs_drm.h" #include "vs_hwdb.h" =20 @@ -33,7 +31,7 @@ static irqreturn_t vs_dc_irq_handler(int irq, void *priva= te) struct vs_dc *dc =3D private; u32 irqs; =20 - regmap_read(dc->regs, VSDC_TOP_IRQ_ACK, &irqs); + irqs =3D dc->funcs->irq_handler(dc); =20 vs_drm_handle_irq(dc, irqs); =20 @@ -136,6 +134,8 @@ static int vs_dc_probe(struct platform_device *pdev) dev_info(dev, "Found DC%x rev %x customer %x\n", dc->identity.model, dc->identity.revision, dc->identity.customer_id); =20 + dc->funcs =3D &vs_dc8200_funcs; + if (port_count > dc->identity.display_count) { dev_err(dev, "too many downstream ports than HW capability\n"); ret =3D -EINVAL; diff --git a/drivers/gpu/drm/verisilicon/vs_dc.h b/drivers/gpu/drm/verisili= con/vs_dc.h index ed1016f18758..d77d4a1babdf 100644 --- a/drivers/gpu/drm/verisilicon/vs_dc.h +++ b/drivers/gpu/drm/verisilicon/vs_dc.h @@ -14,6 +14,7 @@ #include =20 #include +#include =20 #include "vs_hwdb.h" =20 @@ -22,6 +23,34 @@ =20 struct vs_drm_dev; struct vs_crtc; +struct vs_dc; + +struct vs_dc_funcs { + /* Bridge: atomic_enable, atomic_disable */ + void (*bridge_enable)(struct vs_dc *dc, unsigned int output); + void (*bridge_disable)(struct vs_dc *dc, unsigned int output); + + /* CRTC: atomic_begin, atomic_flush */ + void (*crtc_begin)(struct vs_dc *dc, unsigned int output); + void (*crtc_flush)(struct vs_dc *dc, unsigned int output); + + /* CRTC: atomic_enable, atomic_disable */ + void (*crtc_enable)(struct vs_dc *dc, unsigned int output); + void (*crtc_disable)(struct vs_dc *dc, unsigned int output); + + /* CRTC: enable_vblank, disable_vblank */ + void (*enable_vblank)(struct vs_dc *dc, unsigned int output); + void (*disable_vblank)(struct vs_dc *dc, unsigned int output); + + /* Primary plane: atomic_enable, atomic_disable, atomic_update */ + void (*plane_enable_ex)(struct vs_dc *dc, unsigned int output); + void (*plane_disable_ex)(struct vs_dc *dc, unsigned int output); + void (*plane_update_ex)(struct vs_dc *dc, unsigned int output, + struct drm_plane_state *state); + + /* IRQ handler */ + u32 (*irq_handler)(struct vs_dc *dc); +}; =20 struct vs_dc { struct regmap *regs; @@ -33,6 +62,10 @@ struct vs_dc { =20 struct vs_drm_dev *drm_dev; struct vs_chip_identity identity; + const struct vs_dc_funcs *funcs; }; =20 +extern const struct vs_dc_funcs vs_dc8200_funcs; +extern const struct vs_dc_funcs vs_dcu_lite_funcs; + #endif /* _VS_DC_H_ */ diff --git a/drivers/gpu/drm/verisilicon/vs_dc8200.c b/drivers/gpu/drm/veri= silicon/vs_dc8200.c new file mode 100644 index 000000000000..db9e1b3cd903 --- /dev/null +++ b/drivers/gpu/drm/verisilicon/vs_dc8200.c @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2025 Icenowy Zheng + */ + +#include + +#include "vs_bridge_regs.h" +#include "vs_dc.h" +#include "vs_dc_top_regs.h" +#include "vs_plane.h" +#include "vs_primary_plane_regs.h" + +static void vs_dc8200_bridge_enable(struct vs_dc *dc, unsigned int output) +{ + regmap_set_bits(dc->regs, VSDC_DISP_PANEL_CONFIG(output), + VSDC_DISP_PANEL_CONFIG_RUNNING); + regmap_clear_bits(dc->regs, VSDC_DISP_PANEL_START, + VSDC_DISP_PANEL_START_MULTI_DISP_SYNC); + regmap_set_bits(dc->regs, VSDC_DISP_PANEL_START, + VSDC_DISP_PANEL_START_RUNNING(output)); + + regmap_set_bits(dc->regs, VSDC_DISP_PANEL_CONFIG_EX(output), + VSDC_DISP_PANEL_CONFIG_EX_COMMIT); +} + +static void vs_dc8200_bridge_disable(struct vs_dc *dc, unsigned int output) +{ + regmap_clear_bits(dc->regs, VSDC_DISP_PANEL_CONFIG(output), + VSDC_DISP_PANEL_CONFIG_RUNNING); + regmap_clear_bits(dc->regs, VSDC_DISP_PANEL_START, + VSDC_DISP_PANEL_START_MULTI_DISP_SYNC | + VSDC_DISP_PANEL_START_RUNNING(output)); + + regmap_set_bits(dc->regs, VSDC_DISP_PANEL_CONFIG_EX(output), + VSDC_DISP_PANEL_CONFIG_EX_COMMIT); +} + +static void vs_dc8200_enable_vblank(struct vs_dc *dc, unsigned int output) +{ + regmap_set_bits(dc->regs, VSDC_TOP_IRQ_EN, + VSDC_TOP_IRQ_VSYNC(output)); +} + +static void vs_dc8200_disable_vblank(struct vs_dc *dc, unsigned int output) +{ + regmap_clear_bits(dc->regs, VSDC_TOP_IRQ_EN, + VSDC_TOP_IRQ_VSYNC(output)); +} + +static void vs_dc8200_plane_commit(struct vs_dc *dc, unsigned int output) +{ + regmap_set_bits(dc->regs, VSDC_FB_CONFIG_EX(output), + VSDC_FB_CONFIG_EX_COMMIT); +} + +static void vs_dc8200_plane_enable_ex(struct vs_dc *dc, unsigned int outpu= t) +{ + regmap_set_bits(dc->regs, VSDC_FB_CONFIG_EX(output), + VSDC_FB_CONFIG_EX_FB_EN); + regmap_update_bits(dc->regs, VSDC_FB_CONFIG_EX(output), + VSDC_FB_CONFIG_EX_DISPLAY_ID_MASK, + VSDC_FB_CONFIG_EX_DISPLAY_ID(output)); + + vs_dc8200_plane_commit(dc, output); +} + +static void vs_dc8200_plane_disable_ex(struct vs_dc *dc, unsigned int outp= ut) +{ + regmap_set_bits(dc->regs, VSDC_FB_CONFIG_EX(output), + VSDC_FB_CONFIG_EX_FB_EN); + + vs_dc8200_plane_commit(dc, output); +} + +static void vs_dc8200_plane_update_ex(struct vs_dc *dc, unsigned int outpu= t, + struct drm_plane_state *state) +{ + regmap_write(dc->regs, VSDC_FB_TOP_LEFT(output), + VSDC_MAKE_PLANE_POS(state->crtc_x, state->crtc_y)); + regmap_write(dc->regs, VSDC_FB_BOTTOM_RIGHT(output), + VSDC_MAKE_PLANE_POS(state->crtc_x + state->crtc_w, + state->crtc_y + state->crtc_h)); + regmap_write(dc->regs, VSDC_FB_BLEND_CONFIG(output), + VSDC_FB_BLEND_CONFIG_BLEND_DISABLE); + + vs_dc8200_plane_commit(dc, output); +} + +static u32 vs_dc8200_irq_handler(struct vs_dc *dc) +{ + u32 irqs; + + regmap_read(dc->regs, VSDC_TOP_IRQ_ACK, &irqs); + return irqs; +} + +const struct vs_dc_funcs vs_dc8200_funcs =3D { + .bridge_enable =3D vs_dc8200_bridge_enable, + .bridge_disable =3D vs_dc8200_bridge_disable, + .enable_vblank =3D vs_dc8200_enable_vblank, + .disable_vblank =3D vs_dc8200_disable_vblank, + .plane_enable_ex =3D vs_dc8200_plane_enable_ex, + .plane_disable_ex =3D vs_dc8200_plane_disable_ex, + .plane_update_ex =3D vs_dc8200_plane_update_ex, + .irq_handler =3D vs_dc8200_irq_handler, +}; diff --git a/drivers/gpu/drm/verisilicon/vs_hwdb.c b/drivers/gpu/drm/verisi= licon/vs_hwdb.c index 2a0f7c59afa3..91524d16f778 100644 --- a/drivers/gpu/drm/verisilicon/vs_hwdb.c +++ b/drivers/gpu/drm/verisilicon/vs_hwdb.c @@ -94,6 +94,7 @@ static struct vs_chip_identity vs_chip_identities[] =3D { .revision =3D 0x5720, .customer_id =3D ~0U, =20 + .generation =3D VSDC_GEN_DC8200, .display_count =3D 2, .max_cursor_size =3D 64, .formats =3D &vs_formats_no_yuv444, @@ -103,6 +104,7 @@ static struct vs_chip_identity vs_chip_identities[] =3D= { .revision =3D 0x5721, .customer_id =3D 0x30B, =20 + .generation =3D VSDC_GEN_DC8200, .display_count =3D 2, .max_cursor_size =3D 64, .formats =3D &vs_formats_no_yuv444, @@ -112,6 +114,7 @@ static struct vs_chip_identity vs_chip_identities[] =3D= { .revision =3D 0x5720, .customer_id =3D 0x310, =20 + .generation =3D VSDC_GEN_DC8200, .display_count =3D 2, .max_cursor_size =3D 64, .formats =3D &vs_formats_with_yuv444, @@ -121,6 +124,7 @@ static struct vs_chip_identity vs_chip_identities[] =3D= { .revision =3D 0x5720, .customer_id =3D 0x311, =20 + .generation =3D VSDC_GEN_DC8200, .display_count =3D 2, .max_cursor_size =3D 64, .formats =3D &vs_formats_no_yuv444, diff --git a/drivers/gpu/drm/verisilicon/vs_hwdb.h b/drivers/gpu/drm/verisi= licon/vs_hwdb.h index 2065ecb73043..a15c8b565604 100644 --- a/drivers/gpu/drm/verisilicon/vs_hwdb.h +++ b/drivers/gpu/drm/verisilicon/vs_hwdb.h @@ -9,6 +9,11 @@ #include #include =20 +enum vs_dc_generation { + VSDC_GEN_DC8000, + VSDC_GEN_DC8200, +}; + struct vs_formats { const u32 *array; unsigned int num; @@ -19,6 +24,7 @@ struct vs_chip_identity { u32 revision; u32 customer_id; =20 + enum vs_dc_generation generation; u32 display_count; /* * The hardware only supports square cursor planes, so this field diff --git a/drivers/gpu/drm/verisilicon/vs_primary_plane.c b/drivers/gpu/d= rm/verisilicon/vs_primary_plane.c index 1f2be41ae496..75bc36a078f7 100644 --- a/drivers/gpu/drm/verisilicon/vs_primary_plane.c +++ b/drivers/gpu/drm/verisilicon/vs_primary_plane.c @@ -53,12 +53,6 @@ static int vs_primary_plane_atomic_check(struct drm_plan= e *plane, return 0; } =20 -static void vs_primary_plane_commit(struct vs_dc *dc, unsigned int output) -{ - regmap_set_bits(dc->regs, VSDC_FB_CONFIG_EX(output), - VSDC_FB_CONFIG_EX_COMMIT); -} - static void vs_primary_plane_atomic_enable(struct drm_plane *plane, struct drm_atomic_commit *atomic_state) { @@ -69,13 +63,8 @@ static void vs_primary_plane_atomic_enable(struct drm_pl= ane *plane, unsigned int output =3D vcrtc->id; struct vs_dc *dc =3D vcrtc->dc; =20 - regmap_set_bits(dc->regs, VSDC_FB_CONFIG_EX(output), - VSDC_FB_CONFIG_EX_FB_EN); - regmap_update_bits(dc->regs, VSDC_FB_CONFIG_EX(output), - VSDC_FB_CONFIG_EX_DISPLAY_ID_MASK, - VSDC_FB_CONFIG_EX_DISPLAY_ID(output)); - - vs_primary_plane_commit(dc, output); + if (dc->funcs->plane_enable_ex) + dc->funcs->plane_enable_ex(dc, output); } =20 static void vs_primary_plane_atomic_disable(struct drm_plane *plane, @@ -88,10 +77,8 @@ static void vs_primary_plane_atomic_disable(struct drm_p= lane *plane, unsigned int output =3D vcrtc->id; struct vs_dc *dc =3D vcrtc->dc; =20 - regmap_set_bits(dc->regs, VSDC_FB_CONFIG_EX(output), - VSDC_FB_CONFIG_EX_FB_EN); - - vs_primary_plane_commit(dc, output); + if (dc->funcs->plane_disable_ex) + dc->funcs->plane_disable_ex(dc, output); } =20 static void vs_primary_plane_atomic_update(struct drm_plane *plane, @@ -133,18 +120,11 @@ static void vs_primary_plane_atomic_update(struct drm= _plane *plane, regmap_write(dc->regs, VSDC_FB_STRIDE(output), fb->pitches[0]); =20 - regmap_write(dc->regs, VSDC_FB_TOP_LEFT(output), - VSDC_MAKE_PLANE_POS(state->crtc_x, state->crtc_y)); - regmap_write(dc->regs, VSDC_FB_BOTTOM_RIGHT(output), - VSDC_MAKE_PLANE_POS(state->crtc_x + state->crtc_w, - state->crtc_y + state->crtc_h)); regmap_write(dc->regs, VSDC_FB_SIZE(output), VSDC_MAKE_PLANE_SIZE(state->crtc_w, state->crtc_h)); =20 - regmap_write(dc->regs, VSDC_FB_BLEND_CONFIG(output), - VSDC_FB_BLEND_CONFIG_BLEND_DISABLE); - - vs_primary_plane_commit(dc, output); + if (dc->funcs->plane_update_ex) + dc->funcs->plane_update_ex(dc, output, state); } =20 static const struct drm_plane_helper_funcs vs_primary_plane_helper_funcs = =3D { --=20 2.43.0 From nobody Fri Jun 12 01:56:49 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5061A2F99B8 for ; Mon, 8 Jun 2026 02:32:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885979; cv=none; b=BMl0wmmhlNlpLFAXEt2+oLhz9EQfIjS6IJv3nrJaA+v/O7UQfqWuAznNK3MLhyjAVlozMqELQloFNxDFJQ6Ok7HQMwoJD+nbRtMxFTb+n/ry2NdllfXh92bGHxYGQ4mie1gCaK1j9C8/7Jecs8ed2Ca2/43k8FydcOrIMcntBAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885979; c=relaxed/simple; bh=unvGbJJ1+EdhF26wxeFas/HXuaGWFa1y5nsGetdLI4c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dpPCHt3GaoeB+8SiL101yn6juDj2kS2nVb+CNDMxb68wKP111iRwDAgRPqSDaq6/1ki1S/ApxivvdNXr8pqPSwr2tqQBZq/rIIi9R1raomPOqxGDTC5x85mXVnrXpyJX9z8SMdMEMDom/w+2nh3VxxqKVkvDucnvFYNa9HNrY4c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iUfSeOKJ; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iUfSeOKJ" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2c0c2d8b95bso25653155ad.1 for ; Sun, 07 Jun 2026 19:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780885978; x=1781490778; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rCTTyDg8O+LYe31dsdYUzuGSGbt3ApYha6QKkmglNt4=; b=iUfSeOKJOFTiTlwA7kvvA75o49qWFMEJOXmK9UAYBS8h3t12RTHgDS+Sf+0NRuoNs7 3PkSTp10VEreSbQTD60Yb0W1mSDhzrCFVKQlUErDN/k0gS3FPgZZ3tWHkcJtHXGRmXuI /WRpzAghCewntrAXnjRNpH/PLYQ0WftpvX/UW54x4vXqglAKTpjwP698PClkRZBsDHLc d+imNWlABFrR/adbZLmW4qi0rvdaptdC/wuqYYzW30Y2LcJGCBZOyrv7me6cDJXVG+B6 99fbLkx5WHF0YiSMe9tewpXz05JmZi0LGpN0xABd48aEIs3ADmDGIGoD5DJEVc6A07g3 /vXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885978; x=1781490778; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rCTTyDg8O+LYe31dsdYUzuGSGbt3ApYha6QKkmglNt4=; b=kHqJeg2fJVfbgC401d/0UCTshIfFttoK5CwKpld3/jFCpFdVuwGdQWOI2p83nqGJG4 QORveNb34PJt/28fQtDDzlFGdmzvFezhCFuIuu23iCDXKZwD+b3pcfqNcvTm3PsezF32 78N5URBmOL525OWLaxEZt6i3VoDER4MQ/V3WQ47j46JfJ0t9x2JI9XX5wbldMEjCh4cB +W+MpCeODT28eZY77zOSofxR0ovm1f8eljglQhJQeeFRxx5QhLa9Hl2OjEjUiFme7L1u iGAA44pGRqHMB0JEX/rTkk6W5fCRhdykajaN/lkvGUUdF5PA6n56qOKDnMM0AzQpmZ5x QUEw== X-Forwarded-Encrypted: i=1; AFNElJ8mjYKYMNbimfVGtKMXt9zD0ohyjyWSxhlwVkAI9taBNFFSKEXb611e1wB8C1Ik2LDt95p0QZjNHjOZ3B8=@vger.kernel.org X-Gm-Message-State: AOJu0YynxIqALhl5nU2RbD2ph32wnegtT5H3vDsKb+uHWkY6HJp4Auxl +Sl3tl0LfR9cGbLTxgkI3XXSgu+qhn49VHXhNc3myzRtqSrIDINKHhbx X-Gm-Gg: Acq92OHOf4DBskcTNvlgQsZdeyqxY3qeLGIrJxkzXXhpa4McrbDupXpr2cMLELUJ1qE R3RRaxsSfJ8Ou/kWwfx1qC7uIAB8yL3UIL+d2gvHA6CPQ54D+6ti5+cmB8L+oyLS6utLVoQX0Wn v+CnX+BeFDmETjJyB41MhL8I2UsK6sDt2iU3BqCzFYMyVunGUk0C5jUm9xmH+6Pze4Nfoyc1rxq 7eTqTIXNWFamodoClDmhNR6oyJOvIpNiRxecP+fpYyEYDjTDLBmIib7c/RXG7Eb+WQlg9aB0r1y BNtopsEVGgQXihpejfuN9L2hVoXqE5Z/jTkXot0ScwUL2tvR/pev/dgx+80Pv8JWHf4+I7Hhzep M6U6cLoJJW6izkStVE2uTNKuG6VeUZvVbWHsDxiBmZShl68/Ft7GfaeYw49a2iETBpk/YyUUFcf VWErLWV5ZW17f8FEyvllLIy4H8q3lHtwMxIGFt7s726FPjY7eb0PrnXYtBwFr0ya+/e8WB9avRh nKE1ATbmoJNqcn1GiD6/5k= X-Received: by 2002:a17:903:3885:b0:2c2:245a:336c with SMTP id d9443c01a7336-2c2245a3654mr104856695ad.14.1780885977664; Sun, 07 Jun 2026 19:32:57 -0700 (PDT) Received: from localhost.localdomain (60-250-196-139.hinet-ip.hinet.net. [60.250.196.139]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c245dd3b5dsm38143485ad.81.2026.06.07.19.32.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:32:57 -0700 (PDT) From: Joey Lu To: zhengxingda@iscas.ac.cn, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: ychuang3@nuvoton.com, schung@nuvoton.com, yclu4@nuvoton.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joey Lu Subject: [PATCH v3 4/5] drm/verisilicon: add Nuvoton MA35D1 DCU Lite display controller support Date: Mon, 8 Jun 2026 10:32:36 +0800 Message-ID: <20260608023237.305036-5-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260608023237.305036-1-a0987203069@gmail.com> References: <20260608023237.305036-1-a0987203069@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Nuvoton MA35D1 SoC integrates a Verisilicon DCUltraLite display controller whose register layout differs from the DC8200 in several important ways: 1. No CONFIG_EX commit path: framebuffer updates use the enable (bit 0) and reset (bit 4) bits in FB_CONFIG instead of the DC8200 staging registers (FB_CONFIG_EX, FB_TOP_LEFT, FB_BOTTOM_RIGHT, FB_BLEND_CONFIG, PANEL_CONFIG_EX). 2. No PANEL_START register: panel output starts when PANEL_CONFIG.RUNNING is set; there is no multi-display sync start register. 3. Different IRQ registers: DCUltraLite uses DISP_IRQ_STA (0x147C) / DISP_IRQ_EN (0x1480) versus DC8200's TOP_IRQ_ACK (0x0010) / TOP_IRQ_EN (0x0014). 4. Per-frame commit cycle: DCUltraLite requires the VALID bit in FB_CONFIG to be set at the start of each atomic commit (crtc_begin) and cleared after (crtc_flush). 5. Simpler clock topology: only 'core' (bus gate) and 'pix0' (pixel divider) clocks; no axi or ahb clocks required. Make axi_clk and ahb_clk optional (devm_clk_get_optional_enabled) so DCUltraLite nodes without those clocks are handled gracefully. Add vs_dcu_lite.c implementing the vs_dc_funcs vtable for the above differences. The probe now selects vs_dcu_lite_funcs when the identified generation is VSDC_GEN_DC8000 (DCUltraLite reads model 0x0, revision 0x5560, customer_id 0x305). Extend Kconfig to allow building on ARCH_MA35 platforms. Signed-off-by: Joey Lu --- drivers/gpu/drm/verisilicon/Kconfig | 2 +- drivers/gpu/drm/verisilicon/Makefile | 2 +- drivers/gpu/drm/verisilicon/vs_dc.c | 9 ++- drivers/gpu/drm/verisilicon/vs_dcu_lite.c | 78 +++++++++++++++++++++++ 4 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 drivers/gpu/drm/verisilicon/vs_dcu_lite.c diff --git a/drivers/gpu/drm/verisilicon/Kconfig b/drivers/gpu/drm/verisili= con/Kconfig index 7cce86ec8603..295d246eb4b4 100644 --- a/drivers/gpu/drm/verisilicon/Kconfig +++ b/drivers/gpu/drm/verisilicon/Kconfig @@ -2,7 +2,7 @@ config DRM_VERISILICON_DC tristate "DRM Support for Verisilicon DC-series display controllers" depends on DRM && COMMON_CLK - depends on RISCV || COMPILE_TEST + depends on RISCV || ARCH_MA35 || COMPILE_TEST select DRM_BRIDGE_CONNECTOR select DRM_CLIENT_SELECTION select DRM_DISPLAY_HELPER diff --git a/drivers/gpu/drm/verisilicon/Makefile b/drivers/gpu/drm/verisil= icon/Makefile index 9d4cd16452fa..960af0861dfa 100644 --- a/drivers/gpu/drm/verisilicon/Makefile +++ b/drivers/gpu/drm/verisilicon/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only =20 -verisilicon-dc-objs :=3D vs_bridge.o vs_crtc.o vs_dc.o vs_dc8200.o vs_drm.= o vs_hwdb.o \ +verisilicon-dc-objs :=3D vs_bridge.o vs_crtc.o vs_dc.o vs_dc8200.o vs_dcu_= lite.o vs_drm.o vs_hwdb.o \ vs_plane.o vs_primary_plane.o vs_cursor_plane.o =20 obj-$(CONFIG_DRM_VERISILICON_DC) +=3D verisilicon-dc.o diff --git a/drivers/gpu/drm/verisilicon/vs_dc.c b/drivers/gpu/drm/verisili= con/vs_dc.c index c94957024189..81a8d9bf85bd 100644 --- a/drivers/gpu/drm/verisilicon/vs_dc.c +++ b/drivers/gpu/drm/verisilicon/vs_dc.c @@ -90,13 +90,13 @@ static int vs_dc_probe(struct platform_device *pdev) return PTR_ERR(dc->core_clk); } =20 - dc->axi_clk =3D devm_clk_get_enabled(dev, "axi"); + dc->axi_clk =3D devm_clk_get_optional_enabled(dev, "axi"); if (IS_ERR(dc->axi_clk)) { dev_err(dev, "can't get axi clock\n"); return PTR_ERR(dc->axi_clk); } =20 - dc->ahb_clk =3D devm_clk_get_enabled(dev, "ahb"); + dc->ahb_clk =3D devm_clk_get_optional_enabled(dev, "ahb"); if (IS_ERR(dc->ahb_clk)) { dev_err(dev, "can't get ahb clock\n"); return PTR_ERR(dc->ahb_clk); @@ -134,7 +134,10 @@ static int vs_dc_probe(struct platform_device *pdev) dev_info(dev, "Found DC%x rev %x customer %x\n", dc->identity.model, dc->identity.revision, dc->identity.customer_id); =20 - dc->funcs =3D &vs_dc8200_funcs; + if (dc->identity.generation =3D=3D VSDC_GEN_DC8200) + dc->funcs =3D &vs_dc8200_funcs; + else + dc->funcs =3D &vs_dcu_lite_funcs; =20 if (port_count > dc->identity.display_count) { dev_err(dev, "too many downstream ports than HW capability\n"); diff --git a/drivers/gpu/drm/verisilicon/vs_dcu_lite.c b/drivers/gpu/drm/ve= risilicon/vs_dcu_lite.c new file mode 100644 index 000000000000..11ef57d5ebaa --- /dev/null +++ b/drivers/gpu/drm/verisilicon/vs_dcu_lite.c @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2026 Joey Lu + */ + +#include + +#include "vs_crtc_regs.h" +#include "vs_dc.h" +#include "vs_primary_plane_regs.h" + +static void vs_dcu_lite_bridge_enable(struct vs_dc *dc, unsigned int outpu= t) +{ + regmap_set_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_RESET); +} + +static void vs_dcu_lite_bridge_disable(struct vs_dc *dc, unsigned int outp= ut) +{ + regmap_clear_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_RESET); +} + +static void vs_dcu_lite_crtc_begin(struct vs_dc *dc, unsigned int output) +{ + regmap_set_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_VALID); +} + +static void vs_dcu_lite_crtc_flush(struct vs_dc *dc, unsigned int output) +{ + regmap_clear_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_VALID); +} + +static void vs_dcu_lite_crtc_enable(struct vs_dc *dc, unsigned int output) +{ + regmap_set_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_ENABLE); +} + +static void vs_dcu_lite_crtc_disable(struct vs_dc *dc, unsigned int output) +{ + regmap_clear_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_ENABLE); +} + +static void vs_dcu_lite_enable_vblank(struct vs_dc *dc, unsigned int outpu= t) +{ + regmap_set_bits(dc->regs, VSDC_DISP_IRQ_EN, + VSDC_DISP_IRQ_VSYNC(output)); +} + +static void vs_dcu_lite_disable_vblank(struct vs_dc *dc, unsigned int outp= ut) +{ + regmap_clear_bits(dc->regs, VSDC_DISP_IRQ_EN, + VSDC_DISP_IRQ_VSYNC(output)); +} + +static u32 vs_dcu_lite_irq_handler(struct vs_dc *dc) +{ + u32 irqs; + + regmap_read(dc->regs, VSDC_DISP_IRQ_STA, &irqs); + return irqs; +} + +const struct vs_dc_funcs vs_dcu_lite_funcs =3D { + .bridge_enable =3D vs_dcu_lite_bridge_enable, + .bridge_disable =3D vs_dcu_lite_bridge_disable, + .crtc_begin =3D vs_dcu_lite_crtc_begin, + .crtc_flush =3D vs_dcu_lite_crtc_flush, + .crtc_enable =3D vs_dcu_lite_crtc_enable, + .crtc_disable =3D vs_dcu_lite_crtc_disable, + .enable_vblank =3D vs_dcu_lite_enable_vblank, + .disable_vblank =3D vs_dcu_lite_disable_vblank, + .irq_handler =3D vs_dcu_lite_irq_handler, +}; --=20 2.43.0 From nobody Fri Jun 12 01:56:49 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4D02318BB3 for ; Mon, 8 Jun 2026 02:33:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885982; cv=none; b=Gp51phs0ONrLoKeISfdT82aZVQst/OTPdx/4X2fxr4j9wOydg2nGbA5YKAjF/hm78TV8f66RBLspz6X3rUywtwYCQnzrEOxxTgFjlUcqu0gqvOjHEignEQdY67tvFIXdfMyioqlYFCLD2I9+Sw+kCYgSzOGlXBttMWdzEHJtIiU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885982; c=relaxed/simple; bh=++CKghhbrQtUPRbNbH05zSCL2GLQP0/kbTxCcyZXZAU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EC+LxN6kR9KFvDaL3OqRizA8IKOmnxoildOpGbjOUP1imcyf2FvL1JzVPfD9QTShk9UikumS4e2vOoLvb+lwiCdK/xkJZI4Kq1lYmaYDmuVKDA1M9x5y6w5kk2Wh1pJum+vDqwlgkZas0vIpLtOFTZAHYmhlLm/V8FuNkKU1FbI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MCSFQVTy; arc=none smtp.client-ip=209.85.214.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MCSFQVTy" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2c0c3543590so24740525ad.2 for ; Sun, 07 Jun 2026 19:33:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780885981; x=1781490781; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=j20V0GuPV7rBgGUjbhfpY7XnYJHwynd15A65eNviT9Q=; b=MCSFQVTy2oc7efnozeKvKxFjaoY0JLxdHqCWA0iZpoTVGbESFxjrG4Tf2MacgpiAbs D191tlOsvWgZaMohQ4ogAlDIipKJrt4OxzOu8iyapNYVD7TNuOUggY0FI41zmhzdgiYd Mh0zZnnlw5fAOH+wo+teNcF2kLdgszeifFYJ+x2l7dySsmimtxVQOqrSANIdsFeaBY0m D6Bh72TWA6yHXhdPANL9vBOjKLPUd/OydX8xblRXwX5iUTwOWui7LuqgJA7QoYPQgUfY ta3PfYffrEKsmkkfLmtbtDi6L0ab5t27/gYXqKCzdolO/0bf86VZspJJOusI6zpdw/NQ P7NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885981; x=1781490781; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=j20V0GuPV7rBgGUjbhfpY7XnYJHwynd15A65eNviT9Q=; b=FsHNBT/cghOuwHgQU8Nrp1QRmRDZXeBS7M+Ytc25EJkQMvqEzyLyOzLbzBONLIwlNQ mHPAU2oa6NpSLY+wpr2qIyOwgIcVqbZE3scWLN0FJ6KsYeV4rgrX4MPjnodF4156TDS4 5nNdYgaqBK8Sva+EsMNw7S4R7iDmMT50QapaCzSZ9MengDl5QRXmtiC9H7vCVXJb2Xxl nU4krrTh9oD1NgmoY9B2xs7ThK/JTRw0VEZj9hX5Yt0c8pu1MM3OabnyFr5ZARdDJkbR IK9/Iw8Gb1iX9OJpaXN182w6TLeOmXQ2WM+qCgnHuzQ1GOUv6FkYBP19vJrtqnci3mlD 1c9w== X-Forwarded-Encrypted: i=1; AFNElJ+eCb7FEMCo8zpWSVCIuVYOkThSArSpDviW+M6X31hEEMTSARm8RkJGZGzc+kRcamrO5WYoD/Bxvtd1z5o=@vger.kernel.org X-Gm-Message-State: AOJu0YxHpdFiKrCiZQEdyD+ZYZpXY3I0jiiwmW3JiCtg4TLc5xbxQnkI Z8smywDwlyhEgPpSgq5PhZSWv1e0mYWUTSRYDYRMVmAbdZZJySaI/LpAAVoO2g== X-Gm-Gg: Acq92OFEb3Bkisr+tcWxQEq7dPJQrQzdpEZy+PVARpd9A7RCU42Ozr0j6HfGTv5kLcs o0lbgaHtd7iWZnD1HwdDHmz9QqEuBPAV38Usydl4zUMqCBNjGVHemiynzJE/8Suyo77JGmbdmxr pmvDx98fHFHlfjDpVkVtgxT8ZTqOAnqhdq6oGpTVCrD2r5Gmn9wMPdGvhKnAqB4Zre1PRfCVT5z e7NqkqOP9CkLVY3tXGUVDHMlwHnAwYJL1CD4kAILu+3ej1DEkcS9+usaTSZKAgXdC12R1b00NQE 7FLT9eu5oTFglOuKuHotzCUUZaleC4hyuT3Ikb9vEawHW8OQ+Ni4eGBhVfbGKGO8/vUZUzPjWTx oFLA39i1arCStwEsZEBkE8Gvth7AXjRjHivTUXQV9yI7EKhvf6YI7NyPRnwmPjQ0aptMzOvTtRC MEZtfJuMWxgoVN5+XUzxTJ0vbMOisrQN/xkJPoZNh6vxvd4sA2w0g3Uj+x8VljXV27Q1wdQ0jUy m5tr+lL/iVStBSg/PlwytA= X-Received: by 2002:a17:902:d2c6:b0:2c2:245a:3360 with SMTP id d9443c01a7336-2c2245a33c4mr100349275ad.6.1780885981043; Sun, 07 Jun 2026 19:33:01 -0700 (PDT) Received: from localhost.localdomain (60-250-196-139.hinet-ip.hinet.net. [60.250.196.139]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c245dd3b5dsm38143485ad.81.2026.06.07.19.32.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:33:00 -0700 (PDT) From: Joey Lu To: zhengxingda@iscas.ac.cn, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: ychuang3@nuvoton.com, schung@nuvoton.com, yclu4@nuvoton.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joey Lu Subject: [PATCH v3 5/5] drm/verisilicon: add DCUltraLite chip identity to HWDB Date: Mon, 8 Jun 2026 10:32:37 +0800 Message-ID: <20260608023237.305036-6-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260608023237.305036-1-a0987203069@gmail.com> References: <20260608023237.305036-1-a0987203069@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Register the Nuvoton MA35D1 DCUltraLite chip identity in vs_chip_identities[]: model =3D 0x0 (DCUltraLite; Verisilicon uses 0 for this IP) revision =3D 0x5560 customer_id =3D 0x305 generation =3D VSDC_GEN_DC8000 display_count =3D 1 max_cursor_size =3D 32 Placing this entry last makes it the gate that enables MA35D1 hardware recognition only after all the supporting ops and DTS changes are in place. Signed-off-by: Joey Lu --- drivers/gpu/drm/verisilicon/vs_hwdb.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/gpu/drm/verisilicon/vs_hwdb.c b/drivers/gpu/drm/verisi= licon/vs_hwdb.c index 91524d16f778..7d630a667a3f 100644 --- a/drivers/gpu/drm/verisilicon/vs_hwdb.c +++ b/drivers/gpu/drm/verisilicon/vs_hwdb.c @@ -129,6 +129,16 @@ static struct vs_chip_identity vs_chip_identities[] = =3D { .max_cursor_size =3D 64, .formats =3D &vs_formats_no_yuv444, }, + { + .model =3D 0x0, /* DCUltraLite */ + .revision =3D 0x5560, + .customer_id =3D 0x305, + + .generation =3D VSDC_GEN_DC8000, + .display_count =3D 1, + .max_cursor_size =3D 32, + .formats =3D &vs_formats_no_yuv444, + }, }; =20 int vs_fill_chip_identity(struct regmap *regs, --=20 2.43.0