Commit 607b39ef authored by Vijendar Mukunda's avatar Vijendar Mukunda Committed by Mark Brown

ASoC: AMD: disabling memory gating in stoney platform

For Stoney platform, Memory gating is disabled.i.e SRAM Banks
won't be turned off. By Default, SRAM Bank state set to ON.
Added condition checks to skip SRAM Bank state set logic for
Stoney platform.
Acked-by: default avatarMark Brown <broonie@kernel.org>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarVijendar Mukunda <Vijendar.Mukunda@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c23fed1d
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <sound/soc.h> #include <sound/soc.h>
#include <drm/amd_asic_type.h>
#include "acp.h" #include "acp.h"
#define PLAYBACK_MIN_NUM_PERIODS 2 #define PLAYBACK_MIN_NUM_PERIODS 2
...@@ -419,7 +419,7 @@ static void acp_set_sram_bank_state(void __iomem *acp_mmio, u16 bank, ...@@ -419,7 +419,7 @@ static void acp_set_sram_bank_state(void __iomem *acp_mmio, u16 bank,
} }
/* Initialize and bring ACP hardware to default state. */ /* Initialize and bring ACP hardware to default state. */
static int acp_init(void __iomem *acp_mmio) static int acp_init(void __iomem *acp_mmio, u32 asic_type)
{ {
u16 bank; u16 bank;
u32 val, count, sram_pte_offset; u32 val, count, sram_pte_offset;
...@@ -493,9 +493,14 @@ static int acp_init(void __iomem *acp_mmio) ...@@ -493,9 +493,14 @@ static int acp_init(void __iomem *acp_mmio)
/* When ACP_TILE_P1 is turned on, all SRAM banks get turned on. /* When ACP_TILE_P1 is turned on, all SRAM banks get turned on.
* Now, turn off all of them. This can't be done in 'poweron' of * Now, turn off all of them. This can't be done in 'poweron' of
* ACP pm domain, as this requires ACP to be initialized. * ACP pm domain, as this requires ACP to be initialized.
* For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
* Setting SRAM bank state code skipped for STONEY platform.
*/ */
if (asic_type != CHIP_STONEY) {
for (bank = 1; bank < 48; bank++) for (bank = 1; bank < 48; bank++)
acp_set_sram_bank_state(acp_mmio, bank, false); acp_set_sram_bank_state(acp_mmio, bank, false);
}
return 0; return 0;
} }
...@@ -646,14 +651,22 @@ static int acp_dma_open(struct snd_pcm_substream *substream) ...@@ -646,14 +651,22 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
intr_data->play_stream = substream; intr_data->play_stream = substream;
/* For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
* Setting SRAM bank state code skipped for STONEY platform.
*/
if (intr_data->asic_type != CHIP_STONEY) {
for (bank = 1; bank <= 4; bank++) for (bank = 1; bank <= 4; bank++)
acp_set_sram_bank_state(intr_data->acp_mmio, bank, acp_set_sram_bank_state(intr_data->acp_mmio,
true); bank, true);
}
} else { } else {
intr_data->capture_stream = substream; intr_data->capture_stream = substream;
if (intr_data->asic_type != CHIP_STONEY) {
for (bank = 5; bank <= 8; bank++) for (bank = 5; bank <= 8; bank++)
acp_set_sram_bank_state(intr_data->acp_mmio, bank, acp_set_sram_bank_state(intr_data->acp_mmio,
true); bank, true);
}
} }
return 0; return 0;
...@@ -869,15 +882,24 @@ static int acp_dma_close(struct snd_pcm_substream *substream) ...@@ -869,15 +882,24 @@ static int acp_dma_close(struct snd_pcm_substream *substream)
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
adata->play_stream = NULL; adata->play_stream = NULL;
/* For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
* Setting SRAM bank state code skipped for STONEY platform.
* added condition checks for Carrizo platform only
*/
if (adata->asic_type != CHIP_STONEY) {
for (bank = 1; bank <= 4; bank++) for (bank = 1; bank <= 4; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank, acp_set_sram_bank_state(adata->acp_mmio, bank,
false); false);
}
} else { } else {
adata->capture_stream = NULL; adata->capture_stream = NULL;
if (adata->asic_type != CHIP_STONEY) {
for (bank = 5; bank <= 8; bank++) for (bank = 5; bank <= 8; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank, acp_set_sram_bank_state(adata->acp_mmio, bank,
false); false);
} }
}
/* Disable ACP irq, when the current stream is being closed and /* Disable ACP irq, when the current stream is being closed and
* another stream is also not active. * another stream is also not active.
...@@ -945,7 +967,7 @@ static int acp_audio_probe(struct platform_device *pdev) ...@@ -945,7 +967,7 @@ static int acp_audio_probe(struct platform_device *pdev)
dev_set_drvdata(&pdev->dev, audio_drv_data); dev_set_drvdata(&pdev->dev, audio_drv_data);
/* Initialize the ACP */ /* Initialize the ACP */
acp_init(audio_drv_data->acp_mmio); acp_init(audio_drv_data->acp_mmio, audio_drv_data->asic_type);
status = snd_soc_register_platform(&pdev->dev, &acp_asoc_platform); status = snd_soc_register_platform(&pdev->dev, &acp_asoc_platform);
if (status != 0) { if (status != 0) {
...@@ -976,19 +998,27 @@ static int acp_pcm_resume(struct device *dev) ...@@ -976,19 +998,27 @@ static int acp_pcm_resume(struct device *dev)
u16 bank; u16 bank;
struct audio_drv_data *adata = dev_get_drvdata(dev); struct audio_drv_data *adata = dev_get_drvdata(dev);
acp_init(adata->acp_mmio); acp_init(adata->acp_mmio, adata->asic_type);
if (adata->play_stream && adata->play_stream->runtime) { if (adata->play_stream && adata->play_stream->runtime) {
/* For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
* Setting SRAM bank state code skipped for STONEY platform.
*/
if (adata->asic_type != CHIP_STONEY) {
for (bank = 1; bank <= 4; bank++) for (bank = 1; bank <= 4; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank, acp_set_sram_bank_state(adata->acp_mmio, bank,
true); true);
}
config_acp_dma(adata->acp_mmio, config_acp_dma(adata->acp_mmio,
adata->play_stream->runtime->private_data); adata->play_stream->runtime->private_data);
} }
if (adata->capture_stream && adata->capture_stream->runtime) { if (adata->capture_stream && adata->capture_stream->runtime) {
if (adata->asic_type != CHIP_STONEY) {
for (bank = 5; bank <= 8; bank++) for (bank = 5; bank <= 8; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank, acp_set_sram_bank_state(adata->acp_mmio, bank,
true); true);
}
config_acp_dma(adata->acp_mmio, config_acp_dma(adata->acp_mmio,
adata->capture_stream->runtime->private_data); adata->capture_stream->runtime->private_data);
} }
...@@ -1009,7 +1039,7 @@ static int acp_pcm_runtime_resume(struct device *dev) ...@@ -1009,7 +1039,7 @@ static int acp_pcm_runtime_resume(struct device *dev)
{ {
struct audio_drv_data *adata = dev_get_drvdata(dev); struct audio_drv_data *adata = dev_get_drvdata(dev);
acp_init(adata->acp_mmio); acp_init(adata->acp_mmio, adata->asic_type);
acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
return 0; return 0;
} }
...@@ -1031,6 +1061,7 @@ static struct platform_driver acp_dma_driver = { ...@@ -1031,6 +1061,7 @@ static struct platform_driver acp_dma_driver = {
module_platform_driver(acp_dma_driver); module_platform_driver(acp_dma_driver);
MODULE_AUTHOR("Vijendar.Mukunda@amd.com");
MODULE_AUTHOR("Maruthi.Bayyavarapu@amd.com"); MODULE_AUTHOR("Maruthi.Bayyavarapu@amd.com");
MODULE_DESCRIPTION("AMD ACP PCM Driver"); MODULE_DESCRIPTION("AMD ACP PCM Driver");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment