1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Support for Intel Camera Imaging ISP subsystem.
4  * Copyright (c) 2015, Intel Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  */
15 
16 #include <linux/string.h> /* for memcpy() */
17 
18 #include <type_support.h>
19 #include "system_global.h"
20 #include "vamem.h"
21 #include "ia_css_types.h"
22 #include "ia_css_ctc_table.host.h"
23 
24 struct ia_css_ctc_table       default_ctc_table;
25 
26 #if defined(HAS_VAMEM_VERSION_2)
27 
28 static const uint16_t
29 default_ctc_table_data[IA_CSS_VAMEM_2_CTC_TABLE_SIZE] = {
30 	0,  384,  837,  957, 1011, 1062, 1083, 1080,
31 	1078, 1077, 1053, 1039, 1012,  992,  969,  951,
32 	929,  906,  886,  866,  845,  823,  809,  790,
33 	772,  758,  741,  726,  711,  701,  688,  675,
34 	666,  656,  648,  639,  633,  626,  618,  612,
35 	603,  594,  582,  572,  557,  545,  529,  516,
36 	504,  491,  480,  467,  459,  447,  438,  429,
37 	419,  412,  404,  397,  389,  382,  376,  368,
38 	363,  357,  351,  345,  340,  336,  330,  326,
39 	321,  318,  312,  308,  304,  300,  297,  294,
40 	291,  286,  284,  281,  278,  275,  271,  268,
41 	261,  257,  251,  245,  240,  235,  232,  225,
42 	223,  218,  213,  209,  206,  204,  199,  197,
43 	193,  189,  186,  185,  183,  179,  177,  175,
44 	172,  170,  169,  167,  164,  164,  162,  160,
45 	158,  157,  156,  154,  154,  152,  151,  150,
46 	149,  148,  146,  147,  146,  144,  143,  143,
47 	142,  141,  140,  141,  139,  138,  138,  138,
48 	137,  136,  136,  135,  134,  134,  134,  133,
49 	132,  132,  131,  130,  131,  130,  129,  128,
50 	129,  127,  127,  127,  127,  125,  125,  125,
51 	123,  123,  122,  120,  118,  115,  114,  111,
52 	110,  108,  106,  105,  103,  102,  100,   99,
53 	97,   97,   96,   95,   94,   93,   93,   91,
54 	91,   91,   90,   90,   89,   89,   88,   88,
55 	89,   88,   88,   87,   87,   87,   87,   86,
56 	87,   87,   86,   87,   86,   86,   84,   84,
57 	82,   80,   78,   76,   74,   72,   70,   68,
58 	67,   65,   62,   60,   58,   56,   55,   54,
59 	53,   51,   49,   49,   47,   45,   45,   45,
60 	41,   40,   39,   39,   34,   33,   34,   32,
61 	25,   23,   24,   20,   13,    9,   12,    0,
62 	0
63 };
64 
65 #elif defined(HAS_VAMEM_VERSION_1)
66 
67 /* Default Parameters */
68 static const uint16_t
69 default_ctc_table_data[IA_CSS_VAMEM_1_CTC_TABLE_SIZE] = {
70 	0, 0, 256, 384, 384, 497, 765, 806,
71 	837, 851, 888, 901, 957, 981, 993, 1001,
72 	1011, 1029, 1028, 1039, 1062, 1059, 1073, 1080,
73 	1083, 1085, 1085, 1098, 1080, 1084, 1085, 1093,
74 	1078, 1073, 1070, 1069, 1077, 1066, 1072, 1063,
75 	1053, 1044, 1046, 1053, 1039, 1028, 1025, 1024,
76 	1012, 1013, 1016, 996, 992, 990, 990, 980,
77 	969, 968, 961, 955, 951, 949, 933, 930,
78 	929, 925, 921, 916, 906, 901, 895, 893,
79 	886, 877, 872, 869, 866, 861, 857, 849,
80 	845, 838, 836, 832, 823, 821, 815, 813,
81 	809, 805, 796, 793, 790, 785, 784, 778,
82 	772, 768, 766, 763, 758, 752, 749, 745,
83 	741, 740, 736, 730, 726, 724, 723, 718,
84 	711, 709, 706, 704, 701, 698, 691, 689,
85 	688, 683, 683, 678, 675, 673, 671, 669,
86 	666, 663, 661, 660, 656, 656, 653, 650,
87 	648, 647, 646, 643, 639, 638, 637, 635,
88 	633, 632, 629, 627, 626, 625, 622, 621,
89 	618, 618, 614, 614, 612, 609, 606, 606,
90 	603, 600, 600, 597, 594, 591, 590, 586,
91 	582, 581, 578, 575, 572, 569, 563, 560,
92 	557, 554, 551, 548, 545, 539, 536, 533,
93 	529, 527, 524, 519, 516, 513, 510, 507,
94 	504, 501, 498, 493, 491, 488, 485, 484,
95 	480, 476, 474, 471, 467, 466, 464, 460,
96 	459, 455, 453, 449, 447, 446, 443, 441,
97 	438, 435, 432, 432, 429, 427, 426, 422,
98 	419, 418, 416, 414, 412, 410, 408, 406,
99 	404, 402, 401, 398, 397, 395, 393, 390,
100 	389, 388, 387, 384, 382, 380, 378, 377,
101 	376, 375, 372, 370, 368, 368, 366, 364,
102 	363, 361, 360, 358, 357, 355, 354, 352,
103 	351, 350, 349, 346, 345, 344, 344, 342,
104 	340, 339, 337, 337, 336, 335, 333, 331,
105 	330, 329, 328, 326, 326, 324, 324, 322,
106 	321, 320, 318, 318, 318, 317, 315, 313,
107 	312, 311, 311, 310, 308, 307, 306, 306,
108 	304, 304, 302, 301, 300, 300, 299, 297,
109 	297, 296, 296, 294, 294, 292, 291, 291,
110 	291, 290, 288, 287, 286, 286, 287, 285,
111 	284, 283, 282, 282, 281, 281, 279, 278,
112 	278, 278, 276, 276, 275, 274, 274, 273,
113 	271, 270, 269, 268, 268, 267, 265, 262,
114 	261, 260, 260, 259, 257, 254, 252, 252,
115 	251, 251, 249, 246, 245, 244, 243, 242,
116 	240, 239, 239, 237, 235, 235, 233, 231,
117 	232, 230, 229, 226, 225, 224, 225, 224,
118 	223, 220, 219, 219, 218, 217, 217, 214,
119 	213, 213, 212, 211, 209, 209, 209, 208,
120 	206, 205, 204, 203, 204, 203, 201, 200,
121 	199, 197, 198, 198, 197, 195, 194, 194,
122 	193, 192, 192, 191, 189, 190, 189, 188,
123 	186, 187, 186, 185, 185, 184, 183, 181,
124 	183, 182, 181, 180, 179, 178, 178, 178,
125 	177, 176, 175, 176, 175, 174, 174, 173,
126 	172, 173, 172, 171, 170, 170, 169, 169,
127 	169, 168, 167, 166, 167, 167, 166, 165,
128 	164, 164, 164, 163, 164, 163, 162, 163,
129 	162, 161, 160, 161, 160, 160, 160, 159,
130 	158, 157, 158, 158, 157, 157, 156, 156,
131 	156, 156, 155, 155, 154, 154, 154, 154,
132 	154, 153, 152, 153, 152, 152, 151, 152,
133 	151, 152, 151, 150, 150, 149, 149, 150,
134 	149, 149, 148, 148, 148, 149, 148, 147,
135 	146, 146, 147, 146, 147, 146, 145, 146,
136 	146, 145, 144, 145, 144, 145, 144, 144,
137 	143, 143, 143, 144, 143, 142, 142, 142,
138 	142, 142, 142, 141, 141, 141, 141, 140,
139 	140, 141, 140, 140, 141, 140, 139, 139,
140 	139, 140, 139, 139, 138, 138, 137, 139,
141 	138, 138, 138, 137, 138, 137, 137, 137,
142 	137, 136, 137, 136, 136, 136, 136, 135,
143 	136, 135, 135, 135, 135, 136, 135, 135,
144 	134, 134, 133, 135, 134, 134, 134, 133,
145 	134, 133, 134, 133, 133, 132, 133, 133,
146 	132, 133, 132, 132, 132, 132, 131, 131,
147 	131, 132, 131, 131, 130, 131, 130, 132,
148 	131, 130, 130, 129, 130, 129, 130, 129,
149 	129, 129, 130, 129, 128, 128, 128, 128,
150 	129, 128, 128, 127, 127, 128, 128, 127,
151 	127, 126, 126, 127, 127, 126, 126, 126,
152 	127, 126, 126, 126, 125, 125, 126, 125,
153 	125, 124, 124, 124, 125, 125, 124, 124,
154 	123, 124, 124, 123, 123, 122, 122, 122,
155 	122, 122, 121, 120, 120, 119, 118, 118,
156 	118, 117, 117, 116, 115, 115, 115, 114,
157 	114, 113, 113, 112, 111, 111, 111, 110,
158 	110, 109, 109, 108, 108, 108, 107, 107,
159 	106, 106, 105, 105, 105, 104, 104, 103,
160 	103, 102, 102, 102, 102, 101, 101, 100,
161 	100, 99, 99, 99, 99, 99, 99, 98,
162 	97, 98, 97, 97, 97, 96, 96, 95,
163 	96, 95, 96, 95, 95, 94, 94, 95,
164 	94, 94, 94, 93, 93, 92, 93, 93,
165 	93, 93, 92, 92, 91, 92, 92, 92,
166 	91, 91, 90, 90, 91, 91, 91, 90,
167 	90, 90, 90, 91, 90, 90, 90, 89,
168 	89, 89, 90, 89, 89, 89, 89, 89,
169 	88, 89, 89, 88, 88, 88, 88, 87,
170 	89, 88, 88, 88, 88, 88, 87, 88,
171 	88, 88, 87, 87, 87, 87, 87, 88,
172 	87, 87, 87, 87, 87, 87, 88, 87,
173 	87, 87, 87, 86, 86, 87, 87, 87,
174 	87, 86, 86, 86, 87, 87, 86, 87,
175 	86, 86, 86, 87, 87, 86, 86, 86,
176 	86, 86, 87, 87, 86, 85, 85, 85,
177 	84, 85, 85, 84, 84, 83, 83, 82,
178 	82, 82, 81, 81, 80, 79, 79, 79,
179 	78, 77, 77, 76, 76, 76, 75, 74,
180 	74, 74, 73, 73, 72, 71, 71, 71,
181 	70, 70, 69, 69, 68, 68, 67, 67,
182 	67, 66, 66, 65, 65, 64, 64, 63,
183 	62, 62, 62, 61, 60, 60, 59, 59,
184 	58, 58, 57, 57, 56, 56, 56, 55,
185 	55, 54, 55, 55, 54, 53, 53, 52,
186 	53, 53, 52, 51, 51, 50, 51, 50,
187 	49, 49, 50, 49, 49, 48, 48, 47,
188 	47, 48, 46, 45, 45, 45, 46, 45,
189 	45, 44, 45, 45, 45, 43, 42, 42,
190 	41, 43, 41, 40, 40, 39, 40, 41,
191 	39, 39, 39, 39, 39, 38, 35, 35,
192 	34, 37, 36, 34, 33, 33, 33, 35,
193 	34, 32, 32, 31, 32, 30, 29, 26,
194 	25, 25, 27, 26, 23, 23, 23, 25,
195 	24, 24, 22, 21, 20, 19, 16, 14,
196 	13, 13, 13, 10, 9, 7, 7, 7,
197 	12, 12, 12, 7, 0, 0, 0, 0
198 };
199 
200 #else
201 #error "VAMEM version must be one of {VAMEM_VERSION_1, VAMEM_VERSION_2}"
202 #endif
203 
204 void
205 ia_css_config_ctc_table(void)
206 {
207 #if defined(HAS_VAMEM_VERSION_2)
208 	memcpy(default_ctc_table.data.vamem_2, default_ctc_table_data,
209 	       sizeof(default_ctc_table_data));
210 	default_ctc_table.vamem_type     = IA_CSS_VAMEM_TYPE_2;
211 #else
212 	memcpy(default_ctc_table.data.vamem_1, default_ctc_table_data,
213 	       sizeof(default_ctc_table_data));
214 	default_ctc_table.vamem_type     = 1IA_CSS_VAMEM_TYPE_1;
215 #endif
216 }
217