Commit fc9ceb50 authored by Jiri Slaby (SUSE)'s avatar Jiri Slaby (SUSE) Committed by Greg Kroah-Hartman
Browse files

serial: 8250: sanitize uart_port::serial_{in,out}() types



uart_port::{serial_in,serial_out} (and plat_serial8250_port::* likewise)
historically use:
* 'unsigned int' for 32-bit register values in reads and writes, and
* 'int' for offsets.

Make them sane such that:
* 'u32' is used for register values, and
* 'unsigned int' is used for offsets.

While at it, name hooks' parameters, so it is clear what is what.

Signed-off-by: default avatar"Jiri Slaby (SUSE)" <jirislaby@kernel.org>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Paul Cercueil <paul@crapouillou.net>
Cc: Vladimir Zapolskiy <vz@mleia.com>
Cc: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20250611100319.186924-9-jirislaby@kernel.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f1180ca3
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -54,9 +54,10 @@ static int legacy_serial_console = -1;
static const upf_t legacy_port_flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
	UPF_SHARE_IRQ | UPF_FIXED_PORT;

static unsigned int tsi_serial_in(struct uart_port *p, int offset)
static u32 tsi_serial_in(struct uart_port *p, unsigned int offset)
{
	unsigned int tmp;
	u32 tmp;

	offset = offset << p->regshift;
	if (offset == UART_IIR) {
		tmp = readl(p->membase + (UART_IIR & ~3));
@@ -65,7 +66,7 @@ static unsigned int tsi_serial_in(struct uart_port *p, int offset)
		return readb(p->membase + offset);
}

static void tsi_serial_out(struct uart_port *p, int offset, int value)
static void tsi_serial_out(struct uart_port *p, unsigned int offset, u32 value)
{
	offset = offset << p->regshift;
	if (!((offset == UART_IER) && (value & UART_IER_UUE)))
+17 −17
Original line number Diff line number Diff line
@@ -67,8 +67,8 @@ struct dw8250_data {
	struct dw8250_port_data	data;
	const struct dw8250_platform_data *pdata;

	int			msr_mask_on;
	int			msr_mask_off;
	u32			msr_mask_on;
	u32			msr_mask_off;
	struct clk		*clk;
	struct clk		*pclk;
	struct notifier_block	clk_notifier;
@@ -94,7 +94,7 @@ static inline struct dw8250_data *work_to_dw8250_data(struct work_struct *work)
	return container_of(work, struct dw8250_data, clk_work);
}

static inline int dw8250_modify_msr(struct uart_port *p, int offset, int value)
static inline u32 dw8250_modify_msr(struct uart_port *p, unsigned int offset, u32 value)
{
	struct dw8250_data *d = to_dw8250_data(p->private_data);

@@ -145,7 +145,7 @@ static void dw8250_force_idle(struct uart_port *p)
 * routine. Hence, it must not call serial_port_out() or serial_out()
 * against the modified registers here, i.e. LCR.
 */
static void dw8250_check_lcr(struct uart_port *p, int offset, int value)
static void dw8250_check_lcr(struct uart_port *p, unsigned int offset, u32 value)
{
	struct dw8250_data *d = to_dw8250_data(p->private_data);
	void __iomem *addr = p->membase + (offset << p->regshift);
@@ -156,7 +156,7 @@ static void dw8250_check_lcr(struct uart_port *p, int offset, int value)

	/* Make sure LCR write wasn't ignored */
	while (tries--) {
		unsigned int lcr = serial_port_in(p, offset);
		u32 lcr = serial_port_in(p, offset);

		if ((value & ~UART_LCR_SPAR) == (lcr & ~UART_LCR_SPAR))
			return;
@@ -205,13 +205,13 @@ static void dw8250_tx_wait_empty(struct uart_port *p)
	}
}

static void dw8250_serial_out(struct uart_port *p, int offset, int value)
static void dw8250_serial_out(struct uart_port *p, unsigned int offset, u32 value)
{
	writeb(value, p->membase + (offset << p->regshift));
	dw8250_check_lcr(p, offset, value);
}

static void dw8250_serial_out38x(struct uart_port *p, int offset, int value)
static void dw8250_serial_out38x(struct uart_port *p, unsigned int offset, u32 value)
{
	/* Allow the TX to drain before we reconfigure */
	if (offset == UART_LCR)
@@ -220,22 +220,22 @@ static void dw8250_serial_out38x(struct uart_port *p, int offset, int value)
	dw8250_serial_out(p, offset, value);
}

static unsigned int dw8250_serial_in(struct uart_port *p, int offset)
static u32 dw8250_serial_in(struct uart_port *p, unsigned int offset)
{
	unsigned int value = readb(p->membase + (offset << p->regshift));
	u32 value = readb(p->membase + (offset << p->regshift));

	return dw8250_modify_msr(p, offset, value);
}

#ifdef CONFIG_64BIT
static unsigned int dw8250_serial_inq(struct uart_port *p, int offset)
static u32 dw8250_serial_inq(struct uart_port *p, unsigned int offset)
{
	u8 value = __raw_readq(p->membase + (offset << p->regshift));

	return dw8250_modify_msr(p, offset, value);
}

static void dw8250_serial_outq(struct uart_port *p, int offset, int value)
static void dw8250_serial_outq(struct uart_port *p, unsigned int offset, u32 value)
{
	value &= 0xff;
	__raw_writeq(value, p->membase + (offset << p->regshift));
@@ -246,28 +246,28 @@ static void dw8250_serial_outq(struct uart_port *p, int offset, int value)
}
#endif /* CONFIG_64BIT */

static void dw8250_serial_out32(struct uart_port *p, int offset, int value)
static void dw8250_serial_out32(struct uart_port *p, unsigned int offset, u32 value)
{
	writel(value, p->membase + (offset << p->regshift));
	dw8250_check_lcr(p, offset, value);
}

static unsigned int dw8250_serial_in32(struct uart_port *p, int offset)
static u32 dw8250_serial_in32(struct uart_port *p, unsigned int offset)
{
	unsigned int value = readl(p->membase + (offset << p->regshift));
	u32 value = readl(p->membase + (offset << p->regshift));

	return dw8250_modify_msr(p, offset, value);
}

static void dw8250_serial_out32be(struct uart_port *p, int offset, int value)
static void dw8250_serial_out32be(struct uart_port *p, unsigned int offset, u32 value)
{
	iowrite32be(value, p->membase + (offset << p->regshift));
	dw8250_check_lcr(p, offset, value);
}

static unsigned int dw8250_serial_in32be(struct uart_port *p, int offset)
static u32 dw8250_serial_in32be(struct uart_port *p, unsigned int offset)
{
       unsigned int value = ioread32be(p->membase + (offset << p->regshift));
       u32 value = ioread32be(p->membase + (offset << p->regshift));

       return dw8250_modify_msr(p, offset, value);
}
+2 −2
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ static void serial8250_em_serial_out_helper(struct uart_port *p, int offset,
	}
}

static unsigned int serial8250_em_serial_in(struct uart_port *p, int offset)
static u32 serial8250_em_serial_in(struct uart_port *p, unsigned int offset)
{
	switch (offset) {
	case UART_RX: /* RX @ 0x00 */
@@ -119,7 +119,7 @@ static void serial8250_em_reg_update(struct uart_port *p, int off, int value)
	serial8250_em_serial_out_helper(p, UART_HCR0_EM, hcr0);
}

static void serial8250_em_serial_out(struct uart_port *p, int offset, int value)
static void serial8250_em_serial_out(struct uart_port *p, unsigned int offset, u32 value)
{
	switch (offset) {
	case UART_TX:
+4 −4
Original line number Diff line number Diff line
@@ -168,9 +168,9 @@ OF_EARLYCON_DECLARE(jz4780_uart, "ingenic,jz4780-uart",
OF_EARLYCON_DECLARE(x1000_uart, "ingenic,x1000-uart",
		    ingenic_early_console_setup);

static void ingenic_uart_serial_out(struct uart_port *p, int offset, int value)
static void ingenic_uart_serial_out(struct uart_port *p, unsigned int offset, u32 value)
{
	int ier;
	u32 ier;

	switch (offset) {
	case UART_FCR:
@@ -206,9 +206,9 @@ static void ingenic_uart_serial_out(struct uart_port *p, int offset, int value)
	writeb(value, p->membase + (offset << p->regshift));
}

static unsigned int ingenic_uart_serial_in(struct uart_port *p, int offset)
static u32 ingenic_uart_serial_in(struct uart_port *p, unsigned int offset)
{
	unsigned int value;
	u8 value;

	value = readb(p->membase + (offset << p->regshift));

+2 −2
Original line number Diff line number Diff line
@@ -21,12 +21,12 @@ struct ioc3_8250_data {
	int line;
};

static unsigned int ioc3_serial_in(struct uart_port *p, int offset)
static u32 ioc3_serial_in(struct uart_port *p, unsigned int offset)
{
	return readb(p->membase + (offset ^ 3));
}

static void ioc3_serial_out(struct uart_port *p, int offset, int value)
static void ioc3_serial_out(struct uart_port *p, unsigned int offset, u32 value)
{
	writeb(value, p->membase + (offset ^ 3));
}
Loading