@@ -112,8 +112,6 @@ struct spi_engine {
112112 spinlock_t lock ;
113113
114114 void __iomem * base ;
115-
116- struct spi_message * msg ;
117115 struct ida sync_ida ;
118116
119117 unsigned int int_enable ;
@@ -252,10 +250,9 @@ static int spi_engine_compile_message(struct spi_engine *spi_engine,
252250 return 0 ;
253251}
254252
255- static void spi_engine_xfer_next (struct spi_engine * spi_engine ,
253+ static void spi_engine_xfer_next (struct spi_message * msg ,
256254 struct spi_transfer * * _xfer )
257255{
258- struct spi_message * msg = spi_engine -> msg ;
259256 struct spi_transfer * xfer = * _xfer ;
260257
261258 if (!xfer ) {
@@ -270,13 +267,13 @@ static void spi_engine_xfer_next(struct spi_engine *spi_engine,
270267 * _xfer = xfer ;
271268}
272269
273- static void spi_engine_tx_next (struct spi_engine * spi_engine )
270+ static void spi_engine_tx_next (struct spi_message * msg )
274271{
275- struct spi_engine_message_state * st = spi_engine -> msg -> state ;
272+ struct spi_engine_message_state * st = msg -> state ;
276273 struct spi_transfer * xfer = st -> tx_xfer ;
277274
278275 do {
279- spi_engine_xfer_next (spi_engine , & xfer );
276+ spi_engine_xfer_next (msg , & xfer );
280277 } while (xfer && !xfer -> tx_buf );
281278
282279 st -> tx_xfer = xfer ;
@@ -288,13 +285,13 @@ static void spi_engine_tx_next(struct spi_engine *spi_engine)
288285 }
289286}
290287
291- static void spi_engine_rx_next (struct spi_engine * spi_engine )
288+ static void spi_engine_rx_next (struct spi_message * msg )
292289{
293- struct spi_engine_message_state * st = spi_engine -> msg -> state ;
290+ struct spi_engine_message_state * st = msg -> state ;
294291 struct spi_transfer * xfer = st -> rx_xfer ;
295292
296293 do {
297- spi_engine_xfer_next (spi_engine , & xfer );
294+ spi_engine_xfer_next (msg , & xfer );
298295 } while (xfer && !xfer -> rx_buf );
299296
300297 st -> rx_xfer = xfer ;
@@ -306,10 +303,11 @@ static void spi_engine_rx_next(struct spi_engine *spi_engine)
306303 }
307304}
308305
309- static bool spi_engine_write_cmd_fifo (struct spi_engine * spi_engine )
306+ static bool spi_engine_write_cmd_fifo (struct spi_engine * spi_engine ,
307+ struct spi_message * msg )
310308{
311309 void __iomem * addr = spi_engine -> base + SPI_ENGINE_REG_CMD_FIFO ;
312- struct spi_engine_message_state * st = spi_engine -> msg -> state ;
310+ struct spi_engine_message_state * st = msg -> state ;
313311 unsigned int n , m , i ;
314312 const uint16_t * buf ;
315313
@@ -327,10 +325,11 @@ static bool spi_engine_write_cmd_fifo(struct spi_engine *spi_engine)
327325 return st -> cmd_length != 0 ;
328326}
329327
330- static bool spi_engine_write_tx_fifo (struct spi_engine * spi_engine )
328+ static bool spi_engine_write_tx_fifo (struct spi_engine * spi_engine ,
329+ struct spi_message * msg )
331330{
332331 void __iomem * addr = spi_engine -> base + SPI_ENGINE_REG_SDO_DATA_FIFO ;
333- struct spi_engine_message_state * st = spi_engine -> msg -> state ;
332+ struct spi_engine_message_state * st = msg -> state ;
334333 unsigned int n , m , i ;
335334 const uint8_t * buf ;
336335
@@ -344,16 +343,17 @@ static bool spi_engine_write_tx_fifo(struct spi_engine *spi_engine)
344343 st -> tx_length -= m ;
345344 n -= m ;
346345 if (st -> tx_length == 0 )
347- spi_engine_tx_next (spi_engine );
346+ spi_engine_tx_next (msg );
348347 }
349348
350349 return st -> tx_length != 0 ;
351350}
352351
353- static bool spi_engine_read_rx_fifo (struct spi_engine * spi_engine )
352+ static bool spi_engine_read_rx_fifo (struct spi_engine * spi_engine ,
353+ struct spi_message * msg )
354354{
355355 void __iomem * addr = spi_engine -> base + SPI_ENGINE_REG_SDI_DATA_FIFO ;
356- struct spi_engine_message_state * st = spi_engine -> msg -> state ;
356+ struct spi_engine_message_state * st = msg -> state ;
357357 unsigned int n , m , i ;
358358 uint8_t * buf ;
359359
@@ -367,7 +367,7 @@ static bool spi_engine_read_rx_fifo(struct spi_engine *spi_engine)
367367 st -> rx_length -= m ;
368368 n -= m ;
369369 if (st -> rx_length == 0 )
370- spi_engine_rx_next (spi_engine );
370+ spi_engine_rx_next (msg );
371371 }
372372
373373 return st -> rx_length != 0 ;
@@ -376,6 +376,7 @@ static bool spi_engine_read_rx_fifo(struct spi_engine *spi_engine)
376376static irqreturn_t spi_engine_irq (int irq , void * devid )
377377{
378378 struct spi_controller * host = devid ;
379+ struct spi_message * msg = host -> cur_msg ;
379380 struct spi_engine * spi_engine = spi_controller_get_devdata (host );
380381 unsigned int disable_int = 0 ;
381382 unsigned int pending ;
@@ -393,29 +394,26 @@ static irqreturn_t spi_engine_irq(int irq, void *devid)
393394 spin_lock (& spi_engine -> lock );
394395
395396 if (pending & SPI_ENGINE_INT_CMD_ALMOST_EMPTY ) {
396- if (!spi_engine_write_cmd_fifo (spi_engine ))
397+ if (!spi_engine_write_cmd_fifo (spi_engine , msg ))
397398 disable_int |= SPI_ENGINE_INT_CMD_ALMOST_EMPTY ;
398399 }
399400
400401 if (pending & SPI_ENGINE_INT_SDO_ALMOST_EMPTY ) {
401- if (!spi_engine_write_tx_fifo (spi_engine ))
402+ if (!spi_engine_write_tx_fifo (spi_engine , msg ))
402403 disable_int |= SPI_ENGINE_INT_SDO_ALMOST_EMPTY ;
403404 }
404405
405406 if (pending & (SPI_ENGINE_INT_SDI_ALMOST_FULL | SPI_ENGINE_INT_SYNC )) {
406- if (!spi_engine_read_rx_fifo (spi_engine ))
407+ if (!spi_engine_read_rx_fifo (spi_engine , msg ))
407408 disable_int |= SPI_ENGINE_INT_SDI_ALMOST_FULL ;
408409 }
409410
410- if (pending & SPI_ENGINE_INT_SYNC && spi_engine -> msg ) {
411- struct spi_engine_message_state * st = spi_engine -> msg -> state ;
411+ if (pending & SPI_ENGINE_INT_SYNC && msg ) {
412+ struct spi_engine_message_state * st = msg -> state ;
412413
413414 if (completed_id == st -> sync_id ) {
414- struct spi_message * msg = spi_engine -> msg ;
415-
416415 msg -> status = 0 ;
417416 msg -> actual_length = msg -> frame_length ;
418- spi_engine -> msg = NULL ;
419417 spi_finalize_current_message (host );
420418 disable_int |= SPI_ENGINE_INT_SYNC ;
421419 }
@@ -499,16 +497,14 @@ static int spi_engine_transfer_one_message(struct spi_controller *host,
499497
500498 spin_lock_irqsave (& spi_engine -> lock , flags );
501499
502- spi_engine -> msg = msg ;
503-
504- if (spi_engine_write_cmd_fifo (spi_engine ))
500+ if (spi_engine_write_cmd_fifo (spi_engine , msg ))
505501 int_enable |= SPI_ENGINE_INT_CMD_ALMOST_EMPTY ;
506502
507- spi_engine_tx_next (spi_engine );
508- if (spi_engine_write_tx_fifo (spi_engine ))
503+ spi_engine_tx_next (msg );
504+ if (spi_engine_write_tx_fifo (spi_engine , msg ))
509505 int_enable |= SPI_ENGINE_INT_SDO_ALMOST_EMPTY ;
510506
511- spi_engine_rx_next (spi_engine );
507+ spi_engine_rx_next (msg );
512508 if (st -> rx_length != 0 )
513509 int_enable |= SPI_ENGINE_INT_SDI_ALMOST_FULL ;
514510
0 commit comments