On Tue, Jun 7, 2011 at 7:55 PM, Stefan Tauner <stefan.tauner@student.tuwien.ac.at> wrote:
+static uint32_t ich_hwseq_get_erase_block_size(unsigned int addr)
+{
+       REGWRITE32(ICH9_REG_FADDR, (addr & 0x00FFFFFF));
+       uint8_t enc_berase = (REGREAD16(ICH9_REG_HSFS) & HSFS_BERASE) >>
+                                  HSFS_BERASE_OFF;
+       const uint32_t dec_berase[4] = {
+               256,
+               4 * 1024,
+               8 * 1024,
+               64 * 1024
+       }; 
+       return dec_berase[enc_berase];

Others might want to comment, but I think you should avoid doing all that work in the variable declaration area.
 
+}
+
+int ich_hwseq_probe(struct flashchip *flash)
+{
+       uint32_t total_size, boundary;
+       uint32_t erase_size_low, size_low, erase_size_high, size_high;
+       struct block_eraser eraser;

This should be a pointer, right? I am assuming you intended to directly update the flash->block_erasers[0] member later in this function.

--
David Hendricks (dhendrix)
Systems Software Engineer, Google Inc.