summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorEvoke Zhang <evoke.zhang@amlogic.com>2019-02-25 14:58:38 +0800
committerDongjin Kim <tobetter@gmail.com>2019-05-16 13:17:13 +0900
commit1bd900b3bed4340bf1d3bb0336e4973d56a9553b (patch)
treebd2aaf5f1cceb0161406a3d3914a39e5e7932923 /drivers
parent5aa4091f5ba339fae52ad4ddd0739e5ee8d232ca (diff)
downloadu-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.h3
-rw-r--r--drivers/display/lcd/aml_lcd_tcon.c18
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;