diff options
| author | Alexey Korolev <akorolev@infradead.org> | 2008-12-16 13:13:58 -0500 |
|---|---|---|
| committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-01-05 07:55:54 -0500 |
| commit | 922ab535bbe73975ce62f71ab9bf8ec9bce71c29 (patch) | |
| tree | 03a6f81d1f6243f55ecc467db029f16aa25177db /include/linux | |
| parent | 8dc004395d5ebb028e4915645982e4434d2f4ef3 (diff) | |
[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>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mtd/qinfo.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/include/linux/mtd/qinfo.h b/include/linux/mtd/qinfo.h new file mode 100644 index 000000000000..7b3d487d8b3f --- /dev/null +++ b/include/linux/mtd/qinfo.h | |||
| @@ -0,0 +1,91 @@ | |||
| 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 | |||
