History

mtd: rawnand: Hide the chip->data_interface indirection

As a preparation for allocating the data interface structure dynamically (and rename it), let's avoid accessing chip->data_interface directly. Instead, we introduce a helper, nand_get_interface_config(), and use it to retrieve the current data interface configuration out of a nand_chip object.

Miquel Raynal committed 6 years ago

Commit e0160cd1 parent d1bfe1e8 files · +45 −28Browse files

Unified · Split

8 files
  1. drivers/mtd/nand/raw/marvell_nand.c +6 −3
  2. drivers/mtd/nand/raw/meson_nand.c +4 −4
  3. drivers/mtd/nand/raw/nand_base.c +17 −17
  4. drivers/mtd/nand/raw/nand_legacy.c +4 −1
  5. drivers/mtd/nand/raw/nand_toshiba.c +1 −1
  6. drivers/mtd/nand/raw/stm32_fmc2_nand.c +1 −1
  7. drivers/mtd/nand/raw/tango_nand.c +1 −1
  8. include/linux/mtd/rawnand.h +11 −0
drivers/mtd/nand/raw/marvell_nand.c+6−3
@@ -1096,6 +1096,8 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip, · 1095 unmodified lines
10961096 const u8 *oob_buf, bool raw,
10971097 int page)
10981098 {
1099+ const struct nand_sdr_timings *sdr =
1100+ nand_get_sdr_timings(nand_get_interface_config(chip));
10991101 struct marvell_nand_chip *marvell_nand = to_marvell_nand(chip);
11001102 struct marvell_nfc *nfc = to_marvell_nfc(chip->controller);
11011103 const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout;
@@ -1141,7 +1143,7 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip, · 39 unmodified lines
11411143 return ret;
11421144
11431145 ret = marvell_nfc_wait_op(chip,
1144− PSEC_TO_MSEC(chip->data_interface.timings.sdr.tPROG_max));
1146+ PSEC_TO_MSEC(sdr->tPROG_max));
11451147 return ret;
11461148 }
11471149
@@ -1562,6 +1564,8 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip, · 414 unmodified lines
15621564 const u8 *buf,
15631565 int oob_required, int page)
15641566 {
1567+ const struct nand_sdr_timings *sdr =
1568+ nand_get_sdr_timings(nand_get_interface_config(chip));
15651569 struct mtd_info *mtd = nand_to_mtd(chip);
15661570 const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout;
15671571 const u8 *data = buf;
@@ -1598,8 +1602,7 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip, · 30 unmodified lines
15981602 marvell_nfc_wait_ndrun(chip);
15991603 }
16001604
1601− ret = marvell_nfc_wait_op(chip,
1602− PSEC_TO_MSEC(chip->data_interface.timings.sdr.tPROG_max));
1605+ ret = marvell_nfc_wait_op(chip, PSEC_TO_MSEC(sdr->tPROG_max));
16031606
16041607 marvell_nfc_disable_hw_ecc(chip);
16051608
drivers/mtd/nand/raw/meson_nand.c+4−4
@@ -573,10 +573,10 @@ static int meson_nfc_write_buf(struct nand_chip *nand, u8 *buf, int len) · 572 unmodified lines
573573 static int meson_nfc_rw_cmd_prepare_and_execute(struct nand_chip *nand,
574574 int page, bool in)
575575 {
576+ const struct nand_sdr_timings *sdr =
577+ nand_get_sdr_timings(nand_get_interface_config(nand));
576578 struct mtd_info *mtd = nand_to_mtd(nand);
577579 struct meson_nfc *nfc = nand_get_controller_data(nand);
578− const struct nand_sdr_timings *sdr =
579− nand_get_sdr_timings(&nand->data_interface);
580580 u32 *addrs = nfc->cmdfifo.rw.addrs;
581581 u32 cs = nfc->param.chip_select;
582582 u32 cmd0, cmd_num, row_start;
@@ -626,9 +626,9 @@ static int meson_nfc_rw_cmd_prepare_and_execute(struct nand_chip *nand, · 43 unmodified lines
626626 static int meson_nfc_write_page_sub(struct nand_chip *nand,
627627 int page, int raw)
628628 {
629− struct mtd_info *mtd = nand_to_mtd(nand);
630629 const struct nand_sdr_timings *sdr =
631− nand_get_sdr_timings(&nand->data_interface);
630+ nand_get_sdr_timings(nand_get_interface_config(nand));
631+ struct mtd_info *mtd = nand_to_mtd(nand);
632632 struct meson_nfc_nand_chip *meson_chip = to_meson_nand(nand);
633633 struct meson_nfc *nfc = nand_get_controller_data(nand);
634634 int data_len, info_len;
drivers/mtd/nand/raw/nand_base.c+17−17
@@ -773,7 +773,7 @@ int nand_soft_waitrdy(struct nand_chip *chip, unsigned long timeout_ms) · 772 unmodified lines
773773 return -ENOTSUPP;
774774
775775 /* Wait tWB before polling the STATUS reg. */
776− timings = nand_get_sdr_timings(&chip->data_interface);
776+ timings = nand_get_sdr_timings(nand_get_interface_config(chip));
777777 ndelay(PSEC_TO_NSEC(timings->tWB_max));
778778
779779 ret = nand_status_op(chip, NULL);
@@ -1119,9 +1119,9 @@ static int nand_sp_exec_read_page_op(struct nand_chip *chip, unsigned int page, · 339 unmodified lines
11191119 unsigned int offset_in_page, void *buf,
11201120 unsigned int len)
11211121 {
1122− struct mtd_info *mtd = nand_to_mtd(chip);
11231122 const struct nand_sdr_timings *sdr =
1124− nand_get_sdr_timings(&chip->data_interface);
1123+ nand_get_sdr_timings(nand_get_interface_config(chip));
1124+ struct mtd_info *mtd = nand_to_mtd(chip);
11251125 u8 addrs[4];
11261126 struct nand_op_instr instrs[] = {
11271127 NAND_OP_CMD(NAND_CMD_READ0, 0),
@@ -1163,7 +1163,7 @@ static int nand_lp_exec_read_page_op(struct nand_chip *chip, unsigned int page, · 35 unmodified lines
11631163 unsigned int len)
11641164 {
11651165 const struct nand_sdr_timings *sdr =
1166− nand_get_sdr_timings(&chip->data_interface);
1166+ nand_get_sdr_timings(nand_get_interface_config(chip));
11671167 u8 addrs[5];
11681168 struct nand_op_instr instrs[] = {
11691169 NAND_OP_CMD(NAND_CMD_READ0, 0),
@@ -1260,7 +1260,7 @@ int nand_read_param_page_op(struct nand_chip *chip, u8 page, void *buf, · 90 unmodified lines
12601260
12611261 if (nand_has_exec_op(chip)) {
12621262 const struct nand_sdr_timings *sdr =
1263− nand_get_sdr_timings(&chip->data_interface);
1263+ nand_get_sdr_timings(nand_get_interface_config(chip));
12641264 struct nand_op_instr instrs[] = {
12651265 NAND_OP_CMD(NAND_CMD_PARAM, 0),
12661266 NAND_OP_ADDR(1, &page, PSEC_TO_NSEC(sdr->tWB_max)),
@@ -1315,7 +1315,7 @@ int nand_change_read_column_op(struct nand_chip *chip, · 48 unmodified lines
13151315
13161316 if (nand_has_exec_op(chip)) {
13171317 const struct nand_sdr_timings *sdr =
1318− nand_get_sdr_timings(&chip->data_interface);
1318+ nand_get_sdr_timings(nand_get_interface_config(chip));
13191319 u8 addrs[2] = {};
13201320 struct nand_op_instr instrs[] = {
13211321 NAND_OP_CMD(NAND_CMD_RNDOUT, 0),
@@ -1389,9 +1389,9 @@ static int nand_exec_prog_page_op(struct nand_chip *chip, unsigned int page, · 67 unmodified lines
13891389 unsigned int offset_in_page, const void *buf,
13901390 unsigned int len, bool prog)
13911391 {
1392− struct mtd_info *mtd = nand_to_mtd(chip);
13931392 const struct nand_sdr_timings *sdr =
1394− nand_get_sdr_timings(&chip->data_interface);
1393+ nand_get_sdr_timings(nand_get_interface_config(chip));
1394+ struct mtd_info *mtd = nand_to_mtd(chip);
13951395 u8 addrs[5] = {};
13961396 struct nand_op_instr instrs[] = {
13971397 /*
@@ -1514,7 +1514,7 @@ int nand_prog_page_end_op(struct nand_chip *chip) · 116 unmodified lines
15141514
15151515 if (nand_has_exec_op(chip)) {
15161516 const struct nand_sdr_timings *sdr =
1517− nand_get_sdr_timings(&chip->data_interface);
1517+ nand_get_sdr_timings(nand_get_interface_config(chip));
15181518 struct nand_op_instr instrs[] = {
15191519 NAND_OP_CMD(NAND_CMD_PAGEPROG,
15201520 PSEC_TO_NSEC(sdr->tWB_max)),
@@ -1621,7 +1621,7 @@ int nand_change_write_column_op(struct nand_chip *chip, · 100 unmodified lines
16211621
16221622 if (nand_has_exec_op(chip)) {
16231623 const struct nand_sdr_timings *sdr =
1624− nand_get_sdr_timings(&chip->data_interface);
1624+ nand_get_sdr_timings(nand_get_interface_config(chip));
16251625 u8 addrs[2];
16261626 struct nand_op_instr instrs[] = {
16271627 NAND_OP_CMD(NAND_CMD_RNDIN, 0),
@@ -1676,7 +1676,7 @@ int nand_readid_op(struct nand_chip *chip, u8 addr, void *buf, · 48 unmodified lines
16761676
16771677 if (nand_has_exec_op(chip)) {
16781678 const struct nand_sdr_timings *sdr =
1679− nand_get_sdr_timings(&chip->data_interface);
1679+ nand_get_sdr_timings(nand_get_interface_config(chip));
16801680 struct nand_op_instr instrs[] = {
16811681 NAND_OP_CMD(NAND_CMD_READID, 0),
16821682 NAND_OP_ADDR(1, &addr, PSEC_TO_NSEC(sdr->tADL_min)),
@@ -1715,7 +1715,7 @@ int nand_status_op(struct nand_chip *chip, u8 *status) · 32 unmodified lines
17151715 {
17161716 if (nand_has_exec_op(chip)) {
17171717 const struct nand_sdr_timings *sdr =
1718− nand_get_sdr_timings(&chip->data_interface);
1718+ nand_get_sdr_timings(nand_get_interface_config(chip));
17191719 struct nand_op_instr instrs[] = {
17201720 NAND_OP_CMD(NAND_CMD_STATUS,
17211721 PSEC_TO_NSEC(sdr->tADL_min)),
@@ -1784,7 +1784,7 @@ int nand_erase_op(struct nand_chip *chip, unsigned int eraseblock) · 62 unmodified lines
17841784
17851785 if (nand_has_exec_op(chip)) {
17861786 const struct nand_sdr_timings *sdr =
1787− nand_get_sdr_timings(&chip->data_interface);
1787+ nand_get_sdr_timings(nand_get_interface_config(chip));
17881788 u8 addrs[3] = { page, page >> 8, page >> 16 };
17891789 struct nand_op_instr instrs[] = {
17901790 NAND_OP_CMD(NAND_CMD_ERASE1, 0),
@@ -1843,7 +1843,7 @@ static int nand_set_features_op(struct nand_chip *chip, u8 feature, · 52 unmodified lines
18431843
18441844 if (nand_has_exec_op(chip)) {
18451845 const struct nand_sdr_timings *sdr =
1846− nand_get_sdr_timings(&chip->data_interface);
1846+ nand_get_sdr_timings(nand_get_interface_config(chip));
18471847 struct nand_op_instr instrs[] = {
18481848 NAND_OP_CMD(NAND_CMD_SET_FEATURES, 0),
18491849 NAND_OP_ADDR(1, &feature, PSEC_TO_NSEC(sdr->tADL_min)),
@@ -1890,7 +1890,7 @@ static int nand_get_features_op(struct nand_chip *chip, u8 feature, · 40 unmodified lines
18901890
18911891 if (nand_has_exec_op(chip)) {
18921892 const struct nand_sdr_timings *sdr =
1893− nand_get_sdr_timings(&chip->data_interface);
1893+ nand_get_sdr_timings(nand_get_interface_config(chip));
18941894 struct nand_op_instr instrs[] = {
18951895 NAND_OP_CMD(NAND_CMD_GET_FEATURES, 0),
18961896 NAND_OP_ADDR(1, &feature, PSEC_TO_NSEC(sdr->tWB_max)),
@@ -1947,7 +1947,7 @@ int nand_reset_op(struct nand_chip *chip) · 50 unmodified lines
19471947 {
19481948 if (nand_has_exec_op(chip)) {
19491949 const struct nand_sdr_timings *sdr =
1950− nand_get_sdr_timings(&chip->data_interface);
1950+ nand_get_sdr_timings(nand_get_interface_config(chip));
19511951 struct nand_op_instr instrs[] = {
19521952 NAND_OP_CMD(NAND_CMD_RESET, PSEC_TO_NSEC(sdr->tWB_max)),
19531953 NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tRST_max), 0),
@@ -3226,7 +3226,7 @@ static void nand_wait_readrdy(struct nand_chip *chip) · 1272 unmodified lines
32263226 if (!(chip->options & NAND_NEED_READRDY))
32273227 return;
32283228
3229− sdr = nand_get_sdr_timings(&chip->data_interface);
3229+ sdr = nand_get_sdr_timings(nand_get_interface_config(chip));
32303230 WARN_ON(nand_wait_rdy_op(chip, PSEC_TO_MSEC(sdr->tR_max), 0));
32313231 }
32323232
drivers/mtd/nand/raw/nand_legacy.c+4−1
@@ -354,6 +354,9 @@ static void nand_command(struct nand_chip *chip, unsigned int command, · 353 unmodified lines
354354
355355 static void nand_ccs_delay(struct nand_chip *chip)
356356 {
357+ const struct nand_sdr_timings *sdr =
358+ nand_get_sdr_timings(nand_get_interface_config(chip));
359+
357360 /*
358361 * The controller already takes care of waiting for tCCS when the RNDIN
359362 * or RNDOUT command is sent, return directly.
@@ -366,7 +369,7 @@ static void nand_ccs_delay(struct nand_chip *chip) · 6 unmodified lines
366369 * (which should be safe for all NANDs).
367370 */
368371 if (nand_controller_can_setup_data_iface(chip))
369− ndelay(chip->data_interface.timings.sdr.tCCS_min / 1000);
372+ ndelay(sdr->tCCS_min / 1000);
370373 else
371374 ndelay(500);
372375 }
drivers/mtd/nand/raw/nand_toshiba.c+1−1
@@ -33,7 +33,7 @@ static int toshiba_nand_benand_read_eccstatus_op(struct nand_chip *chip, · 32 unmodified lines
3333
3434 if (nand_has_exec_op(chip)) {
3535 const struct nand_sdr_timings *sdr =
36− nand_get_sdr_timings(&chip->data_interface);
36+ nand_get_sdr_timings(nand_get_interface_config(chip));
3737 struct nand_op_instr instrs[] = {
3838 NAND_OP_CMD(TOSHIBA_NAND_CMD_ECC_STATUS_READ,
3939 PSEC_TO_NSEC(sdr->tADL_min)),
drivers/mtd/nand/raw/stm32_fmc2_nand.c+1−1
@@ -1308,7 +1308,7 @@ static int stm32_fmc2_nfc_waitrdy(struct nand_chip *chip, · 1307 unmodified lines
13081308 dev_warn(nfc->dev, "Waitrdy timeout\n");
13091309
13101310 /* Wait tWB before R/B# signal is low */
1311− timings = nand_get_sdr_timings(&chip->data_interface);
1311+ timings = nand_get_sdr_timings(nand_get_interface_config(chip));
13121312 ndelay(PSEC_TO_NSEC(timings->tWB_max));
13131313
13141314 /* R/B# signal is low, clear high level flag */
drivers/mtd/nand/raw/tango_nand.c+1−1
@@ -336,7 +336,7 @@ static int tango_write_page(struct nand_chip *chip, const u8 *buf, · 335 unmodified lines
336336 if (err)
337337 return err;
338338
339− timings = nand_get_sdr_timings(&chip->data_interface);
339+ timings = nand_get_sdr_timings(nand_get_interface_config(chip));
340340 err = tango_waitrdy(chip, PSEC_TO_MSEC(timings->tR_max));
341341 if (err)
342342 return err;
include/linux/mtd/rawnand.h+11−0
@@ -1203,6 +1203,17 @@ static inline struct device_node *nand_get_flash_node(struct nand_chip *chip) · 1202 unmodified lines
12031203 return mtd_get_of_node(nand_to_mtd(chip));
12041204 }
12051205
1206+/**
1207+ * nand_get_interface_config - Retrieve the current interface configuration
1208+ * of a NAND chip
1209+ * @chip: The NAND chip
1210+ */
1211+static inline const struct nand_data_interface *
1212+nand_get_interface_config(struct nand_chip *chip)
1213+{
1214+ return &chip->data_interface;
1215+}
1216+
12061217 /*
12071218 * A helper for defining older NAND chips where the second ID byte fully
12081219 * defined the chip, including the geometry (chip size, eraseblock size, page