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