Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[MTD] LPDDR QINFO records definitions

There are declaraton of structures and macros definitions
necessary for operations with QINFO in this patch.

Signed-off-by: Alexey Korolev <akorolev@infradead.org>
Acked-by: Jared Hulbert <jaredeh@gmail.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

authored by

Alexey Korolev and committed by
David Woodhouse
922ab535 8dc00439

+91
+91
include/linux/mtd/qinfo.h
··· 1 + #ifndef __LINUX_MTD_QINFO_H 2 + #define __LINUX_MTD_QINFO_H 3 + 4 + #include <linux/mtd/map.h> 5 + #include <linux/wait.h> 6 + #include <linux/spinlock.h> 7 + #include <linux/delay.h> 8 + #include <linux/mtd/mtd.h> 9 + #include <linux/mtd/flashchip.h> 10 + #include <linux/mtd/partitions.h> 11 + 12 + /* lpddr_private describes lpddr flash chip in memory map 13 + * @ManufactId - Chip Manufacture ID 14 + * @DevId - Chip Device ID 15 + * @qinfo - pointer to qinfo records describing the chip 16 + * @numchips - number of chips including virual RWW partitions 17 + * @chipshift - Chip/partiton size 2^chipshift 18 + * @chips - per-chip data structure 19 + */ 20 + struct lpddr_private { 21 + uint16_t ManufactId; 22 + uint16_t DevId; 23 + struct qinfo_chip *qinfo; 24 + int numchips; 25 + unsigned long chipshift; 26 + struct flchip chips[0]; 27 + }; 28 + 29 + /* qinfo_query_info structure contains request information for 30 + * each qinfo record 31 + * @major - major number of qinfo record 32 + * @major - minor number of qinfo record 33 + * @id_str - descriptive string to access the record 34 + * @desc - detailed description for the qinfo record 35 + */ 36 + struct qinfo_query_info { 37 + uint8_t major; 38 + uint8_t minor; 39 + char *id_str; 40 + char *desc; 41 + }; 42 + 43 + /* 44 + * qinfo_chip structure contains necessary qinfo records data 45 + * @DevSizeShift - Device size 2^n bytes 46 + * @BufSizeShift - Program buffer size 2^n bytes 47 + * @TotalBlocksNum - Total number of blocks 48 + * @UniformBlockSizeShift - Uniform block size 2^UniformBlockSizeShift bytes 49 + * @HWPartsNum - Number of hardware partitions 50 + * @SuspEraseSupp - Suspend erase supported 51 + * @SingleWordProgTime - Single word program 2^SingleWordProgTime u-sec 52 + * @ProgBufferTime - Program buffer write 2^ProgBufferTime u-sec 53 + * @BlockEraseTime - Block erase 2^BlockEraseTime m-sec 54 + */ 55 + struct qinfo_chip { 56 + /* General device info */ 57 + uint16_t DevSizeShift; 58 + uint16_t BufSizeShift; 59 + /* Erase block information */ 60 + uint16_t TotalBlocksNum; 61 + uint16_t UniformBlockSizeShift; 62 + /* Partition information */ 63 + uint16_t HWPartsNum; 64 + /* Optional features */ 65 + uint16_t SuspEraseSupp; 66 + /* Operation typical time */ 67 + uint16_t SingleWordProgTime; 68 + uint16_t ProgBufferTime; 69 + uint16_t BlockEraseTime; 70 + }; 71 + 72 + /* defines for fixup usage */ 73 + #define LPDDR_MFR_ANY 0xffff 74 + #define LPDDR_ID_ANY 0xffff 75 + #define NUMONYX_MFGR_ID 0x0089 76 + #define R18_DEVICE_ID_1G 0x893c 77 + 78 + static inline map_word lpddr_build_cmd(u_long cmd, struct map_info *map) 79 + { 80 + map_word val = { {0} }; 81 + val.x[0] = cmd; 82 + return val; 83 + } 84 + 85 + #define CMD(x) lpddr_build_cmd(x, map) 86 + #define CMDVAL(cmd) cmd.x[0] 87 + 88 + struct mtd_info *lpddr_cmdset(struct map_info *); 89 + 90 + #endif 91 +