Commit d0788ce4 authored by Stefan Roese's avatar Stefan Roese Committed by David Woodhouse

mtd: physmap_of: Add "no-unaligned-direct-access" DT property

On some platforms (e.g. MPC5200) a direct 1:1 mapping may cause
problems with JFFS2 usage, as the local bus (LPB) doesn't support
unaligned accesses as implemented in the JFFS2 code via memcpy().
By defining "no-unaligned-direct-access", the flash will not be
exposed directly to the MTD users (e.g. JFFS2) any more.
Signed-off-by: default avatarStefan Roese <sr@denx.de>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent e1ed147f
...@@ -16,6 +16,13 @@ file systems on embedded devices. ...@@ -16,6 +16,13 @@ file systems on embedded devices.
- #address-cells, #size-cells : Must be present if the device has - #address-cells, #size-cells : Must be present if the device has
sub-nodes representing partitions (see below). In this case sub-nodes representing partitions (see below). In this case
both #address-cells and #size-cells must be equal to 1. both #address-cells and #size-cells must be equal to 1.
- no-unaligned-direct-access: boolean to disable the default direct
mapping of the flash.
On some platforms (e.g. MPC5200) a direct 1:1 mapping may cause
problems with JFFS2 usage, as the local bus (LPB) doesn't support
unaligned accesses as implemented in the JFFS2 code via memcpy().
By defining "no-unaligned-direct-access", the flash will not be
exposed directly to the MTD users (e.g. JFFS2) any more.
For JEDEC compatible devices, the following additional properties For JEDEC compatible devices, the following additional properties
are defined: are defined:
......
...@@ -169,6 +169,7 @@ static int __devinit of_flash_probe(struct platform_device *dev) ...@@ -169,6 +169,7 @@ static int __devinit of_flash_probe(struct platform_device *dev)
struct mtd_info **mtd_list = NULL; struct mtd_info **mtd_list = NULL;
resource_size_t res_size; resource_size_t res_size;
struct mtd_part_parser_data ppdata; struct mtd_part_parser_data ppdata;
bool map_indirect;
match = of_match_device(of_flash_match, &dev->dev); match = of_match_device(of_flash_match, &dev->dev);
if (!match) if (!match)
...@@ -192,6 +193,8 @@ static int __devinit of_flash_probe(struct platform_device *dev) ...@@ -192,6 +193,8 @@ static int __devinit of_flash_probe(struct platform_device *dev)
} }
count /= reg_tuple_size; count /= reg_tuple_size;
map_indirect = of_property_read_bool(dp, "no-unaligned-direct-access");
err = -ENOMEM; err = -ENOMEM;
info = kzalloc(sizeof(struct of_flash) + info = kzalloc(sizeof(struct of_flash) +
sizeof(struct of_flash_list) * count, GFP_KERNEL); sizeof(struct of_flash_list) * count, GFP_KERNEL);
...@@ -247,6 +250,17 @@ static int __devinit of_flash_probe(struct platform_device *dev) ...@@ -247,6 +250,17 @@ static int __devinit of_flash_probe(struct platform_device *dev)
simple_map_init(&info->list[i].map); simple_map_init(&info->list[i].map);
/*
* On some platforms (e.g. MPC5200) a direct 1:1 mapping
* may cause problems with JFFS2 usage, as the local bus (LPB)
* doesn't support unaligned accesses as implemented in the
* JFFS2 code via memcpy(). By setting NO_XIP, the
* flash will not be exposed directly to the MTD users
* (e.g. JFFS2) any more.
*/
if (map_indirect)
info->list[i].map.phys = NO_XIP;
if (probe_type) { if (probe_type) {
info->list[i].mtd = do_map_probe(probe_type, info->list[i].mtd = do_map_probe(probe_type,
&info->list[i].map); &info->list[i].map);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment