开发板:tiny4412(1611)
编译器: arm-tiny4412-linux-gnueabi-gcc (gcc version 6.1)
说明:本次移植希望在新版uboot支持sd卡启动方式

文章目录

  • 移植中debug方式
  • uboot中差异点
  • 第一步.修改text地址,增加烧写脚本
  • 第二步.修改时钟
  • 第三步.支持DRAM
  • 第四步.修改trusted zone权限
  • 试验

移植中debug方式

1.增加led点灯代码
2.在确定系统时钟初始化完成后,可以使用串口进行调试
(原厂会使用ds-5连接jtag进行单步调试,比较便捷)

uboot中差异点

需要把新版uboot跑起来,其实uboot的差异点也就是板级差异.物料的不同,如DDR的不同之类,当然由这些硬件的差异还可能有一些软件上寄存器配置的差异.


第一步.修改text地址,增加烧写脚本



根据三星官方手册可得知,官方默认BL1代码会将BL2(uboot的spl部分)加载到0x02023400地址执行.另外使用sd卡作为介质时,手册给出了BL1、BL2大小和位置。

diff --git a/include/configs/origen.h b/include/configs/origen.h
index 65e1c7c..f964456 100644
--- a/include/configs/origen.h
+++ b/include/configs/origen.h
@@ -46,7 +46,7 @@/* MMC SPL */#define COPY_BL2_FNPTR_ADDR    0x02020030
-#define CONFIG_SPL_TEXT_BASE   0x02021410
+#define CONFIG_SPL_TEXT_BASE   0x02023400#define CONFIG_EXTRA_ENV_SETTINGS \"loadaddr=0x40007000\0" \
@@ -87,8 +76,9 @@#define CONFIG_SYS_MMC_ENV_DEV         0#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16 KB */#define RESERVE_BLOCK_SIZE             (512)
-#define BL1_SIZE                       (16 << 10) /*16 K reserved for BL1*/
-#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
+#define BL1_SIZE                       (8 << 10)       /*8 K reserved for BL1*/
+#define BL2_SIZE                       (16 << 10)      /*16 K reserved for BL2*/
+#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE + BL2_SIZE)#define CONFIG_SPL_MAX_FOOTPRINT       (14 * 1024)

第二步.修改时钟

修改完时钟后,就可以使用串口进行debug。我们将APLL改为1400MHZ,MPLL改为800MHZ。串口、SD卡 、MMC卡这些都是使用MPLL作为时钟源。

diff --git a/include/configs/origen.h b/include/configs/origen.h
index 65e1c7c..f964456 100644
--- a/include/configs/origen.h
+++ b/include/configs/origen.h
@@ -99,4 +89,12 @@#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)+/* uart0 debug for spl */
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_GPIO_SUPPORT
+#define CONFIG_DEBUG_UART
+#define CONFIG_DEBUG_UART_S5P
+#define CONFIG_DEBUG_UART_BASE 0x13800000    /* UART0 base address  */
+#define CONFIG_DEBUG_UART_CLOCK (100000000)    /* SCLK_UART0 is 100MHz  */
+#endif /* __CONFIG_H */
diff --git a/arch/arm/mach-exynos/clock_init_exynos4.c b/arch/arm/mach-exynos/clock_init_exynos4.c
index 584e4ba..fda1837 100644
--- a/arch/arm/mach-exynos/clock_init_exynos4.c
+++ b/arch/arm/mach-exynos/clock_init_exynos4.c
@@ -38,42 +38,39 @@*/void system_clock_init(void){
-       struct exynos4_clock *clk =
-                       (struct exynos4_clock *)samsung_get_base_clock();
+       struct exynos4x12_clock *clk =
+                       (struct exynos4x12_clock *)samsung_get_base_clock();-       writel(CLK_SRC_CPU_VAL, &clk->src_cpu);
+       /* APLL= 1400 MHz MPLL=800 MHz */
+
+       writel(0x01000001, &clk->src_cpu);sdelay(0x10000);-       writel(CLK_SRC_TOP0_VAL, &clk->src_top0);
-       writel(CLK_SRC_TOP1_VAL, &clk->src_top1);
-       writel(CLK_SRC_DMC_VAL, &clk->src_dmc);
-       writel(CLK_SRC_LEFTBUS_VAL, &clk->src_leftbus);
-       writel(CLK_SRC_RIGHTBUS_VAL, &clk->src_rightbus);
+       writel(0x10, &clk->src_leftbus);
+       writel(0x10, &clk->src_rightbus);
+       writel(0x110, &clk->src_top0);
+       writel(0x1111000, &clk->src_top1);
+       writel(0x00011000, &clk->src_dmc);writel(CLK_SRC_FSYS_VAL, &clk->src_fsys);writel(CLK_SRC_PERIL0_VAL, &clk->src_peril0);writel(CLK_SRC_CAM_VAL, &clk->src_cam);writel(CLK_SRC_MFC_VAL, &clk->src_mfc);writel(CLK_SRC_G3D_VAL, &clk->src_g3d);
-       writel(CLK_SRC_LCD0_VAL, &clk->src_lcd0);sdelay(0x10000);-       writel(CLK_DIV_CPU0_VAL, &clk->div_cpu0);
-       writel(CLK_DIV_CPU1_VAL, &clk->div_cpu1);
-       writel(CLK_DIV_DMC0_VAL, &clk->div_dmc0);
-       writel(CLK_DIV_DMC1_VAL, &clk->div_dmc1);
-       writel(CLK_DIV_LEFTBUS_VAL, &clk->div_leftbus);
-       writel(CLK_DIV_RIGHTBUS_VAL, &clk->div_rightbus);
-       writel(CLK_DIV_TOP_VAL, &clk->div_top);
+       writel(0x1160730, &clk->div_cpu0);
+       writel(0x506, &clk->div_cpu1);
+       writel(0x111113, &clk->div_dmc0);
+       writel(0x1011713, &clk->div_dmc1);writel(CLK_DIV_FSYS1_VAL, &clk->div_fsys1);
-       writel(CLK_DIV_FSYS2_VAL, &clk->div_fsys2);
+       writel(0x4070047, &clk->div_fsys2);writel(CLK_DIV_FSYS3_VAL, &clk->div_fsys3);writel(CLK_DIV_PERIL0_VAL, &clk->div_peril0);writel(CLK_DIV_CAM_VAL, &clk->div_cam);writel(CLK_DIV_MFC_VAL, &clk->div_mfc);writel(CLK_DIV_G3D_VAL, &clk->div_g3d);
-       writel(CLK_DIV_LCD0_VAL, &clk->div_lcd0);/* Set PLL locktime */writel(PLL_LOCKTIME, &clk->apll_lock);
@@ -81,10 +78,10 @@ void system_clock_init(void)writel(PLL_LOCKTIME, &clk->epll_lock);writel(PLL_LOCKTIME, &clk->vpll_lock);-       writel(APLL_CON1_VAL, &clk->apll_con1);
-       writel(APLL_CON0_VAL, &clk->apll_con0);
-       writel(MPLL_CON1_VAL, &clk->mpll_con1);
-       writel(MPLL_CON0_VAL, &clk->mpll_con0);
+       writel(0x803800, &clk->apll_con1);
+       writel(0x80af0300, &clk->apll_con0);
+       writel(0x803800, &clk->mpll_con1);
+       writel(0x80640300, &clk->mpll_con0);writel(EPLL_CON1_VAL, &clk->epll_con1);writel(EPLL_CON0_VAL, &clk->epll_con0);writel(VPLL_CON1_VAL, &clk->vpll_con1);

第三步.支持DRAM

这里的寄存器配置不是很清楚的话,可以拿板子自带的uboot。启动后通过md命令查看DMC寄存器的配置。

diff --git a/arch/arm/mach-exynos/dmc_init_exynos4.c b/arch/arm/mach-exynos/dmc_init_exynos4.c
index ecddc72..69e9fd6 100644
--- a/arch/arm/mach-exynos/dmc_init_exynos4.c
+++ b/arch/arm/mach-exynos/dmc_init_exynos4.c
@@ -32,19 +32,19 @@ struct mem_timings mem = {.direct_cmd_msr = {DIRECT_CMD1, DIRECT_CMD2, DIRECT_CMD3, DIRECT_CMD4},
-       .timingref = TIMINGREF_VAL,
-       .timingrow = TIMINGROW_VAL,
-       .timingdata = TIMINGDATA_VAL,
-       .timingpower = TIMINGPOWER_VAL,
-       .zqcontrol = ZQ_CONTROL_VAL,
-       .control0 = CONTROL0_VAL,
-       .control1 = CONTROL1_VAL,
-       .control2 = CONTROL2_VAL,
-       .concontrol = CONCONTROL_VAL,
-       .prechconfig = PRECHCONFIG,
-       .memcontrol = MEMCONTROL_VAL,
-       .memconfig0 = MEMCONFIG0_VAL,
-       .memconfig1 = MEMCONFIG1_VAL,
+       .timingref =    0x000000bb,//TIMINGREF_VAL,
+       .timingrow =    0x7a46654f,//TIMINGROW_VAL,
+       .timingdata =   0x46400506,//TIMINGDATA_VAL,
+       .timingpower =  0x52000a3c,//TIMINGPOWER_VAL,
+       .zqcontrol =    0xe3854c03,//ZQ_CONTROL_VAL,
+       .control0 =     0x7110100b,//CONTROL0_VAL,
+       .control1 =     0xe0000086,//CONTROL1_VAL,
+       .control2 =     0x00000000,//CONTROL2_VAL,
+       .concontrol =   0x0fff333a,//CONCONTROL_VAL,
+       .prechconfig =  0xff000000,//PRECHCONFIG,
+       .memcontrol =   0x00302640,//MEMCONTROL_VAL,
+       .memconfig0 =   0x40c01333,//MEMCONFIG0_VAL,
+       .memconfig1 =   0x80e01323,//MEMCONFIG1_VAL,.dll_resync = FORCE_DLL_RESYNC,.dll_on = DLL_CONTROL_ON,};
@@ -124,6 +124,8 @@ static void dmc_init(struct exynos4_dmc *dmc)writel(mem.memconfig0, &dmc->memconfig0);writel(mem.memconfig1, &dmc->memconfig1);+       writel(0x8000001F, &dmc->ivcontrol);
+/* Config Precharge Policy */writel(mem.prechconfig, &dmc->prechconfig);/*
diff --git a/arch/arm/mach-exynos/exynos4_setup.h b/arch/arm/mach-exynos/exynos4_setup.h
index 38735f0..37ce464 100644
--- a/arch/arm/mach-exynos/exynos4_setup.h
+++ b/arch/arm/mach-exynos/exynos4_setup.h
@@ -505,7 +505,7 @@ struct mem_timings {#define ADD_LAT_PALL           (1 << 6)#define MEM_TYPE_DDR3          (0x6 << 8)#define MEM_WIDTH_32           (0x2 << 12)
-#define NUM_CHIP_2             (1 << 16)
+#define NUM_CHIP_2             (0 << 16)#define BL_8                   (0x3 << 20)#define MEMCONTROL_VAL         (CLK_STOP_DISABLE | DPWRDN_DISABLE\| DPWRDN_TYPE | TP_DISABLE | DSREF_DIABLE\
@@ -514,16 +514,16 @@ struct mem_timings {#define CHIP_BANK_8            (0x3 << 0)
-#define CHIP_ROW_14            (0x2 << 4)
+#define CHIP_ROW_14            (0x3 << 4)#define CHIP_COL_10            (0x3 << 8)#define CHIP_MAP_INTERLEAVED   (1 << 12)
-#define CHIP_MASK              (0xe0 << 16)
+#define CHIP_MASK              (0xC0 << 16)#ifdef CONFIG_MIU_LINEAR#define CHIP0_BASE             (0x40 << 24)#define CHIP1_BASE             (0x60 << 24)#else
-#define CHIP0_BASE             (0x20 << 24)
-#define CHIP1_BASE             (0x40 << 24)
+#define CHIP0_BASE             (0x40 << 24)
+#define CHIP1_BASE             (0x80 << 24)#endif#define MEMCONFIG0_VAL         (CHIP_BANK_8 | CHIP_ROW_14 | CHIP_COL_10\| CHIP_MAP_INTERLEAVED | CHIP_MASK | CHIP0_BASE)

第四步.修改trusted zone权限

这里如果不修改的话,会导致部分总线的访问出现问题。

diff --git a/arch/arm/mach-exynos/tzpc.c b/arch/arm/mach-exynos/tzpc.c
index abe8e7f..63605d5 100644
--- a/arch/arm/mach-exynos/tzpc.c
+++ b/arch/arm/mach-exynos/tzpc.c
@@ -17,10 +17,7 @@ void tzpc_init(void)start = samsung_get_base_tzpc();-       if (cpu_is_exynos5())
-               end = start + ((EXYNOS5_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET);
-       else if (cpu_is_exynos4())
-               end = start + ((EXYNOS4_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET);
+       end = start + ((EXYNOS4_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET);for (addr = start; addr <= end; addr += TZPC_BASE_OFFSET) {tzpc = (struct exynos_tzpc *)addr;
@@ -30,11 +27,7 @@ void tzpc_init(void)writel(DECPROTXSET, &tzpc->decprot0set);writel(DECPROTXSET, &tzpc->decprot1set);
-
-               if (cpu_is_exynos5() && (addr == end))
-                       break;
-
-               writel(DECPROTXSET, &tzpc->decprot2set);
+               writel(0xbd,        &tzpc->decprot2set);writel(DECPROTXSET, &tzpc->decprot3set);}}

试验

最终patch,当然整个工程的源码可以在github下载到:

diff --git a/arch/arm/dts/exynos4210-origen.dts b/arch/arm/dts/exynos4210-origen.dts
index 65a5fcd..9f4875a 100644
--- a/arch/arm/dts/exynos4210-origen.dts
+++ b/arch/arm/dts/exynos4210-origen.dts
@@ -15,12 +15,13 @@compatible = "insignal,origen", "samsung,exynos4210";chosen {
+      stdout-path = "serial0";bootargs ="";};aliases {serial0 = "/serial@13800000";
-       console = "/serial@13820000";
+      console = "/serial@13800000";};};diff --git a/arch/arm/mach-exynos/clock_init_exynos4.c b/arch/arm/mach-exynos/clock_init_exynos4.c
index 584e4ba..fda1837 100644
--- a/arch/arm/mach-exynos/clock_init_exynos4.c
+++ b/arch/arm/mach-exynos/clock_init_exynos4.c
@@ -38,42 +38,39 @@*/void system_clock_init(void){
-   struct exynos4_clock *clk =
-           (struct exynos4_clock *)samsung_get_base_clock();
+  struct exynos4x12_clock *clk =
+          (struct exynos4x12_clock *)samsung_get_base_clock();-   writel(CLK_SRC_CPU_VAL, &clk->src_cpu);
+  /* APLL= 1400 MHz MPLL=800 MHz */
+
+  writel(0x01000001, &clk->src_cpu);sdelay(0x10000);-  writel(CLK_SRC_TOP0_VAL, &clk->src_top0);
-   writel(CLK_SRC_TOP1_VAL, &clk->src_top1);
-   writel(CLK_SRC_DMC_VAL, &clk->src_dmc);
-   writel(CLK_SRC_LEFTBUS_VAL, &clk->src_leftbus);
-   writel(CLK_SRC_RIGHTBUS_VAL, &clk->src_rightbus);
+  writel(0x10, &clk->src_leftbus);
+  writel(0x10, &clk->src_rightbus);
+  writel(0x110, &clk->src_top0);
+  writel(0x1111000, &clk->src_top1);
+  writel(0x00011000, &clk->src_dmc);writel(CLK_SRC_FSYS_VAL, &clk->src_fsys);writel(CLK_SRC_PERIL0_VAL, &clk->src_peril0);writel(CLK_SRC_CAM_VAL, &clk->src_cam);writel(CLK_SRC_MFC_VAL, &clk->src_mfc);writel(CLK_SRC_G3D_VAL, &clk->src_g3d);
-   writel(CLK_SRC_LCD0_VAL, &clk->src_lcd0);sdelay(0x10000);-   writel(CLK_DIV_CPU0_VAL, &clk->div_cpu0);
-   writel(CLK_DIV_CPU1_VAL, &clk->div_cpu1);
-   writel(CLK_DIV_DMC0_VAL, &clk->div_dmc0);
-   writel(CLK_DIV_DMC1_VAL, &clk->div_dmc1);
-   writel(CLK_DIV_LEFTBUS_VAL, &clk->div_leftbus);
-   writel(CLK_DIV_RIGHTBUS_VAL, &clk->div_rightbus);
-   writel(CLK_DIV_TOP_VAL, &clk->div_top);
+  writel(0x1160730, &clk->div_cpu0);
+  writel(0x506, &clk->div_cpu1);
+  writel(0x111113, &clk->div_dmc0);
+  writel(0x1011713, &clk->div_dmc1);writel(CLK_DIV_FSYS1_VAL, &clk->div_fsys1);
-   writel(CLK_DIV_FSYS2_VAL, &clk->div_fsys2);
+  writel(0x4070047, &clk->div_fsys2);writel(CLK_DIV_FSYS3_VAL, &clk->div_fsys3);writel(CLK_DIV_PERIL0_VAL, &clk->div_peril0);writel(CLK_DIV_CAM_VAL, &clk->div_cam);writel(CLK_DIV_MFC_VAL, &clk->div_mfc);writel(CLK_DIV_G3D_VAL, &clk->div_g3d);
-   writel(CLK_DIV_LCD0_VAL, &clk->div_lcd0);/* Set PLL locktime */writel(PLL_LOCKTIME, &clk->apll_lock);
@@ -81,10 +78,10 @@ void system_clock_init(void)writel(PLL_LOCKTIME, &clk->epll_lock);writel(PLL_LOCKTIME, &clk->vpll_lock);-    writel(APLL_CON1_VAL, &clk->apll_con1);
-   writel(APLL_CON0_VAL, &clk->apll_con0);
-   writel(MPLL_CON1_VAL, &clk->mpll_con1);
-   writel(MPLL_CON0_VAL, &clk->mpll_con0);
+  writel(0x803800, &clk->apll_con1);
+  writel(0x80af0300, &clk->apll_con0);
+  writel(0x803800, &clk->mpll_con1);
+  writel(0x80640300, &clk->mpll_con0);writel(EPLL_CON1_VAL, &clk->epll_con1);writel(EPLL_CON0_VAL, &clk->epll_con0);writel(VPLL_CON1_VAL, &clk->vpll_con1);
diff --git a/arch/arm/mach-exynos/dmc_init_exynos4.c b/arch/arm/mach-exynos/dmc_init_exynos4.c
index ecddc72..69e9fd6 100644
--- a/arch/arm/mach-exynos/dmc_init_exynos4.c
+++ b/arch/arm/mach-exynos/dmc_init_exynos4.c
@@ -32,19 +32,19 @@ struct mem_timings mem = {.direct_cmd_msr = {DIRECT_CMD1, DIRECT_CMD2, DIRECT_CMD3, DIRECT_CMD4},
-   .timingref = TIMINGREF_VAL,
-   .timingrow = TIMINGROW_VAL,
-   .timingdata = TIMINGDATA_VAL,
-   .timingpower = TIMINGPOWER_VAL,
-   .zqcontrol = ZQ_CONTROL_VAL,
-   .control0 = CONTROL0_VAL,
-   .control1 = CONTROL1_VAL,
-   .control2 = CONTROL2_VAL,
-   .concontrol = CONCONTROL_VAL,
-   .prechconfig = PRECHCONFIG,
-   .memcontrol = MEMCONTROL_VAL,
-   .memconfig0 = MEMCONFIG0_VAL,
-   .memconfig1 = MEMCONFIG1_VAL,
+  .timingref =   0x000000bb,//TIMINGREF_VAL,
+  .timingrow =   0x7a46654f,//TIMINGROW_VAL,
+  .timingdata =  0x46400506,//TIMINGDATA_VAL,
+  .timingpower = 0x52000a3c,//TIMINGPOWER_VAL,
+  .zqcontrol =   0xe3854c03,//ZQ_CONTROL_VAL,
+  .control0 =    0x7110100b,//CONTROL0_VAL,
+  .control1 =    0xe0000086,//CONTROL1_VAL,
+  .control2 =    0x00000000,//CONTROL2_VAL,
+  .concontrol =  0x0fff333a,//CONCONTROL_VAL,
+  .prechconfig = 0xff000000,//PRECHCONFIG,
+  .memcontrol =  0x00302640,//MEMCONTROL_VAL,
+  .memconfig0 =  0x40c01333,//MEMCONFIG0_VAL,
+  .memconfig1 =  0x80e01323,//MEMCONFIG1_VAL,.dll_resync = FORCE_DLL_RESYNC,.dll_on = DLL_CONTROL_ON,};
@@ -124,6 +124,8 @@ static void dmc_init(struct exynos4_dmc *dmc)writel(mem.memconfig0, &dmc->memconfig0);writel(mem.memconfig1, &dmc->memconfig1);+    writel(0x8000001F, &dmc->ivcontrol);
+/* Config Precharge Policy */writel(mem.prechconfig, &dmc->prechconfig);/*
diff --git a/arch/arm/mach-exynos/exynos4_setup.h b/arch/arm/mach-exynos/exynos4_setup.h
index 38735f0..37ce464 100644
--- a/arch/arm/mach-exynos/exynos4_setup.h
+++ b/arch/arm/mach-exynos/exynos4_setup.h
@@ -505,7 +505,7 @@ struct mem_timings {#define ADD_LAT_PALL       (1 << 6)#define MEM_TYPE_DDR3     (0x6 << 8)#define MEM_WIDTH_32        (0x2 << 12)
-#define NUM_CHIP_2     (1 << 16)
+#define NUM_CHIP_2        (0 << 16)#define BL_8         (0x3 << 20)#define MEMCONTROL_VAL     (CLK_STOP_DISABLE | DPWRDN_DISABLE\| DPWRDN_TYPE | TP_DISABLE | DSREF_DIABLE\
@@ -514,16 +514,16 @@ struct mem_timings {#define CHIP_BANK_8      (0x3 << 0)
-#define CHIP_ROW_14        (0x2 << 4)
+#define CHIP_ROW_14       (0x3 << 4)#define CHIP_COL_10     (0x3 << 8)#define CHIP_MAP_INTERLEAVED    (1 << 12)
-#define CHIP_MASK      (0xe0 << 16)
+#define CHIP_MASK     (0xC0 << 16)#ifdef CONFIG_MIU_LINEAR#define CHIP0_BASE        (0x40 << 24)#define CHIP1_BASE        (0x60 << 24)#else
-#define CHIP0_BASE     (0x20 << 24)
-#define CHIP1_BASE     (0x40 << 24)
+#define CHIP0_BASE        (0x40 << 24)
+#define CHIP1_BASE        (0x80 << 24)#endif#define MEMCONFIG0_VAL      (CHIP_BANK_8 | CHIP_ROW_14 | CHIP_COL_10\| CHIP_MAP_INTERLEAVED | CHIP_MASK | CHIP0_BASE)
diff --git a/arch/arm/mach-exynos/tzpc.c b/arch/arm/mach-exynos/tzpc.c
index abe8e7f..63605d5 100644
--- a/arch/arm/mach-exynos/tzpc.c
+++ b/arch/arm/mach-exynos/tzpc.c
@@ -17,10 +17,7 @@ void tzpc_init(void)start = samsung_get_base_tzpc();-  if (cpu_is_exynos5())
-       end = start + ((EXYNOS5_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET);
-   else if (cpu_is_exynos4())
-       end = start + ((EXYNOS4_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET);
+  end = start + ((EXYNOS4_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET);for (addr = start; addr <= end; addr += TZPC_BASE_OFFSET) {tzpc = (struct exynos_tzpc *)addr;
@@ -30,11 +27,7 @@ void tzpc_init(void)writel(DECPROTXSET, &tzpc->decprot0set);writel(DECPROTXSET, &tzpc->decprot1set);
-
-       if (cpu_is_exynos5() && (addr == end))
-           break;
-
-       writel(DECPROTXSET, &tzpc->decprot2set);
+      writel(0xbd,        &tzpc->decprot2set);writel(DECPROTXSET, &tzpc->decprot3set);}}
diff --git a/include/configs/origen.h b/include/configs/origen.h
index 65e1c7c..f964456 100644
--- a/include/configs/origen.h
+++ b/include/configs/origen.h
@@ -46,7 +46,7 @@/* MMC SPL */#define COPY_BL2_FNPTR_ADDR  0x02020030
-#define CONFIG_SPL_TEXT_BASE   0x02021410
+#define CONFIG_SPL_TEXT_BASE  0x02023400#define CONFIG_EXTRA_ENV_SETTINGS \"loadaddr=0x40007000\0" \
@@ -63,21 +63,10 @@"bootscript=echo Running bootscript from mmc${mmcdev} ...; " \"source ${loadaddr}\0"#define CONFIG_BOOTCOMMAND \
-   "if mmc rescan; then " \
-       "echo SD/MMC found on device ${mmcdev};" \
-       "if run loadbootenv; then " \
-           "echo Loaded environment from ${bootenv};" \
-           "run importbootenv;" \
-       "fi;" \
-       "if test -n $uenvcmd; then " \
-           "echo Running uenvcmd ...;" \
-           "run uenvcmd;" \
-       "fi;" \
-       "if run loadbootscript; then " \
-           "run bootscript; " \
-       "fi; " \
-   "fi;" \
-   "load mmc ${mmcdev} ${loadaddr} uImage; bootm ${loadaddr} "
+  "load mmc 0 0x40007000 uImage;" \
+  "load mmc 0 0x48000000 ramdisk.img;" \
+  "load mmc 0 0x42000000 exynos4412-tiny4412.dtb;" \
+  "bootm 0x40007000 0x48000000 0x42000000"#define CONFIG_CLK_1000_400_200@@ -87,8 +76,9 @@#define CONFIG_SYS_MMC_ENV_DEV       0#define CONFIG_ENV_SIZE            (16 << 10)    /* 16 KB */#define RESERVE_BLOCK_SIZE       (512)
-#define BL1_SIZE           (16 << 10) /*16 K reserved for BL1*/
-#define CONFIG_ENV_OFFSET      (RESERVE_BLOCK_SIZE + BL1_SIZE)
+#define BL1_SIZE          (8 << 10) /*8 K reserved for BL1*/
+#define BL2_SIZE          (16 << 10)    /*16 K reserved for BL2*/
+#define CONFIG_ENV_OFFSET     (RESERVE_BLOCK_SIZE + BL1_SIZE + BL2_SIZE)#define CONFIG_SPL_MAX_FOOTPRINT    (14 * 1024)@@ -99,4 +89,12 @@#define BL2_START_OFFSET  ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)#define BL2_SIZE_BLOC_COUNT (COPY_BL2_SIZE/512)+/* uart0 debug for spl */
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_GPIO_SUPPORT
+#define CONFIG_DEBUG_UART
+#define CONFIG_DEBUG_UART_S5P
+#define CONFIG_DEBUG_UART_BASE 0x13800000    /* UART0 base address  */
+#define CONFIG_DEBUG_UART_CLOCK (100000000)    /* SCLK_UART0 is 100MHz  */
+#endif    /* __CONFIG_H */

(4)tiny4412移植uboot_2018_07相关推荐

  1. tiny4412移植uboot-2019-01(三)

    开发环境:win7 64位 +  Ubuntu16.04 64位 开发板:tiny4412ADK + S700 + 4GB eMMC + 1G DDR3 工具链:友善之臂提供的 arm-linux-g ...

  2. tiny4412搭建linux开发环境,[Tiny4412] 移植 Linux4.4 到 Tiny4412 开发板上

    一. 前言 一直以来都是基于 Linux-2.6 内核学习嵌入式,但是工作之后发现,主流的 kernel 早已经不再使用 platform device 结构去描述设备信息了,而是换成了更为简洁的 d ...

  3. tiny4412移植tslib库

    1.将tslib-1.4.tar.gz拷贝到虚拟机某个路径进行解压 2.进入解压路径tslib 3.执行#./autogen.sh 如果提示:./autogen.sh: 4: ./autogen.sh ...

  4. 移植QT到tiny4412开发板

    目录 (一) 环境准备 (二) Qt源代码下载 (三) 移植tslib库 (四)操作流程 1.解压qt源码包 2.配置编译环境 3.生成Makefile 4.编译安装 5.安装一些库用来支持 qt 6 ...

  5. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  6. u-boot移植初步尝试-tiny4412

    获取u-boot源代码 在u-boot官方网站下载uboot源码.ftp://ftp.denx.de/pub/u-boot/ 因为是第一次移植uboot,所以这里选的版本是 u-boot-2013.0 ...

  7. 基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  8. X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件

    X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件 <<<<<<<<<<<<<< ...

  9. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

最新文章

  1. android中文字中间有超链接的实现方法
  2. Xcode执行Analyze静态分析
  3. IBASE change related BDOC generation
  4. php js 图片旋转,jQuery实现可以控制图片旋转角度效果
  5. Linux C 实现一个简单的线程池
  6. Understanding The Linux Virtual Memory Manager
  7. matlab遗传算法工具箱及应用 pdf,MATLAB遗传算法工具箱及应用(雷英杰)
  8. foobar2000_为MP3/flac嵌入歌词文件/封面编辑(提供eslyric插件下载)/信息标签编辑
  9. 《硬件接入》海康威视接入及CPU性能优化思路
  10. 我的3D虚拟旅游公司的假想
  11. python py转exe逆向
  12. 基于Java+SpringBoot+Thymeleaf+Mysql在线购物网站商城系统设计实现
  13. 无法识别 移动固态硬盘_安上硬盘后不显示 千万别慌可能不是SSD坏了
  14. 机器学习算法原理与编程实践-郑捷著 读书笔记—第一章part1
  15. 数据库面试基础题之执行计划
  16. 运放_电流互感器电流检测电路
  17. pymol作图-设置label的字体
  18. 全球裁员潮,Salesforce职业能否抵御风险?
  19. uni-app 微信小程序 引入iconfont
  20. 启xin宝app的token算法破解

热门文章

  1. numpy 光速入门示例
  2. 网页游戏排行榜2010前十名
  3. PIR人体感应AC系列感应器投光灯人体感应开关等应用定制方案
  4. 微信小程序入门到实战(1)-基础知识
  5. c语言如何不用数组排序,c语言实现数组排序.docx
  6. 单选框,下拉框,复选框 的回显
  7. java获取指定格式的年月日时分秒时间
  8. 基于RV1126 Video分析-----mipi dphy模块所代表的subdev子设备注册
  9. 用python对股票进行可视化分析_股票分析 | 用Python玩玩A股股票数据分析-可视化部分...
  10. 创业知识(四):打造超强执行力团队(转载)