Add support for AArch32 99/799/3
authorChristophe Fontaine <christophe.fontaine@qosmos.com>
Sat, 9 Apr 2016 03:38:49 +0000 (12:38 +0900)
committerDave Barach <openvpp@barachs.net>
Mon, 18 Apr 2016 13:20:57 +0000 (13:20 +0000)
commitfef15b4bb88c61248393b93d13b1f79bb628def0
tree0f34cc14987dde62a32201101c29b24b023fd36b
parent7a2a378d2dcdba900651b02859b686cafe6dfd22
Add support for AArch32

gcc version 4.9.2 (Raspbian 4.9.2-10)
Tested on Linux raspberrypi 4.4.6-v7+ #875 SMP Tue Apr 12 16:33:02 BST 2016 armv7l GNU/Linux

CPUs may be little or big endian, detect with gcc flags, not the processor architecture
Add a new flag $(PLATFORM)_uses_openssl which allows to disable the link with openssl lib.

vlib/vlib/threads.c:
startup.conf must:
- specify the heapsize as we don't have hugepages on raspbian

cpu {
  main-core 3
}
heapsize 64M

Corrects in various files the assumption uword == u64 and replaces 'u64' cast with 'pointer_to_uword' and 'uword_to_pointer' where appropriate.
256 CPUs may create an OOM when testing with small memory footprint ( heapsize 64M ), allows the number of VLIB_MAX_CPUS to be set in platforms/*.mk

vppinfra/vppinfra/longjmp.S:
ARM - copy r1 (1st parameter of the setjmp call) to r0 (return value)

vppinfra/vppinfra/time.h:
On ARMv7 in AArch32 mode, we can access to a 64bit register to retreive the cycles count.
gcc on rpi only declare ARM_ARCH 6. Override this info, and check if it is possible to use 'mrrc'.
/!\ the time function will NOT work without allowing the user mode access to the PMU.
You may download the source of the kmod here:
https://github.com/christophefontaine/arm_rdtsc

Change-Id: I8142606436d9671a184133b935398427f08a8bd2
Signed-off-by: Christophe Fontaine <christophe.fontaine@qosmos.com>
31 files changed:
build-data/packages/vnet.mk
build-data/packages/vpp.mk
build-data/platforms/arm32.mk [new file with mode: 0644]
svm/ssvm.c
svm/ssvm.h
vlib-api/vlibmemory/memory_vlib.c
vlib/vlib/buffer.h
vlib/vlib/threads.c
vlib/vlib/threads.h
vlib/vlib/unix/cj.c
vlib/vlib/unix/physmem.c
vnet/vnet/classify/vnet_classify.h
vnet/vnet/devices/dpdk/vhost_user.c
vnet/vnet/devices/ssvm/node.c
vnet/vnet/devices/ssvm/ssvm_eth.c
vnet/vnet/devices/ssvm/ssvm_eth.h
vnet/vnet/ip/lookup.h
vnet/vnet/l2/l2_flood.c
vpp/api/api.c
vpp/api/gmon.c
vppapigen/node.c
vppinfra/vppinfra/byte_order.h
vppinfra/vppinfra/cache.h
vppinfra/vppinfra/hash.c
vppinfra/vppinfra/hash.h
vppinfra/vppinfra/longjmp.S
vppinfra/vppinfra/macros.c
vppinfra/vppinfra/random_isaac.c
vppinfra/vppinfra/test_vec.c
vppinfra/vppinfra/time.h
vppinfra/vppinfra/vector.h