Greetings once again, I have made some progress with drm_hwcomposer and finally debugged a crazy crash in surfaceflinger. The crash is related to a DRM connector that probably does not exist in kernel for the main display of the gta04.
So lets start with a log, and some inline comments: 01-01 09:11:24.354 2122 2122 I SurfaceFlinger: SurfaceFlinger is starting 01-01 09:11:24.359 2122 2122 I SurfaceFlinger: SurfaceFlinger's main thread ready to run. Initializing graphics H/W... 01-01 09:11:24.379 2122 2122 D libEGL : Emulator without GPU support detected. Fallback to software renderer. 01-01 09:11:24.449 2122 2122 D libEGL : loaded /system/lib/egl/libGLES_android.so 01-01 09:11:24.680 2122 2122 E gralloc : failed to put fb info This is harmless, gralloc tried to set the framebuffer to 480x1280 to allow for flipping, and failed. 01-01 09:11:24.682 2122 2122 W gralloc : page flipping not supported (yres_virtual=640, requested=1280) 01-01 09:11:24.683 2122 2122 I gralloc : using (fd=12) 01-01 09:11:24.683 2122 2122 I gralloc : id = omapdrm 01-01 09:11:24.683 2122 2122 I gralloc : xres = 480 px 01-01 09:11:24.683 2122 2122 I gralloc : yres = 640 px 01-01 09:11:24.683 2122 2122 I gralloc : xres_virtual = 480 px 01-01 09:11:24.683 2122 2122 I gralloc : yres_virtual = 640 px 01-01 09:11:24.683 2122 2122 I gralloc : bpp = 32 01-01 09:11:24.683 2122 2122 I gralloc : r = 16:8 01-01 09:11:24.683 2122 2122 I gralloc : g = 8:8 01-01 09:11:24.683 2122 2122 I gralloc : b = 0:8 01-01 09:11:24.683 2122 2122 I gralloc : width = 76 mm (160.421051 dpi) 01-01 09:11:24.683 2122 2122 I gralloc : height = 102 mm (159.372543 dpi) 01-01 09:11:24.683 2122 2122 I gralloc : refresh rate = 60.00 Hz 01-01 09:11:24.899 2122 2122 E hwc-drm-plane: Could not get rotation property 01-01 09:11:24.910 2122 2122 I hwc-drm-plane: Could not get alpha property 01-01 09:11:25.021 2122 2122 E hwc-drm-plane: Could not get rotation property 01-01 09:11:25.030 2122 2122 I hwc-drm-plane: Could not get alpha property 01-01 09:11:25.152 2122 2122 E hwc-drm-plane: Could not get rotation property 01-01 09:11:25.160 2122 2122 I hwc-drm-plane: Could not get alpha property these are harmless too, no rotation or alpha are assumed. 01-01 09:11:25.207 2122 2140 E cutils-trace: Error opening trace file: Permission denied (13) 01-01 09:11:25.207 2122 2140 W hwc-gl-worker: EGL_ANDROID_native_fence_sync extension not supported 01-01 09:11:25.207 2122 2140 E libEGL : eglMakeCurrent:813 error 3009 (EGL_BAD_MATCH) 01-01 09:11:25.207 2122 2140 E hwc-gl-worker: Failed to make the OpenGL ES Context current: EGL_BAD_MATCH 01-01 09:11:25.207 2122 2140 E hwc-drm-display-compositor: Failed to initialize OpenGL compositor 1 01-01 09:11:25.207 2122 2140 E hwc-drm-compositor-worker: Failed to composite! 1 01-01 09:11:25.212 2122 2142 W hwc-gl-worker: EGL_ANDROID_native_fence_sync extension not supported 01-01 09:11:25.212 2122 2142 E libEGL : eglMakeCurrent:813 error 3009 (EGL_BAD_MATCH) 01-01 09:11:25.212 2122 2142 E hwc-gl-worker: Failed to make the OpenGL ES Context current: EGL_BAD_MATCH 01-01 09:11:25.212 2122 2142 E hwc-drm-display-compositor: Failed to initialize OpenGL compositor 1 01-01 09:11:25.212 2122 2142 E hwc-drm-compositor-worker: Failed to composite! 1 01-01 09:11:25.214 2122 2122 I SurfaceFlinger: Using composer version 1.4 01-01 09:11:25.215 2122 2122 E hwcomposer-drm: Failed to get connector for display 0 Does this hint at a problem? 01-01 09:11:25.216 2122 2122 E SurfaceFlinger: queryDisplayProperties: Invalid display config! -1 This may be another one 01-01 09:11:25.219 2122 2122 W SurfaceFlinger: no suitable EGLConfig found, trying a simpler query 01-01 09:11:25.229 2122 2122 W SurfaceFlinger: EGL_SLOW_CONFIG selected! 01-01 09:11:25.239 2122 2122 I SurfaceFlinger: EGL information: 01-01 09:11:25.239 2122 2122 I SurfaceFlinger: vendor : Android 01-01 09:11:25.240 2122 2122 I SurfaceFlinger: version : 1.4 Android META-EGL 01-01 09:11:25.240 2122 2122 I SurfaceFlinger: extensions: EGL_KHR_get_all_proc_addresses EGL_ANDROID_presentation_time EGL_KHR_swap_buffers_with_damage EGL_KHR_image_base EGL_KHR_fence_sync EGL_ANDROID_image_native_buffer 01-01 09:11:25.249 2122 2122 I SurfaceFlinger: Client API: OpenGL_ES 01-01 09:11:25.249 2122 2122 I SurfaceFlinger: EGLSurface: 8-8-8-8, config=0x4 01-01 09:11:25.252 2122 2122 I SurfaceFlinger: OpenGL ES informations: 01-01 09:11:25.252 2122 2122 I SurfaceFlinger: vendor : Android 01-01 09:11:25.253 2122 2122 I SurfaceFlinger: renderer : Android PixelFlinger 1.4 01-01 09:11:25.253 2122 2122 I SurfaceFlinger: version : OpenGL ES-CM 1.0 01-01 09:11:25.254 2122 2122 I SurfaceFlinger: extensions: GL_EXT_debug_marker GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_single_precision GL_OES_read_format GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_matrix_get GL_OES_query_matrix GL_OES_EGL_image GL_OES_EGL_sync GL_OES_compressed_ETC1_RGB8_texture GL_ARB_texture_compression GL_ARB_texture_non_power_of_two GL_ANDROID_user_clip_plane GL_ANDROID_vertex_buffer_object GL_ANDROID_generate_mipmap 01-01 09:11:25.254 2122 2122 I SurfaceFlinger: GL_MAX_TEXTURE_SIZE = 4096 01-01 09:11:25.254 2122 2122 I SurfaceFlinger: GL_MAX_VIEWPORT_DIMS = 4096 01-01 09:11:25.255 2122 2122 I SurfaceFlinger: Going to initialize connected, and primary displays. 01-01 09:11:25.255 2122 2122 I SurfaceFlinger: Initializing connected or primary display 0. I inserted these two log messages in SurfaceFlinger.cpp:init(), and then many markers (redacted in this log) 01-01 09:11:25.268 2122 2122 I SurfaceFlinger: MARKER 202 And this is the last thing that happens before the crash. This marker is in HWComposer.cpp: getWidth(). The only thing that can go wrong here is accessing a pointer at index currentConfig, which is initialized to 0, and it does :( The call stack as follows: SurfaceFlinger.cpp: new FramebufferSurface(*mHwc, i, consumer); FramebufferSurface.cpp: mConsumer->setDefaultBufferSize(mHwc.getWidth(disp), mHwc.getHeight(disp)); HWComposer.cpp: return mDisplayData[disp].configs[currentConfig].width; 01-01 09:11:25.275 2122 2122 F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 2122 (surfaceflinger) So HWComposer assumes that mDisplayData[disp].configs exists and has at least 1 entry. But for some reason, in this very case it is a null-pointer. How can this be? The list of configurations is filled in HWComposer.cpp: queryDisplayProperties. We have already received a hint that something might have gone wrong, however there is still a chance to find a configuration now by asking the drm_hwcomposer with a call to mHwc->getDisplayAttributes. This call is done in a for loop, but *only* if we get past a call to mHwc->getDisplayConfigs. This one translates to hwc_get_display_configs in drm_hwcomposer> hwcomposer.cpp. And there we find a familiar message in the code: ALOGE("Failed to get connector for display %d", display); So, we found the culprit! For some reason ctx->drm.GetConnectorForDisplay(display) has failed. Why? Well, I'd think the answer is in the DRM subsystem of the kernel. I did a little googling, but couldn't come to any conclusions. The only related thing I noticed is that every connector has a type, but it is Unknown for dispc displays in omapdss. However I was not able to confirm if that would prevent it from being returned as a connector. Or maybe there just is no such thing called a connector in this setup? Anyhow this is where I can't continue. Nikolaus, you hinted that some xorg drivers have problems too. With a little luck the modesetting driver is one of those, and just maybe it suffers from teh same issue? I think this is worth investigating at some point. I will now see if I can hack the hwcomposer library to grab display properties from the framebuffer device instead. There is already code to do that, but ggated by an if-clause to prefer calls to drm_hwcomposer. br Josua Mayer _______________________________________________ Gta04-owner mailing list Gta04-owner@goldelico.com http://lists.goldelico.com/mailman/listinfo.cgi/gta04-owner