diff options
| -rw-r--r-- | drivers/video/geode/display_gx.c | 18 | ||||
| -rw-r--r-- | drivers/video/geode/lxfb_ops.c | 16 | ||||
| -rw-r--r-- | include/asm-x86/geode.h | 2 |
3 files changed, 35 insertions, 1 deletions
diff --git a/drivers/video/geode/display_gx.c b/drivers/video/geode/display_gx.c index 1e82ecc367dd..e759895bf3d3 100644 --- a/drivers/video/geode/display_gx.c +++ b/drivers/video/geode/display_gx.c | |||
| @@ -25,7 +25,23 @@ unsigned int gx_frame_buffer_size(void) | |||
| 25 | { | 25 | { |
| 26 | unsigned int val; | 26 | unsigned int val; |
| 27 | 27 | ||
| 28 | /* FB size is reported by a virtual register */ | 28 | if (!geode_has_vsa2()) { |
| 29 | uint32_t hi, lo; | ||
| 30 | |||
| 31 | /* The number of pages is (PMAX - PMIN)+1 */ | ||
| 32 | rdmsr(MSR_GLIU_P2D_RO0, lo, hi); | ||
| 33 | |||
| 34 | /* PMAX */ | ||
| 35 | val = ((hi & 0xff) << 12) | ((lo & 0xfff00000) >> 20); | ||
| 36 | /* PMIN */ | ||
| 37 | val -= (lo & 0x000fffff); | ||
| 38 | val += 1; | ||
| 39 | |||
| 40 | /* The page size is 4k */ | ||
| 41 | return (val << 12); | ||
| 42 | } | ||
| 43 | |||
| 44 | /* FB size can be obtained from the VSA II */ | ||
| 29 | /* Virtual register class = 0x02 */ | 45 | /* Virtual register class = 0x02 */ |
| 30 | /* VG_MEM_SIZE(512Kb units) = 0x00 */ | 46 | /* VG_MEM_SIZE(512Kb units) = 0x00 */ |
| 31 | 47 | ||
diff --git a/drivers/video/geode/lxfb_ops.c b/drivers/video/geode/lxfb_ops.c index e42e12489f6d..cd9d4cc26954 100644 --- a/drivers/video/geode/lxfb_ops.c +++ b/drivers/video/geode/lxfb_ops.c | |||
| @@ -329,6 +329,22 @@ unsigned int lx_framebuffer_size(void) | |||
| 329 | { | 329 | { |
| 330 | unsigned int val; | 330 | unsigned int val; |
| 331 | 331 | ||
| 332 | if (!geode_has_vsa2()) { | ||
| 333 | uint32_t hi, lo; | ||
| 334 | |||
| 335 | /* The number of pages is (PMAX - PMIN)+1 */ | ||
| 336 | rdmsr(MSR_GLIU_P2D_RO0, lo, hi); | ||
| 337 | |||
| 338 | /* PMAX */ | ||
| 339 | val = ((hi & 0xff) << 12) | ((lo & 0xfff00000) >> 20); | ||
| 340 | /* PMIN */ | ||
| 341 | val -= (lo & 0x000fffff); | ||
| 342 | val += 1; | ||
| 343 | |||
| 344 | /* The page size is 4k */ | ||
| 345 | return (val << 12); | ||
| 346 | } | ||
| 347 | |||
| 332 | /* The frame buffer size is reported by a VSM in VSA II */ | 348 | /* The frame buffer size is reported by a VSM in VSA II */ |
| 333 | /* Virtual Register Class = 0x02 */ | 349 | /* Virtual Register Class = 0x02 */ |
| 334 | /* VG_MEM_SIZE (1MB units) = 0x00 */ | 350 | /* VG_MEM_SIZE (1MB units) = 0x00 */ |
diff --git a/include/asm-x86/geode.h b/include/asm-x86/geode.h index 4fb2f62e277b..7154dc4de951 100644 --- a/include/asm-x86/geode.h +++ b/include/asm-x86/geode.h | |||
| @@ -30,6 +30,8 @@ extern int geode_get_dev_base(unsigned int dev); | |||
| 30 | 30 | ||
| 31 | /* MSRS */ | 31 | /* MSRS */ |
| 32 | 32 | ||
| 33 | #define MSR_GLIU_P2D_RO0 0x10000029 | ||
| 34 | |||
| 33 | #define MSR_LX_GLD_MSR_CONFIG 0x48002001 | 35 | #define MSR_LX_GLD_MSR_CONFIG 0x48002001 |
| 34 | #define MSR_LX_MSR_PADSEL 0x48002011 /* NOT 0x48000011; the data | 36 | #define MSR_LX_MSR_PADSEL 0x48002011 /* NOT 0x48000011; the data |
| 35 | * sheet has the wrong value */ | 37 | * sheet has the wrong value */ |
