FPGA Support in the upstream kernel Alan Tull

Slides:



Advertisements
Similar presentations
Device Drivers. Linux Device Drivers Linux supports three types of hardware device: character, block and network –character devices: R/W without buffering.
Advertisements

purpose Search : automation methods for device driver development in IP-based embedded systems in order to achieve high reliability, productivity, reusability.
Automated Gateware Discovery Using Open Firmware
USERSPACE I/O Reporter: R 張凱富.
PCI Express® technology in 28-nm FPGAs
File and I/O system calls int open(const char* path, int flags, mode_t modes) int creat(const char *path, mode_t mode) ssize_t read(int fd, void *buf,
KOFI Stan Smith Intel SSG/DPD January, 2015 Kernel OpenFabrics Interface.
Lecture 12 Page 1 CS 111 Online Devices and Device Drivers CS 111 On-Line MS Program Operating Systems Peter Reiher.
3: OS Structures 1 OPERATING SYSTEM STRUCTURES PROCESS MANAGEMENT A process is a program in execution: (A program is passive, a process active.) A process.
Modifying the SCSI / Fibre Channel Block Size Presented by Keith Bonneau, John Chrzanowski and Craig O’Brien Advised by Robert Kinicki and Mark Claypool.
1 Speaker: I-Wei Chen Operating Systems, Spring 2002 Project #1: Adding a System Call.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 2: Operating-System Structures Modified from the text book.
Computer System Laboratory
Final presentation- Part A Avi Urman, Kobi Maltinsky Supervisor: Inna Rivkin Linux on SOPC – Embedded System Implementation.
I/O Tanenbaum, ch. 5 p. 329 – 427 Silberschatz, ch. 13 p
Stan Smith Intel SSG/DPD June, 2015 Kernel Fabric Interface KFI Framework.
POSIX: Files Introduction to Operating Systems: Discussion 1 Read Solaris System Interface Guide: Ch. 5.1 Basic File I/O.
Using ns-3 emulation to experiment with Wireless Mesh Network Routing: Lessons learned José Núñez-Martínez Research Engineer Centre Tecnologic de Telecomunicacions.
Department of Electrical Engineering Electronics Computers Communications Technion Israel Institute of Technology High Speed Digital Systems Lab. High.
Real-time Systems Lab, Computer Science and Engineering, ASU Linux Input Systems (ESP – Fall 2014) Computer Science & Engineering Department Arizona State.
Three fundamental concepts in computer security: Reference Monitors: An access control concept that refers to an abstract machine that mediates all accesses.
2012/03/06 匡建慈. goals  To build a multi-core platform with Hadoop environment.  Hardware architecture  What is Hadoop ?  What to do and what we have.
C questions A great programmer codes excellent code in C and Java. The code does video decoding. Java code works faster then C on my computer. how come?
Lecture 2: Linux devices Roei Ben-Harush Agenda 1 1 Linux Devices About next Assignment Roei Ben-Harush 2015 Reminder.
© 2010 Altera Corporation—Public Easily Build Designs Using Altera’s Video and Image Processing Framework 2010 Technology Roadshow.
Operating Systems Lecture 7 OS Potpourri Adapted from Operating Systems Lecture Notes, Copyright 1997 Martin C. Rinard. Zhiqing Liu School of Software.
Kernel Modules. Kernel Module Pieces of code that can be loaded and unloaded into the kernel upon demand. Compiled as an independent program With appropriate.
UNIX Files File organization and a few primitives.
Real-time Systems Lab, Computer Science and Engineering, ASU Quark SPI Interface (ESP – Fall 2014) Computer Science & Engineering Department Arizona State.
Lab 12 Department of Computer Science and Information Engineering National Taiwan University Lab12 – Driver 2014/12/16 1 /21.
COMP 3438 – Part I - Lecture 5 Character Device Drivers
1 Process Description and Control Chapter 3. 2 Process A program in execution An instance of a program running on a computer The entity that can be assigned.
Linux kernel TLV meetup, Kfir Gollan. What is hardware probing? Different approaches for detecting hardware Probing in the linux kernel.
I/O Software CS 537 – Introduction to Operating Systems.
OPERATING SYSTEMS DO YOU REQUIRE AN OPERATING SYSTEM IN YOUR SYSTEM?
Linux Sound Drivers Framework
OPERATING SYSTEMS COURSE THE HEBREW UNIVERSITY SPRING FUSE File System.
Lecture 1 Page 1 CS 111 Summer 2013 Important OS Properties For real operating systems built and used by real people Differs depending on who you are talking.
ATCA based LLRF system design review DESY Control servers for ATCA based LLRF system Piotr Pucyk - DESY, Warsaw University of Technology Jaroslaw.
Matthew Locke November 2007 A Linux Power Management Architecture.
File System Design David E. Culler CS162 – Operating Systems and Systems Programming Lecture 23 October 22, 2014 Reading: A&D a HW 4 out Proj 2 out.
Multiple Passes of the FreeBSD Device Tree
Introduction to Operating Systems Concepts
Input/Output (I/O) Important OS function – control I/O
CS/COE 0449 (term 2174) Jarrett Billingsley
cFS Platforms OSAL and PSP
Voice Controlled Robot by Cell Phone with Android App
Linux Device Model A device model after 2.5
Introduction to Developing Embedded Linux Device Drivers
Zero-copy Receive Path in Virtio
Linux Details: Device Drivers
Hands On SoC FPGA Design
Protection of System Resources
CSE451 I/O Systems and the Full I/O Path Autumn 2002
Operating Systems: A Modern Perspective, Chapter 6
D.Cobas, G. Daniluk, M. Suminski
I/O system.
The PCI bus (Peripheral Component Interconnect ) is the most commonly used peripheral bus on desktops and bigger computers. higher-level bus architectures.
Overview of Embedded SoC Systems
Enabling the NVMe™ CMB and PMR Ecosystem
An Introduction to Device Drivers
Introduction to Linux Device Drivers
Ideas for adding FPGA Accelerators to DPDK
Honnappa Nagarahalli Principal Software Engineer Arm
Linux Details: Device Drivers
The Hacking Suite For Governmental Interception
Remote Page Faults Over RDMA
Implementing Processes, Threads, and Resources
Exploring Application Specific Programmable Logic Devices
DPACC API Guidelines 2019/10/12.
Presentation transcript:

FPGA Support in the upstream kernel Alan Tull November 2, 2016

In development, not yet posted Overview Added in v4.4 FPGA Manager framework Low level drivers for CycloneV and Zynq (thanks Moritz!) On the mailing list Device Tree Overlay and bridges support FPGA Manager changes Support for more FPGAs Arria10 partial reconfig support Lattice iCE40 Family SPI (Joel Holdsworth) Cyclone V SPI (Joshua Clayton) In development, not yet posted Altera support for PCIe FPGAs (Matthew Gerlach)

FPGA Manager Framework Manufacturer-agnostic in-kernel API for programming FPGAs Only handles programming The intention is that higher level layers/interfaces can be implemented that may be used with any FPGA Low level drivers to handle FPGA particulars are registered with the framework API has 6 functions: Register/unregister low level driver Get/put a FPGA manager from device node Program FPGA from a buffer or from a firmware file Plus one on mailing list now: Get FPGA manager from device

FPGA Regions and FPGA Bridges Adds Device Tree Overlay support for programming FPGAs DT Overlay notifications Hierarchy of FPGAs, FPGA Regions, and Bridges in the Device Tree A base image in FPGA can create FPGA Regions (like slots) for Partial Reconfiguration FPGA Bridges can be hard hardware or soft hardware in the FPGA Bridges are disabled and frozen during programming to protect CPU busses and FPGA logic from junk Each PR region has have a bridge to control busses independently. While one region is being programmed, other regions continue to be active and their drivers don’t have to be unloaded. Can use Pantelis Antoniou’s DTO ConfigFS interface for applying DTO’s

Programming Interface FPGA Regions Each region gets its own split of the busses, gated by a bridge. Processor FPGA FPGA Manager HW Programming Interface FPGA Fabric Bridge PR Region Bridges Bridge PR Region

FPGA programming by applying a Device Tree Overlay (DTO) DTO contains: Target FPGA Region Bridges FPGA Image firmware file name Image specific information Child devices When DTO is applied: Bridges are disabled FPGA is programmed Bridges reenabled Child devices probed When DTO is removed Child devices removed Bridges disabled

A few words about interfaces The FPGA Manager framework has no userspace interface by design I have patches for a simple DebugFS, haven’t submitted yet. I don’t think that there is one interface or set of higher layers that will be appropriate for all FPGA use cases The FPGA Regions code (when used with the Overlays ConfigFS interface) adds one interface with some good features. It won’t fill everyone’s needs (not all platforms use Device Tree). Whatever interfaces and higher layers are added on top of FPGA Manager, all the supported FPGAs will have the opportunity to use

FPGA Image Info Struct (change to the FPGA Manager framework) FPGA images may have particulars that affect how they are programmed Image built partial or full reconfiguration How long to wait for the bridges to disable/enable traffic How long to wait for FPGA to go to operating mode after programming struct fpga_image_info added to API to contain these Struct can be populated from DT or from… somewhere else. API change is easy: Current upstream API contains a u32 flags Change to API is to take out the u32 flags and put a pointer to this struct instead.

Reference FPGA Manager in the kernel lives here: drivers/fpga include/linux/fpga documentation/fpga documentation/devicetree/bindings/fpga V21 repost of Device Tree Overlay support for FPGAs (look for Tull) https://lkml.org/lkml/2016/11/1 In particular, here’s the doc for FPGA Regions https://lkml.org/lkml/2016/11/1/383

Back Up

Backup

FPGA Manager API (with proposed changes) Register Low Level Drivers: int fpga_mgr_register(struct device *dev, const char *name, const struct fpga_manager_ops *mops, void *priv); void fpga_mgr_unregister(struct device *dev); Get/Put struct fpga_manager *of_fpga_mgr_get(struct device_node *node); void fpga_mgr_put(struct fpga_manager *mgr); (on list) struct fpga_manager *fpga_mgr_get(struct device *node); Program a FPGA int fpga_mgr_buf_load(struct fpga_manager *mgr, struct fpga_image_info *info, const char *buf, size_t count); int fpga_mgr_firmware_load(struct fpga_manager *mgr, struct fpga_image_info *info, const char *image_name);

The Linux Kernel FPGA Manager Framework