Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut October 5,...

22
Using FPGA for driver testing Marek Vaˇ sut <[email protected]> October 5, 2015 Marek Vaˇ sut <[email protected]> Using FPGA for driver testing

Transcript of Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut October 5,...

Page 1: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Using FPGA for driver testing

Marek Vasut <[email protected]>

October 5, 2015

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 2: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Marek Vasut

I Software engineer at DENX S.E. since 2011I Embedded and Real-Time Systems Services, Linux kernel and

driver development, U-Boot development, consulting, training.

I Custodian at U-Boot bootloader

I Versatile Linux kernel hacker

I FPGA enthusiast

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 3: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Table of content

I Introduction

I Simple cases

I Complex cases

I Conclusion

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 4: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Motivation

Why this talk?

I Fuzz testing is successful in finding issues

I Kernel frameworks are easy to test via software

I Hardware drivers are harder to test via software

I Hardware itself is very hard to test via software

But there is another way . . .

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 5: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Fuzz testing

I Feed the tested component with almost correct inputs

I Observe how the tested component behaves

I Look for crashes, misbehavior

I Tools: Trinity, AFL . . .

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 6: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Fuzzing hardware

I Nicely applicable to bussesI SPI, I2C, . . . – easyI Bus is almost working :-)

I Nicely applicable to endpoint devicesI SD cards, PCIe cards, . . .I Device responds almost correctly :-)

But busses and devices are fast . . .

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 7: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Introducing the PLD

I PLD – Programmable Logic Device

I Chip with programmable logic elements on the inside

I Also often contains DSP, Memory blocks . . .

I Usually have a lot of configurable I/O pins

I Allows implementing complex logic in the chip on demand

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 8: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

FPGA

I Abbr. for Field-Programmable Gate Array

I Flexible type of contemporary PLDI Usually used for:

I Digital Signal Processing (DSP)I Data crunchingI Custom hardware interfacesI ASIC prototypingI . . .

I Common vendors – Xilinx, Altera, Lattice, Microsemi. . .

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 9: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Internal structure

W.T.Freemanhttp://www.vision.caltech.edu/CNS248/Fpga/fpga1a.gif

CC BY 2.5: http://creativecommons.org/licenses/by/2.5/

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 10: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

FPGA and testing

I Pass-through testing:

Bus interface FPGA Device

I FPGA implements logic which ”understands” the bus protocolI FPGA inserts errors into the bus communication

I Endpoint testing:

Bus interface FPGA

I FPGA implements logic which emulates the deviceI FPGA inserts errors into the device communication

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 11: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Fuzzing simple busses

I I2C, SPI, . . .

I Frequency is either low or configurable

I Number of bus wires is limited

I Bus protocol is simple

I Attaching FPGA is easy, use bus buffers

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 12: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

I2C pass-through testing

I I2C uses very simple protocols

I Device address followed by a few bytes

I FPGA scans the bus for device address

I FPGA scans the bus for particular register I/O

I Upon a device response, modification is applied

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 13: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

I2C device testing

I FPGA implements the model of the EEPROM

I FPGA listens on the bus for the address

I FPGA responds on all requests

I FPGA introduces random bit errors

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 14: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

SPI bus

I FPGA implements SPI slave, chipselect is the trigger

I Transfer can have arbitrary length

I Bus frequency even over 100MHz

I Special case is the DSPI/QSPI for SPI NORs

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 15: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Storage and FPGAs

In case we emulate storage devices, we need storage:

I FPGA has dedicated memory cells in the fabric

I FPGA supports fast external DRAM

I FPGA can interface slow permanent storage

Moving data:

I FPGA logic does direct access to storage (often RAM)

I FPGA interrupts a CPU, which does the transfer

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 16: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

CPUs and FPGAs

Modern FPGAs can contain a CPU or a dozen . . .

I SoC FPGA solutions – dedicated CPU cores in the packageI Softcores can be synthesised into the FPGA fabric

I Many softcores availableI J2 (see Jeff’s talk!), RISC-V, . . .

I A dedicated CPU can implement complex fuzzing logic

I Instruction timing matters

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 17: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Fuzzing SD cards

SD card is an excellent example where CPU is needed

I SD/MMC protocol is quite complex

I The protocol is stateful

I FPGA implements bus interface

I If a command happens on the bus, FPGA wakes CPU

I CPU handles the complex stateful protocol

I CPU sets up possible data transfer

I CPU instructs the FPGA to perform a response on the bus

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 18: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Emulated SD card

Emulated SD card has more uses than just fuzzing

I Implement configurations otherwise unobtainable in shop

I Practical example . . .

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 19: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Ethernet

Speaking of IoT . . .

I Fuzzing ethernet is also possible with FPGAs

I 10BaseT is very easy even without PHY

I 100BaseT needs PHY

I Anything faster needs proper PCB design

I Example – Stratix V can do 4x100G ethernet

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 20: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

Fuzzing ethernet

I The ethernet traffic passing through FPGA is a stream

I Stream is processed in real-time in the FPGA fabric

I Modifications are done to the stream in real-time

I Buffering must not happen at high link speeds

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 21: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

PCI express

I FPGAs can contain dedicated SerDes interfaces

I Some FPGAs contain dedicated PCIe EP/RC block

I Routing PCIe tracks requires proper PCB design

I PCIe is quite similar to ethernet

I PCIe is packet-based network architecture

Marek Vasut <[email protected]> Using FPGA for driver testing

Page 22: Using FPGA for driver testing - eLinux.orgUsing FPGA for driver testing Marek Va sut  October 5, 2015 Marek Va sut  Using FPGA for driver

The End

Thank you for your attention!

Contact: Marek Vasut <[email protected]>

Marek Vasut <[email protected]> Using FPGA for driver testing