diff options
Diffstat (limited to 'sound/soc/sof/intel/hda-ctrl.c')
| -rw-r--r-- | sound/soc/sof/intel/hda-ctrl.c | 21 | 
1 files changed, 12 insertions, 9 deletions
diff --git a/sound/soc/sof/intel/hda-ctrl.c b/sound/soc/sof/intel/hda-ctrl.c index ea63f83a509b..bc41028a7a01 100644 --- a/sound/soc/sof/intel/hda-ctrl.c +++ b/sound/soc/sof/intel/hda-ctrl.c @@ -164,6 +164,9 @@ int hda_dsp_ctrl_clock_power_gating(struct snd_sof_dev *sdev, bool enable)  int hda_dsp_ctrl_init_chip(struct snd_sof_dev *sdev, bool full_reset)  {  	struct hdac_bus *bus = sof_to_bus(sdev); +#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) +	struct hdac_ext_link *hlink; +#endif  	struct hdac_stream *stream;  	int sd_offset, ret = 0; @@ -173,11 +176,6 @@ int hda_dsp_ctrl_init_chip(struct snd_sof_dev *sdev, bool full_reset)  	hda_dsp_ctrl_misc_clock_gating(sdev, false);  	if (full_reset) { -		/* clear WAKESTS */ -		snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, SOF_HDA_WAKESTS, -					SOF_HDA_WAKESTS_INT_MASK, -					SOF_HDA_WAKESTS_INT_MASK); -  		/* reset HDA controller */  		ret = hda_dsp_ctrl_link_reset(sdev, true);  		if (ret < 0) { @@ -245,13 +243,18 @@ int hda_dsp_ctrl_init_chip(struct snd_sof_dev *sdev, bool full_reset)  				SOF_HDA_INT_CTRL_EN | SOF_HDA_INT_GLOBAL_EN,  				SOF_HDA_INT_CTRL_EN | SOF_HDA_INT_GLOBAL_EN); -#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)  	/* program the position buffer */  	if (bus->use_posbuf && bus->posbuf.addr) { -		snd_hdac_chip_writel(bus, DPLBASE, (u32)bus->posbuf.addr); -		snd_hdac_chip_writel(bus, DPUBASE, -				     upper_32_bits(bus->posbuf.addr)); +		snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, SOF_HDA_ADSP_DPLBASE, +				  (u32)bus->posbuf.addr); +		snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, SOF_HDA_ADSP_DPUBASE, +				  upper_32_bits(bus->posbuf.addr));  	} + +#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) +	/* Reset stream-to-link mapping */ +	list_for_each_entry(hlink, &bus->hlink_list, list) +		writel(0, hlink->ml_addr + AZX_REG_ML_LOSIDV);  #endif  	bus->chip_init = true;  |