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.

Recommend


More recommend