GitHub/LineageOS/android_kernel_motorola_exynos9610.git
9 years agogreybus: arche-platform: Rename db3-platform to arche-platform
Vaibhav Hiremath [Wed, 16 Dec 2015 10:59:18 +0000 (16:29 +0530)]
greybus: arche-platform: Rename db3-platform to arche-platform

With multiple platforms getting rolled into ara,
db3 name is confusing. And this driver is applicable
to all arche platforms, so make sense to rename it to
arche-platform.c. Also rename all internal functions
accordingly.

Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: db3(arche)-platform: Remove all APB control code
Vaibhav Hiremath [Wed, 16 Dec 2015 10:59:17 +0000 (16:29 +0530)]
greybus: db3(arche)-platform: Remove all APB control code

Current db3(arche)-platform driver was only handling APB control signals,
which is where it all started. But now with completion of DB3/EVT1 bringup
we know that platform driver is more than APB control.

We have to bring SVC up before APB, as SVC supposed to enable
clock to APB's. Note that, in EVT1, AP will have direct control over
APB's clock.
Then we have dependency between APB and USB HUB, where, APB should be
brought up before USB HUB (note that this needs to rootcaused).

This patch cleanup the db3(arche)-platform driver to remove all APB control
code. The idea here is create another driver for APB control
(arche-apb-ctrl.c), which will deal with APB.
And this driver will have generic/common platform specific support,
currently manages SVC resources.

This patch also takes in all the changes from factory branch, discovered
during bringup.

Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: firmware and svc: detect the difference between ES2 and ES3 chips
Eli Sennesh [Tue, 22 Dec 2015 22:26:57 +0000 (17:26 -0500)]
greybus: firmware and svc: detect the difference between ES2 and ES3 chips

The Greybus SVC code needs to read and clear the module boot status upon
hotplug; this requires reading two different attributes depending on whether
we're running on ES2 or ES3.  On Marti Bolivar's (mbolivar@leaflabs.com)
advice, we detect ES2 using the unique ES2_DDBL1_MFR_ID and ES2_DDBL1_PROD_ID
for ES2 hardware, and treat all other chips as ES3 appropriately.  This patch
detects the difference and adds the appropriate definitions for ES3 hardware.

Signed-off-by: Eli Sennesh <esennesh@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: Expose DDBL1 manufacturing and production id in sysfs
Viresh Kumar [Tue, 22 Dec 2015 16:34:34 +0000 (22:04 +0530)]
greybus: interface: Expose DDBL1 manufacturing and production id in sysfs

These ids are already fetched from the SVC, but were never exposed to
sysfs. Userspace may be interested in using these values and hence these
must be exposed to it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: Prefix DDBL1 attributes with ddbl1_ instead of unipro_
Viresh Kumar [Tue, 22 Dec 2015 16:34:33 +0000 (22:04 +0530)]
greybus: interface: Prefix DDBL1 attributes with ddbl1_ instead of unipro_

The Device descriptor block Level 1 (DDBL1) attributes are specified by
the MIPI standard and prefixing them with 'unipro_' isn't the best thing
to do. They should be prefixed with DDBL1 instead.

To make it more readable/clear:
- rename macros and variable by prefixing them with ddbl1_.
- write full names for mfg and prod ids as manufacturer and product ids.
- replace mfg (manufacturing) with mfr (manufacturer)

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: clean up csi-config request
Johan Hovold [Tue, 22 Dec 2015 16:55:53 +0000 (17:55 +0100)]
greybus: es2: clean up csi-config request

Use __packed and __u8 for csi-config request that is going out on the
wire.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: drop copy-pasted function header
Johan Hovold [Tue, 22 Dec 2015 16:55:52 +0000 (17:55 +0100)]
greybus: svc: drop copy-pasted function header

Drop function header that was copied but never updated or removed when
adding gb_svc_link_config.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: Prefix hexadecimal values with '0x'
Viresh Kumar [Fri, 18 Dec 2015 09:34:27 +0000 (15:04 +0530)]
greybus: interface: Prefix hexadecimal values with '0x'

In order to clearly specify the base of values printed using sysfs
files, prefix hexadecimal values with '0x'. Also force the minimum width
(to be printed) for hexadecimal values to their sizes.

To make it more readable make the second argument to gb_interface_attr()
a proper string.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: Don't use stack memory as USB request data
Laurent Pinchart [Tue, 22 Dec 2015 01:00:37 +0000 (03:00 +0200)]
greybus: es2: Don't use stack memory as USB request data

USB request data must be DMAble memory, allocate it with kzalloc()
instead of declaring it as a local variable.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: Fix endian conversion issues
Laurent Pinchart [Tue, 22 Dec 2015 01:00:36 +0000 (03:00 +0200)]
greybus: es2: Fix endian conversion issues

Convert all USB request fields between CPU and protocol endianness.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: camera: Fix remaining endian conversion issues
Laurent Pinchart [Tue, 22 Dec 2015 01:00:35 +0000 (03:00 +0200)]
greybus: camera: Fix remaining endian conversion issues

Convert all Greybus operation fields between CPU and protocol
endianness.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: camera: Set link power mode to HS-G2 with 2 lanes
Laurent Pinchart [Sat, 19 Dec 2015 06:38:56 +0000 (08:38 +0200)]
greybus: camera: Set link power mode to HS-G2 with 2 lanes

HS-G1 isn't enough for all camera modules. The gear will need to be
computed dynamically, but for now hardcode it to 2 with 2 lanes.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: camera: Configure the bridge CSI transmitter
Laurent Pinchart [Fri, 18 Dec 2015 19:23:25 +0000 (21:23 +0200)]
greybus: camera: Configure the bridge CSI transmitter

Start or stop the CSI transmitter when configuring and unconfiguring the
streams respectively. The CSI configuration parameters are currently
hardcoded.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: Add support for CSI transmitter configuration
Laurent Pinchart [Fri, 18 Dec 2015 19:23:24 +0000 (21:23 +0200)]
greybus: es2: Add support for CSI transmitter configuration

Export a function from the es2 driver to configure the CSI transmitter
through the corresponding USB vendor control request.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: camera: Configure link speed for the data connection
Laurent Pinchart [Fri, 18 Dec 2015 19:23:23 +0000 (21:23 +0200)]
greybus: camera: Configure link speed for the data connection

Hardcode the speed to HS-G1 for now.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: Add support for the link config operation
Laurent Pinchart [Fri, 18 Dec 2015 19:23:22 +0000 (21:23 +0200)]
greybus: svc: Add support for the link config operation

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: camera: Fix endian conversion issues
Laurent Pinchart [Fri, 18 Dec 2015 19:23:21 +0000 (21:23 +0200)]
greybus: camera: Fix endian conversion issues

Convert all Greybus operation fields between CPU and protocol
endianness.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reported-by: Rui Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: tools: don't always build them.
Greg Kroah-Hartman [Fri, 18 Dec 2015 06:32:03 +0000 (22:32 -0800)]
greybus: tools: don't always build them.

This breaks the kernel-only build as it can't find any userspace headers
with the cross-compiler, so don't build the tools by "default" unless
you ask for them.

Reported-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback_test: null terminate the dict structure
Greg Kroah-Hartman [Tue, 15 Dec 2015 21:57:22 +0000 (13:57 -0800)]
greybus: loopback_test: null terminate the dict structure

This lets us test for any number of entries, no need to do an
ARRAY_SIZE-type comparison.  This fixes a build warning of comparing
signed/unsigned values.)

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback_test: fix warning about signed/unsigned comparison
Greg Kroah-Hartman [Tue, 15 Dec 2015 21:55:05 +0000 (13:55 -0800)]
greybus: loopback_test: fix warning about signed/unsigned comparison

We read an int, don't treat it as a unsigned value, especially when
comparing it to a signed value.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: tools: Add tools directory to greybus repo and add loopback
Greg Kroah-Hartman [Tue, 15 Dec 2015 20:46:22 +0000 (12:46 -0800)]
greybus: tools: Add tools directory to greybus repo and add loopback

Move the loopback test to the greybus main repo, as we will be adding
more tests over time and it doesn't need to be burried in the gbsim
repo.

This moves the latest version from gbsim to this repo and fixes up the
Makefile to be a bit more "smart" when building the code.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: camera: fix data types of operations
Rui Miguel Silva [Thu, 17 Dec 2015 19:56:23 +0000 (19:56 +0000)]
greybus: camera: fix data types of operations

In some operations definitions it was introduce some new fields with
the wrong data types, u8, instead of __u8. And because of this gbsim
build was broken.

Fixes: 3a1d7aa15bf6 ("greybus: Add camera protocol definition")

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: fix and cleanup spi devices handling
Rui Miguel Silva [Tue, 15 Dec 2015 19:09:57 +0000 (19:09 +0000)]
greybus: spi: fix and cleanup spi devices handling

Cleanup and remove the spi_devices from the greybus spi handling as they
are not needed and they were completely misused.

With this the gb_spi_init does not make sense to exist anymore, so just
remove it and handle the master config directly from connection init.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: unregister master on device add fail
Rui Miguel Silva [Tue, 15 Dec 2015 19:09:56 +0000 (19:09 +0000)]
greybus: spi: unregister master on device add fail

When registering devices if any of it fail, just cleanup and release spi
master.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: validate spi master register
Rui Miguel Silva [Tue, 15 Dec 2015 19:09:55 +0000 (19:09 +0000)]
greybus: spi: validate spi master register

Check for error in registering spi master, even though the current code
will fail a little more ahead when trying to register devices in the
master.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: rename label to undo operation
Rui Miguel Silva [Tue, 15 Dec 2015 19:09:54 +0000 (19:09 +0000)]
greybus: spi: rename label to undo operation

Rename error path label to a more significant name related to the free
operation done.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: fix hot-unplug control-connection timeouts
Johan Hovold [Tue, 15 Dec 2015 14:28:57 +0000 (15:28 +0100)]
greybus: interface: fix hot-unplug control-connection timeouts

Set an interface disconnected flag when the interface has been
hot-unplugged (e.g. forcibly removed or after a reboot), and use it to
disable the control connection early when deregistering the interface
and its bundles.

This avoids a one-second (default) timeout for every enabled connection
(e.g. one per bundle) at hot-unplug, something which for the default
gpbridge manifest currently amounts to five seconds.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: clean up control-connection handling
Johan Hovold [Tue, 15 Dec 2015 14:28:56 +0000 (15:28 +0100)]
greybus: interface: clean up control-connection handling

Clean up control-connection handling by managing it through the control
structure and a higher-level control interface. Also make both the
control structure and connection lifetimes coincide with that of the
interface.

The control connection is now only enabled and disabled when the
interface is initialised and removed.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: demote dynamic-urb error message
Johan Hovold [Tue, 15 Dec 2015 14:51:48 +0000 (15:51 +0100)]
greybus: es2: demote dynamic-urb error message

Demote error message when needing to dynamically allocate an URB to
debug level.

This isn't really an error as much as a reminder of how the current es2
implementation works: It uses a fixed number of pre-allocated URBs, but
allocates URBs dynamically when enough messages are sent in rapid
succession to exhaust the URB pool.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Camera: remove f_dentry usage
Greg Kroah-Hartman [Tue, 15 Dec 2015 02:33:19 +0000 (18:33 -0800)]
greybus: Camera: remove f_dentry usage

On newer kernels f_dentry is gone, so use f_path.dentry instead.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Add driver for the camera class protocol
Laurent Pinchart [Tue, 15 Dec 2015 01:18:06 +0000 (03:18 +0200)]
greybus: Add driver for the camera class protocol

Integration with the V4L2 camera drivers isn't available yet, a debugfs
interface is exposed instead to call the camera Greybus operations.

The debugfs interface will be kept for module testing purpose in order
to exercise all the protocol operations with various valid and invalid
parameters.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Add camera protocol definition
Laurent Pinchart [Tue, 15 Dec 2015 01:18:05 +0000 (03:18 +0200)]
greybus: Add camera protocol definition

Define the camera data protocol ID and all the protocol operations data
structures.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Add asynchronous backoff
Bryan O'Donoghue [Fri, 11 Dec 2015 13:46:53 +0000 (13:46 +0000)]
greybus: loopback: Add asynchronous backoff

A specific request from the firmware people is the ability to back-off from
sending more asynchronous operations once a specific number of operations
are in-flight.

This patch adds that ability - with a new sysfs parameter
'outstanding_operations_max' which controls the maximum number of
operations that can be outstanding/in-flight at any time.

When outstanding_operations_max contains a non-zero value and asynchronous
operations are being used - we will back-off until the completion counter
is < outstanding_operations_max. Tested in both synchronous and
asynchronous mode and with gb_loopback_connection_exit() interrupting
in-flight operations.

Suggested-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Wait for all async operations to complete on exit
Bryan O'Donoghue [Fri, 11 Dec 2015 13:46:52 +0000 (13:46 +0000)]
greybus: loopback: Wait for all async operations to complete on exit

On gb_loopback_connection_exit() we should ensure every issued asynchronous
operation completes before exiting connection_exit(). This patch introduces
a waitqueue with a counter which represents the number of incomplete
asynchronous operations. When the counter reaches zero connection_exit()
will complete. At the point which we wait for outstanding operations to
complete the connection-specific loopback thread will have ceased to issue
new operations. Tested with both synchronous and asynchronous operations.

Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Suggested-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Retrun -ENOMEM if operation allocation fails
Bryan O'Donoghue [Fri, 11 Dec 2015 13:46:51 +0000 (13:46 +0000)]
greybus: loopback: Retrun -ENOMEM if operation allocation fails

If operation allocation fails we should return -ENOMEM in the asynchronous
operation send routine. If we don't return here then the
gb_loopback_async_operation_put() later can dereference a NULL pointer if
the previous gb_operation_create() failed.

Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Drop NULL check on container_of pointer
Bryan O'Donoghue [Fri, 11 Dec 2015 13:46:50 +0000 (13:46 +0000)]
greybus: loopback: Drop NULL check on container_of pointer

container_of cannot return NULL and the pointer passed to this context uses
reference counter bumped inside a spinlock, so the base pointer will be
valid at this point.

Suggested-by: Johan Hovold <johan@hovoldconstulting.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: register a struct device.
Axel Haslam [Fri, 11 Dec 2015 10:49:45 +0000 (11:49 +0100)]
greybus: loopback: register a struct device.

Instead of having the loopback attributes in the bundle device,
Add a struct device to the gb_loopback struct and register it on
connection_init, deregister it at connection_exit, and move the
loopback attribute group over to the new device.

Use device_create_with_groups to create sysfs attributes
together with device.

Suggested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Suggested-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Axel Haslam <ahaslam@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: remove mask attribute
Axel Haslam [Tue, 8 Dec 2015 17:26:31 +0000 (18:26 +0100)]
greybus: loopback: remove mask attribute

The mask attribute is not used on the driver anymore and can be
removed.

Signed-off-by: Axel Haslam <ahaslam@baylibre.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: move chipselect to one byte size
Rui Miguel Silva [Thu, 10 Dec 2015 14:24:58 +0000 (14:24 +0000)]
greybus: spi: move chipselect to one byte size

Fixed in the specification, some values for chipselect count and index
were different in size, just fix that for all reference to chipselect
and move all to one byte size and remove byte order operations.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: Reserve CPorts 16 and 17
Laurent Pinchart [Tue, 8 Dec 2015 17:54:59 +0000 (19:54 +0200)]
greybus: es2: Reserve CPorts 16 and 17

CPorts 16 and 17 are reserved for CDSI0 and CDSI1 by the ES2 APB, make
sure they won't be allocated dynamically.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: clean up error messages
Johan Hovold [Mon, 7 Dec 2015 14:05:46 +0000 (15:05 +0100)]
greybus: interface: clean up error messages

Drop redundant __func__ and add missing errno values.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: fix interface-registration race
Johan Hovold [Mon, 7 Dec 2015 14:05:45 +0000 (15:05 +0100)]
greybus: interface: fix interface-registration race

Fix race with user space when registering the interface.

The interface was registered before having been fully initialised,
something which could lead to user space accessing not-yet-initialised
attribute values (e.g. zero vendor and product ids or empty vendor and
product strings).

Note that this is also needed to be able to let attribute visibility
depend on manifest data (e.g. interface unlock).

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: separate manifest parsing from bundle registration
Johan Hovold [Mon, 7 Dec 2015 14:05:44 +0000 (15:05 +0100)]
greybus: interface: separate manifest parsing from bundle registration

Separate manifest parsing, including bundle and connection creation,
from bundle registration.

Note that this is also needed to allow the interface to not be
registered until the manifest has been parsed.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: separate bundle creation and registration
Johan Hovold [Mon, 7 Dec 2015 14:05:43 +0000 (15:05 +0100)]
greybus: bundle: separate bundle creation and registration

Separate bundle creation and registration.

Note that the bundle connections still needs to be initialised post
registration as protocol drivers create child devices to the bundle.

This will ultimately allow connection structures to be created while
parsing manifests, but the connections to not be enabled until a driver
is bound.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: separate connection disabling and destruction
Johan Hovold [Mon, 7 Dec 2015 14:05:42 +0000 (15:05 +0100)]
greybus: bundle: separate connection disabling and destruction

Separate bundle-connection disabling and destruction, and destroy the
connections along with the bundle.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: use dev_err for bundle-creation errors
Johan Hovold [Mon, 7 Dec 2015 14:05:41 +0000 (15:05 +0100)]
greybus: bundle: use dev_err for bundle-creation errors

Use dev_err to report duplicate bundle ids when creating a bundle.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: kill the bundle lock
Johan Hovold [Mon, 7 Dec 2015 14:05:40 +0000 (15:05 +0100)]
greybus: bundle: kill the bundle lock

Kill the bundle lock, which looked like it protected the interface
bundle lists but really did not as lock-less manipulations were still
made.

No locking for the interface bundle list is in fact needed as bundles
are created along with the interface, and the list is only used to check
for duplicate bundle ids when parsing the manifest and to destroy the
bundles when removing the interface itself.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: remove defensive WARN_ON
Johan Hovold [Mon, 7 Dec 2015 14:05:39 +0000 (15:05 +0100)]
greybus: interface: remove defensive WARN_ON

Remove defensive WARN_ON testing for a NULL-interface when removing an
interface.

Every call site has just dereferenced the interface.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: use decimal notation for interfaces, bundles and cports
Johan Hovold [Mon, 7 Dec 2015 14:05:38 +0000 (15:05 +0100)]
greybus: use decimal notation for interfaces, bundles and cports

Fix up the last few places where hexadecimal rather than decimal
notation was used for interface, bundle and cport ids.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: create svc along with host device
Johan Hovold [Mon, 7 Dec 2015 14:05:37 +0000 (15:05 +0100)]
greybus: svc: create svc along with host device

Create svc device along with host-device and move the svc-connection to
the svc structure.

The svc connection is enabled when registering the host device, but as
the SVC protocol is currently driven by the SVC, we need to defer
registration of the svc device to the connection request handler.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: hd: make svc-connection life time coincide with host-device
Johan Hovold [Mon, 7 Dec 2015 14:05:36 +0000 (15:05 +0100)]
greybus: hd: make svc-connection life time coincide with host-device

Create the svc-connection as part of the host device, and destroy it in
the host-device destructor.

The svc-connection is enabled when registering the host device, and
disabled when the host device is deregistered.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: hd: initialise device last
Johan Hovold [Mon, 7 Dec 2015 14:05:35 +0000 (15:05 +0100)]
greybus: hd: initialise device last

Initialise the struct device last when creating the host device.

After device_initialize(), or rather dev_set_name(), we must use
put_device to release the host device. Initialising last will allow for
a simpler release callback.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: separate connection creation and enabling
Johan Hovold [Mon, 7 Dec 2015 14:05:34 +0000 (15:05 +0100)]
greybus: connection: separate connection creation and enabling

Separate connection creation from enabling.

This will ultimately allow connection structures to be created while
parsing manifests, but the connections to not be enabled until a driver
is bound.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: unbind protocol at exit
Johan Hovold [Mon, 7 Dec 2015 14:05:33 +0000 (15:05 +0100)]
greybus: connection: unbind protocol at exit

Unbind protocol at connection exit rather than when the connection is
destroyed.

Now a protocol is only bound while a connection is enabled.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: bind protocol at init
Johan Hovold [Mon, 7 Dec 2015 14:05:32 +0000 (15:05 +0100)]
greybus: connection: bind protocol at init

Bind protocol at connection init.

This is an intermediate step in separating connection creation and
enabling.

Note that the protocol is currently still unbound when the connection is
destroyed.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: fail on missing protocol
Johan Hovold [Mon, 7 Dec 2015 14:05:31 +0000 (15:05 +0100)]
greybus: connection: fail on missing protocol

Make sure to fail properly when a protocol is missing.

This prevents the connection from being created, which is fine as we
currently never bind protocols post creation.

This is an intermediate step in moving protocol binding to
connection_init.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: kill gb_bundle_bind_protocols
Johan Hovold [Mon, 7 Dec 2015 14:05:30 +0000 (15:05 +0100)]
greybus: bundle: kill gb_bundle_bind_protocols

Remove gb_bundle_bind_protocols() that was used to iterate over all
registered bundles and bind protocols to them should a protocol become
available post bundle creation.

The protocol abstraction as a generic construct is going away in favour
of class drivers. Connections will be setup when a class driver is
probed, and driver modules can be loaded on-demand by user space based
on uevents and modalias.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: remove obsolete function prototype
Johan Hovold [Mon, 7 Dec 2015 14:05:29 +0000 (15:05 +0100)]
greybus: bundle: remove obsolete function prototype

Remove obsolete function prototype that was left after a recent code
relocation.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: add missing boot-status error message
Johan Hovold [Mon, 7 Dec 2015 14:05:28 +0000 (15:05 +0100)]
greybus: svc: add missing boot-status error message

Make sure to print an error message when aborting hotplug processing due
to failure to clear the interface boot status.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Ensure we reset stats once and once only
Bryan O'Donoghue [Mon, 7 Dec 2015 01:59:08 +0000 (01:59 +0000)]
greybus: loopback: Ensure we reset stats once and once only

9445c54c ('greybus/loopback: drop bus aggregate calculation') removed the
aggregation of data in-kernel but instead of dropping the reset of
aggregate stastics, converted that reset into a second reset of the
connection-level stats. While this doesn't result in anything bad it's
also definitely a dumb thing to be doing, so, drop it now.

Also ensure we reset the bridge-specific tracking variables at least once.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Convert thread delay to microseconds
Bryan O'Donoghue [Mon, 7 Dec 2015 01:59:07 +0000 (01:59 +0000)]
greybus: loopback: Convert thread delay to microseconds

Currently the loopback code allows a delay between operations specified in
milliseconds. Having added asynchronous bi-directional support to loopback
its obvious that the delay value would be far more useful specified in
microseconds than milliseconds. So, this patch makes the necessary
conversion.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Add asynchronous bi-directional support
Bryan O'Donoghue [Mon, 7 Dec 2015 01:59:06 +0000 (01:59 +0000)]
greybus: loopback: Add asynchronous bi-directional support

A particular ask from the firmware people for some time now has been the
ability to drive multiple outstanding bi-directional operations from
loopback to loopback Interfaces. This patch implments that change.

The approach taken is to make a call to gb_operation_send() and have
loopback capture the completion callback itself, with a parallel timer to
timeout completion callbacks that take too long. The calling thread will
issue each gb_operation_send() as fast as it can within the constraints of
thread-safety.

In order to support this addition the following new sysfs entries are
created on a per-connection basis.

- async
  Zero indicates loopback should use the traditional synchronous model
  i.e. gb_operation_request_send_sync().

  Non-zero indicates loopback should use the new asynchronous model i.e.
  gb_operation_send()

- requests_completed
  This value indicates the number of requests successfully completed.

- requests_timedout
  This value indicates the number of requests which timed out.

- timeout
  The number of microseconds to give an individual asynchronous request
  before timing that request out.

- timeout_min
  Read-only attribute informs user-space of the minimum allowed timeout.

- timeout_max
  Read-only attribute informs user-space of the maximum allowed timeout.

Note requests_completed + requests_timedout should always equal
iteration_max, once iteration_count == iteration_max. Also, at this time we
support either synchronous or asynchronous operations in one set of
transactions.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Convert cross-thread mutex to spinlock while relaxing connect...
Bryan O'Donoghue [Mon, 7 Dec 2015 01:59:05 +0000 (01:59 +0000)]
greybus: loopback: Convert cross-thread mutex to spinlock while relaxing connect locks

This patch converts the cross-thread mutex used to synchronize threads with
respect to each other to a spinlock. This is done to enable taking of locks
in the following patches while in atomic context. A small re-order of
locking in connection setup/tear-down is done to minimize the amount of
time spent in spinlock_irqsave().

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Prefix hexadecimal values with 0x while printing them
Viresh Kumar [Fri, 4 Dec 2015 16:00:10 +0000 (21:30 +0530)]
greybus: Prefix hexadecimal values with 0x while printing them

To clearly specify the base for printed values, prefix hexadecimal
values with 0x.

Suggested-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: don't use %h and %hh for printing short and char variables
Viresh Kumar [Fri, 4 Dec 2015 16:00:09 +0000 (21:30 +0530)]
greybus: don't use %h and %hh for printing short and char variables

Because the width of our fields is already known, we can use %0Nx (for
hex) to print N bytes and %u (for unsigned decimal), instead of using %h
and %hh, which isn't that readable.

This patch makes following changes:
- s/%hx/%04x
- s/%04hx/%04x
- s/%hhx/%02x
- s/%02hhx/%02x
- s/%hhu/%u
- s/%hu/%u
- s/%x/%02x for u8 value (only at a single place)

Suggested-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: Use -EIO instead of -EINVAL for unipro errors
Viresh Kumar [Fri, 4 Dec 2015 16:00:08 +0000 (21:30 +0530)]
greybus: svc: Use -EIO instead of -EINVAL for unipro errors

-EIO fits better here, rather than -EINVAL as the arguments to the
routine itself are valid, just that we failed while doing unipro
transfers.

Suggested-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Documentation: Arrange entries in alphabetical order
Viresh Kumar [Fri, 4 Dec 2015 16:00:07 +0000 (21:30 +0530)]
greybus: Documentation: Arrange entries in alphabetical order

The order of entries in sysfs-bus-greybus file doesn't match the order
files/directories in sysfs on a real board. More specifically, N-svc
comes at last and ap_interface_id comes before endo_id within the svc.

Fix that.

Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: add bundle id to bundle uevents
Johan Hovold [Fri, 4 Dec 2015 09:44:24 +0000 (10:44 +0100)]
greybus: core: add bundle id to bundle uevents

Add the bundle id to bundle uevents.

This is needed to identify bundles that are being removed (e.g. at
hot-unplug).

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: add interface id to interface and bundle uevents
Johan Hovold [Thu, 3 Dec 2015 18:18:04 +0000 (19:18 +0100)]
greybus: core: add interface id to interface and bundle uevents

Add the interface id to interface and bundle uevents.

This is needed to identify interfaces that are being removed (e.g. at
hot-unplug).

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: add bus id to uevents
Johan Hovold [Thu, 3 Dec 2015 18:18:02 +0000 (19:18 +0100)]
greybus: core: add bus id to uevents

Add the bus id to all greybus uevents.

This is needed to identify devices that are being removed (e.g. at
hot-unplug).

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: flush workqueue at connection exit
Johan Hovold [Thu, 3 Dec 2015 16:29:00 +0000 (17:29 +0100)]
greybus: svc: flush workqueue at connection exit

Make sure to flush the workqueue from hotplug and hotunplug events when
the svc connection is tore down.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: drop bus aggregate calculation
Bryan O'Donoghue [Thu, 3 Dec 2015 17:29:41 +0000 (17:29 +0000)]
greybus: loopback: drop bus aggregate calculation

At some point we had a statement in a Jira work item to pull out 'bus
level' data from greybus and to have messages to different interfaces be
synchronized with respect to each other. Synchronizing threads with respect
to each other is slow and it turns out we can get the same 'bus level'
stastics by making the user-space test application smarter.

That's great news for the in-kernel code since it means we can cut out a
whole lot of code to-do with calculating 'bus level' aggregate data and we
can stop forcing threads to hit a rendezvous before sending out another
loopback operation.

So this patch drops bus level aggregates in favour of doing that in
user-space. It subtracts a lot of code and cycles that in practice nobody
cares about anyway.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Drop unused timeval variables
Bryan O'Donoghue [Thu, 3 Dec 2015 17:29:40 +0000 (17:29 +0000)]
greybus: loopback: Drop unused timeval variables

start and end aren't used and should be dropped.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Move latency_ts initialization to transfer routine
Bryan O'Donoghue [Thu, 3 Dec 2015 17:29:39 +0000 (17:29 +0000)]
greybus: loopback: Move latency_ts initialization to transfer routine

Initializing the bridge specific latency variables is only relevant to the
transfer operation, so make it loopback-transfer specific.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: Relax locking during loopback operations
Bryan O'Donoghue [Thu, 3 Dec 2015 17:29:38 +0000 (17:29 +0000)]
greybus: loopback: Relax locking during loopback operations

Currently a per-connection mutex is held during calls to
gb_operation_send_sync. It is not necessary to hold this lock and later
patches supporting multiple-outstanding bi-directional operations need to
take the per-connection lock and the gb_dev level lock. Since gb_dev must
always be taken before per-connection locks, it is both desirable and safe
to drop the lock now.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: lights: default value for v4l2 flash controls
Rui Miguel Silva [Thu, 3 Dec 2015 16:07:49 +0000 (16:07 +0000)]
greybus: lights: default value for v4l2 flash controls

V4l2 flash will return erro ERANGE if val(which is the default value)
is not defined. Just set it to the max value reported by the module.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: lights: avoid channel torch double free
Rui Miguel Silva [Thu, 3 Dec 2015 16:07:48 +0000 (16:07 +0000)]
greybus: lights: avoid channel torch double free

When attaching torch to a flash we release the channel torch resources,
but afterwards we do it again when releasing all the channels.
Just free all the resource at channel release.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: lights: add v4l2 flash operations
Rui Miguel Silva [Thu, 3 Dec 2015 16:07:47 +0000 (16:07 +0000)]
greybus: lights: add v4l2 flash operations

We do not implement any of the v4l2 flash operations, as the default
ones are ok for now, however the init needs anything define, if not it
will return an error. So, just define it and have an error free v4l2
flash init.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Documentation: Fix N-svc directory name
Viresh Kumar [Thu, 3 Dec 2015 08:24:57 +0000 (13:54 +0530)]
greybus: Documentation: Fix N-svc directory name

endo_id was present in place of the directory N-svc, fix it.

Fixes: 4f7b1833e78f ("Documentation/sysfs-bus-greybus: update the bus ABI documentation")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: fix transfers bigger than greybus payload
Rui Miguel Silva [Wed, 2 Dec 2015 11:12:29 +0000 (11:12 +0000)]
greybus: spi: fix transfers bigger than greybus payload

Add helper functions calculate the tx and rx size possible that fit a
greybus payload size and change the operation creation to adjust to that.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: build: remove Android makefile
Michael Scott [Thu, 3 Dec 2015 20:32:30 +0000 (12:32 -0800)]
greybus: build: remove Android makefile

There is no standard way of building a kernel from source in
Android.  Each device/SoC can (and do) implement it in their own way.
To that end, let's remove this makefile and let each device define
how they want to build the modules.

Signed-off-by: Michael Scott <michael.scott@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: add master and device config operations
Rui Miguel Silva [Wed, 2 Dec 2015 11:12:28 +0000 (11:12 +0000)]
greybus: spi: add master and device config operations

Add master and device config operations, one is to merge all the master
operations and the device config will allow to fetch and add devices for
each chip select.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: add rdwr field to transfer descriptor
Rui Miguel Silva [Wed, 2 Dec 2015 11:12:27 +0000 (11:12 +0000)]
greybus: spi: add rdwr field to transfer descriptor

Add read and/or write field to transfer descriptor to make it possible
to identify the type of transfer.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: fix racy hotplug handling
Johan Hovold [Wed, 2 Dec 2015 17:23:31 +0000 (18:23 +0100)]
greybus: svc: fix racy hotplug handling

Fix racy hotplug handling by serialising all processing of hot-plug and
unplug requests using a single-threaded dedicated workqueue.

This fixes a reported crash during enumeration when processing multiple
events.

The current svc implementation does not handle concurrency at all (e.g.
no interface list lock or refcounting) so we need to use the big hammer
for now.

Note that we will eventually want to process events for different
interfaces in parallel, but that we'd still need a workqueue in order
not to starve other svc requests (e.g. for timesync).

Reported-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: defer processing of hot-unplug requests
Johan Hovold [Wed, 2 Dec 2015 17:23:30 +0000 (18:23 +0100)]
greybus: svc: defer processing of hot-unplug requests

Defer processing also of hot-unplug events.

This is a step towards serialising hot-plug and unplug event processing.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: generalise deferred request handling
Johan Hovold [Wed, 2 Dec 2015 17:23:29 +0000 (18:23 +0100)]
greybus: svc: generalise deferred request handling

Clean up and generalise deferred request handling by simply storing a
reference-counted pointer to the operation itself in the work context.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: clean up interface-remove helper
Johan Hovold [Wed, 2 Dec 2015 17:23:28 +0000 (18:23 +0100)]
greybus: svc: clean up interface-remove helper

Pass the svc rather than its connection to the interface remove helper.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: clean up deferred hotplug handler
Johan Hovold [Wed, 2 Dec 2015 17:23:27 +0000 (18:23 +0100)]
greybus: svc: clean up deferred hotplug handler

Rename the hotplug request message, and clarify that the message size
has already been verified by the primary handler.

Also add a debug message that includes the interface id.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: clean up hotplug/unplug request handlers
Johan Hovold [Wed, 2 Dec 2015 17:23:26 +0000 (18:23 +0100)]
greybus: svc: clean up hotplug/unplug request handlers

Clean up hotplug/unplug request handlers somewhat.

Also add a debug message to both handlers that includes the interface id.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: firmware: Fetch es2 VID/PID to distinguish module vendors
Viresh Kumar [Thu, 26 Nov 2015 10:03:46 +0000 (15:33 +0530)]
greybus: firmware: Fetch es2 VID/PID to distinguish module vendors

The es2 chip doesn't have VID/PID programmed into the hardware and we
need to hack that up to distinguish different modules and their firmware
packages.

This fetches VID/PID (over firmware protocol) for es2 chip only, when
VID/PID already sent during hotplug are 0.

Since only the bootrom contains a firmware protocol cport, this only
affects bootrom's working and not nuttx.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Documentation/sysfs: rename interface and bundle attributes
Johan Hovold [Wed, 25 Nov 2015 14:06:41 +0000 (15:06 +0100)]
greybus: Documentation/sysfs: rename interface and bundle attributes

Update the example sysfs-tree layout under Documentation due renamed
interface and bundle attributes.

The interface and bundle "id" attributes have been renamed
"interface_id" and "bundle_id" respectively to make them self
describing. For consistency reasons the bundle class attribute is
renamed as "bundle_class".

.
├── greybus1
│   ├── 1-2
│   │   ├── 1-2.1
│   │   │   ├── bundle_class
│   │   │   ├── bundle_id
│   │   │   └── state
│   │   ├── 1-2.2
│   │   │   ├── bundle_class
│   │   │   ├── bundle_id
│   │   │   └── state
│   │   ├── interface_id
│   │   ├── product_id
│   │   ├── unique_id
│   │   └── vendor_id
│   ├── 1-4
│   │   ├── 1-4.2
│   │   │   ├── bundle_class
│   │   │   ├── bundle_id
│   │   │   ├── gpbridge0
│   │   │   │   ├── gpio
│   │   │   │   │   └── gpiochip490
│   │   │   │   └── i2c-4
│   │   │   └── state
│   │   ├── interface_id
│   │   ├── product_id
│   │   ├── unique_id
│   │   └── vendor_id
│   └── 1-svc
│       ├── ap_intf_id
│       ├── eject
│       ├── endo_id
│       └── unique_id
└── greybus2
    ├── 2-3
    │   ├── 2-3.1
    │   │   ├── bundle_class
    │   │   ├── bundle_id
    │   │   └── state
    │   ├── interface_id
    │   ├── product_id
    │   ├── unique_id
    │   └── vendor_id
    └── 2-svc
        ├── ap_intf_id
        ├── eject
        ├── endo_id
        └── unique_id

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: drop the control bundle
Johan Hovold [Wed, 25 Nov 2015 14:59:26 +0000 (15:59 +0100)]
greybus: interface: drop the control bundle

Drop the control bundle and ignore control descriptors when parsing
manifests.

Every interface has a control connection with a well defined remote
CPort 0 and there's no longer any need to create a bundle for it.

As the control connection is setup and enabled before parsing the
manifest, ignore any legacy descriptors for control cports and bundles
in a manifest.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: refactor cport-descriptor release
Johan Hovold [Wed, 25 Nov 2015 14:59:25 +0000 (15:59 +0100)]
greybus: manifest: refactor cport-descriptor release

Add helper function to release cport-descriptors with a given bundle id.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: unconditionally enable connections
Johan Hovold [Wed, 25 Nov 2015 14:59:24 +0000 (15:59 +0100)]
greybus: connection: unconditionally enable connections

Remove conditional enabling of connections when binding protocols that
served no purpose as a connection either has no bundle or it has an
interface with a valid device id.

Also remove the now unused GB_PROTOCOL_NO_BUNDLE protocol flag.

This is an intermediate step in moving the protocol binding to
connection_init, but is also needed as the control bundle is going away.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: control: do not assume a control bundle
Johan Hovold [Wed, 25 Nov 2015 14:59:23 +0000 (15:59 +0100)]
greybus: control: do not assume a control bundle

The control bundle is going away so update the code.

Also remove defensive WARN_ON which would not just warn if our
implementation is broken, but also leak further memory unnecessarily.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: handle bundle-less connections in svc helpers
Johan Hovold [Wed, 25 Nov 2015 14:59:22 +0000 (15:59 +0100)]
greybus: connection: handle bundle-less connections in svc helpers

The svc connection helper functions should not assume that all dynamic
connections will have a bundle.

This is needed as the control bundle is going away.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: kill the endo
Johan Hovold [Wed, 25 Nov 2015 14:59:21 +0000 (15:59 +0100)]
greybus: kill the endo

Remove the now unused endo and module code.

Note that the never-implemented serial and version attributes of the
endo can be implemented as svc attributes if needed.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: remove endo reference
Johan Hovold [Wed, 25 Nov 2015 14:59:20 +0000 (15:59 +0100)]
greybus: loopback: remove endo reference

Replace reference to "endo0" and generate the raw-latency filename based
on the host-device bus id instead.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: clean up log messages
Johan Hovold [Wed, 25 Nov 2015 14:59:19 +0000 (15:59 +0100)]
greybus: svc: clean up log messages

Use dev_err and friends with the svc device for messages.
Clean up error messages.
Demote a few warnings to warning level.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: hd: fix svc-connection handling
Johan Hovold [Wed, 25 Nov 2015 14:59:18 +0000 (15:59 +0100)]
greybus: hd: fix svc-connection handling

Create the svc connection when registering the host-device and
remove the current svc connection hacks that "upgraded" the svc
connection once the endo id and ap interface id was known.

Note that the old implementation was partly based on a misunderstanding
as it was the remote interface id, rather than the local AP interface id,
that used to define a connection (but we also needed the endo_id).

The remote interface is no longer needed as static connections, such as
the svc connection, are now simply defined by the host-device and host
cport id.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>