Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Feb 2013 07:34:32 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Ian Lepore <ian@FreeBSD.org>
Cc:        Aleksandr Rybalko <ray@FreeBSD.org>, freebsd-arm@FreeBSD.org, freebsd-mips@FreeBSD.org
Subject:   Re: SPI, _sz fields in struct spi_command
Message-ID:  <5C3022E6-AEDB-4403-B5C1-E6EA6F9451EE@bsdimp.com>
In-Reply-To: <1361370730.1185.10.camel@revolution.hippie.lan>
References:  <20130220142140.f8e5a616c75d72e2519dbc69@freebsd.org> <54C08D8E-4C5F-49AF-BEE6-D78EC05D2A24@bsdimp.com> <1361370730.1185.10.camel@revolution.hippie.lan>

next in thread | previous in thread | raw e-mail | index | archive | help

On Feb 20, 2013, at 7:32 AM, Ian Lepore wrote:

> On Wed, 2013-02-20 at 07:15 -0700, Warner Losh wrote:
>> On Feb 20, 2013, at 5:21 AM, Aleksandr Rybalko wrote:
>>=20
>>> Hello ARM and MIPS hackers!
>>>=20
>>> Sorry for cross-post, but we have supported SPI devices on both
>>> platforms (and seems no others).
>>>=20
>>> Anyone know any reasons to keep both TX and RX _sz fields with same
>>> values?
>>=20
>> I wrote them to be separate for a reason....  I think I'd thought =
there'd be cases when you'd want to throw away the results or transmit =
garbage...  I can't think of why right now...
>>=20
>>> sys/dev/flash/at45d.c
>>> static int
>>> at45d_get_mfg_info(device_t dev, uint8_t *resp)
>>> {
>>> 	...
>>> 	cmd.tx_cmd_sz =3D cmd.rx_cmd_sz =3D 5;
>>> 	...
>>> }
>>>=20
>>> or sys/dev/flash/mx25l.c
>>> static int
>>> mx25l_read(device_t dev, off_t offset, caddr_t data, off_t count)
>>> {
>>> 	...
>>> 	cmd.tx_cmd_sz =3D 5;
>>> 	cmd.rx_cmd_sz =3D 5;
>>> 	...
>>> }
>>>=20
>>> That always require second but unused buffer or writable tx buffer. =
And
>>> not all controllers able to TX with RX same time. (at least rt305x
>>> can't). So if nobody have any objections, I will update drivers (SPI
>>> controllers and SPI attached devices) to set unused _sz field to =
zero.
>>> IIRC, I will require help with AT91 controller update, at least with
>>> testing.
>>=20
>> The AT91, I think, required a minimum size, which is why the at45d =
driver set it I think..
>>=20
>> I can't imagine an SPI controller that can't do both, because when =
you write something with SPI, you usually have to read back the status =
at the same time...
>>=20
>> Warner
>=20
> I think with at91 you really must do same-sized xfers in both =
directions
> or you'll get underflow/overflow errors from the hardware.  It might =
be
> possible to just ignore the error, but even then the only useful way =
the
> xfer sizes could be different is one of them would be zero.  Different
> non-zero sizes just don't make sense.

Does 0 really work? I have a vague memory of trying to allow it when I =
first wrote the driver and having it fail badly on the AT91RM9200...

Warner

Warner=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5C3022E6-AEDB-4403-B5C1-E6EA6F9451EE>