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