Implement the new module inserted and removed operations.
The SVC sends these after detecting a module insertion or removal, and
in the former case after having determined the module geometry (i.e.
position and size).
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Implement the interface activation and power-down sequences.
Note that all the required SVC operations have not yet been implemented
so some stub functions are used for now.
Support for hibernating the UniPro link depends on future
power-management work so a stub function is used also for this.
Interface type handling will be refined later.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Add message structures (based on the current spec) for the SVC Interface
Activate operation, and a stub function that always return the Greybus
interface type.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Add active state flag to avoid deactivating an interface which is
already off.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Implement controlled module removal through a new module attribute
"eject".
When a non-zero argument is written to the attribute, all interfaces of
the module are disabled (e.g. bundles are deregistered) and deactivated
(e.g. powered off) before instructing the SVC to physically eject the
module.
Note that the module device is not deregistered until the SVC has
reported the physical removal of all of its interfaces.
A new interface mutex is added to enforce interface state-change
serialisation.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Add Greybus module abstraction that will be used to implement controlled
module removal (eject) and represent module geometry.
Greybus module devices correspond to physical modules and have one or
more interfaces. Modules have an id that is identical to the id of their
primary interface, which in turn is the interface with lowest numbered
id. The module name is constructed from the bus and module id:
<bus_id>-<module_id>
Interfaces, bundles, and control devices are consequently renamed as
<bus_id>-<module_id>.<interface_id>
<bus_id>-<module_id>.<interface_id>.<bundle_id>
<bus_id>-<module_id>.<interface_id>.ctrl
As before, interface ids (and therefore in a sense now also module ids)
correspond to physical interface positions on the frame.
Modules have the following attributes:
module_id
num_interfaces
where module_id is the id of the module and num_interface the number of
interfaces the module has.
Note that until SVC module-size detection has been implemented, all
interfaces are considered to be part of 1x2 modules. Specifically, the
two interfaces of a 2x2 module will be presented as two 1x2 modules for
now.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Add interface re-enable helper that is used during mode switch to
disable and re-enable (enumerate) an interface.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The attribute entries have been kept mostly sorted within each device
type. Let's move the three more-recently added interface attributes
that were not.
Suggested-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Add an entry for the recently added interface control device.
Also move the bundle-device entry below the control-device entries.
Reported-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Use the common gb_svc functions also for the recently added svc
functions. Having a common prefix clearly signals where the code
resides, something which improves readability and helps during
debugging (e.g. stack traces).
Note that all functions in svc.c except for these three use the common
prefix with the exception of the pwr_debugfs callbacks (that still use
*a* common prefix) and the attribute accessors (than can not have a
common prefix due to some macro magic).
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This change was missed while merging original patch
commit-id: 53c765c33f4a69c31027ec012e717d303bd4feca
Thus submitting it again.
Signed-off-by: Vaibhav Agarwal <vaibhav.agarwal@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
We have chosen the *ugly* way of registering two platform drivers from
the module_init() of only one of them, so that we can avoid having two
separate modules for them.
But we should still be doing this in a sane way. There is no need to
expose internals of arche-ctrl to arche-platform, like PM-ops, probe,
resume, id-table, etc. Just expose an init and a exit callback.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
use pm_stay_awake & pm_relax to avoid suspend sequence during
active playback
testing Done:
Music Playback ongoing
$ cat /sys/devices/soc.0/qcom,ara-codec.82/power/wakeup_active
1
Music Playback stopped
$ cat /sys/devices/soc.0/qcom,ara-codec.82/power/wakeup_active
0
Tested-by: David Lin <dtwlin@google.com>
Reviewed-by: David Lin <dtwlin@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Akash Choudhari <akashtc@google.com>
Signed-off-by: Vaibhav Agarwal <vaibhav.agarwal@linaro.org>
We really shouldn't be passing response structures around this way, but
since we now are, let's at least make sure not to break the 80 col
limit.
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>
Errno -ENOSYS is reserved for missing syscalls, replace it with ENOMSG.
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>
All SVC error messages, except for a few recently added ones, place the
errno last after a colon (:). Let's at least try to be consistent
within the svc code.
Note that this format also allows for more concise messages without risk
for ambiguity.
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>
This makes it more readable, as the functions are present in this order
in the structure as well. Also keeping these two makes more sense.
Tested by removing the gb-es2.ko module on both EVT1.5 and qemu with
gbsim.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
-ENOENT or -ESHUTDOWN happens when the urbs are being killed from
->disconnect() callback. Don't complain to userspace about this, as the
user will see this on es2 module removal.
Tested by removing the gb-es2.ko module on both EVT1.5 and qemu with
gbsim. The driver doesn't throw anymore errors like:
"urb cport in error -2 (dropped)".
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: David Lin <dtwlin@google.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This allows greybus to do operations before being removed.
Tested by removing the gb-es2.ko module on both EVT1.5 and qemu with
gbsim. The driver removes the greybus host device successfully before
disabling the urbs. The errors are still coming ("urb cport in error -2
(dropped)"), but with an error value -2 (ENOENT) instead of -108. And
that happens while the urbs are disabled, not while doing greybus
operations.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: David Lin <dtwlin@google.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The usb core disables the Interface prior to calling ->disconnect() for
the usb driver. That disallows the es2 driver to remove the greybus host
device and every entity below it in a clean way, as the greybus core may
want to do few operations over the usb connection before getting
removed.
And so we see bunch of errors while we remove the es2 module, like:
"urb cport in error -108 (dropped)"
The usb core has a special per-driver flag, 'soft_unbind', for such usb
drivers. If this flag is set by a driver, the usb core doesn't disable
the Interface prior to calling ->disconnect().
Set that flag for es2.
Tested by removing the gb-es2.ko module on both EVT1.5 and qemu with
gbsim. The interface isn't disabled by the core and the driver is still
able initiate greybus operations over the Interface. This can be
properly tested only after the next patch which removes the greybus host
device before disabling the urbs.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This fixes below warnings ..
greybus/audio_codec.c:20:32: warning: symbol 'find_data' was not declared. Should it be static?
greybus/audio_codec.c:955:6: warning: symbol 'gbaudio_codec_cleanup' was not declared. Should it be static?
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Vaibhav Agarwal <vaibhav.agarwal@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The number of CSI TX lanes is hardcoded to 4. Removing
this and start using value from configure stream response.
NOTE: The patch depends on the CSI init change:
"Use GB CSI params to init camera sub-devs"
Signed-off-by: Evgeniy Borisov <eborisov@mm-sol.com>
Reviewed-by: Gjorgji Rosikopulos <grosikopulos@mm-sol.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Read on apb_log causes null pointer exception due to the missing es2
device pointer passing to the debugfs.
Testing done:
- Enable apb_log and cat it
Signed-off-by: David Lin <dtwlin@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The check for line coding changed should use memcmp and not memcpy.
Testing done: trivial
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Axel Haslam <ahaslam@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Remove unnecessary interface-remove helper.
Also add comment about why the disconnected flag is set.
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>
Keep a detected interface registered until it is physically removed.
Specifically, do not re-register an interface that is switching mode.
Note that this also allows us to get rid of some nasty hacks from core.
The Ara VID/PID bootrom hack for ES2 will continue to work, but is now
mostly confined to the bootrom driver.
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>
Make sure to deactivate all interfaces when the svc is going away.
This is needed to eventually be able to do controlled teardown of the
unipro network.
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>
Make the control-device lifetime coincide with when the interface is
enabled (enumerated).
This is needed to be able register a new control device after a mode
switch.
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>
Return an error pointer when failing to create a control device.
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>
The control device is an abstraction of the control connection over
which a greybus manifest is retrieved. As interfaces switch modes (e.g.
after boot-over-unipro) they expose new manifests, which can contain
different vendor and product strings.
Eventually control devices will be deregistered and recreated after an
interface mode switch, while the interface itself remains registered.
Note that only interfaces of type greybus will have control devices.
Specifically, dummy interfaces will not.
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>
Make sure to register also the control device along with any bundles
when registering an interface.
Note that we currently ignore failures to register the control device
just as we do for bundle devices.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Make the control object be a greybus device.
The control device will be used to expose attributes specific to
greybus-type interfaces.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Move the timesync-operation functions above the control-object
management functions, which is where all other operation implementations
reside.
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>
Add control devices to the example sysfs tree.
Control devices are named
<bus_id>-<module_id>.<intf_id>.ctrl
and expose attributes that are specific to the greybus interface type.
Specifically, dummy interfaces do not have a control device.
Currently, only the vendor and product strings extracted from the
manifest are exported.
A subtree of the example tree now looks as follows:
greybus1/
├── 1-5
│ ├── 1-5.5
│ │ ├── 1-5.5.2
│ │ │ ├── bundle_class
│ │ │ ├── bundle_id
│ │ │ └── state
│ │ ├── 1-5.5.ctrl
│ │ │ ├── product_string
│ │ │ └── vendor_string
│ │ ├── ddbl1_manufacturer_id
│ │ ├── ddbl1_product_id
│ │ ├── interface_id
│ │ ├── product_id
│ │ ├── serial_number
│ │ └── vendor_id
│ ├── 1-5.6
│ │ └── interface_id
│ ├── eject
│ ├── module_id
│ └── num_interfaces
└── 1-svc
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>
The svc eject attribute was added as an interim solution and is still
used to implement a form of forced ejection.
This will soon be superseded by the module eject attribute, which will
provide an interface for clean eject. We may keep the forced-eject
mechanism around indefinitely, albeit possibly with a different name
(e.g. forced_intf_eject). Either way, update the example tree to reflect
the actual name, intf_eject, which currently used for this svc attribute.
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>
Remove the interface unique_id attribute, which there is currently no
plan to ever implement.
Note that the Ara serial numbers are already exposed through the
serial_number attribute.
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>
Move the interface power attributes after the other interface attributes
to keep the attributes grouped by device type.
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>
The manifest-parsing code could end up leaving the interface
vendor_string set to an error pointer that we'd eventually try to free
when destroying 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>
When transfer speed is too slow (less than 17Khz) the operation can take
longer than the default greybus timeout. Because of this we need to use
the request_send_sync_timeout and calculate the correct timeout for each
operation.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Tested-by: Philip Yang <philipy@bsquare.com>
Tested-by: Axel Haslam <ahaslam@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The actual implementation of transfer_one_message have problems with
some cases in the possible transfer options. We try to maximize the
number of spi transfers in one greybus operation and need to save state
until the full message is dispatch over greybus.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Tested-by: Philip Yang <philipy@bsquare.com>
Tested-by: Axel Haslam <ahaslam@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
SVC watchdog should be disabled when device is entering suspend mode.
Testing done:
- Sanity tested on EVT1.5
- Check no SVC ping during the suspend process
- Check SVC watchdog is back on pinging once device is resumed
Signed-off-by: David Lin <dtwlin@google.com>
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
[vaibhav.hiremath@linaro.org: Removed unwanted check in notifier callback and
Updated commit description]
Tested-by: Sandeep Patil <sspatil@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Switch off APBs/SVC/Switch in the suspend call notifier. Note that
this is an interim solution to enable fishfooding.
Testing done:
- Passed QA sanity test on EVT1.5
- Suspend current measured at ~70mW
Signed-off-by: David Lin <dtwlin@google.com>
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
[vaibhav.hiremath@linaro.org: Updated commit description]
Tested-by: Sandeep Patil <sspatil@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
A number of data in TimeSync command structures are declared __u64/__u32
instead of __le64/__le32, I forgot to put this through an x86_64 compile
before presentation for merge and as a result didn't catch this error. This
patch fixes.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Earlier during boot sequence implementation, we had seen race between
USb3613 and APB boot, and since APB boot time is ~2sec, we delayed
USb3613 configuration for 2sec after APB deassertion of reset.
This obviously won't work in the case of suspend/resume, where we would
like to put APB into OFF state and coldboot in resume.
With the latest FW changes, we do not see any race issue. I have done
regression testing (> 50 iteration of reboot + unipro link up and down)
without any issues.
So lets get rid of the 2sec delay with this patch.
Testing Done: Tested on EVT 1.5 platform.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Tested-by: David Lin <dtwlin@google.com>
Reviewed-by: David Lin <dtwlin@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Extending the configure streams interface with CSI params.
Getting CSI frequency data form configure streams response.
* num_lanes - Number of CSI data lanes
* clk_freq - CSI clock frequency in Hz
* lines_per_second - Total number of lines in a second of
transmission (blanking included)
From the AP side we need to know for the CSI speed
configuration. This information is needed for dynamically
bandwidth calculations.
NOTE: Change should be along merged with corresponding
interface change in kernel:
"camera: Extend the configure streams
interface with CSI params"
Signed-off-by: Evgeniy Borisov <eborisov@mm-sol.com>
Reviewed-by: Gjorgji Rosikopulos <grosikopulos@mm-sol.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This change implements the AP Power Monitor functions for obtaining
current/voltage/power on a specific rail of an Interface.
Testing Done:
$ cat /sys/bus/greybus/devices/1-3/current_now
103
$ cat /sys/bus/greybus/devices/1-3/power_now
303
$ cat /sys/bus/greybus/devices/1-3/voltage_now
203
Signed-off-by: David Lin <dtwlin@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>