xref: /linux/drivers/pinctrl/stm32/pinctrl-stm32.c (revision 186f3edfdd41f2ae87fc40a9ccba52a3bf930994)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) Maxime Coquelin 2015
4  * Copyright (C) STMicroelectronics 2017
5  * Author:  Maxime Coquelin <mcoquelin.stm32@gmail.com>
6  *
7  * Heavily based on Mediatek's pinctrl driver
8  */
9 #include <linux/bitfield.h>
10 #include <linux/clk.h>
11 #include <linux/export.h>
12 #include <linux/gpio/driver.h>
13 #include <linux/hwspinlock.h>
14 #include <linux/io.h>
15 #include <linux/irq.h>
16 #include <linux/mfd/syscon.h>
17 #include <linux/module.h>
18 #include <linux/of.h>
19 #include <linux/of_address.h>
20 #include <linux/of_irq.h>
21 #include <linux/platform_device.h>
22 #include <linux/property.h>
23 #include <linux/regmap.h>
24 #include <linux/reset.h>
25 #include <linux/seq_file.h>
26 #include <linux/slab.h>
27 #include <linux/string_choices.h>
28 
29 #include <linux/pinctrl/consumer.h>
30 #include <linux/pinctrl/machine.h>
31 #include <linux/pinctrl/pinconf-generic.h>
32 #include <linux/pinctrl/pinconf.h>
33 #include <linux/pinctrl/pinctrl.h>
34 #include <linux/pinctrl/pinmux.h>
35 
36 #include "../core.h"
37 #include "../pinconf.h"
38 #include "../pinctrl-utils.h"
39 #include "pinctrl-stm32.h"
40 
41 #define STM32_GPIO_CID1		1
42 
43 #define STM32_GPIO_MODER	0x00
44 #define STM32_GPIO_TYPER	0x04
45 #define STM32_GPIO_SPEEDR	0x08
46 #define STM32_GPIO_PUPDR	0x0c
47 #define STM32_GPIO_IDR		0x10
48 #define STM32_GPIO_ODR		0x14
49 #define STM32_GPIO_BSRR		0x18
50 #define STM32_GPIO_LCKR		0x1c
51 #define STM32_GPIO_AFRL		0x20
52 #define STM32_GPIO_AFRH		0x24
53 #define STM32_GPIO_SECCFGR	0x30
54 #define STM32_GPIO_CIDCFGR(x)	(0x50 + (0x8 * (x)))
55 #define STM32_GPIO_SEMCR(x)	(0x54 + (0x8 * (x)))
56 
57 /* custom bitfield to backup pin status */
58 #define STM32_GPIO_BKP_MODE_SHIFT	0
59 #define STM32_GPIO_BKP_MODE_MASK	GENMASK(1, 0)
60 #define STM32_GPIO_BKP_ALT_SHIFT	2
61 #define STM32_GPIO_BKP_ALT_MASK		GENMASK(5, 2)
62 #define STM32_GPIO_BKP_SPEED_SHIFT	6
63 #define STM32_GPIO_BKP_SPEED_MASK	GENMASK(7, 6)
64 #define STM32_GPIO_BKP_PUPD_SHIFT	8
65 #define STM32_GPIO_BKP_PUPD_MASK	GENMASK(9, 8)
66 #define STM32_GPIO_BKP_TYPE		10
67 #define STM32_GPIO_BKP_VAL		11
68 
69 #define STM32_GPIO_CIDCFGR_CFEN		BIT(0)
70 #define STM32_GPIO_CIDCFGR_SEMEN	BIT(1)
71 #define STM32_GPIO_CIDCFGR_SCID_MASK	GENMASK(5, 4)
72 #define STM32_GPIO_CIDCFGR_SEMWL_CID1	BIT(16 + STM32_GPIO_CID1)
73 
74 #define STM32_GPIO_SEMCR_SEM_MUTEX	BIT(0)
75 #define STM32_GPIO_SEMCR_SEMCID_MASK	GENMASK(5, 4)
76 
77 #define STM32_GPIO_PINS_PER_BANK 16
78 #define STM32_GPIO_IRQ_LINE	 16
79 
80 #define SYSCFG_IRQMUX_MASK GENMASK(3, 0)
81 
82 #define gpio_range_to_bank(chip) \
83 		container_of(chip, struct stm32_gpio_bank, range)
84 
85 #define HWSPNLCK_TIMEOUT	1000 /* usec */
86 
87 static const char * const stm32_gpio_functions[] = {
88 	"gpio", "af0", "af1",
89 	"af2", "af3", "af4",
90 	"af5", "af6", "af7",
91 	"af8", "af9", "af10",
92 	"af11", "af12", "af13",
93 	"af14", "af15", "analog",
94 	"reserved",
95 };
96 
97 struct stm32_pinctrl_group {
98 	const char *name;
99 	unsigned long config;
100 	unsigned pin;
101 };
102 
103 struct stm32_gpio_bank {
104 	void __iomem *base;
105 	struct reset_control *rstc;
106 	spinlock_t lock;
107 	struct gpio_chip gpio_chip;
108 	struct pinctrl_gpio_range range;
109 	struct fwnode_handle *fwnode;
110 	struct irq_domain *domain;
111 	u32 bank_nr;
112 	u32 bank_ioport_nr;
113 	u32 pin_backup[STM32_GPIO_PINS_PER_BANK];
114 	u8 irq_type[STM32_GPIO_PINS_PER_BANK];
115 	bool secure_control;
116 	bool rif_control;
117 };
118 
119 struct stm32_pinctrl {
120 	struct device *dev;
121 	struct pinctrl_dev *pctl_dev;
122 	struct pinctrl_desc pctl_desc;
123 	struct stm32_pinctrl_group *groups;
124 	unsigned ngroups;
125 	const char **grp_names;
126 	struct stm32_gpio_bank *banks;
127 	struct clk_bulk_data *clks;
128 	unsigned nbanks;
129 	const struct stm32_pinctrl_match_data *match_data;
130 	struct irq_domain	*domain;
131 	struct regmap		*regmap;
132 	struct regmap_field	*irqmux[STM32_GPIO_PINS_PER_BANK];
133 	struct hwspinlock *hwlock;
134 	struct stm32_desc_pin *pins;
135 	u32 npins;
136 	u32 pkg;
137 	u16 irqmux_map;
138 	spinlock_t irqmux_lock;
139 };
140 
141 static void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, int pin, u32 *mode, u32 *alt);
142 
stm32_gpio_pin(int gpio)143 static inline int stm32_gpio_pin(int gpio)
144 {
145 	return gpio % STM32_GPIO_PINS_PER_BANK;
146 }
147 
stm32_gpio_get_mode(u32 function)148 static inline u32 stm32_gpio_get_mode(u32 function)
149 {
150 	switch (function) {
151 	case STM32_PIN_GPIO:
152 		return 0;
153 	case STM32_PIN_AF(0) ... STM32_PIN_AF(15):
154 		return 2;
155 	case STM32_PIN_ANALOG:
156 		return 3;
157 	}
158 
159 	return 0;
160 }
161 
stm32_gpio_get_alt(u32 function)162 static inline u32 stm32_gpio_get_alt(u32 function)
163 {
164 	switch (function) {
165 	case STM32_PIN_GPIO:
166 		return 0;
167 	case STM32_PIN_AF(0) ... STM32_PIN_AF(15):
168 		return function - 1;
169 	case STM32_PIN_ANALOG:
170 		return 0;
171 	}
172 
173 	return 0;
174 }
175 
stm32_gpio_backup_value(struct stm32_gpio_bank * bank,u32 offset,u32 value)176 static void stm32_gpio_backup_value(struct stm32_gpio_bank *bank,
177 				    u32 offset, u32 value)
178 {
179 	bank->pin_backup[offset] &= ~BIT(STM32_GPIO_BKP_VAL);
180 	bank->pin_backup[offset] |= value << STM32_GPIO_BKP_VAL;
181 }
182 
stm32_gpio_backup_mode(struct stm32_gpio_bank * bank,u32 offset,u32 mode,u32 alt)183 static void stm32_gpio_backup_mode(struct stm32_gpio_bank *bank, u32 offset,
184 				   u32 mode, u32 alt)
185 {
186 	bank->pin_backup[offset] &= ~(STM32_GPIO_BKP_MODE_MASK |
187 				      STM32_GPIO_BKP_ALT_MASK);
188 	bank->pin_backup[offset] |= mode << STM32_GPIO_BKP_MODE_SHIFT;
189 	bank->pin_backup[offset] |= alt << STM32_GPIO_BKP_ALT_SHIFT;
190 }
191 
stm32_gpio_backup_driving(struct stm32_gpio_bank * bank,u32 offset,u32 drive)192 static void stm32_gpio_backup_driving(struct stm32_gpio_bank *bank, u32 offset,
193 				      u32 drive)
194 {
195 	bank->pin_backup[offset] &= ~BIT(STM32_GPIO_BKP_TYPE);
196 	bank->pin_backup[offset] |= drive << STM32_GPIO_BKP_TYPE;
197 }
198 
stm32_gpio_backup_speed(struct stm32_gpio_bank * bank,u32 offset,u32 speed)199 static void stm32_gpio_backup_speed(struct stm32_gpio_bank *bank, u32 offset,
200 				    u32 speed)
201 {
202 	bank->pin_backup[offset] &= ~STM32_GPIO_BKP_SPEED_MASK;
203 	bank->pin_backup[offset] |= speed << STM32_GPIO_BKP_SPEED_SHIFT;
204 }
205 
stm32_gpio_backup_bias(struct stm32_gpio_bank * bank,u32 offset,u32 bias)206 static void stm32_gpio_backup_bias(struct stm32_gpio_bank *bank, u32 offset,
207 				   u32 bias)
208 {
209 	bank->pin_backup[offset] &= ~STM32_GPIO_BKP_PUPD_MASK;
210 	bank->pin_backup[offset] |= bias << STM32_GPIO_BKP_PUPD_SHIFT;
211 }
212 
213 /* RIF functions */
214 
stm32_gpio_rif_valid(struct stm32_gpio_bank * bank,unsigned int gpio_nr)215 static bool stm32_gpio_rif_valid(struct stm32_gpio_bank *bank, unsigned int gpio_nr)
216 {
217 	u32 cid;
218 
219 	cid = readl_relaxed(bank->base + STM32_GPIO_CIDCFGR(gpio_nr));
220 
221 	if (!(cid & STM32_GPIO_CIDCFGR_CFEN))
222 		return true;
223 
224 	if (!(cid & STM32_GPIO_CIDCFGR_SEMEN)) {
225 		if (FIELD_GET(STM32_GPIO_CIDCFGR_SCID_MASK, cid) == STM32_GPIO_CID1)
226 			return true;
227 
228 		return false;
229 	}
230 
231 	if (cid & STM32_GPIO_CIDCFGR_SEMWL_CID1)
232 		return true;
233 
234 	return false;
235 }
236 
stm32_gpio_rif_acquire_semaphore(struct stm32_gpio_bank * bank,unsigned int gpio_nr)237 static bool stm32_gpio_rif_acquire_semaphore(struct stm32_gpio_bank *bank, unsigned int gpio_nr)
238 {
239 	u32 cid, sem;
240 
241 	cid = readl_relaxed(bank->base + STM32_GPIO_CIDCFGR(gpio_nr));
242 
243 	if (!(cid & STM32_GPIO_CIDCFGR_CFEN))
244 		return true;
245 
246 	if (!(cid & STM32_GPIO_CIDCFGR_SEMEN)) {
247 		if (FIELD_GET(STM32_GPIO_CIDCFGR_SCID_MASK, cid) == STM32_GPIO_CID1)
248 			return true;
249 
250 		return false;
251 	}
252 
253 	if (!(cid & STM32_GPIO_CIDCFGR_SEMWL_CID1))
254 		return false;
255 
256 	sem = readl_relaxed(bank->base + STM32_GPIO_SEMCR(gpio_nr));
257 	if (sem & STM32_GPIO_SEMCR_SEM_MUTEX) {
258 		if (FIELD_GET(STM32_GPIO_SEMCR_SEMCID_MASK, sem) == STM32_GPIO_CID1)
259 			return true;
260 
261 		return false;
262 	}
263 
264 	writel_relaxed(STM32_GPIO_SEMCR_SEM_MUTEX, bank->base + STM32_GPIO_SEMCR(gpio_nr));
265 
266 	sem = readl_relaxed(bank->base + STM32_GPIO_SEMCR(gpio_nr));
267 	if (sem & STM32_GPIO_SEMCR_SEM_MUTEX &&
268 	    FIELD_GET(STM32_GPIO_SEMCR_SEMCID_MASK, sem) == STM32_GPIO_CID1)
269 		return true;
270 
271 	return false;
272 }
273 
stm32_gpio_rif_release_semaphore(struct stm32_gpio_bank * bank,unsigned int gpio_nr)274 static void stm32_gpio_rif_release_semaphore(struct stm32_gpio_bank *bank, unsigned int gpio_nr)
275 {
276 	u32 cid;
277 
278 	cid = readl_relaxed(bank->base + STM32_GPIO_CIDCFGR(gpio_nr));
279 
280 	if (!(cid & STM32_GPIO_CIDCFGR_CFEN))
281 		return;
282 
283 	if (cid & STM32_GPIO_CIDCFGR_SEMEN)
284 		writel_relaxed(0, bank->base + STM32_GPIO_SEMCR(gpio_nr));
285 }
286 
287 /* GPIO functions */
288 
__stm32_gpio_set(struct stm32_gpio_bank * bank,unsigned offset,int value)289 static inline void __stm32_gpio_set(struct stm32_gpio_bank *bank,
290 	unsigned offset, int value)
291 {
292 	stm32_gpio_backup_value(bank, offset, value);
293 
294 	if (!value)
295 		offset += STM32_GPIO_PINS_PER_BANK;
296 
297 	writel_relaxed(BIT(offset), bank->base + STM32_GPIO_BSRR);
298 }
299 
stm32_gpio_request(struct gpio_chip * chip,unsigned offset)300 static int stm32_gpio_request(struct gpio_chip *chip, unsigned offset)
301 {
302 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
303 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
304 	struct pinctrl_gpio_range *range;
305 	int pin = offset + (bank->bank_nr * STM32_GPIO_PINS_PER_BANK);
306 
307 	range = pinctrl_find_gpio_range_from_pin_nolock(pctl->pctl_dev, pin);
308 	if (!range) {
309 		dev_err(pctl->dev, "pin %d not in range.\n", pin);
310 		return -EINVAL;
311 	}
312 
313 	if (bank->rif_control) {
314 		if (!stm32_gpio_rif_acquire_semaphore(bank, offset)) {
315 			dev_err(pctl->dev, "pin %d not available.\n", pin);
316 			return -EINVAL;
317 		}
318 	}
319 
320 	return pinctrl_gpio_request(chip, offset);
321 }
322 
stm32_gpio_free(struct gpio_chip * chip,unsigned int offset)323 static void stm32_gpio_free(struct gpio_chip *chip, unsigned int offset)
324 {
325 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
326 
327 	pinctrl_gpio_free(chip, offset);
328 
329 	if (bank->rif_control)
330 		stm32_gpio_rif_release_semaphore(bank, offset);
331 }
332 
stm32_gpio_get(struct gpio_chip * chip,unsigned offset)333 static int stm32_gpio_get(struct gpio_chip *chip, unsigned offset)
334 {
335 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
336 
337 	return !!(readl_relaxed(bank->base + STM32_GPIO_IDR) & BIT(offset));
338 }
339 
stm32_gpio_set(struct gpio_chip * chip,unsigned int offset,int value)340 static int stm32_gpio_set(struct gpio_chip *chip, unsigned int offset,
341 			  int value)
342 {
343 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
344 
345 	__stm32_gpio_set(bank, offset, value);
346 
347 	return 0;
348 }
349 
stm32_gpio_direction_output(struct gpio_chip * chip,unsigned offset,int value)350 static int stm32_gpio_direction_output(struct gpio_chip *chip,
351 	unsigned offset, int value)
352 {
353 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
354 
355 	__stm32_gpio_set(bank, offset, value);
356 
357 	return pinctrl_gpio_direction_output(chip, offset);
358 }
359 
360 
stm32_gpio_to_irq(struct gpio_chip * chip,unsigned int offset)361 static int stm32_gpio_to_irq(struct gpio_chip *chip, unsigned int offset)
362 {
363 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
364 	struct irq_fwspec fwspec;
365 
366 	fwspec.fwnode = bank->fwnode;
367 	fwspec.param_count = 2;
368 	fwspec.param[0] = offset;
369 	fwspec.param[1] = IRQ_TYPE_NONE;
370 
371 	return irq_create_fwspec_mapping(&fwspec);
372 }
373 
stm32_gpio_get_direction(struct gpio_chip * chip,unsigned int offset)374 static int stm32_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
375 {
376 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
377 	int pin = stm32_gpio_pin(offset);
378 	int ret;
379 	u32 mode, alt;
380 
381 	stm32_pmx_get_mode(bank, pin, &mode, &alt);
382 	if ((alt == 0) && (mode == 0))
383 		ret = GPIO_LINE_DIRECTION_IN;
384 	else if ((alt == 0) && (mode == 1))
385 		ret = GPIO_LINE_DIRECTION_OUT;
386 	else
387 		ret = -EINVAL;
388 
389 	return ret;
390 }
391 
stm32_gpio_init_valid_mask(struct gpio_chip * chip,unsigned long * valid_mask,unsigned int ngpios)392 static int stm32_gpio_init_valid_mask(struct gpio_chip *chip,
393 				      unsigned long *valid_mask,
394 				      unsigned int ngpios)
395 {
396 	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
397 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
398 	unsigned int i;
399 	u32 sec;
400 
401 	/* All gpio are valid per default */
402 	bitmap_fill(valid_mask, ngpios);
403 
404 	if (bank->secure_control) {
405 		/* Tag secured pins as invalid */
406 		sec = readl_relaxed(bank->base + STM32_GPIO_SECCFGR);
407 
408 		for (i = 0; i < ngpios; i++) {
409 			if (sec & BIT(i)) {
410 				clear_bit(i, valid_mask);
411 				dev_dbg(pctl->dev, "No access to gpio %d - %d\n", bank->bank_nr, i);
412 			}
413 		}
414 	}
415 
416 	if (bank->rif_control) {
417 		for (i = 0; i < ngpios; i++) {
418 			if (!test_bit(i, valid_mask))
419 				continue;
420 
421 			if (stm32_gpio_rif_valid(bank, i))
422 				continue;
423 
424 			dev_dbg(pctl->dev, "RIF semaphore ownership conflict, GPIO %u", i);
425 			clear_bit(i, valid_mask);
426 		}
427 	}
428 
429 	return 0;
430 }
431 
432 static const struct gpio_chip stm32_gpio_template = {
433 	.request		= stm32_gpio_request,
434 	.free			= stm32_gpio_free,
435 	.get			= stm32_gpio_get,
436 	.set_rv			= stm32_gpio_set,
437 	.direction_input	= pinctrl_gpio_direction_input,
438 	.direction_output	= stm32_gpio_direction_output,
439 	.to_irq			= stm32_gpio_to_irq,
440 	.get_direction		= stm32_gpio_get_direction,
441 	.set_config		= gpiochip_generic_config,
442 	.init_valid_mask	= stm32_gpio_init_valid_mask,
443 };
444 
stm32_gpio_irq_trigger(struct irq_data * d)445 static void stm32_gpio_irq_trigger(struct irq_data *d)
446 {
447 	struct stm32_gpio_bank *bank = d->domain->host_data;
448 	int level;
449 
450 	/* Do not access the GPIO if this is not LEVEL triggered IRQ. */
451 	if (!(bank->irq_type[d->hwirq] & IRQ_TYPE_LEVEL_MASK))
452 		return;
453 
454 	/* If level interrupt type then retrig */
455 	level = stm32_gpio_get(&bank->gpio_chip, d->hwirq);
456 	if ((level == 0 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_LOW) ||
457 	    (level == 1 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_HIGH))
458 		irq_chip_retrigger_hierarchy(d);
459 }
460 
stm32_gpio_irq_eoi(struct irq_data * d)461 static void stm32_gpio_irq_eoi(struct irq_data *d)
462 {
463 	irq_chip_eoi_parent(d);
464 	stm32_gpio_irq_trigger(d);
465 };
466 
stm32_gpio_set_type(struct irq_data * d,unsigned int type)467 static int stm32_gpio_set_type(struct irq_data *d, unsigned int type)
468 {
469 	struct stm32_gpio_bank *bank = d->domain->host_data;
470 	u32 parent_type;
471 
472 	switch (type) {
473 	case IRQ_TYPE_EDGE_RISING:
474 	case IRQ_TYPE_EDGE_FALLING:
475 	case IRQ_TYPE_EDGE_BOTH:
476 		parent_type = type;
477 		break;
478 	case IRQ_TYPE_LEVEL_HIGH:
479 		parent_type = IRQ_TYPE_EDGE_RISING;
480 		break;
481 	case IRQ_TYPE_LEVEL_LOW:
482 		parent_type = IRQ_TYPE_EDGE_FALLING;
483 		break;
484 	default:
485 		return -EINVAL;
486 	}
487 
488 	bank->irq_type[d->hwirq] = type;
489 
490 	return irq_chip_set_type_parent(d, parent_type);
491 };
492 
stm32_gpio_irq_request_resources(struct irq_data * irq_data)493 static int stm32_gpio_irq_request_resources(struct irq_data *irq_data)
494 {
495 	struct stm32_gpio_bank *bank = irq_data->domain->host_data;
496 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
497 	int ret;
498 
499 	ret = pinctrl_gpio_direction_input(&bank->gpio_chip, irq_data->hwirq);
500 	if (ret)
501 		return ret;
502 
503 	ret = gpiochip_lock_as_irq(&bank->gpio_chip, irq_data->hwirq);
504 	if (ret) {
505 		dev_err(pctl->dev, "unable to lock HW IRQ %lu for IRQ\n",
506 			irq_data->hwirq);
507 		return ret;
508 	}
509 
510 	return 0;
511 }
512 
stm32_gpio_irq_release_resources(struct irq_data * irq_data)513 static void stm32_gpio_irq_release_resources(struct irq_data *irq_data)
514 {
515 	struct stm32_gpio_bank *bank = irq_data->domain->host_data;
516 
517 	gpiochip_unlock_as_irq(&bank->gpio_chip, irq_data->hwirq);
518 }
519 
stm32_gpio_irq_unmask(struct irq_data * d)520 static void stm32_gpio_irq_unmask(struct irq_data *d)
521 {
522 	irq_chip_unmask_parent(d);
523 	stm32_gpio_irq_trigger(d);
524 }
525 
526 static struct irq_chip stm32_gpio_irq_chip = {
527 	.name		= "stm32gpio",
528 	.irq_eoi	= stm32_gpio_irq_eoi,
529 	.irq_ack	= irq_chip_ack_parent,
530 	.irq_mask	= irq_chip_mask_parent,
531 	.irq_unmask	= stm32_gpio_irq_unmask,
532 	.irq_set_type	= stm32_gpio_set_type,
533 	.irq_set_wake	= irq_chip_set_wake_parent,
534 	.irq_request_resources = stm32_gpio_irq_request_resources,
535 	.irq_release_resources = stm32_gpio_irq_release_resources,
536 	.irq_set_affinity = IS_ENABLED(CONFIG_SMP) ? irq_chip_set_affinity_parent : NULL,
537 };
538 
stm32_gpio_domain_translate(struct irq_domain * d,struct irq_fwspec * fwspec,unsigned long * hwirq,unsigned int * type)539 static int stm32_gpio_domain_translate(struct irq_domain *d,
540 				       struct irq_fwspec *fwspec,
541 				       unsigned long *hwirq,
542 				       unsigned int *type)
543 {
544 	if ((fwspec->param_count != 2) ||
545 	    (fwspec->param[0] >= STM32_GPIO_IRQ_LINE))
546 		return -EINVAL;
547 
548 	*hwirq = fwspec->param[0];
549 	*type = fwspec->param[1];
550 	return 0;
551 }
552 
stm32_gpio_domain_activate(struct irq_domain * d,struct irq_data * irq_data,bool reserve)553 static int stm32_gpio_domain_activate(struct irq_domain *d,
554 				      struct irq_data *irq_data, bool reserve)
555 {
556 	struct stm32_gpio_bank *bank = d->host_data;
557 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
558 	int ret = 0;
559 
560 	if (pctl->hwlock) {
561 		ret = hwspin_lock_timeout_in_atomic(pctl->hwlock,
562 						    HWSPNLCK_TIMEOUT);
563 		if (ret) {
564 			dev_err(pctl->dev, "Can't get hwspinlock\n");
565 			return ret;
566 		}
567 	}
568 
569 	regmap_field_write(pctl->irqmux[irq_data->hwirq], bank->bank_ioport_nr);
570 
571 	if (pctl->hwlock)
572 		hwspin_unlock_in_atomic(pctl->hwlock);
573 
574 	return ret;
575 }
576 
stm32_gpio_domain_alloc(struct irq_domain * d,unsigned int virq,unsigned int nr_irqs,void * data)577 static int stm32_gpio_domain_alloc(struct irq_domain *d,
578 				   unsigned int virq,
579 				   unsigned int nr_irqs, void *data)
580 {
581 	struct stm32_gpio_bank *bank = d->host_data;
582 	struct irq_fwspec *fwspec = data;
583 	struct irq_fwspec parent_fwspec;
584 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
585 	irq_hw_number_t hwirq = fwspec->param[0];
586 	unsigned long flags;
587 	int ret = 0;
588 
589 	/*
590 	 * Check first that the IRQ MUX of that line is free.
591 	 * gpio irq mux is shared between several banks, protect with a lock
592 	 */
593 	spin_lock_irqsave(&pctl->irqmux_lock, flags);
594 
595 	if (pctl->irqmux_map & BIT(hwirq)) {
596 		dev_err(pctl->dev, "irq line %ld already requested.\n", hwirq);
597 		ret = -EBUSY;
598 	} else {
599 		pctl->irqmux_map |= BIT(hwirq);
600 	}
601 
602 	spin_unlock_irqrestore(&pctl->irqmux_lock, flags);
603 	if (ret)
604 		return ret;
605 
606 	parent_fwspec.fwnode = d->parent->fwnode;
607 	parent_fwspec.param_count = 2;
608 	parent_fwspec.param[0] = fwspec->param[0];
609 	parent_fwspec.param[1] = fwspec->param[1];
610 
611 	irq_domain_set_hwirq_and_chip(d, virq, hwirq, &stm32_gpio_irq_chip,
612 				      bank);
613 
614 	return irq_domain_alloc_irqs_parent(d, virq, nr_irqs, &parent_fwspec);
615 }
616 
stm32_gpio_domain_free(struct irq_domain * d,unsigned int virq,unsigned int nr_irqs)617 static void stm32_gpio_domain_free(struct irq_domain *d, unsigned int virq,
618 				   unsigned int nr_irqs)
619 {
620 	struct stm32_gpio_bank *bank = d->host_data;
621 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
622 	struct irq_data *irq_data = irq_domain_get_irq_data(d, virq);
623 	unsigned long flags, hwirq = irq_data->hwirq;
624 
625 	irq_domain_free_irqs_common(d, virq, nr_irqs);
626 
627 	spin_lock_irqsave(&pctl->irqmux_lock, flags);
628 	pctl->irqmux_map &= ~BIT(hwirq);
629 	spin_unlock_irqrestore(&pctl->irqmux_lock, flags);
630 }
631 
632 static const struct irq_domain_ops stm32_gpio_domain_ops = {
633 	.translate	= stm32_gpio_domain_translate,
634 	.alloc		= stm32_gpio_domain_alloc,
635 	.free		= stm32_gpio_domain_free,
636 	.activate	= stm32_gpio_domain_activate,
637 };
638 
639 /* Pinctrl functions */
640 static struct stm32_pinctrl_group *
stm32_pctrl_find_group_by_pin(struct stm32_pinctrl * pctl,u32 pin)641 stm32_pctrl_find_group_by_pin(struct stm32_pinctrl *pctl, u32 pin)
642 {
643 	int i;
644 
645 	for (i = 0; i < pctl->ngroups; i++) {
646 		struct stm32_pinctrl_group *grp = pctl->groups + i;
647 
648 		if (grp->pin == pin)
649 			return grp;
650 	}
651 
652 	return NULL;
653 }
654 
stm32_pctrl_is_function_valid(struct stm32_pinctrl * pctl,u32 pin_num,u32 fnum)655 static bool stm32_pctrl_is_function_valid(struct stm32_pinctrl *pctl,
656 		u32 pin_num, u32 fnum)
657 {
658 	int i, k;
659 
660 	for (i = 0; i < pctl->npins; i++) {
661 		const struct stm32_desc_pin *pin = pctl->pins + i;
662 		const struct stm32_desc_function *func = pin->functions;
663 
664 		if (pin->pin.number != pin_num)
665 			continue;
666 
667 		if (fnum == STM32_PIN_RSVD)
668 			return true;
669 
670 		for (k = 0; k < STM32_CONFIG_NUM; k++) {
671 			if (func->num == fnum)
672 				return true;
673 			func++;
674 		}
675 
676 		break;
677 	}
678 
679 	dev_err(pctl->dev, "invalid function %d on pin %d .\n", fnum, pin_num);
680 
681 	return false;
682 }
683 
stm32_pctrl_dt_node_to_map_func(struct stm32_pinctrl * pctl,u32 pin,u32 fnum,struct stm32_pinctrl_group * grp,struct pinctrl_map ** map,unsigned * reserved_maps,unsigned * num_maps)684 static int stm32_pctrl_dt_node_to_map_func(struct stm32_pinctrl *pctl,
685 		u32 pin, u32 fnum, struct stm32_pinctrl_group *grp,
686 		struct pinctrl_map **map, unsigned *reserved_maps,
687 		unsigned *num_maps)
688 {
689 	if (*num_maps == *reserved_maps)
690 		return -ENOSPC;
691 
692 	(*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
693 	(*map)[*num_maps].data.mux.group = grp->name;
694 
695 	if (!stm32_pctrl_is_function_valid(pctl, pin, fnum))
696 		return -EINVAL;
697 
698 	(*map)[*num_maps].data.mux.function = stm32_gpio_functions[fnum];
699 	(*num_maps)++;
700 
701 	return 0;
702 }
703 
stm32_pctrl_dt_subnode_to_map(struct pinctrl_dev * pctldev,struct device_node * node,struct pinctrl_map ** map,unsigned * reserved_maps,unsigned * num_maps)704 static int stm32_pctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
705 				      struct device_node *node,
706 				      struct pinctrl_map **map,
707 				      unsigned *reserved_maps,
708 				      unsigned *num_maps)
709 {
710 	struct stm32_pinctrl *pctl;
711 	struct stm32_pinctrl_group *grp;
712 	struct property *pins;
713 	u32 pinfunc, pin, func;
714 	unsigned long *configs;
715 	unsigned int num_configs;
716 	bool has_config = 0;
717 	unsigned reserve = 0;
718 	int num_pins, num_funcs, maps_per_pin, i, err = 0;
719 
720 	pctl = pinctrl_dev_get_drvdata(pctldev);
721 
722 	pins = of_find_property(node, "pinmux", NULL);
723 	if (!pins) {
724 		dev_err(pctl->dev, "missing pins property in node %pOFn .\n",
725 				node);
726 		return -EINVAL;
727 	}
728 
729 	err = pinconf_generic_parse_dt_config(node, pctldev, &configs,
730 		&num_configs);
731 	if (err)
732 		return err;
733 
734 	if (num_configs)
735 		has_config = 1;
736 
737 	num_pins = pins->length / sizeof(u32);
738 	num_funcs = num_pins;
739 	maps_per_pin = 0;
740 	if (num_funcs)
741 		maps_per_pin++;
742 	if (has_config && num_pins >= 1)
743 		maps_per_pin++;
744 
745 	if (!num_pins || !maps_per_pin) {
746 		err = -EINVAL;
747 		goto exit;
748 	}
749 
750 	reserve = num_pins * maps_per_pin;
751 
752 	err = pinctrl_utils_reserve_map(pctldev, map,
753 			reserved_maps, num_maps, reserve);
754 	if (err)
755 		goto exit;
756 
757 	for (i = 0; i < num_pins; i++) {
758 		err = of_property_read_u32_index(node, "pinmux",
759 				i, &pinfunc);
760 		if (err)
761 			goto exit;
762 
763 		pin = STM32_GET_PIN_NO(pinfunc);
764 		func = STM32_GET_PIN_FUNC(pinfunc);
765 
766 		if (!stm32_pctrl_is_function_valid(pctl, pin, func)) {
767 			err = -EINVAL;
768 			goto exit;
769 		}
770 
771 		grp = stm32_pctrl_find_group_by_pin(pctl, pin);
772 		if (!grp) {
773 			dev_err(pctl->dev, "unable to match pin %d to group\n",
774 					pin);
775 			err = -EINVAL;
776 			goto exit;
777 		}
778 
779 		err = stm32_pctrl_dt_node_to_map_func(pctl, pin, func, grp, map,
780 				reserved_maps, num_maps);
781 		if (err)
782 			goto exit;
783 
784 		if (has_config) {
785 			err = pinctrl_utils_add_map_configs(pctldev, map,
786 					reserved_maps, num_maps, grp->name,
787 					configs, num_configs,
788 					PIN_MAP_TYPE_CONFIGS_GROUP);
789 			if (err)
790 				goto exit;
791 		}
792 	}
793 
794 exit:
795 	kfree(configs);
796 	return err;
797 }
798 
stm32_pctrl_dt_node_to_map(struct pinctrl_dev * pctldev,struct device_node * np_config,struct pinctrl_map ** map,unsigned * num_maps)799 static int stm32_pctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
800 				 struct device_node *np_config,
801 				 struct pinctrl_map **map, unsigned *num_maps)
802 {
803 	unsigned reserved_maps;
804 	int ret;
805 
806 	*map = NULL;
807 	*num_maps = 0;
808 	reserved_maps = 0;
809 
810 	for_each_child_of_node_scoped(np_config, np) {
811 		ret = stm32_pctrl_dt_subnode_to_map(pctldev, np, map,
812 				&reserved_maps, num_maps);
813 		if (ret < 0) {
814 			pinctrl_utils_free_map(pctldev, *map, *num_maps);
815 			return ret;
816 		}
817 	}
818 
819 	return 0;
820 }
821 
stm32_pctrl_get_groups_count(struct pinctrl_dev * pctldev)822 static int stm32_pctrl_get_groups_count(struct pinctrl_dev *pctldev)
823 {
824 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
825 
826 	return pctl->ngroups;
827 }
828 
stm32_pctrl_get_group_name(struct pinctrl_dev * pctldev,unsigned group)829 static const char *stm32_pctrl_get_group_name(struct pinctrl_dev *pctldev,
830 					      unsigned group)
831 {
832 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
833 
834 	return pctl->groups[group].name;
835 }
836 
stm32_pctrl_get_group_pins(struct pinctrl_dev * pctldev,unsigned group,const unsigned ** pins,unsigned * num_pins)837 static int stm32_pctrl_get_group_pins(struct pinctrl_dev *pctldev,
838 				      unsigned group,
839 				      const unsigned **pins,
840 				      unsigned *num_pins)
841 {
842 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
843 
844 	*pins = (unsigned *)&pctl->groups[group].pin;
845 	*num_pins = 1;
846 
847 	return 0;
848 }
849 
850 static const struct pinctrl_ops stm32_pctrl_ops = {
851 	.dt_node_to_map		= stm32_pctrl_dt_node_to_map,
852 	.dt_free_map		= pinctrl_utils_free_map,
853 	.get_groups_count	= stm32_pctrl_get_groups_count,
854 	.get_group_name		= stm32_pctrl_get_group_name,
855 	.get_group_pins		= stm32_pctrl_get_group_pins,
856 };
857 
858 
859 /* Pinmux functions */
860 
stm32_pmx_get_funcs_cnt(struct pinctrl_dev * pctldev)861 static int stm32_pmx_get_funcs_cnt(struct pinctrl_dev *pctldev)
862 {
863 	return ARRAY_SIZE(stm32_gpio_functions);
864 }
865 
stm32_pmx_get_func_name(struct pinctrl_dev * pctldev,unsigned selector)866 static const char *stm32_pmx_get_func_name(struct pinctrl_dev *pctldev,
867 					   unsigned selector)
868 {
869 	return stm32_gpio_functions[selector];
870 }
871 
stm32_pmx_get_func_groups(struct pinctrl_dev * pctldev,unsigned function,const char * const ** groups,unsigned * const num_groups)872 static int stm32_pmx_get_func_groups(struct pinctrl_dev *pctldev,
873 				     unsigned function,
874 				     const char * const **groups,
875 				     unsigned * const num_groups)
876 {
877 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
878 
879 	*groups = pctl->grp_names;
880 	*num_groups = pctl->ngroups;
881 
882 	return 0;
883 }
884 
stm32_pmx_set_mode(struct stm32_gpio_bank * bank,int pin,u32 mode,u32 alt)885 static int stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
886 			      int pin, u32 mode, u32 alt)
887 {
888 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
889 	u32 val;
890 	int alt_shift = (pin % 8) * 4;
891 	int alt_offset = STM32_GPIO_AFRL + (pin / 8) * 4;
892 	unsigned long flags;
893 	int err = 0;
894 
895 	spin_lock_irqsave(&bank->lock, flags);
896 
897 	if (pctl->hwlock) {
898 		err = hwspin_lock_timeout_in_atomic(pctl->hwlock,
899 						    HWSPNLCK_TIMEOUT);
900 		if (err) {
901 			dev_err(pctl->dev, "Can't get hwspinlock\n");
902 			goto unlock;
903 		}
904 	}
905 
906 	val = readl_relaxed(bank->base + alt_offset);
907 	val &= ~GENMASK(alt_shift + 3, alt_shift);
908 	val |= (alt << alt_shift);
909 	writel_relaxed(val, bank->base + alt_offset);
910 
911 	val = readl_relaxed(bank->base + STM32_GPIO_MODER);
912 	val &= ~GENMASK(pin * 2 + 1, pin * 2);
913 	val |= mode << (pin * 2);
914 	writel_relaxed(val, bank->base + STM32_GPIO_MODER);
915 
916 	if (pctl->hwlock)
917 		hwspin_unlock_in_atomic(pctl->hwlock);
918 
919 	stm32_gpio_backup_mode(bank, pin, mode, alt);
920 
921 unlock:
922 	spin_unlock_irqrestore(&bank->lock, flags);
923 
924 	return err;
925 }
926 
stm32_pmx_get_mode(struct stm32_gpio_bank * bank,int pin,u32 * mode,u32 * alt)927 static void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, int pin, u32 *mode, u32 *alt)
928 {
929 	u32 val;
930 	int alt_shift = (pin % 8) * 4;
931 	int alt_offset = STM32_GPIO_AFRL + (pin / 8) * 4;
932 	unsigned long flags;
933 
934 	spin_lock_irqsave(&bank->lock, flags);
935 
936 	val = readl_relaxed(bank->base + alt_offset);
937 	val &= GENMASK(alt_shift + 3, alt_shift);
938 	*alt = val >> alt_shift;
939 
940 	val = readl_relaxed(bank->base + STM32_GPIO_MODER);
941 	val &= GENMASK(pin * 2 + 1, pin * 2);
942 	*mode = val >> (pin * 2);
943 
944 	spin_unlock_irqrestore(&bank->lock, flags);
945 }
946 
stm32_pmx_set_mux(struct pinctrl_dev * pctldev,unsigned function,unsigned group)947 static int stm32_pmx_set_mux(struct pinctrl_dev *pctldev,
948 			    unsigned function,
949 			    unsigned group)
950 {
951 	bool ret;
952 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
953 	struct stm32_pinctrl_group *g = pctl->groups + group;
954 	struct pinctrl_gpio_range *range;
955 	struct stm32_gpio_bank *bank;
956 	u32 mode, alt;
957 	int pin;
958 
959 	ret = stm32_pctrl_is_function_valid(pctl, g->pin, function);
960 	if (!ret)
961 		return -EINVAL;
962 
963 	range = pinctrl_find_gpio_range_from_pin(pctldev, g->pin);
964 	if (!range) {
965 		dev_err(pctl->dev, "No gpio range defined.\n");
966 		return -EINVAL;
967 	}
968 
969 	if (function == STM32_PIN_RSVD) {
970 		dev_dbg(pctl->dev, "Reserved pins, skipping HW update.\n");
971 		return 0;
972 	}
973 
974 	bank = gpiochip_get_data(range->gc);
975 	pin = stm32_gpio_pin(g->pin);
976 
977 	mode = stm32_gpio_get_mode(function);
978 	alt = stm32_gpio_get_alt(function);
979 
980 	return stm32_pmx_set_mode(bank, pin, mode, alt);
981 }
982 
stm32_pmx_gpio_set_direction(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned gpio,bool input)983 static int stm32_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
984 			struct pinctrl_gpio_range *range, unsigned gpio,
985 			bool input)
986 {
987 	struct stm32_gpio_bank *bank = gpiochip_get_data(range->gc);
988 	int pin = stm32_gpio_pin(gpio);
989 
990 	return stm32_pmx_set_mode(bank, pin, !input, 0);
991 }
992 
stm32_pmx_request(struct pinctrl_dev * pctldev,unsigned int gpio)993 static int stm32_pmx_request(struct pinctrl_dev *pctldev, unsigned int gpio)
994 {
995 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
996 	struct pinctrl_gpio_range *range;
997 
998 	range = pinctrl_find_gpio_range_from_pin_nolock(pctldev, gpio);
999 	if (!range) {
1000 		dev_err(pctl->dev, "No gpio range defined.\n");
1001 		return -EINVAL;
1002 	}
1003 
1004 	if (!gpiochip_line_is_valid(range->gc, stm32_gpio_pin(gpio))) {
1005 		dev_warn(pctl->dev, "Can't access gpio %d\n", gpio);
1006 		return -EACCES;
1007 	}
1008 
1009 	return 0;
1010 }
1011 
1012 static const struct pinmux_ops stm32_pmx_ops = {
1013 	.get_functions_count	= stm32_pmx_get_funcs_cnt,
1014 	.get_function_name	= stm32_pmx_get_func_name,
1015 	.get_function_groups	= stm32_pmx_get_func_groups,
1016 	.set_mux		= stm32_pmx_set_mux,
1017 	.gpio_set_direction	= stm32_pmx_gpio_set_direction,
1018 	.request		= stm32_pmx_request,
1019 	.strict			= true,
1020 };
1021 
1022 /* Pinconf functions */
1023 
stm32_pconf_set_driving(struct stm32_gpio_bank * bank,unsigned offset,u32 drive)1024 static int stm32_pconf_set_driving(struct stm32_gpio_bank *bank,
1025 				   unsigned offset, u32 drive)
1026 {
1027 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
1028 	unsigned long flags;
1029 	u32 val;
1030 	int err = 0;
1031 
1032 	spin_lock_irqsave(&bank->lock, flags);
1033 
1034 	if (pctl->hwlock) {
1035 		err = hwspin_lock_timeout_in_atomic(pctl->hwlock,
1036 						    HWSPNLCK_TIMEOUT);
1037 		if (err) {
1038 			dev_err(pctl->dev, "Can't get hwspinlock\n");
1039 			goto unlock;
1040 		}
1041 	}
1042 
1043 	val = readl_relaxed(bank->base + STM32_GPIO_TYPER);
1044 	val &= ~BIT(offset);
1045 	val |= drive << offset;
1046 	writel_relaxed(val, bank->base + STM32_GPIO_TYPER);
1047 
1048 	if (pctl->hwlock)
1049 		hwspin_unlock_in_atomic(pctl->hwlock);
1050 
1051 	stm32_gpio_backup_driving(bank, offset, drive);
1052 
1053 unlock:
1054 	spin_unlock_irqrestore(&bank->lock, flags);
1055 
1056 	return err;
1057 }
1058 
stm32_pconf_get_driving(struct stm32_gpio_bank * bank,unsigned int offset)1059 static u32 stm32_pconf_get_driving(struct stm32_gpio_bank *bank,
1060 	unsigned int offset)
1061 {
1062 	unsigned long flags;
1063 	u32 val;
1064 
1065 	spin_lock_irqsave(&bank->lock, flags);
1066 
1067 	val = readl_relaxed(bank->base + STM32_GPIO_TYPER);
1068 	val &= BIT(offset);
1069 
1070 	spin_unlock_irqrestore(&bank->lock, flags);
1071 
1072 	return (val >> offset);
1073 }
1074 
stm32_pconf_set_speed(struct stm32_gpio_bank * bank,unsigned offset,u32 speed)1075 static int stm32_pconf_set_speed(struct stm32_gpio_bank *bank,
1076 				 unsigned offset, u32 speed)
1077 {
1078 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
1079 	unsigned long flags;
1080 	u32 val;
1081 	int err = 0;
1082 
1083 	spin_lock_irqsave(&bank->lock, flags);
1084 
1085 	if (pctl->hwlock) {
1086 		err = hwspin_lock_timeout_in_atomic(pctl->hwlock,
1087 						    HWSPNLCK_TIMEOUT);
1088 		if (err) {
1089 			dev_err(pctl->dev, "Can't get hwspinlock\n");
1090 			goto unlock;
1091 		}
1092 	}
1093 
1094 	val = readl_relaxed(bank->base + STM32_GPIO_SPEEDR);
1095 	val &= ~GENMASK(offset * 2 + 1, offset * 2);
1096 	val |= speed << (offset * 2);
1097 	writel_relaxed(val, bank->base + STM32_GPIO_SPEEDR);
1098 
1099 	if (pctl->hwlock)
1100 		hwspin_unlock_in_atomic(pctl->hwlock);
1101 
1102 	stm32_gpio_backup_speed(bank, offset, speed);
1103 
1104 unlock:
1105 	spin_unlock_irqrestore(&bank->lock, flags);
1106 
1107 	return err;
1108 }
1109 
stm32_pconf_get_speed(struct stm32_gpio_bank * bank,unsigned int offset)1110 static u32 stm32_pconf_get_speed(struct stm32_gpio_bank *bank,
1111 	unsigned int offset)
1112 {
1113 	unsigned long flags;
1114 	u32 val;
1115 
1116 	spin_lock_irqsave(&bank->lock, flags);
1117 
1118 	val = readl_relaxed(bank->base + STM32_GPIO_SPEEDR);
1119 	val &= GENMASK(offset * 2 + 1, offset * 2);
1120 
1121 	spin_unlock_irqrestore(&bank->lock, flags);
1122 
1123 	return (val >> (offset * 2));
1124 }
1125 
stm32_pconf_set_bias(struct stm32_gpio_bank * bank,unsigned offset,u32 bias)1126 static int stm32_pconf_set_bias(struct stm32_gpio_bank *bank,
1127 				unsigned offset, u32 bias)
1128 {
1129 	struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
1130 	unsigned long flags;
1131 	u32 val;
1132 	int err = 0;
1133 
1134 	spin_lock_irqsave(&bank->lock, flags);
1135 
1136 	if (pctl->hwlock) {
1137 		err = hwspin_lock_timeout_in_atomic(pctl->hwlock,
1138 						    HWSPNLCK_TIMEOUT);
1139 		if (err) {
1140 			dev_err(pctl->dev, "Can't get hwspinlock\n");
1141 			goto unlock;
1142 		}
1143 	}
1144 
1145 	val = readl_relaxed(bank->base + STM32_GPIO_PUPDR);
1146 	val &= ~GENMASK(offset * 2 + 1, offset * 2);
1147 	val |= bias << (offset * 2);
1148 	writel_relaxed(val, bank->base + STM32_GPIO_PUPDR);
1149 
1150 	if (pctl->hwlock)
1151 		hwspin_unlock_in_atomic(pctl->hwlock);
1152 
1153 	stm32_gpio_backup_bias(bank, offset, bias);
1154 
1155 unlock:
1156 	spin_unlock_irqrestore(&bank->lock, flags);
1157 
1158 	return err;
1159 }
1160 
stm32_pconf_get_bias(struct stm32_gpio_bank * bank,unsigned int offset)1161 static u32 stm32_pconf_get_bias(struct stm32_gpio_bank *bank,
1162 	unsigned int offset)
1163 {
1164 	unsigned long flags;
1165 	u32 val;
1166 
1167 	spin_lock_irqsave(&bank->lock, flags);
1168 
1169 	val = readl_relaxed(bank->base + STM32_GPIO_PUPDR);
1170 	val &= GENMASK(offset * 2 + 1, offset * 2);
1171 
1172 	spin_unlock_irqrestore(&bank->lock, flags);
1173 
1174 	return (val >> (offset * 2));
1175 }
1176 
stm32_pconf_get(struct stm32_gpio_bank * bank,unsigned int offset,bool dir)1177 static bool stm32_pconf_get(struct stm32_gpio_bank *bank,
1178 	unsigned int offset, bool dir)
1179 {
1180 	unsigned long flags;
1181 	u32 val;
1182 
1183 	spin_lock_irqsave(&bank->lock, flags);
1184 
1185 	if (dir)
1186 		val = !!(readl_relaxed(bank->base + STM32_GPIO_IDR) &
1187 			 BIT(offset));
1188 	else
1189 		val = !!(readl_relaxed(bank->base + STM32_GPIO_ODR) &
1190 			 BIT(offset));
1191 
1192 	spin_unlock_irqrestore(&bank->lock, flags);
1193 
1194 	return val;
1195 }
1196 
stm32_pconf_parse_conf(struct pinctrl_dev * pctldev,unsigned int pin,enum pin_config_param param,enum pin_config_param arg)1197 static int stm32_pconf_parse_conf(struct pinctrl_dev *pctldev,
1198 		unsigned int pin, enum pin_config_param param,
1199 		enum pin_config_param arg)
1200 {
1201 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
1202 	struct pinctrl_gpio_range *range;
1203 	struct stm32_gpio_bank *bank;
1204 	int offset, ret = 0;
1205 
1206 	range = pinctrl_find_gpio_range_from_pin_nolock(pctldev, pin);
1207 	if (!range) {
1208 		dev_err(pctl->dev, "No gpio range defined.\n");
1209 		return -EINVAL;
1210 	}
1211 
1212 	bank = gpiochip_get_data(range->gc);
1213 	offset = stm32_gpio_pin(pin);
1214 
1215 	if (!gpiochip_line_is_valid(range->gc, offset)) {
1216 		dev_warn(pctl->dev, "Can't access gpio %d\n", pin);
1217 		return -EACCES;
1218 	}
1219 
1220 	switch (param) {
1221 	case PIN_CONFIG_DRIVE_PUSH_PULL:
1222 		ret = stm32_pconf_set_driving(bank, offset, 0);
1223 		break;
1224 	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
1225 		ret = stm32_pconf_set_driving(bank, offset, 1);
1226 		break;
1227 	case PIN_CONFIG_SLEW_RATE:
1228 		ret = stm32_pconf_set_speed(bank, offset, arg);
1229 		break;
1230 	case PIN_CONFIG_BIAS_DISABLE:
1231 		ret = stm32_pconf_set_bias(bank, offset, 0);
1232 		break;
1233 	case PIN_CONFIG_BIAS_PULL_UP:
1234 		ret = stm32_pconf_set_bias(bank, offset, 1);
1235 		break;
1236 	case PIN_CONFIG_BIAS_PULL_DOWN:
1237 		ret = stm32_pconf_set_bias(bank, offset, 2);
1238 		break;
1239 	case PIN_CONFIG_OUTPUT:
1240 		__stm32_gpio_set(bank, offset, arg);
1241 		ret = stm32_pmx_gpio_set_direction(pctldev, range, pin, false);
1242 		break;
1243 	default:
1244 		ret = -ENOTSUPP;
1245 	}
1246 
1247 	return ret;
1248 }
1249 
stm32_pconf_group_get(struct pinctrl_dev * pctldev,unsigned group,unsigned long * config)1250 static int stm32_pconf_group_get(struct pinctrl_dev *pctldev,
1251 				 unsigned group,
1252 				 unsigned long *config)
1253 {
1254 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
1255 
1256 	*config = pctl->groups[group].config;
1257 
1258 	return 0;
1259 }
1260 
stm32_pconf_group_set(struct pinctrl_dev * pctldev,unsigned group,unsigned long * configs,unsigned num_configs)1261 static int stm32_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group,
1262 				 unsigned long *configs, unsigned num_configs)
1263 {
1264 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
1265 	struct stm32_pinctrl_group *g = &pctl->groups[group];
1266 	int i, ret;
1267 
1268 	for (i = 0; i < num_configs; i++) {
1269 		mutex_lock(&pctldev->mutex);
1270 		ret = stm32_pconf_parse_conf(pctldev, g->pin,
1271 			pinconf_to_config_param(configs[i]),
1272 			pinconf_to_config_argument(configs[i]));
1273 		mutex_unlock(&pctldev->mutex);
1274 		if (ret < 0)
1275 			return ret;
1276 
1277 		g->config = configs[i];
1278 	}
1279 
1280 	return 0;
1281 }
1282 
stm32_pconf_set(struct pinctrl_dev * pctldev,unsigned int pin,unsigned long * configs,unsigned int num_configs)1283 static int stm32_pconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
1284 			   unsigned long *configs, unsigned int num_configs)
1285 {
1286 	int i, ret;
1287 
1288 	for (i = 0; i < num_configs; i++) {
1289 		ret = stm32_pconf_parse_conf(pctldev, pin,
1290 				pinconf_to_config_param(configs[i]),
1291 				pinconf_to_config_argument(configs[i]));
1292 		if (ret < 0)
1293 			return ret;
1294 	}
1295 
1296 	return 0;
1297 }
1298 
1299 static struct stm32_desc_pin *
stm32_pconf_get_pin_desc_by_pin_number(struct stm32_pinctrl * pctl,unsigned int pin_number)1300 stm32_pconf_get_pin_desc_by_pin_number(struct stm32_pinctrl *pctl,
1301 				       unsigned int pin_number)
1302 {
1303 	struct stm32_desc_pin *pins = pctl->pins;
1304 	int i;
1305 
1306 	for (i = 0; i < pctl->npins; i++) {
1307 		if (pins->pin.number == pin_number)
1308 			return pins;
1309 		pins++;
1310 	}
1311 	return NULL;
1312 }
1313 
stm32_pconf_dbg_show(struct pinctrl_dev * pctldev,struct seq_file * s,unsigned int pin)1314 static void stm32_pconf_dbg_show(struct pinctrl_dev *pctldev,
1315 				 struct seq_file *s,
1316 				 unsigned int pin)
1317 {
1318 	struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
1319 	const struct stm32_desc_pin *pin_desc;
1320 	struct pinctrl_gpio_range *range;
1321 	struct stm32_gpio_bank *bank;
1322 	int offset;
1323 	u32 mode, alt, drive, speed, bias;
1324 	static const char * const modes[] = {
1325 			"input", "output", "alternate", "analog" };
1326 	static const char * const speeds[] = {
1327 			"low", "medium", "high", "very high" };
1328 	static const char * const biasing[] = {
1329 			"floating", "pull up", "pull down", "" };
1330 	bool val;
1331 
1332 	range = pinctrl_find_gpio_range_from_pin_nolock(pctldev, pin);
1333 	if (!range)
1334 		return;
1335 
1336 	bank = gpiochip_get_data(range->gc);
1337 	offset = stm32_gpio_pin(pin);
1338 
1339 	if (!gpiochip_line_is_valid(range->gc, offset)) {
1340 		seq_puts(s, "NO ACCESS");
1341 		return;
1342 	}
1343 
1344 	stm32_pmx_get_mode(bank, offset, &mode, &alt);
1345 	bias = stm32_pconf_get_bias(bank, offset);
1346 
1347 	seq_printf(s, "%s ", modes[mode]);
1348 
1349 	switch (mode) {
1350 	/* input */
1351 	case 0:
1352 		val = stm32_pconf_get(bank, offset, true);
1353 		seq_printf(s, "- %s - %s",
1354 			   str_high_low(val),
1355 			   biasing[bias]);
1356 		break;
1357 
1358 	/* output */
1359 	case 1:
1360 		drive = stm32_pconf_get_driving(bank, offset);
1361 		speed = stm32_pconf_get_speed(bank, offset);
1362 		val = stm32_pconf_get(bank, offset, false);
1363 		seq_printf(s, "- %s - %s - %s - %s %s",
1364 			   str_high_low(val),
1365 			   drive ? "open drain" : "push pull",
1366 			   biasing[bias],
1367 			   speeds[speed], "speed");
1368 		break;
1369 
1370 	/* alternate */
1371 	case 2:
1372 		drive = stm32_pconf_get_driving(bank, offset);
1373 		speed = stm32_pconf_get_speed(bank, offset);
1374 		pin_desc = stm32_pconf_get_pin_desc_by_pin_number(pctl, pin);
1375 		if (!pin_desc)
1376 			return;
1377 
1378 		seq_printf(s, "%d (%s) - %s - %s - %s %s", alt,
1379 			   pin_desc->functions[alt + 1].name,
1380 			   drive ? "open drain" : "push pull",
1381 			   biasing[bias],
1382 			   speeds[speed], "speed");
1383 		break;
1384 
1385 	/* analog */
1386 	case 3:
1387 		break;
1388 	}
1389 }
1390 
1391 static const struct pinconf_ops stm32_pconf_ops = {
1392 	.pin_config_group_get	= stm32_pconf_group_get,
1393 	.pin_config_group_set	= stm32_pconf_group_set,
1394 	.pin_config_set		= stm32_pconf_set,
1395 	.pin_config_dbg_show	= stm32_pconf_dbg_show,
1396 };
1397 
stm32_pctrl_get_desc_pin_from_gpio(struct stm32_pinctrl * pctl,struct stm32_gpio_bank * bank,unsigned int offset)1398 static struct stm32_desc_pin *stm32_pctrl_get_desc_pin_from_gpio(struct stm32_pinctrl *pctl,
1399 								 struct stm32_gpio_bank *bank,
1400 								 unsigned int offset)
1401 {
1402 	unsigned int stm32_pin_nb = bank->bank_nr * STM32_GPIO_PINS_PER_BANK + offset;
1403 	struct stm32_desc_pin *pin_desc;
1404 	int i;
1405 
1406 	/* With few exceptions (e.g. bank 'Z'), pin number matches with pin index in array */
1407 	if (stm32_pin_nb < pctl->npins) {
1408 		pin_desc = pctl->pins + stm32_pin_nb;
1409 		if (pin_desc->pin.number == stm32_pin_nb)
1410 			return pin_desc;
1411 	}
1412 
1413 	/* Otherwise, loop all array to find the pin with the right number */
1414 	for (i = 0; i < pctl->npins; i++) {
1415 		pin_desc = pctl->pins + i;
1416 		if (pin_desc->pin.number == stm32_pin_nb)
1417 			return pin_desc;
1418 	}
1419 	return NULL;
1420 }
1421 
stm32_gpiolib_register_bank(struct stm32_pinctrl * pctl,struct fwnode_handle * fwnode)1422 static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode_handle *fwnode)
1423 {
1424 	struct stm32_gpio_bank *bank = &pctl->banks[pctl->nbanks];
1425 	int bank_ioport_nr;
1426 	struct pinctrl_gpio_range *range = &bank->range;
1427 	struct fwnode_reference_args args;
1428 	struct device *dev = pctl->dev;
1429 	struct resource res;
1430 	int npins = STM32_GPIO_PINS_PER_BANK;
1431 	int bank_nr, err, i = 0;
1432 	struct stm32_desc_pin *stm32_pin;
1433 	char **names;
1434 
1435 	if (!IS_ERR(bank->rstc))
1436 		reset_control_deassert(bank->rstc);
1437 
1438 	if (of_address_to_resource(to_of_node(fwnode), 0, &res))
1439 		return -ENODEV;
1440 
1441 	bank->base = devm_ioremap_resource(dev, &res);
1442 	if (IS_ERR(bank->base))
1443 		return PTR_ERR(bank->base);
1444 
1445 	bank->gpio_chip = stm32_gpio_template;
1446 
1447 	fwnode_property_read_string(fwnode, "st,bank-name", &bank->gpio_chip.label);
1448 
1449 	if (!fwnode_property_get_reference_args(fwnode, "gpio-ranges", NULL, 3, i, &args)) {
1450 		bank_nr = args.args[1] / STM32_GPIO_PINS_PER_BANK;
1451 		bank->gpio_chip.base = args.args[1];
1452 
1453 		/* get the last defined gpio line (offset + nb of pins) */
1454 		npins = args.args[0] + args.args[2];
1455 		while (!fwnode_property_get_reference_args(fwnode, "gpio-ranges", NULL, 3, ++i, &args))
1456 			npins = max(npins, (int)(args.args[0] + args.args[2]));
1457 	} else {
1458 		bank_nr = pctl->nbanks;
1459 		bank->gpio_chip.base = bank_nr * STM32_GPIO_PINS_PER_BANK;
1460 		range->name = bank->gpio_chip.label;
1461 		range->id = bank_nr;
1462 		range->pin_base = range->id * STM32_GPIO_PINS_PER_BANK;
1463 		range->base = range->id * STM32_GPIO_PINS_PER_BANK;
1464 		range->npins = npins;
1465 		range->gc = &bank->gpio_chip;
1466 		pinctrl_add_gpio_range(pctl->pctl_dev,
1467 				       &pctl->banks[bank_nr].range);
1468 	}
1469 
1470 	if (fwnode_property_read_u32(fwnode, "st,bank-ioport", &bank_ioport_nr))
1471 		bank_ioport_nr = bank_nr;
1472 
1473 	bank->gpio_chip.base = -1;
1474 
1475 	bank->gpio_chip.ngpio = npins;
1476 	bank->gpio_chip.fwnode = fwnode;
1477 	bank->gpio_chip.parent = dev;
1478 	bank->bank_nr = bank_nr;
1479 	bank->bank_ioport_nr = bank_ioport_nr;
1480 	bank->secure_control = pctl->match_data->secure_control;
1481 	bank->rif_control = pctl->match_data->rif_control;
1482 	spin_lock_init(&bank->lock);
1483 
1484 	if (pctl->domain) {
1485 		/* create irq hierarchical domain */
1486 		bank->fwnode = fwnode;
1487 
1488 		bank->domain = irq_domain_create_hierarchy(pctl->domain, 0, STM32_GPIO_IRQ_LINE,
1489 							   bank->fwnode, &stm32_gpio_domain_ops,
1490 							   bank);
1491 
1492 		if (!bank->domain)
1493 			return -ENODEV;
1494 	}
1495 
1496 	names = devm_kcalloc(dev, npins, sizeof(char *), GFP_KERNEL);
1497 	if (!names)
1498 		return -ENOMEM;
1499 
1500 	for (i = 0; i < npins; i++) {
1501 		stm32_pin = stm32_pctrl_get_desc_pin_from_gpio(pctl, bank, i);
1502 		if (stm32_pin && stm32_pin->pin.name) {
1503 			names[i] = devm_kasprintf(dev, GFP_KERNEL, "%s", stm32_pin->pin.name);
1504 			if (!names[i])
1505 				return -ENOMEM;
1506 		} else {
1507 			names[i] = NULL;
1508 		}
1509 	}
1510 
1511 	bank->gpio_chip.names = (const char * const *)names;
1512 
1513 	err = gpiochip_add_data(&bank->gpio_chip, bank);
1514 	if (err) {
1515 		dev_err(dev, "Failed to add gpiochip(%d)!\n", bank_nr);
1516 		return err;
1517 	}
1518 
1519 	dev_info(dev, "%s bank added\n", bank->gpio_chip.label);
1520 	return 0;
1521 }
1522 
stm32_pctrl_get_irq_domain(struct platform_device * pdev)1523 static struct irq_domain *stm32_pctrl_get_irq_domain(struct platform_device *pdev)
1524 {
1525 	struct device_node *np = pdev->dev.of_node;
1526 	struct device_node *parent;
1527 	struct irq_domain *domain;
1528 
1529 	if (!of_property_present(np, "interrupt-parent"))
1530 		return NULL;
1531 
1532 	parent = of_irq_find_parent(np);
1533 	if (!parent)
1534 		return ERR_PTR(-ENXIO);
1535 
1536 	domain = irq_find_host(parent);
1537 	of_node_put(parent);
1538 	if (!domain)
1539 		/* domain not registered yet */
1540 		return ERR_PTR(-EPROBE_DEFER);
1541 
1542 	return domain;
1543 }
1544 
stm32_pctrl_dt_setup_irq(struct platform_device * pdev,struct stm32_pinctrl * pctl)1545 static int stm32_pctrl_dt_setup_irq(struct platform_device *pdev,
1546 			   struct stm32_pinctrl *pctl)
1547 {
1548 	struct device_node *np = pdev->dev.of_node;
1549 	struct device *dev = &pdev->dev;
1550 	struct regmap *rm;
1551 	int offset, ret, i;
1552 	int mask, mask_width;
1553 
1554 	pctl->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg");
1555 	if (IS_ERR(pctl->regmap))
1556 		return PTR_ERR(pctl->regmap);
1557 
1558 	rm = pctl->regmap;
1559 
1560 	ret = of_property_read_u32_index(np, "st,syscfg", 1, &offset);
1561 	if (ret)
1562 		return ret;
1563 
1564 	ret = of_property_read_u32_index(np, "st,syscfg", 2, &mask);
1565 	if (ret)
1566 		mask = SYSCFG_IRQMUX_MASK;
1567 
1568 	mask_width = fls(mask);
1569 
1570 	for (i = 0; i < STM32_GPIO_PINS_PER_BANK; i++) {
1571 		struct reg_field mux;
1572 
1573 		mux.reg = offset + (i / 4) * 4;
1574 		mux.lsb = (i % 4) * mask_width;
1575 		mux.msb = mux.lsb + mask_width - 1;
1576 
1577 		dev_dbg(dev, "irqmux%d: reg:%#x, lsb:%d, msb:%d\n",
1578 			i, mux.reg, mux.lsb, mux.msb);
1579 
1580 		pctl->irqmux[i] = devm_regmap_field_alloc(dev, rm, mux);
1581 		if (IS_ERR(pctl->irqmux[i]))
1582 			return PTR_ERR(pctl->irqmux[i]);
1583 	}
1584 
1585 	return 0;
1586 }
1587 
stm32_pctrl_build_state(struct platform_device * pdev)1588 static int stm32_pctrl_build_state(struct platform_device *pdev)
1589 {
1590 	struct stm32_pinctrl *pctl = platform_get_drvdata(pdev);
1591 	int i;
1592 
1593 	pctl->ngroups = pctl->npins;
1594 
1595 	/* Allocate groups */
1596 	pctl->groups = devm_kcalloc(&pdev->dev, pctl->ngroups,
1597 				    sizeof(*pctl->groups), GFP_KERNEL);
1598 	if (!pctl->groups)
1599 		return -ENOMEM;
1600 
1601 	/* We assume that one pin is one group, use pin name as group name. */
1602 	pctl->grp_names = devm_kcalloc(&pdev->dev, pctl->ngroups,
1603 				       sizeof(*pctl->grp_names), GFP_KERNEL);
1604 	if (!pctl->grp_names)
1605 		return -ENOMEM;
1606 
1607 	for (i = 0; i < pctl->npins; i++) {
1608 		const struct stm32_desc_pin *pin = pctl->pins + i;
1609 		struct stm32_pinctrl_group *group = pctl->groups + i;
1610 
1611 		group->name = pin->pin.name;
1612 		group->pin = pin->pin.number;
1613 		pctl->grp_names[i] = pin->pin.name;
1614 	}
1615 
1616 	return 0;
1617 }
1618 
stm32_pctrl_create_pins_tab(struct stm32_pinctrl * pctl,struct stm32_desc_pin * pins)1619 static int stm32_pctrl_create_pins_tab(struct stm32_pinctrl *pctl,
1620 				       struct stm32_desc_pin *pins)
1621 {
1622 	const struct stm32_desc_pin *p;
1623 	int i, nb_pins_available = 0;
1624 
1625 	for (i = 0; i < pctl->match_data->npins; i++) {
1626 		p = pctl->match_data->pins + i;
1627 		if (pctl->pkg && !(pctl->pkg & p->pkg))
1628 			continue;
1629 		pins->pin = p->pin;
1630 		memcpy((struct stm32_desc_pin *)pins->functions, p->functions,
1631 		       STM32_CONFIG_NUM * sizeof(struct stm32_desc_function));
1632 		pins++;
1633 		nb_pins_available++;
1634 	}
1635 
1636 	pctl->npins = nb_pins_available;
1637 
1638 	return 0;
1639 }
1640 
stm32_pctl_probe(struct platform_device * pdev)1641 int stm32_pctl_probe(struct platform_device *pdev)
1642 {
1643 	const struct stm32_pinctrl_match_data *match_data;
1644 	struct fwnode_handle *child;
1645 	struct device *dev = &pdev->dev;
1646 	struct stm32_pinctrl *pctl;
1647 	struct pinctrl_pin_desc *pins;
1648 	int i, ret, hwlock_id;
1649 	unsigned int banks;
1650 
1651 	match_data = device_get_match_data(dev);
1652 	if (!match_data)
1653 		return -EINVAL;
1654 
1655 	pctl = devm_kzalloc(dev, sizeof(*pctl), GFP_KERNEL);
1656 	if (!pctl)
1657 		return -ENOMEM;
1658 
1659 	platform_set_drvdata(pdev, pctl);
1660 
1661 	/* check for IRQ controller (may require deferred probe) */
1662 	pctl->domain = stm32_pctrl_get_irq_domain(pdev);
1663 	if (IS_ERR(pctl->domain))
1664 		return PTR_ERR(pctl->domain);
1665 	if (!pctl->domain)
1666 		dev_warn(dev, "pinctrl without interrupt support\n");
1667 
1668 	/* hwspinlock is optional */
1669 	hwlock_id = of_hwspin_lock_get_id(pdev->dev.of_node, 0);
1670 	if (hwlock_id < 0) {
1671 		if (hwlock_id == -EPROBE_DEFER)
1672 			return hwlock_id;
1673 	} else {
1674 		pctl->hwlock = hwspin_lock_request_specific(hwlock_id);
1675 	}
1676 
1677 	spin_lock_init(&pctl->irqmux_lock);
1678 
1679 	pctl->dev = dev;
1680 	pctl->match_data = match_data;
1681 
1682 	/*  get optional package information */
1683 	if (!device_property_read_u32(dev, "st,package", &pctl->pkg))
1684 		dev_dbg(pctl->dev, "package detected: %x\n", pctl->pkg);
1685 
1686 	pctl->pins = devm_kcalloc(pctl->dev, pctl->match_data->npins,
1687 				  sizeof(*pctl->pins), GFP_KERNEL);
1688 	if (!pctl->pins)
1689 		return -ENOMEM;
1690 
1691 	ret = stm32_pctrl_create_pins_tab(pctl, pctl->pins);
1692 	if (ret)
1693 		return ret;
1694 
1695 	ret = stm32_pctrl_build_state(pdev);
1696 	if (ret) {
1697 		dev_err(dev, "build state failed: %d\n", ret);
1698 		return -EINVAL;
1699 	}
1700 
1701 	if (pctl->domain) {
1702 		ret = stm32_pctrl_dt_setup_irq(pdev, pctl);
1703 		if (ret)
1704 			return ret;
1705 	}
1706 
1707 	pins = devm_kcalloc(&pdev->dev, pctl->npins, sizeof(*pins),
1708 			    GFP_KERNEL);
1709 	if (!pins)
1710 		return -ENOMEM;
1711 
1712 	for (i = 0; i < pctl->npins; i++)
1713 		pins[i] = pctl->pins[i].pin;
1714 
1715 	pctl->pctl_desc.name = dev_name(&pdev->dev);
1716 	pctl->pctl_desc.owner = THIS_MODULE;
1717 	pctl->pctl_desc.pins = pins;
1718 	pctl->pctl_desc.npins = pctl->npins;
1719 	pctl->pctl_desc.link_consumers = true;
1720 	pctl->pctl_desc.confops = &stm32_pconf_ops;
1721 	pctl->pctl_desc.pctlops = &stm32_pctrl_ops;
1722 	pctl->pctl_desc.pmxops = &stm32_pmx_ops;
1723 	pctl->dev = &pdev->dev;
1724 
1725 	pctl->pctl_dev = devm_pinctrl_register(&pdev->dev, &pctl->pctl_desc,
1726 					       pctl);
1727 
1728 	if (IS_ERR(pctl->pctl_dev)) {
1729 		dev_err(&pdev->dev, "Failed pinctrl registration\n");
1730 		return PTR_ERR(pctl->pctl_dev);
1731 	}
1732 
1733 	banks = gpiochip_node_count(dev);
1734 	if (!banks) {
1735 		dev_err(dev, "at least one GPIO bank is required\n");
1736 		return -EINVAL;
1737 	}
1738 	pctl->banks = devm_kcalloc(dev, banks, sizeof(*pctl->banks),
1739 			GFP_KERNEL);
1740 	if (!pctl->banks)
1741 		return -ENOMEM;
1742 
1743 	pctl->clks = devm_kcalloc(dev, banks, sizeof(*pctl->clks),
1744 				  GFP_KERNEL);
1745 	if (!pctl->clks)
1746 		return -ENOMEM;
1747 
1748 	i = 0;
1749 	for_each_gpiochip_node(dev, child) {
1750 		struct stm32_gpio_bank *bank = &pctl->banks[i];
1751 		struct device_node *np = to_of_node(child);
1752 
1753 		bank->rstc = of_reset_control_get_exclusive(np, NULL);
1754 		if (PTR_ERR(bank->rstc) == -EPROBE_DEFER) {
1755 			fwnode_handle_put(child);
1756 			return -EPROBE_DEFER;
1757 		}
1758 
1759 		pctl->clks[i].clk = of_clk_get_by_name(np, NULL);
1760 		if (IS_ERR(pctl->clks[i].clk)) {
1761 			fwnode_handle_put(child);
1762 			return dev_err_probe(dev, PTR_ERR(pctl->clks[i].clk),
1763 					     "failed to get clk\n");
1764 		}
1765 		pctl->clks[i].id = "pctl";
1766 		i++;
1767 	}
1768 
1769 	ret = clk_bulk_prepare_enable(banks, pctl->clks);
1770 	if (ret) {
1771 		dev_err(dev, "failed to prepare_enable clk (%d)\n", ret);
1772 		return ret;
1773 	}
1774 
1775 	for_each_gpiochip_node(dev, child) {
1776 		ret = stm32_gpiolib_register_bank(pctl, child);
1777 		if (ret) {
1778 			fwnode_handle_put(child);
1779 			goto err_register;
1780 		}
1781 
1782 		pctl->nbanks++;
1783 	}
1784 
1785 	dev_info(dev, "Pinctrl STM32 initialized\n");
1786 
1787 	return 0;
1788 err_register:
1789 	for (i = 0; i < pctl->nbanks; i++) {
1790 		struct stm32_gpio_bank *bank = &pctl->banks[i];
1791 
1792 		gpiochip_remove(&bank->gpio_chip);
1793 	}
1794 
1795 	clk_bulk_disable_unprepare(banks, pctl->clks);
1796 	return ret;
1797 }
1798 EXPORT_SYMBOL(stm32_pctl_probe);
1799 
stm32_pinctrl_restore_gpio_regs(struct stm32_pinctrl * pctl,u32 pin)1800 static int __maybe_unused stm32_pinctrl_restore_gpio_regs(
1801 					struct stm32_pinctrl *pctl, u32 pin)
1802 {
1803 	const struct pin_desc *desc = pin_desc_get(pctl->pctl_dev, pin);
1804 	u32 val, alt, mode, offset = stm32_gpio_pin(pin);
1805 	struct pinctrl_gpio_range *range;
1806 	struct stm32_gpio_bank *bank;
1807 	bool pin_is_irq;
1808 	int ret;
1809 
1810 	range = pinctrl_find_gpio_range_from_pin(pctl->pctl_dev, pin);
1811 	if (!range)
1812 		return 0;
1813 
1814 	if (!gpiochip_line_is_valid(range->gc, offset))
1815 		return 0;
1816 
1817 	pin_is_irq = gpiochip_line_is_irq(range->gc, offset);
1818 
1819 	if (!desc || (!pin_is_irq && !desc->gpio_owner))
1820 		return 0;
1821 
1822 	bank = gpiochip_get_data(range->gc);
1823 
1824 	alt = bank->pin_backup[offset] & STM32_GPIO_BKP_ALT_MASK;
1825 	alt >>= STM32_GPIO_BKP_ALT_SHIFT;
1826 	mode = bank->pin_backup[offset] & STM32_GPIO_BKP_MODE_MASK;
1827 	mode >>= STM32_GPIO_BKP_MODE_SHIFT;
1828 
1829 	ret = stm32_pmx_set_mode(bank, offset, mode, alt);
1830 	if (ret)
1831 		return ret;
1832 
1833 	if (mode == 1) {
1834 		val = bank->pin_backup[offset] & BIT(STM32_GPIO_BKP_VAL);
1835 		val = val >> STM32_GPIO_BKP_VAL;
1836 		__stm32_gpio_set(bank, offset, val);
1837 	}
1838 
1839 	val = bank->pin_backup[offset] & BIT(STM32_GPIO_BKP_TYPE);
1840 	val >>= STM32_GPIO_BKP_TYPE;
1841 	ret = stm32_pconf_set_driving(bank, offset, val);
1842 	if (ret)
1843 		return ret;
1844 
1845 	val = bank->pin_backup[offset] & STM32_GPIO_BKP_SPEED_MASK;
1846 	val >>= STM32_GPIO_BKP_SPEED_SHIFT;
1847 	ret = stm32_pconf_set_speed(bank, offset, val);
1848 	if (ret)
1849 		return ret;
1850 
1851 	val = bank->pin_backup[offset] & STM32_GPIO_BKP_PUPD_MASK;
1852 	val >>= STM32_GPIO_BKP_PUPD_SHIFT;
1853 	ret = stm32_pconf_set_bias(bank, offset, val);
1854 	if (ret)
1855 		return ret;
1856 
1857 	if (pin_is_irq)
1858 		regmap_field_write(pctl->irqmux[offset], bank->bank_ioport_nr);
1859 
1860 	return 0;
1861 }
1862 
stm32_pinctrl_suspend(struct device * dev)1863 int __maybe_unused stm32_pinctrl_suspend(struct device *dev)
1864 {
1865 	struct stm32_pinctrl *pctl = dev_get_drvdata(dev);
1866 
1867 	clk_bulk_disable(pctl->nbanks, pctl->clks);
1868 
1869 	return 0;
1870 }
1871 EXPORT_SYMBOL(stm32_pinctrl_suspend);
1872 
stm32_pinctrl_resume(struct device * dev)1873 int __maybe_unused stm32_pinctrl_resume(struct device *dev)
1874 {
1875 	struct stm32_pinctrl *pctl = dev_get_drvdata(dev);
1876 	struct stm32_pinctrl_group *g = pctl->groups;
1877 	int i, ret;
1878 
1879 	ret = clk_bulk_enable(pctl->nbanks, pctl->clks);
1880 	if (ret)
1881 		return ret;
1882 
1883 	for (i = 0; i < pctl->ngroups; i++, g++)
1884 		stm32_pinctrl_restore_gpio_regs(pctl, g->pin);
1885 
1886 	return 0;
1887 }
1888 EXPORT_SYMBOL(stm32_pinctrl_resume);
1889 
1890 MODULE_AUTHOR("Alexandre Torgue <alexandre.torgue@foss.st.com>");
1891 MODULE_DESCRIPTION("STM32 core pinctrl driver");
1892 MODULE_LICENSE("GPL");
1893