* [PATCH 2/5] mtd: Support for 4GB partitions
[not found] <1394190783-12978-1-git-send-email-d.lavnikevich@sam-solutions.com>
@ 2014-03-07 11:14 ` Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 3/5] ubi: Fix for creating ubi volumes with 64bit size Dmitry Lavnikevich
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Dmitry Lavnikevich @ 2014-03-07 11:14 UTC (permalink / raw)
To: barebox; +Cc: Grigory Milev, Dmitry Lavnikevich
This patch implements correct way of creating partitions on mtd
devices with size >= 4GB.
Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
Signed-off-by: Grigory Milev <g.milev@sam-solutions.com>
---
commands/partition.c | 4 ++--
drivers/mtd/partition.c | 4 ++--
include/linux/mtd/mtd.h | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/commands/partition.c b/commands/partition.c
index f825722..44b91d1 100644
--- a/commands/partition.c
+++ b/commands/partition.c
@@ -59,11 +59,11 @@ static int mtd_part_do_parse_one(char *devname,
const char *partstr,
size = SIZE_REMAINING;
end = (char *)partstr + 1;
} else {
- size = strtoul_suffix(partstr, &end, 0);
+ size = strtoull_suffix(partstr, &end, 0);
}
if (*end == '@')
- *offset = strtoul_suffix(end+1, &end, 0);
+ *offset = strtoull_suffix(end+1, &end, 0);
if (size == SIZE_REMAINING)
size = devsize - *offset;
diff --git a/drivers/mtd/partition.c b/drivers/mtd/partition.c
index 85f486d..1b8d36e 100644
--- a/drivers/mtd/partition.c
+++ b/drivers/mtd/partition.c
@@ -90,8 +90,8 @@ static int mtd_part_block_markbad(struct mtd_info
*mtd, loff_t ofs)
return res;
}
-struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t
offset, size_t size,
- unsigned long flags, const char *name)
+struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
+ uint64_t size, unsigned long flags, const char *name)
{
struct mtd_part *slave;
struct mtd_info *slave_mtd;
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index d337455..165bc88 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -277,8 +277,8 @@ struct mtd_notifier {
struct list_head list;
};
-struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t
offset, size_t size,
- unsigned long flags, const char *name);
+struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
+ uint64_t size, unsigned long flags, const char *name);
void mtd_del_partition(struct mtd_info *mtd);
extern void register_mtd_user (struct mtd_notifier *new);
--
1.8.5.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/5] ubi: Fix for creating ubi volumes with 64bit size
[not found] <1394190783-12978-1-git-send-email-d.lavnikevich@sam-solutions.com>
2014-03-07 11:14 ` [PATCH 2/5] mtd: Support for 4GB partitions Dmitry Lavnikevich
@ 2014-03-07 11:15 ` Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 4/5] nand: mxs: Check for up to 4 NAND chips Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 5/5] nand: mxs: Fix for calculating ecc strength on some types of NAND flash Dmitry Lavnikevich
3 siblings, 0 replies; 5+ messages in thread
From: Dmitry Lavnikevich @ 2014-03-07 11:15 UTC (permalink / raw)
To: barebox; +Cc: Grigory Milev, Dmitry Lavnikevich
Since MTD is already supports >= 4GB device sizes it is better to
allow ubi valumes also be created of larger sizes.
Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
Signed-off-by: Grigory Milev <g.milev@sam-solutions.com>
---
commands/ubi.c | 4 ++--
drivers/mtd/ubi/cdev.c | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/commands/ubi.c b/commands/ubi.c
index 57ae790..8a409c2 100644
--- a/commands/ubi.c
+++ b/commands/ubi.c
@@ -15,12 +15,12 @@ static int do_ubimkvol(int argc, char *argv[])
{
struct ubi_mkvol_req req;
int fd, ret;
- size_t size;
+ uint64_t size;
if (argc != 4)
return COMMAND_ERROR_USAGE;
- size = strtoul_suffix(argv[3], NULL, 0);
+ size = strtoull_suffix(argv[3], NULL, 0);
req.name_len = min_t(int, strlen(argv[2]), UBI_VOL_NAME_MAX);
strncpy(req.name, argv[2], req.name_len);
req.name[req.name_len] = 0;
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
index 129f2e2..b97739a 100644
--- a/drivers/mtd/ubi/cdev.c
+++ b/drivers/mtd/ubi/cdev.c
@@ -220,7 +220,7 @@ static int ubi_cdev_ioctl(struct cdev *cdev, int
cmd, void *buf)
break;
case UBI_IOCMKVOL:
if (!req->bytes)
- req->bytes = ubi->avail_pebs * ubi->leb_size;
+ req->bytes = (__s64)ubi->avail_pebs * ubi->leb_size;
return ubi_create_volume(ubi, req);
};
-- 1.8.5.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 4/5] nand: mxs: Check for up to 4 NAND chips
[not found] <1394190783-12978-1-git-send-email-d.lavnikevich@sam-solutions.com>
2014-03-07 11:14 ` [PATCH 2/5] mtd: Support for 4GB partitions Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 3/5] ubi: Fix for creating ubi volumes with 64bit size Dmitry Lavnikevich
@ 2014-03-07 11:15 ` Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 5/5] nand: mxs: Fix for calculating ecc strength on some types of NAND flash Dmitry Lavnikevich
3 siblings, 0 replies; 5+ messages in thread
From: Dmitry Lavnikevich @ 2014-03-07 11:15 UTC (permalink / raw)
To: barebox; +Cc: Grigory Milev, Dmitry Lavnikevich
Since i.MX6 has only one R/B actual pin, if there are several R/B
signals (from different NAND chips) they must be connected to this
pin.
Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
Signed-off-by: Grigory Milev <g.milev@sam-solutions.com>
---
drivers/mtd/nand/nand_mxs.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/mtd/nand/nand_mxs.c b/drivers/mtd/nand/nand_mxs.c
index d1e4b57..237a423 100644
--- a/drivers/mtd/nand/nand_mxs.c
+++ b/drivers/mtd/nand/nand_mxs.c
@@ -33,6 +33,7 @@
#include <dma/apbh-dma.h>
#include <stmp-device.h>
#include <asm/mmu.h>
+#include <mach/generic.h>
#define MX28_BLOCK_SFTRST (1 << 31)
#define MX28_BLOCK_CLKGATE (1 << 30)
@@ -427,7 +428,13 @@ static int mxs_nand_device_ready(struct mtd_info *mtd)
if (nand_info->version > GPMI_VERSION_TYPE_MX23) {
tmp = readl(gpmi_regs + GPMI_STAT);
- tmp >>= (GPMI_STAT_READY_BUSY_OFFSET + nand_info->cur_chip);
+ /* i.MX6 has only one R/B actual pin, so if there are several
+ R/B signals they must be all connected to this pin */
+ if (cpu_is_mx6())
+ tmp >>= GPMI_STAT_READY_BUSY_OFFSET;
+ else
+ tmp >>= (GPMI_STAT_READY_BUSY_OFFSET +
+ nand_info->cur_chip);
} else {
tmp = readl(gpmi_regs + GPMI_DEBUG);
tmp >>= (GPMI_DEBUG_READY0_OFFSET + nand_info->cur_chip);
@@ -1304,7 +1311,7 @@ static int mxs_nand_probe(struct device_d *dev)
nand->ecc.strength = 8;
/* first scan to find the device and get the page size */
- err = nand_scan_ident(mtd, 1, NULL);
+ err = nand_scan_ident(mtd, 4, NULL);
if (err)
goto err2;
-- 1.8.5.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 5/5] nand: mxs: Fix for calculating ecc strength on some types of NAND flash
[not found] <1394190783-12978-1-git-send-email-d.lavnikevich@sam-solutions.com>
` (2 preceding siblings ...)
2014-03-07 11:15 ` [PATCH 4/5] nand: mxs: Check for up to 4 NAND chips Dmitry Lavnikevich
@ 2014-03-07 11:15 ` Dmitry Lavnikevich
3 siblings, 0 replies; 5+ messages in thread
From: Dmitry Lavnikevich @ 2014-03-07 11:15 UTC (permalink / raw)
To: barebox; +Cc: Grigory Milev, Dmitry Lavnikevich
Was tested on NAND with {writesize=4096, oobsize=224} and
{writesize=2048, oobsize=64}.
This patch will not break any NAND that was working
before. Implemented calculation way may be used for other NAND chips
with writesize == 2048 but oobsize != 64.
Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
Signed-off-by: Grigory Milev <g.milev@sam-solutions.com>
---
drivers/mtd/nand/nand_mxs.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/nand/nand_mxs.c b/drivers/mtd/nand/nand_mxs.c
index 237a423..b06b558 100644
--- a/drivers/mtd/nand/nand_mxs.c
+++ b/drivers/mtd/nand/nand_mxs.c
@@ -234,18 +234,31 @@ static uint32_t mxs_nand_aux_status_offset(void)
static inline uint32_t mxs_nand_get_ecc_strength(uint32_t page_data_size,
uint32_t page_oob_size)
{
+ int ecc_chunk_count = mxs_nand_ecc_chunk_cnt(page_data_size);
+ int ecc_strength = 0;
+ int gf_len = 13; /* length of Galois Field for non-DDR nand */
+
+ /*
+ * Possibly this if-else calculation may be removed since
+ * ecc_strength calculated after it is taken from kernel driver
+ * and therefore should work for all cases. But it was tested only
+ * on devices with {data_size = 2046, oob_size = 64} and
+ * {data_size = 4096, oob_size = 224} configuration.
+ */
if (page_data_size == 2048)
return 8;
-
- if (page_data_size == 4096) {
+ else if (page_data_size == 4096) {
if (page_oob_size == 128)
return 8;
-
if (page_oob_size == 218)
return 16;
}
- return 0;
+ ecc_strength = ((page_oob_size - MXS_NAND_METADATA_SIZE) * 8)
+ / (gf_len * ecc_chunk_count);
+
+ /* We need the minor even number. */
+ return rounddown(ecc_strength, 2);
}
static inline uint32_t mxs_nand_get_mark_offset(uint32_t page_data_size,
--
1.8.5.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/5] mtd: Support for 4GB partitions
2014-03-10 11:39 [PATCH 1/5] mtd: Update internal API to support 64-bit device size Dmitry Lavnikevich
@ 2014-03-10 11:39 ` Dmitry Lavnikevich
0 siblings, 0 replies; 5+ messages in thread
From: Dmitry Lavnikevich @ 2014-03-10 11:39 UTC (permalink / raw)
To: barebox; +Cc: Grigory Milev, Dmitry Lavnikevich
This patch implements correct way of creating partitions on mtd
devices with size >= 4GB.
Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
Signed-off-by: Grigory Milev <g.milev@sam-solutions.com>
---
commands/partition.c | 4 ++--
drivers/mtd/partition.c | 4 ++--
include/linux/mtd/mtd.h | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/commands/partition.c b/commands/partition.c
index f825722..44b91d1 100644
--- a/commands/partition.c
+++ b/commands/partition.c
@@ -59,11 +59,11 @@ static int mtd_part_do_parse_one(char *devname, const char *partstr,
size = SIZE_REMAINING;
end = (char *)partstr + 1;
} else {
- size = strtoul_suffix(partstr, &end, 0);
+ size = strtoull_suffix(partstr, &end, 0);
}
if (*end == '@')
- *offset = strtoul_suffix(end+1, &end, 0);
+ *offset = strtoull_suffix(end+1, &end, 0);
if (size == SIZE_REMAINING)
size = devsize - *offset;
diff --git a/drivers/mtd/partition.c b/drivers/mtd/partition.c
index 85f486d..1b8d36e 100644
--- a/drivers/mtd/partition.c
+++ b/drivers/mtd/partition.c
@@ -90,8 +90,8 @@ static int mtd_part_block_markbad(struct mtd_info *mtd, loff_t ofs)
return res;
}
-struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset, size_t size,
- unsigned long flags, const char *name)
+struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
+ uint64_t size, unsigned long flags, const char *name)
{
struct mtd_part *slave;
struct mtd_info *slave_mtd;
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index d337455..165bc88 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -277,8 +277,8 @@ struct mtd_notifier {
struct list_head list;
};
-struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset, size_t size,
- unsigned long flags, const char *name);
+struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
+ uint64_t size, unsigned long flags, const char *name);
void mtd_del_partition(struct mtd_info *mtd);
extern void register_mtd_user (struct mtd_notifier *new);
--
1.9.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-03-10 11:50 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1394190783-12978-1-git-send-email-d.lavnikevich@sam-solutions.com>
2014-03-07 11:14 ` [PATCH 2/5] mtd: Support for 4GB partitions Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 3/5] ubi: Fix for creating ubi volumes with 64bit size Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 4/5] nand: mxs: Check for up to 4 NAND chips Dmitry Lavnikevich
2014-03-07 11:15 ` [PATCH 5/5] nand: mxs: Fix for calculating ecc strength on some types of NAND flash Dmitry Lavnikevich
2014-03-10 11:39 [PATCH 1/5] mtd: Update internal API to support 64-bit device size Dmitry Lavnikevich
2014-03-10 11:39 ` [PATCH 2/5] mtd: Support for 4GB partitions Dmitry Lavnikevich
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.