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

Commit 7265cb7f authored by Chandana Kishori Chiluveru's avatar Chandana Kishori Chiluveru Committed by Gerrit - the friendly Code Review server
Browse files

msm_geni_serial: Add ioctl for adding new IPC log in uart



Add ioctl for adding new IPC log buffer in UART driver.
If BT host driver observes a fault in BT transfers this ioctl
needs to be called. On this ioctl call uart driver will change
the logging to new file so that the issue scenario
could be preserved in old UART IPC log files.

Change-Id: I0da719159d20f60602922f482467178d038b443c
Signed-off-by: default avatarPrudhvi Yarlagadda <pyarlaga@codeaurora.org>
Signed-off-by: default avatarChandana Kishori Chiluveru <cchiluve@codeaurora.org>
parent f549b9e1
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -1576,7 +1576,8 @@ void geni_se_dump_dbg_regs(struct se_geni_rsc *rsc, void __iomem *base,
					geni_se_dev->bus_bw_noc)))
		return;
	if (unlikely(list_empty(&rsc->ab_list) || list_empty(&rsc->ib_list))) {
		GENI_SE_DBG(ipc, false, NULL, "%s: Clocks not on\n", __func__);
		GENI_SE_ERR(ipc, true, rsc->ctrl_dev, "%s: Clocks not on\n",
								__func__);
		return;
	}
	m_cmd0 = geni_read_reg(base, SE_GENI_M_CMD0);
@@ -1596,16 +1597,16 @@ void geni_se_dump_dbg_regs(struct se_geni_rsc *rsc, void __iomem *base,
	se_dma_tx_len = geni_read_reg(base, SE_DMA_TX_LEN);
	se_dma_tx_len_in = geni_read_reg(base, SE_DMA_TX_LEN_IN);

	GENI_SE_DBG(ipc, false, NULL,
	GENI_SE_ERR(ipc, true, rsc->ctrl_dev,
	"%s: m_cmd0:0x%x, m_irq_status:0x%x, s_irq_status:0x%x, geni_status:0x%x, geni_ios:0x%x\n",
	__func__, m_cmd0, m_irq_status, s_irq_status, geni_status, geni_ios);
	GENI_SE_DBG(ipc, false, NULL,
	GENI_SE_ERR(ipc, true, rsc->ctrl_dev,
	"dma_rx_irq:0x%x, dma_tx_irq:0x%x, rx_fifo_sts:0x%x, tx_fifo_sts:0x%x\n"
	, dma_rx_irq, dma_tx_irq, rx_fifo_status, tx_fifo_status);
	GENI_SE_DBG(ipc, false, NULL,
	GENI_SE_ERR(ipc, true, rsc->ctrl_dev,
	"se_dma_dbg:0x%x, m_cmd_ctrl:0x%x, dma_rxlen:0x%x, dma_rxlen_in:0x%x\n",
	se_dma_dbg, m_cmd_ctrl, se_dma_rx_len, se_dma_rx_len_in);
	GENI_SE_DBG(ipc, false, NULL,
	GENI_SE_ERR(ipc, true, rsc->ctrl_dev,
	"dma_txlen:0x%x, dma_txlen_in:0x%x\n", se_dma_tx_len, se_dma_tx_len_in);
}
EXPORT_SYMBOL(geni_se_dump_dbg_regs);
+22 −0
Original line number Diff line number Diff line
@@ -188,6 +188,7 @@ struct msm_geni_serial_port {
	void *ipc_log_pwr;
	void *ipc_log_misc;
	void *console_log;
	void *ipc_log_single;
	unsigned int cur_baud;
	int ioctl_count;
	int edge_count;
@@ -568,6 +569,7 @@ static int msm_geni_serial_ioctl(struct uart_port *uport, unsigned int cmd,
						unsigned long arg)
{
	int ret = -ENOIOCTLCMD;
	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);

	switch (cmd) {
	case TIOCPMGET: {
@@ -582,6 +584,16 @@ static int msm_geni_serial_ioctl(struct uart_port *uport, unsigned int cmd,
		ret = !pm_runtime_status_suspended(uport->dev);
		break;
	}
	case TIOCFAULT: {
		geni_se_dump_dbg_regs(&port->serial_rsc,
				uport->membase, port->ipc_log_misc);
		port->ipc_log_rx = port->ipc_log_single;
		port->ipc_log_tx = port->ipc_log_single;
		port->ipc_log_misc = port->ipc_log_single;
		port->ipc_log_pwr = port->ipc_log_single;
		ret = 0;
		break;
	}
	default:
		break;
	}
@@ -2888,6 +2900,16 @@ static void msm_geni_serial_debug_init(struct uart_port *uport, bool console)
			if (!msm_port->ipc_log_misc)
				dev_info(uport->dev, "Err in Misc IPC Log\n");
		}
		/* New set of UART IPC log for RX Invalid case */
		memset(name, 0, sizeof(name));
		if (!msm_port->ipc_log_single) {
			scnprintf(name, sizeof(name), "%s%s",
					dev_name(uport->dev), "_single");
			msm_port->ipc_log_single = ipc_log_context_create(
					IPC_LOG_MISC_PAGES, name, 0);
			if (!msm_port->ipc_log_single)
				dev_info(uport->dev, "Err in single IPC Log\n");
		}
	} else {
		memset(name, 0, sizeof(name));
		if (!msm_port->console_log) {
+1 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@
#define TIOCGPTLCK	_IOR('T', 0x39, int) /* Get Pty lock state */
#define TIOCGEXCL	_IOR('T', 0x40, int) /* Get exclusive mode state */
#define TIOCGPTPEER	_IO('T', 0x41) /* Safely open the slave */
#define TIOCFAULT	0x544C	/* Uart fault */
#define TIOCPMGET	0x544D	/* PM get */
#define TIOCPMPUT	0x544E	/* PM put */
#define TIOCPMACT	0x544F	/* PM is active */