3 #include <linux/types.h>
4 #include <asm/arch/bits.h>
5 #include <linux/string.h>
6 #include <linux/mtd/mtd.h>
7 #include <linux/mtd/nand.h>
11 #define MTDPARTS_MAXLEN (512)
12 #define PARTITION_NAME_LEN (20)
13 #define UNDEFINE_PARTITION_LEN (0xffffffff)
15 typedef struct _MTD_PARTITION_STRUCT
17 unsigned char name[PARTITION_NAME_LEN];
18 unsigned long size; /* KiB */
22 #ifndef MTDPARTS_DEFAULT
23 static unsigned long nandsize = 0;
25 unsigned char mtdpartbuffer[MTDPARTS_MAXLEN] = "mtdparts=sprd-nand:256k(spl),512k(2ndbl),256k(params),512k(vmjaluna),10m(modem),3840k(fixnv),3840k(backupfixnv),5120k(dsp),3840k(runtimenv),10m(boot),10m(recovery),250m(system),180m(userdata),20m(cache),256k(misc),1m(boot_logo),1m(fastboot_logo),3840k(productinfo),512k(kpanic)";
27 static MTD_PARTITION_T mtd_partition_cfg[] = {
34 {"backupfixnv", 3840},
38 {"recovery", 10 * 1024},
39 {"system", 250 * 1024},
40 {"userdata", UNDEFINE_PARTITION_LEN},
41 {"cache", UNDEFINE_PARTITION_LEN},
43 {"boot_logo", 1 * 1024},
44 {"fastboot_logo", 1 * 1024},
45 {"productinfo", 3840},
50 void create_mtdpart_buffer(unsigned long nandsize, unsigned long realsize)
53 unsigned long str_len;
56 while (strcmp((char *)mtd_partition_cfg[i].name, "cache") != 0)
59 if (nandsize <= (512 * 1024))
60 mtd_partition_cfg[i].size = 20 * 1024;
61 else if (nandsize <= (1024 * 1024))
62 mtd_partition_cfg[i].size = 130 * 1024;
63 realsize += mtd_partition_cfg[i].size;
66 while (strcmp((char *)mtd_partition_cfg[i].name, "userdata") != 0)
69 if (nandsize <= (512 * 1024))
70 mtd_partition_cfg[i].size = 180 * 1024; /* 180 MiB */
71 else if (nandsize <= (1024 * 1024))
72 mtd_partition_cfg[i].size = (nandsize - realsize) / 1024 * 1024; /* allign to MiB */
75 /*while (mtd_partition_cfg[i].size) {
76 printf("i = %d name = %s size = %d\n", i, mtd_partition_cfg[i].name, mtd_partition_cfg[i].size);
80 memset(mtdpartbuffer, 0, MTDPARTS_MAXLEN);
81 sprintf((char *)mtdpartbuffer, "mtdparts=sprd-nand:");
82 str_len = strlen((char *)mtdpartbuffer);
84 while (mtd_partition_cfg[i].size) {
85 sprintf((char *)&mtdpartbuffer[str_len], "%luk(%s),", mtd_partition_cfg[i].size, (char *)mtd_partition_cfg[i].name);
86 str_len = strlen((char *)mtdpartbuffer);
89 str_len = strlen((char *)mtdpartbuffer);
90 mtdpartbuffer[str_len - 1] = '\0'; /* delete the last , */
93 char *get_mtdparts(void)
95 #if defined(MTDPARTS_DEFAULT)
96 return MTDPARTS_DEFAULT;
98 unsigned long i, realsize;
101 for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
102 nandsize += nand_info[i].size; /* Bytes */
104 nandsize = nandsize / 1024; /* KiB */
108 while (mtd_partition_cfg[i].size) {
109 if (mtd_partition_cfg[i].size != UNDEFINE_PARTITION_LEN)
110 realsize += mtd_partition_cfg[i].size;
114 if (realsize >= nandsize)
115 printf("\nmtd_partition_cfg error, use default mtd partition table\n");
117 create_mtdpart_buffer(nandsize, realsize);
118 } /* if (nandsize == 0) */
120 return mtdpartbuffer;
124 int get_cal_enum_ms(void)
126 return CALIBRATE_ENUM_MS;
128 int get_cal_io_ms(void)
130 return CALIBRATE_IO_MS;
132 unsigned int get_bat_low_level(void)
136 unsigned int get_bat_low_level_chg(void)
138 return LOW_BAT_VOL_CHG;
142 unsigned int get_pwr_key_cnt(void)
144 #if defined(CONFIG_FPGA)
147 return PWR_KEY_DETECT_CNT;
151 unsigned int get_alarm_lead_set(void)
153 return ALARM_LEAD_SET_MS;