xref: /aosp_15_r20/external/igt-gpu-tools/tools/hsw_compute_wrpll.c (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker /*
2*d83cc019SAndroid Build Coastguard Worker  * Copyright © 2014 Intel Corporation
3*d83cc019SAndroid Build Coastguard Worker  *
4*d83cc019SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*d83cc019SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*d83cc019SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*d83cc019SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*d83cc019SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*d83cc019SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*d83cc019SAndroid Build Coastguard Worker  *
11*d83cc019SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*d83cc019SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*d83cc019SAndroid Build Coastguard Worker  * Software.
14*d83cc019SAndroid Build Coastguard Worker  *
15*d83cc019SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*d83cc019SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*d83cc019SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*d83cc019SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*d83cc019SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*d83cc019SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21*d83cc019SAndroid Build Coastguard Worker  * DEALINGS IN THE SOFTWARE.
22*d83cc019SAndroid Build Coastguard Worker  */
23*d83cc019SAndroid Build Coastguard Worker 
24*d83cc019SAndroid Build Coastguard Worker #include <inttypes.h>
25*d83cc019SAndroid Build Coastguard Worker #include <stdio.h>
26*d83cc019SAndroid Build Coastguard Worker #include <stdbool.h>
27*d83cc019SAndroid Build Coastguard Worker #include <stdint.h>
28*d83cc019SAndroid Build Coastguard Worker #include <stdlib.h>
29*d83cc019SAndroid Build Coastguard Worker 
30*d83cc019SAndroid Build Coastguard Worker #include "intel_io.h"
31*d83cc019SAndroid Build Coastguard Worker #include "drmtest.h"
32*d83cc019SAndroid Build Coastguard Worker 
33*d83cc019SAndroid Build Coastguard Worker #define LC_FREQ 2700
34*d83cc019SAndroid Build Coastguard Worker #define LC_FREQ_2K (LC_FREQ * 2000)
35*d83cc019SAndroid Build Coastguard Worker 
36*d83cc019SAndroid Build Coastguard Worker #define P_MIN 2
37*d83cc019SAndroid Build Coastguard Worker #define P_MAX 64
38*d83cc019SAndroid Build Coastguard Worker #define P_INC 2
39*d83cc019SAndroid Build Coastguard Worker 
40*d83cc019SAndroid Build Coastguard Worker /* Constraints for PLL good behavior */
41*d83cc019SAndroid Build Coastguard Worker #define REF_MIN 48
42*d83cc019SAndroid Build Coastguard Worker #define REF_MAX 400
43*d83cc019SAndroid Build Coastguard Worker #define VCO_MIN 2400
44*d83cc019SAndroid Build Coastguard Worker #define VCO_MAX 4800
45*d83cc019SAndroid Build Coastguard Worker 
46*d83cc019SAndroid Build Coastguard Worker #define ABS_DIFF(a, b) ((a > b) ? (a - b) : (b - a))
47*d83cc019SAndroid Build Coastguard Worker 
48*d83cc019SAndroid Build Coastguard Worker struct wrpll_rnp {
49*d83cc019SAndroid Build Coastguard Worker 	unsigned p, n2, r2;
50*d83cc019SAndroid Build Coastguard Worker };
51*d83cc019SAndroid Build Coastguard Worker 
wrpll_get_budget_for_freq(int clock)52*d83cc019SAndroid Build Coastguard Worker static unsigned wrpll_get_budget_for_freq(int clock)
53*d83cc019SAndroid Build Coastguard Worker {
54*d83cc019SAndroid Build Coastguard Worker 	unsigned budget;
55*d83cc019SAndroid Build Coastguard Worker 
56*d83cc019SAndroid Build Coastguard Worker 	switch (clock) {
57*d83cc019SAndroid Build Coastguard Worker 	case 25175000:
58*d83cc019SAndroid Build Coastguard Worker 	case 25200000:
59*d83cc019SAndroid Build Coastguard Worker 	case 27000000:
60*d83cc019SAndroid Build Coastguard Worker 	case 27027000:
61*d83cc019SAndroid Build Coastguard Worker 	case 37762500:
62*d83cc019SAndroid Build Coastguard Worker 	case 37800000:
63*d83cc019SAndroid Build Coastguard Worker 	case 40500000:
64*d83cc019SAndroid Build Coastguard Worker 	case 40541000:
65*d83cc019SAndroid Build Coastguard Worker 	case 54000000:
66*d83cc019SAndroid Build Coastguard Worker 	case 54054000:
67*d83cc019SAndroid Build Coastguard Worker 	case 59341000:
68*d83cc019SAndroid Build Coastguard Worker 	case 59400000:
69*d83cc019SAndroid Build Coastguard Worker 	case 72000000:
70*d83cc019SAndroid Build Coastguard Worker 	case 74176000:
71*d83cc019SAndroid Build Coastguard Worker 	case 74250000:
72*d83cc019SAndroid Build Coastguard Worker 	case 81000000:
73*d83cc019SAndroid Build Coastguard Worker 	case 81081000:
74*d83cc019SAndroid Build Coastguard Worker 	case 89012000:
75*d83cc019SAndroid Build Coastguard Worker 	case 89100000:
76*d83cc019SAndroid Build Coastguard Worker 	case 108000000:
77*d83cc019SAndroid Build Coastguard Worker 	case 108108000:
78*d83cc019SAndroid Build Coastguard Worker 	case 111264000:
79*d83cc019SAndroid Build Coastguard Worker 	case 111375000:
80*d83cc019SAndroid Build Coastguard Worker 	case 148352000:
81*d83cc019SAndroid Build Coastguard Worker 	case 148500000:
82*d83cc019SAndroid Build Coastguard Worker 	case 162000000:
83*d83cc019SAndroid Build Coastguard Worker 	case 162162000:
84*d83cc019SAndroid Build Coastguard Worker 	case 222525000:
85*d83cc019SAndroid Build Coastguard Worker 	case 222750000:
86*d83cc019SAndroid Build Coastguard Worker 	case 296703000:
87*d83cc019SAndroid Build Coastguard Worker 	case 297000000:
88*d83cc019SAndroid Build Coastguard Worker 		budget = 0;
89*d83cc019SAndroid Build Coastguard Worker 		break;
90*d83cc019SAndroid Build Coastguard Worker 	case 233500000:
91*d83cc019SAndroid Build Coastguard Worker 	case 245250000:
92*d83cc019SAndroid Build Coastguard Worker 	case 247750000:
93*d83cc019SAndroid Build Coastguard Worker 	case 253250000:
94*d83cc019SAndroid Build Coastguard Worker 	case 298000000:
95*d83cc019SAndroid Build Coastguard Worker 		budget = 1500;
96*d83cc019SAndroid Build Coastguard Worker 		break;
97*d83cc019SAndroid Build Coastguard Worker 	case 169128000:
98*d83cc019SAndroid Build Coastguard Worker 	case 169500000:
99*d83cc019SAndroid Build Coastguard Worker 	case 179500000:
100*d83cc019SAndroid Build Coastguard Worker 	case 202000000:
101*d83cc019SAndroid Build Coastguard Worker 		budget = 2000;
102*d83cc019SAndroid Build Coastguard Worker 		break;
103*d83cc019SAndroid Build Coastguard Worker 	case 256250000:
104*d83cc019SAndroid Build Coastguard Worker 	case 262500000:
105*d83cc019SAndroid Build Coastguard Worker 	case 270000000:
106*d83cc019SAndroid Build Coastguard Worker 	case 272500000:
107*d83cc019SAndroid Build Coastguard Worker 	case 273750000:
108*d83cc019SAndroid Build Coastguard Worker 	case 280750000:
109*d83cc019SAndroid Build Coastguard Worker 	case 281250000:
110*d83cc019SAndroid Build Coastguard Worker 	case 286000000:
111*d83cc019SAndroid Build Coastguard Worker 	case 291750000:
112*d83cc019SAndroid Build Coastguard Worker 		budget = 4000;
113*d83cc019SAndroid Build Coastguard Worker 		break;
114*d83cc019SAndroid Build Coastguard Worker 	case 267250000:
115*d83cc019SAndroid Build Coastguard Worker 	case 268500000:
116*d83cc019SAndroid Build Coastguard Worker 		budget = 5000;
117*d83cc019SAndroid Build Coastguard Worker 		break;
118*d83cc019SAndroid Build Coastguard Worker 	default:
119*d83cc019SAndroid Build Coastguard Worker 		budget = 1000;
120*d83cc019SAndroid Build Coastguard Worker 		break;
121*d83cc019SAndroid Build Coastguard Worker 	}
122*d83cc019SAndroid Build Coastguard Worker 
123*d83cc019SAndroid Build Coastguard Worker 	return budget;
124*d83cc019SAndroid Build Coastguard Worker }
125*d83cc019SAndroid Build Coastguard Worker 
wrpll_update_rnp(uint64_t freq2k,unsigned budget,unsigned r2,unsigned n2,unsigned p,struct wrpll_rnp * best)126*d83cc019SAndroid Build Coastguard Worker static void wrpll_update_rnp(uint64_t freq2k, unsigned budget,
127*d83cc019SAndroid Build Coastguard Worker 			     unsigned r2, unsigned n2, unsigned p,
128*d83cc019SAndroid Build Coastguard Worker 			     struct wrpll_rnp *best)
129*d83cc019SAndroid Build Coastguard Worker {
130*d83cc019SAndroid Build Coastguard Worker 	uint64_t a, b, c, d, diff, diff_best;
131*d83cc019SAndroid Build Coastguard Worker 
132*d83cc019SAndroid Build Coastguard Worker 	/* No best (r,n,p) yet */
133*d83cc019SAndroid Build Coastguard Worker 	if (best->p == 0) {
134*d83cc019SAndroid Build Coastguard Worker 		best->p = p;
135*d83cc019SAndroid Build Coastguard Worker 		best->n2 = n2;
136*d83cc019SAndroid Build Coastguard Worker 		best->r2 = r2;
137*d83cc019SAndroid Build Coastguard Worker 		return;
138*d83cc019SAndroid Build Coastguard Worker 	}
139*d83cc019SAndroid Build Coastguard Worker 
140*d83cc019SAndroid Build Coastguard Worker 	/*
141*d83cc019SAndroid Build Coastguard Worker 	 * Output clock is (LC_FREQ_2K / 2000) * N / (P * R), which compares to
142*d83cc019SAndroid Build Coastguard Worker 	 * freq2k.
143*d83cc019SAndroid Build Coastguard Worker 	 *
144*d83cc019SAndroid Build Coastguard Worker 	 * delta = 1e6 *
145*d83cc019SAndroid Build Coastguard Worker 	 *	   abs(freq2k - (LC_FREQ_2K * n2/(p * r2))) /
146*d83cc019SAndroid Build Coastguard Worker 	 *	   freq2k;
147*d83cc019SAndroid Build Coastguard Worker 	 *
148*d83cc019SAndroid Build Coastguard Worker 	 * and we would like delta <= budget.
149*d83cc019SAndroid Build Coastguard Worker 	 *
150*d83cc019SAndroid Build Coastguard Worker 	 * If the discrepancy is above the PPM-based budget, always prefer to
151*d83cc019SAndroid Build Coastguard Worker 	 * improve upon the previous solution.  However, if you're within the
152*d83cc019SAndroid Build Coastguard Worker 	 * budget, try to maximize Ref * VCO, that is N / (P * R^2).
153*d83cc019SAndroid Build Coastguard Worker 	 */
154*d83cc019SAndroid Build Coastguard Worker 	a = freq2k * budget * p * r2;
155*d83cc019SAndroid Build Coastguard Worker 	b = freq2k * budget * best->p * best->r2;
156*d83cc019SAndroid Build Coastguard Worker 	diff = ABS_DIFF((freq2k * p * r2), (LC_FREQ_2K * n2));
157*d83cc019SAndroid Build Coastguard Worker 	diff_best = ABS_DIFF((freq2k * best->p * best->r2),
158*d83cc019SAndroid Build Coastguard Worker 			     (LC_FREQ_2K * best->n2));
159*d83cc019SAndroid Build Coastguard Worker 	c = 1000000 * diff;
160*d83cc019SAndroid Build Coastguard Worker 	d = 1000000 * diff_best;
161*d83cc019SAndroid Build Coastguard Worker 
162*d83cc019SAndroid Build Coastguard Worker 	if (a < c && b < d) {
163*d83cc019SAndroid Build Coastguard Worker 		/* If both are above the budget, pick the closer */
164*d83cc019SAndroid Build Coastguard Worker 		if (best->p * best->r2 * diff < p * r2 * diff_best) {
165*d83cc019SAndroid Build Coastguard Worker 			best->p = p;
166*d83cc019SAndroid Build Coastguard Worker 			best->n2 = n2;
167*d83cc019SAndroid Build Coastguard Worker 			best->r2 = r2;
168*d83cc019SAndroid Build Coastguard Worker 		}
169*d83cc019SAndroid Build Coastguard Worker 	} else if (a >= c && b < d) {
170*d83cc019SAndroid Build Coastguard Worker 		/* If A is below the threshold but B is above it?  Update. */
171*d83cc019SAndroid Build Coastguard Worker 		best->p = p;
172*d83cc019SAndroid Build Coastguard Worker 		best->n2 = n2;
173*d83cc019SAndroid Build Coastguard Worker 		best->r2 = r2;
174*d83cc019SAndroid Build Coastguard Worker 	} else if (a >= c && b >= d) {
175*d83cc019SAndroid Build Coastguard Worker 		/* Both are below the limit, so pick the higher n2/(r2*r2) */
176*d83cc019SAndroid Build Coastguard Worker 		if (n2 * best->r2 * best->r2 > best->n2 * r2 * r2) {
177*d83cc019SAndroid Build Coastguard Worker 			best->p = p;
178*d83cc019SAndroid Build Coastguard Worker 			best->n2 = n2;
179*d83cc019SAndroid Build Coastguard Worker 			best->r2 = r2;
180*d83cc019SAndroid Build Coastguard Worker 		}
181*d83cc019SAndroid Build Coastguard Worker 	}
182*d83cc019SAndroid Build Coastguard Worker 	/* Otherwise a < c && b >= d, do nothing */
183*d83cc019SAndroid Build Coastguard Worker }
184*d83cc019SAndroid Build Coastguard Worker 
185*d83cc019SAndroid Build Coastguard Worker static void
wrpll_compute_rnp(int clock,unsigned * r2_out,unsigned * n2_out,unsigned * p_out)186*d83cc019SAndroid Build Coastguard Worker wrpll_compute_rnp(int clock /* in Hz */,
187*d83cc019SAndroid Build Coastguard Worker 		  unsigned *r2_out, unsigned *n2_out, unsigned *p_out)
188*d83cc019SAndroid Build Coastguard Worker {
189*d83cc019SAndroid Build Coastguard Worker 	uint64_t freq2k;
190*d83cc019SAndroid Build Coastguard Worker 	unsigned p, n2, r2;
191*d83cc019SAndroid Build Coastguard Worker 	struct wrpll_rnp best = { 0, 0, 0 };
192*d83cc019SAndroid Build Coastguard Worker 	unsigned budget;
193*d83cc019SAndroid Build Coastguard Worker 
194*d83cc019SAndroid Build Coastguard Worker 	freq2k = clock / 100;
195*d83cc019SAndroid Build Coastguard Worker 
196*d83cc019SAndroid Build Coastguard Worker 	budget = wrpll_get_budget_for_freq(clock);
197*d83cc019SAndroid Build Coastguard Worker 
198*d83cc019SAndroid Build Coastguard Worker 	/* Special case handling for 540 pixel clock: bypass WR PLL entirely
199*d83cc019SAndroid Build Coastguard Worker 	 * and directly pass the LC PLL to it. */
200*d83cc019SAndroid Build Coastguard Worker 	if (freq2k == 5400000) {
201*d83cc019SAndroid Build Coastguard Worker 		*n2_out = 2;
202*d83cc019SAndroid Build Coastguard Worker 		*p_out = 1;
203*d83cc019SAndroid Build Coastguard Worker 		*r2_out = 2;
204*d83cc019SAndroid Build Coastguard Worker 		return;
205*d83cc019SAndroid Build Coastguard Worker 	}
206*d83cc019SAndroid Build Coastguard Worker 
207*d83cc019SAndroid Build Coastguard Worker 	/*
208*d83cc019SAndroid Build Coastguard Worker 	 * Ref = LC_FREQ / R, where Ref is the actual reference input seen by
209*d83cc019SAndroid Build Coastguard Worker 	 * the WR PLL.
210*d83cc019SAndroid Build Coastguard Worker 	 *
211*d83cc019SAndroid Build Coastguard Worker 	 * We want R so that REF_MIN <= Ref <= REF_MAX.
212*d83cc019SAndroid Build Coastguard Worker 	 * Injecting R2 = 2 * R gives:
213*d83cc019SAndroid Build Coastguard Worker 	 *   REF_MAX * r2 > LC_FREQ * 2 and
214*d83cc019SAndroid Build Coastguard Worker 	 *   REF_MIN * r2 < LC_FREQ * 2
215*d83cc019SAndroid Build Coastguard Worker 	 *
216*d83cc019SAndroid Build Coastguard Worker 	 * Which means the desired boundaries for r2 are:
217*d83cc019SAndroid Build Coastguard Worker 	 *  LC_FREQ * 2 / REF_MAX < r2 < LC_FREQ * 2 / REF_MIN
218*d83cc019SAndroid Build Coastguard Worker 	 *
219*d83cc019SAndroid Build Coastguard Worker 	 */
220*d83cc019SAndroid Build Coastguard Worker         for (r2 = LC_FREQ * 2 / REF_MAX + 1;
221*d83cc019SAndroid Build Coastguard Worker 	     r2 <= LC_FREQ * 2 / REF_MIN;
222*d83cc019SAndroid Build Coastguard Worker 	     r2++) {
223*d83cc019SAndroid Build Coastguard Worker 
224*d83cc019SAndroid Build Coastguard Worker 		/*
225*d83cc019SAndroid Build Coastguard Worker 		 * VCO = N * Ref, that is: VCO = N * LC_FREQ / R
226*d83cc019SAndroid Build Coastguard Worker 		 *
227*d83cc019SAndroid Build Coastguard Worker 		 * Once again we want VCO_MIN <= VCO <= VCO_MAX.
228*d83cc019SAndroid Build Coastguard Worker 		 * Injecting R2 = 2 * R and N2 = 2 * N, we get:
229*d83cc019SAndroid Build Coastguard Worker 		 *   VCO_MAX * r2 > n2 * LC_FREQ and
230*d83cc019SAndroid Build Coastguard Worker 		 *   VCO_MIN * r2 < n2 * LC_FREQ)
231*d83cc019SAndroid Build Coastguard Worker 		 *
232*d83cc019SAndroid Build Coastguard Worker 		 * Which means the desired boundaries for n2 are:
233*d83cc019SAndroid Build Coastguard Worker 		 * VCO_MIN * r2 / LC_FREQ < n2 < VCO_MAX * r2 / LC_FREQ
234*d83cc019SAndroid Build Coastguard Worker 		 */
235*d83cc019SAndroid Build Coastguard Worker 		for (n2 = VCO_MIN * r2 / LC_FREQ + 1;
236*d83cc019SAndroid Build Coastguard Worker 		     n2 <= VCO_MAX * r2 / LC_FREQ;
237*d83cc019SAndroid Build Coastguard Worker 		     n2++) {
238*d83cc019SAndroid Build Coastguard Worker 
239*d83cc019SAndroid Build Coastguard Worker 			for (p = P_MIN; p <= P_MAX; p += P_INC)
240*d83cc019SAndroid Build Coastguard Worker 				wrpll_update_rnp(freq2k, budget,
241*d83cc019SAndroid Build Coastguard Worker 						 r2, n2, p, &best);
242*d83cc019SAndroid Build Coastguard Worker 		}
243*d83cc019SAndroid Build Coastguard Worker 	}
244*d83cc019SAndroid Build Coastguard Worker 
245*d83cc019SAndroid Build Coastguard Worker 	*n2_out = best.n2;
246*d83cc019SAndroid Build Coastguard Worker 	*p_out = best.p;
247*d83cc019SAndroid Build Coastguard Worker 	*r2_out = best.r2;
248*d83cc019SAndroid Build Coastguard Worker }
249*d83cc019SAndroid Build Coastguard Worker 
250*d83cc019SAndroid Build Coastguard Worker /* WRPLL clock dividers */
251*d83cc019SAndroid Build Coastguard Worker struct wrpll_tmds_clock {
252*d83cc019SAndroid Build Coastguard Worker 	uint32_t clock;
253*d83cc019SAndroid Build Coastguard Worker 	uint16_t p;		/* Post divider */
254*d83cc019SAndroid Build Coastguard Worker 	uint16_t n2;		/* Feedback divider */
255*d83cc019SAndroid Build Coastguard Worker 	uint16_t r2;		/* Reference divider */
256*d83cc019SAndroid Build Coastguard Worker };
257*d83cc019SAndroid Build Coastguard Worker 
258*d83cc019SAndroid Build Coastguard Worker /* Table of matching values for WRPLL clocks programming for each frequency.
259*d83cc019SAndroid Build Coastguard Worker  * The code assumes this table is sorted. */
260*d83cc019SAndroid Build Coastguard Worker static const struct wrpll_tmds_clock wrpll_tmds_clock_table[] = {
261*d83cc019SAndroid Build Coastguard Worker 	{19750000,	38,	25,	18},
262*d83cc019SAndroid Build Coastguard Worker 	{20000000,	48,	32,	18},
263*d83cc019SAndroid Build Coastguard Worker 	{21000000,	36,	21,	15},
264*d83cc019SAndroid Build Coastguard Worker 	{21912000,	42,	29,	17},
265*d83cc019SAndroid Build Coastguard Worker 	{22000000,	36,	22,	15},
266*d83cc019SAndroid Build Coastguard Worker 	{23000000,	36,	23,	15},
267*d83cc019SAndroid Build Coastguard Worker 	{23500000,	40,	40,	23},
268*d83cc019SAndroid Build Coastguard Worker 	{23750000,	26,	16,	14},
269*d83cc019SAndroid Build Coastguard Worker 	{24000000,	36,	24,	15},
270*d83cc019SAndroid Build Coastguard Worker 	{25000000,	36,	25,	15},
271*d83cc019SAndroid Build Coastguard Worker 	{25175000,	26,	40,	33},
272*d83cc019SAndroid Build Coastguard Worker 	{25200000,	30,	21,	15},
273*d83cc019SAndroid Build Coastguard Worker 	{26000000,	36,	26,	15},
274*d83cc019SAndroid Build Coastguard Worker 	{27000000,	30,	21,	14},
275*d83cc019SAndroid Build Coastguard Worker 	{27027000,	18,	100,	111},
276*d83cc019SAndroid Build Coastguard Worker 	{27500000,	30,	29,	19},
277*d83cc019SAndroid Build Coastguard Worker 	{28000000,	34,	30,	17},
278*d83cc019SAndroid Build Coastguard Worker 	{28320000,	26,	30,	22},
279*d83cc019SAndroid Build Coastguard Worker 	{28322000,	32,	42,	25},
280*d83cc019SAndroid Build Coastguard Worker 	{28750000,	24,	23,	18},
281*d83cc019SAndroid Build Coastguard Worker 	{29000000,	30,	29,	18},
282*d83cc019SAndroid Build Coastguard Worker 	{29750000,	32,	30,	17},
283*d83cc019SAndroid Build Coastguard Worker 	{30000000,	30,	25,	15},
284*d83cc019SAndroid Build Coastguard Worker 	{30750000,	30,	41,	24},
285*d83cc019SAndroid Build Coastguard Worker 	{31000000,	30,	31,	18},
286*d83cc019SAndroid Build Coastguard Worker 	{31500000,	30,	28,	16},
287*d83cc019SAndroid Build Coastguard Worker 	{32000000,	30,	32,	18},
288*d83cc019SAndroid Build Coastguard Worker 	{32500000,	28,	32,	19},
289*d83cc019SAndroid Build Coastguard Worker 	{33000000,	24,	22,	15},
290*d83cc019SAndroid Build Coastguard Worker 	{34000000,	28,	30,	17},
291*d83cc019SAndroid Build Coastguard Worker 	{35000000,	26,	32,	19},
292*d83cc019SAndroid Build Coastguard Worker 	{35500000,	24,	30,	19},
293*d83cc019SAndroid Build Coastguard Worker 	{36000000,	26,	26,	15},
294*d83cc019SAndroid Build Coastguard Worker 	{36750000,	26,	46,	26},
295*d83cc019SAndroid Build Coastguard Worker 	{37000000,	24,	23,	14},
296*d83cc019SAndroid Build Coastguard Worker 	{37762500,	22,	40,	26},
297*d83cc019SAndroid Build Coastguard Worker 	{37800000,	20,	21,	15},
298*d83cc019SAndroid Build Coastguard Worker 	{38000000,	24,	27,	16},
299*d83cc019SAndroid Build Coastguard Worker 	{38250000,	24,	34,	20},
300*d83cc019SAndroid Build Coastguard Worker 	{39000000,	24,	26,	15},
301*d83cc019SAndroid Build Coastguard Worker 	{40000000,	24,	32,	18},
302*d83cc019SAndroid Build Coastguard Worker 	{40500000,	20,	21,	14},
303*d83cc019SAndroid Build Coastguard Worker 	{40541000,	22,	147,	89},
304*d83cc019SAndroid Build Coastguard Worker 	{40750000,	18,	19,	14},
305*d83cc019SAndroid Build Coastguard Worker 	{41000000,	16,	17,	14},
306*d83cc019SAndroid Build Coastguard Worker 	{41500000,	22,	44,	26},
307*d83cc019SAndroid Build Coastguard Worker 	{41540000,	22,	44,	26},
308*d83cc019SAndroid Build Coastguard Worker 	{42000000,	18,	21,	15},
309*d83cc019SAndroid Build Coastguard Worker 	{42500000,	22,	45,	26},
310*d83cc019SAndroid Build Coastguard Worker 	{43000000,	20,	43,	27},
311*d83cc019SAndroid Build Coastguard Worker 	{43163000,	20,	24,	15},
312*d83cc019SAndroid Build Coastguard Worker 	{44000000,	18,	22,	15},
313*d83cc019SAndroid Build Coastguard Worker 	{44900000,	20,	108,	65},
314*d83cc019SAndroid Build Coastguard Worker 	{45000000,	20,	25,	15},
315*d83cc019SAndroid Build Coastguard Worker 	{45250000,	20,	52,	31},
316*d83cc019SAndroid Build Coastguard Worker 	{46000000,	18,	23,	15},
317*d83cc019SAndroid Build Coastguard Worker 	{46750000,	20,	45,	26},
318*d83cc019SAndroid Build Coastguard Worker 	{47000000,	20,	40,	23},
319*d83cc019SAndroid Build Coastguard Worker 	{48000000,	18,	24,	15},
320*d83cc019SAndroid Build Coastguard Worker 	{49000000,	18,	49,	30},
321*d83cc019SAndroid Build Coastguard Worker 	{49500000,	16,	22,	15},
322*d83cc019SAndroid Build Coastguard Worker 	{50000000,	18,	25,	15},
323*d83cc019SAndroid Build Coastguard Worker 	{50500000,	18,	32,	19},
324*d83cc019SAndroid Build Coastguard Worker 	{51000000,	18,	34,	20},
325*d83cc019SAndroid Build Coastguard Worker 	{52000000,	18,	26,	15},
326*d83cc019SAndroid Build Coastguard Worker 	{52406000,	14,	34,	25},
327*d83cc019SAndroid Build Coastguard Worker 	{53000000,	16,	22,	14},
328*d83cc019SAndroid Build Coastguard Worker 	{54000000,	16,	24,	15},
329*d83cc019SAndroid Build Coastguard Worker 	{54054000,	16,	173,	108},
330*d83cc019SAndroid Build Coastguard Worker 	{54500000,	14,	24,	17},
331*d83cc019SAndroid Build Coastguard Worker 	{55000000,	12,	22,	18},
332*d83cc019SAndroid Build Coastguard Worker 	{56000000,	14,	45,	31},
333*d83cc019SAndroid Build Coastguard Worker 	{56250000,	16,	25,	15},
334*d83cc019SAndroid Build Coastguard Worker 	{56750000,	14,	25,	17},
335*d83cc019SAndroid Build Coastguard Worker 	{57000000,	16,	27,	16},
336*d83cc019SAndroid Build Coastguard Worker 	{58000000,	16,	43,	25},
337*d83cc019SAndroid Build Coastguard Worker 	{58250000,	16,	38,	22},
338*d83cc019SAndroid Build Coastguard Worker 	{58750000,	16,	40,	23},
339*d83cc019SAndroid Build Coastguard Worker 	{59000000,	14,	26,	17},
340*d83cc019SAndroid Build Coastguard Worker 	{59341000,	14,	40,	26},
341*d83cc019SAndroid Build Coastguard Worker 	{59400000,	16,	44,	25},
342*d83cc019SAndroid Build Coastguard Worker 	{60000000,	16,	32,	18},
343*d83cc019SAndroid Build Coastguard Worker 	{60500000,	12,	39,	29},
344*d83cc019SAndroid Build Coastguard Worker 	{61000000,	14,	49,	31},
345*d83cc019SAndroid Build Coastguard Worker 	{62000000,	14,	37,	23},
346*d83cc019SAndroid Build Coastguard Worker 	{62250000,	14,	42,	26},
347*d83cc019SAndroid Build Coastguard Worker 	{63000000,	12,	21,	15},
348*d83cc019SAndroid Build Coastguard Worker 	{63500000,	14,	28,	17},
349*d83cc019SAndroid Build Coastguard Worker 	{64000000,	12,	27,	19},
350*d83cc019SAndroid Build Coastguard Worker 	{65000000,	14,	32,	19},
351*d83cc019SAndroid Build Coastguard Worker 	{65250000,	12,	29,	20},
352*d83cc019SAndroid Build Coastguard Worker 	{65500000,	12,	32,	22},
353*d83cc019SAndroid Build Coastguard Worker 	{66000000,	12,	22,	15},
354*d83cc019SAndroid Build Coastguard Worker 	{66667000,	14,	38,	22},
355*d83cc019SAndroid Build Coastguard Worker 	{66750000,	10,	21,	17},
356*d83cc019SAndroid Build Coastguard Worker 	{67000000,	14,	33,	19},
357*d83cc019SAndroid Build Coastguard Worker 	{67750000,	14,	58,	33},
358*d83cc019SAndroid Build Coastguard Worker 	{68000000,	14,	30,	17},
359*d83cc019SAndroid Build Coastguard Worker 	{68179000,	14,	46,	26},
360*d83cc019SAndroid Build Coastguard Worker 	{68250000,	14,	46,	26},
361*d83cc019SAndroid Build Coastguard Worker 	{69000000,	12,	23,	15},
362*d83cc019SAndroid Build Coastguard Worker 	{70000000,	12,	28,	18},
363*d83cc019SAndroid Build Coastguard Worker 	{71000000,	12,	30,	19},
364*d83cc019SAndroid Build Coastguard Worker 	{72000000,	12,	24,	15},
365*d83cc019SAndroid Build Coastguard Worker 	{73000000,	10,	23,	17},
366*d83cc019SAndroid Build Coastguard Worker 	{74000000,	12,	23,	14},
367*d83cc019SAndroid Build Coastguard Worker 	{74176000,	8,	100,	91},
368*d83cc019SAndroid Build Coastguard Worker 	{74250000,	10,	22,	16},
369*d83cc019SAndroid Build Coastguard Worker 	{74481000,	12,	43,	26},
370*d83cc019SAndroid Build Coastguard Worker 	{74500000,	10,	29,	21},
371*d83cc019SAndroid Build Coastguard Worker 	{75000000,	12,	25,	15},
372*d83cc019SAndroid Build Coastguard Worker 	{75250000,	10,	39,	28},
373*d83cc019SAndroid Build Coastguard Worker 	{76000000,	12,	27,	16},
374*d83cc019SAndroid Build Coastguard Worker 	{77000000,	12,	53,	31},
375*d83cc019SAndroid Build Coastguard Worker 	{78000000,	12,	26,	15},
376*d83cc019SAndroid Build Coastguard Worker 	{78750000,	12,	28,	16},
377*d83cc019SAndroid Build Coastguard Worker 	{79000000,	10,	38,	26},
378*d83cc019SAndroid Build Coastguard Worker 	{79500000,	10,	28,	19},
379*d83cc019SAndroid Build Coastguard Worker 	{80000000,	12,	32,	18},
380*d83cc019SAndroid Build Coastguard Worker 	{81000000,	10,	21,	14},
381*d83cc019SAndroid Build Coastguard Worker 	{81081000,	6,	100,	111},
382*d83cc019SAndroid Build Coastguard Worker 	{81624000,	8,	29,	24},
383*d83cc019SAndroid Build Coastguard Worker 	{82000000,	8,	17,	14},
384*d83cc019SAndroid Build Coastguard Worker 	{83000000,	10,	40,	26},
385*d83cc019SAndroid Build Coastguard Worker 	{83950000,	10,	28,	18},
386*d83cc019SAndroid Build Coastguard Worker 	{84000000,	10,	28,	18},
387*d83cc019SAndroid Build Coastguard Worker 	{84750000,	6,	16,	17},
388*d83cc019SAndroid Build Coastguard Worker 	{85000000,	6,	17,	18},
389*d83cc019SAndroid Build Coastguard Worker 	{85250000,	10,	30,	19},
390*d83cc019SAndroid Build Coastguard Worker 	{85750000,	10,	27,	17},
391*d83cc019SAndroid Build Coastguard Worker 	{86000000,	10,	43,	27},
392*d83cc019SAndroid Build Coastguard Worker 	{87000000,	10,	29,	18},
393*d83cc019SAndroid Build Coastguard Worker 	{88000000,	10,	44,	27},
394*d83cc019SAndroid Build Coastguard Worker 	{88500000,	10,	41,	25},
395*d83cc019SAndroid Build Coastguard Worker 	{89000000,	10,	28,	17},
396*d83cc019SAndroid Build Coastguard Worker 	{89012000,	6,	90,	91},
397*d83cc019SAndroid Build Coastguard Worker 	{89100000,	10,	33,	20},
398*d83cc019SAndroid Build Coastguard Worker 	{90000000,	10,	25,	15},
399*d83cc019SAndroid Build Coastguard Worker 	{91000000,	10,	32,	19},
400*d83cc019SAndroid Build Coastguard Worker 	{92000000,	10,	46,	27},
401*d83cc019SAndroid Build Coastguard Worker 	{93000000,	10,	31,	18},
402*d83cc019SAndroid Build Coastguard Worker 	{94000000,	10,	40,	23},
403*d83cc019SAndroid Build Coastguard Worker 	{94500000,	10,	28,	16},
404*d83cc019SAndroid Build Coastguard Worker 	{95000000,	10,	44,	25},
405*d83cc019SAndroid Build Coastguard Worker 	{95654000,	10,	39,	22},
406*d83cc019SAndroid Build Coastguard Worker 	{95750000,	10,	39,	22},
407*d83cc019SAndroid Build Coastguard Worker 	{96000000,	10,	32,	18},
408*d83cc019SAndroid Build Coastguard Worker 	{97000000,	8,	23,	16},
409*d83cc019SAndroid Build Coastguard Worker 	{97750000,	8,	42,	29},
410*d83cc019SAndroid Build Coastguard Worker 	{98000000,	8,	45,	31},
411*d83cc019SAndroid Build Coastguard Worker 	{99000000,	8,	22,	15},
412*d83cc019SAndroid Build Coastguard Worker 	{99750000,	8,	34,	23},
413*d83cc019SAndroid Build Coastguard Worker 	{100000000,	6,	20,	18},
414*d83cc019SAndroid Build Coastguard Worker 	{100500000,	6,	19,	17},
415*d83cc019SAndroid Build Coastguard Worker 	{101000000,	6,	37,	33},
416*d83cc019SAndroid Build Coastguard Worker 	{101250000,	8,	21,	14},
417*d83cc019SAndroid Build Coastguard Worker 	{102000000,	6,	17,	15},
418*d83cc019SAndroid Build Coastguard Worker 	{102250000,	6,	25,	22},
419*d83cc019SAndroid Build Coastguard Worker 	{103000000,	8,	29,	19},
420*d83cc019SAndroid Build Coastguard Worker 	{104000000,	8,	37,	24},
421*d83cc019SAndroid Build Coastguard Worker 	{105000000,	8,	28,	18},
422*d83cc019SAndroid Build Coastguard Worker 	{106000000,	8,	22,	14},
423*d83cc019SAndroid Build Coastguard Worker 	{107000000,	8,	46,	29},
424*d83cc019SAndroid Build Coastguard Worker 	{107214000,	8,	27,	17},
425*d83cc019SAndroid Build Coastguard Worker 	{108000000,	8,	24,	15},
426*d83cc019SAndroid Build Coastguard Worker 	{108108000,	8,	173,	108},
427*d83cc019SAndroid Build Coastguard Worker 	{109000000,	6,	23,	19},
428*d83cc019SAndroid Build Coastguard Worker 	{110000000,	6,	22,	18},
429*d83cc019SAndroid Build Coastguard Worker 	{110013000,	6,	22,	18},
430*d83cc019SAndroid Build Coastguard Worker 	{110250000,	8,	49,	30},
431*d83cc019SAndroid Build Coastguard Worker 	{110500000,	8,	36,	22},
432*d83cc019SAndroid Build Coastguard Worker 	{111000000,	8,	23,	14},
433*d83cc019SAndroid Build Coastguard Worker 	{111264000,	8,	150,	91},
434*d83cc019SAndroid Build Coastguard Worker 	{111375000,	8,	33,	20},
435*d83cc019SAndroid Build Coastguard Worker 	{112000000,	8,	63,	38},
436*d83cc019SAndroid Build Coastguard Worker 	{112500000,	8,	25,	15},
437*d83cc019SAndroid Build Coastguard Worker 	{113100000,	8,	57,	34},
438*d83cc019SAndroid Build Coastguard Worker 	{113309000,	8,	42,	25},
439*d83cc019SAndroid Build Coastguard Worker 	{114000000,	8,	27,	16},
440*d83cc019SAndroid Build Coastguard Worker 	{115000000,	6,	23,	18},
441*d83cc019SAndroid Build Coastguard Worker 	{116000000,	8,	43,	25},
442*d83cc019SAndroid Build Coastguard Worker 	{117000000,	8,	26,	15},
443*d83cc019SAndroid Build Coastguard Worker 	{117500000,	8,	40,	23},
444*d83cc019SAndroid Build Coastguard Worker 	{118000000,	6,	38,	29},
445*d83cc019SAndroid Build Coastguard Worker 	{119000000,	8,	30,	17},
446*d83cc019SAndroid Build Coastguard Worker 	{119500000,	8,	46,	26},
447*d83cc019SAndroid Build Coastguard Worker 	{119651000,	8,	39,	22},
448*d83cc019SAndroid Build Coastguard Worker 	{120000000,	8,	32,	18},
449*d83cc019SAndroid Build Coastguard Worker 	{121000000,	6,	39,	29},
450*d83cc019SAndroid Build Coastguard Worker 	{121250000,	6,	31,	23},
451*d83cc019SAndroid Build Coastguard Worker 	{121750000,	6,	23,	17},
452*d83cc019SAndroid Build Coastguard Worker 	{122000000,	6,	42,	31},
453*d83cc019SAndroid Build Coastguard Worker 	{122614000,	6,	30,	22},
454*d83cc019SAndroid Build Coastguard Worker 	{123000000,	6,	41,	30},
455*d83cc019SAndroid Build Coastguard Worker 	{123379000,	6,	37,	27},
456*d83cc019SAndroid Build Coastguard Worker 	{124000000,	6,	51,	37},
457*d83cc019SAndroid Build Coastguard Worker 	{125000000,	6,	25,	18},
458*d83cc019SAndroid Build Coastguard Worker 	{125250000,	4,	13,	14},
459*d83cc019SAndroid Build Coastguard Worker 	{125750000,	4,	27,	29},
460*d83cc019SAndroid Build Coastguard Worker 	{126000000,	6,	21,	15},
461*d83cc019SAndroid Build Coastguard Worker 	{127000000,	6,	24,	17},
462*d83cc019SAndroid Build Coastguard Worker 	{127250000,	6,	41,	29},
463*d83cc019SAndroid Build Coastguard Worker 	{128000000,	6,	27,	19},
464*d83cc019SAndroid Build Coastguard Worker 	{129000000,	6,	43,	30},
465*d83cc019SAndroid Build Coastguard Worker 	{129859000,	4,	25,	26},
466*d83cc019SAndroid Build Coastguard Worker 	{130000000,	6,	26,	18},
467*d83cc019SAndroid Build Coastguard Worker 	{130250000,	6,	42,	29},
468*d83cc019SAndroid Build Coastguard Worker 	{131000000,	6,	32,	22},
469*d83cc019SAndroid Build Coastguard Worker 	{131500000,	6,	38,	26},
470*d83cc019SAndroid Build Coastguard Worker 	{131850000,	6,	41,	28},
471*d83cc019SAndroid Build Coastguard Worker 	{132000000,	6,	22,	15},
472*d83cc019SAndroid Build Coastguard Worker 	{132750000,	6,	28,	19},
473*d83cc019SAndroid Build Coastguard Worker 	{133000000,	6,	34,	23},
474*d83cc019SAndroid Build Coastguard Worker 	{133330000,	6,	37,	25},
475*d83cc019SAndroid Build Coastguard Worker 	{134000000,	6,	61,	41},
476*d83cc019SAndroid Build Coastguard Worker 	{135000000,	6,	21,	14},
477*d83cc019SAndroid Build Coastguard Worker 	{135250000,	6,	167,	111},
478*d83cc019SAndroid Build Coastguard Worker 	{136000000,	6,	62,	41},
479*d83cc019SAndroid Build Coastguard Worker 	{137000000,	6,	35,	23},
480*d83cc019SAndroid Build Coastguard Worker 	{138000000,	6,	23,	15},
481*d83cc019SAndroid Build Coastguard Worker 	{138500000,	6,	40,	26},
482*d83cc019SAndroid Build Coastguard Worker 	{138750000,	6,	37,	24},
483*d83cc019SAndroid Build Coastguard Worker 	{139000000,	6,	34,	22},
484*d83cc019SAndroid Build Coastguard Worker 	{139050000,	6,	34,	22},
485*d83cc019SAndroid Build Coastguard Worker 	{139054000,	6,	34,	22},
486*d83cc019SAndroid Build Coastguard Worker 	{140000000,	6,	28,	18},
487*d83cc019SAndroid Build Coastguard Worker 	{141000000,	6,	36,	23},
488*d83cc019SAndroid Build Coastguard Worker 	{141500000,	6,	22,	14},
489*d83cc019SAndroid Build Coastguard Worker 	{142000000,	6,	30,	19},
490*d83cc019SAndroid Build Coastguard Worker 	{143000000,	6,	27,	17},
491*d83cc019SAndroid Build Coastguard Worker 	{143472000,	4,	17,	16},
492*d83cc019SAndroid Build Coastguard Worker 	{144000000,	6,	24,	15},
493*d83cc019SAndroid Build Coastguard Worker 	{145000000,	6,	29,	18},
494*d83cc019SAndroid Build Coastguard Worker 	{146000000,	6,	47,	29},
495*d83cc019SAndroid Build Coastguard Worker 	{146250000,	6,	26,	16},
496*d83cc019SAndroid Build Coastguard Worker 	{147000000,	6,	49,	30},
497*d83cc019SAndroid Build Coastguard Worker 	{147891000,	6,	23,	14},
498*d83cc019SAndroid Build Coastguard Worker 	{148000000,	6,	23,	14},
499*d83cc019SAndroid Build Coastguard Worker 	{148250000,	6,	28,	17},
500*d83cc019SAndroid Build Coastguard Worker 	{148352000,	4,	100,	91},
501*d83cc019SAndroid Build Coastguard Worker 	{148500000,	6,	33,	20},
502*d83cc019SAndroid Build Coastguard Worker 	{149000000,	6,	48,	29},
503*d83cc019SAndroid Build Coastguard Worker 	{150000000,	6,	25,	15},
504*d83cc019SAndroid Build Coastguard Worker 	{151000000,	4,	19,	17},
505*d83cc019SAndroid Build Coastguard Worker 	{152000000,	6,	27,	16},
506*d83cc019SAndroid Build Coastguard Worker 	{152280000,	6,	44,	26},
507*d83cc019SAndroid Build Coastguard Worker 	{153000000,	6,	34,	20},
508*d83cc019SAndroid Build Coastguard Worker 	{154000000,	6,	53,	31},
509*d83cc019SAndroid Build Coastguard Worker 	{155000000,	6,	31,	18},
510*d83cc019SAndroid Build Coastguard Worker 	{155250000,	6,	50,	29},
511*d83cc019SAndroid Build Coastguard Worker 	{155750000,	6,	45,	26},
512*d83cc019SAndroid Build Coastguard Worker 	{156000000,	6,	26,	15},
513*d83cc019SAndroid Build Coastguard Worker 	{157000000,	6,	61,	35},
514*d83cc019SAndroid Build Coastguard Worker 	{157500000,	6,	28,	16},
515*d83cc019SAndroid Build Coastguard Worker 	{158000000,	6,	65,	37},
516*d83cc019SAndroid Build Coastguard Worker 	{158250000,	6,	44,	25},
517*d83cc019SAndroid Build Coastguard Worker 	{159000000,	6,	53,	30},
518*d83cc019SAndroid Build Coastguard Worker 	{159500000,	6,	39,	22},
519*d83cc019SAndroid Build Coastguard Worker 	{160000000,	6,	32,	18},
520*d83cc019SAndroid Build Coastguard Worker 	{161000000,	4,	31,	26},
521*d83cc019SAndroid Build Coastguard Worker 	{162000000,	4,	18,	15},
522*d83cc019SAndroid Build Coastguard Worker 	{162162000,	4,	131,	109},
523*d83cc019SAndroid Build Coastguard Worker 	{162500000,	4,	53,	44},
524*d83cc019SAndroid Build Coastguard Worker 	{163000000,	4,	29,	24},
525*d83cc019SAndroid Build Coastguard Worker 	{164000000,	4,	17,	14},
526*d83cc019SAndroid Build Coastguard Worker 	{165000000,	4,	22,	18},
527*d83cc019SAndroid Build Coastguard Worker 	{166000000,	4,	32,	26},
528*d83cc019SAndroid Build Coastguard Worker 	{167000000,	4,	26,	21},
529*d83cc019SAndroid Build Coastguard Worker 	{168000000,	4,	46,	37},
530*d83cc019SAndroid Build Coastguard Worker 	{169000000,	4,	104,	83},
531*d83cc019SAndroid Build Coastguard Worker 	{169128000,	4,	64,	51},
532*d83cc019SAndroid Build Coastguard Worker 	{169500000,	4,	39,	31},
533*d83cc019SAndroid Build Coastguard Worker 	{170000000,	4,	34,	27},
534*d83cc019SAndroid Build Coastguard Worker 	{171000000,	4,	19,	15},
535*d83cc019SAndroid Build Coastguard Worker 	{172000000,	4,	51,	40},
536*d83cc019SAndroid Build Coastguard Worker 	{172750000,	4,	32,	25},
537*d83cc019SAndroid Build Coastguard Worker 	{172800000,	4,	32,	25},
538*d83cc019SAndroid Build Coastguard Worker 	{173000000,	4,	41,	32},
539*d83cc019SAndroid Build Coastguard Worker 	{174000000,	4,	49,	38},
540*d83cc019SAndroid Build Coastguard Worker 	{174787000,	4,	22,	17},
541*d83cc019SAndroid Build Coastguard Worker 	{175000000,	4,	35,	27},
542*d83cc019SAndroid Build Coastguard Worker 	{176000000,	4,	30,	23},
543*d83cc019SAndroid Build Coastguard Worker 	{177000000,	4,	38,	29},
544*d83cc019SAndroid Build Coastguard Worker 	{178000000,	4,	29,	22},
545*d83cc019SAndroid Build Coastguard Worker 	{178500000,	4,	37,	28},
546*d83cc019SAndroid Build Coastguard Worker 	{179000000,	4,	53,	40},
547*d83cc019SAndroid Build Coastguard Worker 	{179500000,	4,	73,	55},
548*d83cc019SAndroid Build Coastguard Worker 	{180000000,	4,	20,	15},
549*d83cc019SAndroid Build Coastguard Worker 	{181000000,	4,	55,	41},
550*d83cc019SAndroid Build Coastguard Worker 	{182000000,	4,	31,	23},
551*d83cc019SAndroid Build Coastguard Worker 	{183000000,	4,	42,	31},
552*d83cc019SAndroid Build Coastguard Worker 	{184000000,	4,	30,	22},
553*d83cc019SAndroid Build Coastguard Worker 	{184750000,	4,	26,	19},
554*d83cc019SAndroid Build Coastguard Worker 	{185000000,	4,	37,	27},
555*d83cc019SAndroid Build Coastguard Worker 	{186000000,	4,	51,	37},
556*d83cc019SAndroid Build Coastguard Worker 	{187000000,	4,	36,	26},
557*d83cc019SAndroid Build Coastguard Worker 	{188000000,	4,	32,	23},
558*d83cc019SAndroid Build Coastguard Worker 	{189000000,	4,	21,	15},
559*d83cc019SAndroid Build Coastguard Worker 	{190000000,	4,	38,	27},
560*d83cc019SAndroid Build Coastguard Worker 	{190960000,	4,	41,	29},
561*d83cc019SAndroid Build Coastguard Worker 	{191000000,	4,	41,	29},
562*d83cc019SAndroid Build Coastguard Worker 	{192000000,	4,	27,	19},
563*d83cc019SAndroid Build Coastguard Worker 	{192250000,	4,	37,	26},
564*d83cc019SAndroid Build Coastguard Worker 	{193000000,	4,	20,	14},
565*d83cc019SAndroid Build Coastguard Worker 	{193250000,	4,	53,	37},
566*d83cc019SAndroid Build Coastguard Worker 	{194000000,	4,	23,	16},
567*d83cc019SAndroid Build Coastguard Worker 	{194208000,	4,	23,	16},
568*d83cc019SAndroid Build Coastguard Worker 	{195000000,	4,	26,	18},
569*d83cc019SAndroid Build Coastguard Worker 	{196000000,	4,	45,	31},
570*d83cc019SAndroid Build Coastguard Worker 	{197000000,	4,	35,	24},
571*d83cc019SAndroid Build Coastguard Worker 	{197750000,	4,	41,	28},
572*d83cc019SAndroid Build Coastguard Worker 	{198000000,	4,	22,	15},
573*d83cc019SAndroid Build Coastguard Worker 	{198500000,	4,	25,	17},
574*d83cc019SAndroid Build Coastguard Worker 	{199000000,	4,	28,	19},
575*d83cc019SAndroid Build Coastguard Worker 	{200000000,	4,	37,	25},
576*d83cc019SAndroid Build Coastguard Worker 	{201000000,	4,	61,	41},
577*d83cc019SAndroid Build Coastguard Worker 	{202000000,	4,	112,	75},
578*d83cc019SAndroid Build Coastguard Worker 	{202500000,	4,	21,	14},
579*d83cc019SAndroid Build Coastguard Worker 	{203000000,	4,	146,	97},
580*d83cc019SAndroid Build Coastguard Worker 	{204000000,	4,	62,	41},
581*d83cc019SAndroid Build Coastguard Worker 	{204750000,	4,	44,	29},
582*d83cc019SAndroid Build Coastguard Worker 	{205000000,	4,	38,	25},
583*d83cc019SAndroid Build Coastguard Worker 	{206000000,	4,	29,	19},
584*d83cc019SAndroid Build Coastguard Worker 	{207000000,	4,	23,	15},
585*d83cc019SAndroid Build Coastguard Worker 	{207500000,	4,	40,	26},
586*d83cc019SAndroid Build Coastguard Worker 	{208000000,	4,	37,	24},
587*d83cc019SAndroid Build Coastguard Worker 	{208900000,	4,	48,	31},
588*d83cc019SAndroid Build Coastguard Worker 	{209000000,	4,	48,	31},
589*d83cc019SAndroid Build Coastguard Worker 	{209250000,	4,	31,	20},
590*d83cc019SAndroid Build Coastguard Worker 	{210000000,	4,	28,	18},
591*d83cc019SAndroid Build Coastguard Worker 	{211000000,	4,	25,	16},
592*d83cc019SAndroid Build Coastguard Worker 	{212000000,	4,	22,	14},
593*d83cc019SAndroid Build Coastguard Worker 	{213000000,	4,	30,	19},
594*d83cc019SAndroid Build Coastguard Worker 	{213750000,	4,	38,	24},
595*d83cc019SAndroid Build Coastguard Worker 	{214000000,	4,	46,	29},
596*d83cc019SAndroid Build Coastguard Worker 	{214750000,	4,	35,	22},
597*d83cc019SAndroid Build Coastguard Worker 	{215000000,	4,	43,	27},
598*d83cc019SAndroid Build Coastguard Worker 	{216000000,	4,	24,	15},
599*d83cc019SAndroid Build Coastguard Worker 	{217000000,	4,	37,	23},
600*d83cc019SAndroid Build Coastguard Worker 	{218000000,	4,	42,	26},
601*d83cc019SAndroid Build Coastguard Worker 	{218250000,	4,	42,	26},
602*d83cc019SAndroid Build Coastguard Worker 	{218750000,	4,	34,	21},
603*d83cc019SAndroid Build Coastguard Worker 	{219000000,	4,	47,	29},
604*d83cc019SAndroid Build Coastguard Worker 	{220000000,	4,	44,	27},
605*d83cc019SAndroid Build Coastguard Worker 	{220640000,	4,	49,	30},
606*d83cc019SAndroid Build Coastguard Worker 	{220750000,	4,	36,	22},
607*d83cc019SAndroid Build Coastguard Worker 	{221000000,	4,	36,	22},
608*d83cc019SAndroid Build Coastguard Worker 	{222000000,	4,	23,	14},
609*d83cc019SAndroid Build Coastguard Worker 	{222525000,	4,	150,	91},
610*d83cc019SAndroid Build Coastguard Worker 	{222750000,	4,	33,	20},
611*d83cc019SAndroid Build Coastguard Worker 	{227000000,	4,	37,	22},
612*d83cc019SAndroid Build Coastguard Worker 	{230250000,	4,	29,	17},
613*d83cc019SAndroid Build Coastguard Worker 	{233500000,	4,	38,	22},
614*d83cc019SAndroid Build Coastguard Worker 	{235000000,	4,	40,	23},
615*d83cc019SAndroid Build Coastguard Worker 	{238000000,	4,	30,	17},
616*d83cc019SAndroid Build Coastguard Worker 	{241500000,	2,	17,	19},
617*d83cc019SAndroid Build Coastguard Worker 	{245250000,	2,	20,	22},
618*d83cc019SAndroid Build Coastguard Worker 	{247750000,	2,	22,	24},
619*d83cc019SAndroid Build Coastguard Worker 	{253250000,	2,	15,	16},
620*d83cc019SAndroid Build Coastguard Worker 	{256250000,	2,	18,	19},
621*d83cc019SAndroid Build Coastguard Worker 	{262500000,	2,	31,	32},
622*d83cc019SAndroid Build Coastguard Worker 	{267250000,	2,	66,	67},
623*d83cc019SAndroid Build Coastguard Worker 	{268500000,	2,	94,	95},
624*d83cc019SAndroid Build Coastguard Worker 	{270000000,	2,	14,	14},
625*d83cc019SAndroid Build Coastguard Worker 	{272500000,	2,	77,	76},
626*d83cc019SAndroid Build Coastguard Worker 	{273750000,	2,	57,	56},
627*d83cc019SAndroid Build Coastguard Worker 	{280750000,	2,	24,	23},
628*d83cc019SAndroid Build Coastguard Worker 	{281250000,	2,	23,	22},
629*d83cc019SAndroid Build Coastguard Worker 	{286000000,	2,	17,	16},
630*d83cc019SAndroid Build Coastguard Worker 	{291750000,	2,	26,	24},
631*d83cc019SAndroid Build Coastguard Worker 	{296703000,	2,	100,	91},
632*d83cc019SAndroid Build Coastguard Worker 	{297000000,	2,	22,	20},
633*d83cc019SAndroid Build Coastguard Worker 	{298000000,	2,	21,	19},
634*d83cc019SAndroid Build Coastguard Worker };
635*d83cc019SAndroid Build Coastguard Worker 
main(void)636*d83cc019SAndroid Build Coastguard Worker int main(void)
637*d83cc019SAndroid Build Coastguard Worker {
638*d83cc019SAndroid Build Coastguard Worker 	int i;
639*d83cc019SAndroid Build Coastguard Worker 
640*d83cc019SAndroid Build Coastguard Worker 	for (i = 0; i < ARRAY_SIZE(wrpll_tmds_clock_table); i++) {
641*d83cc019SAndroid Build Coastguard Worker 		const struct wrpll_tmds_clock *ref = &wrpll_tmds_clock_table[i];
642*d83cc019SAndroid Build Coastguard Worker 		unsigned r2, n2, p;
643*d83cc019SAndroid Build Coastguard Worker 
644*d83cc019SAndroid Build Coastguard Worker 		wrpll_compute_rnp(ref->clock, &r2, &n2, &p);
645*d83cc019SAndroid Build Coastguard Worker 		igt_fail_on_f(ref->r2 != r2 || ref->n2 != n2 || ref->p != p,
646*d83cc019SAndroid Build Coastguard Worker 			      "Computed value differs for %"PRId64" Hz:\n""  Reference: (%u,%u,%u)\n""  Computed:  (%u,%u,%u)\n", (int64_t)ref->clock * 1000, ref->r2, ref->n2, ref->p, r2, n2, p);
647*d83cc019SAndroid Build Coastguard Worker 	}
648*d83cc019SAndroid Build Coastguard Worker 
649*d83cc019SAndroid Build Coastguard Worker 	return 0;
650*d83cc019SAndroid Build Coastguard Worker }
651