blob: 9abc5938738c47ce6bd53329522562399268a8df [file] [log] [blame]
/*
* Copyright (c) 2021 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_SOC_INTEL_ADSP_SHIM_H_
#define ZEPHYR_SOC_INTEL_ADSP_SHIM_H_
/* The "shim" block contains most of the general system control
* registers on cAVS platforms. While the base address changes, it
* has remained largely, but not perfectly, compatible between
* versions.
*/
#ifndef _ASMLANGUAGE
struct cavs_shim {
uint32_t skuid;
uint32_t _unused0[7];
uint32_t dspwc_lo;
uint32_t dspwc_hi;
uint32_t dspwctcs;
uint32_t _unused1[1];
uint32_t dspwct0c_lo;
uint32_t dspwct0c_hi;
uint32_t dspwct1c_lo;
uint32_t dspwct1c_hi;
uint32_t _unused2[14];
uint32_t clkctl;
uint32_t clksts;
uint32_t hspgctl;
uint32_t lspgctl;
uint32_t hsrmctl;
uint32_t lsrmctl;
uint16_t pwrctl;
uint16_t pwrsts;
uint32_t lpsctl;
uint32_t lpsdmas0;
uint32_t lpsdmas1;
uint32_t spsreq;
uint32_t ldoctl;
uint32_t _unused3[2];
uint32_t hspgists;
uint32_t lspgists;
uint32_t _unused4[2];
uint32_t _unused5[4];
uint32_t l2mecs;
uint32_t l2mpat;
uint32_t _unused6[2];
uint32_t ltrc;
uint32_t _unused8[3];
uint32_t dbgo;
uint32_t svcfg;
uint32_t _unused9[2];
};
#define CAVS_SHIM (*((volatile struct cavs_shim *)DT_REG_ADDR(DT_NODELABEL(shim))))
#define ADSP_SHIM_DSPWCTCS_TTIE(c) BIT(8 + (c))
#define ADSP_DSPWC_OFFSET 0x20
#define ADSP_DSPWCTCS_OFFSET 0x28
#define ADSP_DSPWCT0C_OFFSET 0x30
#define ADSP_DSPWCT1C_OFFSET 0x38
#define ADSP_CLKCTL_OFFSET 0x78
#define ADSP_CLKSTS_OFFSET 0x7C
#define ADSP_PWRCTL_OFFSET 0x90
#define ADSP_PWRSTS_OFFSET 0x92
#define ADSP_LPSCTL_OFFSET 0x94
/* Host memory window control. Not strictly part of the shim block. */
struct cavs_win {
uint32_t dmwba;
uint32_t dmwlo;
};
#define CAVS_WIN ((volatile struct cavs_win *)DT_REG_ADDR(DT_NODELABEL(win)))
#endif /* _ASMLANGUAGE */
#define CAVS_CLKCTL_RAPLLC BIT(31)
#define CAVS_CLKCTL_RFROSCC BIT(29)
#define CAVS_CLKCTL_HPGPDMAFDCGB BIT(28)
#define CAVS_CLKCTL_LPGPDMAFDCGB(x) BIT(26 + x)
#define CAVS_CLKCTL_SLIMFDCGB BIT(25)
#define CAVS_CLKCTL_DMICFDCGB BIT(24)
#define CAVS_CLKCTL_I2SFDCGB(x) BIT(20 + x)
#define CAVS_CLKCTL_I2SEFDCGB(x) BIT(18 + x)
#define CAVS_CLKCTL_TCPLCG(x) BIT(16 + x) /* Set bit: prevent clock gating on core x */
#define CAVS_CLKCTL_DPCS(div) ((((div)-1) & 3) << 8) /* DSP PLL divisor (1/2/4) */
#define CAVS_CLKCTL_TCPAPLLS BIT(7)
#define CAVS_CLKCTL_LDCS BIT(5)
#define CAVS_CLKCTL_HDCS BIT(4)
#define CAVS_CLKCTL_LDOCS BIT(3)
#define CAVS_CLKCTL_HDOCS BIT(2)
#define CAVS_CLKCTL_LMPCS BIT(1)
#define CAVS_CLKCTL_HMPCS BIT(0)
#define CAVS_CLKCTL_DPCS_MASK(x) (0x3 << (8 + (x)*2))
#define CAVS_PWRCTL_TCPDSPPG(x) BIT(x)
#define CAVS_PWRSTS_PDSPPGS(x) BIT(x)
#define SHIM_LDOCTL_HPSRAM_LDO_ON (3 << 0)
#define SHIM_LDOCTL_HPSRAM_LDO_BYPASS BIT(0)
#define SHIM_LDOCTL_LPSRAM_LDO_ON (3 << 2)
#define SHIM_LDOCTL_LPSRAM_LDO_BYPASS BIT(2)
#define ADSP_DMWBA_ENABLE BIT(0)
#define ADSP_DMWBA_READONLY BIT(1)
#define CAVS_CLKCTL_OSC_SOURCE_MASK BIT_MASK(2)
#define CAVS_CLKCTL_OSC_REQUEST_MASK (~BIT_MASK(28))
#endif /* ZEPHYR_SOC_INTEL_ADSP_SHIM_H_ */