Loading drivers/tty/serial/msm_geni_serial.c +82 −29 Original line number Original line Diff line number Diff line Loading @@ -115,7 +115,7 @@ #define WAIT_XFER_MIN_TIMEOUT_US (9000) #define WAIT_XFER_MIN_TIMEOUT_US (9000) #define IPC_LOG_PWR_PAGES (6) #define IPC_LOG_PWR_PAGES (6) #define IPC_LOG_MISC_PAGES (10) #define IPC_LOG_MISC_PAGES (10) #define IPC_LOG_TX_RX_PAGES (8) #define IPC_LOG_TX_RX_PAGES (10) #define DATA_BYTES_PER_LINE (32) #define DATA_BYTES_PER_LINE (32) #define IPC_LOG_MSG(ctx, x...) do { \ #define IPC_LOG_MSG(ctx, x...) do { \ Loading Loading @@ -895,6 +895,8 @@ static int msm_geni_serial_prep_dma_tx(struct uart_port *uport) struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); struct circ_buf *xmit = &uport->state->xmit; struct circ_buf *xmit = &uport->state->xmit; unsigned int xmit_size; unsigned int xmit_size; u32 geni_status; bool done = false; int ret = 0; int ret = 0; xmit_size = uart_circ_chars_pending(xmit); xmit_size = uart_circ_chars_pending(xmit); Loading @@ -914,25 +916,39 @@ static int msm_geni_serial_prep_dma_tx(struct uart_port *uport) &xmit->buf[xmit->tail], xmit_size, &msm_port->tx_dma); &xmit->buf[xmit->tail], xmit_size, &msm_port->tx_dma); if (!ret) { if (!ret) { msm_port->xmit_size = xmit_size; msm_port->xmit_size = xmit_size; } else { return ret; } IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: TX DMA map Fail %d\n", __func__, ret); geni_write_reg_nolog(0, uport->membase, geni_write_reg_nolog(0, uport->membase, SE_UART_TX_TRANS_LEN); SE_UART_TX_TRANS_LEN); geni_cancel_m_cmd(uport->membase); geni_cancel_m_cmd(uport->membase); if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, M_CMD_CANCEL_EN, true)) { M_CMD_CANCEL_EN, true)) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: TX Cancel Fail 0x%x\n", __func__, geni_status); geni_abort_m_cmd(uport->membase); geni_abort_m_cmd(uport->membase); msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, done = msm_geni_serial_poll_bit(uport, M_CMD_ABORT_EN, true); SE_GENI_M_IRQ_STATUS, M_CMD_ABORT_EN, true); if (!done) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: TX Abort fail 0x%x\n", __func__, geni_status); } geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, SE_GENI_M_IRQ_CLEAR); SE_GENI_M_IRQ_CLEAR); } } geni_write_reg_nolog(M_CMD_CANCEL_EN, uport->membase, geni_write_reg_nolog(M_CMD_CANCEL_EN, uport->membase, SE_GENI_M_IRQ_CLEAR); SE_GENI_M_IRQ_CLEAR); IPC_LOG_MSG(msm_port->ipc_log_tx, "%s: DMA map failure %d\n", __func__, ret); msm_port->tx_dma = (dma_addr_t)NULL; msm_port->tx_dma = (dma_addr_t)NULL; msm_port->xmit_size = 0; msm_port->xmit_size = 0; } return ret; return ret; } } Loading Loading @@ -1019,6 +1035,7 @@ static void stop_tx_sequencer(struct uart_port *uport) unsigned int geni_m_irq_en; unsigned int geni_m_irq_en; unsigned int geni_status; unsigned int geni_status; struct msm_geni_serial_port *port = GET_DEV_PORT(uport); struct msm_geni_serial_port *port = GET_DEV_PORT(uport); bool done = false; geni_m_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_EN); geni_m_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_EN); geni_m_irq_en &= ~M_CMD_DONE_EN; geni_m_irq_en &= ~M_CMD_DONE_EN; Loading @@ -1042,12 +1059,26 @@ static void stop_tx_sequencer(struct uart_port *uport) if (!(geni_status & M_GENI_CMD_ACTIVE)) if (!(geni_status & M_GENI_CMD_ACTIVE)) return; return; IPC_LOG_MSG(port->ipc_log_misc, "%s: Start GENI: 0x%x\n", __func__, geni_status); geni_cancel_m_cmd(uport->membase); geni_cancel_m_cmd(uport->membase); if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, M_CMD_CANCEL_EN, true)) { M_CMD_CANCEL_EN, true)) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: TX Cancel Fail 0x%x\n", __func__, geni_status); geni_abort_m_cmd(uport->membase); geni_abort_m_cmd(uport->membase); msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, done = msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, M_CMD_ABORT_EN, true); M_CMD_ABORT_EN, true); if (!done) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s TX Abort fail 0x%x\n", __func__, geni_status); } geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, SE_GENI_M_IRQ_CLEAR); SE_GENI_M_IRQ_CLEAR); } } Loading @@ -1064,7 +1095,9 @@ static void stop_tx_sequencer(struct uart_port *uport) IPC_LOG_MSG(port->ipc_log_misc, "%s:Removing vote\n", __func__); IPC_LOG_MSG(port->ipc_log_misc, "%s:Removing vote\n", __func__); msm_geni_serial_power_off(uport); msm_geni_serial_power_off(uport); } } IPC_LOG_MSG(port->ipc_log_misc, "%s:\n", __func__); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: End GENI:0x%x\n", __func__, geni_status); } } static void msm_geni_serial_stop_tx(struct uart_port *uport) static void msm_geni_serial_stop_tx(struct uart_port *uport) Loading Loading @@ -1092,6 +1125,9 @@ static void start_rx_sequencer(struct uart_port *uport) return; return; geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: 0x%x\n", __func__, geni_status); if (geni_status & S_GENI_CMD_ACTIVE) { if (geni_status & S_GENI_CMD_ACTIVE) { if (port->xfer_mode == SE_DMA) { if (port->xfer_mode == SE_DMA) { IPC_LOG_MSG(port->ipc_log_misc, IPC_LOG_MSG(port->ipc_log_misc, Loading Loading @@ -1185,14 +1221,14 @@ static void msm_geni_serial_set_manual_flow(bool enable, * doing a stop_rx. * doing a stop_rx. */ */ mb(); mb(); IPC_LOG_MSG(port->ipc_log_pwr, IPC_LOG_MSG(port->ipc_log_misc, "%s: Manual Flow Enabled, HW Flow OFF\n", __func__); "%s: Manual Flow Enabled, HW Flow OFF\n", __func__); } else { } else { geni_write_reg_nolog(0, port->uport.membase, geni_write_reg_nolog(0, port->uport.membase, SE_UART_MANUAL_RFR); SE_UART_MANUAL_RFR); /* Ensure that the manual flow off writes go through */ /* Ensure that the manual flow off writes go through */ mb(); mb(); IPC_LOG_MSG(port->ipc_log_pwr, IPC_LOG_MSG(port->ipc_log_misc, "%s: Manual Flow Disabled, HW Flow ON\n", __func__); "%s: Manual Flow Disabled, HW Flow ON\n", __func__); } } } } Loading @@ -1208,7 +1244,6 @@ static void stop_rx_sequencer(struct uart_port *uport) u32 dma_rx_irq_stat; u32 dma_rx_irq_stat; u32 DMA_RX_CANCEL_BIT; u32 DMA_RX_CANCEL_BIT; IPC_LOG_MSG(port->ipc_log_misc, "%s\n", __func__); if (port->xfer_mode == FIFO_MODE) { if (port->xfer_mode == FIFO_MODE) { geni_s_irq_en = geni_read_reg_nolog(uport->membase, geni_s_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_S_IRQ_EN); SE_GENI_S_IRQ_EN); Loading Loading @@ -1245,6 +1280,8 @@ static void stop_rx_sequencer(struct uart_port *uport) uport->membase, SE_DMA_RX_IRQ_CLR); uport->membase, SE_DMA_RX_IRQ_CLR); } } IPC_LOG_MSG(port->ipc_log_misc, "%s: Start 0x%x\n", __func__, geni_status); geni_cancel_s_cmd(uport->membase); geni_cancel_s_cmd(uport->membase); /* /* * Ensure that the cancel goes through before polling for the * Ensure that the cancel goes through before polling for the Loading Loading @@ -1316,7 +1353,8 @@ static void stop_rx_sequencer(struct uart_port *uport) msm_geni_serial_rx_fsm_rst(uport); msm_geni_serial_rx_fsm_rst(uport); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: 0x%x\n", __func__, geni_status); IPC_LOG_MSG(port->ipc_log_misc, "%s: End 0x%x\n", __func__, geni_status); } } static void msm_geni_serial_stop_rx(struct uart_port *uport) static void msm_geni_serial_stop_rx(struct uart_port *uport) Loading Loading @@ -1501,8 +1539,11 @@ static int msm_geni_serial_handle_dma_rx(struct uart_port *uport, bool drop_rx) geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); /* Possible stop rx is called */ /* Possible stop rx is called */ if (!(geni_status & S_GENI_CMD_ACTIVE)) if (!(geni_status & S_GENI_CMD_ACTIVE)) { IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: GENI: 0x%x\n", __func__, geni_status); return 0; return 0; } if (unlikely(!msm_port->rx_buf)) { if (unlikely(!msm_port->rx_buf)) { IPC_LOG_MSG(msm_port->ipc_log_rx, "%s: NULL Rx_buf\n", IPC_LOG_MSG(msm_port->ipc_log_rx, "%s: NULL Rx_buf\n", Loading Loading @@ -1771,6 +1812,7 @@ static void msm_geni_serial_shutdown(struct uart_port *uport) unsigned long flags; unsigned long flags; int ret; int ret; IPC_LOG_MSG(msm_port->ipc_log_misc, "%s:\n", __func__); /* Stop the console before stopping the current tx */ /* Stop the console before stopping the current tx */ if (uart_console(uport)) { if (uart_console(uport)) { console_stop(uport->cons); console_stop(uport->cons); Loading Loading @@ -1811,7 +1853,7 @@ static void msm_geni_serial_shutdown(struct uart_port *uport) free_irq(msm_port->wakeup_irq, uport); free_irq(msm_port->wakeup_irq, uport); } } } } IPC_LOG_MSG(msm_port->ipc_log_misc, "%s\n", __func__); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: End\n", __func__); } } static int msm_geni_serial_port_setup(struct uart_port *uport) static int msm_geni_serial_port_setup(struct uart_port *uport) Loading Loading @@ -1905,6 +1947,7 @@ static int msm_geni_serial_startup(struct uart_port *uport) int ret = 0; int ret = 0; struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s:\n", __func__); scnprintf(msm_port->name, sizeof(msm_port->name), "msm_serial_geni%d", scnprintf(msm_port->name, sizeof(msm_port->name), "msm_serial_geni%d", uport->line); uport->line); Loading @@ -1921,9 +1964,14 @@ static int msm_geni_serial_startup(struct uart_port *uport) get_tx_fifo_size(msm_port); get_tx_fifo_size(msm_port); if (!msm_port->port_setup) { if (!msm_port->port_setup) { if (msm_geni_serial_port_setup(uport)) ret = msm_geni_serial_port_setup(uport); if (ret) { IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: port_setup Fail ret:%d\n", __func__, ret); goto exit_startup; goto exit_startup; } } } /* /* * Ensure that all the port configuration writes complete * Ensure that all the port configuration writes complete Loading Loading @@ -1955,11 +2003,11 @@ static int msm_geni_serial_startup(struct uart_port *uport) goto exit_startup; goto exit_startup; } } } } IPC_LOG_MSG(msm_port->ipc_log_misc, "%s\n", __func__); exit_startup: exit_startup: if (likely(!uart_console(uport))) if (likely(!uart_console(uport))) msm_geni_serial_power_off(&msm_port->uport); msm_geni_serial_power_off(&msm_port->uport); msm_port->startup_in_progress = false; msm_port->startup_in_progress = false; IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: ret:%d\n", __func__, ret); return ret; return ret; } } Loading Loading @@ -2891,9 +2939,14 @@ static int msm_geni_serial_probe(struct platform_device *pdev) ret = msm_geni_serial_get_ver_info(uport); ret = msm_geni_serial_get_ver_info(uport); if (ret) if (ret) goto exit_geni_serial_probe; goto exit_geni_serial_probe; IPC_LOG_MSG(dev_port->ipc_log_misc, "%s: port:%s irq:%d\n", __func__, uport->name, uport->irq); return uart_add_one_port(drv, uport); return uart_add_one_port(drv, uport); exit_geni_serial_probe: exit_geni_serial_probe: IPC_LOG_MSG(dev_port->ipc_log_misc, "%s: fail port:%s ret:%d\n", __func__, uport->name, ret); return ret; return ret; } } Loading Loading
drivers/tty/serial/msm_geni_serial.c +82 −29 Original line number Original line Diff line number Diff line Loading @@ -115,7 +115,7 @@ #define WAIT_XFER_MIN_TIMEOUT_US (9000) #define WAIT_XFER_MIN_TIMEOUT_US (9000) #define IPC_LOG_PWR_PAGES (6) #define IPC_LOG_PWR_PAGES (6) #define IPC_LOG_MISC_PAGES (10) #define IPC_LOG_MISC_PAGES (10) #define IPC_LOG_TX_RX_PAGES (8) #define IPC_LOG_TX_RX_PAGES (10) #define DATA_BYTES_PER_LINE (32) #define DATA_BYTES_PER_LINE (32) #define IPC_LOG_MSG(ctx, x...) do { \ #define IPC_LOG_MSG(ctx, x...) do { \ Loading Loading @@ -895,6 +895,8 @@ static int msm_geni_serial_prep_dma_tx(struct uart_port *uport) struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); struct circ_buf *xmit = &uport->state->xmit; struct circ_buf *xmit = &uport->state->xmit; unsigned int xmit_size; unsigned int xmit_size; u32 geni_status; bool done = false; int ret = 0; int ret = 0; xmit_size = uart_circ_chars_pending(xmit); xmit_size = uart_circ_chars_pending(xmit); Loading @@ -914,25 +916,39 @@ static int msm_geni_serial_prep_dma_tx(struct uart_port *uport) &xmit->buf[xmit->tail], xmit_size, &msm_port->tx_dma); &xmit->buf[xmit->tail], xmit_size, &msm_port->tx_dma); if (!ret) { if (!ret) { msm_port->xmit_size = xmit_size; msm_port->xmit_size = xmit_size; } else { return ret; } IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: TX DMA map Fail %d\n", __func__, ret); geni_write_reg_nolog(0, uport->membase, geni_write_reg_nolog(0, uport->membase, SE_UART_TX_TRANS_LEN); SE_UART_TX_TRANS_LEN); geni_cancel_m_cmd(uport->membase); geni_cancel_m_cmd(uport->membase); if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, M_CMD_CANCEL_EN, true)) { M_CMD_CANCEL_EN, true)) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: TX Cancel Fail 0x%x\n", __func__, geni_status); geni_abort_m_cmd(uport->membase); geni_abort_m_cmd(uport->membase); msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, done = msm_geni_serial_poll_bit(uport, M_CMD_ABORT_EN, true); SE_GENI_M_IRQ_STATUS, M_CMD_ABORT_EN, true); if (!done) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: TX Abort fail 0x%x\n", __func__, geni_status); } geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, SE_GENI_M_IRQ_CLEAR); SE_GENI_M_IRQ_CLEAR); } } geni_write_reg_nolog(M_CMD_CANCEL_EN, uport->membase, geni_write_reg_nolog(M_CMD_CANCEL_EN, uport->membase, SE_GENI_M_IRQ_CLEAR); SE_GENI_M_IRQ_CLEAR); IPC_LOG_MSG(msm_port->ipc_log_tx, "%s: DMA map failure %d\n", __func__, ret); msm_port->tx_dma = (dma_addr_t)NULL; msm_port->tx_dma = (dma_addr_t)NULL; msm_port->xmit_size = 0; msm_port->xmit_size = 0; } return ret; return ret; } } Loading Loading @@ -1019,6 +1035,7 @@ static void stop_tx_sequencer(struct uart_port *uport) unsigned int geni_m_irq_en; unsigned int geni_m_irq_en; unsigned int geni_status; unsigned int geni_status; struct msm_geni_serial_port *port = GET_DEV_PORT(uport); struct msm_geni_serial_port *port = GET_DEV_PORT(uport); bool done = false; geni_m_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_EN); geni_m_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_EN); geni_m_irq_en &= ~M_CMD_DONE_EN; geni_m_irq_en &= ~M_CMD_DONE_EN; Loading @@ -1042,12 +1059,26 @@ static void stop_tx_sequencer(struct uart_port *uport) if (!(geni_status & M_GENI_CMD_ACTIVE)) if (!(geni_status & M_GENI_CMD_ACTIVE)) return; return; IPC_LOG_MSG(port->ipc_log_misc, "%s: Start GENI: 0x%x\n", __func__, geni_status); geni_cancel_m_cmd(uport->membase); geni_cancel_m_cmd(uport->membase); if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, M_CMD_CANCEL_EN, true)) { M_CMD_CANCEL_EN, true)) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: TX Cancel Fail 0x%x\n", __func__, geni_status); geni_abort_m_cmd(uport->membase); geni_abort_m_cmd(uport->membase); msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, done = msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS, M_CMD_ABORT_EN, true); M_CMD_ABORT_EN, true); if (!done) { geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s TX Abort fail 0x%x\n", __func__, geni_status); } geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase, SE_GENI_M_IRQ_CLEAR); SE_GENI_M_IRQ_CLEAR); } } Loading @@ -1064,7 +1095,9 @@ static void stop_tx_sequencer(struct uart_port *uport) IPC_LOG_MSG(port->ipc_log_misc, "%s:Removing vote\n", __func__); IPC_LOG_MSG(port->ipc_log_misc, "%s:Removing vote\n", __func__); msm_geni_serial_power_off(uport); msm_geni_serial_power_off(uport); } } IPC_LOG_MSG(port->ipc_log_misc, "%s:\n", __func__); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: End GENI:0x%x\n", __func__, geni_status); } } static void msm_geni_serial_stop_tx(struct uart_port *uport) static void msm_geni_serial_stop_tx(struct uart_port *uport) Loading Loading @@ -1092,6 +1125,9 @@ static void start_rx_sequencer(struct uart_port *uport) return; return; geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: 0x%x\n", __func__, geni_status); if (geni_status & S_GENI_CMD_ACTIVE) { if (geni_status & S_GENI_CMD_ACTIVE) { if (port->xfer_mode == SE_DMA) { if (port->xfer_mode == SE_DMA) { IPC_LOG_MSG(port->ipc_log_misc, IPC_LOG_MSG(port->ipc_log_misc, Loading Loading @@ -1185,14 +1221,14 @@ static void msm_geni_serial_set_manual_flow(bool enable, * doing a stop_rx. * doing a stop_rx. */ */ mb(); mb(); IPC_LOG_MSG(port->ipc_log_pwr, IPC_LOG_MSG(port->ipc_log_misc, "%s: Manual Flow Enabled, HW Flow OFF\n", __func__); "%s: Manual Flow Enabled, HW Flow OFF\n", __func__); } else { } else { geni_write_reg_nolog(0, port->uport.membase, geni_write_reg_nolog(0, port->uport.membase, SE_UART_MANUAL_RFR); SE_UART_MANUAL_RFR); /* Ensure that the manual flow off writes go through */ /* Ensure that the manual flow off writes go through */ mb(); mb(); IPC_LOG_MSG(port->ipc_log_pwr, IPC_LOG_MSG(port->ipc_log_misc, "%s: Manual Flow Disabled, HW Flow ON\n", __func__); "%s: Manual Flow Disabled, HW Flow ON\n", __func__); } } } } Loading @@ -1208,7 +1244,6 @@ static void stop_rx_sequencer(struct uart_port *uport) u32 dma_rx_irq_stat; u32 dma_rx_irq_stat; u32 DMA_RX_CANCEL_BIT; u32 DMA_RX_CANCEL_BIT; IPC_LOG_MSG(port->ipc_log_misc, "%s\n", __func__); if (port->xfer_mode == FIFO_MODE) { if (port->xfer_mode == FIFO_MODE) { geni_s_irq_en = geni_read_reg_nolog(uport->membase, geni_s_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_S_IRQ_EN); SE_GENI_S_IRQ_EN); Loading Loading @@ -1245,6 +1280,8 @@ static void stop_rx_sequencer(struct uart_port *uport) uport->membase, SE_DMA_RX_IRQ_CLR); uport->membase, SE_DMA_RX_IRQ_CLR); } } IPC_LOG_MSG(port->ipc_log_misc, "%s: Start 0x%x\n", __func__, geni_status); geni_cancel_s_cmd(uport->membase); geni_cancel_s_cmd(uport->membase); /* /* * Ensure that the cancel goes through before polling for the * Ensure that the cancel goes through before polling for the Loading Loading @@ -1316,7 +1353,8 @@ static void stop_rx_sequencer(struct uart_port *uport) msm_geni_serial_rx_fsm_rst(uport); msm_geni_serial_rx_fsm_rst(uport); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); IPC_LOG_MSG(port->ipc_log_misc, "%s: 0x%x\n", __func__, geni_status); IPC_LOG_MSG(port->ipc_log_misc, "%s: End 0x%x\n", __func__, geni_status); } } static void msm_geni_serial_stop_rx(struct uart_port *uport) static void msm_geni_serial_stop_rx(struct uart_port *uport) Loading Loading @@ -1501,8 +1539,11 @@ static int msm_geni_serial_handle_dma_rx(struct uart_port *uport, bool drop_rx) geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS); /* Possible stop rx is called */ /* Possible stop rx is called */ if (!(geni_status & S_GENI_CMD_ACTIVE)) if (!(geni_status & S_GENI_CMD_ACTIVE)) { IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: GENI: 0x%x\n", __func__, geni_status); return 0; return 0; } if (unlikely(!msm_port->rx_buf)) { if (unlikely(!msm_port->rx_buf)) { IPC_LOG_MSG(msm_port->ipc_log_rx, "%s: NULL Rx_buf\n", IPC_LOG_MSG(msm_port->ipc_log_rx, "%s: NULL Rx_buf\n", Loading Loading @@ -1771,6 +1812,7 @@ static void msm_geni_serial_shutdown(struct uart_port *uport) unsigned long flags; unsigned long flags; int ret; int ret; IPC_LOG_MSG(msm_port->ipc_log_misc, "%s:\n", __func__); /* Stop the console before stopping the current tx */ /* Stop the console before stopping the current tx */ if (uart_console(uport)) { if (uart_console(uport)) { console_stop(uport->cons); console_stop(uport->cons); Loading Loading @@ -1811,7 +1853,7 @@ static void msm_geni_serial_shutdown(struct uart_port *uport) free_irq(msm_port->wakeup_irq, uport); free_irq(msm_port->wakeup_irq, uport); } } } } IPC_LOG_MSG(msm_port->ipc_log_misc, "%s\n", __func__); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: End\n", __func__); } } static int msm_geni_serial_port_setup(struct uart_port *uport) static int msm_geni_serial_port_setup(struct uart_port *uport) Loading Loading @@ -1905,6 +1947,7 @@ static int msm_geni_serial_startup(struct uart_port *uport) int ret = 0; int ret = 0; struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); IPC_LOG_MSG(msm_port->ipc_log_misc, "%s:\n", __func__); scnprintf(msm_port->name, sizeof(msm_port->name), "msm_serial_geni%d", scnprintf(msm_port->name, sizeof(msm_port->name), "msm_serial_geni%d", uport->line); uport->line); Loading @@ -1921,9 +1964,14 @@ static int msm_geni_serial_startup(struct uart_port *uport) get_tx_fifo_size(msm_port); get_tx_fifo_size(msm_port); if (!msm_port->port_setup) { if (!msm_port->port_setup) { if (msm_geni_serial_port_setup(uport)) ret = msm_geni_serial_port_setup(uport); if (ret) { IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: port_setup Fail ret:%d\n", __func__, ret); goto exit_startup; goto exit_startup; } } } /* /* * Ensure that all the port configuration writes complete * Ensure that all the port configuration writes complete Loading Loading @@ -1955,11 +2003,11 @@ static int msm_geni_serial_startup(struct uart_port *uport) goto exit_startup; goto exit_startup; } } } } IPC_LOG_MSG(msm_port->ipc_log_misc, "%s\n", __func__); exit_startup: exit_startup: if (likely(!uart_console(uport))) if (likely(!uart_console(uport))) msm_geni_serial_power_off(&msm_port->uport); msm_geni_serial_power_off(&msm_port->uport); msm_port->startup_in_progress = false; msm_port->startup_in_progress = false; IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: ret:%d\n", __func__, ret); return ret; return ret; } } Loading Loading @@ -2891,9 +2939,14 @@ static int msm_geni_serial_probe(struct platform_device *pdev) ret = msm_geni_serial_get_ver_info(uport); ret = msm_geni_serial_get_ver_info(uport); if (ret) if (ret) goto exit_geni_serial_probe; goto exit_geni_serial_probe; IPC_LOG_MSG(dev_port->ipc_log_misc, "%s: port:%s irq:%d\n", __func__, uport->name, uport->irq); return uart_add_one_port(drv, uport); return uart_add_one_port(drv, uport); exit_geni_serial_probe: exit_geni_serial_probe: IPC_LOG_MSG(dev_port->ipc_log_misc, "%s: fail port:%s ret:%d\n", __func__, uport->name, ret); return ret; return ret; } } Loading