1e149ca29SPierre-Louis Bossart /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
29e42c5caSLiam Girdwood /*
39e42c5caSLiam Girdwood * This file is provided under a dual BSD/GPLv2 license. When using or
49e42c5caSLiam Girdwood * redistributing this file, you may do so under either license.
59e42c5caSLiam Girdwood *
69e42c5caSLiam Girdwood * Copyright(c) 2017 Intel Corporation. All rights reserved.
79e42c5caSLiam Girdwood *
89e42c5caSLiam Girdwood * Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
99e42c5caSLiam Girdwood */
109e42c5caSLiam Girdwood
119e42c5caSLiam Girdwood #ifndef __SOF_INTEL_SHIM_H
129e42c5caSLiam Girdwood #define __SOF_INTEL_SHIM_H
139e42c5caSLiam Girdwood
1403cf7262SPierre-Louis Bossart enum sof_intel_hw_ip_version {
1503cf7262SPierre-Louis Bossart SOF_INTEL_TANGIER,
1603cf7262SPierre-Louis Bossart SOF_INTEL_BAYTRAIL,
1703cf7262SPierre-Louis Bossart SOF_INTEL_BROADWELL,
1803cf7262SPierre-Louis Bossart SOF_INTEL_CAVS_1_5, /* SkyLake, KabyLake, AmberLake */
1903cf7262SPierre-Louis Bossart SOF_INTEL_CAVS_1_5_PLUS,/* ApolloLake, GeminiLake */
2003cf7262SPierre-Louis Bossart SOF_INTEL_CAVS_1_8, /* CannonLake, CometLake, CoffeeLake */
2103cf7262SPierre-Louis Bossart SOF_INTEL_CAVS_2_0, /* IceLake, JasperLake */
2203cf7262SPierre-Louis Bossart SOF_INTEL_CAVS_2_5, /* TigerLake, AlderLake */
23064520e8SBard Liao SOF_INTEL_ACE_1_0, /* MeteorLake */
244f5706f1SPierre-Louis Bossart SOF_INTEL_ACE_2_0, /* LunarLake */
2503cf7262SPierre-Louis Bossart };
2603cf7262SPierre-Louis Bossart
279e42c5caSLiam Girdwood /*
281fa44098SPierre-Louis Bossart * SHIM registers for BYT, BSW, CHT, BDW
299e42c5caSLiam Girdwood */
309e42c5caSLiam Girdwood
319e42c5caSLiam Girdwood #define SHIM_CSR (SHIM_OFFSET + 0x00)
329e42c5caSLiam Girdwood #define SHIM_PISR (SHIM_OFFSET + 0x08)
339e42c5caSLiam Girdwood #define SHIM_PIMR (SHIM_OFFSET + 0x10)
349e42c5caSLiam Girdwood #define SHIM_ISRX (SHIM_OFFSET + 0x18)
359e42c5caSLiam Girdwood #define SHIM_ISRD (SHIM_OFFSET + 0x20)
369e42c5caSLiam Girdwood #define SHIM_IMRX (SHIM_OFFSET + 0x28)
379e42c5caSLiam Girdwood #define SHIM_IMRD (SHIM_OFFSET + 0x30)
389e42c5caSLiam Girdwood #define SHIM_IPCX (SHIM_OFFSET + 0x38)
399e42c5caSLiam Girdwood #define SHIM_IPCD (SHIM_OFFSET + 0x40)
409e42c5caSLiam Girdwood #define SHIM_ISRSC (SHIM_OFFSET + 0x48)
419e42c5caSLiam Girdwood #define SHIM_ISRLPESC (SHIM_OFFSET + 0x50)
429e42c5caSLiam Girdwood #define SHIM_IMRSC (SHIM_OFFSET + 0x58)
439e42c5caSLiam Girdwood #define SHIM_IMRLPESC (SHIM_OFFSET + 0x60)
449e42c5caSLiam Girdwood #define SHIM_IPCSC (SHIM_OFFSET + 0x68)
459e42c5caSLiam Girdwood #define SHIM_IPCLPESC (SHIM_OFFSET + 0x70)
469e42c5caSLiam Girdwood #define SHIM_CLKCTL (SHIM_OFFSET + 0x78)
479e42c5caSLiam Girdwood #define SHIM_CSR2 (SHIM_OFFSET + 0x80)
489e42c5caSLiam Girdwood #define SHIM_LTRC (SHIM_OFFSET + 0xE0)
499e42c5caSLiam Girdwood #define SHIM_HMDC (SHIM_OFFSET + 0xE8)
509e42c5caSLiam Girdwood
519e42c5caSLiam Girdwood #define SHIM_PWMCTRL 0x1000
529e42c5caSLiam Girdwood
539e42c5caSLiam Girdwood /*
541fa44098SPierre-Louis Bossart * SST SHIM register bits for BYT, BSW, CHT, BDW
559e42c5caSLiam Girdwood * Register bit naming and functionaility can differ between devices.
569e42c5caSLiam Girdwood */
579e42c5caSLiam Girdwood
589e42c5caSLiam Girdwood /* CSR / CS */
599e42c5caSLiam Girdwood #define SHIM_CSR_RST BIT(1)
609e42c5caSLiam Girdwood #define SHIM_CSR_SBCS0 BIT(2)
619e42c5caSLiam Girdwood #define SHIM_CSR_SBCS1 BIT(3)
629e42c5caSLiam Girdwood #define SHIM_CSR_DCS(x) ((x) << 4)
639e42c5caSLiam Girdwood #define SHIM_CSR_DCS_MASK (0x7 << 4)
649e42c5caSLiam Girdwood #define SHIM_CSR_STALL BIT(10)
659e42c5caSLiam Girdwood #define SHIM_CSR_S0IOCS BIT(21)
669e42c5caSLiam Girdwood #define SHIM_CSR_S1IOCS BIT(23)
679e42c5caSLiam Girdwood #define SHIM_CSR_LPCS BIT(31)
689e42c5caSLiam Girdwood #define SHIM_CSR_24MHZ_LPCS \
699e42c5caSLiam Girdwood (SHIM_CSR_SBCS0 | SHIM_CSR_SBCS1 | SHIM_CSR_LPCS)
709e42c5caSLiam Girdwood #define SHIM_CSR_24MHZ_NO_LPCS (SHIM_CSR_SBCS0 | SHIM_CSR_SBCS1)
719e42c5caSLiam Girdwood #define SHIM_BYT_CSR_RST BIT(0)
729e42c5caSLiam Girdwood #define SHIM_BYT_CSR_VECTOR_SEL BIT(1)
739e42c5caSLiam Girdwood #define SHIM_BYT_CSR_STALL BIT(2)
749e42c5caSLiam Girdwood #define SHIM_BYT_CSR_PWAITMODE BIT(3)
759e42c5caSLiam Girdwood
769e42c5caSLiam Girdwood /* ISRX / ISC */
779e42c5caSLiam Girdwood #define SHIM_ISRX_BUSY BIT(1)
789e42c5caSLiam Girdwood #define SHIM_ISRX_DONE BIT(0)
799e42c5caSLiam Girdwood #define SHIM_BYT_ISRX_REQUEST BIT(1)
809e42c5caSLiam Girdwood
819e42c5caSLiam Girdwood /* ISRD / ISD */
829e42c5caSLiam Girdwood #define SHIM_ISRD_BUSY BIT(1)
839e42c5caSLiam Girdwood #define SHIM_ISRD_DONE BIT(0)
849e42c5caSLiam Girdwood
859e42c5caSLiam Girdwood /* IMRX / IMC */
869e42c5caSLiam Girdwood #define SHIM_IMRX_BUSY BIT(1)
879e42c5caSLiam Girdwood #define SHIM_IMRX_DONE BIT(0)
889e42c5caSLiam Girdwood #define SHIM_BYT_IMRX_REQUEST BIT(1)
899e42c5caSLiam Girdwood
909e42c5caSLiam Girdwood /* IMRD / IMD */
919e42c5caSLiam Girdwood #define SHIM_IMRD_DONE BIT(0)
929e42c5caSLiam Girdwood #define SHIM_IMRD_BUSY BIT(1)
939e42c5caSLiam Girdwood #define SHIM_IMRD_SSP0 BIT(16)
949e42c5caSLiam Girdwood #define SHIM_IMRD_DMAC0 BIT(21)
959e42c5caSLiam Girdwood #define SHIM_IMRD_DMAC1 BIT(22)
969e42c5caSLiam Girdwood #define SHIM_IMRD_DMAC (SHIM_IMRD_DMAC0 | SHIM_IMRD_DMAC1)
979e42c5caSLiam Girdwood
989e42c5caSLiam Girdwood /* IPCX / IPCC */
999e42c5caSLiam Girdwood #define SHIM_IPCX_DONE BIT(30)
1009e42c5caSLiam Girdwood #define SHIM_IPCX_BUSY BIT(31)
1019e42c5caSLiam Girdwood #define SHIM_BYT_IPCX_DONE BIT_ULL(62)
1029e42c5caSLiam Girdwood #define SHIM_BYT_IPCX_BUSY BIT_ULL(63)
1039e42c5caSLiam Girdwood
1049e42c5caSLiam Girdwood /* IPCD */
1059e42c5caSLiam Girdwood #define SHIM_IPCD_DONE BIT(30)
1069e42c5caSLiam Girdwood #define SHIM_IPCD_BUSY BIT(31)
1079e42c5caSLiam Girdwood #define SHIM_BYT_IPCD_DONE BIT_ULL(62)
1089e42c5caSLiam Girdwood #define SHIM_BYT_IPCD_BUSY BIT_ULL(63)
1099e42c5caSLiam Girdwood
1109e42c5caSLiam Girdwood /* CLKCTL */
1119e42c5caSLiam Girdwood #define SHIM_CLKCTL_SMOS(x) ((x) << 24)
1129e42c5caSLiam Girdwood #define SHIM_CLKCTL_MASK (3 << 24)
1139e42c5caSLiam Girdwood #define SHIM_CLKCTL_DCPLCG BIT(18)
1149e42c5caSLiam Girdwood #define SHIM_CLKCTL_SCOE1 BIT(17)
1159e42c5caSLiam Girdwood #define SHIM_CLKCTL_SCOE0 BIT(16)
1169e42c5caSLiam Girdwood
1179e42c5caSLiam Girdwood /* CSR2 / CS2 */
1189e42c5caSLiam Girdwood #define SHIM_CSR2_SDFD_SSP0 BIT(1)
1199e42c5caSLiam Girdwood #define SHIM_CSR2_SDFD_SSP1 BIT(2)
1209e42c5caSLiam Girdwood
1219e42c5caSLiam Girdwood /* LTRC */
1229e42c5caSLiam Girdwood #define SHIM_LTRC_VAL(x) ((x) << 0)
1239e42c5caSLiam Girdwood
1249e42c5caSLiam Girdwood /* HMDC */
1259e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA0(x) ((x) << 0)
1269e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA1(x) ((x) << 7)
1279e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E0_CH0 1
1289e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E0_CH1 2
1299e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E0_CH2 4
1309e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E0_CH3 8
1319e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E1_CH0 SHIM_HMDC_HDDA1(SHIM_HMDC_HDDA_E0_CH0)
1329e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E1_CH1 SHIM_HMDC_HDDA1(SHIM_HMDC_HDDA_E0_CH1)
1339e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E1_CH2 SHIM_HMDC_HDDA1(SHIM_HMDC_HDDA_E0_CH2)
1349e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E1_CH3 SHIM_HMDC_HDDA1(SHIM_HMDC_HDDA_E0_CH3)
1359e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E0_ALLCH \
1369e42c5caSLiam Girdwood (SHIM_HMDC_HDDA_E0_CH0 | SHIM_HMDC_HDDA_E0_CH1 | \
1379e42c5caSLiam Girdwood SHIM_HMDC_HDDA_E0_CH2 | SHIM_HMDC_HDDA_E0_CH3)
1389e42c5caSLiam Girdwood #define SHIM_HMDC_HDDA_E1_ALLCH \
1399e42c5caSLiam Girdwood (SHIM_HMDC_HDDA_E1_CH0 | SHIM_HMDC_HDDA_E1_CH1 | \
1409e42c5caSLiam Girdwood SHIM_HMDC_HDDA_E1_CH2 | SHIM_HMDC_HDDA_E1_CH3)
1419e42c5caSLiam Girdwood
1429e42c5caSLiam Girdwood /* Audio DSP PCI registers */
1439e42c5caSLiam Girdwood #define PCI_VDRTCTL0 0xa0
1449e42c5caSLiam Girdwood #define PCI_VDRTCTL1 0xa4
1459e42c5caSLiam Girdwood #define PCI_VDRTCTL2 0xa8
1469e42c5caSLiam Girdwood #define PCI_VDRTCTL3 0xaC
1479e42c5caSLiam Girdwood
1489e42c5caSLiam Girdwood /* VDRTCTL0 */
1499e42c5caSLiam Girdwood #define PCI_VDRTCL0_D3PGD BIT(0)
1509e42c5caSLiam Girdwood #define PCI_VDRTCL0_D3SRAMPGD BIT(1)
1519e42c5caSLiam Girdwood #define PCI_VDRTCL0_DSRAMPGE_SHIFT 12
1529e42c5caSLiam Girdwood #define PCI_VDRTCL0_DSRAMPGE_MASK GENMASK(PCI_VDRTCL0_DSRAMPGE_SHIFT + 19,\
1539e42c5caSLiam Girdwood PCI_VDRTCL0_DSRAMPGE_SHIFT)
1549e42c5caSLiam Girdwood #define PCI_VDRTCL0_ISRAMPGE_SHIFT 2
1559e42c5caSLiam Girdwood #define PCI_VDRTCL0_ISRAMPGE_MASK GENMASK(PCI_VDRTCL0_ISRAMPGE_SHIFT + 9,\
1569e42c5caSLiam Girdwood PCI_VDRTCL0_ISRAMPGE_SHIFT)
1579e42c5caSLiam Girdwood
1589e42c5caSLiam Girdwood /* VDRTCTL2 */
1599e42c5caSLiam Girdwood #define PCI_VDRTCL2_DCLCGE BIT(1)
1609e42c5caSLiam Girdwood #define PCI_VDRTCL2_DTCGE BIT(10)
1619e42c5caSLiam Girdwood #define PCI_VDRTCL2_APLLSE_MASK BIT(31)
1629e42c5caSLiam Girdwood
1639e42c5caSLiam Girdwood /* PMCS */
1649e42c5caSLiam Girdwood #define PCI_PMCS 0x84
1659e42c5caSLiam Girdwood #define PCI_PMCS_PS_MASK 0x3
1669e42c5caSLiam Girdwood
167a792bfc1SPierre-Louis Bossart /* Intel quirks */
168a792bfc1SPierre-Louis Bossart #define SOF_INTEL_PROCEN_FMT_QUIRK BIT(0)
169a792bfc1SPierre-Louis Bossart
1709e42c5caSLiam Girdwood /* DSP hardware descriptor */
1719e42c5caSLiam Girdwood struct sof_intel_dsp_desc {
1729e42c5caSLiam Girdwood int cores_num;
17364b96917SRanjani Sridharan int host_managed_cores_mask;
1749e42c5caSLiam Girdwood int init_core_mask; /* cores available after fw boot */
1759e42c5caSLiam Girdwood int ipc_req;
1769e42c5caSLiam Girdwood int ipc_req_mask;
1779e42c5caSLiam Girdwood int ipc_ack;
1789e42c5caSLiam Girdwood int ipc_ack_mask;
1799e42c5caSLiam Girdwood int ipc_ctl;
18071778f79SRanjani Sridharan int rom_status_reg;
1819e42c5caSLiam Girdwood int rom_init_timeout;
182b095fe47SZhu Yingjiang int ssp_count; /* ssp count of the platform */
183b095fe47SZhu Yingjiang int ssp_base_offset; /* base address of the SSPs */
1841cbf6443SBard Liao u32 sdw_shim_base;
1851cbf6443SBard Liao u32 sdw_alh_base;
186f8632adcSRander Wang u32 d0i3_offset;
187a792bfc1SPierre-Louis Bossart u32 quirks;
18803cf7262SPierre-Louis Bossart enum sof_intel_hw_ip_version hw_ip_version;
189625339caSPierre-Louis Bossart int (*read_sdw_lcount)(struct snd_sof_dev *sdev);
1908ebc9074SPierre-Louis Bossart void (*enable_sdw_irq)(struct snd_sof_dev *sdev, bool enable);
191198fa4bcSBard Liao bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
192*9362ab78SPierre-Louis Bossart bool (*check_sdw_wakeen_irq)(struct snd_sof_dev *sdev);
1933dee239eSRanjani Sridharan bool (*check_ipc_irq)(struct snd_sof_dev *sdev);
194af62eaf2SFred Oh int (*power_down_dsp)(struct snd_sof_dev *sdev);
195423693a6SRanjani Sridharan int (*disable_interrupts)(struct snd_sof_dev *sdev);
196ab222a4aSBard Liao int (*cl_init)(struct snd_sof_dev *sdev, int stream_tag, bool imr_boot);
1979e42c5caSLiam Girdwood };
1989e42c5caSLiam Girdwood
199856601e5SPierre-Louis Bossart extern struct snd_sof_dsp_ops sof_tng_ops;
2009e42c5caSLiam Girdwood
2019e42c5caSLiam Girdwood extern const struct sof_intel_dsp_desc tng_chip_info;
2029e42c5caSLiam Girdwood
2039e42c5caSLiam Girdwood struct sof_intel_stream {
2049e42c5caSLiam Girdwood size_t posn_offset;
2059e42c5caSLiam Girdwood };
2069e42c5caSLiam Girdwood
get_chip_info(struct snd_sof_pdata * pdata)20781ed6770SRanjani Sridharan static inline const struct sof_intel_dsp_desc *get_chip_info(struct snd_sof_pdata *pdata)
20881ed6770SRanjani Sridharan {
20981ed6770SRanjani Sridharan const struct sof_dev_desc *desc = pdata->desc;
21081ed6770SRanjani Sridharan
21181ed6770SRanjani Sridharan return desc->chip_info;
21281ed6770SRanjani Sridharan }
21381ed6770SRanjani Sridharan
2149e42c5caSLiam Girdwood #endif
215