[PATCH v2] MTD: lantiq: handle NO_XIP on cfi0001 flash

Jonas Gorski jogo at openwrt.org
Mon Jun 6 14:54:52 PDT 2016


On 6 June 2016 at 23:38, Hauke Mehrtens <hauke at hauke-m.de> wrote:
> On 06/06/2016 11:10 PM, Jonas Gorski wrote:
>> Hi,
>>
>> On 6 June 2016 at 22:35, Hauke Mehrtens <hauke at hauke-m.de> wrote:
>>> From: John Crispin <john at phrozen.org>
>>>
>>> This uses the same device tree attribute as physmap_of.c
>>>
>>> Signed-off-by: John Crispin <john at phrozen.org>
>>> Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
>>> ---
>>>  drivers/mtd/maps/lantiq-flash.c | 6 +++++-
>>>  1 file changed, 5 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/mtd/maps/lantiq-flash.c b/drivers/mtd/maps/lantiq-flash.c
>>> index c8febb3..88fc6d9 100644
>>> --- a/drivers/mtd/maps/lantiq-flash.c
>>> +++ b/drivers/mtd/maps/lantiq-flash.c
>>> @@ -137,7 +137,11 @@ ltq_mtd_probe(struct platform_device *pdev)
>>>         if (!ltq_mtd->map)
>>>                 return -ENOMEM;
>>>
>>> -       ltq_mtd->map->phys = ltq_mtd->res->start;
>>> +       if (of_find_property(pdev->dev.of_node, "no-unaligned-direct-access",
>>> +                            NULL))
>>> +               ltq_mtd->map->phys = NO_XIP;
>>
>> This does not what you think it does; i.e. preventing unaligned io
>> memory accesses. All it's used for is in two drivers
>> (cfi_cmdset_0001.c, lpddr_cmds.c) as a check whether to populate
>> _point/_unpoint. But it does not prevent the map_read/map_write
>> accessors from doing memcpy_{from,to}_io() with unaligned addresses,
>> which at least on MIPS results in unaligned accesses with LWL/LWR.
>> Which is what I assume you want to prevent.
>
> Hi Jonas,
>
> I want to upstream the patch from OpenWrt:
> https://dev.openwrt.org/changeset/35992
>
> I want to deactivate the execute-in-place (XIP) which this property does.

I understand that, but I wanted to point out that setting NO_XIP does
neither prevent XIP*, nor does it prevent unaligned direct accesses.
Which are also IMHO two different concepts.

NO_XIP is checked at exactly one place, by mtd_is_linear()[1] (and
only if CONFIG_MTD_COMPLEX_MAPPINGS is enabled). And mtd_is_linear()
is only used by the two mentioned drivers, nothing more. Unless I'm
overlooking something, this patch has no obvservebal effect, as the
mtd code doesn't actually do anything meaningful with NO_XIP.


Regards
Jonas

* actually AFAICT XIP isn't supported at all, at least not on MIPS.

[1] http://lxr.free-electrons.com/source/include/linux/mtd/map.h#L477



More information about the linux-mtd mailing list