soc: intel_s1000: Add SoC routine for GNA power-up
Add an SoC level routine to turn power and clock on for Intel GNA block in Intel S1000 SoC. Signed-off-by: Sathish Kuttan <sathish.k.kuttan@intel.com>
This commit is contained in:
parent
f8275da755
commit
39570b5bae
2 changed files with 44 additions and 8 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 Intel Corporation
|
* Copyright (c) 2019 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
@ -184,10 +184,8 @@ u32_t soc_get_ref_clk_freq(void)
|
||||||
return ref_clk_freq;
|
return ref_clk_freq;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void soc_set_power_and_clock(void)
|
static inline void soc_set_dmic_power(void)
|
||||||
{
|
{
|
||||||
volatile struct soc_dsp_shim_regs *dsp_shim_regs =
|
|
||||||
(volatile struct soc_dsp_shim_regs *)SOC_DSP_SHIM_REG_BASE;
|
|
||||||
#if (CONFIG_AUDIO_INTEL_DMIC)
|
#if (CONFIG_AUDIO_INTEL_DMIC)
|
||||||
volatile struct soc_dmic_shim_regs *dmic_shim_regs =
|
volatile struct soc_dmic_shim_regs *dmic_shim_regs =
|
||||||
(volatile struct soc_dmic_shim_regs *)SOC_DMIC_SHIM_REG_BASE;
|
(volatile struct soc_dmic_shim_regs *)SOC_DMIC_SHIM_REG_BASE;
|
||||||
|
@ -199,18 +197,46 @@ static void soc_set_power_and_clock(void)
|
||||||
/* wait for power status */
|
/* wait for power status */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void soc_set_gna_power(void)
|
||||||
|
{
|
||||||
|
#if (CONFIG_INTEL_GNA)
|
||||||
|
volatile struct soc_global_regs *regs =
|
||||||
|
(volatile struct soc_global_regs *)SOC_S1000_GLB_CTRL_BASE;
|
||||||
|
|
||||||
|
/* power on GNA block */
|
||||||
|
regs->gna_power_control |= SOC_GNA_POWER_CONTROL_SPA;
|
||||||
|
while ((regs->gna_power_control & SOC_GNA_POWER_CONTROL_CPA) == 0) {
|
||||||
|
/* wait for power status */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* enable clock for GNA block */
|
||||||
|
regs->gna_power_control |= SOC_GNA_POWER_CONTROL_CLK_EN;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void soc_set_power_and_clock(void)
|
||||||
|
{
|
||||||
|
volatile struct soc_dsp_shim_regs *dsp_shim_regs =
|
||||||
|
(volatile struct soc_dsp_shim_regs *)SOC_DSP_SHIM_REG_BASE;
|
||||||
|
|
||||||
dsp_shim_regs->clkctl |= SOC_CLKCTL_REQ_FAST_CLK |
|
dsp_shim_regs->clkctl |= SOC_CLKCTL_REQ_FAST_CLK |
|
||||||
SOC_CLKCTL_OCS_FAST_CLK;
|
SOC_CLKCTL_OCS_FAST_CLK;
|
||||||
dsp_shim_regs->pwrctl |= SOC_PWRCTL_DISABLE_PWR_GATING_DSP1 |
|
dsp_shim_regs->pwrctl |= SOC_PWRCTL_DISABLE_PWR_GATING_DSP1 |
|
||||||
SOC_PWRCTL_DISABLE_PWR_GATING_DSP0;
|
SOC_PWRCTL_DISABLE_PWR_GATING_DSP0;
|
||||||
|
|
||||||
|
soc_set_dmic_power();
|
||||||
|
soc_set_gna_power();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void soc_read_bootstraps(void)
|
static inline void soc_read_bootstraps(void)
|
||||||
{
|
{
|
||||||
|
volatile struct soc_global_regs *regs =
|
||||||
|
(volatile struct soc_global_regs *)SOC_S1000_GLB_CTRL_BASE;
|
||||||
u32_t bootstrap;
|
u32_t bootstrap;
|
||||||
|
|
||||||
bootstrap = *((volatile u32_t *)SOC_S1000_GLB_CTRL_STRAPS);
|
bootstrap = regs->straps;
|
||||||
|
|
||||||
bootstrap &= SOC_S1000_STRAP_REF_CLK;
|
bootstrap &= SOC_S1000_STRAP_REF_CLK;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 Intel Corporation
|
* Copyright (c) 2019 Intel Corporation
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -161,12 +161,22 @@ struct soc_dsp_shim_regs {
|
||||||
/* Global Control registers */
|
/* Global Control registers */
|
||||||
#define SOC_S1000_GLB_CTRL_BASE (0x00081C00)
|
#define SOC_S1000_GLB_CTRL_BASE (0x00081C00)
|
||||||
|
|
||||||
#define SOC_S1000_GLB_CTRL_STRAPS (SOC_S1000_GLB_CTRL_BASE + 0x40)
|
#define SOC_GNA_POWER_CONTROL_SPA (BIT(0))
|
||||||
|
#define SOC_GNA_POWER_CONTROL_CPA (BIT(8))
|
||||||
|
#define SOC_GNA_POWER_CONTROL_CLK_EN (BIT(16))
|
||||||
|
|
||||||
#define SOC_S1000_STRAP_REF_CLK (BIT_MASK(2) << 3)
|
#define SOC_S1000_STRAP_REF_CLK (BIT_MASK(2) << 3)
|
||||||
#define SOC_S1000_STRAP_REF_CLK_38P4 (0 << 3)
|
#define SOC_S1000_STRAP_REF_CLK_38P4 (0 << 3)
|
||||||
#define SOC_S1000_STRAP_REF_CLK_19P2 (1 << 3)
|
#define SOC_S1000_STRAP_REF_CLK_19P2 (1 << 3)
|
||||||
#define SOC_S1000_STRAP_REF_CLK_24P576 (2 << 3)
|
#define SOC_S1000_STRAP_REF_CLK_24P576 (2 << 3)
|
||||||
|
|
||||||
|
struct soc_global_regs {
|
||||||
|
u32_t reserved1[8];
|
||||||
|
u32_t gna_power_control;
|
||||||
|
u32_t reserved2[7];
|
||||||
|
u32_t straps;
|
||||||
|
};
|
||||||
|
|
||||||
extern void _soc_irq_enable(u32_t irq);
|
extern void _soc_irq_enable(u32_t irq);
|
||||||
extern void _soc_irq_disable(u32_t irq);
|
extern void _soc_irq_disable(u32_t irq);
|
||||||
extern void dcache_writeback_region(void *addr, size_t size);
|
extern void dcache_writeback_region(void *addr, size_t size);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue