linux-xiaomi-chiron/include/linux/mtd
Vignesh Raghavendra dcc7d3446a mtd: Add support for HyperBus memory devices
Cypress' HyperBus is Low Signal Count, High Performance Double Data Rate
Bus interface between a host system master and one or more slave
interfaces. HyperBus is used to connect microprocessor, microcontroller,
or ASIC devices with random access NOR flash memory (called HyperFlash)
or self refresh DRAM (called HyperRAM).

Its a 8-bit data bus (DQ[7:0]) with  Read-Write Data Strobe (RWDS)
signal and either Single-ended clock(3.0V parts) or Differential clock
(1.8V parts). It uses ChipSelect lines to select b/w multiple slaves.
At bus level, it follows a separate protocol described in HyperBus
specification[1].

HyperFlash follows CFI AMD/Fujitsu Extended Command Set (0x0002) similar
to that of existing parallel NORs. Since HyperBus is x8 DDR bus,
its equivalent to x16 parallel NOR flash with respect to bits per clock
cycle. But HyperBus operates at >166MHz frequencies.
HyperRAM provides direct random read/write access to flash memory
array.

But, HyperBus memory controllers seem to abstract implementation details
and expose a simple MMIO interface to access connected flash.

Add support for registering HyperFlash devices with MTD framework. MTD
maps framework along with CFI chip support framework are used to support
communicating with flash.

Framework is modelled along the lines of spi-nor framework. HyperBus
memory controller (HBMC) drivers calls hyperbus_register_device() to
register a single HyperFlash device. HyperFlash core parses MMIO access
information from DT, sets up the map_info struct, probes CFI flash and
registers it with MTD framework.

Some HBMC masters need calibration/training sequence[3] to be carried
out, in order for DLL inside the controller to lock, by reading a known
string/pattern. This is done by repeatedly reading CFI Query
Identification String. Calibration needs to be done before trying to detect
flash as part of CFI flash probe.

HyperRAM is not supported at the moment.

HyperBus specification can be found at[1]
HyperFlash datasheet can be found at[2]

[1] https://www.cypress.com/file/213356/download
[2] https://www.cypress.com/file/213346/download
[3] http://www.ti.com/lit/ug/spruid7b/spruid7b.pdf
    Table 12-5741. HyperFlash Access Sequence

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2019-06-27 19:47:58 +02:00
..
bbm.h mtd: nand: Cleanup flags and fields for bad block marker position 2019-04-18 08:54:07 +02:00
blktrans.h mtd_blkdevs: convert to blk-mq 2018-10-16 08:09:58 -06:00
cfi.h mtd: cfi_cmdset_0002: Add support for polling status register 2019-06-27 19:47:45 +02:00
cfi_endian.h
concat.h
doc2000.h
flashchip.h mtd: cfi: cmdset_0001: Do not allow read/write to suspend erase block. 2018-04-24 17:41:18 +02:00
ftl.h
gen_probe.h
hyperbus.h mtd: Add support for HyperBus memory devices 2019-06-27 19:47:58 +02:00
inftl.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
jedec.h mtd: rawnand: Move JEDEC code to nand_jedec.c 2018-10-03 11:12:25 +02:00
latch-addr-flash.h
lpc32xx_mlc.h
lpc32xx_slc.h
map.h mtd: Fix comparison in map_word_andequal() 2018-05-14 14:46:20 +02:00
mtd.h Char/Misc driver patches for 4.21-rc1 2018-12-28 20:54:57 -08:00
mtdram.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
nand-gpio.h This pull request contains the following core changes: 2017-11-22 20:46:06 -10:00
nand.h mtd: nand: Add a helper to retrieve the number of pages per target 2019-04-08 10:21:09 +02:00
nand_bch.h mtd: nand: Clarify Kconfig entry for software BCH ECC algorithm 2019-04-18 08:54:00 +02:00
nand_ecc.h mtd: rawnand: Allow selection of ECC byte ordering at runtime 2018-10-03 11:12:25 +02:00
ndfc.h mtd: nand: Get rid of comments giving the file path inside the file itself 2018-02-16 10:08:27 +01:00
nftl.h
onenand.h mtd: onenand: Store bad block marker position in chip struct 2019-04-18 08:54:07 +02:00
onenand_regs.h
onfi.h mtd: rawnand: Move ONFI code to nand_onfi.c 2018-10-03 11:12:25 +02:00
partitions.h mtd: partitions: add of_match_table parser matching for the "ofpart" type 2018-03-27 09:10:48 +02:00
pfow.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
physmap.h
pismo.h
plat-ram.h
platnand.h mtd: rawnand: Move platform_nand_xxx definitions out of rawnand.h 2018-10-03 11:12:25 +02:00
qinfo.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rawnand.h mtd: nand: Make flags for bad block marker position more granular 2019-04-18 08:54:07 +02:00
sh_flctl.h mtd: rawnand: sh_flctl: convert to SPDX identifiers 2018-11-13 09:32:04 +01:00
sharpsl.h Merge branch 'nand/rename-header-file' of git://git.infradead.org/l2-mtd into nand/next 2017-08-23 17:00:12 +02:00
spear_smi.h
spi-nor.h mtd: spi-nor: Fix wrong abbreviation HWCPAS 2019-02-21 08:58:40 +01:00
spinand.h mtd: spinand: Use the spi-mem dirmap API 2019-03-21 16:44:51 +01:00
super.h
ubi.h
xip.h mtd: only use __xipram annotation when XIP_KERNEL is set 2017-08-15 14:00:44 +02:00