Skip to contentSkip to conversation

ARM: uncompress.h multi-platform enablement

RFC PATCH New Stephen Warren 7 participants 18 messages Sep 25, 2012 – Sep 28, 2012

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

cover ARM: uncompress.h multi-platform enablement

From: Stephen Warren <[email protected]>

Tegra's uncompress and debug-macro.S communicate to each-other. Hence, we can't be left without uncompress.h in a multi-platform enabled kernel, or we'll lose features. This series allows uncompress.h to be used in a multi-platform kernel, restores the mvebu uncompress.h, and finally moves the Tegra debug macros into the common location. The series as mainly an RFC due to the outstanding question of where to put Tegra's <mach/iomap.h> in the final patch.

Stephen Warren (3):
ARM: move ICEDCC uncompress.h to common location
ARM: mvebu: restore uncompress.h
ARM: tegra: move debug macros to include/debug

 arch/arm/Kconfig.debug                             |   20 ++++++
 arch/arm/boot/compressed/misc.c                    |   64 +-------------------
 arch/arm/include/debug/icedcc-uncompress.h         |   61 +++++++++++++++++++
 arch/arm/include/debug/mvebu-uncompress.h          |   43 +++++++++++++
 arch/arm/include/debug/none-uncompress.h           |    3 +
 .../debug/tegra-uncompress.h}                      |    6 +-
 .../mach/debug-macro.S => include/debug/tegra.S}   |    6 +-
 7 files changed, 132 insertions(+), 71 deletions(-)
 create mode 100644 arch/arm/include/debug/icedcc-uncompress.h
 create mode 100644 arch/arm/include/debug/mvebu-uncompress.h
 create mode 100644 arch/arm/include/debug/none-uncompress.h
 rename arch/arm/{mach-tegra/include/mach/uncompress.h => include/debug/tegra-uncompress.h} (98%)
 rename arch/arm/{mach-tegra/include/mach/debug-macro.S => include/debug/tegra.S} (96%)
#1 lore raw

RFC PATCH 1/3 ARM: move ICEDCC uncompress.h to common location

From: Stephen Warren <[email protected]>

Create a common location for uncompress.h, and select the included debug macro file using config option.

This does the same for uncompress.h as a recent patch for debug-macro.S, which was based on a suggestion by Russell King and implemented by Rob Herring.

Cc Rob Herring <[email protected]>
Cc Russell King <[email protected]>
---
 arch/arm/Kconfig.debug                     |   10 ++++
 arch/arm/boot/compressed/misc.c            |   64 +---------------------------
 arch/arm/include/debug/icedcc-uncompress.h |   61 ++++++++++++++++++++++++++
 arch/arm/include/debug/none-uncompress.h   |    3 +
 4 files changed, 75 insertions(+), 63 deletions(-)
 create mode 100644 arch/arm/include/debug/icedcc-uncompress.h
 create mode 100644 arch/arm/include/debug/none-uncompress.h
arch/arm/Kconfig.debug +10 -0
index b0f3857..0daec3d 100644
@@ -420,6 +420,16 @@ config DEBUG_LL_INCLUDE
 		DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1
 	default "mach/debug-macro.S"
 
+config UNCOMPRESS_INCLUDE
+	string
+	default "debug/icedcc-uncompress.h" if DEBUG_ICEDCC
+	default "debug/none-uncompress.h" if ARCH_MULTIPLATFORM || \
+		DEBUG_HIGHBANK_UART || DEBUG_MVEBU_UART || \
+		DEBUG_PICOXCELL_UART || DEBUG_SOCFPGA_UART || \
+		DEBUG_VEXPRESS_UART0_DETECT || DEBUG_VEXPRESS_UART0_CA9 || \
+		DEBUG_VEXPRESS_UART0_RS1
+	default "mach/uncompress.h"
+
 config EARLY_PRINTK
 	bool "Early printk"
 	depends on DEBUG_LL
arch/arm/boot/compressed/misc.c +1 -63

70 lines not on this page · raw message

arch/arm/include/debug/icedcc-uncompress.h new file +61 -0

61 lines not on this page · raw message

arch/arm/include/debug/none-uncompress.h new file +3 -0
new file mode 100644
index 0000000..e19955d
@@ -0,0 +1,3 @@
+static inline void putc(int c) {}
+static inline void flush(void) {}
+static inline void arch_decomp_setup(void) {}
Signature · 1 line
1.7.0.4
#2 lore raw

RFC PATCH 1/3 ARM: move ICEDCC uncompress.h to common location

Quoted 27 lines · Stephen Warren

From: Stephen Warren <[email protected]>

Create a common location for uncompress.h, and select the included debug macro file using config option.

This does the same for uncompress.h as a recent patch for debug-macro.S, which was based on a suggestion by Russell King and implemented by Rob Herring.

Cc Rob Herring <[email protected]>
Cc Russell King <[email protected]>
---
 arch/arm/Kconfig.debug                     |   10 ++++
 arch/arm/boot/compressed/misc.c            |   64 +---------------------------
 arch/arm/include/debug/icedcc-uncompress.h |   61 ++++++++++++++++++++++++++
 arch/arm/include/debug/none-uncompress.h   |    3 +
 4 files changed, 75 insertions(+), 63 deletions(-)
 create mode 100644 arch/arm/include/debug/icedcc-uncompress.h
 create mode 100644 arch/arm/include/debug/none-uncompress.h
arch/arm/Kconfig.debug +0 -0
index b0f3857..0daec3d 100644
@@ -420,6 +420,16 @@ config DEBUG_LL_INCLUDE
 		DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1

arch/arm/Kconfig.debug config DEBUG_LL_INCLUDE · line 430

Quoted 10 lines
arch/arm/Kconfig.debug +8 -0
 	default "mach/debug-macro.S"
 
+config UNCOMPRESS_INCLUDE
+	string
+	default "debug/icedcc-uncompress.h" if DEBUG_ICEDCC
+	default "debug/none-uncompress.h" if ARCH_MULTIPLATFORM || \
+		DEBUG_HIGHBANK_UART || DEBUG_MVEBU_UART || \
+		DEBUG_PICOXCELL_UART || DEBUG_SOCFPGA_UART || \
+		DEBUG_VEXPRESS_UART0_DETECT || DEBUG_VEXPRESS_UART0_CA9 || \
+		DEBUG_VEXPRESS_UART0_RS1

I would ask to add DEBUG_LL_UART_NONE to the or-ed list, which fixes the build of platforms without mach/uncompress.h and mach/debug-macro.S in case NONE is selected, but I'm not sure.

If I got the point of Russel right, uncompress.h is not a debug trace and maybe should not depend on any DEBUG_LL* option?

Regards,
Domenico

#3 lore raw

RFC PATCH 1/3 ARM: move ICEDCC uncompress.h to common location

Quoted 12 lines · Domenico Andreoli
Quoted 10 lines · Stephen Warren

From: Stephen Warren <[email protected]>

Create a common location for uncompress.h, and select the included debug macro file using config option.

This does the same for uncompress.h as a recent patch for debug-macro.S, which was based on a suggestion by Russell King and implemented by Rob Herring.

arch/arm/Kconfig.debug +0 -0
Quoted 12 lines

arch/arm/Kconfig.debug config DEBUG_LL_INCLUDE · line 430

Quoted 8 lines
arch/arm/Kconfig.debug +8 -0
+config UNCOMPRESS_INCLUDE
+	string
+	default "debug/icedcc-uncompress.h" if DEBUG_ICEDCC
+	default "debug/none-uncompress.h" if ARCH_MULTIPLATFORM || \
+		DEBUG_HIGHBANK_UART || DEBUG_MVEBU_UART || \
+		DEBUG_PICOXCELL_UART || DEBUG_SOCFPGA_UART || \
+		DEBUG_VEXPRESS_UART0_DETECT || DEBUG_VEXPRESS_UART0_CA9 || \
+		DEBUG_VEXPRESS_UART0_RS1

I would ask to add DEBUG_LL_UART_NONE to the or-ed list, which fixes the build of platforms without mach/uncompress.h and mach/debug-macro.S in case NONE is selected, but I'm not sure.

Yes, I just noticed that it (UART_NONE) depends on !MULTIPLATFORM, and with this patch it probably shouldn't any more; it should be the default uncompress type for MULTIPLATFORM.

Quoted 2 lines

If I got the point of Russel right, uncompress.h is not a debug trace and maybe should not depend on any DEBUG_LL* option?

The only way a multi-platform zImage can work (at the moment anyway) is to have no serial/debug/... output from the uncompressor, nor earlyprintk. Once the DT is parsed and the real platform-specific console driver is registered, console output can commence. If the kernel experiences problems before that point, you might want to turn on earlyprintk or even output from the uncompressor. Once you've done that, you've tied the kernel image to a single platform. This is likely only something you'd do when debugging a problem, otherwise it would defeat the point of single zImage. Hence, classifying this as a debug option seems reasonable.

#4 lore raw

RFC PATCH 2/3 ARM: mvebu: restore uncompress.h

In reply to Stephen Warren

From: Stephen Warren <[email protected]>

Now that we have a way to provide uncompress.h in a multi-platform zImage, re-instate mvebu's uncompress.h. This was originally removed as part of commit 387798b "ARM: initial multiplatform support". Note that actually enabling this via DEBUG_LL still entails the restrictions outlined for that option.

Cc Gregory CLEMENT <[email protected]>
Cc Thomas Petazzoni <[email protected]>
Cc Lior Amsalem <[email protected]>
Cc Andrew Lunn <[email protected]>
Cc Yehuda Yitschak <[email protected]>
---
 arch/arm/Kconfig.debug                    |    3 +-
 arch/arm/include/debug/mvebu-uncompress.h |   43 +++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/include/debug/mvebu-uncompress.h
arch/arm/Kconfig.debug +2 -1
index 0daec3d..af34a43 100644
@@ -423,8 +423,9 @@ config DEBUG_LL_INCLUDE
 config UNCOMPRESS_INCLUDE
 	string
 	default "debug/icedcc-uncompress.h" if DEBUG_ICEDCC
+	default "debug/mvebu-uncompress.h" if DEBUG_MVEBU_UART
 	default "debug/none-uncompress.h" if ARCH_MULTIPLATFORM || \
-		DEBUG_HIGHBANK_UART || DEBUG_MVEBU_UART || \
+		DEBUG_HIGHBANK_UART || \
 		DEBUG_PICOXCELL_UART || DEBUG_SOCFPGA_UART || \
 		DEBUG_VEXPRESS_UART0_DETECT || DEBUG_VEXPRESS_UART0_CA9 || \
 		DEBUG_VEXPRESS_UART0_RS1
arch/arm/include/debug/mvebu-uncompress.h new file +43 -0

43 lines not on this page · raw message

Signature · 1 line
1.7.0.4
#5 lore raw

RFC PATCH 3/3 ARM: tegra: move debug macros to include/debug

In reply to Stephen Warren

From: Stephen Warren <[email protected]>

Move Tegra's debug-macro.S and uncompress.h over to the common debug macro directory.

---
TODO: We need to find a better solution for access to <mach/iomap.h>. Perhaps the headers should just be moved into some generally accessible location, such as arch/arm/include or include/linux/...

---
 arch/arm/Kconfig.debug                             |    9 +++++++++
 .../debug/tegra-uncompress.h}                      |    6 ++----
 .../mach/debug-macro.S => include/debug/tegra.S}   |    6 ++----
 3 files changed, 13 insertions(+), 8 deletions(-)
 rename arch/arm/{mach-tegra/include/mach/uncompress.h => include/debug/tegra-uncompress.h} (98%)
 rename arch/arm/{mach-tegra/include/mach/debug-macro.S => include/debug/tegra.S} (96%)
arch/arm/Kconfig.debug +9 -0
index af34a43..78e11ed 100644
@@ -345,6 +345,13 @@ choice
 		  Say Y here if you want kernel low-level debugging support
 		  on SOCFPGA based platforms.
 
+	config DEBUG_TEGRA_UART
+		depends on ARCH_TEGRA
+		bool "Use Tegra UART for low-level debug"
+		help
+		  Say Y here if you want kernel low-level debugging support
+		  on Tegra based platforms.
+
 	config DEBUG_VEXPRESS_UART0_DETECT
 		bool "Autodetect UART0 on Versatile Express Cortex-A core tiles"
 		depends on ARCH_VEXPRESS && CPU_CP15_MMU
@@ -418,12 +425,14 @@ config DEBUG_LL_INCLUDE
 	default "debug/socfpga.S" if DEBUG_SOCFPGA_UART
 	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \
 		DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1
+	default "debug/tegra.S" if DEBUG_TEGRA_UART
 	default "mach/debug-macro.S"
 
 config UNCOMPRESS_INCLUDE
 	string
 	default "debug/icedcc-uncompress.h" if DEBUG_ICEDCC
 	default "debug/mvebu-uncompress.h" if DEBUG_MVEBU_UART
+	default "debug/tegra-uncompress.h" if DEBUG_TEGRA_UART
 	default "debug/none-uncompress.h" if ARCH_MULTIPLATFORM || \
 		DEBUG_HIGHBANK_UART || \
 		DEBUG_PICOXCELL_UART || DEBUG_SOCFPGA_UART || \
arch/arm/include/debug/tegra-uncompress.h renamed from arch/arm/mach-tegra/include/mach/uncompress.h +2 -4
similarity index 98%
rename from arch/arm/mach-tegra/include/mach/uncompress.h
rename to arch/arm/include/debug/tegra-uncompress.h
index 937c4c5..da0f7e5 100644
@@ -1,6 +1,4 @@
 /*
- * arch/arm/mach-tegra/include/mach/uncompress.h
- *
  * Copyright (C) 2010 Google, Inc.
  * Copyright (C) 2011 Google, Inc.
  * Copyright (C) 2011-2012 NVIDIA CORPORATION. All Rights Reserved.
@@ -28,8 +26,8 @@
 #include <linux/types.h>
 #include <linux/serial_reg.h>
 
-#include <mach/iomap.h>
-#include <mach/irammap.h>
+#include "../../mach-tegra/include/mach/iomap.h"
+#include "../../mach-tegra/include/mach/irammap.h"
 
 #define BIT(x) (1 << (x))
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
arch/arm/include/debug/tegra.S renamed from arch/arm/mach-tegra/include/mach/debug-macro.S +2 -4
similarity index 96%
rename from arch/arm/mach-tegra/include/mach/debug-macro.S
rename to arch/arm/include/debug/tegra.S
index 8ce0661..879511b 100644
@@ -1,6 +1,4 @@
 /*
- * arch/arm/mach-tegra/include/mach/debug-macro.S
- *
  * Copyright (C) 2010,2011 Google, Inc.
  * Copyright (C) 2011-2012 NVIDIA CORPORATION. All Rights Reserved.
  *
@@ -26,8 +24,8 @@
 
 #include <linux/serial_reg.h>
 
-#include <mach/iomap.h>
-#include <mach/irammap.h>
+#include "../../mach-tegra/include/mach/iomap.h"
+#include "../../mach-tegra/include/mach/irammap.h"
 
 		.macro  addruart, rp, rv, tmp
 		adr	\rp, 99f		@ actual addr of 99f
Signature · 1 line
1.7.0.4
#6 lore raw

cover ARM: uncompress.h multi-platform enablement

In reply to Stephen Warren
Quoted 10 lines · Stephen Warren

From: Stephen Warren <[email protected]>

Tegra's uncompress and debug-macro.S communicate to each-other. Hence, we can't be left without uncompress.h in a multi-platform enabled kernel, or we'll lose features. This series allows uncompress.h to be used in a multi-platform kernel, restores the mvebu uncompress.h, and finally moves the Tegra debug macros into the common location. The series as mainly an RFC due to the outstanding question of where to put Tegra's <mach/iomap.h> in the final patch.

To follow up on the IRC discussion we had yesterday leading to this patch set, I had another idea of how to handle the same: Since the decompressor code is actually fairly separate from the kernel, we could also build multiple versions of it, and link in the same compressed vmlinux.

We already allow building Image/zImage/uImage from the same vmlinux, and that could theoretically be extended.

Your approach of course also sounds ok, and we could eventually combine the two.

Arnd

#7 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 13 lines · Arnd Bergmann
Quoted 10 lines · Stephen Warren

From: Stephen Warren <[email protected]>

Tegra's uncompress and debug-macro.S communicate to each-other. Hence, we can't be left without uncompress.h in a multi-platform enabled kernel, or we'll lose features. This series allows uncompress.h to be used in a multi-platform kernel, restores the mvebu uncompress.h, and finally moves the Tegra debug macros into the common location. The series as mainly an RFC due to the outstanding question of where to put Tegra's <mach/iomap.h> in the final patch.

Quoted 4 lines

To follow up on the IRC discussion we had yesterday leading to this patch set, I had another idea of how to handle the same: Since the decompressor code is actually fairly separate from the kernel, we could also build multiple versions of it, and link in the same compressed vmlinux.

That rubbishes the idea of a single kernel though, which is to give distros a single kernel image that they can boot on different ARM platforms.

They want a single kernel binary that works everywhere, not one which they need to select the right binary to work on platform X. Yes, the _internal_ uncompressed bulk may be the same, but it would require distros to carry around N different kernel images for N different platforms.

#8 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 9 lines · Russell King - ARM Linux

That rubbishes the idea of a single kernel though, which is to give distros a single kernel image that they can boot on different ARM platforms.

They want a single kernel binary that works everywhere, not one which they need to select the right binary to work on platform X. Yes, the internal uncompressed bulk may be the same, but it would require distros to carry around N different kernel images for N different platforms.

Right. It still helps the distros ensure that they only have a single configuration and a single binary to test, which I expect is their main interest, but keeping multiple copies of the same binary with different headers is a bit silly, I agree.

On PowerPC, we have a similar problem, and the way that distros usually deal with that is to do the final link of the zImage from the post-install stage of their rpm or deb packages, depending on the platform they are on. In the same stage, they also link in the newly created initrd and the device tree blob if necessary.

Arnd

#9 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 16 lines · Arnd Bergmann
Quoted 9 lines · Russell King - ARM Linux

That rubbishes the idea of a single kernel though, which is to give distros a single kernel image that they can boot on different ARM platforms.

They want a single kernel binary that works everywhere, not one which they need to select the right binary to work on platform X. Yes, the internal uncompressed bulk may be the same, but it would require distros to carry around N different kernel images for N different platforms.

Right. It still helps the distros ensure that they only have a single configuration and a single binary to test, which I expect is their main interest, but keeping multiple copies of the same binary with different headers is a bit silly, I agree.

Quoted 5 lines

On PowerPC, we have a similar problem, and the way that distros usually deal with that is to do the final link of the zImage from the post-install stage of their rpm or deb packages, depending on the platform they are on. In the same stage, they also link in the newly created initrd and the device tree blob if necessary.

Wouldn't help to have a sort of generic console driver in the decompressor accepting some regs and masks provided by DT? This would fit most of the uarts around, would be totally generic and multi-platform friendly.

Regards,
Domenico

#10 lore raw

cover ARM: uncompress.h multi-platform enablement

In reply to Russell King - ARM Linux
Quoted 23 lines · Russell King - ARM Linux
Quoted 13 lines · Arnd Bergmann
Quoted 10 lines · Stephen Warren

From: Stephen Warren <[email protected]>

Tegra's uncompress and debug-macro.S communicate to each-other. Hence, we can't be left without uncompress.h in a multi-platform enabled kernel, or we'll lose features. This series allows uncompress.h to be used in a multi-platform kernel, restores the mvebu uncompress.h, and finally moves the Tegra debug macros into the common location. The series as mainly an RFC due to the outstanding question of where to put Tegra's <mach/iomap.h> in the final patch.

Quoted 4 lines

To follow up on the IRC discussion we had yesterday leading to this patch set, I had another idea of how to handle the same: Since the decompressor code is actually fairly separate from the kernel, we could also build multiple versions of it, and link in the same compressed vmlinux.

That rubbishes the idea of a single kernel though, which is to give distros a single kernel image that they can boot on different ARM platforms.

Quoted 5 lines

They want a single kernel binary that works everywhere, not one which they need to select the right binary to work on platform X. Yes, the _internal_ uncompressed bulk may be the same, but it would require distros to carry around N different kernel images for N different platforms.

Will those of us not interested in a single kernel binary that works everywhere be able to configure an ARM kernel image without a lot of bloat?
-- Tim

=============================
Tim Bird
Architecture Group Chair, CE Workgroup of the Linux Foundation Senior Staff Engineer, Sony Network Entertainment
=============================

#11 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 3 lines · Tim Bird

Will those of us not interested in a single kernel binary that works everywhere be able to configure an ARM kernel image without a lot of bloat?

I'm not aware of increase in code size from the single kernel image yet. If you find something, let us know.

For the platforms that are being converted to multiplatform in 3.7, the kernel binary should be essentially the same between building a single-platform kernel before the patches, and a multiplatform kernel with only one platform enabled after the patches.

We had to add a few indirect function pointers, e.g. for SMP startup, but that overhead is measured in bytes, not kilobytes.

Arnd

#12 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 7 lines · Arnd Bergmann
Quoted 3 lines · Tim Bird

Will those of us not interested in a single kernel binary that works everywhere be able to configure an ARM kernel image without a lot of bloat?

I'm not aware of increase in code size from the single kernel image yet. If you find something, let us know.

I have been assuming that the device tree conversion added a small overhead to both the kernel size and the boot time. You are correct that I should measure this before complaining. :-) I'll try to do that when I have some time. Unfortunately, before and after size snapshots are a little difficult to obtain -- it appears that support for device tree involves other refactoring.

My main issue is to avoid requiring the loading of drivers and features that are not required for a platform, if the platform does not need it (or the developer chooses to omit it). I may have mis-read this thread, but it sounded like the uncompress code was going to be moved to a common area and not be configurable.

Sorry if this is not the case.
-- Tim

=============================
Tim Bird
Architecture Group Chair, CE Workgroup of the Linux Foundation Senior Staff Engineer, Sony Network Entertainment
=============================

#13 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 7 lines · Tim Bird

My main issue is to avoid requiring the loading of drivers and features that are not required for a platform, if the platform does not need it (or the developer chooses to omit it). I may have mis-read this thread, but it sounded like the uncompress code was going to be moved to a common area and not be configurable.

The suggestion was to move it into a different location, but you still would only have one version of it, even for a multiplatform kernel, so no code growth there.

Right now, a multiplatform kernel has no way of debugging the decompressor using console output, so it's actually /smaller/ than a single-platform kernel, but also less capable.

Stephen's patches are a way to bring that feature back for platforms that are converted to multiplatform, but such a kernel would still only work on a single platform, even if it has all the actual kernel code enabled to support others.

Arnd

#14 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 3 lines · Arnd Bergmann

Right now, a multiplatform kernel has no way of debugging the decompressor using console output, so it's actually /smaller/ than a single-platform kernel, but also less capable.

Err, are you sure about all your details above? You do realise when debugging is disabled there is no debug code included anywhere in the decompressor?

I think what you're referring to is not the debug output, but the normal decompressor output. (The "Decompressing Linux..." message is not debug output.)

Let's be a little more clear about what "less capable" means - it will be unable to report any errors that occur during the decompression. What that means is that you'll end up with mere silence should an error occur.

#15 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 9 lines · Russell King - ARM Linux
Quoted 3 lines · Arnd Bergmann

Right now, a multiplatform kernel has no way of debugging the decompressor using console output, so it's actually /smaller/ than a single-platform kernel, but also less capable.

Err, are you sure about all your details above? You do realise when debugging is disabled there is no debug code included anywhere in the decompressor?

Quoted 8 lines

I think what you're referring to is not the debug output, but the normal decompressor output. (The "Decompressing Linux..." message is not debug output.)

Let's be a little more clear about what "less capable" means - it will be unable to report any errors that occur during the decompression. What that means is that you'll end up with mere silence should an error occur.

In the Tegra case, by omitting uncompress.h, we lose more than just the "Decompressing Linux..." message; uncompress.h contains code to parse extract the platform's debug UART ID from data set up by the boot ROM (since we have 5 UARTs), and pass this on to debug-macro.S. Without uncompress.h running, debug-macro.S would either have to hard-code a single UART ID (and different boards uses different UARTs, which would make running a single kernel image across all Tegra devices with earlyprintk enabled impossible) *or* we'd have to port the UART ID extraction code to debug-macro.S too, which I don't fancy very much since that's assembly whereas uncompress.h is C.

#16 lore raw

cover ARM: uncompress.h multi-platform enablement

Quoted 4 lines · Stephen Warren

In the Tegra case, by omitting uncompress.h, we lose more than just the "Decompressing Linux..." message; uncompress.h contains code to parse extract the platform's debug UART ID from data set up by the boot ROM (since we have 5 UARTs), and pass this on to debug-macro.S.

Let me tell you that this is totally evil. OMAP and Davinci are doing the same abuse.

Quoted 5 lines

Without uncompress.h running, debug-macro.S would either have to hard-code a single UART ID (and different boards uses different UARTs, which would make running a single kernel image across all Tegra devices with earlyprintk enabled impossible) *or* we'd have to port the UART ID extraction code to debug-macro.S too,

Please do the later. That's the only sane solution.

Quoted 2 lines

which I don't fancy very much since that's assembly whereas uncompress.h is C.

Well, that's too bad. Time to sharpen your assembly skills. ;-)

Nicolas

#17 lore raw

cover ARM: uncompress.h multi-platform enablement

In reply to Stephen Warren

HI,

what happend on the patch serie taht use the fdt to do the same

Best Regards,
J.

Quoted 34 lines · Stephen Warren

From: Stephen Warren <[email protected]>

Tegra's uncompress and debug-macro.S communicate to each-other. Hence, we can't be left without uncompress.h in a multi-platform enabled kernel, or we'll lose features. This series allows uncompress.h to be used in a multi-platform kernel, restores the mvebu uncompress.h, and finally moves the Tegra debug macros into the common location. The series as mainly an RFC due to the outstanding question of where to put Tegra's <mach/iomap.h> in the final patch.

Stephen Warren (3):
ARM: move ICEDCC uncompress.h to common location
ARM: mvebu: restore uncompress.h
ARM: tegra: move debug macros to include/debug

 arch/arm/Kconfig.debug                             |   20 ++++++
 arch/arm/boot/compressed/misc.c                    |   64 +-------------------
 arch/arm/include/debug/icedcc-uncompress.h         |   61 +++++++++++++++++++
 arch/arm/include/debug/mvebu-uncompress.h          |   43 +++++++++++++
 arch/arm/include/debug/none-uncompress.h           |    3 +
 .../debug/tegra-uncompress.h}                      |    6 +-
 .../mach/debug-macro.S => include/debug/tegra.S}   |    6 +-
 7 files changed, 132 insertions(+), 71 deletions(-)
 create mode 100644 arch/arm/include/debug/icedcc-uncompress.h
 create mode 100644 arch/arm/include/debug/mvebu-uncompress.h
 create mode 100644 arch/arm/include/debug/none-uncompress.h
 rename arch/arm/{mach-tegra/include/mach/uncompress.h => include/debug/tegra-uncompress.h} (98%)
 rename arch/arm/{mach-tegra/include/mach/debug-macro.S => include/debug/tegra.S} (96%)

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