You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
mtd: rawnand: Pass a nand_chip object to chip->select_chip()
Let's make the raw NAND API consistent by patching all helpers and hooks to take a nand_chip object instead of an mtd_info one or remove the mtd_info object when both are passed. Let's tackle the chip->select_chip() hook. Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
committed by
Miquel Raynal
parent
c0739d8572
commit
758b56f58b
@@ -483,9 +483,8 @@ static int atmel_nand_dev_ready(struct mtd_info *mtd)
|
||||
return gpiod_get_value(nand->activecs->rb.gpio);
|
||||
}
|
||||
|
||||
static void atmel_nand_select_chip(struct mtd_info *mtd, int cs)
|
||||
static void atmel_nand_select_chip(struct nand_chip *chip, int cs)
|
||||
{
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct atmel_nand *nand = to_atmel_nand(chip);
|
||||
|
||||
if (cs < 0 || cs >= nand->numcs) {
|
||||
@@ -514,15 +513,15 @@ static int atmel_hsmc_nand_dev_ready(struct mtd_info *mtd)
|
||||
return status & ATMEL_HSMC_NFC_SR_RBEDGE(nand->activecs->rb.id);
|
||||
}
|
||||
|
||||
static void atmel_hsmc_nand_select_chip(struct mtd_info *mtd, int cs)
|
||||
static void atmel_hsmc_nand_select_chip(struct nand_chip *chip, int cs)
|
||||
{
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct mtd_info *mtd = nand_to_mtd(chip);
|
||||
struct atmel_nand *nand = to_atmel_nand(chip);
|
||||
struct atmel_hsmc_nand_controller *nc;
|
||||
|
||||
nc = to_hsmc_nand_controller(chip->controller);
|
||||
|
||||
atmel_nand_select_chip(mtd, cs);
|
||||
atmel_nand_select_chip(chip, cs);
|
||||
|
||||
if (!nand->activecs) {
|
||||
regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CTRL,
|
||||
|
||||
@@ -227,10 +227,10 @@ int au1550_device_ready(struct mtd_info *mtd)
|
||||
* chip needs it to be asserted during chip not ready time but the NAND
|
||||
* controller keeps it released.
|
||||
*
|
||||
* @mtd: MTD device structure
|
||||
* @this: NAND chip object
|
||||
* @chip: chipnumber to select, -1 for deselect
|
||||
*/
|
||||
static void au1550_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void au1550_select_chip(struct nand_chip *this, int chip)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -191,8 +191,8 @@ static void bcm47xxnflash_ops_bcm4706_cmd_ctrl(struct mtd_info *mtd, int cmd,
|
||||
}
|
||||
|
||||
/* Default nand_select_chip calls cmd_ctrl, which is not used in BCM4706 */
|
||||
static void bcm47xxnflash_ops_bcm4706_select_chip(struct mtd_info *mtd,
|
||||
int chip)
|
||||
static void bcm47xxnflash_ops_bcm4706_select_chip(struct nand_chip *chip,
|
||||
int cs)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -314,9 +314,8 @@ static void cafe_nand_cmdfunc(struct mtd_info *mtd, unsigned command,
|
||||
cafe_writel(cafe, cafe->ctl2, NAND_CTRL2);
|
||||
}
|
||||
|
||||
static void cafe_select_chip(struct mtd_info *mtd, int chipnr)
|
||||
static void cafe_select_chip(struct nand_chip *chip, int chipnr)
|
||||
{
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct cafe_priv *cafe = nand_get_controller_data(chip);
|
||||
|
||||
cafe_dev_dbg(&cafe->pdev->dev, "select_chip %d\n", chipnr);
|
||||
|
||||
@@ -118,9 +118,9 @@ static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd,
|
||||
iowrite8(cmd, nand->IO_ADDR_W);
|
||||
}
|
||||
|
||||
static void nand_davinci_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void nand_davinci_select_chip(struct nand_chip *nand, int chip)
|
||||
{
|
||||
struct davinci_nand_info *info = to_davinci_nand(mtd);
|
||||
struct davinci_nand_info *info = to_davinci_nand(nand_to_mtd(nand));
|
||||
|
||||
info->current_cs = info->vaddr;
|
||||
|
||||
|
||||
@@ -897,11 +897,11 @@ static int denali_write_page(struct nand_chip *chip, const uint8_t *buf,
|
||||
page, 0, 1);
|
||||
}
|
||||
|
||||
static void denali_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void denali_select_chip(struct nand_chip *chip, int cs)
|
||||
{
|
||||
struct denali_nand_info *denali = mtd_to_denali(mtd);
|
||||
struct denali_nand_info *denali = mtd_to_denali(nand_to_mtd(chip));
|
||||
|
||||
denali->active_bank = chip;
|
||||
denali->active_bank = cs;
|
||||
}
|
||||
|
||||
static int denali_waitfunc(struct mtd_info *mtd, struct nand_chip *chip)
|
||||
|
||||
@@ -85,7 +85,7 @@ static u_char empty_write_ecc[6] = { 0x4b, 0x00, 0xe2, 0x0e, 0x93, 0xf7 };
|
||||
|
||||
static void doc200x_hwcontrol(struct mtd_info *mtd, int cmd,
|
||||
unsigned int bitmask);
|
||||
static void doc200x_select_chip(struct mtd_info *mtd, int chip);
|
||||
static void doc200x_select_chip(struct nand_chip *this, int chip);
|
||||
|
||||
static int debug = 0;
|
||||
module_param(debug, int, 0);
|
||||
@@ -371,7 +371,7 @@ static uint16_t __init doc200x_ident_chip(struct mtd_info *mtd, int nr)
|
||||
struct doc_priv *doc = nand_get_controller_data(this);
|
||||
uint16_t ret;
|
||||
|
||||
doc200x_select_chip(mtd, nr);
|
||||
doc200x_select_chip(this, nr);
|
||||
doc200x_hwcontrol(mtd, NAND_CMD_READID,
|
||||
NAND_CTRL_CLE | NAND_CTRL_CHANGE);
|
||||
doc200x_hwcontrol(mtd, 0, NAND_CTRL_ALE | NAND_CTRL_CHANGE);
|
||||
@@ -559,9 +559,8 @@ static void doc2001plus_readbuf(struct nand_chip *this, u_char *buf, int len)
|
||||
printk("\n");
|
||||
}
|
||||
|
||||
static void doc2001plus_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void doc2001plus_select_chip(struct nand_chip *this, int chip)
|
||||
{
|
||||
struct nand_chip *this = mtd_to_nand(mtd);
|
||||
struct doc_priv *doc = nand_get_controller_data(this);
|
||||
void __iomem *docptr = doc->virtadr;
|
||||
int floor = 0;
|
||||
@@ -586,9 +585,9 @@ static void doc2001plus_select_chip(struct mtd_info *mtd, int chip)
|
||||
doc->curfloor = floor;
|
||||
}
|
||||
|
||||
static void doc200x_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void doc200x_select_chip(struct nand_chip *this, int chip)
|
||||
{
|
||||
struct nand_chip *this = mtd_to_nand(mtd);
|
||||
struct mtd_info *mtd = nand_to_mtd(this);
|
||||
struct doc_priv *doc = nand_get_controller_data(this);
|
||||
void __iomem *docptr = doc->virtadr;
|
||||
int floor = 0;
|
||||
|
||||
@@ -333,13 +333,12 @@ static int docg4_wait(struct mtd_info *mtd, struct nand_chip *nand)
|
||||
return status;
|
||||
}
|
||||
|
||||
static void docg4_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void docg4_select_chip(struct nand_chip *nand, int chip)
|
||||
{
|
||||
/*
|
||||
* Select among multiple cascaded chips ("floors"). Multiple floors are
|
||||
* not yet supported, so the only valid non-negative value is 0.
|
||||
*/
|
||||
struct nand_chip *nand = mtd_to_nand(mtd);
|
||||
struct docg4_priv *doc = nand_get_controller_data(nand);
|
||||
void __iomem *docptr = doc->virtadr;
|
||||
|
||||
|
||||
@@ -533,7 +533,7 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
||||
}
|
||||
}
|
||||
|
||||
static void fsl_elbc_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void fsl_elbc_select_chip(struct nand_chip *chip, int cs)
|
||||
{
|
||||
/* The hardware does not seem to support multiple
|
||||
* chips per bank.
|
||||
|
||||
@@ -509,7 +509,7 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
||||
}
|
||||
}
|
||||
|
||||
static void fsl_ifc_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void fsl_ifc_select_chip(struct nand_chip *chip, int cs)
|
||||
{
|
||||
/* The hardware does not seem to support multiple
|
||||
* chips per bank.
|
||||
|
||||
@@ -108,9 +108,9 @@ static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
|
||||
fun_wait_rnb(fun);
|
||||
}
|
||||
|
||||
static void fun_select_chip(struct mtd_info *mtd, int mchip_nr)
|
||||
static void fun_select_chip(struct nand_chip *chip, int mchip_nr)
|
||||
{
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct mtd_info *mtd = nand_to_mtd(chip);
|
||||
struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd);
|
||||
|
||||
if (mchip_nr == -1) {
|
||||
|
||||
@@ -610,9 +610,9 @@ static void fsmc_write_buf_dma(struct mtd_info *mtd, const uint8_t *buf,
|
||||
}
|
||||
|
||||
/* fsmc_select_chip - assert or deassert nCE */
|
||||
static void fsmc_select_chip(struct mtd_info *mtd, int chipnr)
|
||||
static void fsmc_select_chip(struct nand_chip *chip, int chipnr)
|
||||
{
|
||||
struct fsmc_nand_data *host = mtd_to_fsmc(mtd);
|
||||
struct fsmc_nand_data *host = mtd_to_fsmc(nand_to_mtd(chip));
|
||||
u32 pc;
|
||||
|
||||
/* Support only one CS */
|
||||
|
||||
@@ -825,9 +825,8 @@ static int gpmi_dev_ready(struct mtd_info *mtd)
|
||||
return gpmi_is_ready(this, this->current_chip);
|
||||
}
|
||||
|
||||
static void gpmi_select_chip(struct mtd_info *mtd, int chipnr)
|
||||
static void gpmi_select_chip(struct nand_chip *chip, int chipnr)
|
||||
{
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct gpmi_nand_data *this = nand_get_controller_data(chip);
|
||||
int ret;
|
||||
|
||||
@@ -1552,7 +1551,7 @@ static int gpmi_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
||||
int column, page, chipnr;
|
||||
|
||||
chipnr = (int)(ofs >> chip->chip_shift);
|
||||
chip->select_chip(mtd, chipnr);
|
||||
chip->select_chip(chip, chipnr);
|
||||
|
||||
column = !GPMI_IS_MX23(this) ? mtd->writesize : 0;
|
||||
|
||||
@@ -1565,7 +1564,7 @@ static int gpmi_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
||||
|
||||
ret = nand_prog_page_op(chip, page, column, block_mark, 1);
|
||||
|
||||
chip->select_chip(mtd, -1);
|
||||
chip->select_chip(chip, -1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1602,7 +1601,6 @@ static int mx23_check_transcription_stamp(struct gpmi_nand_data *this)
|
||||
struct boot_rom_geometry *rom_geo = &this->rom_geometry;
|
||||
struct device *dev = this->dev;
|
||||
struct nand_chip *chip = &this->nand;
|
||||
struct mtd_info *mtd = nand_to_mtd(chip);
|
||||
unsigned int search_area_size_in_strides;
|
||||
unsigned int stride;
|
||||
unsigned int page;
|
||||
@@ -1614,7 +1612,7 @@ static int mx23_check_transcription_stamp(struct gpmi_nand_data *this)
|
||||
search_area_size_in_strides = 1 << rom_geo->search_area_stride_exponent;
|
||||
|
||||
saved_chip_number = this->current_chip;
|
||||
chip->select_chip(mtd, 0);
|
||||
chip->select_chip(chip, 0);
|
||||
|
||||
/*
|
||||
* Loop through the first search area, looking for the NCB fingerprint.
|
||||
@@ -1642,7 +1640,7 @@ static int mx23_check_transcription_stamp(struct gpmi_nand_data *this)
|
||||
|
||||
}
|
||||
|
||||
chip->select_chip(mtd, saved_chip_number);
|
||||
chip->select_chip(chip, saved_chip_number);
|
||||
|
||||
if (found_an_ncb_fingerprint)
|
||||
dev_dbg(dev, "\tFound a fingerprint\n");
|
||||
@@ -1685,7 +1683,7 @@ static int mx23_write_transcription_stamp(struct gpmi_nand_data *this)
|
||||
|
||||
/* Select chip 0. */
|
||||
saved_chip_number = this->current_chip;
|
||||
chip->select_chip(mtd, 0);
|
||||
chip->select_chip(chip, 0);
|
||||
|
||||
/* Loop over blocks in the first search area, erasing them. */
|
||||
dev_dbg(dev, "Erasing the search area...\n");
|
||||
@@ -1717,7 +1715,7 @@ static int mx23_write_transcription_stamp(struct gpmi_nand_data *this)
|
||||
}
|
||||
|
||||
/* Deselect chip 0. */
|
||||
chip->select_chip(mtd, saved_chip_number);
|
||||
chip->select_chip(chip, saved_chip_number);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1766,10 +1764,10 @@ static int mx23_boot_init(struct gpmi_nand_data *this)
|
||||
byte = block << chip->phys_erase_shift;
|
||||
|
||||
/* Send the command to read the conventional block mark. */
|
||||
chip->select_chip(mtd, chipnr);
|
||||
chip->select_chip(chip, chipnr);
|
||||
nand_read_page_op(chip, page, mtd->writesize, NULL, 0);
|
||||
block_mark = chip->read_byte(chip);
|
||||
chip->select_chip(mtd, -1);
|
||||
chip->select_chip(chip, -1);
|
||||
|
||||
/*
|
||||
* Check if the block is marked bad. If so, we need to mark it
|
||||
|
||||
@@ -353,9 +353,8 @@ static int hisi_nfc_send_cmd_reset(struct hinfc_host *host, int chipselect)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hisi_nfc_select_chip(struct mtd_info *mtd, int chipselect)
|
||||
static void hisi_nfc_select_chip(struct nand_chip *chip, int chipselect)
|
||||
{
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct hinfc_host *host = nand_get_controller_data(chip);
|
||||
|
||||
if (chipselect < 0)
|
||||
|
||||
@@ -78,10 +78,9 @@ static inline struct jz_nand *mtd_to_jz_nand(struct mtd_info *mtd)
|
||||
return container_of(mtd_to_nand(mtd), struct jz_nand, chip);
|
||||
}
|
||||
|
||||
static void jz_nand_select_chip(struct mtd_info *mtd, int chipnr)
|
||||
static void jz_nand_select_chip(struct nand_chip *chip, int chipnr)
|
||||
{
|
||||
struct jz_nand *nand = mtd_to_jz_nand(mtd);
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct jz_nand *nand = mtd_to_jz_nand(nand_to_mtd(chip));
|
||||
uint32_t ctrl;
|
||||
int banknr;
|
||||
|
||||
@@ -336,14 +335,14 @@ static int jz_nand_detect_bank(struct platform_device *pdev,
|
||||
goto notfound_id;
|
||||
|
||||
/* Retrieve the IDs from the first chip. */
|
||||
chip->select_chip(mtd, 0);
|
||||
chip->select_chip(chip, 0);
|
||||
nand_reset_op(chip);
|
||||
nand_readid_op(chip, 0, id, sizeof(id));
|
||||
*nand_maf_id = id[0];
|
||||
*nand_dev_id = id[1];
|
||||
} else {
|
||||
/* Detect additional chip. */
|
||||
chip->select_chip(mtd, chipnr);
|
||||
chip->select_chip(chip, chipnr);
|
||||
nand_reset_op(chip);
|
||||
nand_readid_op(chip, 0, id, sizeof(id));
|
||||
if (*nand_maf_id != id[0] || *nand_dev_id != id[1]) {
|
||||
|
||||
@@ -71,9 +71,9 @@ static inline struct jz4780_nand_controller
|
||||
return container_of(ctrl, struct jz4780_nand_controller, controller);
|
||||
}
|
||||
|
||||
static void jz4780_nand_select_chip(struct mtd_info *mtd, int chipnr)
|
||||
static void jz4780_nand_select_chip(struct nand_chip *chip, int chipnr)
|
||||
{
|
||||
struct jz4780_nand_chip *nand = to_jz4780_nand_chip(mtd);
|
||||
struct jz4780_nand_chip *nand = to_jz4780_nand_chip(nand_to_mtd(chip));
|
||||
struct jz4780_nand_controller *nfc = to_jz4780_nand_controller(nand->chip.controller);
|
||||
struct jz4780_nand_cs *cs;
|
||||
|
||||
|
||||
@@ -701,9 +701,8 @@ static int marvell_nfc_wait_op(struct nand_chip *chip, unsigned int timeout_ms)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void marvell_nfc_select_chip(struct mtd_info *mtd, int die_nr)
|
||||
static void marvell_nfc_select_chip(struct nand_chip *chip, int die_nr)
|
||||
{
|
||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||
struct marvell_nand_chip *marvell_nand = to_marvell_nand(chip);
|
||||
struct marvell_nfc *nfc = to_marvell_nfc(chip->controller);
|
||||
u32 ndcr_generic;
|
||||
|
||||
@@ -263,8 +263,10 @@ static void mpc5121_nfc_addr_cycle(struct mtd_info *mtd, int column, int page)
|
||||
}
|
||||
|
||||
/* Control chip select signals */
|
||||
static void mpc5121_nfc_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void mpc5121_nfc_select_chip(struct nand_chip *nand, int chip)
|
||||
{
|
||||
struct mtd_info *mtd = nand_to_mtd(nand);
|
||||
|
||||
if (chip < 0) {
|
||||
nfc_clear(mtd, NFC_CONFIG1, NFC_CE);
|
||||
return;
|
||||
@@ -299,9 +301,9 @@ static int ads5121_chipselect_init(struct mtd_info *mtd)
|
||||
}
|
||||
|
||||
/* Control chips select signal on ADS5121 board */
|
||||
static void ads5121_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void ads5121_select_chip(struct nand_chip *nand, int chip)
|
||||
{
|
||||
struct nand_chip *nand = mtd_to_nand(mtd);
|
||||
struct mtd_info *mtd = nand_to_mtd(nand);
|
||||
struct mpc5121_nfc_prv *prv = nand_get_controller_data(nand);
|
||||
u8 v;
|
||||
|
||||
@@ -309,10 +311,10 @@ static void ads5121_select_chip(struct mtd_info *mtd, int chip)
|
||||
v |= 0x0F;
|
||||
|
||||
if (chip >= 0) {
|
||||
mpc5121_nfc_select_chip(mtd, 0);
|
||||
mpc5121_nfc_select_chip(nand, 0);
|
||||
v &= ~(1 << chip);
|
||||
} else
|
||||
mpc5121_nfc_select_chip(mtd, -1);
|
||||
mpc5121_nfc_select_chip(nand, -1);
|
||||
|
||||
out_8(prv->csreg, v);
|
||||
}
|
||||
|
||||
@@ -389,16 +389,15 @@ static int mtk_nfc_hw_runtime_config(struct mtd_info *mtd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mtk_nfc_select_chip(struct mtd_info *mtd, int chip)
|
||||
static void mtk_nfc_select_chip(struct nand_chip *nand, int chip)
|
||||
{
|
||||
struct nand_chip *nand = mtd_to_nand(mtd);
|
||||
struct mtk_nfc *nfc = nand_get_controller_data(nand);
|
||||
struct mtk_nfc_nand_chip *mtk_nand = to_mtk_nand(nand);
|
||||
|
||||
if (chip < 0)
|
||||
return;
|
||||
|
||||
mtk_nfc_hw_runtime_config(mtd);
|
||||
mtk_nfc_hw_runtime_config(nand_to_mtd(nand));
|
||||
|
||||
nfi_writel(nfc, mtk_nand->sels[chip], NFI_CSEL);
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ struct mxc_nand_devtype_data {
|
||||
void (*irq_control)(struct mxc_nand_host *, int);
|
||||
u32 (*get_ecc_status)(struct mxc_nand_host *);
|
||||
const struct mtd_ooblayout_ops *ooblayout;
|
||||
void (*select_chip)(struct mtd_info *mtd, int chip);
|
||||
void (*select_chip)(struct nand_chip *chip, int cs);
|
||||
int (*setup_data_interface)(struct mtd_info *mtd, int csline,
|
||||
const struct nand_data_interface *conf);
|
||||
void (*enable_hwecc)(struct nand_chip *chip, bool enable);
|
||||
@@ -957,9 +957,8 @@ static void mxc_nand_read_buf(struct nand_chip *nand_chip, u_char *buf,
|
||||
|
||||
/* This function is used by upper layer for select and
|
||||
* deselect of the NAND chip */
|
||||
static void mxc_nand_select_chip_v1_v3(struct mtd_info *mtd, int chip)
|
||||
static void mxc_nand_select_chip_v1_v3(struct nand_chip *nand_chip, int chip)
|
||||
{
|
||||
struct nand_chip *nand_chip = mtd_to_nand(mtd);
|
||||
struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
|
||||
|
||||
if (chip == -1) {
|
||||
@@ -978,9 +977,8 @@ static void mxc_nand_select_chip_v1_v3(struct mtd_info *mtd, int chip)
|
||||
}
|
||||
}
|
||||
|
||||
static void mxc_nand_select_chip_v2(struct mtd_info *mtd, int chip)
|
||||
static void mxc_nand_select_chip_v2(struct nand_chip *nand_chip, int chip)
|
||||
{
|
||||
struct nand_chip *nand_chip = mtd_to_nand(mtd);
|
||||
struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
|
||||
|
||||
if (chip == -1) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user