From 92c75fe5c311ebb0f36e49cd6d88b98827751e4d Mon Sep 17 00:00:00 2001 From: John Crispin Date: Tue, 12 Mar 2013 13:53:08 +0000 Subject: [PATCH] [lantiq] fixes NO_XIP on CFI0001 flash This patch disables the execute-in-place (XIP) support for flash on lantiq. This has to be disabled since the bus which flash is connected to does not support unaligned accesses. Resolves data bus errors on Lantiq routers with Intel command set flash. Signed-off-by: Matti Laakso git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35992 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/lantiq/image/ARV4510PW.dts | 2 ++ .../lantiq/patches-3.7/0305-no_xip_nor.patch | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 target/linux/lantiq/patches-3.7/0305-no_xip_nor.patch diff --git a/target/linux/lantiq/image/ARV4510PW.dts b/target/linux/lantiq/image/ARV4510PW.dts index f1d41da39f..e0cd38a460 100644 --- a/target/linux/lantiq/image/ARV4510PW.dts +++ b/target/linux/lantiq/image/ARV4510PW.dts @@ -28,6 +28,8 @@ #address-cells = <1>; #size-cells = <1>; + lantiq,noxip; + partition@0 { label = "uboot"; reg = <0x00000 0x20000>; diff --git a/target/linux/lantiq/patches-3.7/0305-no_xip_nor.patch b/target/linux/lantiq/patches-3.7/0305-no_xip_nor.patch new file mode 100644 index 0000000000..a154befded --- /dev/null +++ b/target/linux/lantiq/patches-3.7/0305-no_xip_nor.patch @@ -0,0 +1,17 @@ +Index: linux-3.7.10/drivers/mtd/maps/lantiq-flash.c +=================================================================== +--- linux-3.7.10.orig/drivers/mtd/maps/lantiq-flash.c 2013-02-27 18:22:04.000000000 +0100 ++++ linux-3.7.10/drivers/mtd/maps/lantiq-flash.c 2013-03-12 10:10:22.954382685 +0100 +@@ -134,7 +134,11 @@ + } + + ltq_mtd->map = kzalloc(sizeof(struct map_info), GFP_KERNEL); +- ltq_mtd->map->phys = ltq_mtd->res->start; ++ if (of_find_property(pdev->dev.of_node, "lantiq,noxip", NULL)) ++ ltq_mtd->map->phys = NO_XIP; ++ else ++ ltq_mtd->map->phys = ltq_mtd->res->start; ++ ltq_mtd->res->start; + ltq_mtd->map->size = resource_size(ltq_mtd->res); + ltq_mtd->map->virt = devm_request_and_ioremap(&pdev->dev, ltq_mtd->res); + if (!ltq_mtd->map->virt) {