Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright(c) 2020 Intel Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Author: Cezary Rojewski <cezary.rojewski@intel.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #ifndef __SND_SOC_INTEL_CATPT_REGS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #define __SND_SOC_INTEL_CATPT_REGS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include <linux/bitops.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <linux/iopoll.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #include <uapi/linux/pci_regs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define CATPT_SHIM_REGS_SIZE	4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define CATPT_DMA_REGS_SIZE	1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define CATPT_DMA_COUNT		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define CATPT_SSP_REGS_SIZE	512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) /* DSP Shim registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define CATPT_SHIM_CS1		0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define CATPT_SHIM_ISC		0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define CATPT_SHIM_ISD		0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define CATPT_SHIM_IMC		0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define CATPT_SHIM_IMD		0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define CATPT_SHIM_IPCC		0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define CATPT_SHIM_IPCD		0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define CATPT_SHIM_CLKCTL	0x78
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define CATPT_SHIM_CS2		0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define CATPT_SHIM_LTRC		0xE0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define CATPT_SHIM_HMDC		0xE8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define CATPT_CS_LPCS		BIT(31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define CATPT_CS_SFCR(ssp)	BIT(27 + (ssp))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define CATPT_CS_S1IOCS		BIT(23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define CATPT_CS_S0IOCS		BIT(21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define CATPT_CS_PCE		BIT(15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define CATPT_CS_SDPM(ssp)	BIT(11 + (ssp))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define CATPT_CS_STALL		BIT(10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define CATPT_CS_DCS		GENMASK(6, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) /* b100 DSP core & audio fabric high clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define CATPT_CS_DCS_HIGH	(0x4 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define CATPT_CS_SBCS(ssp)	BIT(2 + (ssp))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define CATPT_CS_RST		BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define CATPT_ISC_IPCDB		BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define CATPT_ISC_IPCCD		BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define CATPT_ISD_DCPWM		BIT(31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define CATPT_ISD_IPCCB		BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define CATPT_ISD_IPCDD		BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define CATPT_IMC_IPCDB		BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define CATPT_IMC_IPCCD		BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define CATPT_IMD_IPCCB		BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define CATPT_IMD_IPCDD		BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define CATPT_IPCC_BUSY		BIT(31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define CATPT_IPCC_DONE		BIT(30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define CATPT_IPCD_BUSY		BIT(31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #define CATPT_IPCD_DONE		BIT(30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #define CATPT_CLKCTL_CFCIP	BIT(31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define CATPT_CLKCTL_SMOS	GENMASK(25, 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define CATPT_HMDC_HDDA(e, ch)	BIT(8 * (e) + (ch))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) /* defaults to reset SHIM registers to after each power cycle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define CATPT_CS_DEFAULT	0x8480040E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) #define CATPT_ISC_DEFAULT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define CATPT_ISD_DEFAULT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) #define CATPT_IMC_DEFAULT	0x7FFF0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) #define CATPT_IMD_DEFAULT	0x7FFF0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #define CATPT_IPCC_DEFAULT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define CATPT_IPCD_DEFAULT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define CATPT_CLKCTL_DEFAULT	0x7FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define CATPT_CS2_DEFAULT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define CATPT_LTRC_DEFAULT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define CATPT_HMDC_DEFAULT	0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) /* PCI Configuration registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) #define CATPT_PCI_PMCAPID	0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define CATPT_PCI_PMCS		(CATPT_PCI_PMCAPID + PCI_PM_CTRL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define CATPT_PCI_VDRTCTL0	0xA0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define CATPT_PCI_VDRTCTL2	0xA8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define CATPT_VDRTCTL2_DTCGE	BIT(10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define CATPT_VDRTCTL2_DCLCGE	BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) #define CATPT_VDRTCTL2_CGEALL	0xF7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) /* LPT PCI Configuration bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define LPT_VDRTCTL0_DSRAMPGE(b)	BIT(16 + (b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) #define LPT_VDRTCTL0_DSRAMPGE_MASK	GENMASK(31, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) #define LPT_VDRTCTL0_ISRAMPGE(b)	BIT(6 + (b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) #define LPT_VDRTCTL0_ISRAMPGE_MASK	GENMASK(15, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define LPT_VDRTCTL0_D3SRAMPGD		BIT(2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define LPT_VDRTCTL0_D3PGD		BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define LPT_VDRTCTL0_APLLSE		BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) /* WPT PCI Configuration bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define WPT_VDRTCTL0_DSRAMPGE(b)	BIT(12 + (b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define WPT_VDRTCTL0_DSRAMPGE_MASK	GENMASK(31, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define WPT_VDRTCTL0_ISRAMPGE(b)	BIT(2 + (b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define WPT_VDRTCTL0_ISRAMPGE_MASK	GENMASK(11, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define WPT_VDRTCTL0_D3SRAMPGD		BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define WPT_VDRTCTL0_D3PGD		BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define WPT_VDRTCTL2_APLLSE		BIT(31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /* defaults to reset SSP registers to after each power cycle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define CATPT_SSC0_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define CATPT_SSC1_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define CATPT_SSS_DEFAULT		0xF004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define CATPT_SSIT_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define CATPT_SSD_DEFAULT		0xC43893A3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define CATPT_SSTO_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define CATPT_SSPSP_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define CATPT_SSTSA_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define CATPT_SSRSA_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define CATPT_SSTSS_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define CATPT_SSCR2_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define CATPT_SSPSP2_DEFAULT		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* Physically the same block, access address differs between host and dsp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define CATPT_DSP_DRAM_OFFSET		0x400000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define catpt_to_host_offset(offset)	((offset) & ~(CATPT_DSP_DRAM_OFFSET))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define catpt_to_dsp_offset(offset)	((offset) | CATPT_DSP_DRAM_OFFSET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define CATPT_MEMBLOCK_SIZE	0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define catpt_num_dram(cdev)	(hweight_long((cdev)->spec->dram_mask))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define catpt_num_iram(cdev)	(hweight_long((cdev)->spec->iram_mask))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define catpt_dram_size(cdev)	(catpt_num_dram(cdev) * CATPT_MEMBLOCK_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define catpt_iram_size(cdev)	(catpt_num_iram(cdev) * CATPT_MEMBLOCK_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) /* registry I/O helpers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define catpt_shim_addr(cdev) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	((cdev)->lpe_ba + (cdev)->spec->host_shim_offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define catpt_dma_addr(cdev, dma) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	((cdev)->lpe_ba + (cdev)->spec->host_dma_offset[dma])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define catpt_ssp_addr(cdev, ssp) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	((cdev)->lpe_ba + (cdev)->spec->host_ssp_offset[ssp])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define catpt_inbox_addr(cdev) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	((cdev)->lpe_ba + (cdev)->ipc.config.inbox_offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define catpt_outbox_addr(cdev) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	((cdev)->lpe_ba + (cdev)->ipc.config.outbox_offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define catpt_writel_ssp(cdev, ssp, reg, val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	writel(val, catpt_ssp_addr(cdev, ssp) + (reg))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define catpt_readl_shim(cdev, reg) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	readl(catpt_shim_addr(cdev) + CATPT_SHIM_##reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define catpt_writel_shim(cdev, reg, val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	writel(val, catpt_shim_addr(cdev) + CATPT_SHIM_##reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define catpt_updatel_shim(cdev, reg, mask, val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	catpt_writel_shim(cdev, reg, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 			  (catpt_readl_shim(cdev, reg) & ~(mask)) | (val))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define catpt_readl_poll_shim(cdev, reg, val, cond, delay_us, timeout_us) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	readl_poll_timeout(catpt_shim_addr(cdev) + CATPT_SHIM_##reg, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 			   val, cond, delay_us, timeout_us)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define catpt_readl_pci(cdev, reg) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	readl(cdev->pci_ba + CATPT_PCI_##reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define catpt_writel_pci(cdev, reg, val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	writel(val, cdev->pci_ba + CATPT_PCI_##reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define catpt_updatel_pci(cdev, reg, mask, val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	catpt_writel_pci(cdev, reg, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 			 (catpt_readl_pci(cdev, reg) & ~(mask)) | (val))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define catpt_readl_poll_pci(cdev, reg, val, cond, delay_us, timeout_us) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	readl_poll_timeout((cdev)->pci_ba + CATPT_PCI_##reg, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 			   val, cond, delay_us, timeout_us)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #endif