Skip to content

Commit 4e99144

Browse files
dlechbroonie
authored andcommitted
spi: axi-spi-engine: remove struct spi_engine::msg
In the AXI SPI Engine driver, the struct spi_engine::msg member was used to keep track of the current message being processed. The SPI core is already keeping track of this, so we don't need to duplicate the effort. In most cases, we already have a pointer to the current message, so we can pass it directly to the functions that need it. In the one case where we don't have a pointer to the current message, we can get it from struct spi_controller::cur_msg. Signed-off-by: David Lechner <dlechner@baylibre.com> Link: https://lore.kernel.org/r/20231117-axi-spi-engine-series-1-v1-12-cc59db999b87@baylibre.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 4a074dd commit 4e99144

1 file changed

Lines changed: 28 additions & 32 deletions

File tree

drivers/spi/spi-axi-spi-engine.c

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
376376
static 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

Comments
 (0)