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

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
...@@ -1064,34 +1064,33 @@ static struct display_timing lcd_centering_timging(struct display_timing ...@@ -1064,34 +1064,33 @@ static struct display_timing lcd_centering_timging(struct display_timing
bool viafb_lcd_get_mobile_state(bool *mobile) bool viafb_lcd_get_mobile_state(bool *mobile)
{ {
unsigned char *romptr, *tableptr; unsigned char __iomem *romptr, *tableptr, *biosptr;
u8 core_base; u8 core_base;
unsigned char *biosptr;
/* Rom address */ /* Rom address */
u32 romaddr = 0x000C0000; const u32 romaddr = 0x000C0000;
u16 start_pattern = 0; u16 start_pattern;
biosptr = ioremap(romaddr, 0x10000); biosptr = ioremap(romaddr, 0x10000);
start_pattern = readw(biosptr);
memcpy(&start_pattern, biosptr, 2);
/* Compare pattern */ /* Compare pattern */
if (start_pattern == 0xAA55) { if (start_pattern == 0xAA55) {
/* Get the start of Table */ /* Get the start of Table */
/* 0x1B means BIOS offset position */ /* 0x1B means BIOS offset position */
romptr = biosptr + 0x1B; romptr = biosptr + 0x1B;
tableptr = biosptr + *((u16 *) romptr); tableptr = biosptr + readw(romptr);
/* Get the start of biosver structure */ /* Get the start of biosver structure */
/* 18 means BIOS version position. */ /* 18 means BIOS version position. */
romptr = tableptr + 18; romptr = tableptr + 18;
romptr = biosptr + *((u16 *) romptr); romptr = biosptr + readw(romptr);
/* The offset should be 44, but the /* The offset should be 44, but the
actual image is less three char. */ actual image is less three char. */
/* pRom += 44; */ /* pRom += 44; */
romptr += 41; romptr += 41;
core_base = *romptr++; core_base = readb(romptr);
if (core_base & 0x8) if (core_base & 0x8)
*mobile = false; *mobile = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment