linux/arch/arm
Nicolas Pitre ca8b5d97d6 ARM: XIP kernel: store .data compressed in ROM
The .data segment stored in ROM is only copied to RAM once at boot time
and never referenced afterwards. This is arguably a suboptimal usage of
ROM resources.

This patch allows for compressing the .data segment before storing it
into ROM and decompressing it to RAM rather than simply copying it,
saving on precious ROM space.

Because global data is not available yet (obviously) we must allocate
decompressor workspace memory on the stack. The .bss area is used as a
stack area for that purpose before it is cleared. The required stack
frame is 9568 bytes for __inflate_kernel_data() alone, so make sure
the .bss is large enough to cope with that plus extra room for called
functions or fail the build.

Those numbers were picked arbitrarily based on the above 9568 byte
stack frame:

10240 (2.5 * PAGE_SIZE): used to override -Wframe-larger-than whose
default value is 1024.
12288 (3 * PAGE_SIZE): minimum .bss size to contain the stack.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Tested-by: Chris Brandt <Chris.Brandt@renesas.com>
2017-09-10 19:34:53 -04:00
..
boot ARM: XIP kernel: store .data compressed in ROM 2017-09-10 19:34:53 -04:00
common arm: implement ->dma_supported instead of ->set_dma_mask 2017-06-28 06:54:49 -07:00
configs This is the big bulk of pin control changes for the v4.13 series: 2017-07-06 11:38:59 -07:00
crypto crypto: arm/crc32 - enable module autoloading based on CPU feature bits 2017-06-01 12:55:42 +08:00
firmware
include KVM: update to new mmu_notifier semantic v2 2017-08-31 16:13:00 -07:00
kernel ARM: XIP kernel: store .data compressed in ROM 2017-09-10 19:34:53 -04:00
kvm Merge branch 'kvmarm-master/master' into HEAD 2017-06-15 09:35:15 +01:00
lib
mach-actions ARM: owl: smp: Drop bogus holding pen 2017-07-03 14:31:47 +02:00
mach-alpine
mach-artpec
mach-asm9260
mach-aspeed clocksource/drivers/fttmr010: Merge Moxa into FTTMR010 2017-06-12 10:45:10 +02:00
mach-at91 ARM: at91: don't select CONFIG_ARM_CPU_SUSPEND for old platforms 2017-08-23 17:31:39 +02:00
mach-axxia
mach-bcm ARM: SoC platform updates 2017-07-04 14:34:51 -07:00
mach-berlin
mach-clps711x clocksource/drivers: Rename CLKSRC_OF to TIMER_OF 2017-06-14 12:01:03 +02:00
mach-cns3xxx
mach-davinci ARM: davinci: normalize clk API 2017-07-27 13:15:29 +02:00
mach-digicolor
mach-dove ARM/PCI: Convert PCI scan API to pci_scan_root_bus_bridge() 2017-06-28 15:13:55 -05:00
mach-ebsa110
mach-efm32
mach-ep93xx ARM: ep93xx: normalize clk API 2017-07-27 22:57:24 +02:00
mach-exynos
mach-footbridge
mach-gemini
mach-highbank
mach-hisi
mach-imx ARM: imx6ull: Make suspend/resume work like on 6ul 2017-06-07 11:38:40 +08:00
mach-integrator
mach-iop13xx ARM/PCI: Convert PCI scan API to pci_scan_root_bus_bridge() 2017-06-28 15:13:55 -05:00
mach-iop32x
mach-iop33x
mach-ixp4xx ARM: ixp4xx: fix ioport_unmap definition 2017-07-27 22:57:53 +02:00
mach-keystone
mach-ks8695
mach-lpc18xx
mach-lpc32xx
mach-mediatek clocksource/drivers: Rename clocksource_probe to timer_probe 2017-06-14 11:59:16 +02:00
mach-meson arm: meson: select the clock controller for Meson8 2017-06-09 11:15:36 -07:00
mach-mmp ARM: mmp: mark usb_dma_mask as __maybe_unused 2017-07-27 22:57:49 +02:00
mach-moxart clocksource/drivers/fttmr010: Merge Moxa into FTTMR010 2017-06-12 10:45:10 +02:00
mach-mv78xx0 ARM/PCI: Convert PCI scan API to pci_scan_root_bus_bridge() 2017-06-28 15:13:55 -05:00
mach-mvebu ARM: mvebu: use __pa_symbol in the mv98dx3236 platform SMP code 2017-07-18 11:26:30 +02:00
mach-mxs
mach-netx
mach-nomadik
mach-nspire
mach-omap1 ARM: omap1: avoid unused variable warning 2017-07-27 22:57:46 +02:00
mach-omap2 ARM: SoC fixes for 4.13 2017-08-04 15:12:15 -07:00
mach-orion5x ARM/PCI: Convert PCI scan API to pci_scan_root_bus_bridge() 2017-06-28 15:13:55 -05:00
mach-oxnas
mach-picoxcell
mach-prima2 ARM: sirf: mark sirfsoc_init_late as __maybe_unused 2017-07-27 22:57:44 +02:00
mach-pxa ARM: pxa: select both FB and FB_W100 for eseries 2017-07-27 22:57:55 +02:00
mach-qcom
mach-realview
mach-rockchip ARM: SoC platform updates 2017-07-04 14:34:51 -07:00
mach-rpc ARM: rpc: rename RAM_SIZE macro 2017-07-27 22:57:38 +02:00
mach-s3c24xx clocksource/drivers: Rename CLKSRC_OF to TIMER_OF 2017-06-14 12:01:03 +02:00
mach-s3c64xx dmaengine updates for 4.13-rc1 2017-07-08 12:36:50 -07:00
mach-s5pv210
mach-sa1100 ARM: sa1100: normalize clk API 2017-07-27 13:15:50 +02:00
mach-shmobile Third Round of Renesas ARM Based SoC Fixes for v4.13 2017-08-04 12:54:41 +02:00
mach-socfpga
mach-spear dmaengine updates for 4.13-rc1 2017-07-08 12:36:50 -07:00
mach-sti
mach-stm32 ARM: stm32: Introduce MACH_STM32F469 flag 2017-06-18 20:10:27 -07:00
mach-sunxi clocksource/drivers: Rename clocksource_probe to timer_probe 2017-06-14 11:59:16 +02:00
mach-tango
mach-tegra
mach-u300 clocksource/drivers: Rename clocksource_probe to timer_probe 2017-06-14 11:59:16 +02:00
mach-uniphier
mach-ux500 drivers/perf: arm_pmu: Request PMU SPIs with IRQF_PER_CPU 2017-07-27 13:43:22 +01:00
mach-versatile
mach-vexpress
mach-vt8500
mach-w90x900 ARM: w90x900: normalize clk API 2017-07-27 22:57:36 +02:00
mach-zx
mach-zynq clocksource/drivers: Rename clocksource_probe to timer_probe 2017-06-14 11:59:16 +02:00
mm ARM: NOMMU: Wire-up default DMA interface 2017-07-20 16:09:27 +02:00
net
nwfpe
oprofile
plat-iop
plat-omap
plat-orion
plat-pxa
plat-samsung
plat-versatile
probes
tools
vdso
vfp
xen This is the first pull request for the new dma-mapping subsystem 2017-07-06 19:20:54 -07:00
Kconfig ARM: XIP kernel: store .data compressed in ROM 2017-09-10 19:34:53 -04:00
Kconfig-nommu
Kconfig.debug SoC for 4.13: 2017-06-18 22:53:20 -07:00
Makefile ARM: Prepare Actions Semi S500 2017-06-21 18:08:41 +02:00