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

Commit ba1ff543 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "serial: msm_geni_serial: Double clock-divider for kona based hw"

parents 00cf1fbf d235e1d9
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -119,9 +119,6 @@ struct geni_se_device {
	bool vote_for_bw;
};

/* Offset of QUPV3 Hardware Version Register */
#define QUPV3_HW_VER (0x4)

#define HW_VER_MAJOR_MASK GENMASK(31, 28)
#define HW_VER_MAJOR_SHFT 28
#define HW_VER_MINOR_MASK GENMASK(27, 16)
+10 −15
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@

#define DMA_RX_BUF_SIZE		(2048)
#define UART_CONSOLE_RX_WM	(2)
#define QUP_VER                 (0x20050000)

struct msm_geni_serial_ver_info {
	int hw_major_ver;
@@ -203,6 +204,11 @@ static atomic_t uart_line_id = ATOMIC_INIT(0);
static struct msm_geni_serial_port msm_geni_console_port;
static struct msm_geni_serial_port msm_geni_serial_ports[GENI_UART_NR_PORTS];

static int hw_version_info(void __iomem *base_addr)
{
	return geni_read_reg(base_addr, QUPV3_HW_VER);
}

static void msm_geni_serial_config_port(struct uart_port *uport, int cfg_flags)
{
	if (cfg_flags & UART_CONFIG_TYPE)
@@ -1821,7 +1827,6 @@ static void geni_serial_write_term_regs(struct uart_port *uport, u32 loopback,
						SE_UART_TX_STOP_BIT_LEN);
	geni_write_reg_nolog(s_clk_cfg, uport->membase, GENI_SER_M_CLK_CFG);
	geni_write_reg_nolog(s_clk_cfg, uport->membase, GENI_SER_S_CLK_CFG);

	geni_read_reg_nolog(uport->membase, GENI_SER_M_CLK_CFG);
}

@@ -1865,10 +1870,6 @@ static void msm_geni_serial_set_termios(struct uart_port *uport,
	unsigned long clk_rate;
	unsigned long flags;

	geni_write_reg_nolog(0x21, uport->membase, GENI_SER_M_CLK_CFG);
	geni_write_reg_nolog(0x21, uport->membase, GENI_SER_S_CLK_CFG);
	geni_read_reg_nolog(uport->membase, GENI_SER_M_CLK_CFG);

	if (!uart_console(uport)) {
		int ret = msm_geni_serial_power_on(uport);

@@ -1893,6 +1894,8 @@ static void msm_geni_serial_set_termios(struct uart_port *uport,
	if (clk_div <= 0)
		goto exit_set_termios;

	if (hw_version_info(uport->membase) >= QUP_VER)
		clk_div *= 2;
	uport->uartclk = clk_rate;
	clk_set_rate(port->serial_rsc.se_clk, clk_rate);
	ser_clk_cfg |= SER_CLK_EN;
@@ -2186,6 +2189,8 @@ msm_geni_serial_earlycon_setup(struct earlycon_device *dev,
		goto exit_geni_serial_earlyconsetup;
	}

	if (hw_version_info(uport->membase) >= QUP_VER)
		clk_div *= 2;
	s_clk_cfg |= SER_CLK_EN;
	s_clk_cfg |= (clk_div << CLK_DIV_SHFT);

@@ -2196,10 +2201,6 @@ msm_geni_serial_earlycon_setup(struct earlycon_device *dev,
	msm_geni_serial_poll_cancel_tx(uport);
	msm_geni_serial_abort_rx(uport);

	geni_write_reg_nolog(0x21, uport->membase, GENI_SER_M_CLK_CFG);
	geni_write_reg_nolog(0x21, uport->membase, GENI_SER_S_CLK_CFG);
	geni_read_reg_nolog(uport->membase, GENI_SER_M_CLK_CFG);

	se_get_packing_config(8, 1, false, &cfg0, &cfg1);
	geni_se_init(uport->membase, (DEF_FIFO_DEPTH_WORDS >> 1),
					(DEF_FIFO_DEPTH_WORDS - 2));
@@ -2620,12 +2621,6 @@ static int msm_geni_serial_probe(struct platform_device *pdev)
		pm_runtime_enable(&pdev->dev);
	}

	se_geni_clks_on(&dev_port->serial_rsc);
	geni_write_reg_nolog(0x21, uport->membase, GENI_SER_M_CLK_CFG);
	geni_write_reg_nolog(0x21, uport->membase, GENI_SER_S_CLK_CFG);
	geni_read_reg_nolog(uport->membase, GENI_SER_M_CLK_CFG);
	se_geni_clks_off(&dev_port->serial_rsc);

	dev_info(&pdev->dev, "Serial port%d added.FifoSize %d is_console%d\n",
				line, uport->fifosize, is_console);
	device_create_file(uport->dev, &dev_attr_loopback);
+1 −0
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ struct se_geni_rsc {
#define SE_HW_PARAM_1			(0xE28)
#define SE_DMA_GENERAL_CFG		(0xE30)
#define SE_DMA_DEBUG_REG0		(0xE40)
#define QUPV3_HW_VER			(0x4)

/* GENI_OUTPUT_CTRL fields */
#define DEFAULT_IO_OUTPUT_CTRL_MSK	(GENMASK(6, 0))