xref: /openbmc/linux/sound/soc/sof/intel/shim.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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