change log for rtems (2011-07-04)
rtems-vc at rtems.org
rtems-vc at rtems.org
Mon Jul 4 10:10:20 UTC 2011
*sh*:
2011-07-04 Sebastian Huber <sebastian.huber at embedded-brains.de>
* misc/nand-mlc-erase-block-safe.c, misc/nand-mlc-write-blocks.c,
include/nand-mlc.h: Fixed write blocks.
M 1.35 c/src/lib/libbsp/arm/lpc32xx/ChangeLog
M 1.5 c/src/lib/libbsp/arm/lpc32xx/include/nand-mlc.h
M 1.2 c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-erase-block-safe.c
M 1.3 c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-write-blocks.c
diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.34 rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.35
--- rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.34 Fri Jul 1 08:05:06 2011
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog Mon Jul 4 04:26:19 2011
@@ -1,3 +1,8 @@
+2011-07-04 Sebastian Huber <sebastian.huber at embedded-brains.de>
+
+ * misc/nand-mlc-erase-block-safe.c, misc/nand-mlc-write-blocks.c,
+ include/nand-mlc.h: Fixed write blocks.
+
2011-07-01 Stephan Hoffmann <sho at reLinux.de>
Sebastian Huber <sebastian.huber at embedded-brains.de>
diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/include/nand-mlc.h:1.4 rtems/c/src/lib/libbsp/arm/lpc32xx/include/nand-mlc.h:1.5
--- rtems/c/src/lib/libbsp/arm/lpc32xx/include/nand-mlc.h:1.4 Fri Jul 1 08:05:06 2011
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/include/nand-mlc.h Mon Jul 4 04:26:19 2011
@@ -286,15 +286,25 @@
* @brief Erases the block with index @a block_index.
*
* Variant of lpc32xx_mlc_erase_block_safe() with more parameters for
- * efficiency reasons.
+ * efficiency reasons. The @a page_begin must be the index of the first page
+ * of the block. The @a page_end must be the page index of the last page of
+ * the block plus one.
*/
rtems_status_code lpc32xx_mlc_erase_block_safe_3(
uint32_t block_index,
- uint32_t first_page_of_block,
- uint32_t pages_per_block
+ uint32_t page_begin,
+ uint32_t page_end
);
/**
+ * @brief Writes zero values to the pages specified by @a page_begin and
+ * @a page_end.
+ *
+ * The data and spare area are cleared to zero. This marks the pages as bad.
+ */
+void lpc32xx_mlc_zero_pages(uint32_t page_begin, uint32_t page_end);
+
+/**
* @brief Writes the page with index @a page_index.
*
* 32-bit writes will be performed.
diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-erase-block-safe.c:1.1 rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-erase-block-safe.c:1.2
--- rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-erase-block-safe.c:1.1 Fri Jul 1 08:05:06 2011
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-erase-block-safe.c Mon Jul 4 04:26:19 2011
@@ -3,8 +3,8 @@
*
* @ingroup lpc32xx_nand_mlc
*
- * @brief lpc32xx_mlc_erase_block_safe() and lpc32xx_mlc_erase_block_safe_3()
- * implementation.
+ * @brief lpc32xx_mlc_erase_block_safe(), lpc32xx_mlc_erase_block_safe_3(), and
+ * lpc32xx_mlc_zero_block() implementation.
*/
/*
@@ -27,13 +27,13 @@
#include <bsp.h>
-static void zero_block(uint32_t first_page_of_block, uint32_t pages_per_block)
+void lpc32xx_mlc_zero_pages(uint32_t page_begin, uint32_t page_end)
{
uint32_t page = 0;
- for (page = 0; page < pages_per_block; ++page) {
+ for (page = page_begin; page < page_end; ++page) {
lpc32xx_mlc_write_page_with_ecc(
- first_page_of_block + page,
+ page,
lpc32xx_magic_zero_begin,
lpc32xx_magic_zero_begin
);
@@ -41,15 +41,15 @@
}
static bool is_bad_page(
- uint32_t first_page_of_block,
- uint32_t page
+ uint32_t page_begin,
+ uint32_t page_offset
)
{
uint32_t spare [MLC_LARGE_SPARE_WORD_COUNT];
memset(spare, 0, MLC_LARGE_SPARE_SIZE);
lpc32xx_mlc_read_page(
- first_page_of_block + page,
+ page_begin + page_offset,
lpc32xx_magic_zero_begin,
spare
);
@@ -58,23 +58,23 @@
rtems_status_code lpc32xx_mlc_erase_block_safe_3(
uint32_t block_index,
- uint32_t first_page_of_block,
- uint32_t pages_per_block
+ uint32_t page_begin,
+ uint32_t page_end
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- if (is_bad_page(first_page_of_block, 0)) {
+ if (is_bad_page(page_begin, 0)) {
return RTEMS_INCORRECT_STATE;
}
- if (is_bad_page(first_page_of_block, 1)) {
+ if (is_bad_page(page_begin, 1)) {
return RTEMS_INCORRECT_STATE;
}
sc = lpc32xx_mlc_erase_block(block_index);
if (sc != RTEMS_SUCCESSFUL) {
- zero_block(first_page_of_block, pages_per_block);
+ lpc32xx_mlc_zero_pages(page_begin, page_end);
return RTEMS_IO_ERROR;
}
@@ -85,10 +85,12 @@
rtems_status_code lpc32xx_mlc_erase_block_safe(uint32_t block_index)
{
uint32_t pages_per_block = lpc32xx_mlc_pages_per_block();
+ uint32_t page_begin = block_index * pages_per_block;
+ uint32_t page_end = page_begin + pages_per_block;
return lpc32xx_mlc_erase_block_safe_3(
block_index,
- block_index * pages_per_block,
- pages_per_block
+ page_begin,
+ page_end
);
}
diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-write-blocks.c:1.2 rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-write-blocks.c:1.3
--- rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-write-blocks.c:1.2 Fri Jul 1 08:05:06 2011
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/misc/nand-mlc-write-blocks.c Mon Jul 4 04:26:19 2011
@@ -63,32 +63,29 @@
}
for (block = block_begin; block != block_end; ++block) {
- uint32_t first_page_of_block = block * pages_per_block;
+ uint32_t page_begin = block * pages_per_block;
+ uint32_t page_end = page_begin + pages_per_block;
uint32_t page = 0;
- sc = lpc32xx_mlc_erase_block_safe_3(
- block,
- first_page_of_block,
- pages_per_block
- );
+ sc = lpc32xx_mlc_erase_block_safe_3(block, page_begin, page_end);
if (sc != RTEMS_SUCCESSFUL) {
continue;
}
- for (page = 0; page < pages_per_block; ++page) {
+ for (page = page_begin; page < page_end; ++page) {
uintptr_t remainder = (uintptr_t) end - (uintptr_t) current;
size_t delta = remainder < page_size ? remainder : page_size;
if (remainder > 0) {
memcpy(page_data_buffer, current, delta);
sc = lpc32xx_mlc_write_page_with_ecc(
- first_page_of_block + page,
+ page,
page_data_buffer,
ones_spare
);
if (sc != RTEMS_SUCCESSFUL) {
- erase_block(block, first_page_of_block, pages_per_block);
- zero_block(first_page_of_block, pages_per_block);
+ lpc32xx_mlc_erase_block_safe_3(block, page_begin, page_end);
+ lpc32xx_mlc_zero_pages(page_begin, page_end);
current = last;
continue;
}
--
Generated by Deluxe Loginfo [http://www.codewiz.org/projects/index.html#loginfo] 2.122 by Bernardo Innocenti <bernie at develer.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/vc/attachments/20110704/e34d1672/attachment.html>
More information about the vc
mailing list