Skip to content

Commit 2e39533

Browse files
committed
Add support to detect Pine64 model based on DRAM size and make pine64_model variable available in environment.
1 parent 37c85d0 commit 2e39533

File tree

5 files changed

+52
-1
lines changed

5 files changed

+52
-1
lines changed

board/sunxi/common/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ obj-y += check_key_uart.o
3333
obj-y += debug_mode.o
3434
obj-y += key_burn.o
3535
obj-$(CONFIG_SUNXI_SERIAL) += sunxi_serial.o
36+
obj-$(CONFIG_PINE64_MODEL) += pine64_model.o
3637

3738
obj-$(CONFIG_VIDEO_SUNXI_V1) += de_v1.o
3839
obj-$(CONFIG_VIDEO_SUNXI_V2) += de_v2.o

board/sunxi/common/board_common.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "debug_mode.h"
1212
#include "sunxi_string.h"
1313
#include "sunxi_serial.h"
14+
#include "pine64_model.h"
1415
#include <fdt_support.h>
1516
#include <arisc.h>
1617

@@ -520,6 +521,9 @@ int board_late_init(void)
520521
ret = update_fdt_para_for_kernel(working_fdt);
521522
#ifdef CONFIG_SUNXI_SERIAL
522523
sunxi_set_serial_num();
524+
#endif
525+
#ifdef CONFIG_PINE64_MODEL
526+
pine64_set_model();
523527
#endif
524528
return 0;
525529
}

board/sunxi/common/pine64_model.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
#include <common.h>
3+
4+
DECLARE_GLOBAL_DATA_PTR;
5+
6+
int get_model_from_dram_size(char* model)
7+
{
8+
phys_size_t l = 512 * 1024 * 1024;
9+
puts("get Pine64 model from DRAM size\n");
10+
if (gd->ram_size > l) {
11+
puts("DRAM >512M\n");
12+
sprintf(model, "pine64-plus");
13+
} else {
14+
puts("DRAM <= 512M\n");
15+
sprintf(model, "pine64");
16+
}
17+
18+
return 0;
19+
}
20+
21+
int pine64_set_model(void)
22+
{
23+
char model[128] = {0};
24+
get_model_from_dram_size(model);
25+
26+
printf("Pine64 model: %s\n", model);
27+
if(setenv("pine64_model", model))
28+
{
29+
printf("error:set variable [pine64_model] fail\n");
30+
}
31+
return 0;
32+
}

board/sunxi/common/pine64_model.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
#ifndef PINE64_MODEL_H_H_
3+
#define PINE64_MODEL_H_H_
4+
5+
int pine64_set_model(void);
6+
7+
#endif
8+

include/configs/sun50iw1p1.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@
219219
#define CONFIG_CMD_BOOTA
220220
#define CONFIG_SUNXI_DMA
221221
#define CONFIG_CMD_MEMORY
222+
#define CONFIG_CMD_MEMINFO
222223

223224

224225
#define SUNXI_DMA_LINK_NULL (0x1ffff800)
@@ -343,14 +344,18 @@
343344
"kernel_addr=41080000\0" \
344345
"initrd_addr=45300000\0" \
345346
"kernel_filename=pine64/Image\0" \
346-
"fdt_filename=pine64/sun50i-a64-pine64-plus.dtb\0" \
347+
"fdt_filename_prefix=pine64/sun50i-a64-\0" \
348+
"fdt_filename_suffix=.dtb\0" \
347349
"initrd_filename=initrd.img\0" \
348350
"bootenv_filename=uEnv.txt\0" \
349351
"load_bootenv=" \
350352
"fatload mmc 0:1 ${load_addr} ${bootenv_filename}\0" \
351353
"import_bootenv=" \
352354
"env import -t ${load_addr} ${filesize}\0" \
353355
"load_dtb=" \
356+
"if test ${fdt_filename} = \"\"; then " \
357+
"setenv fdt_filename ${fdt_filename_prefix}${pine64_model}${fdt_filename_suffix}; " \
358+
"fi; " \
354359
"fatload mmc 0:1 ${fdt_addr} ${fdt_filename}; " \
355360
"fdt addr ${fdt_addr}; fdt resize\0" \
356361
"load_kernel=" \
@@ -417,4 +422,5 @@
417422
#define CONFIG_MMC_LOGICAL_OFFSET 0
418423
#define CONFIG_CMD_ECHO
419424

425+
#define CONFIG_PINE64_MODEL
420426
#endif /* __CONFIG_H */

0 commit comments

Comments
 (0)