| From dfd3b596fbbfa48b8e7966ef996d587157554b69 Mon Sep 17 00:00:00 2001 |
| From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> |
| Date: Fri, 4 Nov 2011 22:13:50 +0900 |
| Subject: sh: Fix cached/uncaced address calculation in 29bit mode |
| |
| From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> |
| |
| commit dfd3b596fbbfa48b8e7966ef996d587157554b69 upstream. |
| |
| In the case of 29bit mode, CAC/UNCAC_ADDR does not return a right address. |
| This revises this problem by using P1SEGADDR and P2SEGADDR in 29bit mode. |
| |
| Reported-by: Yutaro Ebihara <ebiharaml@si-linux.co.jp> |
| Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> |
| Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Tested-by: Simon Horman <horms@verge.net.au> |
| Signed-off-by: Paul Mundt <lethal@linux-sh.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/sh/include/asm/page.h | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/arch/sh/include/asm/page.h |
| +++ b/arch/sh/include/asm/page.h |
| @@ -141,8 +141,13 @@ typedef struct page *pgtable_t; |
| #endif /* !__ASSEMBLY__ */ |
| |
| #ifdef CONFIG_UNCACHED_MAPPING |
| +#if defined(CONFIG_29BIT) |
| +#define UNCAC_ADDR(addr) P2SEGADDR(addr) |
| +#define CAC_ADDR(addr) P1SEGADDR(addr) |
| +#else |
| #define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + uncached_start) |
| #define CAC_ADDR(addr) ((addr) - uncached_start + PAGE_OFFSET) |
| +#endif |
| #else |
| #define UNCAC_ADDR(addr) ((addr)) |
| #define CAC_ADDR(addr) ((addr)) |