[PATCH v10 00/14] ASoC: Intel: Catpt - Lynx and Wildcat point

Andy Shevchenko andriy.shevchenko at linux.intel.com
Tue Sep 29 18:44:53 CEST 2020


On Tue, Sep 29, 2020 at 04:12:33PM +0200, Cezary Rojewski wrote:
> Implement support for Lynxpoint and Wildcat Point AudioDSP. Catpt
> solution deprecates existing sound/soc/intel/haswell which is removed in
> the following series.
> 
> Due to high range of errors and desynchronization from recommendations
> set by Windows solution, re-write came as a lower-cost solution compared
> to refactoring /haswell/ with several series of patches.
> 
> Series is dependent on linux-spi change:
> spi: pxa2xx: Add SSC2 and SSPSP2 SSP registers
> https://www.spinics.net/lists/linux-spi/msg23885.html
> which has been already merged and is now part of linux-spi tree.
> 
> Bulk of series content is device driver core code - everything up to
> patch 7/14 - with fs entries and trace macros introduced right after.
> While each core patch is shaped in such a way that no unavailable
> members are ever called, until patch 14/14 is applied, no code
> compilation can occur as no Makefile is present. Once said patch is
> added, Makefile and Kconfig are implemented and driver module compiles
> as expected.
> 
> 
> Special thanks go to Marcin Barlik and Piotr Papierkowski for sharing
> their LPT/WPT AudioDSP architecture expertise as well as helping
> backtrack its historical background.
> My thanks go to Amadeusz Slawinski for reviews and improvements proposed
> on and off the internal list. Most of internal diff below is his
> contribution.
> Krzysztof Hejmowski helped me setup my own Xtensa environment and
> recompile LPT/WPT FW binary sources what sped up the development greatly.
> 
> This would not have been possible without help from these champions,
> especially considering how quickly the catpt was written: 2 weeks
> features, 3 weeks optimizations. Thank you.
> 
> Userspace-exposed members are compatible with what is exposed by
> deprecated solution as well as FW binary being re-used thus no harm is
> done. The only visible differences are: the newly added 'Loopback Mute'
> kcontrol and volume support extending to quad from stereo.
> 
> On top of fixing erros and design flows, catpt also adds module reload,
> dynamic SRAM memory allocation during PCM runtime and exposes missing
> userspace API: 'Loopback Mute' kcontrol, quad volume controls and sysfs
> fw-version entries. Event tracing is provided to ease solution
> debugging.
> 
> Following are not included in this update and are scheduled as later
> addition:
> - fw logging
> - module (library) support
> 
> Note: LPT power up/down sequences might get aligned with WPT once enough
> testing is done as capabilities are shared for both DSPs.
> Note #2: Both LPT and WPT power up/down sequences may get optimized in
> future updates as thanks to help from the Windows team, most of nuances
> behind why/what/when in regard to hw registers have been backtracked and
> reviewed again.
> 
> Link to developer's deep dive message:
> https://www.spinics.net/lists/alsa-devel/msg113563.html

For all non-tagged, FWIW,
Reviewed-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
thanks!

> Changes in v10:
> - reverted DUAL_MONO case relocation from v9
> - indented all constants of enum catpt_module_id to the same column
> - new newline appended for return path of catpt_dsp_do_send_msg()
> 
> 
> Changes in v9:
> https://www.spinics.net/lists/alsa-devel/msg116305.html
> - fixed newlines in sysfs as requested by Andy, left tags as no other
>   changes done
> - removed volume_map and replaced by simple formulas for volume kcontrol
>   calculations
> - removed redundant parentheses in catpt_get_channel_map() and
>   relocated DUAL_MONO case
> - runtime suspend no longer called during module unload
> - removed redundant size checks for catpt_dsp_send_tx() and
>   catpt_dsp_copy_rx()
> 
> 
> Changes in v8:
> https://www.spinics.net/lists/alsa-devel/msg116168.html
> - updated catpt_arrange_page_table() with GENMASK and U32_MAX usage
> - made use of PFN_DOWN() replacing explicit right shitfs by PAGE_SIZE
> - made fw hash dumping in catpt_coredump() more readable and removed
>   hardcodes
> - catpt_coredump() dumps fw hash now only if said segment has been found
>   within fw_info
> - shortened _MSECS suffixes to _MS
> - IPC structs no longer contain enum members
> - simplified definition of catpt_set_dspvol()
> 
> 
> Changes in v7:
> https://www.spinics.net/lists/alsa-devel/msg116019.html
> - fixed licence header for fs.c
> - renamed fs.c to sysfs.c to better match its purpose
> - added documentation within Documentation/ABI/testing for entries
>   exposed by catpt
> - bin_attribute fw_build replaced by attribute fw_info:
>   fw_info contains full FW information and after successful handshake,
>   it's always available (stored in driver data) so no need to invoke
>   GET_FW_VERSION IPC again, just dump the stored information
> - rather than manually creating and removing sysfs files, now makes use
>   of dev_groups member of struct device_driver 
> - patch: 10/14 'ASoC: Intel: Select catpt and deprecate haswell' has
>   been moved to the back of the list: enable catpt after machine boards
>   have been prepared for it first
> - improved readability of several goto labels
> 
> 
> Changes in v6:
> https://www.spinics.net/lists/alsa-devel/msg115765.html
> - reordered and reorganized code for patches 1/13 - 8/13 of v5, so each
>   patches makes use of no member or function which is unavailable to it.
>   Series size increased from 13 to 14 patches: addition of base members
>   e.g.: registers has been split from addition of device.c file which
>   describes acpi device behavior
> 
> 
> Changes in v5:
> https://www.spinics.net/lists/alsa-devel/msg115621.html
> Basically everything below is result of Andy's review. Thank you Andy
> for taking time into this detailed review
> 
> - catpt now makes use of common linux/pxa2xx_ssp.h header file, removing
>   redundant SSP register declarations in the process. As stated in the
>   opening, this is dependent upon linux-spi change:
>   spi: pxa2xx: Add SSC2 and SSPSP2 SSP registers
> 
> - updated Kconfig by removing DMADEVICES and adding COMPILE_TEST
>   as optional depends-on
> - updated all register macros definitions to be more safe against common
>   arithmetics when specifying macro's parameters
> - removed CONFIG_PM and CONFIG_PM_SLEEP usage in favor of __maybe_unused
> - all 'if (ret < 0)' converted to simple 'if (ret)' whenever possible
> - fixed erroneous check for platform_device_register_data within
>   catpt_register_board()
> - _SLAVE/_MASTER replaced with more inclusive _CONSUMER/_PROVIDER for
>   enum catpt_ssp_mode
> - catpt_acpi_probe() is now making use of high-level wrappers for
>   ioremapping and resource assignment, reducing function's code size
> - due to improved catpt_acpi_probe() behavior, catpt_acpi_remove() needs
>   not to cast dma_free_coherent() any longer
> - DMA source and destrination maxburst now of value 16, see:
> https://www.spinics.net/lists/alsa-devel/msg114394.html
> 
> - simplified catpt_dsp_update_lpclock() as list_for_each_entry() is
>   empty-safe by default
> - dropped '_SSP_' from all names of all CATPT_SSP_SSXXX_DEFAULT macros
> - catpt_updatel_pci now makes use of linux/pci.h and uapi/linux/pci.h
>   constants such as: PCI_PM_CTRL_STATE_MASK and PCI_D3hot
> 
> 
> Changes in v4:
> https://www.spinics.net/lists/alsa-devel/msg113762.html
> - fixed compilation with i386 kconfig (conflicting names)
> - streamlined naming for SHIM and PCI registers to match SSP ones
>   (SHIM_REG -> SHIM)
> - catpt_component_probe removed and kcontrols again initializzed
>   statically via snd_kcontrol_new array: this is to remove
>   kctl->id.device shenanigans
> - renamed catpt_set_ctlvol to catpt_set_dspvol - function name wasn't
>   matching its purpose
> 
> 
> Changes in v3:
> - fixed IRAM mask usage in lpt_dsp_power_up (dsp.c)
> - updated dbg message formatting in catpt_restore_fwimage as suggested
>   by Andy
> - fixed alignment for struct catpt_ssp_device_format
> - catpt_set_ctlvol now verifies all-equal scenario based on all
>   channels rather than just first two as requested by Amadeo
> - fixed SPDX for registers.h
> 
> 
> Changes in v2:
> https://www.spinics.net/lists/alsa-devel/msg113660.html
> - fixed SPDX formatting for all header files as well as pcm.c
> - fixed size provided to memcpy() in fw_build_read() as reported by Mark
> - renamed struct catpt_pdata to struct catpt_spec (cosmetic)
> - fixed erroneous path in catpt_load_block: region is properly released
> - trace.h events for updating registers have been removed and usages
>   replaced by dev_dbg (SRAMPGE/ LPCS)
> 
> - as requested by Andy, struct resource has replaced struct catpt_mbank
>   and struct catpt_mregion. This change cascaded into:
> 
>   - catpt_mbank_size and catpt_mregion_size replaced by resource_size
>   - catpt_mregion_intersects replaced by resource_overlaps
>   - all catpt_mbank_ and catpt_mregion_ handlers found in loader.c
>     (_request, _reserve, _release, _extract, _split, _join) have been
>     removed
>   - __request_region and __release_region have been enlisted in their
>     place
>   - catpt_mregion_intersecting renamed to catpt_resource_overlapping
>   - catpt_request_region helper has been provided to deal with -size
>     based requests
>       o haven't found direct replacements in resource.c/ ioport.h for
>       both functions
> 
>   - catpt_mbank_create and catpt_mbank_remove renamed to catpt_sram_init
>     and catpt_sram_free respectively
>   - catpt_sram_init now returns void instead of int and has been
>     converted to simple initialized. This change ultimately cascaded
>     into:
>       o both SRAM banks initialization being moved to catpt_dev_init
>         from catpt_acpi_probe (device.c)
>       o catpt_dev::spec is now initialized first, with catpt_dev_init
>         following it soon after
>       o catpt_acpi_probe erroneous path has been simplified as SRAM
>         banks no longer need to be freed
> 
>   - catpt_sram_free now frees all resources via child -> sibling
>     enumeration rather than region_list iteration
>   - catpt_dsp_update_srampge and catpt_dsp_set_srampge now accept new
>     argument: unsigned long mask. Caused by removal of catpt_mbank -
>     mask is taken directly from catpt_dev::spec::d/iram_mask
>   - trace.h events for catpt_mbank and catpt_mregion have been removed
> 
> 
> Diff against last drop on internal list:
> https://www.spinics.net/lists/alsa-devel/msg113549.html
> - replaced spinlock with mutex for mregion allocation and release to
>   address sleeping in atomic context warnings
> - fixed coredump fw_hash dumping
> - kcontrol values are now always stored regardless of stream of interest
>   is running or not
> - kcontrol values are now applied after stream is prepared instead of
>   ignoring what has been set by user initially
> - catpt_pdata instances have been renamed from hsw_ and bdw_ to lpt_ and
>   wpt_ respectively
> - reordered Makefile .o(s) (cosmetic)
> 
> 
> Cezary Rojewski (14):
>   ASoC: Intel: Add catpt base members
>   ASoC: Intel: catpt: Implement IPC protocol
>   ASoC: Intel: catpt: Add IPC message handlers
>   ASoC: Intel: catpt: Define DSP operations
>   ASoC: Intel: catpt: Firmware loading and context restore
>   ASoC: Intel: catpt: PCM operations
>   ASoC: Intel: catpt: Device driver lifecycle
>   ASoC: Intel: catpt: Event tracing
>   ASoC: Intel: catpt: Simple sysfs attributes
>   ASoC: Intel: haswell: Remove haswell-solution specific code
>   ASoC: Intel: broadwell: Remove haswell-solution specific code
>   ASoC: Intel: bdw-5650: Remove haswell-solution specific code
>   ASoC: Intel: bdw-5677: Remove haswell-solution specific code
>   ASoC: Intel: Select catpt and deprecate haswell
> 
>  .../ABI/testing/sysfs-bus-pci-devices-catpt   |   16 +
>  sound/soc/intel/Kconfig                       |   24 +-
>  sound/soc/intel/Makefile                      |    2 +-
>  sound/soc/intel/boards/Kconfig                |    8 +-
>  sound/soc/intel/boards/bdw-rt5650.c           |   36 -
>  sound/soc/intel/boards/bdw-rt5677.c           |   33 -
>  sound/soc/intel/boards/broadwell.c            |   33 -
>  sound/soc/intel/boards/haswell.c              |   28 +-
>  sound/soc/intel/catpt/Makefile                |    6 +
>  sound/soc/intel/catpt/core.h                  |  188 +++
>  sound/soc/intel/catpt/device.c                |  352 +++++
>  sound/soc/intel/catpt/dsp.c                   |  578 ++++++++
>  sound/soc/intel/catpt/ipc.c                   |  298 +++++
>  sound/soc/intel/catpt/loader.c                |  671 ++++++++++
>  sound/soc/intel/catpt/messages.c              |  313 +++++
>  sound/soc/intel/catpt/messages.h              |  401 ++++++
>  sound/soc/intel/catpt/pcm.c                   | 1175 +++++++++++++++++
>  sound/soc/intel/catpt/registers.h             |  178 +++
>  sound/soc/intel/catpt/sysfs.c                 |   55 +
>  sound/soc/intel/catpt/trace.h                 |   83 ++
>  20 files changed, 4335 insertions(+), 143 deletions(-)
>  create mode 100644 Documentation/ABI/testing/sysfs-bus-pci-devices-catpt
>  create mode 100644 sound/soc/intel/catpt/Makefile
>  create mode 100644 sound/soc/intel/catpt/core.h
>  create mode 100644 sound/soc/intel/catpt/device.c
>  create mode 100644 sound/soc/intel/catpt/dsp.c
>  create mode 100644 sound/soc/intel/catpt/ipc.c
>  create mode 100644 sound/soc/intel/catpt/loader.c
>  create mode 100644 sound/soc/intel/catpt/messages.c
>  create mode 100644 sound/soc/intel/catpt/messages.h
>  create mode 100644 sound/soc/intel/catpt/pcm.c
>  create mode 100644 sound/soc/intel/catpt/registers.h
>  create mode 100644 sound/soc/intel/catpt/sysfs.c
>  create mode 100644 sound/soc/intel/catpt/trace.h
> 
> -- 
> 2.17.1
> 

-- 
With Best Regards,
Andy Shevchenko




More information about the Alsa-devel mailing list