[PATCH linux 00/15] FSI device driver introduction
christopher.lee.bostic at gmail.com
christopher.lee.bostic at gmail.com
Thu Oct 6 07:54:13 AEDT 2016
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.
Patches 01-13 of 15 have been provided by Jeremy Kerr as an example of
how FSI function should be phased in. This includes the basic framework
to add FSI extensions to the Linux bus and device models. Patch 13
is a beginning definition of a GPIO controlled master controlled in
firmware. Patch 14 contains only my recommended changes to Jeremy's set.
Patch 15 adds function to set up read/write access to a given CFAM.
Note patch 05/15 and patch 13/15 have blank lines at EOF and so
git am will warn on application of these two. In order to make it
clear what changes Jeremy submitted and preserve his change history
I left them as is. As per my understanding we wanted to make it
clear what changes were Jeremy's versus mine.
This set provides the basic framework to add FSI extensions to the
Linux bus and device models. Master specific implementations are
defined to utilize the core FSI function.
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.
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.
* 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 (2):
drivers/fsi: Rename slave to cfam
drivers/fsi: Initialize CFAMs for read/write access
Jeremy Kerr (13):
fsi: Add empty fsi bus definitions
fsi: Add device & driver definitions
fsi: add driver to device matches
fsi: Add fsi master definition
fsi: Add fake master driver
fsi: enable debug
fsi: Add slave defintion
fsi: Add empty master scan
fsi: Add crc4 helpers
fsi: Implement slave initialisation
fsi: scan slaves & register devices
fsi: Add device read/write/peek functions
fsi: Add GPIO master driver
.../devicetree/bindings/fsi/fsi-master-gpio.txt | 8 +
drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/fsi/Kconfig | 29 ++
drivers/fsi/Makefile | 4 +
drivers/fsi/fsi-cfam.h | 72 ++++
drivers/fsi/fsi-core.c | 386 +++++++++++++++++++++
drivers/fsi/fsi-master-fake.c | 99 ++++++
drivers/fsi/fsi-master-gpio.c | 95 +++++
drivers/fsi/fsi-master.h | 42 +++
drivers/fsi/fsi-slave.h | 62 ++++
include/linux/fsi.h | 60 ++++
12 files changed, 860 insertions(+)
create mode 100644 Documentation/devicetree/bindings/fsi/fsi-master-gpio.txt
create mode 100644 drivers/fsi/Kconfig
create mode 100644 drivers/fsi/Makefile
create mode 100644 drivers/fsi/fsi-cfam.h
create mode 100644 drivers/fsi/fsi-core.c
create mode 100644 drivers/fsi/fsi-master-fake.c
create mode 100644 drivers/fsi/fsi-master-gpio.c
create mode 100644 drivers/fsi/fsi-master.h
create mode 100644 drivers/fsi/fsi-slave.h
create mode 100644 include/linux/fsi.h
--
1.8.2.2
More information about the openbmc
mailing list