From nobody Thu Jun 18 17:58:40 2026 Received: from mail-dy1-f169.google.com (mail-dy1-f169.google.com [74.125.82.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 39A253AFAFF for ; Mon, 15 Jun 2026 06:50:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506216; cv=none; b=jILpocCcCOoxUaTif2q2EXQZcpUrpMbVydD4P7jzZYh0COvRtIobujUlTL6U6Fr66sygYfeUZ+sIvUHok6hVcvHCAfEjz4wQjDflzxwXkwVXS/SHCfHzhcgyvvnQXcgLMqbAghZyOk2Ocihqlfp7i7c5EvFsw42nf/eD/EnVFn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506216; c=relaxed/simple; bh=r/bbII9aD020V2/LAtT76aUh9hHr+gLtRWgDFPIhPa4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IGmJ/ygQChJ5/rWHeKxHCjGmAFMdVBNrDwQYs+uqXc3Xgq21kNI6JHFmGuv0WMdwlCnZX9t8K2NJElDeUgFLV8MFlh9RBQZxSXqpJZTzId7CBulkX0b6iM4RL8OBWZ9pBXVk4esfYDSaBhOt/6nMJr0779fMIDGfy0vPaEdzuoQ= 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=gL94Q+8B; arc=none smtp.client-ip=74.125.82.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="gL94Q+8B" Received: by mail-dy1-f169.google.com with SMTP id 5a478bee46e88-3042a388168so2126766eec.1 for ; Sun, 14 Jun 2026 23:50:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781506214; x=1782111014; 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=lenEIxoLi6+YCq/tfMwIzvmfL+sfiBY8pQSkNEn0Xhs=; b=gL94Q+8BhWAgbyo1ZXlLRRQMZ1F+FQ0F7M/SrfUZXRKezKbSBuj+bLgSxcUWtqsTAj mlQsk7GQnJs63bt/u+wusE0/8zIGO18OaTDw+Dgqi+8K/PYyCyORU99Grl7v5kJeLbTK v837mUMEnjAxU2sNC0JVyKDoeULo5fJERmT1lIihSsjWw0LXVYKOUiVm44sVGcTOedy8 aUy3w96YUKVx3H0iz0965zi4J05EMesuH+2Asu2TlZtxXu7D76kbGGQMcFpvlwwrtXtE d7euC481f4bxCak0kwEjPXNrpDhIULHeW5Q15moXUadueM/fK1gIinveU9x4NCvjc1SQ INgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781506214; x=1782111014; 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=lenEIxoLi6+YCq/tfMwIzvmfL+sfiBY8pQSkNEn0Xhs=; b=L3nDZVGAXQDm1726nb7cjVxucyTXHyd15aZccXvvjoaB0ZPutuWsScQAW94IvYqWEt Ws9w5c8XG1t6VcjwaUrDjTf5u9kUzAyVa0dxR9CTVPLwEg6F48YKAD08ZKT+wVcpK8zx Ds33OKyqjZ9g45nrAj4Kv1/c1lN+lRIvICpzIIFGZDzzkH0j0HFKEcjFYF5sp8xjiNEM w3nWTt8oRDQU4eYXPiNIdzVplcA2dmbI9G4iSCd1vgy5guWjRujqrpxhj+cuzKyWfDlF 0K2g2z7PcSu5NkjZNZrTbbFoU3BhtO19TE7yIo0NOBWREcAuPIKt6Gk7ZkuiqaIZw2fS c4sg== X-Forwarded-Encrypted: i=1; AFNElJ+LXATEgo/W/8jUy/6ALSNoYMdrmH0MF8wr5cihNJIvlttJAAlJZJCeJl8VvdHQchc6t0fXyuABMlutU6U=@vger.kernel.org X-Gm-Message-State: AOJu0YxW3a4mosqs4F48jauFC6MsbVshJwp/+2UG7RjaTBgazbG9jIbv WRJuGA8FROTP4eipcBCUrW8DZIA/qMRl+My5ym2s6bybUzkmSxwer41w X-Gm-Gg: Acq92OG7u7bssc7G53+2db5YzaBXQkLvH/DlrinzCKwAa3nGUaMBJZ5WL8AtETmrrS8 Wf2MWUVngApQ4EO8QHaQaW96bmTf+ggmfyEdgdgCKg6zEvYO1dHulxFmi2n/5k8Pt+Ix7hEy5ex w+BIE/wLu6O7Pef2PW69WIanHyxbnKB6RMiiq1Hzx2o2JPb1VrGrCx8JIdNsMQLOXOEdMzJ0sxB 77PelZgJE6QI6mdtAU2of4i2eZX9HW2e6OqlLPHbbkOrqbW3PwdCMbkOOcB+cyPiCeqjwIGglng pjQdjKJsRfRSkXxcFb0V+BXbn1T3tsrUmX/qdt9/6Kqqj9MgpjtEDNOLPgh8EmSv4/EhYG9v1ki bP0Clq4JTqdOB1/aCOoVuu9RzRKH9R90GJ2uAVZMHv9uMD6k1oNQgxmPBnjXhDgLuCxdcfqLMMK J7c5//zHUTgkUxNs7UQaJoQ552fdZ/4JUytqr7pYVnedQOe69daSjsgVZL0AbStWXFxv/NvudY7 fHvDq2g+6IK X-Received: by 2002:a05:7300:6da4:b0:2d9:db50:c6ce with SMTP id 5a478bee46e88-30820c0a172mr6428010eec.3.1781506214227; Sun, 14 Jun 2026 23:50:14 -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 5a478bee46e88-3081eb9a2e7sm13516812eec.30.2026.06.14.23.50.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2026 23:50:13 -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 v4 1/6] dt-bindings: display: verisilicon,dc: generalize for single-output variants Date: Mon, 15 Jun 2026 14:49:58 +0800 Message-ID: <20260615065003.76661-2-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260615065003.76661-1-a0987203069@gmail.com> References: <20260615065003.76661-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. - Move clock and reset items descriptions into the per-variant allOf/if blocks; keep only minItems/maxItems at the top level so the base schema accepts all variants. - Restore full items lists for clock-names and reset-names at the top level with minItems so the names are validated against the descriptions. - Keep ports in the global required list and keep additionalProperties: fal= se. - Add an allOf/if block for thead,th1520-dc8200: five-clock (core, axi, ahb, pix0, pix1), three-reset (core, axi, ahb), required resets. - Add an allOf/if block for nuvoton,ma35d1-dcu: two-clock (core, pix0), one-reset (core), required resets. Signed-off-by: Joey Lu --- .../bindings/display/verisilicon,dc.yaml | 80 +++++++++++++++++-- 1 file changed, 73 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/display/verisilicon,dc.yaml = b/Documentation/devicetree/bindings/display/verisilicon,dc.yaml index 9dc35ab973f2..0c41286b8223 100644 --- a/Documentation/devicetree/bindings/display/verisilicon,dc.yaml +++ b/Documentation/devicetree/bindings/display/verisilicon,dc.yaml @@ -17,6 +17,7 @@ properties: items: - enum: - thead,th1520-dc8200 + - nuvoton,ma35d1-dcu - const: verisilicon,dc # DC IPs have discoverable ID/revision regis= ters =20 reg: @@ -26,14 +27,12 @@ properties: maxItems: 1 =20 clocks: - items: - - description: DC Core clock - - description: DMA AXI bus clock - - description: Configuration AHB bus clock - - description: Pixel clock of output 0 - - description: Pixel clock of output 1 + minItems: 2 + maxItems: 5 =20 clock-names: + minItems: 2 + maxItems: 5 items: - const: core - const: axi @@ -42,12 +41,16 @@ properties: - const: pix1 =20 resets: + minItems: 1 + maxItems: 3 items: - description: DC Core reset - description: DMA AXI bus reset - description: Configuration AHB bus reset =20 reset-names: + minItems: 1 + maxItems: 3 items: - const: core - const: axi @@ -59,7 +62,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,6 +80,69 @@ required: - clock-names - ports =20 +allOf: + - if: + properties: + compatible: + contains: + const: thead,th1520-dc8200 + then: + properties: + clocks: + minItems: 5 + maxItems: 5 + items: + - description: DC Core clock + - description: DMA AXI bus clock + - description: Configuration AHB bus clock + - description: Pixel clock of output 0 + - description: Pixel clock of output 1 + + clock-names: + minItems: 5 + maxItems: 5 + + resets: + minItems: 3 + maxItems: 3 + + reset-names: + minItems: 3 + maxItems: 3 + + required: + - resets + - reset-names + + - if: + properties: + compatible: + contains: + const: nuvoton,ma35d1-dcu + then: + properties: + clocks: + minItems: 2 + maxItems: 2 + items: + - description: DC Core clock + - description: Pixel clock of output 0 + + clock-names: + minItems: 2 + maxItems: 2 + + resets: + minItems: 1 + maxItems: 1 + + reset-names: + maxItems: 1 + + required: + - resets + - reset-names + additionalProperties: false =20 examples: --=20 2.43.0 From nobody Thu Jun 18 17:58:40 2026 Received: from mail-dy1-f169.google.com (mail-dy1-f169.google.com [74.125.82.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 DCE693AF644 for ; Mon, 15 Jun 2026 06:50:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506220; cv=none; b=BAmYl4fStb+BBf7Y33oE5MhrYFbZhZnp8mrmL20xHXxLtXg62kQO/mJTCgzNzA/AL9q2iGzoxRe9zBniW4pkT45Y2PRBUwaVScEGP3w4oHmiV8GcdfECfG+FX2IorDNttkgoIZvqt/jKkRuxbuRjLxR5p2SmwqUI6z5GZ6BG0Ko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506220; c=relaxed/simple; bh=Gh9vukGG0EkYLgIUTZAT1C0JDx5DzI9vsn6+Jijzi30=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ifi0cKBa36FBIiVeYCOFZ8TAGYxHbn0APSASiWWfjNMfCa8x7sDD0me+HiV0vvgX454K9Kqx9A+LXtfc+IfbquescjI1wMaJKYWzyyWa/KNPdqKMNrgZI46UnyJ34Yd/T0isQpgeoTcu5+dyRsqn13TdSQpuDzCHnx7y9kBBGS8= 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=U0GXFZU7; arc=none smtp.client-ip=74.125.82.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="U0GXFZU7" Received: by mail-dy1-f169.google.com with SMTP id 5a478bee46e88-304d7f31215so2728174eec.1 for ; Sun, 14 Jun 2026 23:50:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781506218; x=1782111018; 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=VJAMcsXbQ5jLlRv6m7LlcFvxZJca/ceaoDodoBDS/Yg=; b=U0GXFZU7C1LMsoJXtJThvBUv/CDyObTPL5wDMEF0h4bPwGJj0GTJl6YbZA45eWJttv DV8DYtGx2gY/JW3nsVMSu/fd9MqD6WH0zG7gOm8YUimJmRs0HxvfFUVstxnLiFY9MCxB K59dP+j3NljP5Q9Ji8CZvDZGO7kK6AJyvk0gyKKuqbCQh+iPt9YQo3E4G7rYyFOePzB3 Z7YsRFd8Uj/a4/0z955REhmou1Gbq0Zxf6Z65lqwHCoTslrKd5y8eTJuQhkfsrEqPs4q jFPhxxCxVptYiDyCHjbcPEbIwm14MWzpgpOPzNZZnJoIgO03ttEixqeR4b/iXfIIFBbP OgSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781506218; x=1782111018; 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=VJAMcsXbQ5jLlRv6m7LlcFvxZJca/ceaoDodoBDS/Yg=; b=dH6iymDWZqspavaTGGuYxRQsN9kzbZfQMBqP8/94RHmGmjBVrn3X+78NJwnTg0u4FS vxUawdY7Slh9LPsjHyaSOkjhqU5L4mqE6FESrmZbypZPrZ7EA+HnWBwuQmrPXjatKuuh g/fLI8iSn3hdBF/Nkdt0Lr6p3lsR/mAfPcCZFCuhH/IM2NeqK1U5h12JFLGCmbX4FA95 /pPOnHrJq38S4gOJjsDF7lY5JtXKN1iacK0VxvBPejMUKC+62vVilod6xXbpzP2kbL3d brMpDfqbXWrA7SHH14KKpIWzNYuPCFiRUNfTPT9rt7YkJBN7EcQwPbV/nJS6JkuRTS2H Bs2A== X-Forwarded-Encrypted: i=1; AFNElJ9+mhngiYfsO+Nb5noMDfSm7Gu5olLi5VR2mgDNhTmpj+FuuJPNY1LqyiR01UwHbLKpG9O/1DEQN7xfU8k=@vger.kernel.org X-Gm-Message-State: AOJu0YwcV5QrfTah4fzkH7M4atLcs808pjZLtm2uvh3OY49YdBqK8y8C yneSh4yD2FmMopOvHJi4RYo6wm4Nhc+iqJhswmOOC0go+3qifowVot7y X-Gm-Gg: Acq92OH1mTsQGcR5KnhKUY75giRoSV4aJm/a95xf/Ihm9A5hF5bHan0lQOx2eNb1Dp3 WixKyBxhfk7YxyNBSeDmzTIWijeBWYHLhw2pgbOwNaq+e0JQDH2Ambym6WXq+w9U8lbHQW0pr+o Pl79OIwc22jNgisBIUrR4+LLLTNS3o9QTI5Pix00iBneJSFQERTF3rIK350By3zaPqk3aW5mc+a BWzJxlykcJefNtHGiY+Dev73KMcp55hcwd7/8TOPVPvvaUHJJOAw5907HunXUFoROOTK8KAFN3/ A7IRhRRLYYVrs9qbG5ME6ABaalOqP3vzMrvb/2EwCpYY+y6Q0Ar8i//SjdMYyMUL6G4x6qNAlB3 HULXGqX1PhY/WmRuLxlxver5mSvbxMUiJo2hH6EYMDlDhmbPqFOFAmZikowo7a9dCc3Tab7DKnr iJQ3RPAgHzUmKbjYSejffNICTcc4r9yJ0BMTu49iZcN0XgDA7EcWBA3xuukqZWDP09S4iSXomH/ 7Ss0R/KaTx8 X-Received: by 2002:a05:7300:4348:b0:2ea:ed70:3ea8 with SMTP id 5a478bee46e88-30820098f00mr7010291eec.29.1781506217988; Sun, 14 Jun 2026 23:50:17 -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 5a478bee46e88-3081eb9a2e7sm13516812eec.30.2026.06.14.23.50.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2026 23:50:17 -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 v4 2/6] drm/verisilicon: add register-level macros for DC8000 Date: Mon, 15 Jun 2026 14:49:59 +0800 Message-ID: <20260615065003.76661-3-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260615065003.76661-1-a0987203069@gmail.com> References: <20260615065003.76661-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 DC8000 (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 Reviewed-by: Icenowy Zheng --- 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 Thu Jun 18 17:58:40 2026 Received: from mail-dy1-f169.google.com (mail-dy1-f169.google.com [74.125.82.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 C966F358387 for ; Mon, 15 Jun 2026 06:50:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506224; cv=none; b=CioSrSB4NDmLAZthGb1h/judnWhULA6N4Xl7kxld/EIMOr6Zy1/rpMGNafat+vlvQ+5zHHj8ZOnJfFG39/RrAcgC2lG97E+HmeQIHI/TUvHl1/HiUA84xd3V5dKQ5sNnFFcwZveq6XZaFUatPJccpwcCQJTi6wxkroiR8I1KdGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506224; c=relaxed/simple; bh=AXQEeHW0UHOcGWyx5Ay7l62qDbtJ5kNlBQT0KTHhl/Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GBxRCAU2HbUktNkJIICmTvHdfrXmnrGusK5zD1Aloa8bkw9DrSoPWyxINTocZH7EeN6gICi4cALKnM7I558ih8CMfJt+DlQcEPUsn6295HaVF/VSDcsOwR/ZK0zCN5ygSdY6VLnISWJGcckL661j03ZrZbkK3DNgCj3gG2qEIf4= 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=l0H3vYtT; arc=none smtp.client-ip=74.125.82.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="l0H3vYtT" Received: by mail-dy1-f169.google.com with SMTP id 5a478bee46e88-304cf518c9dso4665106eec.1 for ; Sun, 14 Jun 2026 23:50:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781506222; x=1782111022; 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=lTxOxP2AgWskARZg6NSGXzdMe23kwaFwXvGOVJra1wU=; b=l0H3vYtT1TSImmegKMPpgwfofstUlPLwDKiMD830O9TANkmUhwi8xRkDuXBbpSOzCz LaRRCEeT8TMWo1zJwptcpA2GJvnh9ayut7RfUzjAJ3ft7iS+dG5lg3U8sIWkTQHcRd5w l62Qh9ctlGudlu3izOR7yiOMN6XYe65qlWRJDFasidxeuz5R7bmK3YPiRY8ssOidhUdP 7IiDiBEqs6DN8YPjw6JJt3aGUxzj2M63297fe2S6G7CNnNLJNuzeKHlAogYDx8LmJSLN y/k4I29qEfo9zElhgpbaA6Rsg/vN3OUazKaEkgXNQ/quW7LEuE8Fb/HB2bQvG9qZJ7HG cEwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781506222; x=1782111022; 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=lTxOxP2AgWskARZg6NSGXzdMe23kwaFwXvGOVJra1wU=; b=XJ+FMp3uOYmoFyi/6QO5Lv2muQ0jbxSARklBfiYyEpzpApkcyTd2XMGEgIJn0FUzR4 KdN68oVtnxiPQkIzFgR10c1R5pY+PviD8ZWqOsdy453ZZFjL0ZODeJG6jtlrRA8dnrDi M48XCVQhBF3DUUKEHiJ5ZSxmoSE7utLExbFS/OCkenZZtBZOG/9fz3hApDSTnsLZivXE MRJ+TvURP506NUGgxIHITT+jVJKr1DDEOibBAHeF04fp60LA3LThi77ubGstjLxVnINy 7j7Gbb7hznLOzEtfbJalSblcxl2MlOP3Rb2ZvmrmsJMgBLFlDVSOd3Y5/piGNS+M+M9/ 797Q== X-Forwarded-Encrypted: i=1; AFNElJ/h6y7sR0orlM25qUK+wLFWPlPXOiqq9spfJF6gCRwI0k5g1Q5NzUodzYiOPwC72HRAiDEXqq8WvUIK/nY=@vger.kernel.org X-Gm-Message-State: AOJu0Yzriyu0oKkIPpUingM6d+9N6z7bVq/Z20Jvh5abX6XmSy040jF2 nTloeP8VKxrTpFBeLvWa4+0t6h4oUipeTue7BG4bUtdFYxX+bfYSb2uT X-Gm-Gg: Acq92OHmqIuF2PFna0C4T1p1qkR7Nna8rKxUU/7ZGe8Y42n/UIfCTsgZQkK7cJ21zXb T5satYWgt8TcpqLS1DkXppuVRpg5eyM2vUe8widJKzQmAGKhEyuFgkI3DTFL4DBKCAzPHv2eN1U bUHKh5pC6F+SshKj/x4lyKfkvU/iM8LieLvYiwj+kKrhQz5QfpiwmD+L4J+Dg52q4OnRNPe92+9 qCrRybKIoUfgfBS0zBIrG693227sbnoTIsvb9JJjgics4PTnQD28ySQIe/15LKvMuwCz9TkN9Ha zejSvYpbDB0MGmatQkYytGx8VpJ604WwQ3LmNU0JpBcRfHNkrszWw5MwKrSmeWzB4qI46j2Vr8u biQImKALa2PbRpUWHEtWuj2uf9+KZn4u1CoXM2zWUYu3kB/7glSen2xnL/U2KyRuD8m8hYK0GOV N+IEDYX9lWxXhWnVtSBK8EmtAyXzCXeaBPbcMND6vEvmZR/Rv44eIjV6Odb0Sv5S3D9z8gG4Fnw fw8w1B+MvJ/ X-Received: by 2002:a05:7300:4350:b0:2be:7fc2:fc38 with SMTP id 5a478bee46e88-3093551a511mr4809725eec.5.1781506221750; Sun, 14 Jun 2026 23:50:21 -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 5a478bee46e88-3081eb9a2e7sm13516812eec.30.2026.06.14.23.50.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2026 23:50:21 -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 v4 3/6] drm/verisilicon: introduce per-variant hardware ops table Date: Mon, 15 Jun 2026 14:50:00 +0800 Message-ID: <20260615065003.76661-4-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260615065003.76661-1-a0987203069@gmail.com> References: <20260615065003.76661-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: panel_enable_ex / panel_disable_ex - PANEL_CONFIG/START + CONFIG_EX commit enable_vblank / disable_vblank - TOP_IRQ_EN VSYNC bit primary_plane_enable_ex / disable_ex / update_ex - FB_CONFIG_EX path irq_ack - 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 | 32 ++++++ 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, 196 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..6ff2ac745b15 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->panel_enable_ex(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->panel_disable_ex(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..9729b693d360 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_ack(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..544e1a37065b 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 (*panel_enable_ex)(struct vs_dc *dc, unsigned int output); + void (*panel_disable_ex)(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 (*primary_plane_enable_ex)(struct vs_dc *dc, unsigned int output); + void (*primary_plane_disable_ex)(struct vs_dc *dc, unsigned int output); + void (*primary_plane_update_ex)(struct vs_dc *dc, unsigned int output, + struct drm_plane_state *state); + + /* IRQ acknowledge */ + u32 (*irq_ack)(struct vs_dc *dc); +}; =20 struct vs_dc { struct regmap *regs; @@ -33,6 +62,9 @@ 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; + #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..800df9279e9b --- /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_panel_enable_ex(struct vs_dc *dc, unsigned int outpu= t) +{ + 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_panel_disable_ex(struct vs_dc *dc, unsigned int outp= ut) +{ + 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_primary_plane_enable_ex(struct vs_dc *dc, unsigned i= nt output) +{ + 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_primary_plane_disable_ex(struct vs_dc *dc, unsigned = int output) +{ + 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_primary_plane_update_ex(struct vs_dc *dc, unsigned i= nt output, + 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_ack(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 { + .panel_enable_ex =3D vs_dc8200_panel_enable_ex, + .panel_disable_ex =3D vs_dc8200_panel_disable_ex, + .enable_vblank =3D vs_dc8200_enable_vblank, + .disable_vblank =3D vs_dc8200_disable_vblank, + .primary_plane_enable_ex =3D vs_dc8200_primary_plane_enable_ex, + .primary_plane_disable_ex =3D vs_dc8200_primary_plane_disable_ex, + .primary_plane_update_ex =3D vs_dc8200_primary_plane_update_ex, + .irq_ack =3D vs_dc8200_irq_ack, +}; 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..f992cb277f61 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->primary_plane_enable_ex) + dc->funcs->primary_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->primary_plane_disable_ex) + dc->funcs->primary_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->primary_plane_update_ex) + dc->funcs->primary_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 Thu Jun 18 17:58:40 2026 Received: from mail-dy1-f175.google.com (mail-dy1-f175.google.com [74.125.82.175]) (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 508DA395AF1 for ; Mon, 15 Jun 2026 06:50:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506227; cv=none; b=XiVs6Th9FDKC5OkcDSK3pkYMbT4GJXCk4tyYsQQAVyMc6o1hAFwbVmtj9oP9xTDRUBIzMso/Wtxfcin/H+w1AyN7cCGyT4gpXCsyZf0NgEtqCKPO93HA4L2Ncr7oaETLrYH/AviOiVDjacEIMx7h63lhKQj4+TfXSSZuFzcBsaY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506227; c=relaxed/simple; bh=Xi6JHa2crZhAiYcrZ02rWwdTy7oW6vfkpqlmhjJNSNw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E8fMfxKAE2/HqIVItUvj7afnBlDHRiAT3gjbpT0ojNaRIq4z4rsIqln8YovH3B/hkloBlsbE83GhPaYbu9tpYZW75cI8Z7iv3bCcllWBYo4SyHr7YMWMgBBsw0zBsCB90FzVErSssYTbwsIpTe0Vh0sGfU6ArUEvcSt9I21SuL4= 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=CZDfKnvr; arc=none smtp.client-ip=74.125.82.175 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="CZDfKnvr" Received: by mail-dy1-f175.google.com with SMTP id 5a478bee46e88-307263ad0cbso4471572eec.0 for ; Sun, 14 Jun 2026 23:50:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781506225; x=1782111025; 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=RCnGy4eyt7vZGs3J5YesXgpvuGxv5PNGr2RCRubwVqI=; b=CZDfKnvrfpcwz1zlsYDDqkfI9nb+GSszo9oiQpGyybvKHJBWsMWJJa+ddOEcFq55Xz mO/MOM9vQQWcgG0c/vn7l4dpKEzucAdBVvcpyk4gSboDQ54pyakH7boHHPBEMFvWh89o aRED0fWocoV5MMrkf/AfYiBgyFayQnHeyPOpC+mOKGHFfno3Tytp7gMM/3YkJSd30WK4 VsWO9w0KrEYq8d5rFhGNfhSN6OSryb0BFaJeoTYwhNq/C6H6SE8BeSojb0mQppcGHnR0 aAuYphEqMpQcPltmesCd3YeGQM6QxD74Ym5x6O4sWNZ8I258l8xihJVQKyBvWOdU2OMk bV5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781506225; x=1782111025; 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=RCnGy4eyt7vZGs3J5YesXgpvuGxv5PNGr2RCRubwVqI=; b=M9fktqNAhTVed2A9Kqy/boViEfeJUGhxPBK16+l5zXn1Qrk3+3ZGEj0Kpvhje6lTsY sV0sjX1SjsdmhS41iMgihGTXe1fALktu4uaacO6IODsSCYdKUHSQrVsY2OLj6s5zec3Q 0NN222Eo/gtijJRzpTHZ7VSy1n1nj4nrO/s5dJCqX8gxhxn/9YD97mr8RY9i4P1fadL6 CwzhrcZFTha1czYtM7yk8X697iXuRVzdGgITzrECnl0Ks6RfDFPSReqi2tvLfGMvgeWu MgsUSPcFIgq+HyEpoamOhg09w0lpV8xQ/WY8EO+LyuMQZwSUKgLhm28qLMBNuoy5yDAf UB6w== X-Forwarded-Encrypted: i=1; AFNElJ/L6v+qDekvnXT5EQHUnZluwAZvmShpEl0e7gJEpXNsgGWiNGmiKnVYVwcL68Tr0+ROY93CphPreFnu1yk=@vger.kernel.org X-Gm-Message-State: AOJu0YzSNDjqp+VsLh75SEPZu6BXd4DfSrTKaCme5nMptYzdVPt9Nvpo PvruFY1DAD6yN/DB6d88A1LRW/uAo5uLPX0CAvrrt7O3AXoxUgCQCNna X-Gm-Gg: Acq92OH0UnAOR1U6Lp5iipiIX5X/iiwpA5Z+O394QnKIxdtmQvEs7LGVFIicFQ1J9M8 q1LryHIHLxNpnrAgPpumFpoTi4Vk8wTIlRTuQ5erCAqEq/vbNuvhjMTZf2XitwVruPoUagkMSnv GZ2noYCWLw55mXmbQ1eK3u42LdYaZNMPWD7+U0725kvM6+3r1EOkCF6frbUL4eboOXQd5TyQk5N 1+dpzh7D3C0cRjVnQ3QmFHXx/mU5A9nx7ziYPAydgjMYoYyrHbWkOkOP335/TGsUq1fq1XjpEzh DknpAh0z9MvkQpipcfUPJXXuufcWr/7SEUY41m87SYRYsMMdcYdAQwQBNXJ4G7aT2RWFJUppwnP TW1xLEsvTXOKeoMktPPwS2mcpv/xB3VoeB6oOvRsiaO9pl7G2Gkv3TJQyNBLxKLcTMvc2qIiUIk T187fd5Xdm4qrwzl+ustEuSJG7SOjlrgTnTVdGKD3RrW2NuIYZqxUzf+b0aZL8nxgtXgltAXkWd U3c63JXtqKQ X-Received: by 2002:a05:7300:542:b0:2ea:e93a:ff9b with SMTP id 5a478bee46e88-30936a4b1bfmr5180127eec.13.1781506225470; Sun, 14 Jun 2026 23:50:25 -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 5a478bee46e88-3081eb9a2e7sm13516812eec.30.2026.06.14.23.50.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2026 23:50:25 -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 v4 4/6] drm/verisilicon: add DC8000 (DCUltraLite) display controller support Date: Mon, 15 Jun 2026 14:50:01 +0800 Message-ID: <20260615065003.76661-5-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260615065003.76661-1-a0987203069@gmail.com> References: <20260615065003.76661-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 DC8000 nodes without those clocks are handled gracefully. Add vs_dc8000.c implementing the vs_dc_funcs vtable for the above differences. The probe now selects vs_dc8000_funcs when the identified generation is VSDC_GEN_DC8000 (DCUltraLite reads model 0x0, revision 0x5560, customer_id 0x305). Signed-off-by: Joey Lu --- drivers/gpu/drm/verisilicon/Makefile | 2 +- drivers/gpu/drm/verisilicon/vs_dc.c | 9 ++- drivers/gpu/drm/verisilicon/vs_dc.h | 1 + drivers/gpu/drm/verisilicon/vs_dc8000.c | 78 +++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 drivers/gpu/drm/verisilicon/vs_dc8000.c diff --git a/drivers/gpu/drm/verisilicon/Makefile b/drivers/gpu/drm/verisil= icon/Makefile index 9d4cd16452fa..d2fd8e4dff24 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_dc80= 00.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 9729b693d360..9499fffbca58 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_dc8000_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_dc.h b/drivers/gpu/drm/verisili= con/vs_dc.h index 544e1a37065b..5218e8cf63e2 100644 --- a/drivers/gpu/drm/verisilicon/vs_dc.h +++ b/drivers/gpu/drm/verisilicon/vs_dc.h @@ -66,5 +66,6 @@ struct vs_dc { }; =20 extern const struct vs_dc_funcs vs_dc8200_funcs; +extern const struct vs_dc_funcs vs_dc8000_funcs; =20 #endif /* _VS_DC_H_ */ diff --git a/drivers/gpu/drm/verisilicon/vs_dc8000.c b/drivers/gpu/drm/veri= silicon/vs_dc8000.c new file mode 100644 index 000000000000..be0c0d7baf52 --- /dev/null +++ b/drivers/gpu/drm/verisilicon/vs_dc8000.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_dc8000_panel_enable_ex(struct vs_dc *dc, unsigned int outpu= t) +{ + regmap_set_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_RESET); +} + +static void vs_dc8000_panel_disable_ex(struct vs_dc *dc, unsigned int outp= ut) +{ + regmap_clear_bits(dc->regs, VSDC_FB_CONFIG(output), + VSDC_FB_CONFIG_RESET); +} + +static void vs_dc8000_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_dc8000_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_dc8000_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_dc8000_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_dc8000_enable_vblank(struct vs_dc *dc, unsigned int output) +{ + regmap_set_bits(dc->regs, VSDC_DISP_IRQ_EN, + VSDC_DISP_IRQ_VSYNC(output)); +} + +static void vs_dc8000_disable_vblank(struct vs_dc *dc, unsigned int output) +{ + regmap_clear_bits(dc->regs, VSDC_DISP_IRQ_EN, + VSDC_DISP_IRQ_VSYNC(output)); +} + +static u32 vs_dc8000_irq_ack(struct vs_dc *dc) +{ + u32 irqs; + + regmap_read(dc->regs, VSDC_DISP_IRQ_STA, &irqs); + return irqs; +} + +const struct vs_dc_funcs vs_dc8000_funcs =3D { + .panel_enable_ex =3D vs_dc8000_panel_enable_ex, + .panel_disable_ex =3D vs_dc8000_panel_disable_ex, + .crtc_begin =3D vs_dc8000_crtc_begin, + .crtc_flush =3D vs_dc8000_crtc_flush, + .crtc_enable =3D vs_dc8000_crtc_enable, + .crtc_disable =3D vs_dc8000_crtc_disable, + .enable_vblank =3D vs_dc8000_enable_vblank, + .disable_vblank =3D vs_dc8000_disable_vblank, + .irq_ack =3D vs_dc8000_irq_ack, +}; --=20 2.43.0 From nobody Thu Jun 18 17:58:40 2026 Received: from mail-dy1-f169.google.com (mail-dy1-f169.google.com [74.125.82.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 EEF3C3B14DB for ; Mon, 15 Jun 2026 06:50:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506231; cv=none; b=Ino/orx+SW0OFxOPYXJxoTB+9tUDUq+6ycL8WWm5LW2thYPCnAtxmJ0vlsR4sSwChcglyXjiyJZrhO/olV75MX65GFZ24v9MXMBHJXNLasHLDnRno0c79wt9+h+oiAGI09MDB4z9t9Sk0n6WNu/z/3TRqaCW4FkCqxlZBVALRp4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506231; c=relaxed/simple; bh=O+9IF8idxOUgGk8wYKvwtC3nVTgh9+G+/QoU7KoNBQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cI7e795tUZg3Xf8DdIC6al6mTW9t9xHG2H72nG840wt99F1z5wm3uAWX33Bs4puD/KzQEYvi/BVPg/Pi2gyx3O/qJBG0dXepQkLkw92rwlNH9P5uLaOmjjiAfVeLVBqTk5krAb4FdpxXbOzVcm7dwC3dt0m3Yrj89XubcNMRdCM= 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=mJv+ScDB; arc=none smtp.client-ip=74.125.82.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="mJv+ScDB" Received: by mail-dy1-f169.google.com with SMTP id 5a478bee46e88-304f590dd91so3331410eec.0 for ; Sun, 14 Jun 2026 23:50:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781506229; x=1782111029; 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=C7XA/vKBHH8dmFPLF0CvhcWERh05nFE3P6i58kyZClA=; b=mJv+ScDB75fKCTuthNcPU2Y82+CX04mwE7zEOG4gZN2dCRpEji+8FGewT4PUnTTCl2 +kn6XY8YJnEmizwy+tj2Jqf4T98SdUue3Q3lPnWUlvlC2bfKSp3f+yGMPZ6BV5LT2rkx YsGyzKSpfNVMAoUnxvS98epZ4g9U6ZPNMUKrXlGIA1KWNrNebLj9yudYH4oFHjzMvrGe 6eCvR648cnc5rHyh9UW4t7JnzM6Y6IGJEd5jjCI79WiLhGOgZTtGoptD5HmZKOwo6Vs3 I0cHA2PxM0v904Y706odCx+lbzjJ9O6r9VoyQdd7b2+g0kfiornXRn3lfSfleINVQudw aghA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781506229; x=1782111029; 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=C7XA/vKBHH8dmFPLF0CvhcWERh05nFE3P6i58kyZClA=; b=dLncUbul0b3w+jFdKJ1U3Dc4SSNJWusfndnY5pPgqAE7LPeuI5UYcwHvSnsHAIgq4J P49UnpIebPJGREDYODA8RSxjKL5AtYl45fcDyG4wezJj78I3EaJUtGtK2/C04ISyeu7g Sr5PCHjkfYY1b7PR7vMISrlxC762ulFjwHw2vfhNU45jAg5lLW7zbp8RLmNbgjCJDZYv SAM907u2NG5aB8oOTfvh8IGv1TQRjer3huq/IseVbblFphIB0YusqrphM8KjLarQYpKF Xhs7ophlMO1DiqSHT7VczUJdCARnnKXD57yLpdbyeT77zT/Y+D5+BWS6qpCSxYnWJAYK vBDA== X-Forwarded-Encrypted: i=1; AFNElJ9sbF9H9W51YtNxuLc5I1ADEc/NhrYw1C2G0u1AcBji2pjYuCkjpp6IAGCpBFqHOBADMyV10XNRgmyE13s=@vger.kernel.org X-Gm-Message-State: AOJu0YxofK5NsNzcqjUp3kLP/V7jDP1SuCQhnXHeEM9u12nxTMJxCSgS 0WrgqKzcWb+BYkfu9mxhdbFVL6yEjlcFvZSwwAqNpxnwJTTxYhtlg7/J X-Gm-Gg: Acq92OFv4q2vssUn5R48NyECObZINwbT7ahct6cfhOvISjJqD+BJxqP7VUf7olSIre1 B7lDBIipYgUfT8z66Isj/xy0tzd+blHyJQbMt/LJ8y4+dnjENOM80JI4b8XjVlkg+zga8m5FKLQ uZMIL+cnxd/n2KjluJ781chNhmPmU7RmkStC3huqEqumgoqwFbJx0+X9wQ47IZZE/Y/tP91FFIl dM9rstWj3JoPS+6gZ4w0ZisQQTn6TlGGgzZ5ABEJjefTFlO3s+s98sg6gK7l3SA0gUQ510qRFjO N2ThV6yyWzwEB59hWx5bTM2MWx/FMP9V98rBYbnjcBW1/gIRJxBPsiJbvAqvRpRkc9m06q1cz9i 8jRZJ8LEBL0NS5C47YzCVxnrCmySVWUMqB4u5KNhmHAvs5DAzWmCDOPiUwvzaHXarpppnSVsjCB qT3ZBatup8h7frzHBjKSoRuH/vmIEGabHlO+nYdfzMNuT7TdaTBi0ZIMoH8xdcE64ryYZDoeMO1 p8Oe/gviApT X-Received: by 2002:a05:7300:6426:b0:2da:1874:f3bd with SMTP id 5a478bee46e88-3082004a336mr6289586eec.16.1781506229088; Sun, 14 Jun 2026 23:50:29 -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 5a478bee46e88-3081eb9a2e7sm13516812eec.30.2026.06.14.23.50.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2026 23:50:28 -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 v4 5/6] drm/verisilicon: add DCUltraLite chip identity to HWDB Date: Mon, 15 Jun 2026 14:50:02 +0800 Message-ID: <20260615065003.76661-6-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260615065003.76661-1-a0987203069@gmail.com> References: <20260615065003.76661-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 DT binding 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 From nobody Thu Jun 18 17:58:40 2026 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.179]) (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 771173B1ED1 for ; Mon, 15 Jun 2026 06:50:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506234; cv=none; b=IDCQK+cr6q/Jkh1au3q4mK5MP2Uw6hbu0gW+OUXjs2rwYdKnJ0NztsT1wXyE/2iXEPbQogLyBOdDC9iPDapve6lAgtZu+k23m/brG9JC+5OmQh6/oU9SfMT4eZbUotrNId6TfkabTMf9yX1XORCfzRj3+wLwz5c8Sx7daYaVKFk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781506234; c=relaxed/simple; bh=VjTynNhoL7OqpjBeVgYrniPDPsDKrrq3UKagVD/oo8s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mv6qHJo4EGqNMZkDtmaR72LM/SchbmN68ggBeT92bkGE1ycv6uo9xu7nBw8qdqK08/lq9mVEIN+MnobXVJjtA6T0mJbbfy7I4sbdQZRJJ/0mbjgPQLqBH4Pxt8VENWlmA5RDfE6Iojheuvf2S4sf/dqBYKUHCnEFlZlL5N1iU+s= 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=gYyhofKn; arc=none smtp.client-ip=74.125.82.179 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="gYyhofKn" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-304d7f31215so2728359eec.1 for ; Sun, 14 Jun 2026 23:50:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781506233; x=1782111033; 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=IHx1+R/J17dYEVk2E+ls+XsmeltEygUylDakA0bf7co=; b=gYyhofKnwGCEQDHN9ALZrICg7UX4b+XWUXa/gvolWRk8+rNc3t3RYYUsk27EY7HqY1 ER6zo7ZeVpvr/7Y0HNp6b2V/y+nLYwwqbLKDYuMuETSCq1XwrGojDVld2iWBhyxDIPDM 4ZEryJdd7VhKlOTRhNSTGHMAHBq5AhJIIrYn4ffkAA68KIIbT8UwG5ssq8CvpzH4Z8fu uZrI1s/WxNteQb7KR+bxf7AqnYBU1YYaVSL2PnilUt8LdsFYpv82/qObNKeMugaw7pIi a+qTJ0qyFTgT6dSCxyBAyhYjgBnh3JWCQpwWA+4VrLCmj7OYXFbV8MaHPiAYvGyiHfST mE5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781506233; x=1782111033; 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=IHx1+R/J17dYEVk2E+ls+XsmeltEygUylDakA0bf7co=; b=bolXyYTLfTj25OP/E8IBGjqA52qQMUKtUxUdB7XqfyETKQXdxwQql5V9HPrZ7It/z8 fRtrAH+/Uw/kT0datYtQKNwd/MVKLW9bfaz4p2HWIA2jHxb8sy6S2C7OBP9pzqFqNUxP qy6yPOXsnSAfIB7KDJ5uWSdAHRFlqYqFSxmUrN5eeqQ8REuf2+7atJM/8/7ZsWV/4NOP JRAQaTwEmMvrZdqJyN5snnyFz4OFrR6lMRpcwo4WbYDzux5zTk7Z1QbyIwr3NF3WROns c+ZQZZfceckw3PdpvkPLVreFEQwE/OHfauWJnIlQRh5Z7lkOgDSXcpUmKVsPyh7wvxtC WK/w== X-Forwarded-Encrypted: i=1; AFNElJ+RD5yqBiHQZIvNOi48lLyw91t7/YCEJnxZ/fzF9RMX50QMPfhtjRMUi0vmmxyFBzX9615327tp/C1LX3s=@vger.kernel.org X-Gm-Message-State: AOJu0YxtQDAu4xFHx4G9rdh3ZaQ2PzeY/n3lz1PhFOViu8SCDYHWZ9v4 6GJLM3O3SDRZyKcYoBR4vu+FuNLdN+ipUkTVnpoCLLKUQv0tPtshkFP/ X-Gm-Gg: Acq92OEjych3DU5vt9mTEh5CxoDv0Nr4lQXdaXR3pGxsL3jh/J/H+yPv2z6UpIiqYmk fXImqSWkms5ddLIfoZ/TyMkE/LGUxy/bhuQoAzfJb0HRvBeyOIDmUdRZtPlbLCn9PHWQmvGyj8v U7ExdkigDfy+h/KnC2NY+d3l5k1l+Q5wzmDQii2r3G0oxdrv8/yyB6syfvVnndNW3k9F7m9PfAR zg+TIKGwhlsETxEvC1y+m1nyvmZExKaSPy4F0OWGcHONNFiQP0zj9AizV/nh/kVtxRD55+JdKfV dg2FKd8u1h0TTei+ekzAqhDEBP3TumwiZeYL+SF7B6nQeXRHJaajzU+KW4vUvILVuBKONJKj9c7 s5wl6t3umv66+QQst1/CsVRb6RUlVVvBRADG+nrND+6oFNDxfYDcuH6AAPPj8Cu9KxV0G3RChS9 ktN/zufyA9sgjwAGXDlLfWypE8gIIO2phks1DaYVvgrQF/LGQRj0iRuHLZNjxQCH2t5ftnbPvWF TwOCRK+zsrL X-Received: by 2002:a05:693c:3b09:b0:304:819f:5029 with SMTP id 5a478bee46e88-3081ff3dc01mr6294428eec.2.1781506232688; Sun, 14 Jun 2026 23:50:32 -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 5a478bee46e88-3081eb9a2e7sm13516812eec.30.2026.06.14.23.50.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2026 23:50:32 -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 v4 6/6] drm/verisilicon: extend Kconfig to support ARCH_MA35 platforms Date: Mon, 15 Jun 2026 14:50:03 +0800 Message-ID: <20260615065003.76661-7-a0987203069@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260615065003.76661-1-a0987203069@gmail.com> References: <20260615065003.76661-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 DCUltraLite hardware ops and HWDB entry added in the preceding commits enable the driver to work on Nuvoton MA35D1 hardware. Allow the driver to be built when ARCH_MA35 is selected; this dependency is meaningful only now that all supporting code is in place. Signed-off-by: Joey Lu --- drivers/gpu/drm/verisilicon/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 --=20 2.43.0