Re: [PATCH v2 3/3] drm/nuvoton: add MA35D1 display controller driver
From: Icenowy Zheng <hidden>
Date: 2026-02-10 12:03:25
Also in:
dri-devel, linux-devicetree, lkml
在 2026-02-09星期一的 16:45 +0800,Joey Lu写道:
On 2/6/2026 11:09 PM, Icenowy Zheng wrote:quoted
在 2026-01-29星期四的 12:05 +0800,Joey Lu写道:quoted
========== 8< ============ +#endifdiff --git a/drivers/gpu/drm/nuvoton/ma35_regs.hb/drivers/gpu/drm/nuvoton/ma35_regs.h new file mode 100644 index 000000000000..0f4a7a13e7d8--- /dev/null +++ b/drivers/gpu/drm/nuvoton/ma35_regs.h@@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Nuvoton DRM driver + * + * Copyright (C) 2026 Nuvoton Technology Corp. + * + * Author: Joey Lu <a0987203069@gmail.com> + */ + +#ifndef _MA35_REGS_H_ +#define _MA35_REGS_H_ + +#define MA35_FRAMEBUFFER_CONFIG 0x1518Please check my Verisilicon DC8200 driver, which is already part of drm-misc-next now. The display controller here seems to be a earlier one from Verisilicon.it looks like a DC8000, or maybe a more earlier one?The DCU is a Vivante DCUltra IP rather than a DC8000 series. It's an earlier generation display controller and was customized for Nuvoton, so it doesn't have a public model ID. Because of that lineage, parts of the register layout and functionality remain similar to older DC IPs.
The kernel seems to dislike different drivers for similar IPs.
Please refer to MA35D1 datasheet for more details.
I checked it, and the register definitions looks compatible with DC8000 registers at [1]. However no identification information is shown in the manual. I may get a MA35D1 board after the Lunar New Year (although it looks a little expensive), is it easy to bring up mainline kernal on arbitary MA35D1 boards? [1] https://github.com/milkv-megrez/rockos-u-boot/blob/c9221cf2fa77d39c0b241ab4b030c708e7ebe279/drivers/video/eswin/eswin_dc_reg.h
quoted
quoted
+#define MA35_FRAMEBUFFER_ADDRESS 0x1400 +#define MA35_FRAMEBUFFER_STRIDE 0x1408 +#define MA35_HDISPLAY 0x1430 +#define MA35_HSYNC 0x1438 +#define MA35_VDISPLAY 0x1440 +#define MA35_VSYNC 0x1448 +#define MA35_PANEL_CONFIG 0x1418 +#define MA35_DPI_CONFIG 0x14B8 +#define MA35_CURSOR_ADDRESS 0x146C +#define MA35_CURSOR_CONFIG 0x1468 +#define MA35_CURSOR_LOCATION 0x1470 +#define MA35_CURSOR_BACKGROUND 0x1474 +#define MA35_CURSOR_FOREGROUND 0x1478 +#define MA35_FRAMEBUFFER_UPLANAR_ADDRESS 0x1530 +#define MA35_FRAMEBUFFER_VPLANAR_ADDRESS 0x1538 +#define MA35_FRAMEBUFFER_USTRIDE 0x1800 +#define MA35_FRAMEBUFFER_VSTRIDE 0x1808 +#define MA35_INDEXCOLOR_TABLEINDEX 0x1818 +#define MA35_INDEXCOLOR_TABLEDATA 0x1820 +#define MA35_FRAMEBUFFER_SIZE 0x1810 +#define MA35_FRAMEBUFFER_SCALEFACTORX 0x1828 +#define MA35_FRAMEBUFFER_SCALEFACTORY 0x1830 +#define MA35_FRAMEBUFFER_SCALEFCONFIG 0x1520 +#define MA35_HORIFILTER_KERNELINDEX 0x1838 +#define MA35_HORIFILTER_KERNEL 0x1A00 +#define MA35_VERTIFILTER_KERNELINDEX 0x1A08 +#define MA35_VERTIFILTER_KERNEL 0x1A10 +#define MA35_FRAMEBUFFER_INITIALOFFSET 0x1A20 +#define MA35_FRAMEBUFFER_COLORKEY 0x1508 +#define MA35_FRAMEBUFFER_COLORHIGHKEY 0x1510 +#define MA35_FRAMEBUFFER_BGCOLOR 0x1528 +#define MA35_FRAMEBUFFER_CLEARVALUE 0x1A18 +#define MA35_DISPLAY_INTRENABLE 0x1480 +#define MA35_INT_STATE 0x147C +#define MA35_PANEL_DEST_ADDRESS 0x14F0 +#define MA35_MEM_DEST_ADDRESS 0x14E8 +#define MA35_DEST_CONFIG 0x14F8 +#define MA35_DEST_STRIDE 0x1500 +#define MA35_DBI_CONFIG 0x1488 +#define MA35_AQHICLOCKCONTROL 0x0000 +#define MA35_OVERLAY_CONFIG 0x1540 +#define MA35_OVERLAY_STRIDE 0x1600 +#define MA35_OVERLAY_USTRIDE 0x18C0 +#define MA35_OVERLAY_VSTRIDE 0x1900 +#define MA35_OVERLAY_TL 0x1640 +#define MA35_OVERLAY_BR 0x1680 +#define MA35_OVERLAY_ALPHA_BLEND_CONFIG 0x1580 +#define MA35_OVERLAY_SRC_GLOBAL_COLOR 0x16C0 +#define MA35_OVERLAY_DST_GLOBAL_COLOR 0x1700 +#define MA35_OVERLAY_CLEAR_VALUE 0x1940 +#define MA35_OVERLAY_SIZE 0x17C0 +#define MA35_OVERLAY_COLOR_KEY 0x1740 +#define MA35_OVERLAY_COLOR_KEY_HIGH 0x1780 +#define MA35_OVERLAY_ADDRESS 0x15C0 +#define MA35_OVERLAY_UPLANAR_ADDRESS 0x1840 +#define MA35_OVERLAY_VPLANAR_ADDRESS 0x1880 +#define MA35_OVERLAY_SCALE_CONFIG 0x1C00 +#define MA35_OVERLAY_SCALE_FACTOR_X 0x1A40 +#define MA35_OVERLAY_SCALE_FACTOR_Y 0x1A80 +#define MA35_OVERLAY_HORI_FILTER_KERNEL_INDEX 0x1AC0 +#define MA35_OVERLAY_HORI_FILTER_KERNEL 0x1B00 +#define MA35_OVERLAY_VERTI_FILTER_KERNEL_INDEX 0x1B40 +#define MA35_OVERLAY_VERTI_FILTER_KERNEL 0x1B80 +#define MA35_OVERLAY_INITIAL_OFFSET 0x1BC0 +#define MA35_GAMMA_EX_INDEX 0x1CF0 +#define MA35_GAMMA_EX_DATA 0x1CF8 +#define MA35_GAMMA_EX_ONE_DATA 0x1D80 +#define MA35_GAMMA_INDEX 0x1458 +#define MA35_GAMMA_DATA 0x1460 +#define MA35_DISPLAY_DITHER_TABLE_LOW 0x1420 +#define MA35_DISPLAY_DITHER_TABLE_HIGH 0x1428 +#define MA35_DISPLAY_DITHER_CONFIG 0x1410 +#define MA35_DISPLAY_CURRENT_LOCATION 0x1450 + +#endif