Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: SOF: Intel: hda: add dev_err() traces for snd_sof_dsp_read_poll_timeout()

Such traces should be extremely rare but extremely useful for debug.

Report errors for all calls to sdn_sof_dsp_read_poll_timeout(), but
only on negative values for consistency.

Add traces that enable each timeout to be uniquely identified.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191022192844.21022-3-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Pierre-Louis Bossart and committed by
Mark Brown
6a414489 76dc6a2b

+59 -8
+27 -3
sound/soc/sof/intel/hda-dsp.c
··· 42 42 ((adspcs & reset) == reset), 43 43 HDA_DSP_REG_POLL_INTERVAL_US, 44 44 HDA_DSP_RESET_TIMEOUT_US); 45 + if (ret < 0) { 46 + dev_err(sdev->dev, 47 + "error: %s: timeout on HDA_DSP_REG_ADSPCS read\n", 48 + __func__); 49 + return ret; 50 + } 45 51 46 52 /* has core entered reset ? */ 47 53 adspcs = snd_sof_dsp_read(sdev, HDA_DSP_BAR, ··· 82 76 !(adspcs & crst), 83 77 HDA_DSP_REG_POLL_INTERVAL_US, 84 78 HDA_DSP_RESET_TIMEOUT_US); 79 + 80 + if (ret < 0) { 81 + dev_err(sdev->dev, 82 + "error: %s: timeout on HDA_DSP_REG_ADSPCS read\n", 83 + __func__); 84 + return ret; 85 + } 85 86 86 87 /* has core left reset ? */ 87 88 adspcs = snd_sof_dsp_read(sdev, HDA_DSP_BAR, ··· 164 151 (adspcs & cpa) == cpa, 165 152 HDA_DSP_REG_POLL_INTERVAL_US, 166 153 HDA_DSP_RESET_TIMEOUT_US); 167 - if (ret < 0) 168 - dev_err(sdev->dev, "error: timeout on core powerup\n"); 154 + if (ret < 0) { 155 + dev_err(sdev->dev, 156 + "error: %s: timeout on HDA_DSP_REG_ADSPCS read\n", 157 + __func__); 158 + return ret; 159 + } 169 160 170 161 /* did core power up ? */ 171 162 adspcs = snd_sof_dsp_read(sdev, HDA_DSP_BAR, ··· 188 171 int hda_dsp_core_power_down(struct snd_sof_dev *sdev, unsigned int core_mask) 189 172 { 190 173 u32 adspcs; 174 + int ret; 191 175 192 176 /* update bits */ 193 177 snd_sof_dsp_update_bits_unlocked(sdev, HDA_DSP_BAR, 194 178 HDA_DSP_REG_ADSPCS, 195 179 HDA_DSP_ADSPCS_SPA_MASK(core_mask), 0); 196 180 197 - return snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, 181 + ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, 198 182 HDA_DSP_REG_ADSPCS, adspcs, 199 183 !(adspcs & HDA_DSP_ADSPCS_SPA_MASK(core_mask)), 200 184 HDA_DSP_REG_POLL_INTERVAL_US, 201 185 HDA_DSP_PD_TIMEOUT * USEC_PER_MSEC); 186 + if (ret < 0) 187 + dev_err(sdev->dev, 188 + "error: %s: timeout on HDA_DSP_REG_ADSPCS read\n", 189 + __func__); 190 + 191 + return ret; 202 192 } 203 193 204 194 bool hda_dsp_core_is_enabled(struct snd_sof_dev *sdev,
+12 -1
sound/soc/sof/intel/hda-loader.c
··· 126 126 HDA_DSP_INIT_TIMEOUT_US); 127 127 128 128 if (ret < 0) { 129 - dev_err(sdev->dev, "error: waiting for HIPCIE done\n"); 129 + dev_err(sdev->dev, "error: %s: timeout for HIPCIE done\n", 130 + __func__); 130 131 goto err; 131 132 } 132 133 ··· 152 151 USEC_PER_MSEC); 153 152 if (!ret) 154 153 return 0; 154 + 155 + dev_err(sdev->dev, 156 + "error: %s: timeout HDA_DSP_SRAM_REG_ROM_STATUS read\n", 157 + __func__); 155 158 156 159 err: 157 160 hda_dsp_dump(sdev, SOF_DBG_REGS | SOF_DBG_PCI | SOF_DBG_MBOX); ··· 262 257 * even in case of errors we still need to stop the DMAs, 263 258 * but we return the initial error should the DMA stop also fail 264 259 */ 260 + 261 + if (status < 0) { 262 + dev_err(sdev->dev, 263 + "error: %s: timeout HDA_DSP_SRAM_REG_ROM_STATUS read\n", 264 + __func__); 265 + } 265 266 266 267 ret = cl_trigger(sdev, stream, SNDRV_PCM_TRIGGER_STOP); 267 268 if (ret < 0) {
+20 -4
sound/soc/sof/intel/hda-stream.c
··· 275 275 HDA_DSP_REG_POLL_INTERVAL_US, 276 276 HDA_DSP_STREAM_RUN_TIMEOUT); 277 277 278 - if (ret) 278 + if (ret < 0) { 279 + dev_err(sdev->dev, 280 + "error: %s: cmd %d: timeout on STREAM_SD_OFFSET read\n", 281 + __func__, cmd); 279 282 return ret; 283 + } 280 284 281 285 hstream->running = true; 282 286 break; ··· 298 294 HDA_DSP_REG_POLL_INTERVAL_US, 299 295 HDA_DSP_STREAM_RUN_TIMEOUT); 300 296 301 - if (ret) 297 + if (ret < 0) { 298 + dev_err(sdev->dev, 299 + "error: %s: cmd %d: timeout on STREAM_SD_OFFSET read\n", 300 + __func__, cmd); 302 301 return ret; 302 + } 303 303 304 304 snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, sd_offset + 305 305 SOF_HDA_ADSP_REG_CL_SD_STS, ··· 364 356 HDA_DSP_REG_POLL_INTERVAL_US, 365 357 HDA_DSP_STREAM_RUN_TIMEOUT); 366 358 367 - if (ret) 359 + if (ret < 0) { 360 + dev_err(sdev->dev, 361 + "error: %s: timeout on STREAM_SD_OFFSET read1\n", 362 + __func__); 368 363 return ret; 364 + } 369 365 370 366 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, 371 367 sd_offset + SOF_HDA_ADSP_REG_CL_SD_STS, ··· 430 418 HDA_DSP_REG_POLL_INTERVAL_US, 431 419 HDA_DSP_STREAM_RUN_TIMEOUT); 432 420 433 - if (ret) 421 + if (ret < 0) { 422 + dev_err(sdev->dev, 423 + "error: %s: timeout on STREAM_SD_OFFSET read2\n", 424 + __func__); 434 425 return ret; 426 + } 435 427 436 428 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, 437 429 sd_offset + SOF_HDA_ADSP_REG_CL_SD_STS,