[PATCH v2 3/3] drm/nuvoton: add MA35D1 display controller driver

Icenowy Zheng uwu at icenowy.me
Tue Feb 10 04:02:51 PST 2026


在 2026-02-09星期一的 16:45 +0800,Joey Lu写道:
> 
> On 2/6/2026 11:09 PM, Icenowy Zheng wrote:
> > 在 2026-01-29星期四的 12:05 +0800,Joey Lu写道:
> > > ========== 8< ============
> > > +#endif
> > > diff --git a/drivers/gpu/drm/nuvoton/ma35_regs.h
> > > b/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 at gmail.com>
> > > + */
> > > +
> > > +#ifndef _MA35_REGS_H_
> > > +#define _MA35_REGS_H_
> > > +
> > > +#define MA35_FRAMEBUFFER_CONFIG                   0x1518
> > Please 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

> 
> > > +#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



More information about the linux-arm-kernel mailing list