The parameter "async" in wfx_cmd_send() allows to send command without
waiting for the reply. In this case, the mutex hif_cmd.lock is released
asynchronously in the context of the receiver workqueue.
However, "kbuild test robot" complains about this architecture[1] since
it is not able to follow the lock duration of hif_cmd.lock (and indeed,
the state of the driver if the hardware wouldn't reply is not well
defined).
Besides, this feature is not really necessary. It is only used by
hif_shutdown(). This function hijack the 'async' flag to run a command
that won't answer.
So, this patch removes the 'async' flag and introduces a 'no_reply' flag.
Thus, the mutex hif_cmd.lock is only acquired/released from
hif_cmd_send(). Therefore:
- hif_shutdown() does not have to touch the private data of the struct
hif_cmd
- Kbuild test robot should be happy
- the resulting code is simpler
[1] https://lore.kernel.org/driverdev-devel/alpine.DEB.2.21.1910041317381.2992@hadrien/
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200907101521.66082-31-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
hif_tx_mib.c contains functions that format data to be sent to the
hardware. In this file, sometime the struct to be sent is named 'arg',
sometime 'val'. In some other function 'val' is used for the argument of
the function.
This patch uniformize the things and choose to call all the data in
destination to the hardware 'arg' (note this choice is only dictated by
the number of lines to change in the code)
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200907101521.66082-30-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The device allows to filter multicast frames. The driver has the
necessary code to take advantage of this feature. However, some bugs
has been reported on this feature. So, it was temporary disabled.
Finally, the things work well as-is for more than one year now. So there
is no plan to enable this feature in near future.
Since we dislike to maintain dead code, drop it.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200907101521.66082-7-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The Secure Link (slk) feature allows to encrypt (and authenticate) the
traffic between the host and the device. The official implementation of
this feature relies on mbedTLS. For that reason, this implementation is
not included in the current driver. To be included, the implementation
has to rely on kernel crypto API instead of mbedTLS.
So, for now, the driver contained stub functions waiting for the new
implementation based on kernel crypto API.
This new implementation represent a bunch of work and it is unlikely to
be done in near future. Moreover, we strongly dislike to maintain
useless code. So, drop all the code related to secure link.
Whoever wants to implement secure link should revert this patch before
starting to work on it.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200907101521.66082-6-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The file hif_tx_mib.c expects to contain functions that format messages
for the hardware. It is unexpected to find function that manipulate
RCU and structures from mac80211.
Keep hif_set_association_mode() with the code necessary for message
formatting and relocate the smart part in wfx_join_finalize().
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200907101521.66082-4-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jonathan writes:
First set of new device support, features and cleanup for IIO in 5.10 cycle, take 2
A few changes to how I write this cover letter.
* Started to use manufacturer prefixes to group changes better.
* Stop list minor formatting etc changes.
* Whilst I appreciate those changes, we don't need to call them out here.
New device support:
* adi,adxrs290
- New driver for this gyroscope with dt bindings. One fix follows.
* ams,as73211
- New driver for this colour sensor with dt bindings. Also includes
docs for XYZ modifiers as used for the CIE colour space. Sysfs docs.
* atlas,atlas-ezo-sensor
- Support O_2 sensor, includes new modifier for concentration.
- Support humidity sensor.
* ti,hdc2010
- New driver support hdc2010 and hdc2080 humidity sensors. Includes dt
bindings.
Cleanup, minor fixes and features
* core
- Make the trigger related stub functions static inline, avoiding some build
warnings.
- buffer-dmaengine. Allow adjusting bytes_used with residue info.
* dev_error_probe to replace open coded equivalent in many drivers.
* docs and comment fixes
- Fix some typos, doubled words, capitalisation and punctuation.
* dt binding conversions to yaml
- lltc,ltc2497
- lltc,ltc2632
- maxim,max11100
- maxim,max1118
- maxim,max9611
- microchip,mcp3201
- microchip,mcp342x (add to trivial devices)
- ti,adc0832
- ti,adc108s102
- ti,adc128s052
- ti,adc161s626
- ti,ads8344
- ti,tlc4541 (includes adding an accidentally dropped original binding doc)
* adi,adi-axi-adc
- Use kobj_to_dev instead of open coding.
* adi,ad5686
- Constify iio_chan_spec
* adi,ad8366
- Add HMC1119 to kconfig help text as the driver supports it.
* adi,ad9523
- Use devm for reset of probe and drop remove.
* adi,adxl372
- Tidy up alignment
- Add OF table
- Add peak mode support with some docs.
* bosch,bma220 (general tidy up)
- Fix some return codes.
- Use read_avail callback rather than open coding attrs.
- Use dev_get_drvdata rather than dance via to_spi_device()
- Mark PM functions as __maybe_unused rather than #ifdef fun.
- Drop ACPI_PTR protections and ifdefs.
- Tidy up header ordering.
- BIT and GENMASK
* broadcom,bcm_iproc
- Drop of_match_ptr protection and switch to mod_devicetable.h
Part of general move to get this anti-pattern out of IIO.
* melexis,mlx90614
- Simplify some calculations.
- Add some kernel_doc
- Use regmap poll loop rather than open coding.
- Add extended calibration option.
* sensortec,sx9310, wide ranging set of fixes and cleanups.
- Document dt-binding.
- Rename some macros to align better with spec sheet
- Fix some issues with irq handling.
- Drop of_match_ptr and ACPI_PTR macros to avoid unused warnings etc.
- Switch to probe_new
- Fix memory alignment for iio_push_to_buffers_with_timestamp()
- Use long for bitmaps to allow use of for_each_bit_set()
- Use regmap_read_poll instead of opencoding.
- Simplify error paths
- Enabled regulators at probe.
- Use trigger flags from firmware rather than forcing them in the driver.
* ti,adc081c
- Drop ACPI IDs that are not likely to be official ones and we don't believe
anyone is using.
* ti,adc108s102
- Drop CONFIG_OF and of_match_ptr protections.
* ti,adc128s052
- Drop of_match_ptr protection and include mod_devicetable.h
* ti,dac5571
- Support powerdown for mutlichannel usecases.
* xpowers,axp20x
- Convert from OF to generic fw / device properties. Unlikely anyone will
use this with anything other than devicetree, but this is part of a
general move across IIO.
* tag 'iio-for-5.10a-take2' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio: (96 commits)
drivers/iio/humidity/hdc2010.c:305:2-3: Unneeded semicolon
iio: accel: bma220: Remove unneeded blank lines
iio: accel: bma220: Use BIT() and GENMASK() macros
iio: accel: bma220: Group IIO headers together
iio: accel: bma220: Drop ACPI_PTR() and accompanying ifdeffery
iio: accel: bma220: Mark PM functions as __maybe_unused
iio: accel: bma220: Use dev_get_drvdata() directly
iio: accel: bma220: Convert to use ->read_avail()
iio: accel: bma220: Fix returned codes from bma220_init(), bma220_deinit()
dt-bindings: iio: adc: microchip,mcp3201 yaml conversion.
iio: buffer-dmaengine: adjust `bytes_used` with residue info
dt-bindings: iio: adc: ti,tlc4541 binding conversion
dt-bindings: iio: adc: tlc4541 - recover accidentally dropped binding doc
dt-bindings: iio: adc: ti,ads8344 yaml conversion
dt-bindings: iio: adc: ti,adc128s052 yaml conversion.
dt-bindings: iio: adc: ti,adc0832 yaml conversion.
dt-bindings: iio: adc: ti,adc161s626 yaml conversion.
dt-bindings: iio: adc: lltc,ltc2497 yaml conversion.
dt-bindings: iio: adc: ti,adc108s102 yaml conversion
dt-bindings: trivial-devices: Add mcp342x ADCs and drop separate binding doc.
...
The Documentation/DMA-API-HOWTO.txt states that the dma_map_sg() function
returns the number of the created entries in the DMA address space.
However the subsequent calls to the dma_sync_sg_for_{device,cpu}() and
dma_unmap_sg must be called with the original number of the entries
passed to the dma_map_sg().
struct sg_table is a common structure used for describing a non-contiguous
memory buffer, used commonly in the DRM and graphics subsystems. It
consists of a scatterlist with memory pages and DMA addresses (sgl entry),
as well as the number of scatterlist entries: CPU pages (orig_nents entry)
and DMA mapped pages (nents entry).
It turned out that it was a common mistake to misuse nents and orig_nents
entries, calling DMA-mapping functions with a wrong number of entries or
ignoring the number of mapped entries returned by the dma_map_sg()
function.
To avoid such issues, lets use a common dma-mapping wrappers operating
directly on the struct sg_table objects and use scatterlist page
iterators where possible. This, almost always, hides references to the
nents and orig_nents entries, making the code robust, easier to follow
and copy/paste safe.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20200904131711.12950-27-m.szyprowski@samsung.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>