Use of framebuffer device in TX1

Hello,

I have a custom carrier board which is developed for Jetson TX-1. My requirement is two VGA or DVI output to display two different video streams on two monitors.

I have a free PCIe interfaces on our custom carrier board to connect PCIe to VGA converter. I am considering VL-MPEe-V5 from Versalogic which is a video expansion module with following platform and driver details:

Chipset: Silicon Motion SM750. 2D Graphic Accelerator Videocore with 128-bit 2D graphic engine which supports a single display, two cloned displays, or two simultaneous independent displays.

Drivers : The driver is present on the staging directory in the kernel source. We are using Linux kernel 4.9.

I successfully compiled (as a module) and load the driver in the TX-1. One frame buffer node is created in the /dev directory i.e /dev/fb1.

The logs are available during boot time shown below:

[    3.264895] sm750fb: module is from the staging directory, the quality is unknown, you have been warned.
[    3.267812] usb0: HOST MAC 5a:42:20:c8:08:0a
[    3.267842] usb0: MAC 5a:42:20:c8:08:0b
[    3.267861] tegra-xudc-new 700d0000.xudc: exiting ELPG
[    3.268447] tegra-xudc-new 700d0000.xudc: exiting ELPG done
[    3.268463] tegra-xudc-new 700d0000.xudc: ep 0 (type: 0, dir: out) enabled
[    3.268489] tegra-xudc-new 700d0000.xudc: entering ELPG
[    3.268750] tegra-xudc-new 700d0000.xudc: entering ELPG done
[    3.268761] tegra-xudc-new 700d0000.xudc: exiting ELPG
[    3.269287] tegra-xudc-new 700d0000.xudc: exiting ELPG done
[    3.269304] tegra-xudc-new 700d0000.xudc: entering ELPG
[    3.269573] tegra-xudc-new 700d0000.xudc: entering ELPG done
[    3.276003] l4tbr0: port 1(rndis0) entered blocking state
[    3.276007] l4tbr0: port 1(rndis0) entered disabled state
[    3.276154] device rndis0 entered promiscuous mode
[    3.276177] no options.
[    3.279175] sm750fb 0000:02:00.0: enabling device (0000 -> 0002)
[    3.279187] no specific g_option.
[    3.282550] mmio phyAddr = 18000000
[    3.282740] mmio virtual addr = ffffff800d800000
[    3.282747] video memory phyAddr = 14000000, size = 16777216 bytes
[    3.283250] video memory vaddr = ffffff800e000000
[    3.306020] IPv6: ADDRCONF(NETDEV_UP): rndis0: link is not ready
[    3.341865] l4tbr0: port 2(usb0) entered blocking state
[    3.341869] l4tbr0: port 2(usb0) entered disabled state
[    3.346663] device usb0 entered promiscuous mode
[    3.364876] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
[    3.563820] use simul primary mode
[    3.563825] crtc->cursor.mmio = ffffff800d8800f0
[    3.563833] ret = 5,fb_find_mode failed,with driver prepared modes
[    3.570706] success! use specified mode:800x600-16@60 in kernel prepared default modedb
[    3.570712] Member of info->var is :
               		xres=800
               		yres=600
               		xres_virtual=800
               		yres_virtual=600
               		xoffset=0
               		yoffset=0
               		bits_per_pixel=16
                		...
[    3.570715] fix->smem_start = 14000000
[    3.570717] fix->smem_len = 1000000
[    3.570719] fix->mmio_start = 18000000
[    3.570721] fix->mmio_len = 200000

I am trying to access the device node using gstreamer pipeline. But the pipeline is not working. Pipeline is shown below:
gst-launch-1.0 -v videotestsrc ! fbdevsink device="/dev/fb1"

I have the following queries:

  1. How can I access the framebuffer node to display the output in Jetson TX-1.
  2. Is it necessary to add the device in the device tree to work correctly.
  3. What would be the other reason of the problem and how can I solve this.

Thanks,
Asif Ikbal

Hi,
By default we do not support this case. Would see if other users have tried this and can share experience. In general, we would suggest use existing plugins such as nv3dsink or nvdrmvideosink to render frames.

Hi,

We don’t have existing code to access fb node in gstreamer.

fbdev access is quite low-level.