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

Commit b65d6040 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Florian Tobias Schandinat
Browse files

video via: fix iomem access



This driver is not respecting the iomem memory space restrictions
and does direct access. This works on x86 but is non-portable and
should not be done.  Converted memcpy() of 2 to readw.
Last post increment of romptr was unnecessary since pointer never
used after that.

Found by sparse, compile tested only.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
parent a625e305
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -1064,34 +1064,33 @@ static struct display_timing lcd_centering_timging(struct display_timing

bool viafb_lcd_get_mobile_state(bool *mobile)
{
	unsigned char *romptr, *tableptr;
	unsigned char __iomem *romptr, *tableptr, *biosptr;
	u8 core_base;
	unsigned char *biosptr;
	/* Rom address */
	u32 romaddr = 0x000C0000;
	u16 start_pattern = 0;
	const u32 romaddr = 0x000C0000;
	u16 start_pattern;

	biosptr = ioremap(romaddr, 0x10000);
	start_pattern = readw(biosptr);

	memcpy(&start_pattern, biosptr, 2);
	/* Compare pattern */
	if (start_pattern == 0xAA55) {
		/* Get the start of Table */
		/* 0x1B means BIOS offset position */
		romptr = biosptr + 0x1B;
		tableptr = biosptr + *((u16 *) romptr);
		tableptr = biosptr + readw(romptr);

		/* Get the start of biosver structure */
		/* 18 means BIOS version position. */
		romptr = tableptr + 18;
		romptr = biosptr + *((u16 *) romptr);
		romptr = biosptr + readw(romptr);

		/* The offset should be 44, but the
		   actual image is less three char. */
		/* pRom += 44; */
		romptr += 41;

		core_base = *romptr++;
		core_base = readb(romptr);

		if (core_base & 0x8)
			*mobile = false;