]> Git Repo - J-linux.git/blob - drivers/net/ipa/ipa_data-v4.9.c
Merge remote-tracking branch 'spi/for-5.14' into spi-linus
[J-linux.git] / drivers / net / ipa / ipa_data-v4.9.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 /* Copyright (C) 2021 Linaro Ltd. */
4
5 #include <linux/log2.h>
6
7 #include "gsi.h"
8 #include "ipa_data.h"
9 #include "ipa_endpoint.h"
10 #include "ipa_mem.h"
11
12 /** enum ipa_resource_type - IPA resource types for an SoC having IPA v4.9 */
13 enum ipa_resource_type {
14         /* Source resource types; first must have value 0 */
15         IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS              = 0,
16         IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS,
17         IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF,
18         IPA_RESOURCE_TYPE_SRC_HPS_DMARS,
19         IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES,
20
21         /* Destination resource types; first must have value 0 */
22         IPA_RESOURCE_TYPE_DST_DATA_SECTORS              = 0,
23         IPA_RESOURCE_TYPE_DST_DPS_DMARS,
24 };
25
26 /* Resource groups used for an SoC having IPA v4.9 */
27 enum ipa_rsrc_group_id {
28         /* Source resource group identifiers */
29         IPA_RSRC_GROUP_SRC_UL_DL                        = 0,
30         IPA_RSRC_GROUP_SRC_DMA,
31         IPA_RSRC_GROUP_SRC_UC_RX_Q,
32         IPA_RSRC_GROUP_SRC_COUNT,       /* Last in set; not a source group */
33
34         /* Destination resource group identifiers */
35         IPA_RSRC_GROUP_DST_UL_DL_DPL                    = 0,
36         IPA_RSRC_GROUP_DST_DMA,
37         IPA_RSRC_GROUP_DST_UC,
38         IPA_RSRC_GROUP_DST_DRB_IP,
39         IPA_RSRC_GROUP_DST_COUNT,       /* Last; not a destination group */
40 };
41
42 /* QSB configuration data for an SoC having IPA v4.9 */
43 static const struct ipa_qsb_data ipa_qsb_data[] = {
44         [IPA_QSB_MASTER_DDR] = {
45                 .max_writes             = 8,
46                 .max_reads              = 0,    /* no limit (hardware max) */
47                 .max_reads_beats        = 120,
48         },
49 };
50
51 /* Endpoint configuration data for an SoC having IPA v4.9 */
52 static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
53         [IPA_ENDPOINT_AP_COMMAND_TX] = {
54                 .ee_id          = GSI_EE_AP,
55                 .channel_id     = 6,
56                 .endpoint_id    = 7,
57                 .toward_ipa     = true,
58                 .channel = {
59                         .tre_count      = 256,
60                         .event_count    = 256,
61                         .tlv_count      = 20,
62                 },
63                 .endpoint = {
64                         .config = {
65                                 .resource_group = IPA_RSRC_GROUP_SRC_UL_DL,
66                                 .dma_mode       = true,
67                                 .dma_endpoint   = IPA_ENDPOINT_AP_LAN_RX,
68                                 .tx = {
69                                         .seq_type = IPA_SEQ_DMA,
70                                 },
71                         },
72                 },
73         },
74         [IPA_ENDPOINT_AP_LAN_RX] = {
75                 .ee_id          = GSI_EE_AP,
76                 .channel_id     = 7,
77                 .endpoint_id    = 11,
78                 .toward_ipa     = false,
79                 .channel = {
80                         .tre_count      = 256,
81                         .event_count    = 256,
82                         .tlv_count      = 9,
83                 },
84                 .endpoint = {
85                         .config = {
86                                 .resource_group = IPA_RSRC_GROUP_DST_UL_DL_DPL,
87                                 .aggregation    = true,
88                                 .status_enable  = true,
89                                 .rx = {
90                                         .pad_align      = ilog2(sizeof(u32)),
91                                 },
92                         },
93                 },
94         },
95         [IPA_ENDPOINT_AP_MODEM_TX] = {
96                 .ee_id          = GSI_EE_AP,
97                 .channel_id     = 2,
98                 .endpoint_id    = 2,
99                 .toward_ipa     = true,
100                 .channel = {
101                         .tre_count      = 512,
102                         .event_count    = 512,
103                         .tlv_count      = 16,
104                 },
105                 .endpoint = {
106                         .filter_support = true,
107                         .config = {
108                                 .resource_group = IPA_RSRC_GROUP_SRC_UL_DL,
109                                 .qmap           = true,
110                                 .status_enable  = true,
111                                 .tx = {
112                                         .seq_type = IPA_SEQ_2_PASS_SKIP_LAST_UC,
113                                         .status_endpoint =
114                                                 IPA_ENDPOINT_MODEM_AP_RX,
115                                 },
116                         },
117                 },
118         },
119         [IPA_ENDPOINT_AP_MODEM_RX] = {
120                 .ee_id          = GSI_EE_AP,
121                 .channel_id     = 12,
122                 .endpoint_id    = 20,
123                 .toward_ipa     = false,
124                 .channel = {
125                         .tre_count      = 256,
126                         .event_count    = 256,
127                         .tlv_count      = 9,
128                 },
129                 .endpoint = {
130                         .config = {
131                                 .resource_group = IPA_RSRC_GROUP_DST_UL_DL_DPL,
132                                 .qmap           = true,
133                                 .aggregation    = true,
134                                 .rx = {
135                                         .aggr_close_eof = true,
136                                 },
137                         },
138                 },
139         },
140         [IPA_ENDPOINT_MODEM_AP_TX] = {
141                 .ee_id          = GSI_EE_MODEM,
142                 .channel_id     = 0,
143                 .endpoint_id    = 5,
144                 .toward_ipa     = true,
145                 .endpoint = {
146                         .filter_support = true,
147                 },
148         },
149         [IPA_ENDPOINT_MODEM_AP_RX] = {
150                 .ee_id          = GSI_EE_MODEM,
151                 .channel_id     = 7,
152                 .endpoint_id    = 16,
153                 .toward_ipa     = false,
154         },
155         [IPA_ENDPOINT_MODEM_DL_NLO_TX] = {
156                 .ee_id          = GSI_EE_MODEM,
157                 .channel_id     = 2,
158                 .endpoint_id    = 8,
159                 .toward_ipa     = true,
160                 .endpoint = {
161                         .filter_support = true,
162                 },
163         },
164 };
165
166 /* Source resource configuration data for an SoC having IPA v4.9 */
167 static const struct ipa_resource ipa_resource_src[] = {
168         [IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS] = {
169                 .limits[IPA_RSRC_GROUP_SRC_UL_DL] = {
170                         .min = 1,       .max = 12,
171                 },
172                 .limits[IPA_RSRC_GROUP_SRC_DMA] = {
173                         .min = 1,       .max = 1,
174                 },
175                 .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = {
176                         .min = 1,       .max = 12,
177                 },
178         },
179         [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS] = {
180                 .limits[IPA_RSRC_GROUP_SRC_UL_DL] = {
181                         .min = 20,      .max = 20,
182                 },
183                 .limits[IPA_RSRC_GROUP_SRC_DMA] = {
184                         .min = 2,       .max = 2,
185                 },
186                 .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = {
187                         .min = 3,       .max = 3,
188                 },
189         },
190         [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF] = {
191                 .limits[IPA_RSRC_GROUP_SRC_UL_DL] = {
192                         .min = 38,      .max = 38,
193                 },
194                 .limits[IPA_RSRC_GROUP_SRC_DMA] = {
195                         .min = 4,       .max = 4,
196                 },
197                 .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = {
198                         .min = 8,       .max = 8,
199                 },
200         },
201         [IPA_RESOURCE_TYPE_SRC_HPS_DMARS] = {
202                 .limits[IPA_RSRC_GROUP_SRC_UL_DL] = {
203                         .min = 0,       .max = 4,
204                 },
205                 .limits[IPA_RSRC_GROUP_SRC_DMA] = {
206                         .min = 0,       .max = 4,
207                 },
208                 .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = {
209                         .min = 0,       .max = 4,
210                 },
211         },
212         [IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES] = {
213                 .limits[IPA_RSRC_GROUP_SRC_UL_DL] = {
214                         .min = 30,      .max = 30,
215                 },
216                 .limits[IPA_RSRC_GROUP_SRC_DMA] = {
217                         .min = 8,       .max = 8,
218                 },
219                 .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = {
220                         .min = 8,       .max = 8,
221                 },
222         },
223 };
224
225 /* Destination resource configuration data for an SoC having IPA v4.9 */
226 static const struct ipa_resource ipa_resource_dst[] = {
227         [IPA_RESOURCE_TYPE_DST_DATA_SECTORS] = {
228                 .limits[IPA_RSRC_GROUP_DST_UL_DL_DPL] = {
229                         .min = 9,       .max = 9,
230                 },
231                 .limits[IPA_RSRC_GROUP_DST_DMA] = {
232                         .min = 1,       .max = 1,
233                 },
234                 .limits[IPA_RSRC_GROUP_DST_UC] = {
235                         .min = 1,       .max = 1,
236                 },
237                 .limits[IPA_RSRC_GROUP_DST_DRB_IP] = {
238                         .min = 39,      .max = 39,
239                 },
240         },
241         [IPA_RESOURCE_TYPE_DST_DPS_DMARS] = {
242                 .limits[IPA_RSRC_GROUP_DST_UL_DL_DPL] = {
243                         .min = 2,       .max = 3,
244                 },
245                 .limits[IPA_RSRC_GROUP_DST_DMA] = {
246                         .min = 1,       .max = 2,
247                 },
248                 .limits[IPA_RSRC_GROUP_DST_UC] = {
249                         .min = 0,       .max = 2,
250                 },
251         },
252 };
253
254 /* Resource configuration data for an SoC having IPA v4.9 */
255 static const struct ipa_resource_data ipa_resource_data = {
256         .rsrc_group_dst_count   = IPA_RSRC_GROUP_DST_COUNT,
257         .rsrc_group_src_count   = IPA_RSRC_GROUP_SRC_COUNT,
258         .resource_src_count     = ARRAY_SIZE(ipa_resource_src),
259         .resource_src           = ipa_resource_src,
260         .resource_dst_count     = ARRAY_SIZE(ipa_resource_dst),
261         .resource_dst           = ipa_resource_dst,
262 };
263
264 /* IPA-resident memory region data for an SoC having IPA v4.9 */
265 static const struct ipa_mem ipa_mem_local_data[] = {
266         {
267                 .id             = IPA_MEM_UC_SHARED,
268                 .offset         = 0x0000,
269                 .size           = 0x0080,
270                 .canary_count   = 0,
271         },
272         {
273                 .id             = IPA_MEM_UC_INFO,
274                 .offset         = 0x0080,
275                 .size           = 0x0200,
276                 .canary_count   = 0,
277         },
278         {
279                 .id             = IPA_MEM_V4_FILTER_HASHED,
280                 .offset         = 0x0288,
281                 .size           = 0x0078,
282                 .canary_count   = 2,
283         },
284         {
285                 .id             = IPA_MEM_V4_FILTER,
286                 .offset         = 0x0308,
287                 .size           = 0x0078,
288                 .canary_count   = 2,
289         },
290         {
291                 .id             = IPA_MEM_V6_FILTER_HASHED,
292                 .offset         = 0x0388,
293                 .size           = 0x0078,
294                 .canary_count   = 2,
295         },
296         {
297                 .id             = IPA_MEM_V6_FILTER,
298                 .offset         = 0x0408,
299                 .size           = 0x0078,
300                 .canary_count   = 2,
301         },
302         {
303                 .id             = IPA_MEM_V4_ROUTE_HASHED,
304                 .offset         = 0x0488,
305                 .size           = 0x0078,
306                 .canary_count   = 2,
307         },
308         {
309                 .id             = IPA_MEM_V4_ROUTE,
310                 .offset         = 0x0508,
311                 .size           = 0x0078,
312                 .canary_count   = 2,
313         },
314         {
315                 .id             = IPA_MEM_V6_ROUTE_HASHED,
316                 .offset         = 0x0588,
317                 .size           = 0x0078,
318                 .canary_count   = 2,
319         },
320         {
321                 .id             = IPA_MEM_V6_ROUTE,
322                 .offset         = 0x0608,
323                 .size           = 0x0078,
324                 .canary_count   = 2,
325         },
326         {
327                 .id             = IPA_MEM_MODEM_HEADER,
328                 .offset         = 0x0688,
329                 .size           = 0x0240,
330                 .canary_count   = 2,
331         },
332         {
333                 .id             = IPA_MEM_AP_HEADER,
334                 .offset         = 0x08c8,
335                 .size           = 0x0200,
336                 .canary_count   = 0,
337         },
338         {
339                 .id             = IPA_MEM_MODEM_PROC_CTX,
340                 .offset         = 0x0ad0,
341                 .size           = 0x0b20,
342                 .canary_count   = 2,
343         },
344         {
345                 .id             = IPA_MEM_AP_PROC_CTX,
346                 .offset         = 0x15f0,
347                 .size           = 0x0200,
348                 .canary_count   = 0,
349         },
350         {
351                 .id             = IPA_MEM_NAT_TABLE,
352                 .offset         = 0x1800,
353                 .size           = 0x0d00,
354                 .canary_count   = 4,
355         },
356         {
357                 .id             = IPA_MEM_STATS_QUOTA_MODEM,
358                 .offset         = 0x2510,
359                 .size           = 0x0030,
360                 .canary_count   = 4,
361         },
362         {
363                 .id             = IPA_MEM_STATS_QUOTA_AP,
364                 .offset         = 0x2540,
365                 .size           = 0x0048,
366                 .canary_count   = 0,
367         },
368         {
369                 .id             = IPA_MEM_STATS_TETHERING,
370                 .offset         = 0x2588,
371                 .size           = 0x0238,
372                 .canary_count   = 0,
373         },
374         {
375                 .id             = IPA_MEM_STATS_FILTER_ROUTE,
376                 .offset         = 0x27c0,
377                 .size           = 0x0800,
378                 .canary_count   = 0,
379         },
380         {
381                 .id             = IPA_MEM_STATS_DROP,
382                 .offset         = 0x2fc0,
383                 .size           = 0x0020,
384                 .canary_count   = 0,
385         },
386         {
387                 .id             = IPA_MEM_MODEM,
388                 .offset         = 0x2fe8,
389                 .size           = 0x0800,
390                 .canary_count   = 2,
391         },
392         {
393                 .id             = IPA_MEM_UC_EVENT_RING,
394                 .offset         = 0x3800,
395                 .size           = 0x1000,
396                 .canary_count   = 1,
397         },
398         {
399                 .id             = IPA_MEM_PDN_CONFIG,
400                 .offset         = 0x4800,
401                 .size           = 0x0050,
402                 .canary_count   = 0,
403         },
404 };
405
406 /* Memory configuration data for an SoC having IPA v4.9 */
407 static const struct ipa_mem_data ipa_mem_data = {
408         .local_count    = ARRAY_SIZE(ipa_mem_local_data),
409         .local          = ipa_mem_local_data,
410         .imem_addr      = 0x146bd000,
411         .imem_size      = 0x00002000,
412         .smem_id        = 497,
413         .smem_size      = 0x00009000,
414 };
415
416 /* Interconnect rates are in 1000 byte/second units */
417 static const struct ipa_interconnect_data ipa_interconnect_data[] = {
418         {
419                 .name                   = "ipa_to_llcc",
420                 .peak_bandwidth         = 600000,       /* 600 MBps */
421                 .average_bandwidth      = 150000,       /* 150 MBps */
422         },
423         {
424                 .name                   = "llcc_to_ebi1",
425                 .peak_bandwidth         = 1804000,      /* 1.804 GBps */
426                 .average_bandwidth      = 150000,       /* 150 MBps */
427         },
428         /* Average rate is unused for the next interconnect */
429         {
430                 .name                   = "appss_to_ipa",
431                 .peak_bandwidth         = 74000,        /* 74 MBps */
432                 .average_bandwidth      = 0,            /* unused */
433         },
434
435 };
436
437 /* Clock and interconnect configuration data for an SoC having IPA v4.9 */
438 static const struct ipa_clock_data ipa_clock_data = {
439         .core_clock_rate        = 60 * 1000 * 1000,     /* Hz */
440         .interconnect_count     = ARRAY_SIZE(ipa_interconnect_data),
441         .interconnect_data      = ipa_interconnect_data,
442 };
443
444 /* Configuration data for an SoC having IPA v4.9. */
445 const struct ipa_data ipa_data_v4_9 = {
446         .version        = IPA_VERSION_4_9,
447         .qsb_count      = ARRAY_SIZE(ipa_qsb_data),
448         .qsb_data       = ipa_qsb_data,
449         .endpoint_count = ARRAY_SIZE(ipa_gsi_endpoint_data),
450         .endpoint_data  = ipa_gsi_endpoint_data,
451         .resource_data  = &ipa_resource_data,
452         .mem_data       = &ipa_mem_data,
453         .clock_data     = &ipa_clock_data,
454 };
This page took 0.055652 seconds and 4 git commands to generate.