Am 12.09.2013 17:18 schrieb Stefan Tauner:
> Do not rely on broken firmware to set up the SPI configuration correctly.
> Some boards fail with flashrom because the firmware chose too high speeds
> for the alternate SPI mode which flashrom uses. Temporarily change the
> clock to the lowest common value of 16.5 MHz.
>
> Also, disable fast reads just to be safe.
>
> Signed-off-by: Stefan Tauner <[email protected]>

Thanks! One nitpick, otherwise
Acked-by: Carl-Daniel Hailfinger <[email protected]>


> diff --git a/sb600spi.c b/sb600spi.c
> index febeabb..91268c0 100644
> --- a/sb600spi.c
> +++ b/sb600spi.c
> @@ -272,6 +272,62 @@ static int sb600_spi_send_command(struct flashctx 
> *flash, unsigned int writecnt,
>       return 0;
>  }
>  
> +struct spispeed {
> +     const char *const name;
> +     const int8_t speed;

uint8_t instead? That would avoid a type conversion in set_speed().


> +};
> +
> +static const struct spispeed spispeeds[] = {
> +     { "66 MHz",     0x00 },
> +     { "33 MHz",     0x01 },
> +     { "22 MHz",     0x02 },
> +     { "16.5 MHz",   0x03 },
> +};
> +
> +static int set_speed(struct pci_dev *dev, const struct spispeed *spispeed)
> +{
> +     bool success = false;
> +     uint8_t speed = spispeed->speed;
> +
> +     msg_pdbg("Setting SPI clock to %s (0x%x).\n", spispeed->name, speed);
> +     if (amd_gen != CHIPSET_YANGTZE) {
> +             rmmio_writeb((mmio_readb(sb600_spibar + 0xd) & ~(0x3 << 4)) | 
> (speed << 4), sb600_spibar + 0xd);
> +             success = (speed == ((mmio_readb(sb600_spibar + 0xd) >> 4) & 
> 0x3));
> +     }
> +
> +     if (!success) {
> +             msg_perr("Setting SPI clock failed.\n");
> +             return 1;
> +     }
> +     return 0;
> +}

Regards,
Carl-Daniel

-- 
http://www.hailfinger.org/


_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to