linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/8] Support for FMC carriers and mezzanines
@ 2013-06-12  7:13 Alessandro Rubini
  2013-06-12  7:13 ` [PATCH 1/8] FMC: create drivers/fmc and toplevel Kconfig question Alessandro Rubini
                   ` (7 more replies)
  0 siblings, 8 replies; 28+ messages in thread
From: Alessandro Rubini @ 2013-06-12  7:13 UTC (permalink / raw)
  To: linux-kernel
  Cc: Juan David Gonzalez Cobas, Emilio G. Cota,
	Samuel Iglesias Gonsalvez, gregkh, Rob Landley, linux-doc

This patch-set includes the Linux bus abstraction for FMC (ANSI/VITA 57).

I posted it on Feb 21 2013 as an RFC, and I only got an Acked-by
about documentation by Rob Landley; I include that Acked-by in this patch
set, even if there are some minor changes in the docs -- typos and
new capabilities for the fmc-fakedev carrier module.

I fixed the device release bug noted by Greg-KH (yes, I deserved being
ridiculed for that). There are no other serious changes, and we are now
running this in production as a backport to 2.6.24-rt.

The whole patch-set is sent to lkml, Greg K H (for drivers/), Rob Landley
and the linux-doc list (both for Documentation/).

The code I'm submitting is currently maintained outside of the kernel
proper. See http://www.ohwr.org/projects/fmc-bus/ . The public
repository is at git://ohwr.org/fmc-projects/fmc-bus.git and the
current manual is at
http://www.ohwr.org/attachments/download/2124/fmc-bus-2013-05.1-release.pdf

The following text is an almost verbatim copy of parts of our
documentation, as included in the fmc-bus package.



FMC (FPGA Mezzanine Card) is the standard we use for our I/O devices,
in the context of White Rabbit and related hardware.

In our I/O environments we need to write drivers for each mezzanine
card, and such drivers must work independent of the carrier being used.
To achieve this, we abstract the FMC interface.

We have a carrier for PCI-E called SPEC and one for VME called SVEC,
but more are planned.  Also, we support stand-alone devices (usually
plugged on a SPEC card), controlled through Etherbone, developed by GSI.

FMC is a standard developed by the VME consortium called VITA (VMEbus
International Trade Association and ratified by ANSI, the American
National Standard Institute.  The official documentation is called
"ANSI-VITA 57.1".

The FMC card is an almost square PCB, around 70x75 millimeters, that
is called mezzanine in code and documentation under drivers/fmc.  It
usually lives plugged into into another PCB for power supply and
control; such bigger circuit board is called carrier from now on, and
a single carrier may host more than one mezzanine.

In the typical application the mezzanine is mostly analog while the
carrier is mostly digital, and hosts an FPGA that must be programmed to
match the specific mezzanine and the desired application. Thus, you may
need to load different FPGA images to drive different instances of the
same mezzanine.

FMC, as such, is not a bus in the usual meaning of the term, because
most carriers have only one connector, and carriers with several
connectors have completely separate electrical connections to them.
This package, however, implements a bus as a software abstraction.


SDB (Self Describing Bus) is a set of data structures that we use for
enumerating the internal structure of an FPGA image. We also use it as
a filesystem inside the FMC EEPROM.

SDB is not mandatory for use of this FMC kernel bus, but if you have SDB
this package can make good use of it.  SDB itself is developed in the
fpga-config-space OHWR project. The link to the repository is
`git://ohwr.org/hdl-core-lib/fpga-config-space.git' and what is used in
this project lives in the sdbfs subdirectory in there.


Alessandro Rubini (8):
  FMC: create drivers/fmc and toplevel Kconfig question
  FMC: add needed headers
  FMC: add core bus driver
  FMC: add documentation for the core
  FMC: add a software carrier driver
  FMC: add a software mezzanine driver
  FMC: add a driver to write mezzanine EEPROM
  FMC: add a char-device mezzanine driver

 Documentation/00-INDEX                 |    2 +
 Documentation/fmc/00-INDEX             |   38 ++++
 Documentation/fmc/API.txt              |   47 +++++
 Documentation/fmc/FMC-and-SDB.txt      |   88 ++++++++
 Documentation/fmc/carrier.txt          |  311 ++++++++++++++++++++++++++++
 Documentation/fmc/fmc-chardev.txt      |   64 ++++++
 Documentation/fmc/fmc-fakedev.txt      |   36 ++++
 Documentation/fmc/fmc-trivial.txt      |   17 ++
 Documentation/fmc/fmc-write-eeprom.txt |  125 ++++++++++++
 Documentation/fmc/identifiers.txt      |  168 +++++++++++++++
 Documentation/fmc/mezzanine.txt        |  123 +++++++++++
 Documentation/fmc/parameters.txt       |   56 +++++
 MAINTAINERS                            |    9 +
 drivers/Kconfig                        |    2 +
 drivers/Makefile                       |    1 +
 drivers/fmc/Kconfig                    |   51 +++++
 drivers/fmc/Makefile                   |   13 ++
 drivers/fmc/fmc-chardev.c              |  197 ++++++++++++++++++
 drivers/fmc/fmc-core.c                 |  296 +++++++++++++++++++++++++++
 drivers/fmc/fmc-dump.c                 |  100 +++++++++
 drivers/fmc/fmc-fakedev.c              |  349 ++++++++++++++++++++++++++++++++
 drivers/fmc/fmc-match.c                |  114 +++++++++++
 drivers/fmc/fmc-sdb.c                  |  265 ++++++++++++++++++++++++
 drivers/fmc/fmc-trivial.c              |  101 +++++++++
 drivers/fmc/fmc-write-eeprom.c         |  176 ++++++++++++++++
 drivers/fmc/fru-parse.c                |   82 ++++++++
 include/linux/fmc-sdb.h                |   36 ++++
 include/linux/fmc.h                    |  237 ++++++++++++++++++++++
 include/linux/ipmi-fru.h               |  135 ++++++++++++
 include/linux/sdb.h                    |  159 +++++++++++++++
 30 files changed, 3398 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/fmc/00-INDEX
 create mode 100644 Documentation/fmc/API.txt
 create mode 100644 Documentation/fmc/FMC-and-SDB.txt
 create mode 100644 Documentation/fmc/carrier.txt
 create mode 100644 Documentation/fmc/fmc-chardev.txt
 create mode 100644 Documentation/fmc/fmc-fakedev.txt
 create mode 100644 Documentation/fmc/fmc-trivial.txt
 create mode 100644 Documentation/fmc/fmc-write-eeprom.txt
 create mode 100644 Documentation/fmc/identifiers.txt
 create mode 100644 Documentation/fmc/mezzanine.txt
 create mode 100644 Documentation/fmc/parameters.txt
 create mode 100644 drivers/fmc/Kconfig
 create mode 100644 drivers/fmc/Makefile
 create mode 100644 drivers/fmc/fmc-chardev.c
 create mode 100644 drivers/fmc/fmc-core.c
 create mode 100644 drivers/fmc/fmc-dump.c
 create mode 100644 drivers/fmc/fmc-fakedev.c
 create mode 100644 drivers/fmc/fmc-match.c
 create mode 100644 drivers/fmc/fmc-sdb.c
 create mode 100644 drivers/fmc/fmc-trivial.c
 create mode 100644 drivers/fmc/fmc-write-eeprom.c
 create mode 100644 drivers/fmc/fru-parse.c
 create mode 100644 include/linux/fmc-sdb.h
 create mode 100644 include/linux/fmc.h
 create mode 100644 include/linux/ipmi-fru.h
 create mode 100644 include/linux/sdb.h

-- 
1.7.7.2

^ permalink raw reply	[flat|nested] 28+ messages in thread
* [PATCH RFC 0/8] drivers/fmc: bus support for ANSI-VITA 57.1
@ 2013-02-21 18:13 Alessandro Rubini
  2013-02-21 18:14 ` [PATCH 4/8] FMC: add documentation for the core Alessandro Rubini
  0 siblings, 1 reply; 28+ messages in thread
From: Alessandro Rubini @ 2013-02-21 18:13 UTC (permalink / raw)
  To: linux-kernel, greg
  Cc: Juan David Gonzalez Cobas, Emilio G. Cota,
	Samuel Iglesias Gonsalvez, Rob Landley, linux-doc

This is an RFC for upstreaming the Linux bus abstraction for FMC.  The
following text is a slightly modified extract from the documentation,
which is included in the fmc-bus package.  The code I'm
submitting is currently maintained outside of the kernel proper. See
http://www.ohwr.org/projects/fmc-bus/ . The public repository is at
git://ohwr.org/fmc-projects/fmc-bus.git and the current manual is at
http://www.ohwr.org/attachments/download/1845/fmc-bus-2013-01-release.pdf

The whole patch-set is sent to lkml, Greg K H (for drivers/), Rob Landley
and the linux-doc list (both for Documentation/).


FMC is a standard developed by the VME consortium called VITA (VMEbus
International Trade Association) and ratified by ANSI, the American
National Standard Institute.  The official documentation is called
"ANSI-VITA 57.1". The wikipedia article is
http://en.wikipedia.org/wiki/FMC_%E2%80%93_FPGA_Mezzanine_Card

FMC (FPGA Mezzanine Card) is what we use for our I/O devices,
in the context of White Rabbit and related hardware. White Rabbit
is a multi-lab synchronization project; bot software and hardware
for WR is hosted at www.ohwr.org .

In our I/O environments we need to write drivers for each mezzanine
card, and such drivers must work regardless of the carrier being used.
To achieve this, we abstract the FMC interface.

The FMC card is an almost square PCB, around 70x75 millimeters, that
is called mezzanine in code and documentation under drivers/fmc.  It
usually lives plugged into another PCB for power supply and
control; such bigger circuit board is called carrier from now on, and
a single carrier may host more than one mezzanine.

We have a carrier for PCI-E called SPEC and one for VME called SVEC,
(http://www.ohwr.org/projects/spec/wiki and
http://www.ohwr.org/projects/svec/wiki) but more are planned.  Also,
we support stand-alone devices (usually plugged on a SPEC card),
controlled through Etherbone, which in turn is developed by GSI.de .
This submission does not include drivers for specific cards like the
SPEC or SVEC, but has software-only carriers and drivers.  Nothing in
the submission in specific to CERN: the code is designed to match FMC
features, not our own specific needs.

In the typical application the mezzanine is mostly analog while the
carrier is mostly digital, and hosts an FPGA that must be configured to
match the specific mezzanine and the desired application. Thus, you may
need to load different FPGA images to drive different instances of the
same mezzanine.

FMC, as such, is not a bus in the usual meaning of the term, because
most carriers have only one connector, and carriers with several
connectors have completely separate electrical connections to them.
This package, however, implements a bus as a software abstraction.


SDB (Self Describing Bus) is a set of data structures that we use for
enumerating the internal structure of an FPGA image. We also use it as
a filesystem inside the FMC EEPROM, but this submission only uses
it to enumerate cores inside and FPGA design.

SDB is not mandatory for use of this FMC kernel bus, but if you have SDB
this package can make good use of it.  SDB itself is developed in the
fpga-config-space OHWR project. The link to the repository is
`git://ohwr.org/hdl-core-lib/fpga-config-space.git' and what is used in
this project lives in the sdbfs subdirectory in there.


Alessandro Rubini (8):
  FMC: create drivers/fmc and toplevel Kconfig question
  FMC: add needed headers
  FMC: add core bus driver
  FMC: add documentation for the core
  FMC: add a software carrier driver
  FMC: add a software mezzanine driver
  FMC: add a driver to write mezzanine EEPROM
  FMC: add a char-device mezzanine driver

 Documentation/00-INDEX                 |    2 +
 Documentation/fmc/00-INDEX             |   38 ++++
 Documentation/fmc/API.txt              |   44 +++++
 Documentation/fmc/FMC-and-SDB.txt      |   89 +++++++++
 Documentation/fmc/carrier.txt          |  311 ++++++++++++++++++++++++++++++++
 Documentation/fmc/fmc-chardev.txt      |   64 +++++++
 Documentation/fmc/fmc-fakedev.txt      |   30 +++
 Documentation/fmc/fmc-trivial.txt      |   17 ++
 Documentation/fmc/fmc-write-eeprom.txt |  112 ++++++++++++
 Documentation/fmc/identifiers.txt      |  169 +++++++++++++++++
 Documentation/fmc/mezzanine.txt        |  123 +++++++++++++
 Documentation/fmc/parameters.txt       |   56 ++++++
 MAINTAINERS                            |    9 +
 drivers/Kconfig                        |    2 +
 drivers/Makefile                       |    1 +
 drivers/fmc/Kconfig                    |   51 ++++++
 drivers/fmc/Makefile                   |   13 ++
 drivers/fmc/fmc-chardev.c              |  197 ++++++++++++++++++++
 drivers/fmc/fmc-core.c                 |  255 ++++++++++++++++++++++++++
 drivers/fmc/fmc-dump.c                 |  100 ++++++++++
 drivers/fmc/fmc-fakedev.c              |  308 +++++++++++++++++++++++++++++++
 drivers/fmc/fmc-match.c                |  108 +++++++++++
 drivers/fmc/fmc-sdb.c                  |  258 ++++++++++++++++++++++++++
 drivers/fmc/fmc-trivial.c              |  101 +++++++++++
 drivers/fmc/fmc-write-eeprom.c         |  170 +++++++++++++++++
 drivers/fmc/fru-parse.c                |   82 +++++++++
 include/linux/fmc-sdb.h                |   36 ++++
 include/linux/fmc.h                    |  237 ++++++++++++++++++++++++
 include/linux/ipmi-fru.h               |  135 ++++++++++++++
 include/linux/sdb.h                    |  130 +++++++++++++
 30 files changed, 3248 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/fmc/00-INDEX
 create mode 100644 Documentation/fmc/API.txt
 create mode 100644 Documentation/fmc/FMC-and-SDB.txt
 create mode 100644 Documentation/fmc/carrier.txt
 create mode 100644 Documentation/fmc/fmc-chardev.txt
 create mode 100644 Documentation/fmc/fmc-fakedev.txt
 create mode 100644 Documentation/fmc/fmc-trivial.txt
 create mode 100644 Documentation/fmc/fmc-write-eeprom.txt
 create mode 100644 Documentation/fmc/identifiers.txt
 create mode 100644 Documentation/fmc/mezzanine.txt
 create mode 100644 Documentation/fmc/parameters.txt
 create mode 100644 drivers/fmc/Kconfig
 create mode 100644 drivers/fmc/Makefile
 create mode 100644 drivers/fmc/fmc-chardev.c
 create mode 100644 drivers/fmc/fmc-core.c
 create mode 100644 drivers/fmc/fmc-dump.c
 create mode 100644 drivers/fmc/fmc-fakedev.c
 create mode 100644 drivers/fmc/fmc-match.c
 create mode 100644 drivers/fmc/fmc-sdb.c
 create mode 100644 drivers/fmc/fmc-trivial.c
 create mode 100644 drivers/fmc/fmc-write-eeprom.c
 create mode 100644 drivers/fmc/fru-parse.c
 create mode 100644 include/linux/fmc-sdb.h
 create mode 100644 include/linux/fmc.h
 create mode 100644 include/linux/ipmi-fru.h
 create mode 100644 include/linux/sdb.h

-- 
1.7.7.2

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2013-06-19 11:09 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-12  7:13 [PATCH 0/8] Support for FMC carriers and mezzanines Alessandro Rubini
2013-06-12  7:13 ` [PATCH 1/8] FMC: create drivers/fmc and toplevel Kconfig question Alessandro Rubini
2013-06-17 23:17   ` Greg KH
2013-06-17 23:24   ` Alessandro Rubini
2013-06-17 23:35     ` Greg KH
2013-06-12  7:13 ` [PATCH 2/8] FMC: add needed headers Alessandro Rubini
2013-06-17 23:21   ` Greg KH
2013-06-17 23:29   ` Alessandro Rubini
2013-06-17 23:35     ` Greg KH
2013-06-19 10:49   ` Arnd Bergmann
2013-06-19 11:08   ` Alessandro Rubini
2013-06-12  7:13 ` [PATCH 3/8] FMC: add core bus driver Alessandro Rubini
2013-06-17 23:15   ` Greg KH
2013-06-17 23:16   ` Greg KH
2013-06-17 23:38   ` Alessandro Rubini
2013-06-18  8:36     ` Juan David Gonzalez Cobas
     [not found]     ` <CADDK0KdrVgmXN-TZw8E43JRNk5Wb_cfM6pUWaSxbJ49GU72cTg@mail.gmail.com>
2013-06-18 17:40       ` Greg KH
2013-06-18 19:52       ` Alessandro Rubini
2013-06-12  7:13 ` [PATCH 4/8] FMC: add documentation for the core Alessandro Rubini
2013-06-12  7:14 ` [PATCH 5/8] FMC: add a software carrier driver Alessandro Rubini
2013-06-17 23:19   ` Greg KH
2013-06-12  7:14 ` [PATCH 6/8] FMC: add a software mezzanine driver Alessandro Rubini
2013-06-17 23:20   ` Greg KH
2013-06-12  7:14 ` [PATCH 7/8] FMC: add a driver to write mezzanine EEPROM Alessandro Rubini
2013-06-12  7:14 ` [PATCH 8/8] FMC: add a char-device mezzanine driver Alessandro Rubini
  -- strict thread matches above, loose matches on Subject: below --
2013-02-21 18:13 [PATCH RFC 0/8] drivers/fmc: bus support for ANSI-VITA 57.1 Alessandro Rubini
2013-02-21 18:14 ` [PATCH 4/8] FMC: add documentation for the core Alessandro Rubini
2013-02-23 18:21   ` Rob Landley
2013-02-23 22:56     ` Alessandro Rubini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).