[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