ich.h 3.0 KB
Newer Older
S
Simon Glass 已提交
1 2 3
/*
 * Copyright (c) 2011 The Chromium OS Authors.
 *
4
 * SPDX-License-Identifier:	GPL-2.0+
S
Simon Glass 已提交
5 6 7 8
 *
 * This file is derived from the flashrom project.
 */

B
Bin Meng 已提交
9 10 11
#ifndef _ICH_H_
#define _ICH_H_

S
Simon Glass 已提交
12 13 14 15 16 17 18 19 20 21 22 23 24
struct ich7_spi_regs {
	uint16_t spis;
	uint16_t spic;
	uint32_t spia;
	uint64_t spid[8];
	uint64_t _pad;
	uint32_t bbar;
	uint16_t preop;
	uint16_t optype;
	uint8_t opmenu[8];
} __packed;

struct ich9_spi_regs {
B
Bin Meng 已提交
25
	uint32_t bfpr;		/* 0x00 */
S
Simon Glass 已提交
26 27 28 29
	uint16_t hsfs;
	uint16_t hsfc;
	uint32_t faddr;
	uint32_t _reserved0;
B
Bin Meng 已提交
30 31
	uint32_t fdata[16];	/* 0x10 */
	uint32_t frap;		/* 0x50 */
S
Simon Glass 已提交
32 33
	uint32_t freg[5];
	uint32_t _reserved1[3];
B
Bin Meng 已提交
34
	uint32_t pr[5];		/* 0x74 */
S
Simon Glass 已提交
35
	uint32_t _reserved2[2];
B
Bin Meng 已提交
36
	uint8_t ssfs;		/* 0x90 */
S
Simon Glass 已提交
37
	uint8_t ssfc[3];
B
Bin Meng 已提交
38
	uint16_t preop;		/* 0x94 */
S
Simon Glass 已提交
39
	uint16_t optype;
B
Bin Meng 已提交
40
	uint8_t opmenu[8];	/* 0x98 */
S
Simon Glass 已提交
41 42
	uint32_t bbar;
	uint8_t _reserved3[12];
B
Bin Meng 已提交
43
	uint32_t fdoc;		/* 0xb0 */
S
Simon Glass 已提交
44 45
	uint32_t fdod;
	uint8_t _reserved4[8];
B
Bin Meng 已提交
46
	uint32_t afc;		/* 0xc0 */
S
Simon Glass 已提交
47 48 49
	uint32_t lvscc;
	uint32_t uvscc;
	uint8_t _reserved5[4];
B
Bin Meng 已提交
50
	uint32_t fpb;		/* 0xd0 */
S
Simon Glass 已提交
51
	uint8_t _reserved6[28];
B
Bin Meng 已提交
52
	uint32_t srdl;		/* 0xf0 */
S
Simon Glass 已提交
53
	uint32_t srdc;
54 55
	uint32_t scs;
	uint32_t bcr;
S
Simon Glass 已提交
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
} __packed;

enum {
	SPIS_SCIP =		0x0001,
	SPIS_GRANT =		0x0002,
	SPIS_CDS =		0x0004,
	SPIS_FCERR =		0x0008,
	SSFS_AEL =		0x0010,
	SPIS_LOCK =		0x8000,
	SPIS_RESERVED_MASK =	0x7ff0,
	SSFS_RESERVED_MASK =	0x7fe2
};

enum {
	SPIC_SCGO =		0x000002,
	SPIC_ACS =		0x000004,
	SPIC_SPOP =		0x000008,
	SPIC_DBC =		0x003f00,
	SPIC_DS =		0x004000,
	SPIC_SME =		0x008000,
	SSFC_SCF_MASK =		0x070000,
	SSFC_RESERVED =		0xf80000,

	/* Mask for speed byte, biuts 23:16 of SSFC */
	SSFC_SCF_33MHZ	=	0x01,
};

enum {
	HSFS_FDONE =		0x0001,
	HSFS_FCERR =		0x0002,
	HSFS_AEL =		0x0004,
	HSFS_BERASE_MASK =	0x0018,
	HSFS_BERASE_SHIFT =	3,
	HSFS_SCIP =		0x0020,
	HSFS_FDOPSS =		0x2000,
	HSFS_FDV =		0x4000,
	HSFS_FLOCKDN =		0x8000
};

enum {
	HSFC_FGO =		0x0001,
	HSFC_FCYCLE_MASK =	0x0006,
	HSFC_FCYCLE_SHIFT =	1,
	HSFC_FDBC_MASK =	0x3f00,
	HSFC_FDBC_SHIFT =	8,
	HSFC_FSMIE =		0x8000
};

enum {
	SPI_OPCODE_TYPE_READ_NO_ADDRESS =	0,
	SPI_OPCODE_TYPE_WRITE_NO_ADDRESS =	1,
	SPI_OPCODE_TYPE_READ_WITH_ADDRESS =	2,
	SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS =	3
};

enum {
	ICH_MAX_CMD_LEN		= 5,
};

struct spi_trans {
	uint8_t cmd[ICH_MAX_CMD_LEN];
	int cmd_len;
	const uint8_t *out;
	uint32_t bytesout;
	uint8_t *in;
	uint32_t bytesin;
	uint8_t type;
	uint8_t opcode;
	uint32_t offset;
};

B
Bin Meng 已提交
127 128 129
#define SPI_OPCODE_WREN		0x06
#define SPI_OPCODE_FAST_READ	0x0b

B
Bin Meng 已提交
130 131 132 133 134
enum ich_version {
	ICHV_7,
	ICHV_9,
};

B
Bin Meng 已提交
135
struct ich_spi_platdata {
B
Bin Meng 已提交
136
	enum ich_version ich_version;	/* Controller version, 7 or 9 */
B
Bin Meng 已提交
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
};

struct ich_spi_priv {
	int ichspi_lock;
	int locked;
	int opmenu;
	int menubytes;
	void *base;		/* Base of register set */
	int preop;
	int optype;
	int addr;
	int data;
	unsigned databytes;
	int status;
	int control;
	int bbar;
	int bcr;
	uint32_t *pr;		/* only for ich9 */
	int speed;		/* pointer to speed control */
	ulong max_speed;	/* Maximum bus speed in MHz */
	ulong cur_speed;	/* Current bus speed */
S
Simon Glass 已提交
158 159
	struct spi_trans trans;	/* current transaction in progress */
};
B
Bin Meng 已提交
160 161

#endif /* _ICH_H_ */