Hi Arun,

kernel test robot noticed the following build warnings:

[auto build test WARNING on broonie-sound/for-next]
[also build test WARNING on linus/master v6.16-rc3 next-20250625]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    
https://github.com/intel-lab-lkp/linux/commits/Arun-Raghavan/ASoC-fsl_sai-Force-a-software-reset-when-starting-in-consumer-mode/20250625-210824
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 
for-next
patch link:    
https://lore.kernel.org/r/20250625130648.201331-1-arun%40arunraghavan.net
patch subject: [PATCH] ASoC: fsl_sai: Force a software reset when starting in 
consumer mode
config: arc-randconfig-002-20250626 
(https://download.01.org/0day-ci/archive/20250626/202506260745.z7pler3i-...@intel.com/config)
compiler: arc-linux-gcc (GCC) 13.3.0
reproduce (this is a W=1 build): 
(https://download.01.org/0day-ci/archive/20250626/202506260745.z7pler3i-...@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <l...@intel.com>
| Closes: 
https://lore.kernel.org/oe-kbuild-all/202506260745.z7pler3i-...@intel.com/

All warnings (new ones prefixed by >>):

   sound/soc/fsl/fsl_sai.c: In function 'fsl_sai_trigger':
>> sound/soc/fsl/fsl_sai.c:848:21: warning: the comparison will always evaluate 
>> as 'true' for the address of 'is_consumer_mode' will never be NULL 
>> [-Waddress]
     848 |                 if (sai->is_consumer_mode) {
         |                     ^~~
   In file included from sound/soc/fsl/fsl_sai.c:24:
   sound/soc/fsl/fsl_sai.h:287:14: note: 'is_consumer_mode' declared here
     287 |         bool is_consumer_mode[2];
         |              ^~~~~~~~~~~~~~~~


vim +848 sound/soc/fsl/fsl_sai.c

   814  
   815  static int fsl_sai_trigger(struct snd_pcm_substream *substream, int cmd,
   816                  struct snd_soc_dai *cpu_dai)
   817  {
   818          struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai);
   819          unsigned int ofs = sai->soc_data->reg_offset;
   820  
   821          bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
   822          int adir = tx ? RX : TX;
   823          int dir = tx ? TX : RX;
   824          u32 xcsr;
   825  
   826          /*
   827           * Asynchronous mode: Clear SYNC for both Tx and Rx.
   828           * Rx sync with Tx clocks: Clear SYNC for Tx, set it for Rx.
   829           * Tx sync with Rx clocks: Clear SYNC for Rx, set it for Tx.
   830           */
   831          regmap_update_bits(sai->regmap, FSL_SAI_TCR2(ofs), 
FSL_SAI_CR2_SYNC,
   832                             sai->synchronous[TX] ? FSL_SAI_CR2_SYNC : 0);
   833          regmap_update_bits(sai->regmap, FSL_SAI_RCR2(ofs), 
FSL_SAI_CR2_SYNC,
   834                             sai->synchronous[RX] ? FSL_SAI_CR2_SYNC : 0);
   835  
   836          /*
   837           * It is recommended that the transmitter is the last enabled
   838           * and the first disabled.
   839           */
   840          switch (cmd) {
   841          case SNDRV_PCM_TRIGGER_START:
   842          case SNDRV_PCM_TRIGGER_RESUME:
   843          case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
   844                  /*
   845                   * Force a software reset if we are not the clock 
provider, as we
   846                   * might have lost frame sync during xrun recovery.
   847                   */
 > 848                  if (sai->is_consumer_mode) {
   849                          regmap_update_bits(sai->regmap,
   850                                          FSL_SAI_xCSR(tx, ofs), 
FSL_SAI_CSR_SR,
   851                                          FSL_SAI_CSR_SR);
   852                          regmap_update_bits(sai->regmap,
   853                                          FSL_SAI_xCSR(tx, ofs), 
FSL_SAI_CSR_SR,
   854                                          0);
   855                  }
   856                  regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
   857                                     FSL_SAI_CSR_FRDE, FSL_SAI_CSR_FRDE);
   858  
   859                  regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
   860                                     FSL_SAI_CSR_TERE, FSL_SAI_CSR_TERE);
   861                  /*
   862                   * Enable the opposite direction for synchronous mode
   863                   * 1. Tx sync with Rx: only set RE for Rx; set TE & RE 
for Tx
   864                   * 2. Rx sync with Tx: only set TE for Tx; set RE & TE 
for Rx
   865                   *
   866                   * RM recommends to enable RE after TE for case 1 and 
to enable
   867                   * TE after RE for case 2, but we here may not always 
guarantee
   868                   * that happens: "arecord 1.wav; aplay 2.wav" in case 1 
enables
   869                   * TE after RE, which is against what RM recommends but 
should
   870                   * be safe to do, judging by years of testing results.
   871                   */
   872                  if (fsl_sai_dir_is_synced(sai, adir))
   873                          regmap_update_bits(sai->regmap, 
FSL_SAI_xCSR((!tx), ofs),
   874                                             FSL_SAI_CSR_TERE, 
FSL_SAI_CSR_TERE);
   875  
   876                  regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
   877                                     FSL_SAI_CSR_xIE_MASK, FSL_SAI_FLAGS);
   878                  break;
   879          case SNDRV_PCM_TRIGGER_STOP:
   880          case SNDRV_PCM_TRIGGER_SUSPEND:
   881          case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
   882                  regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
   883                                     FSL_SAI_CSR_FRDE, 0);
   884                  regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
   885                                     FSL_SAI_CSR_xIE_MASK, 0);
   886  
   887                  /* Check if the opposite FRDE is also disabled */
   888                  regmap_read(sai->regmap, FSL_SAI_xCSR(!tx, ofs), &xcsr);
   889  
   890                  /*
   891                   * If opposite stream provides clocks for synchronous 
mode and
   892                   * it is inactive, disable it before disabling the 
current one
   893                   */
   894                  if (fsl_sai_dir_is_synced(sai, adir) && !(xcsr & 
FSL_SAI_CSR_FRDE))
   895                          fsl_sai_config_disable(sai, adir);
   896  
   897                  /*
   898                   * Disable current stream if either of:
   899                   * 1. current stream doesn't provide clocks for 
synchronous mode
   900                   * 2. current stream provides clocks for synchronous 
mode but no
   901                   *    more stream is active.
   902                   */
   903                  if (!fsl_sai_dir_is_synced(sai, dir) || !(xcsr & 
FSL_SAI_CSR_FRDE))
   904                          fsl_sai_config_disable(sai, dir);
   905  
   906                  break;
   907          default:
   908                  return -EINVAL;
   909          }
   910  
   911          return 0;
   912  }
   913  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Reply via email to