]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: SOF: Intel: export hda_sdw_bpt_get_buf_size_aligment
authorBard Liao <yung-chuan.liao@linux.intel.com>
Tue, 14 Oct 2025 03:14:48 +0000 (11:14 +0800)
committerVinod Koul <vkoul@kernel.org>
Mon, 8 Dec 2025 07:07:26 +0000 (12:37 +0530)
The dma buffer need to be a multiple of data block size and
the fifo size. Export a function to return the LCM of data
block size and the fifo size.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://patch.msgid.link/20251014031450.3781789-6-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
include/sound/hda-sdw-bpt.h
sound/soc/sof/intel/hda-sdw-bpt.c

index f649549b75d52dc976799816fa408e45a0562c4b..9b654c31829ad6568ceefd0f0f7be62eb7eb2948 100644 (file)
@@ -30,6 +30,8 @@ int hda_sdw_bpt_wait(struct device *dev, struct hdac_ext_stream *bpt_tx_stream,
 int hda_sdw_bpt_close(struct device *dev, struct hdac_ext_stream *bpt_tx_stream,
                      struct snd_dma_buffer *dmab_tx_bdl, struct hdac_ext_stream *bpt_rx_stream,
                      struct snd_dma_buffer *dmab_rx_bdl);
+
+unsigned int hda_sdw_bpt_get_buf_size_alignment(unsigned int dma_bandwidth);
 #else
 static inline int hda_sdw_bpt_open(struct device *dev, int link_id,
                                   struct hdac_ext_stream **bpt_tx_stream,
@@ -64,6 +66,11 @@ static inline int hda_sdw_bpt_close(struct device *dev, struct hdac_ext_stream *
        WARN_ONCE(1, "SoundWire BPT is disabled");
        return -EOPNOTSUPP;
 }
+
+static inline unsigned int hda_sdw_bpt_get_buf_size_alignment(unsigned int dma_bandwidth)
+{
+       return 0;
+}
 #endif
 
 #endif /* __HDA_SDW_BPT_H */
index ff5abccf0d88b695393b5772f024c1e105df2ff5..e45dd051ab8c2639e358ccad1373214fdb1cd905 100644 (file)
@@ -10,6 +10,7 @@
  * Hardware interface for SoundWire BPT support with HDA DMA
  */
 
+#include <linux/lcm.h>
 #include <sound/hdaudio_ext.h>
 #include <sound/hda-mlink.h>
 #include <sound/hda-sdw-bpt.h>
@@ -236,6 +237,18 @@ static int hda_sdw_bpt_dma_disable(struct device *dev, struct hdac_ext_stream *s
        return ret;
 }
 
+#define FIFO_ALIGNMENT 64
+
+unsigned int hda_sdw_bpt_get_buf_size_alignment(unsigned int dma_bandwidth)
+{
+       unsigned int num_channels = DIV_ROUND_UP(dma_bandwidth, BPT_FREQUENCY * 32);
+       unsigned int data_block = num_channels * 4;
+       unsigned int alignment = lcm(data_block, FIFO_ALIGNMENT);
+
+       return alignment;
+}
+EXPORT_SYMBOL_NS(hda_sdw_bpt_get_buf_size_alignment, "SND_SOC_SOF_INTEL_HDA_SDW_BPT");
+
 int hda_sdw_bpt_open(struct device *dev, int link_id, struct hdac_ext_stream **bpt_tx_stream,
                     struct snd_dma_buffer *dmab_tx_bdl, u32 bpt_tx_num_bytes,
                     u32 tx_dma_bandwidth, struct hdac_ext_stream **bpt_rx_stream,