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: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
This commit is contained in:
parent
a625e305ed
commit
b65d6040e3
1 changed files with 7 additions and 8 deletions
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue