aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi
diff options
context:
space:
mode:
authorBryan Wu <bryan.wu@analog.com>2007-12-05 02:45:21 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-12-05 12:21:20 -0500
commitd8c05008b0e464c94967ed2f20d1d661fca6790e (patch)
treeb8d178ff27a6570666561328e3604beeae49ec64 /drivers/spi
parent07612e5f224613020c0ba17ce28e8eac052ef8ce (diff)
Blackfin SPI driver: use cpu_relax() to replace continue in while busywait
Signed-off-by: Bryan Wu <bryan.wu@analog.com> Cc: David Brownell <david-b@pacbell.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/spi_bfin5xx.c78
1 files changed, 39 insertions, 39 deletions
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
index a85bcb306590..0e33b5aa35fb 100644
--- a/drivers/spi/spi_bfin5xx.c
+++ b/drivers/spi/spi_bfin5xx.c
@@ -186,7 +186,7 @@ static int flush(struct driver_data *drv_data)
186 186
187 /* wait for stop and clear stat */ 187 /* wait for stop and clear stat */
188 while (!(read_STAT(drv_data) & BIT_STAT_SPIF) && limit--) 188 while (!(read_STAT(drv_data) & BIT_STAT_SPIF) && limit--)
189 continue; 189 cpu_relax();
190 190
191 write_STAT(drv_data, BIT_STAT_CLR); 191 write_STAT(drv_data, BIT_STAT_CLR);
192 192
@@ -262,7 +262,7 @@ static void null_writer(struct driver_data *drv_data)
262 while (drv_data->tx < drv_data->tx_end) { 262 while (drv_data->tx < drv_data->tx_end) {
263 write_TDBR(drv_data, 0); 263 write_TDBR(drv_data, 0);
264 while ((read_STAT(drv_data) & BIT_STAT_TXS)) 264 while ((read_STAT(drv_data) & BIT_STAT_TXS))
265 continue; 265 cpu_relax();
266 drv_data->tx += n_bytes; 266 drv_data->tx += n_bytes;
267 } 267 }
268} 268}
@@ -274,7 +274,7 @@ static void null_reader(struct driver_data *drv_data)
274 274
275 while (drv_data->rx < drv_data->rx_end) { 275 while (drv_data->rx < drv_data->rx_end) {
276 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 276 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
277 continue; 277 cpu_relax();
278 dummy_read(drv_data); 278 dummy_read(drv_data);
279 drv_data->rx += n_bytes; 279 drv_data->rx += n_bytes;
280 } 280 }
@@ -287,12 +287,12 @@ static void u8_writer(struct driver_data *drv_data)
287 287
288 /* poll for SPI completion before start */ 288 /* poll for SPI completion before start */
289 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 289 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
290 continue; 290 cpu_relax();
291 291
292 while (drv_data->tx < drv_data->tx_end) { 292 while (drv_data->tx < drv_data->tx_end) {
293 write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); 293 write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
294 while (read_STAT(drv_data) & BIT_STAT_TXS) 294 while (read_STAT(drv_data) & BIT_STAT_TXS)
295 continue; 295 cpu_relax();
296 ++drv_data->tx; 296 ++drv_data->tx;
297 } 297 }
298} 298}
@@ -303,14 +303,14 @@ static void u8_cs_chg_writer(struct driver_data *drv_data)
303 303
304 /* poll for SPI completion before start */ 304 /* poll for SPI completion before start */
305 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 305 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
306 continue; 306 cpu_relax();
307 307
308 while (drv_data->tx < drv_data->tx_end) { 308 while (drv_data->tx < drv_data->tx_end) {
309 cs_active(drv_data, chip); 309 cs_active(drv_data, chip);
310 310
311 write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); 311 write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
312 while (read_STAT(drv_data) & BIT_STAT_TXS) 312 while (read_STAT(drv_data) & BIT_STAT_TXS)
313 continue; 313 cpu_relax();
314 314
315 cs_deactive(drv_data, chip); 315 cs_deactive(drv_data, chip);
316 316
@@ -325,7 +325,7 @@ static void u8_reader(struct driver_data *drv_data)
325 325
326 /* poll for SPI completion before start */ 326 /* poll for SPI completion before start */
327 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 327 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
328 continue; 328 cpu_relax();
329 329
330 /* clear TDBR buffer before read(else it will be shifted out) */ 330 /* clear TDBR buffer before read(else it will be shifted out) */
331 write_TDBR(drv_data, 0xFFFF); 331 write_TDBR(drv_data, 0xFFFF);
@@ -334,13 +334,13 @@ static void u8_reader(struct driver_data *drv_data)
334 334
335 while (drv_data->rx < drv_data->rx_end - 1) { 335 while (drv_data->rx < drv_data->rx_end - 1) {
336 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 336 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
337 continue; 337 cpu_relax();
338 *(u8 *) (drv_data->rx) = read_RDBR(drv_data); 338 *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
339 ++drv_data->rx; 339 ++drv_data->rx;
340 } 340 }
341 341
342 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 342 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
343 continue; 343 cpu_relax();
344 *(u8 *) (drv_data->rx) = read_SHAW(drv_data); 344 *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
345 ++drv_data->rx; 345 ++drv_data->rx;
346} 346}
@@ -351,7 +351,7 @@ static void u8_cs_chg_reader(struct driver_data *drv_data)
351 351
352 /* poll for SPI completion before start */ 352 /* poll for SPI completion before start */
353 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 353 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
354 continue; 354 cpu_relax();
355 355
356 /* clear TDBR buffer before read(else it will be shifted out) */ 356 /* clear TDBR buffer before read(else it will be shifted out) */
357 write_TDBR(drv_data, 0xFFFF); 357 write_TDBR(drv_data, 0xFFFF);
@@ -363,7 +363,7 @@ static void u8_cs_chg_reader(struct driver_data *drv_data)
363 cs_deactive(drv_data, chip); 363 cs_deactive(drv_data, chip);
364 364
365 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 365 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
366 continue; 366 cpu_relax();
367 cs_active(drv_data, chip); 367 cs_active(drv_data, chip);
368 *(u8 *) (drv_data->rx) = read_RDBR(drv_data); 368 *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
369 ++drv_data->rx; 369 ++drv_data->rx;
@@ -371,7 +371,7 @@ static void u8_cs_chg_reader(struct driver_data *drv_data)
371 cs_deactive(drv_data, chip); 371 cs_deactive(drv_data, chip);
372 372
373 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 373 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
374 continue; 374 cpu_relax();
375 *(u8 *) (drv_data->rx) = read_SHAW(drv_data); 375 *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
376 ++drv_data->rx; 376 ++drv_data->rx;
377} 377}
@@ -380,15 +380,15 @@ static void u8_duplex(struct driver_data *drv_data)
380{ 380{
381 /* poll for SPI completion before start */ 381 /* poll for SPI completion before start */
382 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 382 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
383 continue; 383 cpu_relax();
384 384
385 /* in duplex mode, clk is triggered by writing of TDBR */ 385 /* in duplex mode, clk is triggered by writing of TDBR */
386 while (drv_data->rx < drv_data->rx_end) { 386 while (drv_data->rx < drv_data->rx_end) {
387 write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); 387 write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
388 while (read_STAT(drv_data) & BIT_STAT_TXS) 388 while (read_STAT(drv_data) & BIT_STAT_TXS)
389 continue; 389 cpu_relax();
390 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 390 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
391 continue; 391 cpu_relax();
392 *(u8 *) (drv_data->rx) = read_RDBR(drv_data); 392 *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
393 ++drv_data->rx; 393 ++drv_data->rx;
394 ++drv_data->tx; 394 ++drv_data->tx;
@@ -401,16 +401,16 @@ static void u8_cs_chg_duplex(struct driver_data *drv_data)
401 401
402 /* poll for SPI completion before start */ 402 /* poll for SPI completion before start */
403 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 403 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
404 continue; 404 cpu_relax();
405 405
406 while (drv_data->rx < drv_data->rx_end) { 406 while (drv_data->rx < drv_data->rx_end) {
407 cs_active(drv_data, chip); 407 cs_active(drv_data, chip);
408 408
409 write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); 409 write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
410 while (read_STAT(drv_data) & BIT_STAT_TXS) 410 while (read_STAT(drv_data) & BIT_STAT_TXS)
411 continue; 411 cpu_relax();
412 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 412 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
413 continue; 413 cpu_relax();
414 *(u8 *) (drv_data->rx) = read_RDBR(drv_data); 414 *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
415 415
416 cs_deactive(drv_data, chip); 416 cs_deactive(drv_data, chip);
@@ -427,12 +427,12 @@ static void u16_writer(struct driver_data *drv_data)
427 427
428 /* poll for SPI completion before start */ 428 /* poll for SPI completion before start */
429 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 429 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
430 continue; 430 cpu_relax();
431 431
432 while (drv_data->tx < drv_data->tx_end) { 432 while (drv_data->tx < drv_data->tx_end) {
433 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 433 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
434 while ((read_STAT(drv_data) & BIT_STAT_TXS)) 434 while ((read_STAT(drv_data) & BIT_STAT_TXS))
435 continue; 435 cpu_relax();
436 drv_data->tx += 2; 436 drv_data->tx += 2;
437 } 437 }
438} 438}
@@ -443,14 +443,14 @@ static void u16_cs_chg_writer(struct driver_data *drv_data)
443 443
444 /* poll for SPI completion before start */ 444 /* poll for SPI completion before start */
445 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 445 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
446 continue; 446 cpu_relax();
447 447
448 while (drv_data->tx < drv_data->tx_end) { 448 while (drv_data->tx < drv_data->tx_end) {
449 cs_active(drv_data, chip); 449 cs_active(drv_data, chip);
450 450
451 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 451 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
452 while ((read_STAT(drv_data) & BIT_STAT_TXS)) 452 while ((read_STAT(drv_data) & BIT_STAT_TXS))
453 continue; 453 cpu_relax();
454 454
455 cs_deactive(drv_data, chip); 455 cs_deactive(drv_data, chip);
456 456
@@ -465,7 +465,7 @@ static void u16_reader(struct driver_data *drv_data)
465 465
466 /* poll for SPI completion before start */ 466 /* poll for SPI completion before start */
467 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 467 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
468 continue; 468 cpu_relax();
469 469
470 /* clear TDBR buffer before read(else it will be shifted out) */ 470 /* clear TDBR buffer before read(else it will be shifted out) */
471 write_TDBR(drv_data, 0xFFFF); 471 write_TDBR(drv_data, 0xFFFF);
@@ -474,13 +474,13 @@ static void u16_reader(struct driver_data *drv_data)
474 474
475 while (drv_data->rx < (drv_data->rx_end - 2)) { 475 while (drv_data->rx < (drv_data->rx_end - 2)) {
476 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 476 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
477 continue; 477 cpu_relax();
478 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 478 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
479 drv_data->rx += 2; 479 drv_data->rx += 2;
480 } 480 }
481 481
482 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 482 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
483 continue; 483 cpu_relax();
484 *(u16 *) (drv_data->rx) = read_SHAW(drv_data); 484 *(u16 *) (drv_data->rx) = read_SHAW(drv_data);
485 drv_data->rx += 2; 485 drv_data->rx += 2;
486} 486}
@@ -491,7 +491,7 @@ static void u16_cs_chg_reader(struct driver_data *drv_data)
491 491
492 /* poll for SPI completion before start */ 492 /* poll for SPI completion before start */
493 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 493 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
494 continue; 494 cpu_relax();
495 495
496 /* clear TDBR buffer before read(else it will be shifted out) */ 496 /* clear TDBR buffer before read(else it will be shifted out) */
497 write_TDBR(drv_data, 0xFFFF); 497 write_TDBR(drv_data, 0xFFFF);
@@ -503,7 +503,7 @@ static void u16_cs_chg_reader(struct driver_data *drv_data)
503 cs_deactive(drv_data, chip); 503 cs_deactive(drv_data, chip);
504 504
505 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 505 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
506 continue; 506 cpu_relax();
507 cs_active(drv_data, chip); 507 cs_active(drv_data, chip);
508 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 508 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
509 drv_data->rx += 2; 509 drv_data->rx += 2;
@@ -511,7 +511,7 @@ static void u16_cs_chg_reader(struct driver_data *drv_data)
511 cs_deactive(drv_data, chip); 511 cs_deactive(drv_data, chip);
512 512
513 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 513 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
514 continue; 514 cpu_relax();
515 *(u16 *) (drv_data->rx) = read_SHAW(drv_data); 515 *(u16 *) (drv_data->rx) = read_SHAW(drv_data);
516 drv_data->rx += 2; 516 drv_data->rx += 2;
517} 517}
@@ -520,15 +520,15 @@ static void u16_duplex(struct driver_data *drv_data)
520{ 520{
521 /* poll for SPI completion before start */ 521 /* poll for SPI completion before start */
522 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 522 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
523 continue; 523 cpu_relax();
524 524
525 /* in duplex mode, clk is triggered by writing of TDBR */ 525 /* in duplex mode, clk is triggered by writing of TDBR */
526 while (drv_data->tx < drv_data->tx_end) { 526 while (drv_data->tx < drv_data->tx_end) {
527 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 527 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
528 while (read_STAT(drv_data) & BIT_STAT_TXS) 528 while (read_STAT(drv_data) & BIT_STAT_TXS)
529 continue; 529 cpu_relax();
530 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 530 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
531 continue; 531 cpu_relax();
532 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 532 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
533 drv_data->rx += 2; 533 drv_data->rx += 2;
534 drv_data->tx += 2; 534 drv_data->tx += 2;
@@ -541,16 +541,16 @@ static void u16_cs_chg_duplex(struct driver_data *drv_data)
541 541
542 /* poll for SPI completion before start */ 542 /* poll for SPI completion before start */
543 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 543 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
544 continue; 544 cpu_relax();
545 545
546 while (drv_data->tx < drv_data->tx_end) { 546 while (drv_data->tx < drv_data->tx_end) {
547 cs_active(drv_data, chip); 547 cs_active(drv_data, chip);
548 548
549 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 549 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
550 while (read_STAT(drv_data) & BIT_STAT_TXS) 550 while (read_STAT(drv_data) & BIT_STAT_TXS)
551 continue; 551 cpu_relax();
552 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 552 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
553 continue; 553 cpu_relax();
554 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 554 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
555 555
556 cs_deactive(drv_data, chip); 556 cs_deactive(drv_data, chip);
@@ -624,7 +624,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
624 624
625 /* Wait for DMA to complete */ 625 /* Wait for DMA to complete */
626 while (get_dma_curr_irqstat(drv_data->dma_channel) & DMA_RUN) 626 while (get_dma_curr_irqstat(drv_data->dma_channel) & DMA_RUN)
627 continue; 627 cpu_relax();
628 628
629 /* 629 /*
630 * wait for the last transaction shifted out. HRM states: 630 * wait for the last transaction shifted out. HRM states:
@@ -635,11 +635,11 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
635 if (drv_data->tx != NULL) { 635 if (drv_data->tx != NULL) {
636 while ((read_STAT(drv_data) & TXS) || 636 while ((read_STAT(drv_data) & TXS) ||
637 (read_STAT(drv_data) & TXS)) 637 (read_STAT(drv_data) & TXS))
638 continue; 638 cpu_relax();
639 } 639 }
640 640
641 while (!(read_STAT(drv_data) & SPIF)) 641 while (!(read_STAT(drv_data) & SPIF))
642 continue; 642 cpu_relax();
643 643
644 msg->actual_length += drv_data->len_in_bytes; 644 msg->actual_length += drv_data->len_in_bytes;
645 645
@@ -783,7 +783,7 @@ static void pump_transfers(unsigned long data)
783 783
784 /* poll for SPI completion before start */ 784 /* poll for SPI completion before start */
785 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 785 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
786 continue; 786 cpu_relax();
787 787
788 /* dirty hack for autobuffer DMA mode */ 788 /* dirty hack for autobuffer DMA mode */
789 if (drv_data->tx_dma == 0xFFFF) { 789 if (drv_data->tx_dma == 0xFFFF) {