diff options
author | Evoke Zhang <evoke.zhang@amlogic.com> | 2019-02-25 14:58:38 +0800 |
---|---|---|
committer | Dongjin Kim <tobetter@gmail.com> | 2019-05-16 13:17:13 +0900 |
commit | 1bd900b3bed4340bf1d3bb0336e4973d56a9553b (patch) | |
tree | bd2aaf5f1cceb0161406a3d3914a39e5e7932923 /drivers | |
parent | 5aa4091f5ba339fae52ad4ddd0739e5ee8d232ca (diff) | |
download | u-boot-odroid-c1-1bd900b3bed4340bf1d3bb0336e4973d56a9553b.tar.gz |
lcd: tcon: fix axi_mem detect mistake for kernel 64bit [1/1]
PD#SWPL-4682
Problem:
kernel 64bit and 32bit dts config is different
Solution:
sperate 64bit and 32bit dts config access for tcon axi_mem
Verify:
x301
Change-Id: I90e94d1f4dcb2ec5c7c6e0a62364e7013f383ae7
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/display/lcd/aml_lcd_common.h | 3 | ||||
-rw-r--r-- | drivers/display/lcd/aml_lcd_tcon.c | 18 |
2 files changed, 15 insertions, 6 deletions
diff --git a/drivers/display/lcd/aml_lcd_common.h b/drivers/display/lcd/aml_lcd_common.h index e60334d26c..f6da28ebac 100644 --- a/drivers/display/lcd/aml_lcd_common.h +++ b/drivers/display/lcd/aml_lcd_common.h @@ -27,7 +27,8 @@ /* 20190108: tl1 support tablet mode */ /* 20190115: tl1 tcon all interface support */ /* 20190118: support tcon bin data management */ -#define LCD_DRV_VERSION "20190118" +/* 20190225: fix tcon axi_mem detect mistake for kernel 64bit */ +#define LCD_DRV_VERSION "20190225" #define VPP_OUT_SATURATE (1 << 0) diff --git a/drivers/display/lcd/aml_lcd_tcon.c b/drivers/display/lcd/aml_lcd_tcon.c index 702c033926..8dc5dedec7 100644 --- a/drivers/display/lcd/aml_lcd_tcon.c +++ b/drivers/display/lcd/aml_lcd_tcon.c @@ -418,7 +418,6 @@ static void lcd_tcon_config_axi_offset_default(void) if (str) { tcon_rmem.mem_paddr = (unsigned int)simple_strtoul(str, NULL, 16); tcon_rmem.mem_size = lcd_tcon_data->axi_mem_size; - tcon_rmem.flag = 1; } else { LCDERR("can't find env tcon_mem_addr\n"); } @@ -426,12 +425,14 @@ static void lcd_tcon_config_axi_offset_default(void) static int lcd_tcon_config(char *dt_addr, struct lcd_config_s *pconf, int load_id) { - int key_len, reg_len; + int key_len, reg_len, size; int parent_offset; char *propdata; int ret; if (load_id & 0x1) { + parent_offset = fdt_path_offset(dt_addr, "/reserved-memory"); + size = fdt_address_cells(dt_addr, parent_offset); parent_offset = fdt_path_offset(dt_addr, "/reserved-memory/linux,lcd_tcon"); if (parent_offset < 0) { LCDERR("can't find node: /reserved-memory/linux,lcd_tcon\n"); @@ -442,14 +443,20 @@ static int lcd_tcon_config(char *dt_addr, struct lcd_config_s *pconf, int load_i LCDERR("failed to get lcd_tcon reserved-memory from dts\n"); lcd_tcon_config_axi_offset_default(); } else { - tcon_rmem.mem_paddr = be32_to_cpup(((u32*)propdata)); + if (size == 2) + tcon_rmem.mem_paddr = be32_to_cpup((((u32*)propdata)+1)); + else + tcon_rmem.mem_paddr = be32_to_cpup(((u32*)propdata)); tcon_rmem.mem_size = lcd_tcon_data->axi_mem_size; - tcon_rmem.flag = 1; } } } else { lcd_tcon_config_axi_offset_default(); } + if (tcon_rmem.mem_paddr) { + tcon_rmem.flag = 1; + LCDPR("tcon: axi mem addr: 0x%x\n", tcon_rmem.mem_paddr); + } #if 1 /* get reg table from unifykey */ @@ -748,7 +755,8 @@ int lcd_tcon_probe(char *dt_addr, struct aml_lcd_drv_s *lcd_drv, int load_id) if (lcd_tcon_data == NULL) return 0; - LCDPR("%s\n", __func__); + if (lcd_debug_print_flag) + LCDPR("%s\n", __func__); ret = lcd_tcon_config(dt_addr, pconf, load_id); lcd_drv->lcd_tcon_reg_print = lcd_tcon_reg_readback_print; |