sh: Fix cached/uncaced address calculation in 29bit mode
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> Cc: stable@kernel.org Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
1a67a573b8
commit
dfd3b596fb
|
@ -151,8 +151,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))
|
||||
|
|
Loading…
Reference in a new issue