On 04/12/2017 16:09, Thomas Petazzoni wrote: > The SH7786 has different physical memory layout configurations, > configurable through the MMSELR register. The configuration is > typically defined by the bootloader, so Linux generally doesn't care. > > Except that depending on the configuration, some PCI MEM areas may or > may not be available. This commit adds a helper function that allows > to retrieve the current physical memory layout configuration. It will > be used in a following patch to exclude unusable PCI MEM areas during > the PCI initialization. > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx> > --- > arch/sh/include/cpu-sh4/cpu/sh7786.h | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/sh/include/cpu-sh4/cpu/sh7786.h b/arch/sh/include/cpu-sh4/cpu/sh7786.h > index 0df09e638f09..96b8cb1f754a 100644 > --- a/arch/sh/include/cpu-sh4/cpu/sh7786.h > +++ b/arch/sh/include/cpu-sh4/cpu/sh7786.h > @@ -14,6 +14,8 @@ > #ifndef __CPU_SH7786_H__ > #define __CPU_SH7786_H__ > > +#include <linux/io.h> > + > enum { > /* PA */ > GPIO_PA7, GPIO_PA6, GPIO_PA5, GPIO_PA4, > @@ -131,4 +133,9 @@ enum { > GPIO_FN_IRL7, GPIO_FN_IRL6, GPIO_FN_IRL5, GPIO_FN_IRL4, > }; > > +static inline u32 sh7786_mm_sel(void) > +{ > + return __raw_readl(0xFC400020) & 0x7; I thought we were never supposed to use __raw_readl(), rather use readl_relaxed() instead? The difference is that readl_relaxed() takes care of endianness, which would seem relevant since you have both endianness. Am I missing something? Regards.