Skip to contentSkip to conversation

arm/versatile: no-MMU support

PATCH New Greg Ungerer 4 participants 10 messages Dec 7, 2016

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

cover arm/versatile: no-MMU support

Does the ARM Versatile machine have a maintainer?
I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

The following patches support configuring and building the versatile machine with a no-MMU kernel.

There is only a few minor changes required. It was previously possible in older kernels to build for versatile with CONFIG_MMU disabled, but the change to devicetree lost that capability. These changes make it possible again.

One patch is a fix for address translation (broken in older kernels too), two are build problems when CONFIG_MMU is disabled, and the last is the actuall configuration changes needed.

The motivation for this is that the versatile machine is well supported in qemu. And this provides an excellent platform for development and testing no-MMU support on ARM in general. With these patches applied it is possible to build and run a kernel with MMU disabled on qemu.

---
 arch/arm/Kconfig                       |   10 ++++++++++
 arch/arm/Kconfig.debug                 |    3 ++-
 arch/arm/include/asm/mach/map.h        |    1 +
 arch/arm/mach-versatile/Kconfig        |    3 ++-
 arch/arm/mach-versatile/Makefile.boot  |    3 +++
 arch/arm/mach-versatile/versatile_dt.c |    4 ++++
 6 files changed, 22 insertions(+), 2 deletions(-)
#1 lore raw

PATCH 1/4 ARM: versatile: support no-MMU mode addressing

Currently for the versatile boards the IO_ADDRESS() macro applies static virtual address mapping for built-in IO devices. When operating without the MMU enabled IO devices are accessed at their physical address, no address translation is required.

For the !CONFIG_MMU case then define the IO_ADDRESS() macro to return the physical address.

---
 arch/arm/mach-versatile/versatile_dt.c | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm/mach-versatile/versatile_dt.c +4 -0
index 3c8d39c..8cfa05a 100644
@@ -37,7 +37,11 @@
 #include <asm/mach/map.h>
 
 /* macro to get at MMIO space when running virtually */
+#ifdef CONFIG_MMU
 #define IO_ADDRESS(x)		(((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000)
+#else
+#define IO_ADDRESS(x)		(x)
+#endif
 #define __io_address(n)		((void __iomem __force *)IO_ADDRESS(n))
 
 /*
Signature · 1 line
1.9.1
#2 lore raw

PATCH 2/4 ARM: versatile: define empty debug_ll_io_init() for no-MMU

In reply to Greg Ungerer

No-MMU configured targets have no definition for debug_ll_io_init(). Not all machines use this and it will only be required if CONFIG_DEBUG_LL is enabled.

But when compiling for a target that uses it and it is configured for no-MMU (!CONFIG_MMU), for example the versatile machine, you will get:

CC arch/arm/mach-versatile/versatile_dt.o
arch/arm/mach-versatile/versatile_dt.c: In function ?versatile_map_io?:
arch/arm/mach-versatile/versatile_dt.c:283:2: error: implicit declaration of function ?debug_ll_io_init? [-Werror=implicit-function-declaration]
debug_ll_io_init();
^

Fix by adding a macro for it to the !CONFIG_MMU path in map.h.

---
 arch/arm/include/asm/mach/map.h | 1 +
 1 file changed, 1 insertion(+)
arch/arm/include/asm/mach/map.h +1 -0
index 9b7c328..b1fe9c8 100644
@@ -62,6 +62,7 @@ extern int ioremap_page(unsigned long virt, unsigned long phys,
 #else
 #define iotable_init(map,num)	do { } while (0)
 #define vm_reserve_area_early(a,s,c)	do { } while (0)
+#define debug_ll_io_init()	do { } while (0)
 #endif
 
 #endif
Signature · 1 line
1.9.1
#3 lore raw

cover arm/versatile: no-MMU support

In reply to Greg Ungerer

Hi Greg,

Quoted 12 lines · Greg Ungerer

Does the ARM Versatile machine have a maintainer?
I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

The following patches support configuring and building the versatile machine with a no-MMU kernel.

There is only a few minor changes required. It was previously possible in older kernels to build for versatile with CONFIG_MMU disabled, but the change to devicetree lost that capability. These changes make it possible again.

Quoted 8 lines

One patch is a fix for address translation (broken in older kernels too), two are build problems when CONFIG_MMU is disabled, and the last is the actuall configuration changes needed.

The motivation for this is that the versatile machine is well supported in qemu. And this provides an excellent platform for development and testing no-MMU support on ARM in general. With these patches applied it is possible to build and run a kernel with MMU disabled on qemu.

I'm wondering if my "Allow NOMMU for MULTIPLATFORM" series [1] work for you?

[1] https://www.spinics.net/lists/arm-kernel/msg546823.html

Cheers
Vladimir

Quoted 17 lines
---
 arch/arm/Kconfig                       |   10 ++++++++++
 arch/arm/Kconfig.debug                 |    3 ++-
 arch/arm/include/asm/mach/map.h        |    1 +
 arch/arm/mach-versatile/Kconfig        |    3 ++-
 arch/arm/mach-versatile/Makefile.boot  |    3 +++
 arch/arm/mach-versatile/versatile_dt.c |    4 ++++
 6 files changed, 22 insertions(+), 2 deletions(-)

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#4 lore raw

cover arm/versatile: no-MMU support

Hi Vladimir,

Quoted 19 lines · Vladimir Murzin

Hi Greg,

Quoted 16 lines · Greg Ungerer

Does the ARM Versatile machine have a maintainer?
I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

The following patches support configuring and building the versatile machine with a no-MMU kernel.

There is only a few minor changes required. It was previously possible in older kernels to build for versatile with CONFIG_MMU disabled, but the change to devicetree lost that capability. These changes make it possible again.

One patch is a fix for address translation (broken in older kernels too), two are build problems when CONFIG_MMU is disabled, and the last is the actuall configuration changes needed.

Quoted 8 lines
Quoted 4 lines

The motivation for this is that the versatile machine is well supported in qemu. And this provides an excellent platform for development and testing no-MMU support on ARM in general. With these patches applied it is possible to build and run a kernel with MMU disabled on qemu.

I'm wondering if my "Allow NOMMU for MULTIPLATFORM" series [1] work for you?

[1] https://www.spinics.net/lists/arm-kernel/msg546823.html

Sorry I hadn't seen these patches before.

Just tried them out. With CONFIG_EXPERT set I can select and build for the Versatile machine with CONFIG_MMU not set. The build is successful, but the resulting kernel doesn't boot.

I see that the resulting .config has CONFIG_PLAT_VERSATILE set but not CONFIG_ARCH_VERSATILE. Is this intentional?

With CONFIG_ARCH_VERSATILE missing the build doesn't traverse into arch/arm/mach-versatile, and you don't get any device tree built.

Ultimately to produce a working kernel we will still need my patch 01/04 ("ARM: versatile: support no-MMU mode addressing"). No surprise here, this was missing in older kernels too.

Regards
Greg

Quoted 19 lines
Quoted 17 lines
---
 arch/arm/Kconfig                       |   10 ++++++++++
 arch/arm/Kconfig.debug                 |    3 ++-
 arch/arm/include/asm/mach/map.h        |    1 +
 arch/arm/mach-versatile/Kconfig        |    3 ++-
 arch/arm/mach-versatile/Makefile.boot  |    3 +++
 arch/arm/mach-versatile/versatile_dt.c |    4 ++++
 6 files changed, 22 insertions(+), 2 deletions(-)

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#5 lore raw

cover arm/versatile: no-MMU support

Quoted 29 lines · Greg Ungerer

Hi Vladimir,

Quoted 26 lines · Vladimir Murzin

Hi Greg,

Quoted 12 lines · Greg Ungerer

Does the ARM Versatile machine have a maintainer?
I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

The following patches support configuring and building the versatile machine with a no-MMU kernel.

There is only a few minor changes required. It was previously possible in older kernels to build for versatile with CONFIG_MMU disabled, but the change to devicetree lost that capability. These changes make it possible again.

Quoted 8 lines

One patch is a fix for address translation (broken in older kernels too), two are build problems when CONFIG_MMU is disabled, and the last is the actuall configuration changes needed.

The motivation for this is that the versatile machine is well supported in qemu. And this provides an excellent platform for development and testing no-MMU support on ARM in general. With these patches applied it is possible to build and run a kernel with MMU disabled on qemu.

I'm wondering if my "Allow NOMMU for MULTIPLATFORM" series [1] work for you?

Quoted 7 lines
Quoted 1 line

[1] https://www.spinics.net/lists/arm-kernel/msg546823.html

Sorry I hadn't seen these patches before.

Just tried them out. With CONFIG_EXPERT set I can select and build for the Versatile machine with CONFIG_MMU not set. The build is successful, but the resulting kernel doesn't boot.

It is why "no guarantee" there ;)

Quoted 3 lines

I see that the resulting .config has CONFIG_PLAT_VERSATILE set but not CONFIG_ARCH_VERSATILE. Is this intentional?

No.

Quoted 5 lines

With CONFIG_ARCH_VERSATILE missing the build doesn't traverse into arch/arm/mach-versatile, and you don't get any device tree built.

I've just done:

$ make ARCH=arm versatile_defconfig nommu.config
...
$ grep VERSATILE .config                                                                                                                                                                                                                                                   1 CONFIG_ARCH_VERSATILE=y
CONFIG_PLAT_VERSATILE=y
CONFIG_I2C_VERSATILE=y
CONFIG_POWER_RESET_VERSATILE=y
CONFIG_PLAT_VERSATILE_CLCD=y
# CONFIG_LEDS_VERSATILE is not set
CONFIG_COMMON_CLK_VERSATILE=y
CONFIG_CLKSRC_VERSATILE=y
CONFIG_VERSATILE_FPGA_IRQ=y
CONFIG_VERSATILE_FPGA_IRQ_NR=4
CONFIG_DEBUG_VERSATILE=y
$ cat arch/arm/configs/nommu.config                                                                                                                                                                                                                                          
CONFIG_EXPERT=y
# CONFIG_MMU is not set

I didn't submit nommu config fragment, but it is is what I've been using to simplify defconfigs and randconfig builds.

Quoted 3 lines

Ultimately to produce a working kernel we will still need my patch 01/04 ("ARM: versatile: support no-MMU mode addressing"). No surprise here, this was missing in older kernels too.

Agreed.

Cheers
Vladimir

Quoted 25 lines

Regards
Greg

Quoted 19 lines
Quoted 17 lines
---
 arch/arm/Kconfig                       |   10 ++++++++++
 arch/arm/Kconfig.debug                 |    3 ++-
 arch/arm/include/asm/mach/map.h        |    1 +
 arch/arm/mach-versatile/Kconfig        |    3 ++-
 arch/arm/mach-versatile/Makefile.boot  |    3 +++
 arch/arm/mach-versatile/versatile_dt.c |    4 ++++
 6 files changed, 22 insertions(+), 2 deletions(-)

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#6 lore raw

cover arm/versatile: no-MMU support

In reply to Greg Ungerer

Hi Vladimir,

Quoted 29 lines · Greg Ungerer
Quoted 23 lines · Vladimir Murzin
Quoted 17 lines · Greg Ungerer

Does the ARM Versatile machine have a maintainer?
I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

The following patches support configuring and building the versatile machine with a no-MMU kernel.

There is only a few minor changes required. It was previously possible in older kernels to build for versatile with CONFIG_MMU disabled, but the change to devicetree lost that capability. These changes make it possible again.

One patch is a fix for address translation (broken in older kernels too),
two are build problems when CONFIG_MMU is disabled, and the last is the actuall configuration changes needed.

Quoted 4 lines

The motivation for this is that the versatile machine is well supported in qemu. And this provides an excellent platform for development and testing no-MMU support on ARM in general. With these patches applied it is possible to build and run a kernel with MMU disabled on qemu.

Quoted 4 lines

I'm wondering if my "Allow NOMMU for MULTIPLATFORM" series [1] work for you?

[1] https://www.spinics.net/lists/arm-kernel/msg546823.html

Quoted 8 lines

Sorry I hadn't seen these patches before.

Just tried them out. With CONFIG_EXPERT set I can select and build for the Versatile machine with CONFIG_MMU not set. The build is successful, but the resulting kernel doesn't boot.

I see that the resulting .config has CONFIG_PLAT_VERSATILE set but not CONFIG_ARCH_VERSATILE. Is this intentional?

Let me revise that. By setting the "Multiple platform selection" selection correctly to v5 platforms I did get CONFIG_ARCH_VERSATILE set, and could still successfully build the kernel.

A couple of other config options I had to readjust and I can boot up this kernel under qemu. So success!

Quoted 7 lines

With CONFIG_ARCH_VERSATILE missing the build doesn't traverse into arch/arm/mach-versatile, and you don't get any device tree built.

Ultimately to produce a working kernel we will still need my patch 01/04 ("ARM: versatile: support no-MMU mode addressing"). No surprise here, this was missing in older kernels too.

So in the end this is the only extra change I needed as well to get the running kernel.

Regards
Greg

#7 lore raw

cover arm/versatile: no-MMU support

Hi Greg,

Quoted 41 lines · Greg Ungerer

Hi Vladimir,

Quoted 29 lines · Greg Ungerer
Quoted 23 lines · Vladimir Murzin
Quoted 17 lines · Greg Ungerer

Does the ARM Versatile machine have a maintainer?
I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

The following patches support configuring and building the versatile machine with a no-MMU kernel.

There is only a few minor changes required. It was previously possible in older kernels to build for versatile with CONFIG_MMU disabled, but the change to devicetree lost that capability. These changes make it possible again.

One patch is a fix for address translation (broken in older kernels too),
two are build problems when CONFIG_MMU is disabled, and the last is the actuall configuration changes needed.

Quoted 4 lines

The motivation for this is that the versatile machine is well supported in qemu. And this provides an excellent platform for development and testing no-MMU support on ARM in general. With these patches applied it is possible to build and run a kernel with MMU disabled on qemu.

Quoted 4 lines

I'm wondering if my "Allow NOMMU for MULTIPLATFORM" series [1] work for you?

[1] https://www.spinics.net/lists/arm-kernel/msg546823.html

Quoted 8 lines

Sorry I hadn't seen these patches before.

Just tried them out. With CONFIG_EXPERT set I can select and build for the Versatile machine with CONFIG_MMU not set. The build is successful, but the resulting kernel doesn't boot.

I see that the resulting .config has CONFIG_PLAT_VERSATILE set but not CONFIG_ARCH_VERSATILE. Is this intentional?

Quoted 7 lines

Let me revise that. By setting the "Multiple platform selection" selection correctly to v5 platforms I did get CONFIG_ARCH_VERSATILE set, and could still successfully build the kernel.

A couple of other config options I had to readjust and I can boot up this kernel under qemu. So success!

Congrats!!!

Thanks for trying these patches! It is really nice to see someone else shows interest on NOMMU! If you don't mind I'll keep you in Cc when/if I re-spin my patches ;)

Cheers
Vladimir

Quoted 17 lines
Quoted 8 lines

With CONFIG_ARCH_VERSATILE missing the build doesn't traverse into arch/arm/mach-versatile, and you don't get any device tree built.

Ultimately to produce a working kernel we will still need my patch 01/04 ("ARM: versatile: support no-MMU mode addressing"). No surprise here, this was missing in older kernels too.

So in the end this is the only extra change I needed as well to get the running kernel.

Regards
Greg

#8 lore raw

cover arm/versatile: no-MMU support

Hi Vladimir,

Quoted 52 lines · Vladimir Murzin

Hi Greg,

Quoted 41 lines · Greg Ungerer

Hi Vladimir,

Quoted 29 lines · Greg Ungerer
Quoted 23 lines · Vladimir Murzin
Quoted 17 lines · Greg Ungerer

Does the ARM Versatile machine have a maintainer?
I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

The following patches support configuring and building the versatile machine with a no-MMU kernel.

There is only a few minor changes required. It was previously possible in older kernels to build for versatile with CONFIG_MMU disabled, but the change to devicetree lost that capability. These changes make it possible again.

One patch is a fix for address translation (broken in older kernels too),
two are build problems when CONFIG_MMU is disabled, and the last is the actuall configuration changes needed.

Quoted 4 lines

The motivation for this is that the versatile machine is well supported in qemu. And this provides an excellent platform for development and testing no-MMU support on ARM in general. With these patches applied it is possible to build and run a kernel with MMU disabled on qemu.

Quoted 4 lines

I'm wondering if my "Allow NOMMU for MULTIPLATFORM" series [1] work for you?

[1] https://www.spinics.net/lists/arm-kernel/msg546823.html

Quoted 8 lines

Sorry I hadn't seen these patches before.

Just tried them out. With CONFIG_EXPERT set I can select and build for the Versatile machine with CONFIG_MMU not set. The build is successful, but the resulting kernel doesn't boot.

I see that the resulting .config has CONFIG_PLAT_VERSATILE set but not CONFIG_ARCH_VERSATILE. Is this intentional?

Quoted 7 lines

Let me revise that. By setting the "Multiple platform selection" selection correctly to v5 platforms I did get CONFIG_ARCH_VERSATILE set, and could still successfully build the kernel.

A couple of other config options I had to readjust and I can boot up this kernel under qemu. So success!

Quoted 5 lines

Congrats!!!

Thanks for trying these patches! It is really nice to see someone else shows interest on NOMMU! If you don't mind I'll keep you in Cc when/if I re-spin my patches ;)

Yes, please do.

Regards
Greg

Quoted 22 lines

Cheers
Vladimir

Quoted 17 lines
Quoted 8 lines

With CONFIG_ARCH_VERSATILE missing the build doesn't traverse into arch/arm/mach-versatile, and you don't get any device tree built.

Ultimately to produce a working kernel we will still need my patch 01/04 ("ARM: versatile: support no-MMU mode addressing"). No surprise here, this was missing in older kernels too.

So in the end this is the only extra change I needed as well to get the running kernel.

Regards
Greg

#9 lore raw

cover arm/versatile: no-MMU support

In reply to Greg Ungerer
Quoted 1 line · Greg Ungerer

Does the ARM Versatile machine have a maintainer?

Russell did the original port so he tends to look after it a bit.

Rob Herring and myself tend to maintain it a bit too.

Quoted 2 lines

I have CC'ed this patch set to those names reported by get_maintainer. I had no feedback on the first posting of this series back in August.

Sorry.

Quoted 2 lines

The following patches support configuring and building the versatile machine with a no-MMU kernel.

Which I think is pretty nice.

Yours,
Linus Walleij