+ /* number of bytes to program beyond full section */
+ unsigned residual_bc = (count-i) % prog_section_bytes;
+
+ /* number of complete words to copy directly from buffer */
+ wc = (count - i) / 4;
+
+ /* number of total sections to write, including residual */
+ section_count = DIV_ROUND_UP((count-i), prog_section_bytes);
+
+ /* any residual bytes delivers a whole residual section */
+ residual_wc = (residual_bc ? prog_section_bytes : 0)/4;
+
+ /* clear residual buffer then populate residual bytes */
+ (void) memset(residual_buffer, 0xff, prog_section_bytes);
+ (void) memcpy(residual_buffer, &buffer[i+4*wc], residual_bc);