64
64
#define gpio_range_to_bank (chip ) \
65
65
container_of(chip, struct stm32_gpio_bank, range)
66
66
67
- #define HWSPINLOCK_TIMEOUT 5 /* msec */
67
+ #define HWSPNLCK_TIMEOUT 1000 /* usec */
68
68
69
69
static const char * const stm32_gpio_functions [] = {
70
70
"gpio" , "af0" , "af1" ,
@@ -422,20 +422,22 @@ static int stm32_gpio_domain_activate(struct irq_domain *d,
422
422
* to avoid overriding.
423
423
*/
424
424
spin_lock_irqsave (& pctl -> irqmux_lock , flags );
425
- if (pctl -> hwlock )
426
- ret = hwspin_lock_timeout (pctl -> hwlock , HWSPINLOCK_TIMEOUT );
427
425
428
- if (ret ) {
429
- dev_err (pctl -> dev , "Can't get hwspinlock\n" );
430
- goto unlock ;
426
+ if (pctl -> hwlock ) {
427
+ ret = hwspin_lock_timeout_in_atomic (pctl -> hwlock ,
428
+ HWSPNLCK_TIMEOUT );
429
+ if (ret ) {
430
+ dev_err (pctl -> dev , "Can't get hwspinlock\n" );
431
+ goto unlock ;
432
+ }
431
433
}
432
434
433
435
if (pctl -> irqmux_map & BIT (irq_data -> hwirq )) {
434
436
dev_err (pctl -> dev , "irq line %ld already requested.\n" ,
435
437
irq_data -> hwirq );
436
438
ret = - EBUSY ;
437
439
if (pctl -> hwlock )
438
- hwspin_unlock (pctl -> hwlock );
440
+ hwspin_unlock_in_atomic (pctl -> hwlock );
439
441
goto unlock ;
440
442
} else {
441
443
pctl -> irqmux_map |= BIT (irq_data -> hwirq );
@@ -444,7 +446,7 @@ static int stm32_gpio_domain_activate(struct irq_domain *d,
444
446
regmap_field_write (pctl -> irqmux [irq_data -> hwirq ], bank -> bank_ioport_nr );
445
447
446
448
if (pctl -> hwlock )
447
- hwspin_unlock (pctl -> hwlock );
449
+ hwspin_unlock_in_atomic (pctl -> hwlock );
448
450
449
451
unlock :
450
452
spin_unlock_irqrestore (& pctl -> irqmux_lock , flags );
@@ -752,12 +754,13 @@ static int stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
752
754
clk_enable (bank -> clk );
753
755
spin_lock_irqsave (& bank -> lock , flags );
754
756
755
- if (pctl -> hwlock )
756
- err = hwspin_lock_timeout (pctl -> hwlock , HWSPINLOCK_TIMEOUT );
757
-
758
- if (err ) {
759
- dev_err (pctl -> dev , "Can't get hwspinlock\n" );
760
- goto unlock ;
757
+ if (pctl -> hwlock ) {
758
+ err = hwspin_lock_timeout_in_atomic (pctl -> hwlock ,
759
+ HWSPNLCK_TIMEOUT );
760
+ if (err ) {
761
+ dev_err (pctl -> dev , "Can't get hwspinlock\n" );
762
+ goto unlock ;
763
+ }
761
764
}
762
765
763
766
val = readl_relaxed (bank -> base + alt_offset );
@@ -771,7 +774,7 @@ static int stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
771
774
writel_relaxed (val , bank -> base + STM32_GPIO_MODER );
772
775
773
776
if (pctl -> hwlock )
774
- hwspin_unlock (pctl -> hwlock );
777
+ hwspin_unlock_in_atomic (pctl -> hwlock );
775
778
776
779
stm32_gpio_backup_mode (bank , pin , mode , alt );
777
780
@@ -871,12 +874,13 @@ static int stm32_pconf_set_driving(struct stm32_gpio_bank *bank,
871
874
clk_enable (bank -> clk );
872
875
spin_lock_irqsave (& bank -> lock , flags );
873
876
874
- if (pctl -> hwlock )
875
- err = hwspin_lock_timeout (pctl -> hwlock , HWSPINLOCK_TIMEOUT );
876
-
877
- if (err ) {
878
- dev_err (pctl -> dev , "Can't get hwspinlock\n" );
879
- goto unlock ;
877
+ if (pctl -> hwlock ) {
878
+ err = hwspin_lock_timeout_in_atomic (pctl -> hwlock ,
879
+ HWSPNLCK_TIMEOUT );
880
+ if (err ) {
881
+ dev_err (pctl -> dev , "Can't get hwspinlock\n" );
882
+ goto unlock ;
883
+ }
880
884
}
881
885
882
886
val = readl_relaxed (bank -> base + STM32_GPIO_TYPER );
@@ -885,7 +889,7 @@ static int stm32_pconf_set_driving(struct stm32_gpio_bank *bank,
885
889
writel_relaxed (val , bank -> base + STM32_GPIO_TYPER );
886
890
887
891
if (pctl -> hwlock )
888
- hwspin_unlock (pctl -> hwlock );
892
+ hwspin_unlock_in_atomic (pctl -> hwlock );
889
893
890
894
stm32_gpio_backup_driving (bank , offset , drive );
891
895
@@ -925,12 +929,13 @@ static int stm32_pconf_set_speed(struct stm32_gpio_bank *bank,
925
929
clk_enable (bank -> clk );
926
930
spin_lock_irqsave (& bank -> lock , flags );
927
931
928
- if (pctl -> hwlock )
929
- err = hwspin_lock_timeout (pctl -> hwlock , HWSPINLOCK_TIMEOUT );
930
-
931
- if (err ) {
932
- dev_err (pctl -> dev , "Can't get hwspinlock\n" );
933
- goto unlock ;
932
+ if (pctl -> hwlock ) {
933
+ err = hwspin_lock_timeout_in_atomic (pctl -> hwlock ,
934
+ HWSPNLCK_TIMEOUT );
935
+ if (err ) {
936
+ dev_err (pctl -> dev , "Can't get hwspinlock\n" );
937
+ goto unlock ;
938
+ }
934
939
}
935
940
936
941
val = readl_relaxed (bank -> base + STM32_GPIO_SPEEDR );
@@ -939,7 +944,7 @@ static int stm32_pconf_set_speed(struct stm32_gpio_bank *bank,
939
944
writel_relaxed (val , bank -> base + STM32_GPIO_SPEEDR );
940
945
941
946
if (pctl -> hwlock )
942
- hwspin_unlock (pctl -> hwlock );
947
+ hwspin_unlock_in_atomic (pctl -> hwlock );
943
948
944
949
stm32_gpio_backup_speed (bank , offset , speed );
945
950
@@ -979,12 +984,13 @@ static int stm32_pconf_set_bias(struct stm32_gpio_bank *bank,
979
984
clk_enable (bank -> clk );
980
985
spin_lock_irqsave (& bank -> lock , flags );
981
986
982
- if (pctl -> hwlock )
983
- err = hwspin_lock_timeout (pctl -> hwlock , HWSPINLOCK_TIMEOUT );
984
-
985
- if (err ) {
986
- dev_err (pctl -> dev , "Can't get hwspinlock\n" );
987
- goto unlock ;
987
+ if (pctl -> hwlock ) {
988
+ err = hwspin_lock_timeout_in_atomic (pctl -> hwlock ,
989
+ HWSPNLCK_TIMEOUT );
990
+ if (err ) {
991
+ dev_err (pctl -> dev , "Can't get hwspinlock\n" );
992
+ goto unlock ;
993
+ }
988
994
}
989
995
990
996
val = readl_relaxed (bank -> base + STM32_GPIO_PUPDR );
@@ -993,7 +999,7 @@ static int stm32_pconf_set_bias(struct stm32_gpio_bank *bank,
993
999
writel_relaxed (val , bank -> base + STM32_GPIO_PUPDR );
994
1000
995
1001
if (pctl -> hwlock )
996
- hwspin_unlock (pctl -> hwlock );
1002
+ hwspin_unlock_in_atomic (pctl -> hwlock );
997
1003
998
1004
stm32_gpio_backup_bias (bank , offset , bias );
999
1005
0 commit comments