Hello, We at https://openvario.org/ are trying to upgrade our device from legacy linux-3.4 with proprietary mali drivers to modern linux with DRM/KMS-based graphics. The device we are building is based on Cubieboard 2 with Allwinner A20 (sun7i) SoC. It has a LCD screen connected via LVDS interface.
We have a problem making this screen running under sun4i-drm display pipeline. We are building an SD image using Yocto-based build system, that builds u-boot and linux kernel-5.2-rc2. Under current setup (which I will describe below), device is booted by u-boot, that successfully initializes the LCD and outputs a splash image on it (that's how I know LCD itself is connected correctly and works). When u-boot passes control to the kernel, that splash image slowly fades into all-white and the screen stays bright-white until device is turned off. I have full access to the machine via serial (ttyS0) interface. U-boot is compiled with these config options (among others): CONFIG_ARCH_SUNXI=y CONFIG_MACH_SUN7I=y CONFIG_VIDEO_LCD_MODE="x:640,y:480,depth:18,pclk_khz:25000,hs:1,vs:1,le:157,ri:2,up:42,lo:2,sync:3,vmode:0" CONFIG_VIDEO_LCD_PANEL_LVDS=y Kernel is configured to compile these drm-related modules (among others): drm, panel_lvds, lima, sun4i_drm, gpu_sched, sun4i_drm_hdmi, sun4i_backend, sun4i_tcon, sun4i_frontend, drm_kms_helper. They all load automatically during boot and together with lima module produce /dev/dri/card0 and /dev/dri/card1 devices. I have created the device tree for the kernel with "panel-lvds" connected directly to tcon0, port 1, endpoint 0. I have also provided additional reset line, as per sun4i-drm.txt doc (see [1]). There is a pipeline for HDMI is set up in DT too, but I'm omitting it for brevity. When kernel loads, I see sun4i-drm modules initialize without apparent errors (see [2]). Since this set up didn't work out-of-the-box, I started to dig deeper and added more trace logging to parts of drivers/gpu/drm/sun4i/sun4i_tcon.c that deal with LVDS. It turned out that all LVDS initialization was basically skipped, because current sun4i_tcon_quirks object (sun7i_a20_quirks in my case) did not have "supports_lvds" property (compare to sun8i_a83t_lcd_quirks). My naive attempt to simply add that property didn't result to LCD working (no notable changes in panel' behavior), however my tracing output indicate that sun4i_lvds_init() is called before "sun4i-drm display-engine: bound 1c0c000.lcd-controller" message. sun4i_tcon_lvds_set_status() function is called too (with enabled=true), just after "fbcon: Taking over console" message. Effectively what you see in [2] is a log after I introduced sun7i_a20_quirks.supports_lvds. Do you see anything I missed trying to make LCD work? Is it expected to work at all with current kernel? If not, what is missing? Can I provide any additional info? I (and all Openvario users) would really appreciate any help making the LCD to run! [1] Device tree excerpt: panel { compatible = "openvario,lvds57", "panel-lvds"; width-mm = <261>; height-mm = <163>; data-mapping = "jeida-18"; panel-timing { /* 640x480 @60Hz */ clock-frequency = <25000000>; hactive = <640>; vactive = <480>; hsync-len = <1>; hfront-porch = <2>; hback-porch = <157>; vsync-len = <1>; vfront-porch = <2>; vback-porch = <42>; }; port { lvds_panel_in: endpoint { remote-endpoint = <&display_out_rgb>; }; }; }; &tcon0 { resets = <&ccu RST_TCON0>, <&ccu RST_LVDS>; reset-names = "lcd", "lvds"; ports { tcon0_out: port@1 { display_out_rgb: endpoint@0 { reg = <0>; remote-endpoint = <&lvds_panel_in>; allwinner,tcon-channel = <0>; }; }; }; }; [2] dmesg report excerpt ... [ 5.017228] lima 1c40000.gpu: bus rate = 300000000 [ 5.022129] lima 1c40000.gpu: mod rate = 384000000 [ 5.090519] lima 1c40000.gpu: gp - mali400 version major 1 minor 1 [ 5.096905] lima 1c40000.gpu: pp0 - mali400 version major 1 minor 1 [ 5.103562] lima 1c40000.gpu: pp1 - mali400 version major 1 minor 1 [ 5.109985] lima 1c40000.gpu: l2 cache 64K, 4-way, 64byte cache line, 64bit external bus [ 5.122207] sun4i-drm display-engine: bound 1e00000.display-frontend (ops sun4i_frontend_driver_exit [sun4i_frontend]) [ 5.133246] sun4i-drm display-engine: bound 1e20000.display-frontend (ops sun4i_frontend_driver_exit [sun4i_frontend]) [ 5.144504] sun4i-drm display-engine: bound 1e60000.display-backend (ops sun4i_backend_ops [sun4i_backend]) [ 5.154749] sun4i-drm display-engine: bound 1e40000.display-backend (ops sun4i_backend_ops [sun4i_backend]) [ 5.206936] [drm] Initialized lima 1.0.0 20190217 for 1c40000.gpu on minor 0 [ 5.211187] sun4i-drm display-engine: bound 1c0c000.lcd-controller (ops sun4i_tcon_platform_driver_exit [sun4i_tcon]) [ 5.251228] sun4i-tcon 1c0d000.lcd-controller: Missing LVDS properties, Please upgrade your DT [ 5.259931] sun4i-tcon 1c0d000.lcd-controller: LVDS output disabled [ 5.282987] sun4i-drm display-engine: No panel or bridge found... RGB output disabled [ 5.290858] sun4i-drm display-engine: bound 1c0d000.lcd-controller (ops sun4i_tcon_platform_driver_exit [sun4i_tcon]) [ 5.354508] axp20x-i2c 0-0034: AXP20X driver loaded [ 5.365705] sun4i-drm display-engine: bound 1c16000.hdmi (ops sun4i_hdmi_driver_exit [sun4i_drm_hdmi]) ... [ 11.486816] fbcon: Taking over console [ 11.513746] Console: switching to colour frame buffer device 80x30 -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. To view this discussion on the web, visit https://groups.google.com/d/msgid/linux-sunxi/f1edbfc8-6aca-4b6e-b0a0-e0f7e86723b7%40googlegroups.com.