SlideShare a Scribd company logo
GMSL in Linux
Eight Cameras, Two Busses, One Address
Automotive Linux Summit, 2018-03-21
Kieran Bingham
kieran.bingham@ideasonboard.com
about:me
Kieran Bingham
● Embedded Linux since 2006
● Open source focus since 2014
● Ideas on Board
● Linux-media / V4L2
● Renesas
GMSL in Linux
about:us
R-Car Gen3
Upstream Multimedia Team
● Jacopo Mondi
● Kieran Bingham
● Laurent Pinchart
● Niklas Söderlund
● Ulrich Hecht
● Wolfram Sang
GMSL in Linux
GMSL
R-Car ADAS platform
Trials and Tribulations
Future Work
Summary
Question Time
Serialiser De-serialiser
I2C Control channel
Video
GMSL
GMSL
● High speed data link
– Serialiser
● Convert parallel data to a high data rate serial link
– Deserialiser
● Convert high data rate serial link to parallel data
– Forward Channel
● High bandwidth data
– Reverse Channel
● Control data
● (Low bandwidth) Video
● EMI Resistant
Gigabit Multimedia Serial Link
https://www.maximintegrated.com/en/products/interface/high-speed-signaling/MAX9271.html
GMSL
Serialisers – Deserialisers
● Serialiser converts parallel data to a
higher rate serial stream
– Pixel Clock:
– 8b/10b encoding
– 30bit / 40bit packets
● Deserialiser converts data back to a
parallel stream
● AC Coupled
– Uses 8b/10b to ensure ‘average’ bit use
– No more than 5 consecutive bits
GMSL
Serialisers – Deserialisers
● EMI reduction
– Pre-emphasis, de-emphasis
– Spread spectrum
● Fault detection
– Open cable, Short to Battery, Short to Ground
– Status registers on both sides of the link
– Possible to transmit to two deserialisers
● Power over Coax
GMSL
Data Transmission
● Packets are highly configurable
● DBL data mode
● Forward channel
– Parallel Video, Pixel Clock, I2S, GPIO, I2C, UART
● Reverse Channel
– GPIO, I2C, (reduced bandwidth) video
● Host can be either side
GMSL
GMSL
● 3 Gbps forward channel
● UART 1 mbps I2C 400 kbps
● STP or Coax, with PoC
● GMSL v2
– 6 Gbps forward channel (4K)
– 1.5 Gbps reverse
– Lossless compression
– HDCP
Data Transmission
GMSL Competitors / Alternatives
● GMSL is proprietary from Maxim
● Alternatives
– Automotive Ethernet
● In use for more than just multimedia
– MOST
● Token ring based system
– FPD-Link III
● Bridging of Control Interfaces Over Multimedia Serial Links
Vladimir Zapolskiy, Mentor Graphics
Friday, June 22 • 16:20 - 17:00
GMSL
GMSL in Linux
GMSL
R-Car ADAS platform
Trials and Tribulations
Future Work
Summary
Question Time
GMSL in Linux
Use cases
● ADAS
– Reversing cameras
– Surround view
– Lane departure detection
– Road sign detection
– Side mirror replacements
– Blind spots
– Recording Accidents
– Driver and passenger monitoring
– Driverless cars … ?
R-Car ADAS platform
Rcar VIN Gen 3 / CSI2
● Gen3 brings in CSI2 support
● Media controller support
● Supports up to 4K
● 8 Inputs
● Supported in Mainline v4.18
● Supports RGB and YUV video
● External synchronization and BT.656 for the YUV
● Gen3 platforms implement a CSI-2 receiver
R-Car ADAS platform
Documentation/devicetree/bindings/media/rcar_vin.txt
Documentation/devicetree/bindings/media/renesas,rcar-csi2.txt
MAX9286 – Quad GMSL Deserialiser
● 4 channels
● I2C Mux, with ‘address translation and broadcast’
● 1.5Gbps per channel
● Low-Cost 50Ω Coax Cable and FAKRA Connectors or 100Ω STP
● Data from Image Sensors Are Synchronized to the Same Pixel
● Automatic Internal/External Generation of Camera Sync
● Equalization Allows 15m Length Cable Operation at Full Speed
● Two Dedicated GPIO Ports
https://www.maximintegrated.com/en/products/interface/high-speed-signaling/MAX9286.html
R-Car ADAS platform
MAX9286 – Quad GMSL Deserialiser
https://www.maximintegrated.com/en/products/interface/high-speed-signaling/MAX9286.html
R-Car ADAS platform
Camera max9271
Camera max9271
Camera max9271
Camera max9271
Decode
and
Fifo
max9286
Line
Memory
and
Sync
GMSL to
parallel
convertor
GMSL to
parallel
convertor
GMSL to
parallel
convertor
GMSL to
parallel
convertor
I2C
MCU
Parallel
to
CSI2
RDACM20 / RDACM21
● GMSL Camera using FAKRA Coax connector
● Very small size (20.5mm x 20.5mm x 21.5mm)
● Ultra lightweight (< 10 g excluding lens)
● 10-bit raw, 8-/10-bit YUV422
● 1280 x 800 pixels
● OV10635 with DSL267
● Horizontal field of view: 194.6°
● Vertical field of view: 129.92°
● Lens aperture: F# 2.2
max9271 ov10635
mcu
R-Car ADAS platform
● [RFC PATCH v1 0/4] GMSL Drivers
– https://lwn.net/ml/linux-media/20180605233435.18102-1-kieran.bingham+renesas@ideasonboard.com/
– ` [RFC PATCH v1 1/4] media: dt-bindings: max9286: add device tree binding Kieran Bingham
– ` [RFC PATCH v1 2/4] media: i2c: Add MAX9286 driver Kieran Bingham
– ` [RFC PATCH v1 3/4] media: dt-bindings: rdacm20: add device tree binding Kieran Bingham
– ` [RFC PATCH v1 4/4] media: i2c: Add RDACM20 driver Kieran Bingham
● [RFC 0/2] GMSL bindings description update
– https://lwn.net/ml/linux-media/1528543805-23945-1-git-send-email-jacopo%2Brenesas%40jmondi.org/
` [RFC 1/2] dt/bindings: media: Add DT bindings for Maxim Integrated MAX9286 Jacopo Mondi
` [RFC 2/2] dt-bindings: media: i2c: Add bindings for IMI RDACM20 Jacopo Mondi
Upstreaming
MAX9286 - Bindings
The MAX9286 deserializes receives video data on up to 4 Gigabit
Multimedia Serial Links (GMSL) and outputs them on a CSI-2 port
using up to 4 data lanes.
In addition to video data, the GMSL links carry a bidirectional
control channel that encapsulates I2C messages. The MAX9286
forwards all I2C traffic not addressed to itself to the other side of
the links, where a GMSL serializer will output it on a local I2C bus.
In the other direction all I2C traffic received over GMSL by the
MAX9286 is output on the local I2C bus.
R-Car ADAS platform
Required Properties:
- compatible: Shall be "maxim,max9286"
- reg: I2C device address
Optional Properties:
- poc-supply: Regulator providing Power over Coax to the
cameras
- pwdn-gpios: GPIO connected to the #PWDN pin
Required endpoint nodes:
----------------------------------
The connections to the MAX9286 GMSL and its endpoint
nodes are modeled using the OF graph bindings in
accordance with the video interface bindings defined in
Documentation/devicetree/bindings/media/video-
interfaces.txt.
The following table lists the port number corresponding to
each device port.
Port Description
----------------------------------------
Port 0 GMSL Input 0
Port 1 GMSL Input 1
Port 2 GMSL Input 2
Port 3 GMSL Input 3
Port 4 CSI-2 Output
MAX9286 - Bindings
Optional Endpoint Properties for GSML Input Ports (Port [0-3]):
- remote-endpoint: phandle to the remote GMSL source
endpoint subnode in the remote node port.
Required Endpoint Properties for CSI-2 Output Port (Port 4):
- data-lanes: array of physical CSI-2 data lane indexes.
- clock-lanes: index of CSI-2 clock lane.
Required i2c-mux nodes:
----------------------------------
Each remote GMSL endpoint is modeled as child busses of an
i2c bus multiplexer/switch, in accordance with bindings
described in Documentation/devicetree/bindings/i2c/i2c-mux.txt.
Required i2c child bus properties:
- all properties described as required i2c child bus nodes
properties in Documentation/devicetree/bindings/i2c/i2c-mux.txt.
MAX9286 - Bindings
gmsl-deserializer@2c {
compatible = "maxim,max9286";
reg = <0x2c>;
poc-supply = <&camera_poc_12v>;
pwdn-gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
#address-cells = <1>;
#size-cells = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9286_in0: endpoint {
remote-endpoint = <&rdacm20_out0>;
};
};
port@1 { … };
port@2 { … }
port@3 { … };
port@4 {
reg = <4>;
max9286_out: endpoint {
clock-lanes = <0>;
data-lanes = <1 2 3 4>;
remote-endpoint = <&csi40_in>;
};
};
};
… <continued> ...
i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
camera@51 {
compatible = "imi,rdacm20";
reg = <0x51 0x61>;
port {
rdacm20_out0: endpoint {
remote-endpoint = <&max9286_in0>;
};
};
};
};
i2c@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
camera@52 {
compatible = "imi,rdacm20";
reg = <0x52 0x62>;
port {
rdacm20_out1: endpoint {
remote-endpoint = <&max9286_in1>;
};
};
};
};
i2c@2 { ... };
i2c@3 { ... };
};
GMSL in Linux
GMSL
R-Car ADAS platform
Trials and Tribulations
Future Work
Summary
Question Time
GMSL in Linux
MCU
8 Cameras, Two Busses, One Address
GMSL – Max9286 I2C Mux
Host
I2C
8 Cameras, Two Busses, One Address
Host
I2C
max9286
max9286
max9271
max9271
max9271
max9271
max9271
max9271
max9271
max9271
Trials and Tribulations
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
8 Cameras, Two Busses, One Address
Host
I2C
max9286
max9286
max9271
max9271
max9271
max9271
max9271
max9271
max9271
max9271
Trials and Tribulations
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
8 Cameras, Two Busses, One Address
Host
I2C
max9286
max9286
max9271
max9271
max9271
max9271
max9271
max9271
max9271
max9271
Trials and Tribulations
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
8 Cameras, Two Busses, One Address
Host
I2C
max9286
max9286
max9271
max9271
max9271
max9271
max9271
max9271
max9271
max9271
Trials and Tribulations
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
8 Cameras, Two Busses, One Address
Host
I2C
max9286
max9286
max9271
max9271
max9271
max9271
max9271
max9271
max9271
max9271
Trials and Tribulations
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
8 Cameras, Two Busses, One Address
Host
I2C
max9286
max9286
max9271
max9271
max9271
max9271
max9271
max9271
max9271
max9271
Trials and Tribulations
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
mcuov10635
Difficulties faced
● Subdevice Notifiers
● Drivers merged into single module or perform cross writes to the
other
● I2C muxing – making sure that one MUX is disabled, while the
other is active.
● MCU camera programming
● Fsync … took forever
● Faulty cameras (non-probing – MCU absentia)
● VC / Async framework / Endpoint Matching (ADV748x prototype)
● Rapidly developing VIN/CSI2 on RCar3
Trials and Tribulations
GMSL in Linux
GMSL
R-Car ADAS platform
Trials and Tribulations
Future Work
Summary
Question Time
● RDACM21
● Fault Tolerant V4L2
– Allowing the system to function when one camera is broken
– Recovering cameras / ‘reboot’ing them (Re-negotiate, on error?)
– Redundant links…
– Hotplug style events
● Automatic I2C addresses
● FWNode Endpoint Matching improvements
● GMSL as a bus
● Bi-directional
GMSL in Linux : Future Work
GMSL in Linux
GMSL
R-Car ADAS platform
Trials and Tribulations
Future Work
Summary
Question Time?
GMSL in Linux
GMSL
R-Car ADAS platform
Trials and Tribulations
Future Work
Summary
Question Time!

More Related Content

PDF
Webinar: Microcontroladores Infineon TRAVEO T2G
PPTX
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
PPTX
Ultra Accelerator Link (UALink): Accelerator Scale-up Network
PDF
Virtualization Support in ARMv8+
PDF
Webinar: Practical DDR Testing for Compliance, Validation and Debug
PPTX
CXL chapter1 and chapter 2 presentation.pptx
PPTX
Molex and Nvidia - Partnership to enable copper for the next generation artif...
PPTX
Astera Labs: Intelligent Connectivity for Cloud and AI Infrastructure
Webinar: Microcontroladores Infineon TRAVEO T2G
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
Ultra Accelerator Link (UALink): Accelerator Scale-up Network
Virtualization Support in ARMv8+
Webinar: Practical DDR Testing for Compliance, Validation and Debug
CXL chapter1 and chapter 2 presentation.pptx
Molex and Nvidia - Partnership to enable copper for the next generation artif...
Astera Labs: Intelligent Connectivity for Cloud and AI Infrastructure

What's hot (20)

PDF
Linux on ARM 64-bit Architecture
PDF
Board support package_on_linux
PDF
BeagleBone Black Bootloaders
PDF
Bootloaders
PDF
Autosar Basics hand book_v1
PDF
Linux power management: are you doing it right?
PPTX
Linux Kernel Tour
PDF
Making Linux do Hard Real-time
PDF
Linux Porting
PPTX
Embedded System Programming on ARM Cortex M3 and M4 Course
PDF
STM32 L4 presentation
PPTX
Mastering Microcontroller : TIMERS, PWM, CAN, RTC,LOW POWER
PDF
Simulink Stateflow workshop
PPT
U Boot or Universal Bootloader
PDF
Linux Kernel Overview
PDF
MIPI DevCon 2016: MIPI CSI-2 Application for Vision and Sensor Fusion Systems
PPTX
Embedded Hardware Design.pptx
PDF
“Introduction to the CSI-2 Image Sensor Interface Standard,” a Presentation f...
PDF
Challenges in Using UVM at SoC Level
PPT
FPD-Link III Serializers & Deserializers
Linux on ARM 64-bit Architecture
Board support package_on_linux
BeagleBone Black Bootloaders
Bootloaders
Autosar Basics hand book_v1
Linux power management: are you doing it right?
Linux Kernel Tour
Making Linux do Hard Real-time
Linux Porting
Embedded System Programming on ARM Cortex M3 and M4 Course
STM32 L4 presentation
Mastering Microcontroller : TIMERS, PWM, CAN, RTC,LOW POWER
Simulink Stateflow workshop
U Boot or Universal Bootloader
Linux Kernel Overview
MIPI DevCon 2016: MIPI CSI-2 Application for Vision and Sensor Fusion Systems
Embedded Hardware Design.pptx
“Introduction to the CSI-2 Image Sensor Interface Standard,” a Presentation f...
Challenges in Using UVM at SoC Level
FPD-Link III Serializers & Deserializers
Ad

Similar to GMSL in Linux (20)

PDF
K vector embedded_linux_workshop
PDF
How To Use Linux CAN Signal To AGL
PDF
How To Use AGL CAN Signal
PPTX
MarsBoard - NXP IMX6 Processor
PDF
Addressing the hard problems of automotive Linux: networking and IPC
DOCX
Vehicle tracting system
PPTX
NXP i.MX6 Multi Media Processor & Peripherals
PPT
Automatic vehicle accident detection and messaging system using gsm and gps m...
PDF
Wolf etal securebus kom syst
KEY
Gnu Radio and the Universal Software Radio Peripheral
PPTX
TMS20DM8148 Embedded Linux Session II
PPSX
Embedded project
PPT
TMPA910CRAXBG 32-Bit Display MCU
PPTX
Micro c lab8(serial communication)
PDF
CMOS Image Sensor Design_00h20_11_io.pdf
PDF
Kernel Recipes 2017 - The Serial Device Bus - Johan Hovold
PPTX
Linux Serial Driver
PDF
Presentation from Francisco Sanchez Pons at parallel session on FOTs
PDF
Wince CE board layout with components diagram
K vector embedded_linux_workshop
How To Use Linux CAN Signal To AGL
How To Use AGL CAN Signal
MarsBoard - NXP IMX6 Processor
Addressing the hard problems of automotive Linux: networking and IPC
Vehicle tracting system
NXP i.MX6 Multi Media Processor & Peripherals
Automatic vehicle accident detection and messaging system using gsm and gps m...
Wolf etal securebus kom syst
Gnu Radio and the Universal Software Radio Peripheral
TMS20DM8148 Embedded Linux Session II
Embedded project
TMPA910CRAXBG 32-Bit Display MCU
Micro c lab8(serial communication)
CMOS Image Sensor Design_00h20_11_io.pdf
Kernel Recipes 2017 - The Serial Device Bus - Johan Hovold
Linux Serial Driver
Presentation from Francisco Sanchez Pons at parallel session on FOTs
Wince CE board layout with components diagram
Ad

Recently uploaded (20)

PPTX
Machine Learning_overview_presentation.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Machine learning based COVID-19 study performance prediction
PDF
Electronic commerce courselecture one. Pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Getting Started with Data Integration: FME Form 101
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Empathic Computing: Creating Shared Understanding
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Tartificialntelligence_presentation.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
Machine Learning_overview_presentation.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Big Data Technologies - Introduction.pptx
Group 1 Presentation -Planning and Decision Making .pptx
Programs and apps: productivity, graphics, security and other tools
Machine learning based COVID-19 study performance prediction
Electronic commerce courselecture one. Pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Encapsulation_ Review paper, used for researhc scholars
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Getting Started with Data Integration: FME Form 101
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Spectral efficient network and resource selection model in 5G networks
Unlocking AI with Model Context Protocol (MCP)
Empathic Computing: Creating Shared Understanding
“AI and Expert System Decision Support & Business Intelligence Systems”
Tartificialntelligence_presentation.pptx
A comparative analysis of optical character recognition models for extracting...

GMSL in Linux

  • 1. GMSL in Linux Eight Cameras, Two Busses, One Address Automotive Linux Summit, 2018-03-21 Kieran Bingham kieran.bingham@ideasonboard.com
  • 2. about:me Kieran Bingham ● Embedded Linux since 2006 ● Open source focus since 2014 ● Ideas on Board ● Linux-media / V4L2 ● Renesas
  • 4. about:us R-Car Gen3 Upstream Multimedia Team ● Jacopo Mondi ● Kieran Bingham ● Laurent Pinchart ● Niklas Söderlund ● Ulrich Hecht ● Wolfram Sang
  • 5. GMSL in Linux GMSL R-Car ADAS platform Trials and Tribulations Future Work Summary Question Time
  • 7. GMSL ● High speed data link – Serialiser ● Convert parallel data to a high data rate serial link – Deserialiser ● Convert high data rate serial link to parallel data – Forward Channel ● High bandwidth data – Reverse Channel ● Control data ● (Low bandwidth) Video ● EMI Resistant Gigabit Multimedia Serial Link
  • 9. Serialisers – Deserialisers ● Serialiser converts parallel data to a higher rate serial stream – Pixel Clock: – 8b/10b encoding – 30bit / 40bit packets ● Deserialiser converts data back to a parallel stream ● AC Coupled – Uses 8b/10b to ensure ‘average’ bit use – No more than 5 consecutive bits GMSL
  • 10. Serialisers – Deserialisers ● EMI reduction – Pre-emphasis, de-emphasis – Spread spectrum ● Fault detection – Open cable, Short to Battery, Short to Ground – Status registers on both sides of the link – Possible to transmit to two deserialisers ● Power over Coax GMSL
  • 11. Data Transmission ● Packets are highly configurable ● DBL data mode ● Forward channel – Parallel Video, Pixel Clock, I2S, GPIO, I2C, UART ● Reverse Channel – GPIO, I2C, (reduced bandwidth) video ● Host can be either side GMSL
  • 12. GMSL ● 3 Gbps forward channel ● UART 1 mbps I2C 400 kbps ● STP or Coax, with PoC ● GMSL v2 – 6 Gbps forward channel (4K) – 1.5 Gbps reverse – Lossless compression – HDCP Data Transmission
  • 13. GMSL Competitors / Alternatives ● GMSL is proprietary from Maxim ● Alternatives – Automotive Ethernet ● In use for more than just multimedia – MOST ● Token ring based system – FPD-Link III ● Bridging of Control Interfaces Over Multimedia Serial Links Vladimir Zapolskiy, Mentor Graphics Friday, June 22 • 16:20 - 17:00 GMSL
  • 14. GMSL in Linux GMSL R-Car ADAS platform Trials and Tribulations Future Work Summary Question Time
  • 16. Use cases ● ADAS – Reversing cameras – Surround view – Lane departure detection – Road sign detection – Side mirror replacements – Blind spots – Recording Accidents – Driver and passenger monitoring – Driverless cars … ? R-Car ADAS platform
  • 17. Rcar VIN Gen 3 / CSI2 ● Gen3 brings in CSI2 support ● Media controller support ● Supports up to 4K ● 8 Inputs ● Supported in Mainline v4.18 ● Supports RGB and YUV video ● External synchronization and BT.656 for the YUV ● Gen3 platforms implement a CSI-2 receiver R-Car ADAS platform Documentation/devicetree/bindings/media/rcar_vin.txt Documentation/devicetree/bindings/media/renesas,rcar-csi2.txt
  • 18. MAX9286 – Quad GMSL Deserialiser ● 4 channels ● I2C Mux, with ‘address translation and broadcast’ ● 1.5Gbps per channel ● Low-Cost 50Ω Coax Cable and FAKRA Connectors or 100Ω STP ● Data from Image Sensors Are Synchronized to the Same Pixel ● Automatic Internal/External Generation of Camera Sync ● Equalization Allows 15m Length Cable Operation at Full Speed ● Two Dedicated GPIO Ports https://www.maximintegrated.com/en/products/interface/high-speed-signaling/MAX9286.html R-Car ADAS platform
  • 19. MAX9286 – Quad GMSL Deserialiser https://www.maximintegrated.com/en/products/interface/high-speed-signaling/MAX9286.html R-Car ADAS platform Camera max9271 Camera max9271 Camera max9271 Camera max9271 Decode and Fifo max9286 Line Memory and Sync GMSL to parallel convertor GMSL to parallel convertor GMSL to parallel convertor GMSL to parallel convertor I2C MCU Parallel to CSI2
  • 20. RDACM20 / RDACM21 ● GMSL Camera using FAKRA Coax connector ● Very small size (20.5mm x 20.5mm x 21.5mm) ● Ultra lightweight (< 10 g excluding lens) ● 10-bit raw, 8-/10-bit YUV422 ● 1280 x 800 pixels ● OV10635 with DSL267 ● Horizontal field of view: 194.6° ● Vertical field of view: 129.92° ● Lens aperture: F# 2.2 max9271 ov10635 mcu R-Car ADAS platform
  • 21. ● [RFC PATCH v1 0/4] GMSL Drivers – https://lwn.net/ml/linux-media/20180605233435.18102-1-kieran.bingham+renesas@ideasonboard.com/ – ` [RFC PATCH v1 1/4] media: dt-bindings: max9286: add device tree binding Kieran Bingham – ` [RFC PATCH v1 2/4] media: i2c: Add MAX9286 driver Kieran Bingham – ` [RFC PATCH v1 3/4] media: dt-bindings: rdacm20: add device tree binding Kieran Bingham – ` [RFC PATCH v1 4/4] media: i2c: Add RDACM20 driver Kieran Bingham ● [RFC 0/2] GMSL bindings description update – https://lwn.net/ml/linux-media/1528543805-23945-1-git-send-email-jacopo%2Brenesas%40jmondi.org/ ` [RFC 1/2] dt/bindings: media: Add DT bindings for Maxim Integrated MAX9286 Jacopo Mondi ` [RFC 2/2] dt-bindings: media: i2c: Add bindings for IMI RDACM20 Jacopo Mondi Upstreaming
  • 22. MAX9286 - Bindings The MAX9286 deserializes receives video data on up to 4 Gigabit Multimedia Serial Links (GMSL) and outputs them on a CSI-2 port using up to 4 data lanes. In addition to video data, the GMSL links carry a bidirectional control channel that encapsulates I2C messages. The MAX9286 forwards all I2C traffic not addressed to itself to the other side of the links, where a GMSL serializer will output it on a local I2C bus. In the other direction all I2C traffic received over GMSL by the MAX9286 is output on the local I2C bus. R-Car ADAS platform
  • 23. Required Properties: - compatible: Shall be "maxim,max9286" - reg: I2C device address Optional Properties: - poc-supply: Regulator providing Power over Coax to the cameras - pwdn-gpios: GPIO connected to the #PWDN pin Required endpoint nodes: ---------------------------------- The connections to the MAX9286 GMSL and its endpoint nodes are modeled using the OF graph bindings in accordance with the video interface bindings defined in Documentation/devicetree/bindings/media/video- interfaces.txt. The following table lists the port number corresponding to each device port. Port Description ---------------------------------------- Port 0 GMSL Input 0 Port 1 GMSL Input 1 Port 2 GMSL Input 2 Port 3 GMSL Input 3 Port 4 CSI-2 Output MAX9286 - Bindings Optional Endpoint Properties for GSML Input Ports (Port [0-3]): - remote-endpoint: phandle to the remote GMSL source endpoint subnode in the remote node port. Required Endpoint Properties for CSI-2 Output Port (Port 4): - data-lanes: array of physical CSI-2 data lane indexes. - clock-lanes: index of CSI-2 clock lane. Required i2c-mux nodes: ---------------------------------- Each remote GMSL endpoint is modeled as child busses of an i2c bus multiplexer/switch, in accordance with bindings described in Documentation/devicetree/bindings/i2c/i2c-mux.txt. Required i2c child bus properties: - all properties described as required i2c child bus nodes properties in Documentation/devicetree/bindings/i2c/i2c-mux.txt.
  • 24. MAX9286 - Bindings gmsl-deserializer@2c { compatible = "maxim,max9286"; reg = <0x2c>; poc-supply = <&camera_poc_12v>; pwdn-gpios = <&gpio 13 GPIO_ACTIVE_LOW>; #address-cells = <1>; #size-cells = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; max9286_in0: endpoint { remote-endpoint = <&rdacm20_out0>; }; }; port@1 { … }; port@2 { … } port@3 { … }; port@4 { reg = <4>; max9286_out: endpoint { clock-lanes = <0>; data-lanes = <1 2 3 4>; remote-endpoint = <&csi40_in>; }; }; }; … <continued> ... i2c@0 { #address-cells = <1>; #size-cells = <0>; reg = <0>; camera@51 { compatible = "imi,rdacm20"; reg = <0x51 0x61>; port { rdacm20_out0: endpoint { remote-endpoint = <&max9286_in0>; }; }; }; }; i2c@1 { #address-cells = <1>; #size-cells = <0>; reg = <0>; camera@52 { compatible = "imi,rdacm20"; reg = <0x52 0x62>; port { rdacm20_out1: endpoint { remote-endpoint = <&max9286_in1>; }; }; }; }; i2c@2 { ... }; i2c@3 { ... }; };
  • 25. GMSL in Linux GMSL R-Car ADAS platform Trials and Tribulations Future Work Summary Question Time
  • 27. MCU 8 Cameras, Two Busses, One Address GMSL – Max9286 I2C Mux Host I2C
  • 28. 8 Cameras, Two Busses, One Address Host I2C max9286 max9286 max9271 max9271 max9271 max9271 max9271 max9271 max9271 max9271 Trials and Tribulations mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635
  • 29. 8 Cameras, Two Busses, One Address Host I2C max9286 max9286 max9271 max9271 max9271 max9271 max9271 max9271 max9271 max9271 Trials and Tribulations mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635
  • 30. 8 Cameras, Two Busses, One Address Host I2C max9286 max9286 max9271 max9271 max9271 max9271 max9271 max9271 max9271 max9271 Trials and Tribulations mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635
  • 31. 8 Cameras, Two Busses, One Address Host I2C max9286 max9286 max9271 max9271 max9271 max9271 max9271 max9271 max9271 max9271 Trials and Tribulations mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635
  • 32. 8 Cameras, Two Busses, One Address Host I2C max9286 max9286 max9271 max9271 max9271 max9271 max9271 max9271 max9271 max9271 Trials and Tribulations mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635
  • 33. 8 Cameras, Two Busses, One Address Host I2C max9286 max9286 max9271 max9271 max9271 max9271 max9271 max9271 max9271 max9271 Trials and Tribulations mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635 mcuov10635
  • 34. Difficulties faced ● Subdevice Notifiers ● Drivers merged into single module or perform cross writes to the other ● I2C muxing – making sure that one MUX is disabled, while the other is active. ● MCU camera programming ● Fsync … took forever ● Faulty cameras (non-probing – MCU absentia) ● VC / Async framework / Endpoint Matching (ADV748x prototype) ● Rapidly developing VIN/CSI2 on RCar3 Trials and Tribulations
  • 35. GMSL in Linux GMSL R-Car ADAS platform Trials and Tribulations Future Work Summary Question Time
  • 36. ● RDACM21 ● Fault Tolerant V4L2 – Allowing the system to function when one camera is broken – Recovering cameras / ‘reboot’ing them (Re-negotiate, on error?) – Redundant links… – Hotplug style events ● Automatic I2C addresses ● FWNode Endpoint Matching improvements ● GMSL as a bus ● Bi-directional GMSL in Linux : Future Work
  • 37. GMSL in Linux GMSL R-Car ADAS platform Trials and Tribulations Future Work Summary Question Time?
  • 38. GMSL in Linux GMSL R-Car ADAS platform Trials and Tribulations Future Work Summary Question Time!