Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

serial: omap: Disable PM runtime autoidle to remove pm_runtime_irq_safe()

We want to remove the use of pm_runtime_irq_safe() from serial drivers
to allow making PM runtime handling generic. Let's simplify things by
disabling PM runtime autoidle for omap-serial as this driver has been
deprecated for years because of the 8250_omap driver.

There are still some omap-serial users that seem to hang on to it for
some unknown rs485 reasons it seems. But presumably those folks do not
need PM runtime autoidle with omap-serial, and hopefully can just move
to using 8250_omap driver instead.

For 8250_omap driver, we will eventually move to use generic serial
layer PM based on patches done by Andy Shevchenko to remove
pm_runtime_irq_safe() usage.

Cc: Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: Dario Binacchi <dariobin@libero.it>
Cc: Vignesh Raghavendra <vigneshr@ti.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Link: https://lore.kernel.org/r/20210727103149.51175-1-tony@atomide.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Tony Lindgren and committed by
Greg Kroah-Hartman
33e5571e ccd1c4d7

+2 -73
+2 -73
drivers/tty/serial/omap-serial.c
··· 276 276 277 277 dev_dbg(up->port.dev, "serial_omap_enable_ms+%d\n", up->port.line); 278 278 279 - pm_runtime_get_sync(up->dev); 280 279 up->ier |= UART_IER_MSI; 281 280 serial_out(up, UART_IER, up->ier); 282 - pm_runtime_mark_last_busy(up->dev); 283 - pm_runtime_put_autosuspend(up->dev); 284 281 } 285 282 286 283 static void serial_omap_stop_tx(struct uart_port *port) 287 284 { 288 285 struct uart_omap_port *up = to_uart_omap_port(port); 289 286 int res; 290 - 291 - pm_runtime_get_sync(up->dev); 292 287 293 288 /* Handle RS-485 */ 294 289 if (port->rs485.flags & SER_RS485_ENABLED) { ··· 325 330 up->ier &= ~UART_IER_THRI; 326 331 serial_out(up, UART_IER, up->ier); 327 332 } 328 - 329 - pm_runtime_mark_last_busy(up->dev); 330 - pm_runtime_put_autosuspend(up->dev); 331 333 } 332 334 333 335 static void serial_omap_stop_rx(struct uart_port *port) 334 336 { 335 337 struct uart_omap_port *up = to_uart_omap_port(port); 336 338 337 - pm_runtime_get_sync(up->dev); 338 339 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); 339 340 up->port.read_status_mask &= ~UART_LSR_DR; 340 341 serial_out(up, UART_IER, up->ier); 341 - pm_runtime_mark_last_busy(up->dev); 342 - pm_runtime_put_autosuspend(up->dev); 343 342 } 344 343 345 344 static void transmit_chars(struct uart_omap_port *up, unsigned int lsr) ··· 388 399 struct uart_omap_port *up = to_uart_omap_port(port); 389 400 int res; 390 401 391 - pm_runtime_get_sync(up->dev); 392 - 393 402 /* Handle RS-485 */ 394 403 if (port->rs485.flags & SER_RS485_ENABLED) { 395 404 /* Fire THR interrupts when FIFO is below trigger level */ ··· 408 421 up->rs485_tx_filter_count = 0; 409 422 410 423 serial_omap_enable_ier_thri(up); 411 - pm_runtime_mark_last_busy(up->dev); 412 - pm_runtime_put_autosuspend(up->dev); 413 424 } 414 425 415 426 static void serial_omap_throttle(struct uart_port *port) ··· 415 430 struct uart_omap_port *up = to_uart_omap_port(port); 416 431 unsigned long flags; 417 432 418 - pm_runtime_get_sync(up->dev); 419 433 spin_lock_irqsave(&up->port.lock, flags); 420 434 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); 421 435 serial_out(up, UART_IER, up->ier); 422 436 spin_unlock_irqrestore(&up->port.lock, flags); 423 - pm_runtime_mark_last_busy(up->dev); 424 - pm_runtime_put_autosuspend(up->dev); 425 437 } 426 438 427 439 static void serial_omap_unthrottle(struct uart_port *port) ··· 426 444 struct uart_omap_port *up = to_uart_omap_port(port); 427 445 unsigned long flags; 428 446 429 - pm_runtime_get_sync(up->dev); 430 447 spin_lock_irqsave(&up->port.lock, flags); 431 448 up->ier |= UART_IER_RLSI | UART_IER_RDI; 432 449 serial_out(up, UART_IER, up->ier); 433 450 spin_unlock_irqrestore(&up->port.lock, flags); 434 - pm_runtime_mark_last_busy(up->dev); 435 - pm_runtime_put_autosuspend(up->dev); 436 451 } 437 452 438 453 static unsigned int check_modem_status(struct uart_omap_port *up) ··· 555 576 int max_count = 256; 556 577 557 578 spin_lock(&up->port.lock); 558 - pm_runtime_get_sync(up->dev); 559 579 560 580 do { 561 581 iir = serial_in(up, UART_IIR); ··· 594 616 595 617 tty_flip_buffer_push(&up->port.state->port); 596 618 597 - pm_runtime_mark_last_busy(up->dev); 598 - pm_runtime_put_autosuspend(up->dev); 599 619 up->port_activity = jiffies; 600 620 601 621 return ret; ··· 605 629 unsigned long flags; 606 630 unsigned int ret = 0; 607 631 608 - pm_runtime_get_sync(up->dev); 609 632 dev_dbg(up->port.dev, "serial_omap_tx_empty+%d\n", up->port.line); 610 633 spin_lock_irqsave(&up->port.lock, flags); 611 634 ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; 612 635 spin_unlock_irqrestore(&up->port.lock, flags); 613 - pm_runtime_mark_last_busy(up->dev); 614 - pm_runtime_put_autosuspend(up->dev); 636 + 615 637 return ret; 616 638 } 617 639 ··· 619 645 unsigned int status; 620 646 unsigned int ret = 0; 621 647 622 - pm_runtime_get_sync(up->dev); 623 648 status = check_modem_status(up); 624 - pm_runtime_mark_last_busy(up->dev); 625 - pm_runtime_put_autosuspend(up->dev); 626 649 627 650 dev_dbg(up->port.dev, "serial_omap_get_mctrl+%d\n", up->port.line); 628 651 ··· 651 680 if (mctrl & TIOCM_LOOP) 652 681 mcr |= UART_MCR_LOOP; 653 682 654 - pm_runtime_get_sync(up->dev); 655 683 old_mcr = serial_in(up, UART_MCR); 656 684 old_mcr &= ~(UART_MCR_LOOP | UART_MCR_OUT2 | UART_MCR_OUT1 | 657 685 UART_MCR_DTR | UART_MCR_RTS); ··· 666 696 up->efr &= ~UART_EFR_RTS; 667 697 serial_out(up, UART_EFR, up->efr); 668 698 serial_out(up, UART_LCR, lcr); 669 - 670 - pm_runtime_mark_last_busy(up->dev); 671 - pm_runtime_put_autosuspend(up->dev); 672 699 } 673 700 674 701 static void serial_omap_break_ctl(struct uart_port *port, int break_state) ··· 674 707 unsigned long flags; 675 708 676 709 dev_dbg(up->port.dev, "serial_omap_break_ctl+%d\n", up->port.line); 677 - pm_runtime_get_sync(up->dev); 678 710 spin_lock_irqsave(&up->port.lock, flags); 679 711 if (break_state == -1) 680 712 up->lcr |= UART_LCR_SBC; ··· 681 715 up->lcr &= ~UART_LCR_SBC; 682 716 serial_out(up, UART_LCR, up->lcr); 683 717 spin_unlock_irqrestore(&up->port.lock, flags); 684 - pm_runtime_mark_last_busy(up->dev); 685 - pm_runtime_put_autosuspend(up->dev); 686 718 } 687 719 688 720 static int serial_omap_startup(struct uart_port *port) ··· 752 788 753 789 serial_out(up, UART_OMAP_WER, up->wer); 754 790 755 - pm_runtime_mark_last_busy(up->dev); 756 - pm_runtime_put_autosuspend(up->dev); 757 791 up->port_activity = jiffies; 758 792 return 0; 759 793 } ··· 763 801 764 802 dev_dbg(up->port.dev, "serial_omap_shutdown+%d\n", up->port.line); 765 803 766 - pm_runtime_get_sync(up->dev); 767 804 /* 768 805 * Disable interrupts from this port 769 806 */ ··· 786 825 if (serial_in(up, UART_LSR) & UART_LSR_DR) 787 826 (void) serial_in(up, UART_RX); 788 827 789 - pm_runtime_mark_last_busy(up->dev); 790 - pm_runtime_put_autosuspend(up->dev); 828 + pm_runtime_put_sync(up->dev); 791 829 free_irq(up->port.irq, up); 792 830 dev_pm_clear_wake_irq(up->dev); 793 831 } ··· 856 896 * Ok, we're now changing the port state. Do it with 857 897 * interrupts disabled. 858 898 */ 859 - pm_runtime_get_sync(up->dev); 860 899 spin_lock_irqsave(&up->port.lock, flags); 861 900 862 901 /* ··· 1055 1096 serial_omap_set_mctrl(&up->port, up->port.mctrl); 1056 1097 1057 1098 spin_unlock_irqrestore(&up->port.lock, flags); 1058 - pm_runtime_mark_last_busy(up->dev); 1059 - pm_runtime_put_autosuspend(up->dev); 1060 1099 dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->port.line); 1061 1100 } 1062 1101 ··· 1067 1110 1068 1111 dev_dbg(up->port.dev, "serial_omap_pm+%d\n", up->port.line); 1069 1112 1070 - pm_runtime_get_sync(up->dev); 1071 1113 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); 1072 1114 efr = serial_in(up, UART_EFR); 1073 1115 serial_out(up, UART_EFR, efr | UART_EFR_ECB); ··· 1076 1120 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); 1077 1121 serial_out(up, UART_EFR, efr); 1078 1122 serial_out(up, UART_LCR, 0); 1079 - 1080 - pm_runtime_mark_last_busy(up->dev); 1081 - pm_runtime_put_autosuspend(up->dev); 1082 1123 } 1083 1124 1084 1125 static void serial_omap_release_port(struct uart_port *port) ··· 1155 1202 { 1156 1203 struct uart_omap_port *up = to_uart_omap_port(port); 1157 1204 1158 - pm_runtime_get_sync(up->dev); 1159 1205 wait_for_xmitr(up); 1160 1206 serial_out(up, UART_TX, ch); 1161 - pm_runtime_mark_last_busy(up->dev); 1162 - pm_runtime_put_autosuspend(up->dev); 1163 1207 } 1164 1208 1165 1209 static int serial_omap_poll_get_char(struct uart_port *port) ··· 1164 1214 struct uart_omap_port *up = to_uart_omap_port(port); 1165 1215 unsigned int status; 1166 1216 1167 - pm_runtime_get_sync(up->dev); 1168 1217 status = serial_in(up, UART_LSR); 1169 1218 if (!(status & UART_LSR_DR)) { 1170 1219 status = NO_POLL_CHAR; ··· 1173 1224 status = serial_in(up, UART_RX); 1174 1225 1175 1226 out: 1176 - pm_runtime_mark_last_busy(up->dev); 1177 - pm_runtime_put_autosuspend(up->dev); 1178 - 1179 1227 return status; 1180 1228 } 1181 1229 ··· 1255 1309 unsigned int ier; 1256 1310 int locked = 1; 1257 1311 1258 - pm_runtime_get_sync(up->dev); 1259 - 1260 1312 local_irq_save(flags); 1261 1313 if (up->port.sysrq) 1262 1314 locked = 0; ··· 1287 1343 if (up->msr_saved_flags) 1288 1344 check_modem_status(up); 1289 1345 1290 - pm_runtime_mark_last_busy(up->dev); 1291 - pm_runtime_put_autosuspend(up->dev); 1292 1346 if (locked) 1293 1347 spin_unlock(&up->port.lock); 1294 1348 local_irq_restore(flags); ··· 1345 1403 unsigned int mode; 1346 1404 int val; 1347 1405 1348 - pm_runtime_get_sync(up->dev); 1349 - 1350 1406 /* Disable interrupts from this port */ 1351 1407 mode = up->ier; 1352 1408 up->ier = 0; ··· 1377 1437 up->scr &= ~OMAP_UART_SCR_TX_EMPTY; 1378 1438 serial_out(up, UART_OMAP_SCR, up->scr); 1379 1439 } 1380 - 1381 - pm_runtime_mark_last_busy(up->dev); 1382 - pm_runtime_put_autosuspend(up->dev); 1383 1440 1384 1441 return 0; 1385 1442 } ··· 1674 1737 omap_up_info->autosuspend_timeout = -1; 1675 1738 1676 1739 device_init_wakeup(up->dev, true); 1677 - pm_runtime_use_autosuspend(&pdev->dev); 1678 - pm_runtime_set_autosuspend_delay(&pdev->dev, 1679 - omap_up_info->autosuspend_timeout); 1680 1740 1681 - pm_runtime_irq_safe(&pdev->dev); 1682 1741 pm_runtime_enable(&pdev->dev); 1683 1742 1684 1743 pm_runtime_get_sync(&pdev->dev); ··· 1688 1755 if (ret != 0) 1689 1756 goto err_add_port; 1690 1757 1691 - pm_runtime_mark_last_busy(up->dev); 1692 - pm_runtime_put_autosuspend(up->dev); 1693 1758 return 0; 1694 1759 1695 1760 err_add_port: 1696 - pm_runtime_dont_use_autosuspend(&pdev->dev); 1697 1761 pm_runtime_put_sync(&pdev->dev); 1698 1762 pm_runtime_disable(&pdev->dev); 1699 1763 cpu_latency_qos_remove_request(&up->pm_qos_request); ··· 1708 1778 1709 1779 uart_remove_one_port(&serial_omap_reg, &up->port); 1710 1780 1711 - pm_runtime_dont_use_autosuspend(up->dev); 1712 1781 pm_runtime_put_sync(up->dev); 1713 1782 pm_runtime_disable(up->dev); 1714 1783 cpu_latency_qos_remove_request(&up->pm_qos_request);