1.增加动态回收mem
This commit is contained in:
parent
27f5c29b33
commit
e8f2ea7d8f
|
@ -122,6 +122,7 @@ SRC = \
|
|||
./SrcCode/System/SysFW_Upgrade_Strg_Obj.c \
|
||||
./SrcCode/System/SysFW_Upgrade.c \
|
||||
./SrcCode/System/sys_usrmem.c \
|
||||
./SrcCode/System/mem_hotplug.c \
|
||||
./SrcCode/UIApp/UIAppObj.c \
|
||||
./SrcCode/UIApp/ExifVendor.c \
|
||||
./SrcCode/UIApp/Setup/UISetup_Exe.c \
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "comm/timer.h"
|
||||
#include <io/gpio.h>
|
||||
#include <IOCfg.h>
|
||||
#include "mem_hotplug.h"
|
||||
#if HUNTING_CAMERA_MCU == ENABLE
|
||||
#include <sf_inc.h>
|
||||
#include "sf_log.h"
|
||||
|
@ -250,6 +251,9 @@ UINT32 nvt_hdal_init(void)
|
|||
DBG_ERR("mem init fail=%d\n", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memory_hotplug();
|
||||
|
||||
ret = hd_gfx_init();
|
||||
if(ret != HD_OK) {
|
||||
DBG_ERR("gfx init fail=%d\n", ret);
|
||||
|
|
82
code/application/source/cardv/SrcCode/System/mem_hotplug.c
Executable file
82
code/application/source/cardv/SrcCode/System/mem_hotplug.c
Executable file
|
@ -0,0 +1,82 @@
|
|||
#include <stdio.h>
|
||||
#include <vendor_common.h>
|
||||
#include "mem_hotplug.h"
|
||||
#include "kwrap/debug.h"
|
||||
|
||||
#define SWAP4(x) ((((x) & 0xFF) << 24) | (((x) & 0xFF00) << 8) | (((x) & 0xFF0000) >> 8) | (((x) & 0xFF000000) >> 24))
|
||||
|
||||
static int read_fdt(const char *path, unsigned int *p_addr, unsigned int *p_size)
|
||||
{
|
||||
int fd;
|
||||
unsigned int reg[2] = {0};
|
||||
|
||||
if ((fd = open(path, O_RDONLY)) < 0) {
|
||||
printf("unable to open %s\n", path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (read(fd, reg, sizeof(reg)) != sizeof(reg)) {
|
||||
printf("unable to read reg on %s\n", path);
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
*p_addr = SWAP4(reg[0]);
|
||||
*p_size = SWAP4(reg[1]);
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_mem_range(unsigned int *p_addr, unsigned int *p_size)
|
||||
{
|
||||
unsigned int fdt_addr, fdt_size;
|
||||
unsigned int rtos_addr, rtos_size;
|
||||
// unsigned int bridge_addr, bridge_size;
|
||||
//get fdt addr and size in nvt_memory_cfg
|
||||
if (read_fdt("/sys/firmware/devicetree/base/nvt_memory_cfg/fdt/reg", &fdt_addr, &fdt_size) != 0) {
|
||||
return -1;
|
||||
}
|
||||
if (read_fdt("/sys/firmware/devicetree/base/nvt_memory_cfg/rtos/reg", &rtos_addr, &rtos_size) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if 0 /* bridge is not used */
|
||||
if (read_fdt("/sys/firmware/devicetree/base/nvt_memory_cfg/bridge/reg", &bridge_addr, &bridge_size) != 0) {
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
*p_addr = fdt_addr;
|
||||
*p_size = fdt_size + rtos_size;
|
||||
// *p_size = fdt_size + rtos_size + bridge_size;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int do_hotplug(unsigned int mem_begin, unsigned mem_size)
|
||||
{
|
||||
HD_RESULT ret=0;
|
||||
VENDOR_LINUX_MEM_HOT_PLUG desc = {0};
|
||||
desc.start_addr = mem_begin;
|
||||
desc.size = mem_size;
|
||||
ret = vendor_common_mem_set(VENDOR_COMMON_MEM_ITEM_LINUX_HOT_PLUG, &desc);
|
||||
if(ret != 0){
|
||||
printf("nvtmem_hotplug_set fail ret:%d\n", (int)ret);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
HD_RESULT memory_hotplug(void)
|
||||
{
|
||||
unsigned int mem_begin, mem_size;
|
||||
|
||||
// read memory space from bridge memory
|
||||
if (get_mem_range(&mem_begin, &mem_size) != 0) {
|
||||
return HD_ERR_INIT;
|
||||
}
|
||||
// do hotplug
|
||||
if (do_hotplug(mem_begin, mem_size) != 0) {
|
||||
return HD_ERR_SYS;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
7
code/application/source/cardv/SrcCode/System/mem_hotplug.h
Executable file
7
code/application/source/cardv/SrcCode/System/mem_hotplug.h
Executable file
|
@ -0,0 +1,7 @@
|
|||
#ifndef _MEM_HOTPLUG_H
|
||||
#define _MEM_HOTPLUG_H
|
||||
#include <hd_type.h>
|
||||
|
||||
extern HD_RESULT memory_hotplug(void);
|
||||
|
||||
#endif
|
|
@ -21,7 +21,7 @@
|
|||
};
|
||||
|
||||
/* Linux system memory region*/
|
||||
memory { device_type = "memory"; reg = <0x00000000 0x01800000 0x02000000 0x01600000>; };
|
||||
memory { device_type = "memory"; reg = <0x00000000 0x01800000 0x02800000 0x00E00000>; };
|
||||
|
||||
/* Linux setup reserved memory */
|
||||
reserved-memory {
|
||||
|
|
Loading…
Reference in New Issue
Block a user