[U-Boot] [PATCH] blk: Remove various places that do flush cache after read

York Sun york.sun at nxp.com
Wed Aug 23 15:01:28 UTC 2017


On 08/22/2017 03:53 PM, Bin Meng wrote:
> Hi York,
> 
> On Wed, Aug 23, 2017 at 12:49 AM, York Sun <york.sun at nxp.com> wrote:
>> On 08/21/2017 08:42 PM, Bin Meng wrote:
>>> All these places seem to inherit the codes from the MMC driver where
>>> a FIXME was put in the comment. However the correct operation after
>>> read should be cache invalidate, not flush.
>>>
>>> The underlying drivers should be responsible for the cache operation.
>>> Remove these codes completely.
>>>
>>> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
>>> ---
>>>
>>>    arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 15 ---------------
>>>    board/toradex/common/tdx-cfg-block.c    |  2 --
>>>    cmd/mmc.c                               |  2 --
>>>    drivers/block/blk-uclass.c              |  3 ---
>>>    drivers/block/blk_legacy.c              |  3 ---
>>>    drivers/net/fm/fm.c                     |  2 --
>>>    drivers/net/phy/cortina.c               |  2 --
>>>    drivers/qe/qe.c                         |  2 --
>>>    8 files changed, 31 deletions(-)
>>>
>>> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
>>> index 24ddb5d..bbf8bba 100644
>>> --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
>>> +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
>>> @@ -107,9 +107,6 @@ int ppa_init(void)
>>>                return -EIO;
>>>        }
>>>
>>> -     /* flush cache after read */
>>> -     flush_cache((ulong)fitp, cnt * 512);
>>> -
>>
>> NACK here.
>>
>>
>>>        ret = fdt_check_header(fitp);
>>>        if (ret) {
>>>                free(fitp);
>>> @@ -134,9 +131,6 @@ int ppa_init(void)
>>>        }
>>>        debug("Read PPA header to 0x%p\n", ppa_hdr_ddr);
>>>
>>> -     /* flush cache after read */
>>> -     flush_cache((ulong)ppa_hdr_ddr, cnt * 512);
>>> -
>>>        ppa_esbc_hdr = (uintptr_t)ppa_hdr_ddr;
>>>    #endif
>>>
>>> @@ -164,9 +158,6 @@ int ppa_init(void)
>>>                return -EIO;
>>>        }
>>>
>>> -     /* flush cache after read */
>>> -     flush_cache((ulong)ppa_fit_addr, cnt * 512);
>>> -
>>>    #elif defined(CONFIG_SYS_LS_PPA_FW_IN_NAND)
>>>        struct fdt_header fit;
>>>
>>> @@ -208,9 +199,6 @@ int ppa_init(void)
>>>        }
>>>        debug("Read PPA header to 0x%p\n", ppa_hdr_ddr);
>>>
>>> -     /* flush cache after read */
>>> -     flush_cache((ulong)ppa_hdr_ddr, fw_length);
>>> -
>>>        ppa_esbc_hdr = (uintptr_t)ppa_hdr_ddr;
>>>    #endif
>>>
>>> @@ -232,9 +220,6 @@ int ppa_init(void)
>>>                       CONFIG_SYS_LS_PPA_FW_ADDR);
>>>                return -EIO;
>>>        }
>>> -
>>> -     /* flush cache after read */
>>> -     flush_cache((ulong)ppa_fit_addr, fw_length);
>>>    #else
>>>    #error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
>>>    #endif
>>
>> Hold on for ppa.c. We need to flush the cache after reading PPA image
>> and it header after loading. These images need to be flushed into main
>> memory. I will need to confirm with our team if we can remove flushing here.
>>
> 
> For the first 3 parts in this ppa.c file, I see they are all reading
> PPA image from MMC while MMC driver is using DMA so this is wrong (as
> I mentioned in the commit message I suspect they are all copy/paste
> from the MMC driver).
> 
> The only questionable change is the last one which is reading
> something from NAND and if NAND driver is not using DMA, that cache
> flush is needed as you pointed out.
> 

Bin,

Our internal team agrees with the removing flushing for MMC.
Give me some time to test NAND.

York


More information about the U-Boot mailing list