File Index
Files and directories
Sign in
FILE

regs.h

File preview with syntax highlighting.

linux-6.19.14/drivers/dpll/zl3073x/regs.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2
  3#ifndef _ZL3073X_REGS_H
  4#define _ZL3073X_REGS_H
  5
  6#include <linux/bitfield.h>
  7#include <linux/bits.h>
  8
  9/*
 10 * Register address structure:
 11 * ===========================
 12 *  25        19 18  16 15     7 6           0
 13 * +------------------------------------------+
 14 * | max_offset | size |  page  | page_offset |
 15 * +------------------------------------------+
 16 *
 17 * page_offset ... <0x00..0x7F>
 18 * page .......... HW page number
 19 * size .......... register byte size (1, 2, 4 or 6)
 20 * max_offset .... maximal offset for indexed registers
 21 *                 (for non-indexed regs max_offset == page_offset)
 22 */
 23
 24#define ZL_REG_OFFSET_MASK	GENMASK(6, 0)
 25#define ZL_REG_PAGE_MASK	GENMASK(15, 7)
 26#define ZL_REG_SIZE_MASK	GENMASK(18, 16)
 27#define ZL_REG_MAX_OFFSET_MASK	GENMASK(25, 19)
 28#define ZL_REG_ADDR_MASK	GENMASK(15, 0)
 29
 30#define ZL_REG_OFFSET(_reg)	FIELD_GET(ZL_REG_OFFSET_MASK, _reg)
 31#define ZL_REG_PAGE(_reg)	FIELD_GET(ZL_REG_PAGE_MASK, _reg)
 32#define ZL_REG_MAX_OFFSET(_reg)	FIELD_GET(ZL_REG_MAX_OFFSET_MASK, _reg)
 33#define ZL_REG_SIZE(_reg)	FIELD_GET(ZL_REG_SIZE_MASK, _reg)
 34#define ZL_REG_ADDR(_reg)	FIELD_GET(ZL_REG_ADDR_MASK, _reg)
 35
 36/**
 37 * ZL_REG_IDX - define indexed register
 38 * @_idx: index of register to access
 39 * @_page: register page
 40 * @_offset: register offset in page
 41 * @_size: register byte size (1, 2, 4 or 6)
 42 * @_items: number of register indices
 43 * @_stride: stride between items in bytes
 44 *
 45 * All parameters except @_idx should be constant.
 46 */
 47#define ZL_REG_IDX(_idx, _page, _offset, _size, _items, _stride)	\
 48	(FIELD_PREP(ZL_REG_OFFSET_MASK,					\
 49		    (_offset) + (_idx) * (_stride))		|	\
 50	 FIELD_PREP_CONST(ZL_REG_PAGE_MASK, _page)		|	\
 51	 FIELD_PREP_CONST(ZL_REG_SIZE_MASK, _size)		|	\
 52	 FIELD_PREP_CONST(ZL_REG_MAX_OFFSET_MASK,			\
 53			  (_offset) + ((_items) - 1) * (_stride)))
 54
 55/**
 56 * ZL_REG - define simple (non-indexed) register
 57 * @_page: register page
 58 * @_offset: register offset in page
 59 * @_size: register byte size (1, 2, 4 or 6)
 60 *
 61 * All parameters should be constant.
 62 */
 63#define ZL_REG(_page, _offset, _size)					\
 64	ZL_REG_IDX(0, _page, _offset, _size, 1, 0)
 65
 66/**************************
 67 * Register Page 0, General
 68 **************************/
 69
 70#define ZL_REG_INFO				ZL_REG(0, 0x00, 1)
 71#define ZL_INFO_READY				BIT(7)
 72
 73#define ZL_REG_ID				ZL_REG(0, 0x01, 2)
 74#define ZL_REG_REVISION				ZL_REG(0, 0x03, 2)
 75#define ZL_REG_FW_VER				ZL_REG(0, 0x05, 2)
 76#define ZL_REG_CUSTOM_CONFIG_VER		ZL_REG(0, 0x07, 4)
 77
 78#define ZL_REG_RESET_STATUS			ZL_REG(0, 0x18, 1)
 79#define ZL_REG_RESET_STATUS_RESET		BIT(0)
 80
 81/*************************
 82 * Register Page 2, Status
 83 *************************/
 84
 85#define ZL_REG_REF_MON_STATUS(_idx)					\
 86	ZL_REG_IDX(_idx, 2, 0x02, 1, ZL3073X_NUM_REFS, 1)
 87#define ZL_REF_MON_STATUS_OK			0 /* all bits zeroed */
 88
 89#define ZL_REG_DPLL_MON_STATUS(_idx)					\
 90	ZL_REG_IDX(_idx, 2, 0x10, 1, ZL3073X_MAX_CHANNELS, 1)
 91#define ZL_DPLL_MON_STATUS_STATE		GENMASK(1, 0)
 92#define ZL_DPLL_MON_STATUS_STATE_ACQUIRING	0
 93#define ZL_DPLL_MON_STATUS_STATE_LOCK		1
 94#define ZL_DPLL_MON_STATUS_STATE_HOLDOVER	2
 95#define ZL_DPLL_MON_STATUS_HO_READY		BIT(2)
 96
 97#define ZL_REG_DPLL_REFSEL_STATUS(_idx)					\
 98	ZL_REG_IDX(_idx, 2, 0x30, 1, ZL3073X_MAX_CHANNELS, 1)
 99#define ZL_DPLL_REFSEL_STATUS_REFSEL		GENMASK(3, 0)
100#define ZL_DPLL_REFSEL_STATUS_STATE		GENMASK(6, 4)
101#define ZL_DPLL_REFSEL_STATUS_STATE_LOCK	4
102
103#define ZL_REG_REF_FREQ(_idx)						\
104	ZL_REG_IDX(_idx, 2, 0x44, 4, ZL3073X_NUM_REFS, 4)
105
106/**********************
107 * Register Page 4, Ref
108 **********************/
109
110#define ZL_REG_REF_PHASE_ERR_READ_RQST		ZL_REG(4, 0x0f, 1)
111#define ZL_REF_PHASE_ERR_READ_RQST_RD		BIT(0)
112
113#define ZL_REG_REF_FREQ_MEAS_CTRL		ZL_REG(4, 0x1c, 1)
114#define ZL_REF_FREQ_MEAS_CTRL			GENMASK(1, 0)
115#define ZL_REF_FREQ_MEAS_CTRL_REF_FREQ		1
116#define ZL_REF_FREQ_MEAS_CTRL_REF_FREQ_OFF	2
117#define ZL_REF_FREQ_MEAS_CTRL_DPLL_FREQ_OFF	3
118
119#define ZL_REG_REF_FREQ_MEAS_MASK_3_0		ZL_REG(4, 0x1d, 1)
120#define ZL_REF_FREQ_MEAS_MASK_3_0(_ref)		BIT(_ref)
121
122#define ZL_REG_REF_FREQ_MEAS_MASK_4		ZL_REG(4, 0x1e, 1)
123#define ZL_REF_FREQ_MEAS_MASK_4(_ref)		BIT((_ref) - 8)
124
125#define ZL_REG_DPLL_MEAS_REF_FREQ_CTRL		ZL_REG(4, 0x1f, 1)
126#define ZL_DPLL_MEAS_REF_FREQ_CTRL_EN		BIT(0)
127#define ZL_DPLL_MEAS_REF_FREQ_CTRL_IDX		GENMASK(6, 4)
128
129#define ZL_REG_REF_PHASE(_idx)						\
130	ZL_REG_IDX(_idx, 4, 0x20, 6, ZL3073X_NUM_REFS, 6)
131
132/***********************
133 * Register Page 5, DPLL
134 ***********************/
135
136#define ZL_REG_DPLL_MODE_REFSEL(_idx)					\
137	ZL_REG_IDX(_idx, 5, 0x04, 1, ZL3073X_MAX_CHANNELS, 4)
138#define ZL_DPLL_MODE_REFSEL_MODE		GENMASK(2, 0)
139#define ZL_DPLL_MODE_REFSEL_MODE_FREERUN	0
140#define ZL_DPLL_MODE_REFSEL_MODE_HOLDOVER	1
141#define ZL_DPLL_MODE_REFSEL_MODE_REFLOCK	2
142#define ZL_DPLL_MODE_REFSEL_MODE_AUTO		3
143#define ZL_DPLL_MODE_REFSEL_MODE_NCO		4
144#define ZL_DPLL_MODE_REFSEL_REF			GENMASK(7, 4)
145
146#define ZL_REG_DPLL_MEAS_CTRL			ZL_REG(5, 0x50, 1)
147#define ZL_DPLL_MEAS_CTRL_EN			BIT(0)
148#define ZL_DPLL_MEAS_CTRL_AVG_FACTOR		GENMASK(7, 4)
149
150#define ZL_REG_DPLL_MEAS_IDX			ZL_REG(5, 0x51, 1)
151#define ZL_DPLL_MEAS_IDX			GENMASK(2, 0)
152
153#define ZL_REG_DPLL_PHASE_ERR_READ_MASK		ZL_REG(5, 0x54, 1)
154
155#define ZL_REG_DPLL_PHASE_ERR_DATA(_idx)				\
156	ZL_REG_IDX(_idx, 5, 0x55, 6, ZL3073X_MAX_CHANNELS, 6)
157
158/***********************************
159 * Register Page 9, Synth and Output
160 ***********************************/
161
162#define ZL_REG_SYNTH_CTRL(_idx)						\
163	ZL_REG_IDX(_idx, 9, 0x00, 1, ZL3073X_NUM_SYNTHS, 1)
164#define ZL_SYNTH_CTRL_EN			BIT(0)
165#define ZL_SYNTH_CTRL_DPLL_SEL			GENMASK(6, 4)
166
167#define ZL_REG_SYNTH_PHASE_SHIFT_CTRL		ZL_REG(9, 0x1e, 1)
168#define ZL_REG_SYNTH_PHASE_SHIFT_MASK		ZL_REG(9, 0x1f, 1)
169#define ZL_REG_SYNTH_PHASE_SHIFT_INTVL		ZL_REG(9, 0x20, 1)
170#define ZL_REG_SYNTH_PHASE_SHIFT_DATA		ZL_REG(9, 0x21, 2)
171
172#define ZL_REG_OUTPUT_CTRL(_idx)					\
173	ZL_REG_IDX(_idx, 9, 0x28, 1, ZL3073X_NUM_OUTS, 1)
174#define ZL_OUTPUT_CTRL_EN			BIT(0)
175#define ZL_OUTPUT_CTRL_SYNTH_SEL		GENMASK(6, 4)
176
177/*******************************
178 * Register Page 10, Ref Mailbox
179 *******************************/
180
181#define ZL_REG_REF_MB_MASK			ZL_REG(10, 0x02, 2)
182
183#define ZL_REG_REF_MB_SEM			ZL_REG(10, 0x04, 1)
184#define ZL_REF_MB_SEM_WR			BIT(0)
185#define ZL_REF_MB_SEM_RD			BIT(1)
186
187#define ZL_REG_REF_FREQ_BASE			ZL_REG(10, 0x05, 2)
188#define ZL_REG_REF_FREQ_MULT			ZL_REG(10, 0x07, 2)
189#define ZL_REG_REF_RATIO_M			ZL_REG(10, 0x09, 2)
190#define ZL_REG_REF_RATIO_N			ZL_REG(10, 0x0b, 2)
191
192#define ZL_REG_REF_CONFIG			ZL_REG(10, 0x0d, 1)
193#define ZL_REF_CONFIG_ENABLE			BIT(0)
194#define ZL_REF_CONFIG_DIFF_EN			BIT(2)
195
196#define ZL_REG_REF_PHASE_OFFSET_COMP		ZL_REG(10, 0x28, 6)
197#define ZL_REG_REF_PHASE_OFFSET_COMP_32	ZL_REG(10, 0x28, 4)
198
199#define ZL_REG_REF_SYNC_CTRL			ZL_REG(10, 0x2e, 1)
200#define ZL_REF_SYNC_CTRL_MODE			GENMASK(2, 0)
201#define ZL_REF_SYNC_CTRL_MODE_REFSYNC_PAIR_OFF	0
202#define ZL_REF_SYNC_CTRL_MODE_50_50_ESYNC_25_75	2
203
204#define ZL_REG_REF_ESYNC_DIV			ZL_REG(10, 0x30, 4)
205#define ZL_REF_ESYNC_DIV_1HZ			0
206
207/********************************
208 * Register Page 12, DPLL Mailbox
209 ********************************/
210
211#define ZL_REG_DPLL_MB_MASK			ZL_REG(12, 0x02, 2)
212
213#define ZL_REG_DPLL_MB_SEM			ZL_REG(12, 0x04, 1)
214#define ZL_DPLL_MB_SEM_WR			BIT(0)
215#define ZL_DPLL_MB_SEM_RD			BIT(1)
216
217#define ZL_REG_DPLL_REF_PRIO(_idx)					\
218	ZL_REG_IDX(_idx, 12, 0x52, 1, ZL3073X_NUM_REFS / 2, 1)
219#define ZL_DPLL_REF_PRIO_REF_P			GENMASK(3, 0)
220#define ZL_DPLL_REF_PRIO_REF_N			GENMASK(7, 4)
221#define ZL_DPLL_REF_PRIO_MAX			14
222#define ZL_DPLL_REF_PRIO_NONE			15
223
224/*********************************
225 * Register Page 13, Synth Mailbox
226 *********************************/
227
228#define ZL_REG_SYNTH_MB_MASK			ZL_REG(13, 0x02, 2)
229
230#define ZL_REG_SYNTH_MB_SEM			ZL_REG(13, 0x04, 1)
231#define ZL_SYNTH_MB_SEM_WR			BIT(0)
232#define ZL_SYNTH_MB_SEM_RD			BIT(1)
233
234#define ZL_REG_SYNTH_FREQ_BASE			ZL_REG(13, 0x06, 2)
235#define ZL_REG_SYNTH_FREQ_MULT			ZL_REG(13, 0x08, 4)
236#define ZL_REG_SYNTH_FREQ_M			ZL_REG(13, 0x0c, 2)
237#define ZL_REG_SYNTH_FREQ_N			ZL_REG(13, 0x0e, 2)
238
239/**********************************
240 * Register Page 14, Output Mailbox
241 **********************************/
242#define ZL_REG_OUTPUT_MB_MASK			ZL_REG(14, 0x02, 2)
243
244#define ZL_REG_OUTPUT_MB_SEM			ZL_REG(14, 0x04, 1)
245#define ZL_OUTPUT_MB_SEM_WR			BIT(0)
246#define ZL_OUTPUT_MB_SEM_RD			BIT(1)
247
248#define ZL_REG_OUTPUT_MODE			ZL_REG(14, 0x05, 1)
249#define ZL_OUTPUT_MODE_CLOCK_TYPE		GENMASK(2, 0)
250#define ZL_OUTPUT_MODE_CLOCK_TYPE_NORMAL	0
251#define ZL_OUTPUT_MODE_CLOCK_TYPE_ESYNC		1
252#define ZL_OUTPUT_MODE_SIGNAL_FORMAT		GENMASK(7, 4)
253#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_DISABLED	0
254#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_LVDS	1
255#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_DIFF	2
256#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_LOWVCM	3
257#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2		4
258#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_1P		5
259#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_1N		6
260#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_INV	7
261#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_NDIV	12
262#define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_NDIV_INV	15
263
264#define ZL_REG_OUTPUT_DIV			ZL_REG(14, 0x0c, 4)
265#define ZL_REG_OUTPUT_WIDTH			ZL_REG(14, 0x10, 4)
266#define ZL_REG_OUTPUT_ESYNC_PERIOD		ZL_REG(14, 0x14, 4)
267#define ZL_REG_OUTPUT_ESYNC_WIDTH		ZL_REG(14, 0x18, 4)
268#define ZL_REG_OUTPUT_PHASE_COMP		ZL_REG(14, 0x20, 4)
269
270/*
271 * Register Page 255 - HW registers access
272 */
273#define ZL_REG_HWREG_OP				ZL_REG(0xff, 0x00, 1)
274#define ZL_HWREG_OP_WRITE			0x28
275#define ZL_HWREG_OP_READ			0x29
276#define ZL_HWREG_OP_PENDING			BIT(1)
277
278#define ZL_REG_HWREG_ADDR			ZL_REG(0xff, 0x04, 4)
279#define ZL_REG_HWREG_WRITE_DATA			ZL_REG(0xff, 0x08, 4)
280#define ZL_REG_HWREG_READ_DATA			ZL_REG(0xff, 0x0c, 4)
281
282/*
283 * Registers available in flash mode
284 */
285#define ZL_REG_FLASH_HASH			ZL_REG(0, 0x78, 4)
286#define ZL_REG_FLASH_FAMILY			ZL_REG(0, 0x7c, 1)
287#define ZL_REG_FLASH_RELEASE			ZL_REG(0, 0x7d, 1)
288
289#define ZL_REG_HOST_CONTROL			ZL_REG(1, 0x02, 1)
290#define ZL_HOST_CONTROL_ENABLE			BIT(0)
291
292#define ZL_REG_IMAGE_START_ADDR			ZL_REG(1, 0x04, 4)
293#define ZL_REG_IMAGE_SIZE			ZL_REG(1, 0x08, 4)
294#define ZL_REG_FLASH_INDEX_READ			ZL_REG(1, 0x0c, 4)
295#define ZL_REG_FLASH_INDEX_WRITE		ZL_REG(1, 0x10, 4)
296#define ZL_REG_FILL_PATTERN			ZL_REG(1, 0x14, 4)
297
298#define ZL_REG_WRITE_FLASH			ZL_REG(1, 0x18, 1)
299#define ZL_WRITE_FLASH_OP			GENMASK(2, 0)
300#define ZL_WRITE_FLASH_OP_DONE			0x0
301#define ZL_WRITE_FLASH_OP_SECTORS		0x2
302#define ZL_WRITE_FLASH_OP_PAGE			0x3
303#define ZL_WRITE_FLASH_OP_COPY_PAGE		0x4
304
305#define ZL_REG_FLASH_INFO			ZL_REG(2, 0x00, 1)
306#define ZL_FLASH_INFO_SECTOR_SIZE		GENMASK(3, 0)
307#define ZL_FLASH_INFO_SECTOR_4K			0
308#define ZL_FLASH_INFO_SECTOR_64K		1
309
310#define ZL_REG_ERROR_COUNT			ZL_REG(2, 0x04, 4)
311#define ZL_REG_ERROR_CAUSE			ZL_REG(2, 0x08, 4)
312
313#define ZL_REG_OP_STATE				ZL_REG(2, 0x14, 1)
314#define ZL_OP_STATE_NO_COMMAND			0
315#define ZL_OP_STATE_PENDING			1
316#define ZL_OP_STATE_DONE			2
317
318#endif /* _ZL3073X_REGS_H */
~/ Read-only file preview.