Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293/* SPDX-License-Identifier: GPL-2.0 */#ifndef __LINUX_MTD_QINFO_H#define __LINUX_MTD_QINFO_H
#include <linux/mtd/map.h>#include <linux/wait.h>#include <linux/spinlock.h>#include <linux/delay.h>#include <linux/mtd/mtd.h>#include <linux/mtd/flashchip.h>#include <linux/mtd/partitions.h>
/* lpddr_private describes lpddr flash chip in memory map * @ManufactId - Chip Manufacture ID * @DevId - Chip Device ID * @qinfo - pointer to qinfo records describing the chip * @numchips - number of chips including virual RWW partitions * @chipshift - Chip/partition size 2^chipshift * @chips - per-chip data structure */struct lpddr_private { uint16_t ManufactId; uint16_t DevId; struct qinfo_chip *qinfo; int numchips; unsigned long chipshift; struct flchip chips[] __counted_by(numchips);};
/* qinfo_query_info structure contains request information for * each qinfo record * @major - major number of qinfo record * @major - minor number of qinfo record * @id_str - descriptive string to access the record * @desc - detailed description for the qinfo record */struct qinfo_query_info { uint8_t major; uint8_t minor; char *id_str; char *desc;};
/* * qinfo_chip structure contains necessary qinfo records data * @DevSizeShift - Device size 2^n bytes * @BufSizeShift - Program buffer size 2^n bytes * @TotalBlocksNum - Total number of blocks * @UniformBlockSizeShift - Uniform block size 2^UniformBlockSizeShift bytes * @HWPartsNum - Number of hardware partitions * @SuspEraseSupp - Suspend erase supported * @SingleWordProgTime - Single word program 2^SingleWordProgTime u-sec * @ProgBufferTime - Program buffer write 2^ProgBufferTime u-sec * @BlockEraseTime - Block erase 2^BlockEraseTime m-sec */struct qinfo_chip { /* General device info */ uint16_t DevSizeShift; uint16_t BufSizeShift; /* Erase block information */ uint16_t TotalBlocksNum; uint16_t UniformBlockSizeShift; /* Partition information */ uint16_t HWPartsNum; /* Optional features */ uint16_t SuspEraseSupp; /* Operation typical time */ uint16_t SingleWordProgTime; uint16_t ProgBufferTime; uint16_t BlockEraseTime;};
/* defines for fixup usage */#define LPDDR_MFR_ANY 0xffff#define LPDDR_ID_ANY 0xffff#define NUMONYX_MFGR_ID 0x0089#define R18_DEVICE_ID_1G 0x893c
static inline map_word lpddr_build_cmd(u_long cmd, struct map_info *map){ map_word val = { {0} }; val.x[0] = cmd; return val;}
#define CMD(x) lpddr_build_cmd(x, map)#define CMDVAL(cmd) cmd.x[0]
struct mtd_info *lpddr_cmdset(struct map_info *);
#endif