mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-23 23:32:30 -05:00
mtd: spi-nor: spansion: add MCP support in set_octal_dtr()
Infineon multi-chip package (MCP) devices require the Octal DTR configuraion to be set on each die. We can access to configuration registers in each die by using params->n_dice and params->vreg_offset[] populated from SFDP. Add MCP support in set_octal_dtr(). Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com> Link: https://lore.kernel.org/r/20230726075257.12985-7-tudor.ambarus@linaro.org Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
This commit is contained in:
committed by
Tudor Ambarus
parent
463d7cfd08
commit
7d896a94bf
@@ -204,17 +204,19 @@ static int cypress_nor_octal_dtr_en(struct spi_nor *nor)
|
||||
const struct spi_nor_flash_parameter *params = nor->params;
|
||||
u8 *buf = nor->bouncebuf;
|
||||
u64 addr;
|
||||
int ret;
|
||||
int i, ret;
|
||||
|
||||
addr = params->vreg_offset[0] + SPINOR_REG_CYPRESS_CFR2;
|
||||
ret = cypress_nor_set_memlat(nor, addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
for (i = 0; i < params->n_dice; i++) {
|
||||
addr = params->vreg_offset[i] + SPINOR_REG_CYPRESS_CFR2;
|
||||
ret = cypress_nor_set_memlat(nor, addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
addr = params->vreg_offset[0] + SPINOR_REG_CYPRESS_CFR5;
|
||||
ret = cypress_nor_set_octal_dtr_bits(nor, addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
addr = params->vreg_offset[i] + SPINOR_REG_CYPRESS_CFR5;
|
||||
ret = cypress_nor_set_octal_dtr_bits(nor, addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read flash ID to make sure the switch was successful. */
|
||||
ret = spi_nor_read_id(nor, nor->addr_nbytes, 3, buf,
|
||||
@@ -249,14 +251,17 @@ static int cypress_nor_set_single_spi_bits(struct spi_nor *nor, u64 addr)
|
||||
|
||||
static int cypress_nor_octal_dtr_dis(struct spi_nor *nor)
|
||||
{
|
||||
const struct spi_nor_flash_parameter *params = nor->params;
|
||||
u8 *buf = nor->bouncebuf;
|
||||
u64 addr;
|
||||
int ret;
|
||||
int i, ret;
|
||||
|
||||
addr = nor->params->vreg_offset[0] + SPINOR_REG_CYPRESS_CFR5;
|
||||
ret = cypress_nor_set_single_spi_bits(nor, addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
for (i = 0; i < params->n_dice; i++) {
|
||||
addr = params->vreg_offset[i] + SPINOR_REG_CYPRESS_CFR5;
|
||||
ret = cypress_nor_set_single_spi_bits(nor, addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read flash ID to make sure the switch was successful. */
|
||||
ret = spi_nor_read_id(nor, 0, 0, buf, SNOR_PROTO_1_1_1);
|
||||
|
||||
Reference in New Issue
Block a user