[PATCH 00/78] ARM aarch64 updates

Sascha Hauer s.hauer at pengutronix.de
Fri Mar 16 05:52:36 PDT 2018


Hi All,

Here is a massive update for the ARM aarch64 port. With the following
series the aarch64 port should be on par with the 32bit support.

With this aarch64 supports relocatable binaries, proper MMU support, DMA
cache maintenance operations, and finally starting a aarch64 Linux
image :)

This all has been developed on a i.MX8MQ EVK board. The i.MX8MQ patches
are currently evolving, but are not yet quite ready. DDR setup is still
very crude and pinmux is not yet working. NXP did a nice job with the
i.MX8MQ: It behaves very much like a i.MX6 with a different core, so
we already have most of the drivers and I could concentrate on the
aarch64 update. I hope I can send i.MX8 patches soon.

Sascha


Sascha Hauer (78):
  ARM: Use obj-pbl- where appropriate
  ARM: Add 64bit compilation alternative
  ARM: return positive offset in get_runtime_offset()
  ARM: mmu: include pgtable header from where it's needed
  ARM: For relocatable image force TEXT_BASE 0x0
  ARM: scroll past image end without ld_var
  ARM: move away from ld_var
  ARM: remove ld_var support
  ARM: android image: Fix compiler warning on aarch64
  ARM: bootm: Fix wrong format specifier
  ARM: shutdown: Fix compiler warning
  ARM: aarch64: silence compiler warning
  ARM: aarch64: Add dummy naked attribute
  ARM: get_runtime_offset() returns unsigned long
  ARM: aarch64: Add runtime-offset
  ARM: aarch64: implement get_pc()
  ARM: Use generic ffz()
  ARM: bitops: remove unnecessary #ifdef
  ARM: aarch64: Do not use 32bit optimized fls
  ARM: Move mmu_disable to mmu.c
  debug_ll: support 64bit longs
  ARM: aarch64: fix early cache flushing
  ARM: aarch64: cache: Add v8_inv_dcache_range
  ARM: aarch64: cache: no need to ifdef prototypes
  ARM: Add function to return offset to global variables
  ARM: remove function prototypes from the past
  ARM: move linker variable declarations to sections.h
  ARM: relocate_to_current_adr: Use unsigned long for variables
  clocksource: Add armv8 generic timer support
  ARM: aarch64: Add relocation support
  ARM: aarch64: fix pbl linker script for aarch64
  ARM: aarch64: mmu: Allocate page tables dynamically
  ARM: aarch64: mmu: create_sections() takes size in bytes
  ARM: aarch64: mmu: fix creation of flat mapping
  ARM: aarch64: mmu: remove unused map_io_sections()
  ARM: aarch64: mmu: by default map as device memory
  ARM: aarch64: mmu: Fix mair register setting
  ARM: aarch64: qemu board: remove unnecessary mapping
  ARM: aarch64: mmu: enable mmu in generic code
  ARM: aarch64: mmu: use PTE_* definitions from U-Boot
  ARM: aarch64: mmu: Fix adding additional page table levels
  ARM: aarch64: mmu: Fix PTE_TYPE_* flags
  ARM: aarch64: mmu: Fix TCR setting
  ARM: aarch64: mmu: No need to disable icache
  ARM: aarch64: mmu: drop ttb check when disabling the MMU
  ARM: aarch64: mmu: Fix disabling the MMU
  ARM: Make some variables 64bit aware
  dma: Use dma_addr_t as type for DMA addresses
  dma: Add prototypes for dma mapping functions
  ARM: implement dma mapping functions
  ARM: aarch64: implement dma operations
  ARM: aarch64: compile with strict alignment
  ARM: aarch64: move aarch64 exception support to separate file
  ARM: aarch64: fix exception level mixup
  ARM: aarch64: Setup exception vectors in initcall
  ARM: aarch64: lowlevel: Use switch_el
  ARM: aarch64: remove dead code in linker script
  ARM: aarch64: hide some config options
  ARM: aarch64: implement show_regs()
  ARM: aarch64: implement stacktraces
  ARM: aarch64: mmu: Make zero page faulting
  ARM: aarch64: Allow to leave exceptions
  ARM: aarch64: Add esr strings
  ARM: aarch64: print more information on sync exception
  ARM: aarch64: implement ignoring data aborts
  dt-bindings: Drop unused files
  ARM: aarch64: Add barebox head support
  filetype: Detect ARM aarch64 Linux images
  common: Add functions to find free RAM
  bootm: provide handlers the start of the OS image
  ARM: aarch64: disable 32bit boot commands
  ARM: aarch64: Add support to start kernel and barebox
  ARM: cache-armv4: Fix wrong section
  ARM: build: Remove duplicate file compilation
  ARM: Create own cache.c file for aarch64
  ARM: create separate mmu_64.h file
  ARM: change mmu_early_enable() prototype
  ARM: aarch64: Make early MMU support work

 arch/arm/Kconfig                                   |   9 +-
 arch/arm/Makefile                                  |   4 +-
 arch/arm/boards/afi-gf/lowlevel.c                  |   2 +-
 arch/arm/boards/altera-socdk/lowlevel.c            |   2 +-
 arch/arm/boards/at91sam9263ek/lowlevel_init.c      |   2 +-
 arch/arm/boards/at91sam9x5ek/lowlevel.c            |   2 +-
 arch/arm/boards/beaglebone/lowlevel.c              |   2 +-
 .../boards/boundarydevices-nitrogen6/lowlevel.c    |  10 +-
 arch/arm/boards/ccxmx53/lowlevel.c                 |   4 +-
 arch/arm/boards/datamodul-edm-qmx6/lowlevel.c      |   2 +-
 arch/arm/boards/dfi-fs700-m60/lowlevel.c           |   6 +-
 arch/arm/boards/duckbill/lowlevel.c                |   2 +-
 arch/arm/boards/ebv-socrates/lowlevel.c            |   2 +-
 arch/arm/boards/efika-mx-smartbook/lowlevel.c      |   2 +-
 arch/arm/boards/element14-warp7/lowlevel.c         |   2 +-
 arch/arm/boards/eltec-hipercam/lowlevel.c          |   2 +-
 arch/arm/boards/embedsky-e9/lowlevel.c             |   2 +-
 arch/arm/boards/embest-riotboard/lowlevel.c        |   2 +-
 arch/arm/boards/freescale-mx51-babbage/lowlevel.c  |   2 +-
 arch/arm/boards/freescale-mx53-qsb/lowlevel.c      |   4 +-
 arch/arm/boards/freescale-mx53-vmx53/lowlevel.c    |   2 +-
 arch/arm/boards/freescale-mx6-sabresd/lowlevel.c   |   2 +-
 .../arm/boards/freescale-mx6sx-sabresdb/lowlevel.c |   2 +-
 arch/arm/boards/freescale-mx7-sabresd/lowlevel.c   |   2 +-
 arch/arm/boards/freescale-vf610-twr/lowlevel.c     |   2 +-
 arch/arm/boards/friendlyarm-tiny210/lowlevel.c     |   4 +-
 arch/arm/boards/gateworks-ventana/lowlevel.c       |   2 +-
 arch/arm/boards/gk802/lowlevel.c                   |   2 +-
 arch/arm/boards/globalscale-guruplug/lowlevel.c    |   2 +-
 arch/arm/boards/globalscale-mirabox/lowlevel.c     |   2 +-
 arch/arm/boards/karo-tx25/lowlevel.c               |   2 +-
 arch/arm/boards/karo-tx6x/lowlevel.c               |   8 +-
 arch/arm/boards/kindle-mx50/lowlevel.c             |   6 +-
 arch/arm/boards/lenovo-ix4-300d/lowlevel.c         |   2 +-
 arch/arm/boards/marvell-armada-xp-gp/lowlevel.c    |   2 +-
 arch/arm/boards/netgear-rn104/lowlevel.c           |   2 +-
 arch/arm/boards/netgear-rn2120/lowlevel.c          |   2 +-
 arch/arm/boards/phytec-phycard-imx27/lowlevel.c    |   2 +-
 arch/arm/boards/phytec-phycore-imx27/lowlevel.c    |   2 +-
 arch/arm/boards/phytec-phycore-imx7/lowlevel.c     |   4 +-
 arch/arm/boards/phytec-som-am335x/lowlevel.c       |   6 +-
 arch/arm/boards/phytec-som-imx6/lowlevel.c         |   2 +-
 arch/arm/boards/phytec-som-rk3288/lowlevel.c       |   2 +-
 arch/arm/boards/plathome-openblocks-a6/lowlevel.c  |   2 +-
 arch/arm/boards/plathome-openblocks-ax3/lowlevel.c |   2 +-
 arch/arm/boards/qemu-virt64/init.c                 |  14 +-
 arch/arm/boards/radxa-rock/lowlevel.c              |   2 +-
 arch/arm/boards/raspberry-pi/lowlevel.c            |   4 +-
 arch/arm/boards/reflex-achilles/lowlevel.c         |   2 +-
 arch/arm/boards/solidrun-cubox/lowlevel.c          |   2 +-
 arch/arm/boards/solidrun-microsom/lowlevel.c       |  18 +-
 arch/arm/boards/technexion-pico-hobbit/lowlevel.c  |   2 +-
 arch/arm/boards/terasic-de0-nano-soc/lowlevel.c    |   2 +-
 arch/arm/boards/terasic-sockit/lowlevel.c          |   2 +-
 arch/arm/boards/tqma53/lowlevel.c                  |   4 +-
 arch/arm/boards/tqma6x/lowlevel.c                  |   4 +-
 arch/arm/boards/turris-omnia/lowlevel.c            |   2 +-
 arch/arm/boards/udoo/lowlevel.c                    |   2 +-
 arch/arm/boards/usi-topkick/lowlevel.c             |   2 +-
 arch/arm/boards/variscite-mx6/lowlevel.c           |   2 +-
 arch/arm/boards/vexpress/lowlevel.c                |   2 +-
 arch/arm/boards/vscom-baltos/lowlevel.c            |   2 +-
 arch/arm/boards/zii-imx6q-rdu2/lowlevel.c          |   4 +-
 arch/arm/boards/zii-vf610-dev/lowlevel.c           |   2 +-
 arch/arm/cpu/Makefile                              |  42 +---
 arch/arm/cpu/cache-armv4.S                         |   2 +-
 arch/arm/cpu/cache-armv8.S                         |  19 ++
 arch/arm/cpu/cache.c                               |  16 --
 arch/arm/cpu/cache_64.c                            |  35 +++
 arch/arm/cpu/common.c                              |  56 +++--
 arch/arm/cpu/cpu.c                                 |  37 ++-
 arch/arm/cpu/entry.c                               |   2 +-
 arch/arm/cpu/exceptions_64.S                       |  48 +++-
 arch/arm/cpu/interrupts.c                          |  48 +---
 arch/arm/cpu/interrupts_64.c                       | 198 +++++++++++++++
 arch/arm/cpu/lowlevel_64.S                         |  17 +-
 arch/arm/cpu/mmu-early.c                           |   4 +-
 arch/arm/cpu/mmu-early.h                           |   6 -
 arch/arm/cpu/mmu-early_64.c                        |  88 +++++++
 arch/arm/cpu/mmu.c                                 |  38 ++-
 arch/arm/cpu/mmu.h                                 |  54 -----
 arch/arm/cpu/mmu_64.c                              | 264 ++++++++++----------
 arch/arm/cpu/mmu_64.h                              | 121 ++++++++++
 arch/arm/cpu/no-mmu.c                              |   2 +-
 arch/arm/cpu/sections.c                            |  11 +
 arch/arm/cpu/setupc.S                              |  16 +-
 arch/arm/cpu/setupc_64.S                           |  58 +++++
 arch/arm/cpu/start-pbl.c                           |  14 +-
 arch/arm/cpu/start.c                               |   6 +-
 arch/arm/cpu/uncompress.c                          |  23 +-
 arch/arm/include/asm/assembler64.h                 |  21 ++
 arch/arm/include/asm/barebox-arm-head.h            |  13 +
 arch/arm/include/asm/barebox-arm.h                 |  41 +++-
 arch/arm/include/asm/barebox.h                     |   4 +-
 arch/arm/include/asm/bitops.h                      |  22 +-
 arch/arm/include/asm/cache.h                       |   9 +-
 arch/arm/include/asm/common.h                      |  10 +-
 arch/arm/include/asm/esr.h                         | 117 +++++++++
 arch/arm/include/asm/mmu.h                         |  19 +-
 arch/arm/include/asm/pgtable64.h                   |  77 +++---
 arch/arm/include/asm/ptrace.h                      |  19 ++
 arch/arm/include/asm/sections.h                    |  30 +--
 arch/arm/include/asm/stacktrace.h                  |   2 +
 arch/arm/lib/pbl.lds.S                             |  36 +--
 arch/arm/lib32/Makefile                            |   2 +
 arch/arm/lib32/barebox.lds.S                       |  23 +-
 arch/arm/{lib => lib32}/bootm.c                    |   4 +-
 arch/arm/{lib => lib32}/bootu.c                    |   0
 arch/arm/lib32/runtime-offset.S                    |  36 +--
 arch/arm/lib64/Makefile                            |   2 +
 arch/arm/lib64/armlinux.c                          | 120 ++++++++--
 arch/arm/lib64/barebox.lds.S                       |  38 +--
 arch/arm/lib64/runtime-offset.S                    |  19 ++
 arch/arm/lib64/stacktrace.c                        |  86 +++++++
 arch/arm/mach-imx/xload-common.c                   |   4 +-
 arch/arm/mach-mvebu/include/mach/common.h          |   4 +-
 arch/arm/mach-tegra/include/mach/lowlevel.h        |   2 +-
 arch/arm/mach-tegra/tegra_avp_init.c               |   2 +-
 arch/mips/lib/dma-default.c                        |   4 +-
 arch/openrisc/cpu/cpu.c                            |   5 -
 commands/Kconfig                                   |   4 +-
 common/Kconfig                                     |   2 +-
 common/bootm.c                                     |  10 +-
 common/filetype.c                                  |   3 +
 common/memory.c                                    |  51 ++++
 drivers/clocksource/Kconfig                        |   5 +
 drivers/clocksource/Makefile                       |   1 +
 drivers/clocksource/armv8-timer.c                  |  65 +++++
 include/bootm.h                                    |   7 +
 include/debug_ll.h                                 |   2 +-
 include/dma.h                                      |  16 +-
 include/dt-bindings/clock/tegra30-car.h            | 265 ---------------------
 include/dt-bindings/pinctrl/pinctrl-tegra.h        |  45 ----
 include/dt-bindings/pinctrl/rockchip.h             |  32 ---
 include/filetype.h                                 |   1 +
 include/memory.h                                   |   5 +
 136 files changed, 1611 insertions(+), 1106 deletions(-)
 create mode 100644 arch/arm/cpu/cache_64.c
 create mode 100644 arch/arm/cpu/interrupts_64.c
 delete mode 100644 arch/arm/cpu/mmu-early.h
 create mode 100644 arch/arm/cpu/mmu-early_64.c
 create mode 100644 arch/arm/cpu/mmu_64.h
 create mode 100644 arch/arm/cpu/sections.c
 create mode 100644 arch/arm/include/asm/assembler64.h
 create mode 100644 arch/arm/include/asm/esr.h
 rename arch/arm/{lib => lib32}/bootm.c (99%)
 rename arch/arm/{lib => lib32}/bootu.c (100%)
 create mode 100644 arch/arm/lib64/runtime-offset.S
 create mode 100644 arch/arm/lib64/stacktrace.c
 create mode 100644 drivers/clocksource/armv8-timer.c
 delete mode 100644 include/dt-bindings/clock/tegra30-car.h
 delete mode 100644 include/dt-bindings/pinctrl/pinctrl-tegra.h
 delete mode 100644 include/dt-bindings/pinctrl/rockchip.h

-- 
2.16.1




More information about the barebox mailing list