From 9df731a176aab8e03b984b681b1bea01ccff6644 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 07:23:06 +0000
Subject: [PATCH] rk3568 rt uboot init

---
 u-boot/arch/arm/mach-rockchip/kernel_dtb.c |  517 +--------------------------------------------------------
 1 files changed, 10 insertions(+), 507 deletions(-)

diff --git a/u-boot/arch/arm/mach-rockchip/kernel_dtb.c b/u-boot/arch/arm/mach-rockchip/kernel_dtb.c
old mode 100755
new mode 100644
index 74da167..05e734f
--- a/u-boot/arch/arm/mach-rockchip/kernel_dtb.c
+++ b/u-boot/arch/arm/mach-rockchip/kernel_dtb.c
@@ -16,503 +16,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-
-#if 1
-struct display_fixup_data {
-	int type;
-
-	int delay_prepare;
-	int delay_enable;
-	int delay_disable;
-	int delay_unprepare;
-	int delay_reset;
-	int delay_init;
-	int size_width;
-	int size_height;
-
-	int clock_frequency;
-	int hactive;
-	int hfront_porch;
-	int hsync_len;
-	int hback_porch;
-	int vactive;
-	int vfront_porch;
-	int vsync_len;
-	int vback_porch;
-	int hsync_active;
-	int vsync_active;
-	int de_active;
-	int pixelclk_active;
-
-	/* for DSI Panel */
-	int flags;
-	int format;
-	int lanes;
-	int init_cmd_length;
-	u8 *init_cmd;
-	
-	int nodka_lvds;
-};
-enum {
-	PANEL_TYPE_DSI,
-	PANEL_TYPE_EDP,
-	PANEL_TYPE_LVDS,
-};
-
-#define CUSTOM_PARTITION_NAME	"baseparameter"
-#define LCD_PARAM_MAX_COUNT	27
-
-int lcdParam[LCD_PARAM_MAX_COUNT];
-char param_buf_temp[4*1024] = {0};
-
-void set_lcdparam_test_edp(struct display_fixup_data *data)
-{
-
-	data->type = PANEL_TYPE_DSI; 
-	data->delay_prepare = 100;
-	data->delay_enable = 100;
-	data->delay_disable = 100;
-	data->delay_unprepare = 100;
-	data->delay_reset = 100;
-	data->delay_init = 100;
-	data->size_width = 240;
-	data->size_height = 300;
-	data->clock_frequency = 60000000;
-	data->hactive = 1024;
-	data->hfront_porch = 12;
-	data->hsync_len = 16;
-	data->hback_porch = 48;
-	data->vactive = 600;
-	data->vfront_porch = 8;
-	data->vsync_len = 4;
-	data->vback_porch = 8;
-	data->hsync_active = 0;
-	data->vsync_active = 0;
-	data->de_active = 0;
-	data->pixelclk_active = 0;
-	data->flags = 0;
-	data->format = 0;
-	data->lanes = 4;
-	*(data->init_cmd  + 0) = 0x05; 
-	*(data->init_cmd  + 1) = 0x00; 
-	*(data->init_cmd  + 2) = 0x01; 
-	*(data->init_cmd  + 3) = 0x01; 
-
-	*(data->init_cmd  + 4) = 0x05; 
-	*(data->init_cmd  + 5) = 0x00; 
-	*(data->init_cmd  + 6) = 0x01; 
-	*(data->init_cmd  + 7) = 0x02; 
-
-	*(data->init_cmd  + 8) = 0x05; 
-	*(data->init_cmd  + 9) = 0x00; 
-	*(data->init_cmd  + 10) = 0x01; 
-	*(data->init_cmd  + 11) = 0x03; 
-
-	*(data->init_cmd  + 12) = 0x05; 
-	*(data->init_cmd  + 13) = 0x00; 
-	*(data->init_cmd  + 14) = 0x01; 
-	*(data->init_cmd  + 15) = 0x05; 
-
-}
-
-int get_lcdparam_info_from_custom_partition(struct display_fixup_data *data)
-{
-	
-	struct blk_desc *dev_desc;
-	disk_partition_t part_info;
-	char *boot_partname = CUSTOM_PARTITION_NAME;
-  int ret,i;
-  
-  dev_desc = rockchip_get_bootdev();
-  if (!dev_desc) {
-          printf("%s: dev_desc is NULL!\n", __func__);
-          return -ENODEV;
-  }
-
-  ret = part_get_info_by_name(dev_desc, boot_partname, &part_info);
-  if (ret < 0) {
-      printf("%s: failed to get %s part, ret=%d\n",
-             __func__, boot_partname, ret);
-      /* RKIMG can support part table without 'boot' */
-      return -1;
-  }
-  
-  printf("block num: %lu, name %s ,type %s,block size :%lu\n",part_info.size,part_info.name,part_info.type,part_info.blksz);
-
-  ret = blk_dread(dev_desc, part_info.start + 512, 1, param_buf_temp);
-  if (ret != 1) {
-      printf("%s: failed to read screen parameter, ret=%d\n",
-             __func__, ret);
-      return -1;
-  }
-
-	for (i = 0; i < LCD_PARAM_MAX_COUNT; i++) {
-		lcdParam[i] = param_buf_temp[i * 4];
-		lcdParam[i] =  (lcdParam[i] << 8) + param_buf_temp[i * 4 + 1];
-		lcdParam[i] =  (lcdParam[i] << 8) + param_buf_temp[i * 4 + 2];
-		lcdParam[i] =  (lcdParam[i] << 8) + param_buf_temp[i * 4 + 3];
-		if(lcdParam[i] < 0){
-			lcdParam[i] = -lcdParam[i];
-		}
-		if(lcdParam[i] > 100000 && i != 9){
-			lcdParam[i] = 0;
-		}
-		printf("--get-- lcd_param %d\n",lcdParam[i]);
-	}
-
-  if(lcdParam[14] == 0 || lcdParam[10] == 0){
-  	 return -1;
-  	}
-	printf("-get- crc32 = 0X%02X%02X%02X%02X\n",
-	       param_buf_temp[LCD_PARAM_MAX_COUNT * 4], param_buf_temp[LCD_PARAM_MAX_COUNT * 4 + 1],
-	       param_buf_temp[LCD_PARAM_MAX_COUNT * 4 + 2], param_buf_temp[LCD_PARAM_MAX_COUNT * 4 + 3]);
-
-	data->type = lcdParam[0]; 
-	data->delay_prepare = lcdParam[4];
-	data->delay_enable = lcdParam[2];
-	data->delay_disable = lcdParam[3];
-	data->delay_unprepare = lcdParam[1];
-	data->delay_reset = lcdParam[5];
-	data->delay_init = lcdParam[6];
-	data->size_width = lcdParam[7];
-	data->size_height = lcdParam[8];
-	data->clock_frequency = lcdParam[9];
-	data->hactive = lcdParam[10];
-	data->hfront_porch = lcdParam[11];
-	data->hsync_len = lcdParam[12];
-	data->hback_porch = lcdParam[13];
-	data->vactive = lcdParam[14];
-	data->vfront_porch = lcdParam[15];
-	data->vsync_len = lcdParam[16];
-	data->vback_porch = lcdParam[17];
-	data->hsync_active = lcdParam[18];
-	data->vsync_active = lcdParam[19];
-	data->de_active = lcdParam[20];
-	data->pixelclk_active = lcdParam[21];
-	data->flags = lcdParam[22];
-	data->format = lcdParam[23];
-	data->lanes = lcdParam[24];
-	data->init_cmd_length = lcdParam[25] = 16;
-	data->nodka_lvds = lcdParam[26];
-    data->init_cmd =  malloc(sizeof(*(data->init_cmd)) * data->init_cmd_length);
-    for(i = 0; i < data->init_cmd_length; i++){
-       *(data->init_cmd + i) = param_buf_temp[100 + i];
-     //  printf("init cmd = %x\n",param_buf_temp[100 + i]);
-	   
-	}
-	
-//	set_lcdparam_test_edp(data);
-
-	return 0;
-}
-
-#endif
-
-
-static int find_connector_node(const void *blob, int node)
-{
-	int phandle, remote;
-	int nodedepth;
-
-	phandle = fdt_getprop_u32_default_node(blob, node, 0,
-					       "remote-endpoint", -1);
-	remote = fdt_node_offset_by_phandle(blob, phandle);
-	nodedepth = fdt_node_depth(blob, remote);
-
-	return fdt_supernode_atdepth_offset(blob, remote,
-					    nodedepth - 3, NULL);
-}
-
-static int get_panel_node(const void *blob, int conn_node)
-{
-	int panel, ports, port, ep, remote, ph, nodedepth;
-	
-	panel = fdt_subnode_offset(blob, conn_node, "panel");
-		printf("panel_1=%d\n",panel);
-	if (panel > 0) {
-		return panel;
-	}
-
-	ports = fdt_subnode_offset(blob, conn_node, "ports");
-	if (ports < 0)
-	{
-		return -ENODEV;
-	}
-
-	fdt_for_each_subnode(port, blob, ports) {
-		fdt_for_each_subnode(ep, blob, port) {
-			ph = fdt_getprop_u32_default_node(blob, ep, 0,
-							  "remote-endpoint", 0);
-			if (!ph)
-				continue;
-
-			remote = fdt_node_offset_by_phandle(blob, ph);
-
-			nodedepth = fdt_node_depth(blob, remote);
-			if (nodedepth < 2)
-				continue;
-
-			panel = fdt_supernode_atdepth_offset(blob, remote,
-							     nodedepth - 2,
-							     NULL);
-			break;
-		}
-	}
-	printf("panel_2=%d\n",panel);
-	return panel;
-}
-
-static int fdt_fixup_node_status(void *blob, int node, enum fdt_status status)
-{
-	int ret;
-
-//	printf("My fixup %s %d\n", fdt_get_name(blob, node, NULL), status);
-
-set_status:
-	ret = fdt_set_node_status(blob, node, status, 0);
-	if (ret == -FDT_ERR_NOSPACE) {
-		ret = fdt_increase_size(blob, 512);
-		if (!ret)
-			goto set_status;
-		else
-			goto err_size;
-	} else if (ret < 0) {
-		printf("Can't set node status: %s\n", fdt_strerror(ret));
-		return ret;
-	}
-
-	return 0;
-
-err_size:
-	printf("Can't increase blob size: %s\n", fdt_strerror(ret));
-	return ret;
-}
-#if 0
-static int fdt_fixup_panel_init_sequence(void *fdt, int node,const struct display_fixup_data *data)
-{
-   #if 0
-	u8 init_buf[] = {0x05, 0x00, 0x01, 0x78, 0x15, 0x01, 0x02, 0x03, 0x04, 0x05, 0x05, 0x01, 0x14,0x39, 0x01, 0x03, 0x02, 0x29, 0x11};
-	u8 exit_buf[] = {0x05, 0x64, 0x01, 0x29, 0x05, 0x64, 0x01, 0x11};
-	#endif
-	int ret;
-
-add_seq:
-	ret = fdt_setprop(fdt, node, "panel-init-sequence", data->init_cmd, data->init_cmd_length);
-	if (ret == -FDT_ERR_NOSPACE) {
-		printf(" init sequence FDT_ERR_NOSPACE\n");
-		ret = fdt_increase_size(fdt, data->init_cmd_length * 4);//gln the length needs precision
-		if (!ret)
-			goto add_seq;
-		else
-			goto err_size;
-	} else if (ret < 0) {
-		printf("Can't add property: %s\n", fdt_strerror(ret));
-		return ret;
-	}
-
-#if 0
-add_init_seq:
-	ret = fdt_setprop(fdt, node, "panel-init-sequence", init_buf, sizeof(init_buf));
-	if (ret == -FDT_ERR_NOSPACE) {
-		printf(" init sequence FDT_ERR_NOSPACE\n");
-		ret = fdt_increase_size(fdt, 512);//gln the length needs precision
-		if (!ret)
-			goto add_init_seq;
-		else
-			goto err_size;
-	} else if (ret < 0) {
-		printf("Can't add property: %s\n", fdt_strerror(ret));
-		return ret;
-	}
-add_exit_seq:
-	ret = fdt_setprop(fdt, node, "panel-exit-sequence", exit_buf, sizeof(exit_buf));
-	if (ret == -FDT_ERR_NOSPACE) {
-		printf(" init sequence FDT_ERR_NOSPACE\n");
-		ret = fdt_increase_size(fdt, 512);//gln the length needs precision
-		if (!ret)
-			goto add_exit_seq;
-		else
-			goto err_size;
-	} else if (ret < 0) {
-		printf("Can't add property: %s\n", fdt_strerror(ret));
-		return ret;
-	}
-#endif
-
-	return 0;
-
-err_size:
-	printf("Can't increase blob size: %s\n", fdt_strerror(ret));
-	return ret;
-}
-#endif
-
-static int fdt_fixup_setprop_u32(void *fdt, int node, const char *name, u32 data)
-{
-	int ret;
-
-set_prop:
-	ret = fdt_setprop_u32(fdt, node, name, data);
-	if (ret == -FDT_ERR_NOSPACE) {
-		ret = fdt_increase_size(fdt, 512);
-		if (!ret)
-			goto set_prop;
-		else
-			goto err_size;
-	} else if (ret < 0) {
-		printf("Can't add property: %s\n", fdt_strerror(ret));
-		return ret;
-	}
-
-	return 0;
-
-err_size:
-	printf("Can't increase blob size: %s\n", fdt_strerror(ret));
-	return ret;
-}
-
-static void fdt_fixup_display_timing(void *blob, int node,
-				     const struct display_fixup_data *data)
-{
-	fdt_fixup_setprop_u32(blob, node, "clock-frequency", data->clock_frequency);
-	fdt_fixup_setprop_u32(blob, node, "hactive", data->hactive);
-	fdt_fixup_setprop_u32(blob, node, "hfront-porch", data->hfront_porch);
-	fdt_fixup_setprop_u32(blob, node, "hsync-len", data->hsync_len);
-	fdt_fixup_setprop_u32(blob, node, "hback-porch", data->hback_porch);
-	fdt_fixup_setprop_u32(blob, node, "vactive", data->vactive);
-	fdt_fixup_setprop_u32(blob, node, "vfront-porch", data->vfront_porch);
-	fdt_fixup_setprop_u32(blob, node, "vsync-len", data->vsync_len);
-	fdt_fixup_setprop_u32(blob, node, "vback-porch", data->vback_porch);
-	fdt_fixup_setprop_u32(blob, node, "hsync-active", data->hsync_active);
-	fdt_fixup_setprop_u32(blob, node, "vsync-active", data->vsync_active);
-	fdt_fixup_setprop_u32(blob, node, "de-active", data->de_active);
-	fdt_fixup_setprop_u32(blob, node, "pixelclk-active", data->pixelclk_active);
-}
-
-static void fdt_fixup_panel_node(void *blob, int node, const char *name,
-				 const struct display_fixup_data *data)
-{
-/*
-	if (!strcmp(name, "dsi")) {
-		fdt_setprop_u32(blob, node, "dsi,flags", data->flags);
-		fdt_setprop_u32(blob, node, "dsi,format", data->format);
-		fdt_setprop_u32(blob, node, "dsi,lanes", data->lanes);
-		fdt_fixup_panel_init_sequence(blob, node,data);
-	}
-*/
-	fdt_fixup_setprop_u32(blob, node, "prepare-delay-ms", data->delay_prepare);
-	fdt_fixup_setprop_u32(blob, node, "enable-delay-ms", data->delay_enable);
-	fdt_fixup_setprop_u32(blob, node, "disable-delay-ms", data->delay_disable);
-	fdt_fixup_setprop_u32(blob, node, "unprepare-delay-ms", data->delay_unprepare);
-	fdt_fixup_setprop_u32(blob, node, "reset-delay-ms", data->delay_reset);
-	fdt_fixup_setprop_u32(blob, node, "init-delay-ms", data->delay_init);
-	fdt_fixup_setprop_u32(blob, node, "width-mm", data->size_width);
-	fdt_fixup_setprop_u32(blob, node, "height-mm", data->size_height);
-	
-}
-static void fdt_fixup_nodka_lvds(void *blob, int node,
-				     const struct display_fixup_data *data)
-{
-	if ( data->nodka_lvds != 0 )
-		fdt_fixup_setprop_u32(blob, node, "nodka-lvds", data->nodka_lvds);
-}
-
-
-static int fdt_fixup_display_sub_route(void *blob, const char *name,
-				       enum fdt_status status,
-				       const struct display_fixup_data *data)
-{
-	int route, phandle, connect, connector, panel, dt, timing, route_lvds;
-	char path[64];
-	char path_lvds[16] = "/panel";
-	int ret;
-	sprintf(path, "/display-subsystem/route/route-%s", name);
-	
-	
-	route = fdt_path_offset(blob, path);
-	printf("route : %d \n",route);
-	if (route < 0)
-		return route;
-	
-	route_lvds = fdt_path_offset(blob, path_lvds);
-	if (route_lvds < 0)
-	{
-		printf("can not get route_lvds = %d\n",route_lvds);
-		return route_lvds;
-	}
-	/* fixup lvds gpio channel*/
-	fdt_fixup_nodka_lvds(blob, route_lvds, data);
-	
-	/* fixup route status */
-	ret = fdt_fixup_node_status(blob, route, status);
-	if (ret < 0)
-		return ret;
-	phandle = fdt_getprop_u32_default_node(blob, route, 0, "connect", -1);
-	if (phandle < 0)
-		return phandle;
-	connect = fdt_node_offset_by_phandle(blob, phandle);
-	if (connect < 0)
-		return connect;
-	connector = find_connector_node(blob, connect);
-	if (connector < 0)
-		return connector;
-	/* fixup connector status */
-	ret = fdt_fixup_node_status(blob, connector, status);
-	if (ret < 0)
-		return ret;
-	if (status != FDT_STATUS_OKAY) {
-		return 0;
-	}
-	panel = get_panel_node(blob, connector);
-	if (panel < 0)
-		return panel;
-	/* fixup panel info */
-	fdt_fixup_panel_node(blob, panel, name, data);	
-	dt = fdt_subnode_offset(blob, panel, "display-timings");
-	if (dt < 0) {
-		return dt;
-	}
-	timing = fdt_subnode_offset(blob, dt, "timing");
-	if (timing < 0) {
-		phandle = fdt_getprop_u32_default_node(blob, dt, 0, "native-mode", -1);
-		if (phandle < 0)
-			return phandle;
-
-		timing = fdt_node_offset_by_phandle(blob, phandle);
-		if (timing < 0)
-			return timing;
-	}
-
-	/* fixup panel display timing */
-	fdt_fixup_display_timing(blob, timing, data);
-	return 0;
-}
-
-static void fdt_fixup_display_route(void *blob, const struct display_fixup_data *data)
-{
-	if (data->type == PANEL_TYPE_DSI) {
-		fdt_fixup_display_sub_route(blob, "dsi1", FDT_STATUS_OKAY, data);
-		fdt_fixup_display_sub_route(blob, "edp", FDT_STATUS_DISABLED, data);
-		fdt_fixup_display_sub_route(blob, "lvds", FDT_STATUS_DISABLED, data);
-	} else if (data->type == PANEL_TYPE_EDP) {
-		fdt_fixup_display_sub_route(blob, "dsi1", FDT_STATUS_DISABLED, data);
-		fdt_fixup_display_sub_route(blob, "edp", FDT_STATUS_OKAY, data);
-		fdt_fixup_display_sub_route(blob, "lvds", FDT_STATUS_DISABLED, data);
-	} else if (data->type == PANEL_TYPE_LVDS) {
-		fdt_fixup_display_sub_route(blob, "lvds", FDT_STATUS_OKAY, data);
-	  	fdt_fixup_display_sub_route(blob, "dsi1", FDT_STATUS_DISABLED, data);
-		fdt_fixup_display_sub_route(blob, "edp", FDT_STATUS_DISABLED, data);
-	}
-}
-
-
-
-
-
-
-
-
-
 #ifdef CONFIG_USING_KERNEL_DTB_V2
 static int dm_rm_kernel_dev(void)
 {
@@ -798,7 +301,6 @@
 #endif
 	ulong fdt_addr = 0;
 	int ret = -ENODEV;
-	struct display_fixup_data fix_data;
 
 	printf("DM: v%d\n", IS_ENABLED(CONFIG_USING_KERNEL_DTB_V2) ? 2 : 1);
 
@@ -815,12 +317,10 @@
 		return -ENODEV;
 	}
 
-	if (IS_ENABLED(CONFIG_EMBED_KERNEL_DTB_ALWAYS)) {
-		resource_init_list();
-		printf("Always embed kernel dtb\n");
-		goto dtb_embed;
-	}
-
+#ifdef CONFIG_EMBED_KERNEL_DTB_ALWAYS
+	printf("Always embed kernel dtb\n");
+	goto dtb_embed;
+#endif
 	ret = rockchip_read_dtb_file((void *)fdt_addr);
 	if (!ret) {
 		if (!dtb_check_ok((void *)fdt_addr, (void *)gd->fdt_blob)) {
@@ -831,7 +331,10 @@
 		}
 	}
 
+#ifdef CONFIG_EMBED_KERNEL_DTB
+#ifdef CONFIG_EMBED_KERNEL_DTB_ALWAYS
 dtb_embed:
+#endif
 	if (gd->fdt_blob_kern) {
 		if (!dtb_check_ok((void *)gd->fdt_blob_kern, (void *)gd->fdt_blob)) {
 			printf("Embedded kernel dtb mismatch this platform!\n");
@@ -850,7 +353,9 @@
 		memcpy((void *)fdt_addr, gd->fdt_blob_kern,
 		       fdt_totalsize(gd->fdt_blob_kern));
 		printf("DTB: %s\n", CONFIG_EMBED_KERNEL_DTB_PATH);
-	} else {
+	} else
+#endif
+	{
 		printf("Failed to get kernel dtb, ret=%d\n", ret);
 		return -ENOENT;
 	}
@@ -870,8 +375,6 @@
 	phandles_fixup_cru((void *)gd->fdt_blob);
 	phandles_fixup_gpio((void *)gd->fdt_blob, (void *)ufdt_blob);
 #endif
-	if (!get_lcdparam_info_from_custom_partition(&fix_data))
-				fdt_fixup_display_route((void *)fdt_addr, &fix_data);
 
 	gd->flags |= GD_FLG_KDTB_READY;
 	gd->of_root_f = gd->of_root;

--
Gitblit v1.6.2