public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Stefan Mavrodiev <stefan@olimex.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/1] arm: sunxi: Add NULL pointer check
Date: Mon, 17 Dec 2018 08:37:30 +0200	[thread overview]
Message-ID: <39708f5a-fa98-6407-e038-e3d5df958c41@olimex.com> (raw)
In-Reply-To: <20181214155527.pzt4xjrurm3cw5ud@flea>


On 12/14/18 5:55 PM, Maxime Ripard wrote:
> On Fri, Dec 14, 2018 at 04:14:31PM +0200, Stefan Mavrodiev wrote:
>> On 12/14/18 11:25 AM, Maxime Ripard wrote:
>>> On Thu, Dec 13, 2018 at 09:12:57AM +0200, Stefan Mavrodiev wrote:
>>>> On 12/6/18 8:41 AM, Stefan Mavrodiev wrote:
>>>>> On 12/5/18 5:46 PM, Maxime Ripard wrote:
>>>>>> On Wed, Dec 05, 2018 at 02:27:57PM +0200, Stefan Mavrodiev wrote:
>>>>>>> Current driver doesn't check if the destination pointer is NULL.
>>>>>>> This cause the data from the FIFO to be stored inside the internal
>>>>>>> SDRAM ( address 0 ).
>>>>>>>
>>>>>>> The patch add simple check if the destination pointer is NULL.
>>>>>>>
>>>>>>> Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>
>>>>>>> ---
>>>>>>>     drivers/spi/sun4i_spi.c | 3 ++-
>>>>>>>     1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>>>
>>>>>>> diff --git a/drivers/spi/sun4i_spi.c b/drivers/spi/sun4i_spi.c
>>>>>>> index b86b5a00ad..38cc743c61 100644
>>>>>>> --- a/drivers/spi/sun4i_spi.c
>>>>>>> +++ b/drivers/spi/sun4i_spi.c
>>>>>>> @@ -129,7 +129,8 @@ static inline void
>>>>>>> sun4i_spi_drain_fifo(struct sun4i_spi_priv *priv, int len)
>>>>>>>           while (len--) {
>>>>>>>             byte = readb(&priv->regs->rxdata);
>>>>>>> -        *priv->rx_buf++ = byte;
>>>>>>> +        if (priv->rx_buf)
>>>>>>> +            *priv->rx_buf++ = byte;
>>>>>> It seems pretty inefficient to test the pointer at each access, it
>>>>>> would be better to check it once before starting the transfer.
>>>>>>
>>>>>> I'm not sure if that can even happen?
>>>>> I've tried to check that before draining the receive fifo, but
>>>>> then the controller doesn't work. I'm thinking that the fifo must
>>>>> be drained in any case.
>>>> Any further comments?
>>> I was expecting you to comment on whether the FIFO needed to be
>>> drained or not :)
>> Sorry. I didn't understand that.
>>
>> Anyway. After some code checking, I found that the FIFO needs to be drained
>> because TP_EN (Transmit Pause Enable) bit is set during bus claim.
>>
>> "....
>>
>> In master mode, it is used to control transmit state machine to
>> stop smart burst sending when RX FIFO is full.
>>
>> ..."
>>
>> Perhaps this bit should be enabled only when we want to read back data?
> It's been a while since I last looked at the spi driver. What is linux
> doing?

In the kernel version there is the same check, like the one in the patch:

drivers/spi/spi-sun4i.c:
static inline void sun4i_spi_drain_fifo(struct sun4i_spi *sspi, int len)
......

while (len--) {
     byte = readb(sspi->base_addr + SUN4I_RXDATA_REG);
     if (sspi->rx_buf)
         *sspi->rx_buf++ = byte;
}
.....

Guess I've missed this check when I was adopting the driver for u-boot.


>
> Maxime
>

  reply	other threads:[~2018-12-17  6:37 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-05 12:27 [U-Boot] [PATCH 1/1] arm: sunxi: Add NULL pointer check Stefan Mavrodiev
2018-12-05 15:46 ` Maxime Ripard
2018-12-06  6:41   ` Stefan Mavrodiev
2018-12-13  7:12     ` Stefan Mavrodiev
2018-12-14  9:25       ` Maxime Ripard
2018-12-14 14:14         ` Stefan Mavrodiev
2018-12-14 15:55           ` Maxime Ripard
2018-12-17  6:37             ` Stefan Mavrodiev [this message]
2018-12-20  6:45               ` Stefan Mavrodiev
2018-12-16 11:16   ` André Przywara
2018-12-14 10:18 ` Jagan Teki
2018-12-14 10:49   ` Maxime Ripard
2018-12-14 12:09     ` Jagan Teki
2018-12-20 10:14   ` Jagan Teki
2018-12-20 10:29     ` Stefan Mavrodiev
2018-12-20 10:45       ` Jagan Teki
2018-12-20 10:48         ` Stefan Mavrodiev
2018-12-20 10:56           ` Jagan Teki
2018-12-20 11:19             ` Stefan Mavrodiev
2018-12-20 11:54               ` Jagan Teki
2018-12-20 12:07                 ` Stefan Mavrodiev
2018-12-20 12:38                   ` Jagan Teki
2018-12-20 12:41                     ` Stefan Mavrodiev
2018-12-20 12:44                       ` Jagan Teki
2018-12-20 12:46                         ` Stefan Mavrodiev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=39708f5a-fa98-6407-e038-e3d5df958c41@olimex.com \
    --to=stefan@olimex.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox