blob: ae3ebd316ffa4b22db5f706c27ba589090cd3086 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*
2 ***********************************************************
3 */
4
5#include <common.h>
6#include <asm/io.h>
7#include <sdio.h>
8
9#include "efuse.h"
10
11
12
13void efuse_init(void)
14{
15 //start read efuse all 256bit
16 while((REG32(SYS_EFUSE_BASE + 0x4) & 1) == 1);// bit0=1 ctl is busy
17 REG32(SYS_EFUSE_BASE + 0x4) = 1;
18 while((REG32(SYS_EFUSE_BASE + 0x14) & 2) == 0);//bit1=0 read not over
19}
20
21int get_ddr_flag(void)
22{
23 efuse_struct *psEfuseInfo = NULL;
24 int ddr_flag = 0;
25
26
27 psEfuseInfo = (efuse_struct*)EFUSE_RAM_BASE;
28
29 /* get chip flag */
30 if(((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_GW_WINBD_256M_DDR)
31 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_ZW_WINBD_256M_DDR)
32 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_GW_UNILC_256M_DDR)
33 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_ZW_UNILC_256M_DDR)
34 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_GW_APM_256M_DDR)
35 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_ZW_APM_256M_DDR))
36 {
37 ddr_flag = CHIP_DDR_32M;
38 }
39 else if(((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_GW_UNILC_512M_DDR)
40 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_GW_APM_512M_DDR)
41 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_GW_ESMT_512M_DDR)
42 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_ZW_UNILC_512M_DDR)
43 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_AZW_UNILC_512M_DDR)
44 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_ZW_APM_512M_DDR)
45 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECO_ZW_ESMT_512M_DDR))
46 {
47 ddr_flag = CHIP_DDR_64M;
48 }
lh758261d2023-07-13 05:52:04 -070049 else if(((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECOSC_GW_NYC_2G_DDR)
xf.liaa4d92f2023-09-13 00:18:58 -070050 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECOGG_GW_NYC_2G_DDR)
51 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECOGG_GW_NYC_NOR_2G_DDR)
52 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECOSC_GW_NYC_NOR_2G_DDR))
lh9ed821d2023-04-07 01:36:19 -070053 {
54 ddr_flag = CHIP_DDR_256M;
55 }
xf.lica7c3fc2024-02-21 22:59:57 -080056 else if(((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECOSCC_GW_NYB_4G_DDR)
57 ||((psEfuseInfo->secure_flag >> 8) == ZX297520V3ECOGG_GW_NYB_4G_DDR))
58 {
59 ddr_flag = CHIP_DDR_512M;
60 }
lh9ed821d2023-04-07 01:36:19 -070061 else
62 {
63 ddr_flag = CHIP_DDR_128M;
64 }
65
66 return ddr_flag;
67}
68
69int get_secure_verify_status(void)
70{
71 u32 uiLen;
72 efuse_struct *psEfuseInfo = NULL;
73
74 if((REG32(EFUSE_BYPASS) & 1) == 1) //Secure Verify. 1->Disable, 0->Enable.
75 {
76 return SECURE_VERIFY_DISABLE;
77 }
78
79 /*
80 * 0. Èç¹ûsecure flag²»µÈÓÚ0xFF£¬Í˳ö°²È«boot¡£
81 */
82 psEfuseInfo = (efuse_struct*)EFUSE_RAM_BASE;
83 if((psEfuseInfo->secure_flag & 0xFF) != 0xFF)
84 {
85 return SECURE_VERIFY_DISABLE;
86 }
87
88 /*
89 * 1.´ÓefuseÖжÁ³öpuk_hash[127:0], ÅжÏÈç¹ûÈ«²¿Îª0Í˳ö°²È«boot¡£
90 */
91 for(uiLen = 0; uiLen < 4; uiLen++)
92 {
93 if(psEfuseInfo->puk_hash[uiLen] != 0)
94 {
95 break;
96 }
97 if(uiLen == 3)
98 {
99 return SECURE_VERIFY_DISABLE;
100 }
101 }
102 printf("SecureVerify->enable.\n");
103
104 return SECURE_VERIFY_ENABLE;
105}
106
107
108