Hi Ashish,

On 22.10.19 18:11, Ashish Kumar wrote:
> 
> 
>> -----Original Message-----
>> From: Stefan Roese <s...@denx.de>
>> Sent: Tuesday, October 22, 2019 9:12 PM
>> To: Schrempf Frieder <frieder.schre...@kontron.de>; Ashish Kumar
>> <ashish.ku...@nxp.com>; Ye Li <ye...@nxp.com>;
>> ja...@amarulasolutions.com
>> Cc: Fabio Estevam <fabio.este...@nxp.com>; u-boot@lists.denx.de; dl-
>> uboot-imx <uboot-...@nxp.com>
>> Subject: Re: [U-Boot] [EXT] Re: [PATCH 1/6] spi: fsl_qspi: Fix DDR mode
>> setting for latest iMX platforms
>>
>> Caution: EXT Email
>>
>> Hi Frieder,
>>
>> On 22.10.19 15:55, Schrempf Frieder wrote:
>>> Hi Stefan,
>>>
>>> On 22.10.19 15:18, Stefan Roese wrote:
>>>> Hi Frieder,
>>>> Hi Ashish,
>>>> Hi Ye Li,
>>>> Hi Fabio,
>>>>
>>>> On 18.09.19 09:42, Stefan Roese wrote:
>>>>> Hi Frieder,
>>>>>
>>>>> On 18.09.19 09:08, Schrempf Frieder wrote:
>>>>>
>>>>> <snip>
>>>>>
>>>>>>> One further update on this QSPI driver. This driver only works
>>>>>>> when loaded via "imx_usb" on the i.MX6ULL EVK. When programmed
>>>>>>> into QSPI and booted from QSPI this driver does not detect the SPI
>>>>>>> NOR
>>>>>>> flash:
>>>>>>>
>>>>>>> => sf probe
>>>>>>> unrecognized JEDEC id bytes: ff, ff, ff
>>>>>>>
>>>>>>> Do you have any idea what might explain this difference. I would
>>>>>>> have expected that when booting via QSPI it would be "easier" for
>>>>>>> the driver, as the BootROM already initializes the QSPI interface.
>>>>>>> Which is not the case in the boot via serial download (imx_usb)
>>>>>>> mode. Here everyhting (pinmux, clocks, etc) need to be configured.
>>>>>>>
>>>>>>> My feeling is that something is configured "incorrectly" by the
>>>>>>> BootROM in this case which is not re-configured as the QSPI driver
>>>>>>> needs it to be currently.
>>>>>>>
>>>>>>> Do you have any ideas on what might be the problem here? Is there
>>>>>>> something that I can do to help test this? Would it help if I
>>>>>>> would send the debug logging of the driver?
>>>>>>
>>>>>> I have a strong suspicion of what goes wrong in your case. We
>>>>>> experienced exactly the same issue recently on i.MX6ULL. For some
>>>>>> reasons (I guess differences in BootROM) this does not happen on
>>>>>> i.MX6UL.
>>>>>>
>>>>>> The problem is, that the BootROM sets the TDH bits in the
>>>>>> QuadSPI_FLSHCR register to '01' in case it uses the DDR mode.
>>>>>> Afterwards when U-Boot or Linux try to access the flash in SDR
>>>>>> mode, they fail as the TDH bits are still set. Resetting them to '00' 
>>>>>> solves
>> the problem.
>>>>>>
>>>>>> Unfortunately the TDH bits are not documented in the manual of the
>>>>>> i.MX6UL/ULL, but they can be found in the manual of the i.MX7.
>>>>>>
>>>>>> For the QSPI driver, this means it needs a fix to set/reset the TDH
>>>>>> bits according to the mode that is used (DDR/SDR).
>>>>>>
>>>>>> For more details please also look here:
>>>>>>
>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fc
>>>>>>
>> ommunity.nxp.com%2Fthread%2F507260&amp;data=02%7C01%7Cashish.ku
>> mar%
>>>>>>
>> 40nxp.com%7Cc03ee11b869c47c9a7d308d757065561%7C686ea1d3bc2b4c6fa
>> 92c
>>>>>>
>> d99c5c301635%7C0%7C0%7C637073557020848801&amp;sdata=ZvRU8vVPq0ll
>> gIF
>>>>>> 56nVugHjTQhM0E1GJ8PPl6P46vrg%3D&amp;reserved=0
>>>>>
>>>>> Perfect. With these bits set to 00 again, booting from QSPI now
>>>>> works on the EVK. Many thanks for this hint! :)
>>>>
>>>> I'm coming back to this issue, as we now have the new NXP patches
>>>> integrated into mainline. Including this one:
>>>>
>>>> 7949576664ac "spi: fsl_qspi: Fix DDR mode setting for latest iMX
>>>> platforms" > I've now re-tested current mainline on the i.MX6ULL Eval
>>>> Kit and QSPI does not work reliably. This is with
>>>> CONFIG_SYS_FSL_QSPI_AHB enabled and disabled. How is QSPI
>> supposed to
>>>> work on i.MX6ULL/ULZ? Is any one of you running this current mainline
>>>> driver successfully on one any i-MX6ULL/ULZ based board? If yes, what is
>> your configuration here?
>>>
>>> I don't have any experience with the current mainline SPI NOR driver.
>>>
>>>>
>>>> BTW: Using the "spi-mem" driver version from Ashish with the fix
>>>> suggested by Frieder to clear the DDR bit in TDH (reset to 00) still
>>>> works without any problems.
>>>
>>> There is some cleanup work that needs to be done (e.g. [1]). After
>>> that I will send an official patch for the spi-mem driver. Then Ashish
>>> and you can comment with your test results and change requests.
>>
>> Sounds like a good plan. Please keep me on Cc on any of these patches, so
>> that I don't forget to review and test them. Thanks in advance.
> 
> Hi Frieder,
> 
> I see one issue with current SPI-MEM driver getting ported in u-boot, that 
> is: access via md command is not working, in order words direct access to 
> flash memory is no more possible, which was previously possible. Such access 
> is helpful to access memory directly and make user experience similar to 
> parallel NOR.

Yes, direct memory-mapped access to the whole flash is not possible with 
this driver. Though I don't see any good reason why someone wants to do 
this, when there's a SPI NOR and MTD layer to abstract the flash and 
handle access to it. You can still use sf and/or mtd commands to 
read/write data between flash and RAM.

> 
> To fix this I had tried these possible changes in driver, change this to 
> q->devtype_data->ahb_buf_size to flash size rather than AHB buffer size.

This is not a good idea. The driver is not designed to do this. In the 
upstream Linux SPI MEM layer, we have a implementation for a direct 
mapping API, that allows the SPI MEM layer to create memory mappings for 
SPI NOR devices. If needed this could be ported to U-Boot, but IMHO it 
should be avoided.

> 
> In function
> fsl_qspi_default_setup() {
>       /*
>        * In HW there can be a maximum of four chips on two buses with
>        * two chip selects on each bus. We use four chip selects in SW
>        * to differentiate between the four chips.
>        * We use ahb_buf_size for each chip and set SFA1AD, SFA2AD, SFB1AD,
>        * SFB2AD accordingly.
>        */
>       qspi_writel(q, q->devtype_data->ahb_buf_size + addr_offset,
>                   base + QUADSPI_SFA1AD);
>       qspi_writel(q, q->devtype_data->ahb_buf_size * 2 + addr_offset,
>                   base + QUADSPI_SFA2AD);
>       qspi_writel(q, q->devtype_data->ahb_buf_size * 3 + addr_offset,
>                   base + QUADSPI_SFB1AD);
>       qspi_writel(q, q->devtype_data->ahb_buf_size * 4 + addr_offset,         
>                   base + QUADSPI_SFB2AD);     
> 
>>>>>>>>>>>>>>>>
> In function fsl_qspi_exec_op() {
>               qspi_writel(q, QUADSPI_RBCT_WMRK_MASK |
>                           QUADSPI_RBCT_RXBRD_USEIPS, base + QUADSPI_RBCT);
> 
>               if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT)
>                       fsl_qspi_fill_txfifo(q, op);
> 
>               err = fsl_qspi_do_op(q, op);
> 
> added this line :  spi_writel(q, op->data.nbytes | QUADSPI_IPCR_SEQID(0),  
> base + QUADSPI_IPCR);
> 
> And set seq_id to 0, Which was initially set by BootROM, after this md works 
> correctly but, sf read is only able to read max data size of rxfifo.
> 
> Could you please suggest what other thing I am missing to get access via md 
> command.

Sorry no, because as already mentioned, this driver and the SPI MEM 
layer is not supposed to work like this. At least not without the direct 
mapping API ([1]).

Regards,
Frieder

[1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=aa167f3fed0c37e0e4c707d4331d827661f46644
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to