* [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register
@ 2021-05-27 8:49 Miquel Raynal
2021-05-27 8:49 ` [PATCH 2/2] mtd: rawnand: arasan: Finer grain NV-DDR configuration Miquel Raynal
2021-06-11 19:03 ` [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register Miquel Raynal
0 siblings, 2 replies; 4+ messages in thread
From: Miquel Raynal @ 2021-05-27 8:49 UTC (permalink / raw)
To: Richard Weinberger, Vignesh Raghavendra, Tudor Ambarus, linux-mtd
Cc: Michal Simek, Naga Sureshkumar Relli, Amit Kumar Mahapatra,
Thomas Petazzoni, Miquel Raynal
There are 2 timing registers:
- "data interface"
- "timings"
So far, the "data interface" register was named "timings" which begins
misleading when bringing support for the "timings" register. Rename it
to "data_iface".
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
drivers/mtd/nand/raw/arasan-nand-controller.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/mtd/nand/raw/arasan-nand-controller.c b/drivers/mtd/nand/raw/arasan-nand-controller.c
index 6e8d33173c6b..2bb62d193b78 100644
--- a/drivers/mtd/nand/raw/arasan-nand-controller.c
+++ b/drivers/mtd/nand/raw/arasan-nand-controller.c
@@ -144,7 +144,7 @@ struct anfc_op {
* @rb: Ready-busy line
* @page_sz: Register value of the page_sz field to use
* @clk: Expected clock frequency to use
- * @timings: Data interface timing mode to use
+ * @data_iface: Data interface timing mode to use
* @ecc_conf: Hardware ECC configuration value
* @strength: Register value of the ECC strength
* @raddr_cycles: Row address cycle information
@@ -164,7 +164,7 @@ struct anand {
unsigned int rb;
unsigned int page_sz;
unsigned long clk;
- u32 timings;
+ u32 data_iface;
u32 ecc_conf;
u32 strength;
u16 raddr_cycles;
@@ -331,7 +331,7 @@ static int anfc_select_target(struct nand_chip *chip, int target)
anfc_assert_cs(nfc, nfc_cs_idx);
/* Update the controller timings and the potential ECC configuration */
- writel_relaxed(anand->timings, nfc->base + DATA_INTERFACE_REG);
+ writel_relaxed(anand->data_iface, nfc->base + DATA_INTERFACE_REG);
/* Update clock frequency */
if (nfc->cur_clk != anand->clk) {
@@ -970,11 +970,11 @@ static int anfc_setup_interface(struct nand_chip *chip, int target,
return 0;
if (nand_interface_is_sdr(conf))
- anand->timings = DIFACE_SDR |
- DIFACE_SDR_MODE(conf->timings.mode);
+ anand->data_iface = DIFACE_SDR |
+ DIFACE_SDR_MODE(conf->timings.mode);
else
- anand->timings = DIFACE_NVDDR |
- DIFACE_DDR_MODE(conf->timings.mode);
+ anand->data_iface = DIFACE_NVDDR |
+ DIFACE_DDR_MODE(conf->timings.mode);
anand->clk = ANFC_XLNX_SDR_DFLT_CORE_CLK;
--
2.27.0
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] mtd: rawnand: arasan: Finer grain NV-DDR configuration
2021-05-27 8:49 [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register Miquel Raynal
@ 2021-05-27 8:49 ` Miquel Raynal
2021-06-11 19:03 ` Miquel Raynal
2021-06-11 19:03 ` [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register Miquel Raynal
1 sibling, 1 reply; 4+ messages in thread
From: Miquel Raynal @ 2021-05-27 8:49 UTC (permalink / raw)
To: Richard Weinberger, Vignesh Raghavendra, Tudor Ambarus, linux-mtd
Cc: Michal Simek, Naga Sureshkumar Relli, Amit Kumar Mahapatra,
Thomas Petazzoni, Miquel Raynal
Add support for the timings register which may improve a bit the
overall throughput.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
drivers/mtd/nand/raw/arasan-nand-controller.c | 56 ++++++++++++++++++-
1 file changed, 54 insertions(+), 2 deletions(-)
diff --git a/drivers/mtd/nand/raw/arasan-nand-controller.c b/drivers/mtd/nand/raw/arasan-nand-controller.c
index 2bb62d193b78..8317d973ef6d 100644
--- a/drivers/mtd/nand/raw/arasan-nand-controller.c
+++ b/drivers/mtd/nand/raw/arasan-nand-controller.c
@@ -72,6 +72,15 @@
#define FLASH_STS_REG 0x28
+#define TIMING_REG 0x2C
+#define TCCS_TIME_500NS 0
+#define TCCS_TIME_300NS 3
+#define TCCS_TIME_200NS 2
+#define TCCS_TIME_100NS 1
+#define FAST_TCAD BIT(2)
+#define DQS_BUFF_SEL_IN(x) FIELD_PREP(GENMASK(6, 3), (x))
+#define DQS_BUFF_SEL_OUT(x) FIELD_PREP(GENMASK(18, 15), (x))
+
#define DATA_PORT_REG 0x30
#define ECC_CONF_REG 0x34
@@ -145,6 +154,7 @@ struct anfc_op {
* @page_sz: Register value of the page_sz field to use
* @clk: Expected clock frequency to use
* @data_iface: Data interface timing mode to use
+ * @timings: NV-DDR specific timings to use
* @ecc_conf: Hardware ECC configuration value
* @strength: Register value of the ECC strength
* @raddr_cycles: Row address cycle information
@@ -165,6 +175,7 @@ struct anand {
unsigned int page_sz;
unsigned long clk;
u32 data_iface;
+ u32 timings;
u32 ecc_conf;
u32 strength;
u16 raddr_cycles;
@@ -332,6 +343,7 @@ static int anfc_select_target(struct nand_chip *chip, int target)
/* Update the controller timings and the potential ECC configuration */
writel_relaxed(anand->data_iface, nfc->base + DATA_INTERFACE_REG);
+ writel_relaxed(anand->timings, nfc->base + TIMING_REG);
/* Update clock frequency */
if (nfc->cur_clk != anand->clk) {
@@ -955,6 +967,7 @@ static int anfc_setup_interface(struct nand_chip *chip, int target,
struct device_node *np = nfc->dev->of_node;
const struct nand_sdr_timings *sdr;
const struct nand_nvddr_timings *nvddr;
+ unsigned int tccs_min, dqs_mode, fast_tcad;
if (nand_interface_is_nvddr(conf)) {
nvddr = nand_get_nvddr_timings(conf);
@@ -969,13 +982,52 @@ static int anfc_setup_interface(struct nand_chip *chip, int target,
if (target < 0)
return 0;
- if (nand_interface_is_sdr(conf))
+ if (nand_interface_is_sdr(conf)) {
anand->data_iface = DIFACE_SDR |
DIFACE_SDR_MODE(conf->timings.mode);
- else
+ anand->timings = 0;
+ } else {
anand->data_iface = DIFACE_NVDDR |
DIFACE_DDR_MODE(conf->timings.mode);
+ if (conf->timings.nvddr.tCCS_min <= 100000)
+ tccs_min = TCCS_TIME_100NS;
+ else if (conf->timings.nvddr.tCCS_min <= 200000)
+ tccs_min = TCCS_TIME_200NS;
+ else if (conf->timings.nvddr.tCCS_min <= 300000)
+ tccs_min = TCCS_TIME_300NS;
+ else
+ tccs_min = TCCS_TIME_500NS;
+
+ fast_tcad = 0;
+ if (conf->timings.nvddr.tCAD_min < 45000)
+ fast_tcad = FAST_TCAD;
+
+ switch (conf->timings.mode) {
+ case 5:
+ case 4:
+ dqs_mode = 2;
+ break;
+ case 3:
+ dqs_mode = 3;
+ break;
+ case 2:
+ dqs_mode = 4;
+ break;
+ case 1:
+ dqs_mode = 5;
+ break;
+ case 0:
+ default:
+ dqs_mode = 6;
+ break;
+ }
+
+ anand->timings = tccs_min | fast_tcad |
+ DQS_BUFF_SEL_IN(dqs_mode) |
+ DQS_BUFF_SEL_OUT(dqs_mode);
+ }
+
anand->clk = ANFC_XLNX_SDR_DFLT_CORE_CLK;
/*
--
2.27.0
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] mtd: rawnand: arasan: Finer grain NV-DDR configuration
2021-05-27 8:49 ` [PATCH 2/2] mtd: rawnand: arasan: Finer grain NV-DDR configuration Miquel Raynal
@ 2021-06-11 19:03 ` Miquel Raynal
0 siblings, 0 replies; 4+ messages in thread
From: Miquel Raynal @ 2021-06-11 19:03 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Tudor Ambarus, linux-mtd
Cc: Michal Simek, Naga Sureshkumar Relli, Amit Kumar Mahapatra,
Thomas Petazzoni
On Thu, 2021-05-27 at 08:49:59 UTC, Miquel Raynal wrote:
> Add support for the timings register which may improve a bit the
> overall throughput.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next.
Miquel
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register
2021-05-27 8:49 [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register Miquel Raynal
2021-05-27 8:49 ` [PATCH 2/2] mtd: rawnand: arasan: Finer grain NV-DDR configuration Miquel Raynal
@ 2021-06-11 19:03 ` Miquel Raynal
1 sibling, 0 replies; 4+ messages in thread
From: Miquel Raynal @ 2021-06-11 19:03 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Tudor Ambarus, linux-mtd
Cc: Michal Simek, Naga Sureshkumar Relli, Amit Kumar Mahapatra,
Thomas Petazzoni
On Thu, 2021-05-27 at 08:49:58 UTC, Miquel Raynal wrote:
> There are 2 timing registers:
> - "data interface"
> - "timings"
>
> So far, the "data interface" register was named "timings" which begins
> misleading when bringing support for the "timings" register. Rename it
> to "data_iface".
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next.
Miquel
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-06-11 20:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-27 8:49 [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register Miquel Raynal
2021-05-27 8:49 ` [PATCH 2/2] mtd: rawnand: arasan: Finer grain NV-DDR configuration Miquel Raynal
2021-06-11 19:03 ` Miquel Raynal
2021-06-11 19:03 ` [PATCH 1/2] mtd: rawnand: arasan: Rename the data interface register Miquel Raynal
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.