diff options
author | Scott Williams <scwilliams@nvidia.com> | 2011-01-11 10:50:52 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-04-26 15:49:20 -0700 |
commit | 379fa616dd1bd15757cc51e2e270ac0940294590 (patch) | |
tree | b2433ddc4422bc8e5cca8225d05101d516096475 /arch/arm/mach-tegra/board-aruba-panel.c | |
parent | ea61aef4ad06683d34f0f561740ebb93023409b5 (diff) |
arm: tegra: Fix hardcoded frame buffer addresses
Dynamically obtain the carveout and framebuffer addresses.
Bug 769986
Original-Change-Id: I9b8eeb710e5198ab9ae4e7e6c7095cfd23209e66
Reviewed-on: http://git-master/r/15534
Tested-by: Scott Williams <scwilliams@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-by: Krishna Reddy <vdumpa@nvidia.com>
Reviewed-by: Jonathan Mayo <jmayo@nvidia.com>
Reviewed-by: Scott Williams <scwilliams@nvidia.com>
Change-Id: Ia6f68817b65281bd5da4f8774476a947fd970950
Diffstat (limited to 'arch/arm/mach-tegra/board-aruba-panel.c')
-rw-r--r-- | arch/arm/mach-tegra/board-aruba-panel.c | 87 |
1 files changed, 14 insertions, 73 deletions
diff --git a/arch/arm/mach-tegra/board-aruba-panel.c b/arch/arm/mach-tegra/board-aruba-panel.c index e192ef315641..e609e0e63543 100644 --- a/arch/arm/mach-tegra/board-aruba-panel.c +++ b/arch/arm/mach-tegra/board-aruba-panel.c @@ -32,11 +32,10 @@ #include <mach/dc.h> #include <mach/fb.h> +#include "board.h" #include "devices.h" #include "gpio-names.h" -#define PMC_SCRATCH20 0xa0 - #define aruba_lvds_shutdown TEGRA_GPIO_PB2 #define aruba_bl_enb TEGRA_GPIO_PW1 @@ -124,8 +123,8 @@ static struct resource aruba_disp1_resources[] = { }, { .name = "fbmem", - .start = 0, /* Filled in by fbmem_set() */ - .end = 0, /* Filled in by fbmem_set() */ + .start = 0, /* Filled in by aruba_panel_init() */ + .end = 0, /* Filled in by aruba_panel_init() */ .flags = IORESOURCE_MEM, }, }; @@ -193,8 +192,8 @@ static struct nvmap_platform_carveout aruba_carveouts[] = { [1] = { .name = "generic-0", .usage_mask = NVMAP_HEAP_CARVEOUT_GENERIC, - .base = 0, /* Filled in by carveout_set() */ - .size = 0, /* Filled in by carveout_set() */ + .base = 0, /* Filled in by aruba_panel_init() */ + .size = 0, /* Filled in by aruba_panel_init() */ .buddy_size = SZ_32K, }, }; @@ -219,80 +218,22 @@ static struct platform_device *aruba_gfx_devices[] __initdata = { &aruba_backlight_device, }; -static inline u32 pmc_readl(unsigned long offset) -{ - return readl(IO_TO_VIRT(TEGRA_PMC_BASE + offset)); -} - -static void fbmem_set(struct resource *res, int num_res, - u32 start, resource_size_t size) -{ - int i; - for (i = 0; i < num_res ; i++) { - if (!strcmp(res[i].name, "fbmem")) { - res[i].start = start; - res[i].end = start + size - 1; - return; - } - } - /* Didn't find a framebuffer memory resource */ - BUG(); -} - -static void carveout_set(struct nvmap_platform_carveout *res, int num_res, - u32 base, resource_size_t size) -{ - int i; - for (i = 0; i < num_res ; i++) { - if (!strcmp(res[i].name, "generic-0")) { - res[i].base = base; - res[i].size = size; - return; - } - } - /* Didn't find a carveout memory resource */ - BUG(); -} - int __init aruba_panel_init(void) { int err; - u32 odm_data = pmc_readl(PMC_SCRATCH20); - - /* !!!FIXME!!! HAVE TO USE HARD-CODED FRAME BUFFER AND CARVEOUT - ADDRESSES FOR NOW -- BUG 769986 */ - switch (odm_data & 0x70000000) { - case 0x10000000: - /* 256MB LPDDR2 */ - fbmem_set(aruba_disp1_resources, - ARRAY_SIZE(aruba_disp1_resources), - 0x8E010000, - 0x0012C3C0); - carveout_set(aruba_carveouts, - ARRAY_SIZE(aruba_carveouts), - 0x8EC00000, /* 256MB mem - 32MB carveout + 0xC00000 ?*/ - SZ_32M - 0xC00000); - break; - case 0x40000000: - /* 1GB DDR3 -- NOTE: The bootloader cannot map more than 512MB - of physical memory. Therefore, the frame buffer and carveout - must be completely below the 512MB boundary. */ - fbmem_set(aruba_disp1_resources, - ARRAY_SIZE(aruba_disp1_resources), - 0x9E010000, - 0x0012C3C0); - carveout_set(aruba_carveouts, - ARRAY_SIZE(aruba_carveouts), - 0x9EC00000, /* 512MB mem - 32MB carveout + 0xC00000 ?*/ - SZ_32M - 0xC00000); - break; - default: - BUG(); - } + struct resource *res; + + aruba_carveouts[1].base = tegra_carveout_start; + aruba_carveouts[1].size = tegra_carveout_size; err = platform_add_devices(aruba_gfx_devices, ARRAY_SIZE(aruba_gfx_devices)); + res = nvhost_get_resource_byname(&aruba_disp1_device, + IORESOURCE_MEM, "fbmem"); + res->start = tegra_fb_start; + res->end = tegra_fb_start + tegra_fb_size - 1; + if (!err) err = nvhost_device_register(&aruba_disp1_device); |