Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 19302777 authored by Mukesh Kumar Savaliya's avatar Mukesh Kumar Savaliya
Browse files

serial: msm_geni_serial: Control RFR manually when RX aborts



This is to control RFR manually and set it to LOW i.e. FLOW ON when
cancel Fails for some reason. That in turn forces abort operation
which sets RFR to HIGH as part of force default configuration through
FW.

RFR HIGH prevents peer device to send any data to UART, this should
prevent such scenarios post cancel fail.

Change-Id: If50782e94222f08fca08b171844c797506530441
Signed-off-by: default avatarMukesh Kumar Savaliya <msavaliy@codeaurora.org>
parent eabcd830
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -197,6 +197,8 @@ static void msm_geni_serial_stop_rx(struct uart_port *uport);
static int msm_geni_serial_runtime_resume(struct device *dev);
static int msm_geni_serial_runtime_suspend(struct device *dev);
static int msm_geni_serial_get_ver_info(struct uart_port *uport);
static void msm_geni_serial_set_manual_flow(bool enable,
				struct msm_geni_serial_port *port);
static int uart_line_id;

#define GET_DEV_PORT(uport) \
@@ -623,6 +625,7 @@ static void msm_geni_serial_poll_cancel_tx(struct uart_port *uport)
static void msm_geni_serial_abort_rx(struct uart_port *uport)
{
	unsigned int irq_clear = S_CMD_DONE_EN;
	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);

	geni_abort_s_cmd(uport->membase);
	/* Ensure this goes through before polling. */
@@ -631,6 +634,8 @@ static void msm_geni_serial_abort_rx(struct uart_port *uport)
	msm_geni_serial_poll_bit(uport, SE_GENI_S_CMD_CTRL_REG,
					S_GENI_CMD_ABORT, false);
	geni_write_reg_nolog(irq_clear, uport->membase, SE_GENI_S_IRQ_CLEAR);
	/* FORCE_DEFAULT makes RFR default high, hence set manually Low */
	msm_geni_serial_set_manual_flow(true, port);
	geni_write_reg(FORCE_DEFAULT, uport->membase, GENI_FORCE_DEFAULT_REG);
}