linuxdev-br second edition just happened end of last month in Campinas, Brazil. We have put a nice write-up about the conference on the link below. Soon we will start planning next year’s event. Come and join our community!
We already received some great talk proposals for this year’s event, but to bring in even more good content to our attendees we are extending the Call for Presentation until the 7th of June.
Linux Developer Conference Brazil – linuxdev-br for short – aims to be a meeting point for the worldwide Linux development community. We are looking for talks that deal with the most recent as well as the most relevant topics in FOSS development, including but not limited to kernel and drivers, bootloaders, networking and protocols, containers and virtualization, security, IoT, industry challenges and more. No matter what your background or level is, come share your views with the FOSS community at large.
Details on the topics accepted and how to submit can be found at the conference’s CFP page. Submit your talk now!
This time round Collabora contributed 33 patches to the 4.16 release of the Linux Kernel, that is a bit lower than usual, probably because our developers decided to enjoy some time off for the end of year holidays instead sending patches upstream :). Our contributions were made by 8 different developers. At the same time we added our Reviewed-by tag to 34 patches and Signed-off-by tag to 74 patches. Last, but not least we stamped 4 patches with a Tested-by tag.
Sebastian Reichel led the way by adding/improving display support on Nokia N950, N9 and Motorola Droid 4 devices, adding support for internal switch of GE’s Bx50v3 devices and reviewed a lot of OMAP related changes, not to count his work as power-supply maintainer.
Enric Balletbò i Serra add usb3 and extcon support for Rockchip RK3399 devices, including the Samsung Chromebook Plus device. He also fixed a suspend issue on the same platform. Gabriel Krisman Bertazi fixed i915 to reject modifiers for pipe C on Geminilake.
Daniel Stone fixed a DRM API bug that has been around for a long time; the ioctl to get framebuffer information only supported a single plane, yet didn’t reject requests to get information for multi-planar framebuffers. A new ioctl which supports multi-planar framebuffers is currently in the works. On the uvcvideo driver, Nicolas Dufresne added D3DFMT_L8 format support to the Acer Windows Mixed Reality Headset.
Thierry Escande, who unfortunately left Collabora, split out the MFD part of cros_ec into its own module. Romain Perier, who also left us, replaced the old PCI pool API with the new DMA pool API in a few drivers.
Here is the complete list of Collabora contributions:
Daniel Stone (1):
Enric Balletbo i Serra (7):
- arm64: dts: rockchip: add pd_usb3 power-domain node for rk3399
- arm64: dts: rockchip: add the aclk_usb3 clocks for USB3 on rk3399
- arm64: dts: rockchip: add reset property for dwc3 controllers on rk3399
- arm64: dts: rockchip: add usb3-phy otg-port support for rk3399
- arm64: dts: rockchip: add extcon nodes and enable tcphy rk3399-gru
- platform/chrome: cros_ec_lpc: Register the driver if ACPI entry is missing.
- usb: dwc3: of-simple: fix oops by unbalanced clk disable call
Gabriel Krisman Bertazi (1):
Gustavo Padovan (2):
Nicolas Dufresne (1):
Romain Perier (3):
- block: DAC960: Replace PCI pool old API
- net: e100: Replace PCI pool old API
- hinic: Replace PCI pool old API
Sebastian Reichel (15):
- Merge branch ‘fixes’ into for-next
- drm/omap: remove unused function defines
- drm/omap: drop incorrect comment
- drm/omap: add support for physical size hints from display drivers
- drm/omap: panel-dsi-cm: add regulator support
- drm/omap: panel-dsi-cm: add physical size support
- drm/omap: panel-dsi-cm: add external backlight support
- drm/omap: panel-dsi-cm: switch to gpiod
- ARM: dts: omap4-droid4: improve LCD description
- ARM: dts: n950: add display support
- net: dsa: Support internal phy on ‘cpu’ port
- ARM: dts: imx6q-bx50v3: Add internal switch
- ARM: dts: imx6q-b850v3: Add switch port configuration
- ARM: dts: imx6q-b650v3: Add switch port configuration
- ARM: dts: imx6q-b450v3: Add switch port configuration
Thierry Escande (3):
- cros_ec: Split cros_ec_devs module
- cros_ec: Move cros_ec_dev module to drivers/mfd
- platform/chrome: cros_ec_lpc: Add support for Google Glimmer
Gabriel Krisman Bertazi (3):
- drm/i915: Simplify onion for bxt_ddi_phy_init()
- drm/i915: Silence compiler for csr_load_work_fn()
- drm/i915: Silence smatch for cmdparser
Gustavo Padovan (3):
- drm/stm: checkpatch strict minor updates
- drm/stm: dsi: Rename driver name
- drm/vc4: Fix wrong printk format in vc4_bo_stats_debugfs()
Sebastian Reichel (28):
- serdev: add method to set parity
- serdev: only match serdev devices
- serdev: do not generate modaliases for controllers
- ARM: dts: Nokia N9: add support for up/down keys in the dts
- mtd: onenand: omap2: print resource using %pR format string
- mtd: onenand: omap2: Do not make delay for GPIO OMAP3 specific
- mtd: onenand: omap2: Convert to use dmaengine for memcpy
- mtd: onenand: omap2: Unify OMAP2 and OMAP3 DMA implementation
- mtd: onenand: omap2: Simplify the DMA setup for various paths
- mtd: onenand: omap2: Account waiting time as waiting on IO
- mtd: onenand: omap2: Remove partitioning support from platform data
- mtd: onenand: omap2: Remove skip initial unlocking support
- mtd: onenand: omap2: Remove regulator support
- serdev: Introduce devm_serdev_device_open()
- serdev: Make .remove in struct serdev_device_driver optional
- drm: omapdrm: Deconstruct the omap_drv.h header.
- drm: omapdrm: venc: Return error code on OF parsing failure
- drm: omapdrm: dpi: Remove dpi_data port_initialized field
- drm: omapdrm: dss: Make dss_dump_clocks() function static
- drm: omapdrm: dss: Set the DMA coherent mask
- drm: omapdrm: Remove unused omap_dss_find_device() function
- drm: omapdrm: Pass drm_device to omap_gem_resume()
- drm: omapdrm: dpi: Don’t treat GPIO probe deferral as an error
- media: ARM: dts: nokia n900: enable autofocus
- media: dt-bindings: et8ek8: Document support for flash and lens devices
- clk: ti: clkctrl: fix error messages to print out node name properly
- serdev: Introduce devm_serdev_device_open()
- serdev: Make .remove in struct serdev_device_driver optional
Enric Balletbo i Serra (4):
- arm64: dts: rockchip: introduce pclk_vio_grf in rk3399-eDP device node
- rtc: cros-ec: add cros-ec-rtc driver.
- mfd: cros_ec: Introduce RTC commands and events definitions.
- extcon: usbc-cros-ec: add support to notify USB type cables.
Gustavo Padovan (4):
- drm: Print the fb dimensions when the src coord check fails
- drm/drm_mm.h: Fix the name of the referenced function in comment
- dma-buf: Cleanup comments on dma_buf_map_attachment()
- drm: Spelling fixes
Sebastian Reichel (34):
- power: supply: max17042_battery: Always fall back to default platform-data
- power: supply: max17042_battery: Check battery current for status when supplied
- MAINTAINERS: Add AXP288 PMIC entry
- power: supply: axp288_fuel_gauge: Do not register our psy on (some) HDMI sticks
- power: supply: axp288_fuel_gauge: Optimize get_current()
- power: supply: axp288_fuel_gauge: Rework get_status()
- power: reset: account for const type of of_device_id.data
- power: supply: account for const type of of_device_id.data
- bq24190: Simplify code in property_is_writeable
- power: supply: axp288_fuel_gauge: Get iio-channels once during boot
- power: supply: axp288_charger: Properly stop work on probe-error / remove
- power: supply: axp288_charger: Simplify extcon cable handling
- power: supply: axp288_charger: Use the right property for the input current limit
- power: supply: axp288_charger: Pick lower input current limit not higher
- power: supply: axp288_charger: Do not cache input current limit value
- power: supply: axp288_charger: Remove no longer needed locking
- power: supply: axp288_charger: Use regmap_update_bits to set the input limits
- power: supply: axp288_charger: Cleanup some double empty lines
- power: supply: axp288_charger: Remove charger-enabled state tracking
- power: supply: axp288_charger: Add missing newlines to some messages
- power: supply: axp288_charger: Do not stop + restart charging at boot
- power: reset: remove unused imx-snvs-poweroff driver
- power: reset: msm: Clarify restart and poweroff
- drm/omap: panel-dsi-cm: fix driver
- Add support for bq27521 battery monitor
- power: supply: bq24190_charger: Remove extcon handling
- power: ltc2941-battery-gauge: Disable continuous monitoring on shutdown
- HSI: cmt_speech: use timespec64 instead of timespec
- power: supply: cpcap-battery: Fix platform_get_irq_byname’s error checking
- power: supply: ab8500_charger: Bail out in case of error in ‘ab8500_charger_init_hw_registers()’
- power: supply: ab8500_charger: Fix an error handling path
- power: supply: charger-manager: Fix typo in condition
- power: reset: zx-reboot: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE
- power: supply: sbs-message: double left shift bug in sbsm_select()
Enric Balletbo i Serra (1):
Peter Senna Tschudin (2):
Sebastian Reichel (1):
We are proud to tell you that the second edition of the linuxdev-br conference will happen on August 25th and 26th, 2018 again at the University of Campinas. The first edition, last November, was a massive success and now the second edition will happen in a bigger place to fit more people with a duration of two days, so it can fit a wider range of talks without preventing the attendees from connecting to each other during the coffee-breaks and happy hours!
Stay tuned for more updates, soon we will publish a call for talks and open the registrations. We want to make linuxdev-br always better! See you there! :)
Last Saturday we had the first edition of the Linux Developer Conference Brazil. A conference born from the need of a meeting point, in Brazil, for the developers, enthusiasts and companies of FOSS projects that forms the Core of modern Linux systems, either it be in smartphones, cloud, cars or TVs.
After a few years traveling to conferences around the world I felt that we didn’t have in Brazil any forum like the ones outside of Brazil, so I came up with the idea of building one myself. So I invited two friends of mine to take on the challenge, Bruno Dilly and João Moreira. We also got help from University of Campinas that allowed us to use their space, many thanks to Professor Islene Garcia.
Together we made linuxdev-br was a success, the talks were great. Almost 100 people attended the conference, some of them traveling from quite far places in Brazil. During the day we had João Avelino Bellomo Filho talking about SystemTap, Lucas Villa Real talking about Virtualization with GoboLinux’ Runner and Felipe Neves talking about the Zephyr project. In the afternoon we had Fabio Estevam talking about Device Tree, Arnaldo Melo on perf tools and João Moreira on Live Patching. All videos are available here (in Portuguese).
To finish the day we had a Happy Hour paid by the sponsors of the conference. It was a great opportunity to have some beers and interact with other attendees.
I want to thank you everyone that joined us in the first edition, next year it will be even better. By the way, talking about next year, the conference idiom next year will be English. We want linuxdev-br to become part of the international cycle of conferences! Stay tuned for next year, if you want to take part, talk or sponsor please reach us at email@example.com.
I just delivered a talk today at Open Source Summit NA, here in LA, about everything we’ve been doing to support explicit synchronization on the Media and Graphics pipeline in the kernel. You can find the slides here.
The DRM side is already mainline, but V4L2 is currently my focus of work along with the linux-media community in the kernel. Blog posts about that should appear soon on this blog.
The date is approaching but better late than never. :)
I and others are organizing the first edition of the Linux Developer Conference Brazil, on the November 11th of 2017, a meeting point in Brazil for the community developing Free and Open Source Software(FOSS) for the Core of Linux systems, either for mobile, TVs, cars or in the Cloud. It pretends to be a place to connect developers, enthusiasts and companies to help the growth of both the FOSS community and market.
Now here is a look at the changes made by Collaborans. To begin with Daniel Stone fixed an issue when waiting for fences on the i915 driver, while Emil Velikov added support to read the PCI revision for sysfs to improve the starting time in some applications.
Emilio López added a set of selftests for the Sync File Framework and Enric Balletbo i Serra added support for the ChromeOS Embedded Controller Sensor Hub. Fabien Lahoudere added support for the NVD9128 simple panel and enabled ULPI phy for USB on i.MX.
Gabriel Krisman fixed a spurious CARD_INT interrupts for SD cards that was preventing one of our kernelCI machines to boot. On the graphics side Gustavo Padovan added Explicit Synchronization support to DRM/KMS.
Martyn Welch added GPIO support for CP2105 USB serial device while Nicolas Dufresne fixed Exynos4 FIMC to roundup imagesize to row size for tiled formats, otherwise there would be enough space to fit the last row of the image. Last but not least, Tomeu Vizoso added debugfs interface to capture frames CRCs, which is quite helpful for debugging and automated graphics testing.
And now the complete list of Collabora contributions:
Daniel Stone (1):
Emil Velikov (1):
Emilio López (7):
- selftest: sync: basic tests for sw_sync framework
- selftest: sync: fence tests for sw_sync framework
- selftest: sync: merge tests for sw_sync framework
- selftest: sync: wait tests for sw_sync framework
- selftest: sync: stress test for parallelism
- selftest: sync: stress consumer/producer test
- selftest: sync: stress test for merges
Enric Balletbo i Serra (3):
- iio: cros_ec_sensors_core: Add common functions for the ChromeOS EC Sensor Hub.
- iio: cros_ec_sensors: add ChromeOS EC Contiguous Sensors driver
- platform/chrome: cros_ec_dev – Register cros-ec sensors
Fabien Lahoudere (4):
- drm/panel: simple: Add NVD9128 as a simple panel
- spi: spidev: Add device to spidev device tree compatibility list
- usb: chipidea: imx: configure imx for ULPI phy
- usb: chipidea: imx: Disable internal 60Mhz clock with ULPI PHY
Gabriel Krisman Bertazi (1):
Gustavo Padovan (18):
- drm/fence: release fence reference when canceling event
- dma-buf/sync_file: hold reference to fence when creating sync_file
- drm/atomic: add drm_atomic_set_fence_for_plane()
- drm/imx: use drm_atomic_set_fence_for_plane() to set the fence
- drm/msm: use drm_atomic_set_fence_for_plane() to set the fence
- drm/plane: add inline doc for struct drm_plane
- dma-buf/sw_sync: put fence reference from the fence creation
- MAINTAINERS: update Sync File Framework files
- drm/fence: add in-fences support
- drm/fence: add fence timeline to drm_crtc
- drm/fence: add out-fences support
- Revert “dma-buf/sync-file: Avoid enable fence signaling if poll(.timeout=0)”
- drm/fences: add DOC: for explicit fencing
- drm/atomic: doc: remove old comment about nonblocking commits
- staging/android: remove Sync Framework tasks from TODO
- drm/fence: add drm_crtc_create_fence()
- selftest: sync: improve assert() failure message
- drm/fence: fix memory overwrite when setting out_fence fd
Martyn Welch (1):
Nicolas Dufresne (1):
Tomeu Vizoso (2):
In the last two articles we talked about how Explicit Fencing can help the graphics pipeline in general and what happened on the effort to upstream the Android Sync Framework. Now on the third post of this series we will go through the Explicit Fencing implementation on DRM and other elements of the graphics stack.
The DRM implementation lays down on top of two kernel infrastructures, struct dma_fence, which represents the fence and struct sync file that provides the file descriptors to be shared with userspace (as it was discussed in the previous articles). With fencing the display infrastructure needs to wait for a signal on that fence before displaying the buffer on the screen. On a Explicit Fencing implementation that fence is sent from userspace to the kernel. The display infrastructure also sends back to userspace a fence, encapsulated in a struct sync_file, that will be signalled when the buffer is scanned out on the screen. The same process happens on the rendering side.
It is mandatory to use of Atomic Modesetting and here is not plan to support legacy APIs. The fence that DRM will wait on needs to be passed via the IN_FENCE_FD property for each DRM plane, that means it will receive one sync_file fd containing one or more dma_fence per plane. Remember that in DRM a plane directly relates to a framebuffer so one can also say that there is one sync_file per framebuffer.
On the other hand for the fences created by the kernel that are sent back to userspace the OUT_FENCE_PTR property is used. It is a DRM CRTC property because we only create one dma_fence per CRTC as all the buffers on it will be scanned out at the same time. The kernel sends this fence back to userspace by writing the fd number to the pointer provided in the OUT_FENCE_PTR property. Note that, unlike from what Android did, when the fence signals it means the previous buffer – the buffer removed from the screen – is free for reuse. On Android when the signal was raised it meant the current buffer was freed. However, the Android folks have patched SurfaceFlinger already to support the Mainline semantics when using Explicit Fencing!
Nonetheless, that is only one side of the equation and to have the full graphics pipeline running with Explicit Fencing we need to support it on the rendering side as well. As every rendering driver has its own userspace API we need to add Explicit Fencing support to every single driver there. The freedreno driver already has its Explicit Fencing support mainline and there is work in progress to add support to i915 and virtio_gpu.
On the userspace side Mesa already has support for the EGL_ANDROID_native_fence_sync needed to use Explicit Fencing on Android. Libdrm incorporated the headers to access the sync file IOCTL wrappers. On Android, libsync now has support for both the old Android Sync and Mainline Sinc File APIs. And finally, on drm_hwcomposer, patches to use Atomic Modesetting and Explicit Fencing are available but they are not upstream yet.
Validation tests for both Sync Files and fences on the Atomic API were written and added to IGT.
In the first post we covered the main concepts behind Explicit Synchronization for the Linux Kernel. Now in the second post of the series we are going to look to the Android Sync Framework, the first (out-of-tree) Explicit Fencing implementation for the Linux Kernel.
The Sync Framework was the Android solution to implement Explicit Fencing in AOSP. It uses file descriptors to communicate fencing information between userspace and kernel and between userspace process.
In the Sync Framework it all starts with the creation of a Sync Timeline, a struct created for each driver context to represent a monotonically increasing counter. It is the Sync Timeline who will guarantee the ordering between fences in the same Timeline. The driver contexts could be different GPU rings, or different Displays on your hardware.
Then we have Sync Points(sync_pt), the name Android gave to fences, they represent a specific value in the Sync Timeline. When created the Sync Point is initialized in the Active state, and when it signals, i.e., the job it was associated to finishes, it transits to the Signaled state and informs the Sync Timeline to update the value of the last signaled Sync Point.
To export and import Sync Points to/from userspace the Sync Fence struct is used. Under the hood the the Sync Fence is a Linux file and we use thte Sync Fence to store Sync Point information. To exported to userspace a unused file descriptor(fd) is associated to the Sync Fence file. Drivers can then use the file descriptor to pass the Sync Point information around.
The Sync Fence is usually created just after the Sync Point creation, it then travel through the pipeline, via userspace, until the driver that is going to wait for the Sync Fence to signal. The Sync Fence signal when the Sync Point inside it signals.
One of the most important features of the Android Sync Framework is the ability to merge Sync Fences into a new Sync Fence containing all Sync Points from both Sync Fences. It can contain as many Sync Points as your resource allows. A merged Sync Fence will only signal when all its Sync Points signals.
When it comes to userspace API the Sync Framework has implements three ioctl calls. The first one is to wait on sync_fence to signal. There is also a call to merge two sync_fences into a third and new sync_fence. And finally there is a also a call to grab information about the sync_fence and all its sync_points.
The Sync Fences fds are passed to/from the kernel in the calls to ask the kernel to render or display a buffer.
This was intended to be a overview of the Sync Framework as we will see some of these concepts on the next article where we will talk about the effort to add explict fencing on mainline kernel. If you want to learn more about the Sync Framework you can find more info here and here.