lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1458554722-25263-1-git-send-email-u.kleine-koenig@pengutronix.de>
Date:	Mon, 21 Mar 2016 11:05:18 +0100
From:	Uwe Kleine-König 
	<u.kleine-koenig@...gutronix.de>
To:	linux-kernel@...r.kernel.org,
	Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc:	kernel@...gutronix.de
Subject: [PATCH RFC v2 0/4] new bus type SIOX

Hello,

this is a patch set for a new bus type called SIOX created by the German
company Eckelmann. This is a bus with four data lines. The signals DIN (from
devices to master) and DOUT (from master to devices) are daisy chained through
all devices. DLD and DCLK are shared. A pulse on DCLK pushs bits on the DIN and
DOUT chains in the respective direction. A pulse on DLD makes the devices
sample their input and output stated from/to DIN and DOUT.

A master is the bus controller (i.e. it drives DOUT, DCLK and DLD). A
device is a consumer and provides DIN to the master.

The topology looks as follows:

      ,------->--DCLK-->---------------+----------------------.
      ^                                v                      v
 ,--------.                ,----------------------.       ,------
 |        |                |   ,--------------.   |       |
 |        |--->--DOUT-->---|->-|shift register|->-|--->---|
 |        |                |   `--------------'   |       |
 | master |                |        device        |       |  device
 |        |                |   ,--------------.   |       |
 |        |---<--DIN---<---|-<-|shift register|-<-|---<---|
 |        |                |   `--------------'   |       |
 `--------'                `----------------------'       `------
      v                                ^                      ^
      `----------DLD-------------------+----------------------'

So there are two chains of shift registers, one for letting the master
write to the devices, and the other to let the master read from the
devices. DCLK is the clock to shift both chains by a single bit. An edge
on DLD is used to make the devices load the inputs and sample the
outputs.

There are still some open issues, at least:

 - no device tree binding doc for bus master driver
   I will clean this up eventually when (and if) patch 1 gets in.

 - the devices should be polled each 25 ms, otherwise a per-device
   watchdog resets the device. I'm currently using a workqueue for that,
   and on a loaded machine sometimes the watchdog triggers. So maybe I
   need a different approach here? But I didn't debug that yet, so this
   is just FYI. This can be resolved later.

Since (implicit) v1 I cleaned up the code a bit, the reference counting
for kobjects should be ok now, I'm not confident that I got the locking
right though: I have a single mutex per bus master that also protects
the bus topology, but when holding the lock while removing a device
(which is triggered via sysfs) I get a lockdep splat. I "fixed" that by
releasing the mutex before calling device_unregister for the device.

IMHO the only interesting patch for now is the first one, the others
strictly depend on the first. I only included them here to demonstrate
how I expect the first patch to be used and didn't add the respective
Cc:s for them.

Thanks for your time and interest,
Uwe

Uwe Kleine-König (4):
  siox: new driver framework for eckelmann SIOX
  siox: add gpio bus driver
  gpio: new driver to work with a 8x12 siox
  siox: add support for tracing

 drivers/Kconfig              |   2 +
 drivers/Makefile             |   1 +
 drivers/gpio/Kconfig         |   5 +
 drivers/gpio/Makefile        |   1 +
 drivers/gpio/gpio-siox.c     | 290 ++++++++++++++++++
 drivers/siox/Kconfig         |   9 +
 drivers/siox/Makefile        |   2 +
 drivers/siox/siox-bus-gpio.c | 175 +++++++++++
 drivers/siox/siox-core.c     | 686 +++++++++++++++++++++++++++++++++++++++++++
 drivers/siox/siox.h          |  52 ++++
 include/linux/siox.h         |  61 ++++
 include/trace/events/siox.h  |  60 ++++
 12 files changed, 1344 insertions(+)
 create mode 100644 drivers/gpio/gpio-siox.c
 create mode 100644 drivers/siox/Kconfig
 create mode 100644 drivers/siox/Makefile
 create mode 100644 drivers/siox/siox-bus-gpio.c
 create mode 100644 drivers/siox/siox-core.c
 create mode 100644 drivers/siox/siox.h
 create mode 100644 include/linux/siox.h
 create mode 100644 include/trace/events/siox.h

-- 
2.7.0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ