Re: [RFC PATCH 03/27] mtd: nand: Introduce the ECC engine abstraction
From: Boris Brezillon <bbrezillon@kernel.org>
Date: 2019-02-21 11:16:39
On Thu, 21 Feb 2019 11:01:52 +0100 Miquel Raynal [off-list ref] wrote:
quoted hunk ↗ jump to hunk
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 30f0fb02abe2..9e3b018d0b83 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h@@ -82,8 +82,14 @@ struct nand_pos { unsigned int page; }; +enum nand_page_io_req_type { + NAND_PAGE_READ = 0, + NAND_PAGE_WRITE, +}; + /** * struct nand_page_io_req - NAND I/O request object + * @type: the type of page I/O: read or write * @pos: the position this I/O request is targeting * @dataoffs: the offset within the page * @datalen: number of data bytes to read from/write to this page@@ -99,6 +105,7 @@ struct nand_pos { * specific commands/operations. */ struct nand_page_io_req { + enum nand_page_io_req_type type;
Can you add the reqtype enum and type field (+ patch the iterator helpers) in a separate patch?
quoted hunk ↗ jump to hunk
struct nand_pos pos; unsigned int dataoffs; unsigned int datalen;@@ -116,13 +123,35 @@ struct nand_page_io_req { }; /** - * struct nand_ecc_req - NAND ECC requirements + * struct nand_ecc_conf - NAND ECC configuration + * @strength: ECC strength + * @step_size: Number of bytes per step + * @total: Total number of bytes used for storing ECC codes, this is used by + * generic OOB layouts + */ +struct nand_ecc_conf {
Please do the s/nand_ecc_req/nand_ecc_conf/ in a separate patch.
+ unsigned int strength; + unsigned int step_size; + unsigned int total;
Do we really need to add this total field here? Looks like something that should be kept private to the ECC engine implementation.
+};
+
+/**
+ * struct nand_ecc_user_conf - User desired ECC configuration
+ * @mode: ECC mode
+ * @algo: ECC algorithm
* @strength: ECC strength
* @step_size: ECC step/block size
+ * @maximize: ECC parameters must be maximized depending on the device
+ * capabilities
+ * @flags: User flags
*/
-struct nand_ecc_req {
+struct nand_ecc_user_conf {
+ int mode;
We should definitely name that one differently ('provider' maybe).
+ unsigned int algo; unsigned int strength; unsigned int step_size; + unsigned int maximize; + unsigned int flags;
maximize could be a flag.
quoted hunk ↗ jump to hunk
}; #define NAND_ECCREQ(str, stp) { .strength = (str), .step_size = (stp) }@@ -157,11 +186,76 @@ struct nand_ops { bool (*isbad)(struct nand_device *nand, const struct nand_pos *pos); };
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel