diff options
| -rw-r--r-- | drivers/gpu/drm/nouveau/core/subdev/bios/base.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c index e9df94f96d78..3de7d818be76 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c +++ b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c | |||
| @@ -168,7 +168,8 @@ nouveau_bios_shadow_prom(struct nouveau_bios *bios) | |||
| 168 | */ | 168 | */ |
| 169 | i = 16; | 169 | i = 16; |
| 170 | do { | 170 | do { |
| 171 | if ((nv_rd32(bios, 0x300000) & 0xffff) == 0xaa55) | 171 | u32 data = le32_to_cpu(nv_rd32(bios, 0x300000)) & 0xffff; |
| 172 | if (data == 0xaa55) | ||
| 172 | break; | 173 | break; |
| 173 | } while (i--); | 174 | } while (i--); |
| 174 | 175 | ||
| @@ -176,14 +177,15 @@ nouveau_bios_shadow_prom(struct nouveau_bios *bios) | |||
| 176 | goto out; | 177 | goto out; |
| 177 | 178 | ||
| 178 | /* read entire bios image to system memory */ | 179 | /* read entire bios image to system memory */ |
| 179 | bios->size = ((nv_rd32(bios, 0x300000) >> 16) & 0xff) * 512; | 180 | bios->size = (le32_to_cpu(nv_rd32(bios, 0x300000)) >> 16) & 0xff; |
| 181 | bios->size = bios->size * 512; | ||
| 180 | if (!bios->size) | 182 | if (!bios->size) |
| 181 | goto out; | 183 | goto out; |
| 182 | 184 | ||
| 183 | bios->data = kmalloc(bios->size, GFP_KERNEL); | 185 | bios->data = kmalloc(bios->size, GFP_KERNEL); |
| 184 | if (bios->data) { | 186 | if (bios->data) { |
| 185 | for (i = 0; i < bios->size; i+=4) | 187 | for (i = 0; i < bios->size; i += 4) |
| 186 | nv_wo32(bios, i, nv_rd32(bios, 0x300000 + i)); | 188 | ((u32 *)bios->data)[i/4] = nv_rd32(bios, 0x300000 + i); |
| 187 | } | 189 | } |
| 188 | 190 | ||
| 189 | /* check the PCI record header */ | 191 | /* check the PCI record header */ |
