On 04/03/2014 11:05 AM, ??? wrote: > Hi Andrzej, > >> Hi Inki, >> >> On 04/01/2014 02:37 PM, Inki Dae wrote: >>> This patch series cleans up exynos drm framework and kms sub drivers >>> using the component framework[1]. >> I have tested it on trats platform (fimd + dsi), it works. >> However it seems to be suboptimal. >> In case of deferred probing of any of components (due to lack of some >> resources, ex. clock, regulator, phy), all components >> which were already bound are unbound and re-bound later when another >> driver is added, this causes multiple unnecessary free/re-allocate cycles. > The components bound and then unbound wouldn't be bound again because the > components unbound are removed component_list like below, > > ret = try_to_bring_up_masters(component); > if (ret < 0) { > list_del(&component->node); > kfree(component); > } > > And I cannot see that components are freed and re-allocated repeatedly. See > the below log, > > [ 1.425000] [drm] Initialized drm 1.1.0 20060810 > [ 1.430000] exynos-drm-ipp exynos-drm-ipp: drm ipp registered successfully. > [ 1.435000] exynos4-fb 11c00000.fimd: adding component (ops > fimd_component_ops) > [ 1.445000] exynos-dsi 11c80000.dsi: adding component (ops > exynos_dsi_component_ops) > [ 1.450000] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). > [ 1.455000] [drm] No driver support for vblank timestamp query. > [ 1.465000] exynos-drm display-subsystem.8: binding 11c00000.fimd (ops > fimd_component_ops) > [ 1.470000] exynos-drm display-subsystem.8: bound 11c00000.fimd (ops > fimd_component_ops) > [ 1.480000] exynos-drm display-subsystem.8: binding 11c80000.dsi (ops > exynos_dsi_component_ops) > [ 1.490000] exynos-drm display-subsystem.8: failed to bind 11c80000.dsi > (ops exynos_dsi_component_ops): -12 > [ 1.500000] exynos-drm display-subsystem.8: master bind failed: -12 > [ 1.505000] exynos-dsi: probe of 11c80000.dsi failed with error -12 Here you have error -12 - ENOMEM, so everything just fails, and this is OK. The problem is in case of deferred probe. Good way to simulate it is to make mipi-phy driver as module and insmod it from userspace.
Regards Andrzej > > I have tested it on universal, trats, trats2 boards. And they all work fine. > But there was one thing I missed. That is that dpi probe and remove shoudn't > be called if fimd node has no port node. For this, I posted it again. > > Did you check it again? It seems your missing something. And Can you tell me > more details how did you test it? If there is no any problem, I'm going to > have pull request today or tomorrow. The problem I have described has nothing to do with dpi, in fact dpi driver was disabled in this test. Anyway I will test DPI separately. > > Thanks, > Inki Dae > >> Maybe I miss something, but I guess registration list(s) + DT super-node >> should perform better. >> >> Here is sample log from trats with mipi-phy driver delayed probe: >> >> binding 11c00000.fimd (ops fimd_component_ops) >> bound 11c00000.fimd (ops fimd_component_ops) >> binding 11c80000.dsi (ops exynos_dsi_component_ops) >> failed to bind 11c80000.dsi (ops exynos_dsi_component_ops): -517 >> unbinding 11c00000.fimd (ops fimd_component_ops) >> master bind failed: -517 >> binding 11c00000.fimd (ops fimd_component_ops) >> bound 11c00000.fimd (ops fimd_component_ops) >> binding 11c80000.dsi (ops exynos_dsi_component_ops) >> failed to bind 11c80000.dsi (ops exynos_dsi_component_ops): -517 >> unbinding 11c00000.fimd (ops fimd_component_ops) >> master bind failed: -517 >> binding 11c00000.fimd (ops fimd_component_ops) >> bound 11c00000.fimd (ops fimd_component_ops) >> binding 11c80000.dsi (ops exynos_dsi_component_ops) >> failed to bind 11c80000.dsi (ops exynos_dsi_component_ops): -517 >> unbinding 11c00000.fimd (ops fimd_component_ops) >> master bind failed: -517 >> binding 11c00000.fimd (ops fimd_component_ops) >> bound 11c00000.fimd (ops fimd_component_ops) >> binding 11c80000.dsi (ops exynos_dsi_component_ops) >> failed to bind 11c80000.dsi (ops exynos_dsi_component_ops): -517 >> unbinding 11c00000.fimd (ops fimd_component_ops) >> master bind failed: -517 >> binding 11c00000.fimd (ops fimd_component_ops) >> bound 11c00000.fimd (ops fimd_component_ops) >> binding 11c80000.dsi (ops exynos_dsi_component_ops) >> bound 11c80000.dsi (ops exynos_dsi_component_ops) >> >> This log will grow with number of devices probed in-between. >> >> Regards >> Andrzej >> >>> And this patch series had been posted for RFC[2]. >>> >>> Thanks, >>> Inki Dae