common display framework
play

Common Display Framework Tomorrow's Linux Kernel Display - PowerPoint PPT Presentation

Common Display Framework Tomorrow's Linux Kernel Display Architecture Embedded Linux Conference Europe 2013 Edinburgh Laurent Pinchart laurent.pinchart@ideasonboard.com a long long time ago source:


  1. Common Display Framework Tomorrow's Linux Kernel Display Architecture Embedded Linux Conference Europe 2013 Edinburgh Laurent Pinchart laurent.pinchart@ideasonboard.com

  2. a long long time ago

  3. source: http://commons.wikimedia.org/wiki/File:Danaides_Waterhouse_1903.jpg

  4. display (skip?)

  5. Frame Buffer Display – Scanout

  6. CRTC Composition Plane(s) Display – Composition

  7. KMS

  8. Frame Buffer Connector CRTC Encoder (memory) Planes Connector (memory) Encoder Connector KMS – Device Model

  9. Frame Buffer CRTC Encoder Connector (memory) Plane (memory) Encoder Connector Memory SoC Off-Chip KMS – Device Model

  10. Frame Buffer ● width ● height ● format GEM ● pitches CRTC Object(s) ● offsets Memory Properties KMS – Frame Buffer

  11. Frame Buffer GEM Object ● width ● height CRTC ● bpp Memory ● pitch ● size Properties DRM/KMS – GEM Object

  12. Process A Process B 3 Send FD SCM_RIGHTS Local Global Global Local 1 2 4 Handle FD FD Handle GEM Object DRM – Handles

  13. sync back porch active area Active Area front porch KMS – Modes (1/2)

  14. hdisplay hsync_start hsync_end htotal sync back porch active area Active Area front porch KMS – Modes (2/2)

  15. fb x mode m o d e Active . y v Area d i s crtc p l a y mode.hdisplay *connectors struct drm_mode_set { num_connectors struct drm_framebuffer *fb; struct drm_crtc *crtc; struct drm_display_mode *mode; uint32_t x; uint32_t y; struct drm_connector **connectors; size_t num_connectors; }; KMS – Mode Setting KMS – Mode Setting

  16. media controller (skip?)

  17. Media Controller – Model

  18. struct media_entity { u32 id; Media const char *name; entity u32 type; u32 revision; unsigned long flags; u32 group_id; ... }; Media Controller – Entity

  19. struct media_entity { 0 ... Media 2 u16 num_pads; entity 1 struct media_pad *pads; ... }; struct media_pad { u16 index; unsigned long flags; }; Media Controller – Pads

  20. struct media_entity { 0 ... Media 2 u16 num_links; entity 1 struct media_link *links; ... }; struct media_entity_link Media { 0 entity struct media_pad *source; struct media_pad *sink; unsigned long flags; }; Media Controller – Links

  21. problems

  22. (round 1)

  23. /* * Skeleton device tree; the bare minimum needed to boot; * just include and add a compatible value. The bootloader * will typically populate the memory node. */ / { #address-cells = <1>; #size-cells = <1>; chosen { }; aliases { }; memory { device_type = "memory"; reg = <0 0>; }; }; Problems – DT Bindings

  24. Problems – Panel Drivers source: http://en.wikipedia.org/wiki/File:Casio_LCD_screen_for_digital_camera.jpg

  25. KMS FBDEV Problems – Sharing

  26. Problems – MIPI DPI/DSI source: http://en.wikipedia.org/wiki/File:RaspberryPi_Display_Serial_Interface.jpg

  27. (round 2)

  28. bridges encoders transmitters ... Problems – Other Chips

  29. /* * Skeleton device tree; the bare minimum needed to boot; * just include and add a compatible value. The bootloader * will typically populate the memory node. */ / { #address-cells = <1>; #size-cells = <1>; chosen { }; aliases { }; memory { device_type = "memory"; reg = <0 0>; }; }; Problems – DT Bindings

  30. / \----> soc | | | \----> i2c2: i2c@e6530000 | | | | | \----> adv7511: hdmi@42 | | | \----> du: display@feb00000 | \----> con-hdmi | \----> panel-dpi Problems – Async Probing

  31. (secret round)

  32. KMS FBDEV V4L Problems – Sharing

  33. KMS FBDEV V4L Problems – Sharing

  34. Multiple control busses Problems – Bonus Issues

  35. Use Cases

  36. (they're real)

  37. Renesas – DU

  38. Renesas – VSP1

  39. DMA Scaler Scaler Proc Sensor Composer ADV7511 HDMI Decoder ADV7511 Xilinx – FPGA

  40. DMA Scaler Scaler Proc Sensor Composer ADV7511 HDMI Decoder Xilinx – FPGA

  41. CDF

  42. [RFC 0/5] Generic panel framework

  43. FBDEV DRM DT Display Controller Panel Driver pdata Driver Control Bus API DSI Mem Map SPI/I2C CDF – Integration

  44. [RFC v2 0/5] Common Display Framework

  45. CDF – Configuration Model source: http://en.wikipedia.org/wiki/File:Russian-Matroshka2.jpg

  46. Panel DISPC DPI/LVDS LVDS/DSI Panel Controller Panel Module Transmitter CDF – Configuration Model

  47. ● [RFC PATCH 0/4] exynos-drm-hdmi driver to CDF complaint display driver ● [RFC 0/6] Common Display Framework-T ● [RFC PATCH 0/4] Common Display Framework- TF ● [RFC 0/4] Use the Common Display Framework in tegra-drm ● [RFC 00/10] Versatile Express CLCD DVI output support Positive Feedback

  48. [RFC v3 00/19] Common Display Framework

  49. Entity Entity Link Port CDF – Entity Model

  50. struct display_entity { struct list_head list ; struct device * dev ; struct module * owner ; struct kref ref ; void(* release )(struct display_entity *ent); char name [32]; struct media_entity entity ; const struct display_entity_ops * ops ; enum display_entity_state state ; struct display_entity_match * match ; struct display_entity_notifier * notifier ; }; CDF – Entity

  51. hdmi_encoder { ports { #address-cells = <1>; #size-cells = <0>; port@0 { hdmi_input : endpoint@0 { remote = <& display_output >; }; }; port@1 { endpoint@0 { ... }; endpoint@1 { ... }; }; }; }; CDF – Device Tree

  52. ● [RFC PATCH 0/4] CDFv3: MIPI DSI bus implementation Positive Feedback

  53. [PATCH v2 0/2] drm: Add drm_bridge and PTN3460 bridge driver

  54. [RFR 0/2] DRM display panel support

  55. [RFC v4] TBD

  56. Display Controller Video Entity Entity Entity control control Pipeline Controller CDF – Configuration Model

  57. streaming control Display Controller Video Entity Entity Entity streaming control CDF – Streaming Control

  58. struct display_entity_control_ops { int (* get_size )(struct display_entity *ent, unsigned int *width, unsigned int *height); int (* set_state )(struct display_entity *ent, enum display_entity_state state); int (* update )(struct display_entity *ent); /* Port operations */ int (* get_modes )(struct display_entity *entity, unsigned int port, const struct videomode **modes); int (* get_params )(struct display_entity *entity, unsigned int port, struct display_entity_interface_params *params); }; CDF – Control Operations

  59. struct display_entity_video_ops { int (* set_stream )(struct display_entity *ent, unsigned int port, enum display_entity_stream_state state); }; CDF – Video Operations

  60. Pushback

  61. • dri-devel@listsfreedesktop.org • linux-media@vger.kernel.org • laurent.pinchart@ideasonboard.com Contact

  62. ? !

  63. Thenk ye.

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend