Alexandre Bailon [Mon, 14 Sep 2015 16:20:43 +0000 (18:20 +0200)]
greybus: es2: change (un)map methods to static
Endpoints pair will only be managed by es2 driver.
map_cport_to_ep() and unmap_cport() should be static.
Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Alexandre Bailon [Mon, 14 Sep 2015 16:20:42 +0000 (18:20 +0200)]
greybus: es2: rename misnamed variables and methods
Some methods and variables name were a lot confusing.
Replace it or add ep_pair in methods or varaibles name
to make sources less confusing.
Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Mon, 14 Sep 2015 18:19:04 +0000 (20:19 +0200)]
greybus: sdio: fix work-queue leak and use-after-free
A single global work-queue pointer was used for the per-connection
workqueue, something which would lead to memory leaks and all sorts of
bad things if there are ever more than one SDIO connection in a system.
Also add the missing error handling when allocating the queue.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Johan Hovold [Mon, 14 Sep 2015 18:19:03 +0000 (20:19 +0200)]
greybus: sdio: fix tear-down use-after-free
The mmc-driver private data must not be accessed after mmc_free_host()
has released it.
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>
Johan Hovold [Mon, 14 Sep 2015 18:19:02 +0000 (20:19 +0200)]
greybus: vibrator: fix tear-down race
Do not release the minor number until after the device has been
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>
Viresh Kumar [Wed, 9 Sep 2015 15:38:33 +0000 (21:08 +0530)]
greybus: firmware: Send AP-ready operation
Module's Bootrom needs a way to know (currently), when to start sending
requests to the AP. The version request is sent before connection_init()
routine is called, and if the module sends the request right after
receiving version request, the connection->private field will be NULL.
Fix this TEMPORARILY by sending an AP_READY request.
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>
Viresh Kumar [Wed, 9 Sep 2015 15:38:32 +0000 (21:08 +0530)]
greybus: firmware: firmware image name has .tftf instead of .fw
That's how the bootrom-tool names it, and that's how the kernel should
expect it.
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>
Viresh Kumar [Wed, 9 Sep 2015 15:38:31 +0000 (21:08 +0530)]
greybus: firmware: Fix incorrect firmware file's name
All the id-fields are 32 bit long instead of 16 bits and so we will need
8 characters per field instead of four. Also the stage field is only one
byte long and so needs just two characters to represent it.
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 9 Sep 2015 15:38:30 +0000 (21:08 +0530)]
greybus: firmware: firmware's file name is 32 characters long
28 is the wrong value and should be 32 instead.
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>
Viresh Kumar [Wed, 9 Sep 2015 15:38:29 +0000 (21:08 +0530)]
greybus: svc: Implement DME peer get/set attributes helpers
These are required to get/set DME attributes of the modules. This is
implemented based on the greybus specifications.
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>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:55 +0000 (10:48 +0100)]
greybus: loopback: use dev_name to populate sysfsname
dev_name() will give a nice string representing the end0:X:Y:Z:W name
mitigating the need to pick apart the various nested data structures and
print out their various identifiers.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Suggested-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:47 +0000 (10:48 +0100)]
greybus: loopback: add gb_loopback_operation_sync
In order to extract timestamps from gb_message instead of gb_connection we
will need access to the gb_operation structure. A first step to that is to
create our own gb_loopback_operation_sync which will call
gb_operation_request_send_sync() directly. Once loopback is using this
function internally it will be possible to convert to gb_message based
timestamps and drop gb_connection based timestamps in two seperate patches.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:46 +0000 (10:48 +0100)]
greybus: loopback: sort list of connections for masking purposes
In user-space we specify a list of connections as a bit-mask with the
assumption that a list such is indexed as indicated below.
end0:3:3:1:1 = 1
end0:3:3:2:3 = 2
end0:3:3:3:4 = 4
Current code assigns bitmask ids based on the order of discovery, however
user-space has no idea what the order of discovery is. This patch sorts the
linked list of connections associated with the loopback driver and assigns
a bit-id based on the sorted list - not the order of discovery. This
change therefore enforces the end-users idea that end0:3:3:1:1 above is
always denoted by bit 1 - even if from the AP's perspective it was the last
entry discovered.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:45 +0000 (10:48 +0100)]
greybus: loopback: add response len to loopback protocol
This patch adds a len field to the loopback protocol.
This field is validated in gb_loopback_transfer() and stuffed in
gb_loopback_request_recv().
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:44 +0000 (10:48 +0100)]
greybus: loopback: convert pr_info to dev_err
This patch fixes and invalid use of pr_info() in favour of dev_err();
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:43 +0000 (10:48 +0100)]
greybus: loopback: ensure sysfs entries are cleaned up on exit
bdd4bba4 ('greybus/loopback: add module level sys/debug fs data points')
added a sysfs entry attached to gb_dev but missed the jump to out_sysfs_dev
This patchs fixes the missing jump to out_sysfs_dev.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reported-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:42 +0000 (10:48 +0100)]
greybus: loopback: ensure debugfs entires are cleaned up on exit
bdd4bba4 ('greybus/loopback: add module level sys/debug fs data points')
added a debugfs entry attached to gb_dev but omitted the cleanup on gb_init
error and gb_exit. This patchs fixes the missing debugfs_remove().
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reported-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:41 +0000 (10:48 +0100)]
greybus: loopback: exit kfree after mutex release
init doesn't have a lock for kzalloc so exit shouldn't have lock with the
corresponding kfree.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:40 +0000 (10:48 +0100)]
greybus: loopback: hold a coarse lock while init/exit run
This patch holds gb_dev.mutex for the duration of init and exit to reduce
complexity while ensuring that init and exit run atomically with respect
to slave threads @ gb_loopback_fn().
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Mon, 14 Sep 2015 09:48:39 +0000 (10:48 +0100)]
greybus: loopback: ensure count decrement happens before sysfs_remove_groups
This patches fixes a case where gb_dev.count is decremented too late in the
exit() routine.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reported-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Mon, 7 Sep 2015 12:26:58 +0000 (17:56 +0530)]
greybus: connection: Add sysfs 'ap_cport_id' file for connections
Its a very useful piece of information, i.e. the cport id of the AP to
which the cport of the module is connected, and is required lots of
times. It isn't known in advance as it is allocated at runtime.
This patch creates another file 'ap_cport_id', only for the connection
directories, which will give the cport id of the AP.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Mon, 7 Sep 2015 12:35:26 +0000 (18:05 +0530)]
greybus: svc: destroy the route on module hot-unplug
We created two-way routes between the AP and module's interface on
hotplug, and forgot to remove them on hot-unplug. The same is also
required while handling errors in hotplug case.
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>
Viresh Kumar [Mon, 7 Sep 2015 10:31:25 +0000 (16:01 +0530)]
greybus: svc: No need of per-direction route-create requests
The route-create request creates bi-directional routes and there is no
need to make separate calls for setting up routes on both the
directions.
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>
Viresh Kumar [Mon, 7 Sep 2015 10:31:24 +0000 (16:01 +0530)]
greybus: Add flags to struct gb_protocol
This helps in removing special per-protocol code, with the help of
generic flags passed by protocol drivers.
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>
Viresh Kumar [Mon, 7 Sep 2015 10:31:23 +0000 (16:01 +0530)]
greybus: connection: Call connection_destroy() from gb_connection_svc_connection_destroy()
connection_create() is called right after svc is requested to create the
connection and so connection_destroy() must be called just before we
request the SVC to destroy the connection.
Over that, this fixes the inconsistency where connection_create() is
called for all connections except SVC connection, but
connection_destroy() is called always.
Acked-by: Alexandre Bailon <abailon@baylibre.com>
Fixes:
5313ca607afb ("Greybus driver: add a new callbacks to driver")
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>
Viresh Kumar [Mon, 7 Sep 2015 10:31:22 +0000 (16:01 +0530)]
greybus: connection: destroy svc connection on connection exit or errors
While initializing a connection, the AP requests the SVC to create a
connection between a cport on AP and a cport on the Module.
The opposite of that is missing, when connection is destroyed or if
errors occur after creating the connection. Fix it.
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>
Viresh Kumar [Mon, 7 Sep 2015 10:31:21 +0000 (16:01 +0530)]
greybus: connection: call gb_svc_connection_create() from gb_connection_init()
There are two operations which very much work together:
- AP asks the SVC to create a connection between a cport of AP and a
cport of module.
- AP tells the module that the connection is created.
Its better (logically) to do these two operations together and so call
gb_svc_connection_create() from gb_connection_init() instead. Also check
its return value properly.
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>
Viresh Kumar [Mon, 7 Sep 2015 10:31:20 +0000 (16:01 +0530)]
greybus: manifest: release cport descriptors to avoid 'excess descriptors' warning
If we fail to initialize a cport of a bundle, we abort the entire
bundle. But that leads to following (unnecessary) warnings as few of the
cport descriptors, belonging to the aborted bundle were never parsed:
"greybus: excess descriptors in interface manifest"
Fix that by releasing all cport descriptors for the aborted bundle.
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>
Viresh Kumar [Mon, 7 Sep 2015 10:31:19 +0000 (16:01 +0530)]
greybus: manifest: don't reject the interface on failing to initialize a cport
A 'bundle' represents a device in greybus. It may require multiple
cports for its functioning. If we fail to setup any cport of a bundle,
we better reject the complete bundle as the device may not be able to
function properly then.
But, failing to setup a cport of bundle X doesn't mean that the device
corresponding to bundle Y will not work properly. Bundles should be
treated as separate independent devices.
While parsing manifest for an interface, treat bundles as separate
entities and don't reject entire interface and its bundles on failing to
initialize a cport. But make sure the bundle which needs the cport, gets
destroyed properly.
We now release the bundle descriptor before parsing the cports, but that
shouldn't make any difference.
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>
Bryan O'Donoghue [Fri, 4 Sep 2015 15:53:31 +0000 (16:53 +0100)]
greybus: loopback: make sure to list_del on connection_exit
gb_loopback_connection_exit does a kfree on a data structure associated
with a loopback connection but fails to do a corresponding list_del(). On
subsequent enumerations this can lead to a NULL pointer dereference. Each
list_add in gb_loopback_connection_init() must have a corresponding
list_del in gb_loopback_connection_exit(), this patch adds the relevant
list_del() and ensures that an appropriate mutex protecting gb_dev.list is
held while doing so.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Alexandre Bailon [Fri, 4 Sep 2015 14:55:42 +0000 (16:55 +0200)]
greybus: es2: update the bulk_ep_set value accepted by map_to_cpor_ep()
The endpoint set 0 is currently considered as invalid.
But 0 mean muxed cports on ep1 and ep2,
then it must not return -EINVAL.
Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Alexandre Bailon [Fri, 4 Sep 2015 14:55:40 +0000 (16:55 +0200)]
greybus: Greybus driver: add a new callbacks to driver
Add connection_create and connection_destroy callbacks.
ES2 can map a cport to a pair of endpoints.
Because ES2 have only a few pair of endpoints, ES2 need to have
access to some high level connection information such as protocol id
to effectively map the cports.
These callback will provide these information and help ES2 to map cports.
Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 4 Sep 2015 09:40:09 +0000 (15:10 +0530)]
greybus: spi: Allow spi-core to allocate bus numbers dynamically
And that fixes these warnings generated with BDB:
WARNING: at /home/viresh/ara/jetson-kernel-build/tegra/fs/sysfs/dir.c:530 sysfs_add_one+0xa4/0xb4()
sysfs: cannot create duplicate filename '/class/spi_master/spi0'
Modules linked in: gb_es2(O) gb_phy(O) greybus(O)
CPU: 2 PID: 111 Comm: kworker/u8:3 Tainted: G W O
3.10.40-gf32f9c5ca7e8 #2
Workqueue: events_unbound svc_process_hotplug [greybus]
[<
c0016844>] (unwind_backtrace+0x0/0x13c) from [<
c0012fc4>] (show_stack+0x18/0x1c)
[<
c0012fc4>] (show_stack+0x18/0x1c) from [<
c0067d4c>] (warn_slowpath_common+0x5c/0x74)
[<
c0067d4c>] (warn_slowpath_common+0x5c/0x74) from [<
c0067d9c>] (warn_slowpath_fmt+0x38/0x48)
[<
c0067d9c>] (warn_slowpath_fmt+0x38/0x48) from [<
c01bc218>] (sysfs_add_one+0xa4/0xb4)
[<
c01bc218>] (sysfs_add_one+0xa4/0xb4) from [<
c01bcc24>] (sysfs_do_create_link_sd+0xc0/0x20c)
[<
c01bcc24>] (sysfs_do_create_link_sd+0xc0/0x20c) from [<
c042e088>] (device_add+0x2e8/0x5f4)
[<
c042e088>] (device_add+0x2e8/0x5f4) from [<
c04ae008>] (spi_register_master+0x15c/0x654)
[<
c04ae008>] (spi_register_master+0x15c/0x654) from [<
bf015df4>] (gb_spi_connection_init+0x164/0x19c [gb_phy])
[<
bf015df4>] (gb_spi_connection_init+0x164/0x19c [gb_phy]) from [<
bf002604>] (gb_connection_bind_protocol+0x160/0x1b4 [greybus])
[<
bf002604>] (gb_connection_bind_protocol+0x160/0x1b4 [greybus]) from [<
bf002880>] (gb_connection_create_range+0x228/0x2fc [greybus])
[<
bf002880>] (gb_connection_create_range+0x228/0x2fc [greybus]) from [<
bf002994>] (gb_connection_create+0x40/0x48 [greybus])
[<
bf002994>] (gb_connection_create+0x40/0x48 [greybus]) from [<
bf000be0>] (gb_manifest_parse+0x61c/0x628 [greybus])
[<
bf000be0>] (gb_manifest_parse+0x61c/0x628 [greybus]) from [<
bf0019ac>] (gb_interface_init+0x130/0x170 [greybus])
[<
bf0019ac>] (gb_interface_init+0x130/0x170 [greybus]) from [<
bf003bf0>] (svc_process_hotplug+0x214/0x258 [greybus])
[<
bf003bf0>] (svc_process_hotplug+0x214/0x258 [greybus]) from [<
c0087ecc>] (process_one_work+0x13c/0x454)
[<
c0087ecc>] (process_one_work+0x13c/0x454) from [<
c0088c20>] (worker_thread+0x140/0x3dc)
[<
c0088c20>] (worker_thread+0x140/0x3dc) from [<
c008f20c>] (kthread+0xe0/0xe4)
[<
c008f20c>] (kthread+0xe0/0xe4) from [<
c000f098>] (ret_from_fork+0x14/0x20)
Reported-by: Mitchell Tasman <tasman@leaflabs.com>
Suggested-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:15 +0000 (17:21 +0530)]
greybus: connection: protocol can be NULL in gb_connection_exit()
gb_connection_exit() is getting called from gb_connection_destroy() now,
which will get called from failure path of gb_connection_create_range()
(in a later commit). And at that point connection->protocol will be
NULL.
Don't print an error message if this happens in gb_connection_exit().
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Fabien Parent [Mon, 31 Aug 2015 11:51:14 +0000 (17:21 +0530)]
greybus: connection: fail to bind if connection init fails
gb_connection_init() can fail and will return proper error code in that
case, but the caller is ignoring it currently.
Fix that by properly handling errors returned from gb_connection_init()
and propagating them to callers of gb_connection_bind_protocol().
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:13 +0000 (17:21 +0530)]
greybus: connection: call gb_connection_exit() from gb_connection_destroy()
Both the routines are always called together and in the same sequence.
Rather than duplicating this at different places, make
gb_connection_destroy() call gb_connection_exit().
This also makes it more sensible, as gb_connection_init() is never
called directly by the users and so its its counterpart shouldn't be
called directly as well.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:12 +0000 (17:21 +0530)]
greybus: connection: Propagate error properly
We just got an error, propagate the exact return value instead of 0.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:11 +0000 (17:21 +0530)]
greybus: connection: no need to verify connection->protocol
connection->protocol will always be valid in gb_connection_init() as it
is called only from a single routine, after initializing the 'protocol'
field.
No need to check it again.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:10 +0000 (17:21 +0530)]
greybus: connection: convert connected dev_warn() to dev_err()
Failures from control-connected operations are fatal errors and
must be reported with dev_err() instead of dev_warn().
Fix it.
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
[ johan: do not promote disconnected warnings, update summary ]
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:09 +0000 (17:21 +0530)]
greybus: connection: staticize gb_connection_init()
Its not used by external users, mark it static. This required some
shuffling of the code.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:08 +0000 (17:21 +0530)]
greybus: bundle: kill unnecessary forward declaration of routine
Move the function to an earlier place, to kill the unnecessary forward
declaration.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:07 +0000 (17:21 +0530)]
greybus: svc: unexport few internal functions
There are no external users of these, and probably would never be. Make
them static.
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:06 +0000 (17:21 +0530)]
greybus: svc: Kill unnecessary wrapper functions
Not sure why they were created, but there is no need for them. Kill
them.
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:05 +0000 (17:21 +0530)]
greybus: svc: No need to return errors from [gb_]svc_connection_destroy()
These routines are responsible to destroy a connection that is going
away, the return value is of no use. At best, print an error message to
show that we got an error.
Make their return type void.
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:04 +0000 (17:21 +0530)]
greybus: greybus_protocols: Pack all request/response structure
These structures are exchanged between the AP and the module and must be
packed to avoid any unwanted holes.
Its all working currently because compiler doesn't add any pad bytes for
these structures, as their elements are already aligned to their size.
But these structures can change in future and we better mark them
packed.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:03 +0000 (17:21 +0530)]
greybus: greybus_protocols: Pack structure as required by the module firmware
These structures are expected to be packed by the module firmware code,
but the kernel wasn't following it until now.
Its all working currently because compiler doesn't add any pad bytes for
these structures, as their elements are already aligned to their size.
But these structures can change in future and we better mark them
packed.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Mon, 31 Aug 2015 11:51:02 +0000 (17:21 +0530)]
greybus: greybus_protocols: svc: Add missing comment
All request/responses either have a structure representing them or a
comment saying the request/response payload doesn't exist.
The comment was missing for route create response message, add it.
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Thu, 3 Sep 2015 10:12:22 +0000 (15:42 +0530)]
greybus: svc: reject invalid state requests
The request sequence for SVC protocol is fixed at least upto SVC_HELLO
request. The first request has to be Protocol Version, followed by
SVC_HELLO. Any other request can follow them, but these two.
Add another field in 'struct gb_svc' that keeps track of current state
of the protocol driver. It tracks only upto SVC_HELLO, as we don't need
to track later ones.
Also add a comment, about the order in which the requests are allowed
and why a race can't happen while accessing 'state'.
This removes the WARN_ON() in gb_svc_hello() as we track state
transition with 'state' field.
This also fixes a crash, when the hotplug request is received before
fully initializing the svc connection. The crash mostly happens while
accessing svc->connection->bundle, which is NULL, but can happen at
other places too, as svc connection isn't fully initialized.
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
[johan: add 0x-prefix to warning message ]
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Wed, 2 Sep 2015 15:57:13 +0000 (21:27 +0530)]
greybus: svc: Include system headers at the top
System headers should get included before greybus.h. Its followed
everywhere except svc.c. Fix it.
Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Vishal Bhoj [Thu, 3 Sep 2015 05:35:19 +0000 (22:35 -0700)]
greybus: build: android: avoid building for targets that don't have kernel binary
For sdk related targets, the greybus build will error out due to missing
kernel dependency. Let's avoid those targets by checking TARGET_NO_KERNEL.
Signed-off-by: Vishal Bhoj <vishal.bhoj@linaro.org>
Signed-off-by: Michael Scott <michael.scott@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Johan Hovold [Wed, 2 Sep 2015 16:03:21 +0000 (18:03 +0200)]
greybus: fix cport-id defines
The CPORT_ID_MAX define has been used by host drivers as a device limit,
but also for sanity checks when parsing manifests.
Now that it's only used for sanity checks we can increase it to the
specification maximum (4095) and get rid of the config-option that could
be used to override the previous limit (128).
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Johan Hovold [Wed, 2 Sep 2015 16:03:20 +0000 (18:03 +0200)]
greybus: es1: fix build-time cport constraint
The CPort count of es1 is now defined by CPORT_COUNT.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Johan Hovold [Wed, 2 Sep 2015 15:37:38 +0000 (17:37 +0200)]
greybus: core: fix hd-creation error path
Make sure to return an errno when a host-device buffer-size check fails.
Fixes:
1f92f6404614 ("core: return error code when creating host device")
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Fabien Parent [Wed, 2 Sep 2015 13:50:38 +0000 (15:50 +0200)]
greybus: es{1,2}: remove control endpoint field
There is no need to store the endpoint number of the control requests since
the default control endpoint is used and the USB standard defines for it a fixed
endpoint number of 0.
Remove every instance of the field control_endpoint and replace it with a
hardcoded 0 value.
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Fabien Parent [Wed, 2 Sep 2015 13:50:37 +0000 (15:50 +0200)]
greybus: es2: get cport count from apb1 usb device
Use the control request REQUEST_CPORT_COUNT in order to get the number of
CPorts supported by the UniPro IP.
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Fabien Parent [Wed, 2 Sep 2015 13:50:36 +0000 (15:50 +0200)]
greybus: es2: dynamically allocate array for cport <-> ep mapping
In order to be able to dynamically determine the number of CPorts supported
by the UniPro IP instead of hardcoding the value we need to dynamically
allocate the array that is doing the cport-ep mapping.
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Fabien Parent [Wed, 2 Sep 2015 13:50:35 +0000 (15:50 +0200)]
greybus: add num_cports field to greybus hd
This commit is doing the preparation work in order to get the number of cports
supported from the UniPro IP instead of using a constant defined in a Kconfig
file.
Greybus host device is now holding the cport count, and all the code will now
use this value instead of the constant CPORT_ID_MAX when referring to an AP's
CPort ID.
Signed-off-by: Fabien Parent <fparent@baylibre.com>
[johan: es1 supports 256 cports, minor style changes ]
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Fabien Parent [Wed, 2 Sep 2015 13:50:34 +0000 (15:50 +0200)]
greybus: es2: rename misnamed CPORT_MAX into CPORT_COUNT
Rename the misnamed macro CPORT_MAX into CPORT_COUNT. CPORT_MAX could let
people think that the macro is holding the value of the last CPort ID
usable.
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Viresh Kumar [Tue, 1 Sep 2015 11:46:16 +0000 (17:16 +0530)]
greybus: svc: get hd directly from connection
There is no need to perform connection->bundle->intf->hd as the same can
be done with connection->hd.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Johan Hovold [Tue, 1 Sep 2015 10:25:28 +0000 (12:25 +0200)]
greybus: pwm: replace pr_err with dev_err
Replace pr_err with the more descriptive dev_err. Also include the error
code on failure to register the PWM chip.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Johan Hovold [Tue, 1 Sep 2015 10:25:27 +0000 (12:25 +0200)]
greybus: interface: fix potential attribute-buffer overflow
Use scnprintf in the generic attribute helper, which does not currently
check for buffer overflow.
The attribute helper is used to print generic strings, which could
potentially overflow the buffer. Note that the only strings currently
exported are taken from greybus string descriptors and should therefore
be limited to 255 chars.
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>
Johan Hovold [Tue, 1 Sep 2015 10:25:26 +0000 (12:25 +0200)]
greybus: svc: fix hot-plug-state allocation flag
Use GFP_KERNEL for hot-plug state allocation in
gb_svc_intf_hotplug_recv, which is called from a request handler (i.e.
a work queue).
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Johan Hovold [Tue, 1 Sep 2015 10:25:25 +0000 (12:25 +0200)]
greybus: svc: fix device-id allocation flag
Use GFP_KERNEL for device-id allocation in svc_process_hotplug, which is
called from a work queue.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Johan Hovold [Tue, 1 Sep 2015 10:25:24 +0000 (12:25 +0200)]
greybus: endo: fix endo-id allocation flag
Use GFP_KERNEL for endo ida allocation in gb_endo_register, which is not
called from atomic context.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Rui Miguel Silva [Thu, 20 Aug 2015 14:20:17 +0000 (15:20 +0100)]
greybus: sdio: fix command type defines
Broadcast command with response and without response where swapped
related to what is defined in greybus specification.
Make it coherent with the document.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Johan Hovold [Fri, 28 Aug 2015 09:58:24 +0000 (11:58 +0200)]
greybus: firmware: fix potential stack corruption
Use snprintf when generating the firmware name to avoid stack corruption
if the fixed-size buffer overflows.
Note that the current buffer size appears to expect 16-bit ids while
the they are actually 32-bit, something which could trigger the
corruption.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Alexandre Bailon [Mon, 31 Aug 2015 07:00:16 +0000 (09:00 +0200)]
greybus: es1/es2: set transfer flag to send a zero-length packet
Greybus messages with a multiple size of 512B generate timeouts
(any other message size doesn't).
512B is exactly the packet size of a bulk out endpoint.
Hence USB device is expecting a short (< 512B)
or zero-length packet to finish the transfer,
which is never generated and causes the timeout.
Set the transfer flag to send a zero-length packet in this situation.
Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:12 +0000 (00:55 +0100)]
greybus: loopback: fix typo in comment
Alex previously post a patch to fix this typo. Somehow it fell through the
cracks in the meantime. Do it again 'stastic' is a word 'statistic' is not.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:11 +0000 (00:55 +0100)]
greybus: loopback: add module level sys/debug fs data points
Code this far has used the first connection's sysfs entry to present
variables intended to control the entire test - across multiple
connections. This patch changes that so that the module level variables
only appear at the end0:x level in sysfs.
Example:
Total counts for errors over the entire set of connections will be here
/sys/bus/greybus/devices/endo0:x/error_dev
In contrast an error for each connection will be presented like this
/sys/bus/greybus/devices/endo0:x:y:z:w/error_con
x = <module-id>
y = <interface-id>
z = <bundle-id>
w = <cport-id>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:10 +0000 (00:55 +0100)]
greybus: loopback: remove checkpatch error causing macro
checkpatch.pl is choking on a later change to dev_stats_attrs, where
checkpatch expects to see the values encapsulated in curly brackets.
Encapsulating in curly brackets will cause a compiler error. To resolve the
dichotomy this patch drops the macros and adds the arrary declarations
directly.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:09 +0000 (00:55 +0100)]
greybus: loopback: initialized ms_wait negate warning
ms_wait = 0; caught by a compiler warning.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:08 +0000 (00:55 +0100)]
greybus: loopback: add bitmask of connections to include in test
Feature add which enables the ability to select a bit-mask of connections
to run when executing a loopback test set. This is a feature add to
facilitate testing on the firmware side minus the necessity to recompile
firmware to support unicast (v) multicast (v) bitmask.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:07 +0000 (00:55 +0100)]
greybus: loopback: graph round-trip time for all threads
This patch adds the ability to time the delta between all threads like this
t1 = timestmap();
thread1:gb_operation_sync();
thread2:gb_operation_sync();
t2 = timestamp();
In order to enable that behaviour without forcing an undesirable
checkpointing scheme this patch introduces a kfifo for each thread to store
the raw timestamps and calculate a time difference.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:06 +0000 (00:55 +0100)]
greybus: loopback: functionally decompose gb_loopback_calc_latency
The __gb_loopback_calc_latency will be useful in later patches. Provide it
here and use as intended. Later on we just want to use the timestamp
rollover detection, so split it out now.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:05 +0000 (00:55 +0100)]
greybus: loopback: add gb_loopback_nsec_to_usec_latency
A helper function to convert from a nanosecond value to a latency value
expressed in mircoseconds. This will be used again in subsequent patches.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:04 +0000 (00:55 +0100)]
greybus: loopback: support synchronized tests over multiple cports
The loopback code as currently implemented allows free running threads to
blast data to cports in isolation, however no overall stastics are gathered
for the aggregate throughput to a given module.
This patch moves derivation of stastics for all cports to one structure
so that 1 to n cports will report their overall stastics in one place.
Later patches update the sysfs/debugfs accessor functions to provide the
per-module and per-connection data separately.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:03 +0000 (00:55 +0100)]
greybus: loopback: convert sample report interface to debugfs
Greg previously suggested switching over to debugfs instead of a char
interface to report raw samples to user-space. At the time we agreed not
to go for that change. However later patches in this series are made
simpler if debugfs is used instead of /dev, so it makes sense to make the
conversion now for that reason. This patch removes the char interface and
replaces it with a debugfs interface. Raw samples will be acquired from
/sys/kernel/debug/gb_loopback/raw_latency_endo0:x:y:z:w where
x = <module-id>
y = <interface-id>
z = <bundle-id>
w = <cport-number>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:55:02 +0000 (00:55 +0100)]
greybus: loopback: add ability to graph greybus latency
This patch adds the ability to graph the latency of the overhead introduced
by the greybus stack in the roundtrip time AP->Module->AP.
Since this is a small number it is reported in nanoseconds, not
mircoseconds. This data can also be derived with tracepoints but it's being
provided in this format to export to CSV file more easily than with
tracepoints.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Sun, 16 Aug 2015 23:57:16 +0000 (00:57 +0100)]
greybus: interface: change typo replicable => replaceable
'user-replicable' means something that a user can replicate.
'user-replaceable' means something that a user can replace. We defintely
mean to say replaceable not replicable here.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Mon, 17 Aug 2015 16:03:43 +0000 (17:03 +0100)]
greybus: greybus_protocol: remove unused lights macros
Greybus core now handle the _INVALID and PROTOCOL_VERSION types, so no
need to have specific protocol macros for this. Just drop them.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Sat, 15 Aug 2015 03:24:18 +0000 (08:54 +0530)]
greybus: operation: Fix wrong order of arguments
The order of arguments is wrong and that shows up as a warning only on
64 bit machines.
Fixes:
cb0ef0c019ab ("operation: print message type on errors")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Sat, 15 Aug 2015 23:48:03 +0000 (00:48 +0100)]
greybus: makefile: use POSIX functions for kernel cmp
[[, == and echo -e are bash/zsh-ism and not POSIX, so when using a POSIX
shell the kernel_cmp can issue some warnings and not work properly.
Use only POSIX operators for kernel version compare.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Fri, 14 Aug 2015 12:58:19 +0000 (13:58 +0100)]
greybus: lights: add lights implementation
This patch adds lights implementation for Greybus Lights class, it
allows multiplexing of lights devices using the same connection. Also
adds two sysfs entries to led class (color, fade) which are commonly
used in several existing LED devices.
It support 2 major class of devices (normal LED and flash type), for
the first it registers to led_classdev, for the latest it registers in
the led_classdev_flash and v4l2_flash, depending on the support of the
kernel version.
Each Module can have N light devices attach and each light can have
multiple channel associated:
glights
|->light0
| |->channel0
| |->channel1
| | ....
| |->channeln
|->...
|->lightn
|->channel0
|->channel1
| ....
|->channeln
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Fri, 14 Aug 2015 12:58:18 +0000 (13:58 +0100)]
greybus: makefile: add needed config options for lights
Add a function to check kernel versions and append the necessary
options to support LEDS_CLASS, LEDS_CLASS_FLASH and V4L2_FLASH_LED_CLASS
depending of the kernel version.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 14 Aug 2015 11:37:11 +0000 (17:07 +0530)]
greybus: loopback: Print error on data mismatch
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Bryan O'Donoghue <bryan.odnoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 14 Aug 2015 11:37:10 +0000 (17:07 +0530)]
greybus: loopback: Send some sensible data
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Bryan O'Donoghue <bryan.odnoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 14 Aug 2015 02:42:30 +0000 (08:12 +0530)]
greybus: operation: print message type on errors
This can be very useful debug information, print it.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Fri, 14 Aug 2015 02:27:38 +0000 (07:57 +0530)]
greybus: Drop protocol specific _PROTOCOL_VERSION and _INVALID macros
Greybus core supports protocol independent macros for this now, use
them.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Thu, 13 Aug 2015 05:10:28 +0000 (10:40 +0530)]
greybus: connection: Don't free resources freed by gb_connection_release()
We are already doing put_device() here and so don't need to free
resources directly, except ida.
Fixes:
afde17fe0b61 ("greybus/connection: fix jump label on device_add failure")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Thu, 13 Aug 2015 05:05:29 +0000 (10:35 +0530)]
greybus: connection: Destroy wq on failure
Need to destroy the wq created earlier, do it.
Fixes:
d0f1778a6b67 ("greybus/connection: add a timestamp kfifo to track connection handoff")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Thu, 13 Aug 2015 04:34:45 +0000 (10:04 +0530)]
greybus: raw: Move request/response structure/definitions to greybus_protocols.h
These must be exposed to external modules, like gbsim. Move them to
greybus_protocols.h file.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 12 Aug 2015 06:21:11 +0000 (11:51 +0530)]
greybus: hid: Move request/response structure/definitions to greybus_protocols.h
These must be exposed to external modules, like gbsim. Move them to
greybus_protocols.h file.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 12 Aug 2015 06:21:10 +0000 (11:51 +0530)]
greybus: battery: Move request/response structure/definitions to greybus_protocols.h
These must be exposed to external modules, like gbsim. Move them to
greybus_protocols.h file.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 12 Aug 2015 05:34:06 +0000 (11:04 +0530)]
greybus: protocol: send own protocol version while requesting it
The greybus specifications clearly say (for all protocols) that the
sender is responsible for sending the highest version of protocol it
supports, while it requests the same from the receiver.
But the greybus code never followed that.
Fix, this by always sending AP's version of the protocol, while
requesting the same from svc/module.
This also renames 'response' to 'version' in gb_protocol_get_version()
as it is used for both request/response.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Greg Kroah-Hartman [Wed, 12 Aug 2015 05:14:06 +0000 (22:14 -0700)]
greybus: Merge branch 'master' into branch 'svc'.
This drags in the firmware driver, and the start of some loopback
changes.
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 12 Aug 2015 03:49:34 +0000 (09:19 +0530)]
greybus: connection: Send protocol version for firmware protocol
As per greybus specs, we need to send the protocol version for firmware
protocol and so this special case Hack.
Probably we should always send the protocol version AP supports and kill
this hack completely. But then it requires updates to specs as well, and
that should be done after some discussion.
For now, add a FIXME for that and a special case for firmware protocol.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 12 Aug 2015 03:49:33 +0000 (09:19 +0530)]
greybus: Add firmware protocol driver
This adds firmware protocol driver based on the latest specs available
on mailing lists. This uses the firmware framework present in kernel.
Refer Documentation/firmware_class/README on how it works.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 12 Aug 2015 03:49:32 +0000 (09:19 +0530)]
greybus: protocol: Create request structure from within gb_protocol_get_version()
The version request can only send the version of protocol for which it
is initiated and gb_protocol_get_version() has all the information to
create the request structure.
Replace the 'request' and 'request_size' arguments to
gb_protocol_get_version() with a bool to know if the version information
of the protocol should be sent or not.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Wed, 12 Aug 2015 03:49:31 +0000 (09:19 +0530)]
greybus: interface: Preserve data received during hotplug event
This shall be used later to find a firmware blob for the interface, lets
save it in the interface structure.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Tue, 11 Aug 2015 12:50:54 +0000 (13:50 +0100)]
greybus: loopback: handle timestamp roll-over
This patch ensures we account for roll-over in the loopback driver.
do_gettimeofday() is used to grab a timestamp. Two timestamps are derived
one before and one after a gb_operation_sync(), however since
do_gettimeofday() returns the number of seconds and mircoseconds that have
elapsed today - we need to account for a situation where the timestamp
starts at say 23:59:999us rolls over and the end time is now earlier than
the start time.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>