[flashrom] [PATCH] ft2232_spi.c: use ftdi.h named constants instead of magic numbers
Antony Pavlov
antonynpavlov at gmail.com
Sat Jan 24 23:56:40 CET 2015
On Sat, 24 Jan 2015 20:03:23 +0100
Stefan Tauner <stefan.tauner at alumni.tuwien.ac.at> wrote:
> On Sat, 24 Jan 2015 16:24:36 +0100
> Stefan Tauner <stefan.tauner at alumni.tuwien.ac.at> wrote:
>
> > Hello Antony,
> >
> > thanks for your patch. It looks good in general, but there are still
> > some magic constants in the code:
> > - the initial values for cs_bits and pindir
>
> No, because they are actually simple bit masks and there are no defines
> for the meaning of the bits. But we could add our own defines for the
> bit offsets, e.g. "#define TMS_CS_OFF (3)" and or them together in
> other #defines for the few combinations we actually need for the
> initial values... I don't think that's worth it though. But I have
> added various comments explaining this.
>
> > - 0x11 to enable writes
>
> The 0x11 seems to be equivalent of "MPSSE_DO_WRITE | MPSSE_WRITE_NEG",
> right? If anyone can confirm this, I'll commit that resulting patch.
I have just examined libmpsse.
Please see int SetMode() in libmpsse/src/mpsse.c
(see https://code.google.com/p/libmpsse/source/browse/trunk/src/mpsse.c#298),
for SPI mode 0 and SPI mode 3:
mpsse->tx |= MPSSE_WRITE_NEG;
...
mpsse->txrx |= MPSSE_WRITE_NEG;
next, the mpsse->tx* value is passed to build_block_buffer()
https://code.google.com/p/libmpsse/source/browse/trunk/src/mpsse.c#762
e.g.
buf = build_block_buffer(mpsse, mpsse->tx, (unsigned char *) (data + n), txsize, &buf_size);
Here is part of build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, ...
(see https://code.google.com/p/libmpsse/source/browse/trunk/src/support.c#154)
/* Copy in the command for this block */
buf[i++] = cmd;
buf[i++] = (rsize & 0xFF);
if(!(cmd & MPSSE_BITMODE))
{
buf[i++] = ((rsize >> 8) & 0xFF);
}
/* On a write, copy the data to transmit after the command */
if(cmd == mpsse->tx || cmd == mpsse->txrx)
{
memcpy(buf+i, data+k, dsize);
/* i == offset into buf */
i += dsize;
/* k == offset into data */
k += dsize;
}
So I suppose that you are right and the 0x11 seems to be equivalent of "MPSSE_DO_WRITE | MPSSE_WRITE_NEG".
--
Best regards,
Antony Pavlov
More information about the flashrom
mailing list