The AAI (Auto Address Increment Programming) command (0xAD) can be found
in SST25VF080B. I am wondering if it is available in every SPI chip. If
yes, the SB600 pragramming would be much faster than doing it one byte
at a time. I tested on my board with SB600. I don't make a patch because
I am not sure I can do that.

Zheng

int sb600_spi_write(struct flashchip *flash, uint8_t *buf)
{
        int rc = 0, i;
        int total_size = flash->total_size * 1024;
        uint8_t cmd[8] = {0xAD, 0x00, 0x00, 0x00};

        /* Erase first */
        printf("Erasing flash before programming... ");
        flash->erase(flash);
        printf("done.\n");

        cmd[4] = buf[0];
        cmd[5] = buf[1];

        spi_disable_blockprotect();
        spi_write_enable();
        sb600_spi_command(6, 0, cmd, 0);

        printf("Programming flash");
        for (i = 2, buf += 2; i < total_size; i+=2, buf+=2) {

                /* spi_byte_program(i, *buf); */
                cmd[1] = buf[0];
                cmd[2] = buf[1];
                sb600_spi_command(3, 0, cmd, 0);
                /* wait program complete. */
                if (i % 0x8000 == 0)
                        printf(".");
                while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
                        ;
        }
        printf(" done.\n");
        spi_write_disable();

        return rc;
}


--
coreboot mailing list: coreboot@coreboot.org
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to