svc_reset_gpio is guaranteed to be valid in arche_platform_cleanup. Drop
the useless check.
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>
The current implementation around of_platform_populate() is not so
great. On error, we first print an error message, followed by a success
message and finally we return an error.
And over that we don't undo what we did initially.
This patch puts the APB back into reset and create a separate error
path to make things clear.
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>
Populating APBs operation can potentially fail and it would be better if
we export the GPIOs towards then end of the routine, so that we don't
need to unexport them on error cases.
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>
arche_pdata is guaranteed to be valid in arche_platform_remove().
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>
The bootrom protocol issues no dynamic debugging messages when it functions
successfully. Use dev_dbg() to fix that by issuing kernel logs when firmware
download works.
Signed-off-by: Eli Sennesh <esennesh@leaflabs.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Use the host device and connection name when logging errors as the
version-request helper must not assume that all connection have a
bundle.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The bus code should only match bundle devices for now, and must not
assume all greybus devices are bundles.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Add missing bus type to driver structure when registering a greybus
driver.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Add support for the flags field of the stream configure request that was
recently added to the camera protocol and update the debugfs arguments
parsing accordingly. The stream configure response layout is also
updated to the latest protocol specification.
Signed-off-by: Jacopo Mondi <jacopo.mondi@linaro.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The link config operation was a hack only designed to fulfill the camera
driver's needs. Now that a standard operation is defined for the same
purpose, implement it and remove the hack.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
With addition of handshaking between AP <=> SVC, driver
brings out APB out of reset only on reception of WAKE_MOD
signal from SVC. So remove the deassertion from probe.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This patch enables handshaking of AP and SVC using wake_detect
gpio (WD_8A and WD_8B).
Note that WAKE_DETECT polarity is active-high, so in order to
enable handshaking between AP <=> SVC, we need to set wake_detect
gpio to low initially, so that driver can send WAKE_DET signal
(active-high) to SVC and then SVC can send back WAKE_MOD signal
(active-low).
And on reception of WAKE_MOD signal, driver would bring respective
APB out of reset.
WD_8A => APB1
WD_8B => APB2
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
In order to allow user to flash the firmware to,
SVC:
user need to assert the reset first, set sysboot pin and
deassert reset. And then issue a flashing command.
And APB:
User need to assert the reset first, and then issue flashing
command.
So this patch exports the gpio's to user.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Use 4 lanes at 960MHz to support camera modules requiring higher
bandwidths until we implement support for dynamic bandwidth calculation.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
No need to have two separate arche platform drivers, that's just crazy,
so merge them both together to be only one kernel module.
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Tested-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
It seems we need to delete platform_dev of all childs explicitly,
in _remove() fn callback of parent driver.
There were some discussions about having of_platform_unpopulate(),
but it never made it to mainline.
https://lkml.org/lkml/2013/7/19/615
There are some drivers which are removing platform_dev explicitly,
as done in this patch.
Note that, without this, multiple insmod-rmmod won't work, as I see
driver probe gets invoked twice and leads to failure of probe.
Signed-off-by: Vaibhav Hiremath <hiremath_vaibhav@projectara.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Make sure to tear down the data connection also on failure to configure
the link by setting the data_connected flag immediately after creating
the connection.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Fix memory leak in capture-request handler by making sure to release the
operation request buffer after sending the request.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Fix memory leak in configure-streams error path by making sure to
release the operation buffers before returning.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
The version of the currently running firmware on the module is useful
for userspace as it can be used to find if an update is available or
not. This patch fetches interface's version with a new control operation
and exposes the same in userspace.
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>
Two exactly same modules can be uniquely identified using module's
serial-number. This patch updates the interface hotplug event to also
receive the serial-number of the module.
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>
gb_svc_read_and_clear_module_boot_status() relies on the values of
ddbl1_manufacturer_id and ddbl1_product_id to distinguish between ES2
and ES3 chips, but those values are set for the interface structure only
after gb_svc_read_and_clear_module_boot_status() is called.
This makes ES2 module to fail with following errors:
greybus 1-2: Module not ready yet
greybus 1-svc: failed to clear boot status of interface 2: -19
Fix this by setting these values before calling
gb_svc_read_and_clear_module_boot_status().
Fixes: 51f1dc421b1f ("firmware and svc: detect the difference between ES2 and ES3 chips")
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>
The greybus specification reserves SVC type 0x0d-0x0f for timesync.
53124d73 ('svc: Add support for the link config operation') allocated the
next available type 0x0d which conflicts with the specification. Change the
type to 0x10 to ensure kernel and specification agree.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
We already have macro's defined for this, use them.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Until we have proper handshake mechanism implemented with SVC
assert reset to APB at the end of probe.
We are safe here to do that, as SVC always enables clock to APB's
currently.
And also from EVT1 perspective, we should be good, as clock control
signals are now moved to AP.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
It was messy to integrate both SVC, APB (and any other arche
platform specific control) into one single driver. Especially
due to cross-dependency.
AP first needs to bringup SVC, as SVC should enable clock to APB.
APB should come up before HUB, as due to some reason HUB wouldn't
enumerate APB's is APB comes up later.
And on top of that we should have clean picture of hardware description
in DT file.
So this patch introduces APB control driver. Mostly copied from original
arche-platform driver + fixed boot sequence.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>