@@ -1033,6 +1033,18 @@ static int __maybe_unused zynqmp_runtime_resume(struct device *dev)
1033
1033
return 0 ;
1034
1034
}
1035
1035
1036
+ static unsigned long zynqmp_qspi_timeout (struct zynqmp_qspi * xqspi , u8 bits ,
1037
+ unsigned long bytes )
1038
+ {
1039
+ unsigned long timeout ;
1040
+
1041
+ /* Assume we are at most 2x slower than the nominal bus speed */
1042
+ timeout = mult_frac (bytes , 2 * 8 * MSEC_PER_SEC ,
1043
+ bits * xqspi -> speed_hz );
1044
+ /* And add 100 ms for scheduling delays */
1045
+ return msecs_to_jiffies (timeout + 100 );
1046
+ }
1047
+
1036
1048
/**
1037
1049
* zynqmp_qspi_exec_op() - Initiates the QSPI transfer
1038
1050
* @mem: The SPI memory
@@ -1049,6 +1061,7 @@ static int zynqmp_qspi_exec_op(struct spi_mem *mem,
1049
1061
{
1050
1062
struct zynqmp_qspi * xqspi = spi_controller_get_devdata
1051
1063
(mem -> spi -> controller );
1064
+ unsigned long timeout ;
1052
1065
int err = 0 , i ;
1053
1066
u32 genfifoentry = 0 ;
1054
1067
u16 opcode = op -> cmd .opcode ;
@@ -1077,8 +1090,10 @@ static int zynqmp_qspi_exec_op(struct spi_mem *mem,
1077
1090
zynqmp_gqspi_write (xqspi , GQSPI_IER_OFST ,
1078
1091
GQSPI_IER_GENFIFOEMPTY_MASK |
1079
1092
GQSPI_IER_TXNOT_FULL_MASK );
1080
- if (!wait_for_completion_timeout
1081
- (& xqspi -> data_completion , msecs_to_jiffies (1000 ))) {
1093
+ timeout = zynqmp_qspi_timeout (xqspi , op -> cmd .buswidth ,
1094
+ op -> cmd .nbytes );
1095
+ if (!wait_for_completion_timeout (& xqspi -> data_completion ,
1096
+ timeout )) {
1082
1097
err = - ETIMEDOUT ;
1083
1098
goto return_err ;
1084
1099
}
@@ -1104,8 +1119,10 @@ static int zynqmp_qspi_exec_op(struct spi_mem *mem,
1104
1119
GQSPI_IER_TXEMPTY_MASK |
1105
1120
GQSPI_IER_GENFIFOEMPTY_MASK |
1106
1121
GQSPI_IER_TXNOT_FULL_MASK );
1107
- if (!wait_for_completion_timeout
1108
- (& xqspi -> data_completion , msecs_to_jiffies (1000 ))) {
1122
+ timeout = zynqmp_qspi_timeout (xqspi , op -> addr .buswidth ,
1123
+ op -> addr .nbytes );
1124
+ if (!wait_for_completion_timeout (& xqspi -> data_completion ,
1125
+ timeout )) {
1109
1126
err = - ETIMEDOUT ;
1110
1127
goto return_err ;
1111
1128
}
@@ -1173,8 +1190,9 @@ static int zynqmp_qspi_exec_op(struct spi_mem *mem,
1173
1190
GQSPI_IER_RXEMPTY_MASK );
1174
1191
}
1175
1192
}
1176
- if (!wait_for_completion_timeout
1177
- (& xqspi -> data_completion , msecs_to_jiffies (1000 )))
1193
+ timeout = zynqmp_qspi_timeout (xqspi , op -> data .buswidth ,
1194
+ op -> data .nbytes );
1195
+ if (!wait_for_completion_timeout (& xqspi -> data_completion , timeout ))
1178
1196
err = - ETIMEDOUT ;
1179
1197
}
1180
1198
0 commit comments