cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

qinfo.h (2530B)


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