[PATCH linux v5 0/7] Introducing the FSI device driver
joel at jms.id.au
Fri Sep 2 15:05:44 AEST 2016
On Thu, Aug 25, 2016 at 5:24 AM, <christopher.lee.bostic at gmail.com> wrote:
> From: Chris Bostic <cbostic at us.ibm.com>
> Introduction of the IBM 'Flexible Support Interface' (FSI) bus device
> driver. FSI is a high fan out serial bus consisting of a clock and a serial
> data line capable of running at speeds up to 166 MHz.
Nice work on the cover letter. It's a good introduction.
I haven't had a chance to take a close look a the patches yet. They
are on top of the stack for Monday.
I was wondering if you have had a look at Jeremy's implementation yet?
If so, are there any ideas you have incorporated into your series?
> This set provides the core functionality of the FSI device driver. Core
> function is defined as:
> * FSI client registration and notification of bus state changes
> * Device scanning and hotplug reporting to clients
> * Interrupt detection and routing
> * Bus error detection and cleanup
> This patch set does not include extended FSI function such as:
> * Hub master support
> * Cascaded master support
> * Application layer hot plug notification
> * Application layer FSI bus status interface
> * Host configuration allowing for various hardware / firmware
> emulation implementations of the FSI master.
> * Soft FSI support. Soft FSI is a device driver method of emulating
> FSI master hardware by 'bit banging' standard I/O lines.
> Common FSI terminology:
> * Master
> Controller of the FSI bus. Only the master is allowed to control the
> clock line and is the initiator of all transactions on a bus.
> * Slave
> The receiver or target of a master initiated transaction. The slave
> cannot initiate communications on a bus and must respond to any
> master requests for data.
> * CFAM
> Stands for Common Field replaceable unit Access Macro. A CFAM is an
> ASIC residing in any device requiring FSI communications. CFAMs
> consist of an array of hardware 'engines' used for various purposes.
> I2C masters, UARTs, General Purpose IO hardware are common types of
> these engines.
> * Configuration Space / Table
> A table contained at the beginning of each CFAM address space.
> This table lists information such as the CFAM's ID, which engine types
> and versions it has available, as well as its addressing range.
> * Link
> The combination of a serial clock and data line constituting one
> FSI communications element. For each link there is a master on one
> end and a CFAM/slave on the other end.
> * Engine
> A self contained hardware function found within a CFAM. Examples
> include I2C masters, UARTs, GPIOs, etc...
> * Client
> A device driver requiring access to its hardware via an FSI bus.
> For example an I2C client would be a device driver requiring
> access to an I2C master engine on a remote CFAM accessible via
> an FSI link. Clients register with the FSI bus and will receive
> notifications of bus state changes as well as hot plug events related
> to engines of interest to them.
> * Build Up
> The process scanning a bus and creating a data structure representation
> of all devices discovered in a tree. A tree in this context is a
> series of links and devices connected to those links.
> * Hub / Hub master
> Provides extension to the existing primary FSI master. Allows for
> several chained FSI links in series to a target device thus increasing
> potential fan out.
> * Cascaded master
> A subset of functionality of the hub master. Cascaded masters can
> access only a limited address range compared to hub masters. This was
> the first generation implementation, essentially, of hub type function.
> Chris Bostic (6):
> drivers/fsi: Add FSI Master Functionality and Initialization
> drivers/fsi: Add FSI master target device scanning function
> drivers/fsi: Add initial FSI link buildup
> drivers/fsi: Add FSI bus type and hook into LDM
> drivers/fsi: Add FSI Bus Support for Clients
> drivers/fsi: Add CFAM scanning function
> Christopher Bostic (1):
> drivers/fsi: Initial stubs for FSI device driver.
> drivers/Kconfig | 2 +
> drivers/Makefile | 1 +
> drivers/fsi/Kconfig | 7 +
> drivers/fsi/Makefile | 5 +
> drivers/fsi/build.c | 876 ++++++++++++++++++++++++++++++++++++++++++++++
> drivers/fsi/fsi.h | 134 +++++++
> drivers/fsi/fsi_private.h | 123 +++++++
> drivers/fsi/fsicfam.h | 161 +++++++++
> drivers/fsi/fsiinit.c | 92 +++++
> drivers/fsi/fsiinit.h | 43 +++
> drivers/fsi/fsilink.h | 99 ++++++
> drivers/fsi/fsimaster.c | 619 ++++++++++++++++++++++++++++++++
> drivers/fsi/fsimaster.h | 682 ++++++++++++++++++++++++++++++++++++
> drivers/fsi/fsislave.h | 415 ++++++++++++++++++++++
> drivers/fsi/ldm.c | 347 ++++++++++++++++++
> drivers/fsi/readwrite.c | 123 +++++++
> 16 files changed, 3729 insertions(+)
> create mode 100644 drivers/fsi/Kconfig
> create mode 100644 drivers/fsi/Makefile
> create mode 100644 drivers/fsi/build.c
> create mode 100644 drivers/fsi/fsi.h
> create mode 100644 drivers/fsi/fsi_private.h
> create mode 100644 drivers/fsi/fsicfam.h
> create mode 100644 drivers/fsi/fsiinit.c
> create mode 100644 drivers/fsi/fsiinit.h
> create mode 100644 drivers/fsi/fsilink.h
> create mode 100644 drivers/fsi/fsimaster.c
> create mode 100644 drivers/fsi/fsimaster.h
> create mode 100644 drivers/fsi/fsislave.h
> create mode 100644 drivers/fsi/ldm.c
> create mode 100644 drivers/fsi/readwrite.c
More information about the openbmc