aboutsummaryrefslogtreecommitdiffstats
path: root/meta/conf/machine/include/ixp4xx.conf
blob: 190ebe1c8c2aaa0da541af9cdd684b793cf7b342 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#@TYPE: Machine configuration
#@NAME: ixp4xx
#@DESCRIPTION: genric machine configuration for ixp4xx platforms

#-------------------------------------------------------------------------------
# INPUTS
#-------------------------------------------------------------------------------
# conf/${DISTRO}.conf is included after this file and should be used to modify
# variables identified as 'INPUTS' to the required values for the DISTRO, this
# will cause the board specific settings (which depend for the most part on the
# exact CPU used) to be set correctly within this file.  The results are the
# variables identifies here as 'OUTPUTS'
#
#variable = "default"
# <possible values>
#    description

ARCH_BYTE_SEX = "be"
# "be" "le"
#    The memory byte sex and (on correctly implemented hardware - the IXP4XX is
#    correct) the byte sex of the buses within the system.  'be' (big-endian)
#    means that the first byte is the most significant byte on a bus, 'le'
#    (little-endian) means that the first byte is the least significant byte.

ARM_INSTRUCTION_SET = "arm"
# "arm" "thumb"
#    The instruction set the compiler should use when generating application
#    code.  The kernel is always compiled with arm code at present.  arm code
#    is the original 32 bit ARM instruction set, thumb code is the 16 bit
#    encoded RISC sub-set.  Thumb code is smaller (maybe 70% of the ARM size)
#    but requires more instructions (140% for 70% smaller code) so may be
#    slower.

THUMB_INTERWORK = "yes"
# "yes" "no"
#    Whether to compile with code to allow interworking between the two
#    instruction sets.  This allows thumb code to be executed on a primarily
#    arm system and vice versa.  It is strongly recommended that DISTROs not
#    turn this off - the actual cost is very small.

DISTRO_BASE = ""
# "" ":<base>"
#    If given this must be the name of a 'distro' to add to the bitbake OVERRIDES
#    after ${DISTRO}, this allows different distros to share a common base of
#    overrides.  The value given must include a leading ':' or chaos will result.

IXP4XX_SUFFIX = "${MACHINE_ARCH}"
# <string>
#    Kernel suffix - 'ixp4xxbe' or 'ixp4xxle' for a truely generic image, controls
#    the suffix on the name of the generated zImage, override in the DISTRO
#    configuration if patches or defconfig are changed for the DISTRO.

#-------------------------------------------------------------------------------
# OUTPUTS
#-------------------------------------------------------------------------------

#OVERRIDES
#    The standard ':' separated list of overrides used by bitbake - see the
#    basic setting in bitbake.conf.  This list is based on that used for the
#    standard setting however :<base>, :thumb and :thumb-interwork will be
#    inserted at appropriate points if a base distro, default use of thumb or
#    arm/thumb interworking are enabled in the inputs.
OVERRIDE_THUMB = "${@['', ':thumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}"
OVERRIDE_INTERWORK = "${@['', ':thumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}"
OVERRIDES = "local:${MACHINE}:ixp4xx:${DISTRO}${DISTRO_BASE}:${TARGET_OS}:${TARGET_ARCH}${OVERRIDE_THUMB}${OVERRIDE_INTERWORK}:build-${BUILD_OS}:fail-fast"

# TARGET_CC_ARCH
# TARGET_CC_KERNEL_ARCH
# TARGET_LD_ARCH
# TARGET_LD_KERNEL_ARCH
#    Compiler and linker options for application code and kernel code.  These
#    options ensure that the compiler has the correct settings for the selected
#    instruction set and interworking.
ARM_INTERWORK_M_OPT = "${@['-mno-thumb-interwork', '-mthumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}"
ARM_THUMB_M_OPT = "${@['-mno-thumb', '-mthumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}"
#
TARGET_CC_ARCH = "-march=armv5te -mtune=xscale ${ARM_INTERWORK_M_OPT} ${ARM_THUMB_M_OPT}"
TARGET_CC_KERNEL_ARCH = "-march=armv5te -mtune=xscale -mno-thumb-interwork -mno-thumb"
TARGET_LD_ARCH = ""
TARGET_LD_KERNEL_ARCH = ""

# FULL_OPTIMIZATION
#    Optimization settings.  Os works fine and is significantly better than O2.
#    The other settings are somewhat arbitrary.  The optimisations chosen here
#    include the ones which 'break' symbolic debugging (because the compiler does
#    not include enough information to allow the debugger to know where given
#    values are.)  The -fno options are an attempt to cancel explicit use of space
#    consuming options found in some packages (this isn't a complete list, this is
#    just the ones which package writers seem to know about and abuse).
FULL_OPTIMIZATION = "-Os -fomit-frame-pointer -frename-registers \
	-fno-unroll-loops -fno-inline-functions \
	-fweb -funit-at-a-time"

# TARGET_ARCH
#    The correct setting for the system endianness (ARCH_BYTE_SEX).  This will
#    be arm (le) or armeb (be) - it is difficult to be more precise in the
#    setting because of the large number of ways it is used within OpenEmbedded.
TARGET_ARCH = "${@['armeb', 'arm'][bb.data.getVar('ARCH_BYTE_SEX', d, 1) == 'le']}"

# TARGET_PACKAGE_ARCH [not used]
#    The correct setting for the generated packages.  This corresponds to the
#    -march flag passed to the compiler because that limits the architectures
#    on which the generated code will run.
BYTE_SEX_CHAR = "${@['b', 'l'][bb.data.getVar('ARCH_BYTE_SEX', d, 1) == 'le']}"
TARGET_PACKAGE_ARCH_BASE = "${@['armv5te', 'thumbv5t'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}"
TARGET_PACKAGE_ARCH = "${TARGET_PACKAGE_ARCH_BASE}${BYTE_SEX_CHAR}"

# MACHINE_ARCH
#    The correct setting for packages which are specific to the machine, this
#    defaults to ${MACHINE} in bitbake.conf, however it is set to ixp4xx here
#    because everything built here is no more specific than that.
MACHINE_ARCH = "ixp4xx${ARCH_BYTE_SEX}"

# PACKAGE_EXTRA_ARCHS
#    The full list of package architectures which should run on the system.
#    This takes into account both the board level issues and the INPUTS set
#    by the distro.  The arm list is derived from the architecture settings
#    known to gcc, the thumb list is then derived from that (only the 't'
#    architectures of course).
#[not used]: TARGET_ARCH is handled below because it is also currently
# used for thumb packages.
#ARM_ARCHITECTURES = "${TARGET_ARCH} armv2${BYTE_SEX_CHAR} armv2a${BYTE_SEX_CHAR} armv3${BYTE_SEX_CHAR} armv3m${BYTE_SEX_CHAR} armv4${BYTE_SEX_CHAR} armv4t${BYTE_SEX_CHAR} armv5${BYTE_SEX_CHAR} armv5t${BYTE_SEX_CHAR} armv5e${BYTE_SEX_CHAR} armv5te${BYTE_SEX_CHAR} xscale${BYTE_SEX_CHAR}"
ARM_ARCHITECTURES = "armv2${BYTE_SEX_CHAR} armv2a${BYTE_SEX_CHAR} armv3${BYTE_SEX_CHAR} armv3m${BYTE_SEX_CHAR} armv4${BYTE_SEX_CHAR} armv4t${BYTE_SEX_CHAR} armv5${BYTE_SEX_CHAR} armv5t${BYTE_SEX_CHAR} armv5e${BYTE_SEX_CHAR} armv5te${BYTE_SEX_CHAR} xscale${BYTE_SEX_CHAR}"
THUMB_ARCHITECTURES = "thumbe${BYTE_SEX_CHAR} thumbv4t${BYTE_SEX_CHAR} thumbv5t${BYTE_SEX_CHAR}"

#    NOTE: this list contains just the things which rootfs_ipk.bbclass does
#    not add, rootfs_ipk.bbclass evaluates:
#
#        ipkgarchs="all any noarch ${TARGET_ARCH} ${PACKAGE_EXTRA_ARCHS} ${MACHINE}"
#
#    This is a priority ordered list - most desireable architecture at the end,
#    so put <ARM_INSTRUCTION_SET>_ARCHITECTURES at the end and, if
#    THUMB_INTERWORK precede this with the other architectures.
PACKAGE_EXTRA_ARCHS = "ixp4xx ${MACHINE} \
		${@(lambda arch_thumb, arch_arm, is_arm, interwork: \
		(interwork and (is_arm and arch_thumb or arch_arm) + ' ' or '') \
		+ '${TARGET_ARCH} ' + (is_arm and arch_arm or arch_thumb)) \
	       (bb.data.getVar('THUMB_ARCHITECTURES', d, 1), \
		bb.data.getVar('ARM_ARCHITECTURES', d, 1), \
		bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) != 'thumb', \
		bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes')} \
		${MACHINE_ARCH} ${MACHINE}${ARCH_BYTE_SEX}"

# IPKG_ARCH_LIST [not used]
#    This is used to override the ipkgarchs settings in rootfs_ipk.bbclass, allowing
#    the removal of the raw "${MACHINE}" from the end of the list.  ${MACHINE} and
#    ixp4xx are included at the start (lower priority) as the non-byte-sex specific
#    versions.
IPKG_ARCH_LIST = "all any noarch ixp4xx ${MACHINE} ${PACKAGE_EXTRA_ARCHS}"

#-------------------------------------------------------------------------------
# Board defaults
#-------------------------------------------------------------------------------
# These values are board specific but they seem to be common to a large number
# of boards so are reasonable defaults.
SERIAL_CONSOLE = "115200 ttyS0"
KERNEL_CONSOLE = "ttyS0,115200n8"
USE_VT = "0"