Files
kernel_common_drivers/include/linux/amlogic/aml_rsv.h
T
Bichao Zheng 20f5935b04 bf201: nand partition confirmation [1/1]
PD#SWPL-124386

Problem:
1. Reduce bootloader area

Solution:
1. remove ddrfip area
2. Reduce RSV to 14 blocks.
3. Reduce backup of BL2E BL2X DEVFIP to 2
4. Bootloader area reduced from 0x1600000 to 0x940000 bytes

Verify:
s4

Change-Id: I97187d33f211c7a5ab60e4cda2b369defb8363dd
Signed-off-by: Bichao Zheng <bichao.zheng@amlogic.com>
2023-06-16 20:23:48 -07:00

125 lines
3.0 KiB
C

/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __MESON_RSV_H_
#define __MESON_RSV_H_
#define CONFIG_ENV_SIZE (64 * 1024U)
#define DEFAULT_NAND_RSV_BLOCK_NUM 48
#define DEFAULT_NAND_GAP_BLOCK_NUM 4
#define DEFAULT_NAND_BBT_BLOCK_NUM 4
#define DEFAULT_NAND_ENV_BLOCK_NUM 8
#define DEFAULT_NAND_KEY_BLOCK_NUM 8
#define DEFAULT_NAND_DTB_BLOCK_NUM 4
#define DEFAULT_NAND_DDR_BLOCK_NUM 2
#define BBT_NAND_MAGIC "nbbt"
#define ENV_NAND_MAGIC "nenv"
#define KEY_NAND_MAGIC "nkey"
#define SEC_NAND_MAGIC "nsec"
#define DTB_NAND_MAGIC "ndtb"
#define NAND_BOOT_NAME "bootloader"
#define NAND_NORMAL_NAME "nandnormal"
/*define abnormal state for reserved area*/
#define POWER_ABNORMAL_FLAG 0x01
#define ECC_ABNORMAL_FLAG 0x02
enum meson_rsv_blk_cnt {
NAND_RSV_INDEX = 0,
NAND_GAP_INDEX,
NAND_BBT_INDEX,
NAND_ENV_INDEX,
NAND_KEY_INDEX,
NAND_DTB_INDEX,
NAND_RSV_END_INDEX
};
struct meson_rsv_block_t {
char para_rsv_name[32];
u32 block_cnt;
u32 index;
};
struct meson_rsv_info_t {
struct mtd_info *mtd;
struct valid_node_t *valid_node;
struct free_node_t *free_node;
unsigned int start_block;
unsigned int end_block;
unsigned int size;
char name[8];
u_char valid;
u_char init;
void *handler;
int (*read)(u_char *dest, size_t size);
int (*write)(u_char *src, size_t size);
};
struct valid_node_t {
s16 ec;
s16 phy_blk_addr;
s16 phy_page_addr;
int timestamp;
s16 status;
};
struct free_node_t {
unsigned int index;
s16 ec;
s16 phy_blk_addr;
int dirty_flag;
struct free_node_t *next;
};
struct oobinfo_t {
char name[4];//4
s16 ec;//2
unsigned timestamp:15;
unsigned status_page:1;
};
struct meson_rsv_handler_t {
struct mtd_info *mtd;
unsigned long long freenodebitmask;
struct free_node_t *free_node[DEFAULT_NAND_RSV_BLOCK_NUM];
struct meson_rsv_info_t *bbt;
struct meson_rsv_info_t *env;
struct meson_rsv_info_t *key;
struct meson_rsv_info_t *dtb;
void *priv;
};
int meson_rsv_key_read(u_char *dest, size_t size);
int meson_rsv_key_write(u_char *source, size_t size);
int meson_rsv_erase_protect(struct meson_rsv_handler_t *handler,
uint32_t block_addr);
#include<linux/cdev.h>
#define DTB_CDEV_NAME "dtb"
#define ENV_CDEV_NAME "nand_env"
struct meson_rsv_user_t {
struct meson_rsv_info_t *info;
dev_t devt;
struct cdev cdev;
struct device *dev;
struct class *cls;
/* in case crash */
struct mutex lock;
};
void meson_rsv_prase_parameter_from_dtb(struct mtd_info *mtd);
int meson_rsv_register_cdev(struct meson_rsv_info_t *info, char *name);
int meson_rsv_register_unifykey(struct meson_rsv_info_t *key);
int meson_rsv_bbt_write(u_char *source, size_t size);
int meson_rsv_init(struct mtd_info *mtd, struct meson_rsv_handler_t *handler);
int meson_rsv_check(struct meson_rsv_info_t *rsv_info);
int meson_rsv_scan(struct meson_rsv_info_t *rsv_info);
int meson_rsv_read(struct meson_rsv_info_t *rsv_info, u_char *buf);
u32 meson_rsv_get_block_cnt(enum meson_rsv_blk_cnt name);
#endif/* __MESON_RSV_H_ */