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>
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>
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).
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.
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".
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>
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>
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>
Johan Hovold [Wed, 25 Nov 2015 14:59:15 +0000 (15:59 +0100)]
greybus: connection: handle static connections
Use host-device device and connection name for log messages rather than
assume that all connections have a bundle (e.g. not true for static
connections).
Note that the "initial" svc connection has never had a bundle.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 25 Nov 2015 14:59:14 +0000 (15:59 +0100)]
greybus: connection: add name field
Add a name field to connections that can be used in log messages.
A connection always belongs to a host-device (bus) and can be uniquely
identified by its host-device cport id, but include remote interface and
cport id nonetheless on the following format:
<hd_cport_id>/<intf_id>:<cport_id>
The remote interface and cport id will be zero for static connections.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 25 Nov 2015 14:59:12 +0000 (15:59 +0100)]
greybus: connection: fix potential null-deref on create
Make sure that the interface lookup helper can handle static,
bundle-less connections without oopsing when creating further
connections.
Note that the initial svc-connection has always been bundle-less, but
did not trigger an oops as a bundle was created for it before further
connections were created.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 25 Nov 2015 14:59:11 +0000 (15:59 +0100)]
greybus: connection: clean up connection-creation interface
Clean up the connection-creation interface by clearly separating our two
types of connections: static and dynamic.
Add two convenience functions for creating static and dynamic connections.
A static connection is a pre-setup connection that is defined by a host
device and a host-device cport id. Specifically, the remote interface or
cport id need not be known. The SVC connection is a static connection.
A dynamic connection is defined by a host device and a remote interface
and cport id. This is our normal connections where the host-device cport
is (generally) allocated dynamically.
Note that the new generic interface is marked static, but can be
exported later to allow dynamic connections to be created also from
fixed host-device cports (e.g. for CSI).
Also note that a connection of either type is uniquely identified by its
host-device and host-device cport id once created.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 25 Nov 2015 14:59:05 +0000 (15:59 +0100)]
greybus: bundle: rename bundle devices
Rename bundle devices so that the new device names become
"<bus_id>-<intf_id>.<bundle_id>", where bus_id is the dynamically
allocated host-device bus id and intf_id the svc-allocated interface
id.
Using a period (.) rather than a colon (:) makes dev-messages easier to
read as as those already add a colon after the device name, for example:
greybus 1-4.15: failed to connect cport: -22
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Wed, 25 Nov 2015 14:59:04 +0000 (15:59 +0100)]
greybus: interface: make interfaces children of host devices
Make interfaces child devices of host devices.
The new interface device name is "<bus_id>-<intf_id>", where bus_id is
the dynamically allocated bus id for the host device and intf_id is the
svc-allocated interface id.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Every bus has exactly one svc device (1-svc and 2-svc). For our system,
the svc device of each bus will be a representation of the same
network-unique SVC device (e.g. endo_id and unique_id will be
identical).
The first bus has two registered interfaces (1-2 and 1-4), while the
second bus has a single interface (2-3). Note that the interface ids (2,
4, and 3) are necessarily unique as these are interfaces on the same
network.
Interface 1-2 has two bundles (1-2.1 and 1-2.2) and interface 1-4 has
a single bundle (1-4.2). The bundle ids are interface-unique and reflect
the ids found in each manifest.
In the example, bundle 1-4.2 has a gbbridge-device, which is the parent
device for a gpiochip device and an i2c bus.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This patch doesn't change any functionality. It just improves the
readability of the code.
Current code to get 'descriptors' pointer looks as if we are forcing the
pointer type change. To simplify the address calculations, use
'descriptors' member directly from greybus_manifest structure.
Vaibhav Agarwal [Mon, 23 Nov 2015 10:27:45 +0000 (15:57 +0530)]
greybus: Audio: Add skeleton code for GB virtual codec driver
This patch adds gb-codec driver with static information for
DAPM widgets, controls & dapm_routes.
Including some changes in kernel code(machine driver):
- Able to register codec and glue it with existing sound card successfully.
- Able to view & modify mixer controls:
(volume/mute[left/right][input/output])
- Able to view DAPM widgets registered via /debug interface.
- Able to establish DAPM path for playback.
Since, FE<->BE path not yet verified with default jetson build,
registering GB DAI as normal DAI link to verify GB virtual codec
specific DAPM path.
Johan Hovold [Sat, 21 Nov 2015 09:52:01 +0000 (10:52 +0100)]
greybus: interface: remove unique id
Remove the unimplemented interface unique-id.
There will eventually be an interface-serial-number attribute provided,
but let's not export it or commit to a name for this attribute until we
need it.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Thu, 19 Nov 2015 17:27:59 +0000 (18:27 +0100)]
greybus: firmware: fix information leak
Add missing sanity checks on get_firmware-request offset and size
parameters to fix potential information leaks.
This prevents remotely controlled information leaks as the requestor
currently controls both the 32-bit firmware-image offset and the amount
of data that is returned (up to host-device MTU).
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Mon, 16 Nov 2015 19:23:25 +0000 (19:23 +0000)]
greybus: manifest: fix bundle descriptor parse
The descriptor list is walked in two points, in the bundle parsing and
cport parsing, this can make the next descriptor pointer in bundle to be
already removed by the cport remove descriptor and become invalid.
So, just get the next bundle until there no more left.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Mark Greer [Fri, 13 Nov 2015 21:44:13 +0000 (14:44 -0700)]
greybus: audio: Allocate protocol and class values
Allocate protocol and class values for the Audio Device Class
Protocol. Two values of each type are allocated: one for Audio
Management Connections and one for Audio Data Connections.
Signed-off-by: Mark Greer <mgreer@animalcreek.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Thu, 12 Nov 2015 15:36:02 +0000 (15:36 +0000)]
greybus: power_supply: rework and operation changes
This is a major rework and changes to the current implementation of the
battery protocol. The previous implementation lack the support of a more
dynamic handle of power supply properties and updating of status. Also,
reflect the actual state of the greybus specification
So, with this new approach a set of operations to fetch the battery
module configuration and properties is add, new methods to cache and
update the values of properties, new operation to set properties if
declared writable and an event operation that can be triggered by the
module to force an update read on the properties values.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Mon, 9 Nov 2015 09:35:03 +0000 (15:05 +0530)]
greybus: es2: Send cport-id in wValue field to usb_control_msg()
wIndex field has a special meaning, as that can be used by the core to
index into the possible USB interfaces. And that specifically broke with
gbsim, as it has a single USB interface.
Other similar requests (REQUEST_LATENCY_TAG_{EN|DIS}) are already using
wValue field for passing cport-id.
Fix cport_reset() by sending the cport-id in wValue field instead of
wIndex.
Johan Hovold [Wed, 4 Nov 2015 17:55:22 +0000 (18:55 +0100)]
greybus: hd: fix host-device life time issues
Fix host-device life time issues by separating host-device allocation
from registration.
This is needed both to make sure that all host-device resources are
available before registering the device and to prevent such resources
from being deallocated while the device is still in use during device
removal.
This specifically fixes the following warnings during es1 and es2
disconnect:
usb 1-1.1: No free CPort OUT urbs, having to dynamically allocate one!
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Tue, 3 Nov 2015 11:11:26 +0000 (12:11 +0100)]
greybus: connection: kill gb_hd_connections_exit
Connections are destroyed as part of interface tear down. If we fail to
do that properly it's a bug that should be fixed rather than papered
over by a fall-back clean up function.