On Wed, Jan 25, 2023 at 2:49 AM Marek Vasut <marex@xxxxxxx> wrote: > > On 1/24/23 22:16, Jagan Teki wrote: > > On Wed, Jan 25, 2023 at 2:15 AM Marek Vasut <marex@xxxxxxx> wrote: > >> > >> On 1/23/23 16:12, Jagan Teki wrote: > >> > >> [...] > >> > >>> +static bool exynos_dsi_pixel_output_fmt_supported(u32 fmt) > >>> +{ > >>> + int i; > >> > >> if (fmt == MEDIA_BUS_FMT_FIXED) > >> return false; > >> > >>> + for (i = 0; i < ARRAY_SIZE(exynos_dsi_pixel_output_fmts); i++) { > >>> + if (exynos_dsi_pixel_output_fmts[i] == fmt) > >>> + return true; > >>> + } > >>> + > >>> + return false; > >>> +} > >>> + > >>> +static u32 * > >>> +exynos_dsi_atomic_get_input_bus_fmts(struct drm_bridge *bridge, > >>> + struct drm_bridge_state *bridge_state, > >>> + struct drm_crtc_state *crtc_state, > >>> + struct drm_connector_state *conn_state, > >>> + u32 output_fmt, > >>> + unsigned int *num_input_fmts) > >>> +{ > >>> + u32 *input_fmts; > >>> + > >>> + if (!exynos_dsi_pixel_output_fmt_supported(output_fmt)) > >>> + /* > >>> + * Some bridge/display drivers are still not able to pass the > >>> + * correct format, so handle those pipelines by falling back > >>> + * to the default format till the supported formats finalized. > >>> + */ > >>> + output_fmt = MEDIA_BUS_FMT_RGB888_1X24; > >> > >> You can move this ^ past the kmalloc() call, so in unlikely case the > >> kmalloc() fails, it would fail first. > > > > I didn't get this point, what do we need to do if > > exynos_dsi_pixel_output_fmt_supported returns false? > > { > u32 *input_fmts; > > input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL); > if (!input_fmts) > return NULL; > > if (!exynos_dsi_pixel_output_fmt_supported(output_fmt)) > /* ... the comment ... */ > output_fmt = MEDIA_BUS_FMT_RGB888_1X24; > > input_fmts[0] = output_fmt; > *num_input_fmts = 1; > > return input_fmts; > } Got it, thanks!