hte-tegra194.c (4f2c0a4acffbec01079c28f839422e64ddeff004) hte-tegra194.c (b003fb5c9df8a8923bf46e0c00cc54edcfb0fbe3)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2021-2022 NVIDIA Corporation
4 *
5 * Author: Dipen Patel <dipenp@nvidia.com>
6 */
7
8#include <linux/err.h>

--- 48 unchanged lines hidden (view full) ---

57#define NV_AON_HTE_SLICE2_IRQ_GPIO_20 20
58#define NV_AON_HTE_SLICE2_IRQ_GPIO_21 21
59#define NV_AON_HTE_SLICE2_IRQ_GPIO_22 22
60#define NV_AON_HTE_SLICE2_IRQ_GPIO_23 23
61#define NV_AON_HTE_SLICE2_IRQ_GPIO_24 24
62#define NV_AON_HTE_SLICE2_IRQ_GPIO_25 25
63#define NV_AON_HTE_SLICE2_IRQ_GPIO_26 26
64#define NV_AON_HTE_SLICE2_IRQ_GPIO_27 27
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2021-2022 NVIDIA Corporation
4 *
5 * Author: Dipen Patel <dipenp@nvidia.com>
6 */
7
8#include <linux/err.h>

--- 48 unchanged lines hidden (view full) ---

57#define NV_AON_HTE_SLICE2_IRQ_GPIO_20 20
58#define NV_AON_HTE_SLICE2_IRQ_GPIO_21 21
59#define NV_AON_HTE_SLICE2_IRQ_GPIO_22 22
60#define NV_AON_HTE_SLICE2_IRQ_GPIO_23 23
61#define NV_AON_HTE_SLICE2_IRQ_GPIO_24 24
62#define NV_AON_HTE_SLICE2_IRQ_GPIO_25 25
63#define NV_AON_HTE_SLICE2_IRQ_GPIO_26 26
64#define NV_AON_HTE_SLICE2_IRQ_GPIO_27 27
65#define NV_AON_HTE_SLICE2_IRQ_GPIO_28 28
66#define NV_AON_HTE_SLICE2_IRQ_GPIO_29 29
67#define NV_AON_HTE_SLICE2_IRQ_GPIO_30 30
68#define NV_AON_HTE_SLICE2_IRQ_GPIO_31 31
65
66#define HTE_TECTRL 0x0
67#define HTE_TETSCH 0x4
68#define HTE_TETSCL 0x8
69#define HTE_TESRC 0xC
70#define HTE_TECCV 0x10
71#define HTE_TEPCV 0x14
72#define HTE_TECMD 0x1C

--- 142 unchanged lines hidden (view full) ---

215 [34] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_27},
216 [35] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_26},
217 [36] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_25},
218 [37] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_24},
219 [38] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_23},
220 [39] = {NV_AON_SLICE_INVALID, 0},
221};
222
69
70#define HTE_TECTRL 0x0
71#define HTE_TETSCH 0x4
72#define HTE_TETSCL 0x8
73#define HTE_TESRC 0xC
74#define HTE_TECCV 0x10
75#define HTE_TEPCV 0x14
76#define HTE_TECMD 0x1C

--- 142 unchanged lines hidden (view full) ---

219 [34] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_27},
220 [35] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_26},
221 [36] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_25},
222 [37] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_24},
223 [38] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_23},
224 [39] = {NV_AON_SLICE_INVALID, 0},
225};
226
223static const struct tegra_hte_data aon_hte = {
227static const struct tegra_hte_line_mapped tegra234_aon_gpio_map[] = {
228 /* gpio, slice, bit_index */
229 /* AA port */
230 [0] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_11},
231 [1] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_10},
232 [2] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_9},
233 [3] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_8},
234 [4] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_7},
235 [5] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_6},
236 [6] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_5},
237 [7] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_4},
238 /* BB port */
239 [8] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_3},
240 [9] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_2},
241 [10] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_1},
242 [11] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_0},
243 /* CC port */
244 [12] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_22},
245 [13] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_21},
246 [14] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_20},
247 [15] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_19},
248 [16] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_18},
249 [17] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_17},
250 [18] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_16},
251 [19] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_15},
252 /* DD port */
253 [20] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_14},
254 [21] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_13},
255 [22] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_12},
256 /* EE port */
257 [23] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_31},
258 [24] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_30},
259 [25] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_29},
260 [26] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_28},
261 [27] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_27},
262 [28] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_26},
263 [29] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_25},
264 [30] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_24},
265 /* GG port */
266 [31] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_23},
267};
268
269static const struct tegra_hte_line_mapped tegra234_aon_gpio_sec_map[] = {
270 /* gpio, slice, bit_index */
271 /* AA port */
272 [0] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_11},
273 [1] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_10},
274 [2] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_9},
275 [3] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_8},
276 [4] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_7},
277 [5] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_6},
278 [6] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_5},
279 [7] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_4},
280 /* BB port */
281 [8] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_3},
282 [9] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_2},
283 [10] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_1},
284 [11] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_0},
285 [12] = {NV_AON_SLICE_INVALID, 0},
286 [13] = {NV_AON_SLICE_INVALID, 0},
287 [14] = {NV_AON_SLICE_INVALID, 0},
288 [15] = {NV_AON_SLICE_INVALID, 0},
289 /* CC port */
290 [16] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_22},
291 [17] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_21},
292 [18] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_20},
293 [19] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_19},
294 [20] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_18},
295 [21] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_17},
296 [22] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_16},
297 [23] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_15},
298 /* DD port */
299 [24] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_14},
300 [25] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_13},
301 [26] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_12},
302 [27] = {NV_AON_SLICE_INVALID, 0},
303 [28] = {NV_AON_SLICE_INVALID, 0},
304 [29] = {NV_AON_SLICE_INVALID, 0},
305 [30] = {NV_AON_SLICE_INVALID, 0},
306 [31] = {NV_AON_SLICE_INVALID, 0},
307 /* EE port */
308 [32] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_31},
309 [33] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_30},
310 [34] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_29},
311 [35] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_28},
312 [36] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_27},
313 [37] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_26},
314 [38] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_25},
315 [39] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_24},
316 /* GG port */
317 [40] = {2, NV_AON_HTE_SLICE2_IRQ_GPIO_23},
318};
319
320static const struct tegra_hte_data t194_aon_hte = {
224 .map_sz = ARRAY_SIZE(tegra194_aon_gpio_map),
225 .map = tegra194_aon_gpio_map,
226 .sec_map_sz = ARRAY_SIZE(tegra194_aon_gpio_sec_map),
227 .sec_map = tegra194_aon_gpio_sec_map,
228 .type = HTE_TEGRA_TYPE_GPIO,
229};
230
321 .map_sz = ARRAY_SIZE(tegra194_aon_gpio_map),
322 .map = tegra194_aon_gpio_map,
323 .sec_map_sz = ARRAY_SIZE(tegra194_aon_gpio_sec_map),
324 .sec_map = tegra194_aon_gpio_sec_map,
325 .type = HTE_TEGRA_TYPE_GPIO,
326};
327
328static const struct tegra_hte_data t234_aon_hte = {
329 .map_sz = ARRAY_SIZE(tegra234_aon_gpio_map),
330 .map = tegra234_aon_gpio_map,
331 .sec_map_sz = ARRAY_SIZE(tegra234_aon_gpio_sec_map),
332 .sec_map = tegra234_aon_gpio_sec_map,
333 .type = HTE_TEGRA_TYPE_GPIO,
334};
335
231static const struct tegra_hte_data lic_hte = {
232 .map_sz = 0,
233 .map = NULL,
234 .type = HTE_TEGRA_TYPE_LIC,
235};
236
237static inline u32 tegra_hte_readl(struct tegra_hte_soc *hte, u32 reg)
238{

--- 291 unchanged lines hidden (view full) ---

530 if (!hte_dev || (hte_dev->prov_data->type != HTE_TEGRA_TYPE_GPIO))
531 return false;
532
533 return hte_dev->c == gpiod_to_chip(hdesc->attr.line_data);
534}
535
536static const struct of_device_id tegra_hte_of_match[] = {
537 { .compatible = "nvidia,tegra194-gte-lic", .data = &lic_hte},
336static const struct tegra_hte_data lic_hte = {
337 .map_sz = 0,
338 .map = NULL,
339 .type = HTE_TEGRA_TYPE_LIC,
340};
341
342static inline u32 tegra_hte_readl(struct tegra_hte_soc *hte, u32 reg)
343{

--- 291 unchanged lines hidden (view full) ---

635 if (!hte_dev || (hte_dev->prov_data->type != HTE_TEGRA_TYPE_GPIO))
636 return false;
637
638 return hte_dev->c == gpiod_to_chip(hdesc->attr.line_data);
639}
640
641static const struct of_device_id tegra_hte_of_match[] = {
642 { .compatible = "nvidia,tegra194-gte-lic", .data = &lic_hte},
538 { .compatible = "nvidia,tegra194-gte-aon", .data = &aon_hte},
643 { .compatible = "nvidia,tegra194-gte-aon", .data = &t194_aon_hte},
644 { .compatible = "nvidia,tegra234-gte-lic", .data = &lic_hte},
645 { .compatible = "nvidia,tegra234-gte-aon", .data = &t234_aon_hte},
539 { }
540};
541MODULE_DEVICE_TABLE(of, tegra_hte_of_match);
542
543static const struct hte_ops g_ops = {
544 .request = tegra_hte_request,
545 .release = tegra_hte_release,
546 .enable = tegra_hte_enable,

--- 83 unchanged lines hidden (view full) ---

630 hte_dev->line_data = devm_kcalloc(dev, nlines,
631 sizeof(*hte_dev->line_data),
632 GFP_KERNEL);
633 if (!hte_dev->line_data)
634 return -ENOMEM;
635
636 gc->match_from_linedata = tegra_hte_match_from_linedata;
637
646 { }
647};
648MODULE_DEVICE_TABLE(of, tegra_hte_of_match);
649
650static const struct hte_ops g_ops = {
651 .request = tegra_hte_request,
652 .release = tegra_hte_release,
653 .enable = tegra_hte_enable,

--- 83 unchanged lines hidden (view full) ---

737 hte_dev->line_data = devm_kcalloc(dev, nlines,
738 sizeof(*hte_dev->line_data),
739 GFP_KERNEL);
740 if (!hte_dev->line_data)
741 return -ENOMEM;
742
743 gc->match_from_linedata = tegra_hte_match_from_linedata;
744
638 hte_dev->c = gpiochip_find("tegra194-gpio-aon",
639 tegra_get_gpiochip_from_name);
745 if (of_device_is_compatible(dev->of_node,
746 "nvidia,tegra194-gte-aon"))
747 hte_dev->c = gpiochip_find("tegra194-gpio-aon",
748 tegra_get_gpiochip_from_name);
749 else if (of_device_is_compatible(dev->of_node,
750 "nvidia,tegra234-gte-aon"))
751 hte_dev->c = gpiochip_find("tegra234-gpio-aon",
752 tegra_get_gpiochip_from_name);
753 else
754 return -ENODEV;
755
640 if (!hte_dev->c)
641 return dev_err_probe(dev, -EPROBE_DEFER,
642 "wait for gpio controller\n");
643 }
644
645 hte_dev->chip = gc;
646
647 ret = devm_hte_register_chip(hte_dev->chip);

--- 83 unchanged lines hidden ---
756 if (!hte_dev->c)
757 return dev_err_probe(dev, -EPROBE_DEFER,
758 "wait for gpio controller\n");
759 }
760
761 hte_dev->chip = gc;
762
763 ret = devm_hte_register_chip(hte_dev->chip);

--- 83 unchanged lines hidden ---