From d3d260098ec9c39d14de72b9dda3e4853550b08b Mon Sep 17 00:00:00 2001 From: Sipke Vriend Date: Tue, 26 Mar 2013 15:07:21 +1000 Subject: tune-microblaze: Refactored * Added features with CFLAG mappings * Added version features for v7.3-.a to v8.50.a * Added MicroBlaze PACKAGE_ARCH expansion e.g. "microblazeel-v830-cmp" Signed-off-by: Sipke Vriend --- .../microblaze/feature-microblaze-barrel-shift.inc | 3 +++ .../microblaze/feature-microblaze-divide.inc | 3 +++ .../microblaze/feature-microblaze-endian.inc | 13 ++++++++++++ .../include/microblaze/feature-microblaze-fpu.inc | 15 ++++++++++++++ .../microblaze/feature-microblaze-multiply.inc | 9 ++++++++ .../feature-microblaze-pattern-compare.inc | 3 +++ .../microblaze/feature-microblaze-reorder.inc | 3 +++ .../include/microblaze/feature-microblaze-v7.inc | 7 +++++++ .../include/microblaze/feature-microblaze-v8.inc | 24 ++++++++++++++++++++++ .../microblaze/feature-microblaze-versions.inc | 17 +++++++++++++++ conf/machine/include/tune-microblaze-features.inc | 9 ++++++++ conf/machine/include/tune-microblaze.inc | 23 ++++++++++----------- conf/machine/include/tune-microblazeel.inc | 22 -------------------- conf/machine/microblaze.conf | 12 ----------- conf/machine/microblazeel.conf | 16 +++++++++++++-- 15 files changed, 131 insertions(+), 48 deletions(-) create mode 100644 conf/machine/include/microblaze/feature-microblaze-barrel-shift.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-divide.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-endian.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-fpu.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-multiply.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-pattern-compare.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-reorder.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-v7.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-v8.inc create mode 100644 conf/machine/include/microblaze/feature-microblaze-versions.inc create mode 100644 conf/machine/include/tune-microblaze-features.inc delete mode 100644 conf/machine/include/tune-microblazeel.inc delete mode 100644 conf/machine/microblaze.conf diff --git a/conf/machine/include/microblaze/feature-microblaze-barrel-shift.inc b/conf/machine/include/microblaze/feature-microblaze-barrel-shift.inc new file mode 100644 index 00000000..57ba03d9 --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-barrel-shift.inc @@ -0,0 +1,3 @@ +TUNEVALID[barrel-shift] = "Enable Microblaze Hardware Barrel Shift." +MBCCARGSBARRELSHIFT += "${@bb.utils.contains("TUNE_FEATURES", "barrel-shift", "-mxl-barrel-shift", "" ,d)}" +MBPKGBARRELSHIFT .= "${@bb.utils.contains("TUNE_FEATURES", "barrel-shift", "-bs", "" ,d)}" diff --git a/conf/machine/include/microblaze/feature-microblaze-divide.inc b/conf/machine/include/microblaze/feature-microblaze-divide.inc new file mode 100644 index 00000000..fed9fb20 --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-divide.inc @@ -0,0 +1,3 @@ +TUNEVALID[divide-hard] = "Enable Microblaze hardware divider." +MBCCARGSDIV += "${@bb.utils.contains("TUNE_FEATURES", "divide-hard", "-mno-xl-soft-div", "" ,d)}" +MBPKGDIV .= "${@bb.utils.contains("TUNE_FEATURES", "divide-hard", "-div", "" ,d)}" diff --git a/conf/machine/include/microblaze/feature-microblaze-endian.inc b/conf/machine/include/microblaze/feature-microblaze-endian.inc new file mode 100644 index 00000000..80567611 --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-endian.inc @@ -0,0 +1,13 @@ +# This feature file must be included/required FIRST as it defines the start of the PKGARCH bitbake variable +MBCCARGSENDIAN = "" +MBPKGENDIAN = "" + +TUNEVALID[little-endian] = "Use Microblaze Little Endian." +MBCCARGSENDIAN += "${@bb.utils.contains("TUNE_FEATURES", "little-endian", "-mlittle-endian", "" ,d)}" +MBPKGENDIAN .= "${@bb.utils.contains("TUNE_FEATURES", "little-endian", "el", "eb" ,d)}" + +TUNEVALID[big-endian] = "Use Microblaze Big Endian." +MBCCARGSENDIAN += "${@bb.utils.contains("TUNE_FEATURES", "big-endian", "-mbig-endian", "" ,d)}" +MBPKGENDIAN .= "${@bb.utils.contains("TUNE_FEATURES", "big-endian", "eb", "" ,d)}" + +TUNECONFLICTS[little-endian] = "big-endian" diff --git a/conf/machine/include/microblaze/feature-microblaze-fpu.inc b/conf/machine/include/microblaze/feature-microblaze-fpu.inc new file mode 100644 index 00000000..07f9ba93 --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-fpu.inc @@ -0,0 +1,15 @@ +TARGET_FPU = "fpu-other" + +TUNEVALID[fpu-soft] = "Use Microblaze software FPU" +TUNEVALID[fpu-hard] = "Enable Microblaze hardware FPU in basic mode." +TUNEVALID[fpu-hard-extended] = "Enable Microblaze hardware FPU in extended mode - conversion and square root instructions." + +# Establish which fpu is configured in TUNE_FEATURES. Soft is the default for gcc. +MBCCARGSFPU_BASIC = "${@bb.utils.contains("TUNE_FEATURES", "fpu-hard", "-mhard-float", "", d)}" +MBCCARGSFPU = "${@bb.utils.contains("TUNE_FEATURES", "fpu-hard-extended", "-mhard-float -mxl-float-convert -mxl-float-sqrt", "${MBCCARGSFPU_BASIC}" ,d)}" + +MBPKGFPU_BASIC = "${@bb.utils.contains("TUNE_FEATURES", "fpu-hard", "-fb", "", d)}" +MBPKGFPU = "${@bb.utils.contains("TUNE_FEATURES", "fpu-hard-extended", "-fe", "${MBPKGFPU_BASIC}", d)}" + +TUNECONFLICTS[fpu-hard] = "fpu-soft" +TUNECONFLICTS[fpu-hard-extended] = "fpu-soft" diff --git a/conf/machine/include/microblaze/feature-microblaze-multiply.inc b/conf/machine/include/microblaze/feature-microblaze-multiply.inc new file mode 100644 index 00000000..3f6d8c1a --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-multiply.inc @@ -0,0 +1,9 @@ +TUNEVALID[multiply-low] = "Enable Microblaze Hardware Multiply with low (32 bit) result." +TUNEVALID[multiply-high] = "Enable Microblaze Hardware Multiply with high (64 bit) result." + +# Establish which Multiply output result size to use +MBCCARGSMUL_BASIC = "${@bb.utils.contains("TUNE_FEATURES", "multiply-low", "-mno-xl-soft-mul", "" ,d)}" +MBCCARGSMUL = "${@bb.utils.contains("TUNE_FEATURES", "multiply-high", "-mno-xl-soft-mul -mxl-multiply-high", "${MBCCARGSMUL_BASIC}" ,d)}" + +MBPKGMUL_BASIC = "${@bb.utils.contains("TUNE_FEATURES", "multiply-low", "-ml", "" ,d)}" +MBPKGMUL = "${@bb.utils.contains("TUNE_FEATURES", "multiply-high", "-mh", "${MBPKGMUL_BASIC}" ,d)}" diff --git a/conf/machine/include/microblaze/feature-microblaze-pattern-compare.inc b/conf/machine/include/microblaze/feature-microblaze-pattern-compare.inc new file mode 100644 index 00000000..9ed88977 --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-pattern-compare.inc @@ -0,0 +1,3 @@ +TUNEVALID[pattern-compare] = "Enable Microblaze Pattern Compare Instructions." +MBCCARGSPATTERNCOMPARE = "${@bb.utils.contains("TUNE_FEATURES", "pattern-compare", "-mxl-pattern-compare", "" ,d)}" +MBPKGSPATTERNCOMPARE = "${@bb.utils.contains("TUNE_FEATURES", "pattern-compare", "-cmp", "" ,d)}" diff --git a/conf/machine/include/microblaze/feature-microblaze-reorder.inc b/conf/machine/include/microblaze/feature-microblaze-reorder.inc new file mode 100644 index 00000000..e68fbb3a --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-reorder.inc @@ -0,0 +1,3 @@ +TUNEVALID[reorder] = "Enable Microblaze Reorder Instructions." +MBCCARGSREORDER = "${@bb.utils.contains("TUNE_FEATURES", "reorder", "-mxl-reorder", "" ,d)}" +MBPKGREORDER = "${@bb.utils.contains("TUNE_FEATURES", "reorder", "-re", "" ,d)}" diff --git a/conf/machine/include/microblaze/feature-microblaze-v7.inc b/conf/machine/include/microblaze/feature-microblaze-v7.inc new file mode 100644 index 00000000..f716c67b --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-v7.inc @@ -0,0 +1,7 @@ +# Setup version 'feature set' for supported Microblaze version 7 versions +TUNEVALID[v730] = "Use Microblaze version 7.30" + +MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v730", "-mcpu=v7.30.a", "" ,d)}" +MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v730", "-v730", "" ,d)}" + +TUNECONFLICTS[v730] += "reorder little-endian" diff --git a/conf/machine/include/microblaze/feature-microblaze-v8.inc b/conf/machine/include/microblaze/feature-microblaze-v8.inc new file mode 100644 index 00000000..43f68086 --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-v8.inc @@ -0,0 +1,24 @@ +# Setup version 'feature set' for supported Microblaze version 8 versions +TUNEVALID[v850] = "Use Microblaze version 8.50" +MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v850", "-mcpu=v8.50.a", "" ,d)}" +MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v850", "-v850", "" ,d)}" + +TUNEVALID[v840] = "Use Microblaze version 8.40" +MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v840", "-mcpu=v8.40.a", "" ,d)}" +MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v840", "-v840", "" ,d)}" + +TUNEVALID[v830] = "Use Microblaze version 8.30" +MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v830", "-mcpu=v8.30.a", "" ,d)}" +MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v830", "-v830", "" ,d)}" + +TUNEVALID[v820] = "Use Microblaze version 8.20" +MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v820", "-mcpu=v8.20.a", "" ,d)}" +MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v820", "-v820", "" ,d)}" + +TUNEVALID[v810] = "Use Microblaze version 8.10" +MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v810", "-mcpu=v8.10.a", "" ,d)}" +MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v810", "-v810", "" ,d)}" + +TUNEVALID[v800] = "Use Microblaze version 8.00" +MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v800", "-mcpu=v8.00.a", "" ,d)}" +MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v800", "-v800", "" ,d)}" diff --git a/conf/machine/include/microblaze/feature-microblaze-versions.inc b/conf/machine/include/microblaze/feature-microblaze-versions.inc new file mode 100644 index 00000000..b6ff708a --- /dev/null +++ b/conf/machine/include/microblaze/feature-microblaze-versions.inc @@ -0,0 +1,17 @@ +# Microblaze Versions are defined as features sets, each containing +# a set of hardware features. + +MBCCARGSVERSION = "" +MBPKGVERSION = "" +require conf/machine/include/microblaze/feature-microblaze-v8.inc +require conf/machine/include/microblaze/feature-microblaze-v7.inc + +# Setup a 'feature set' conflict list which ensures only one version is selected +# when defining the TUNE_FEATURES_tune-<> in local.conf file. +TUNECONFLICTS[v850] += "v730 v800 v810 v820 v830 v840" +TUNECONFLICTS[v840] += "v730 v800 v810 v820 v830 v850" +TUNECONFLICTS[v830] += "v730 v800 v810 v820 v840 v850" +TUNECONFLICTS[v820] += "v730 v800 v810 v830 v840 v850" +TUNECONFLICTS[v810] += "v730 v800 v820 v830 v840 v850" +TUNECONFLICTS[v800] += "v730 v810 v820 v830 v840 v850" +TUNECONFLICTS[v730] += "v800 v810 v820 v830 v840 v850" diff --git a/conf/machine/include/tune-microblaze-features.inc b/conf/machine/include/tune-microblaze-features.inc new file mode 100644 index 00000000..f12508ae --- /dev/null +++ b/conf/machine/include/tune-microblaze-features.inc @@ -0,0 +1,9 @@ +# The order of these files defines the order of sections in the PKGARCH variable +require conf/machine/include/microblaze/feature-microblaze-endian.inc +require conf/machine/include/microblaze/feature-microblaze-versions.inc +require conf/machine/include/microblaze/feature-microblaze-barrel-shift.inc +require conf/machine/include/microblaze/feature-microblaze-multiply.inc +require conf/machine/include/microblaze/feature-microblaze-divide.inc +require conf/machine/include/microblaze/feature-microblaze-fpu.inc +require conf/machine/include/microblaze/feature-microblaze-pattern-compare.inc +require conf/machine/include/microblaze/feature-microblaze-reorder.inc diff --git a/conf/machine/include/tune-microblaze.inc b/conf/machine/include/tune-microblaze.inc index e6dd2295..6479afbf 100644 --- a/conf/machine/include/tune-microblaze.inc +++ b/conf/machine/include/tune-microblaze.inc @@ -1,18 +1,17 @@ -# Tune options for microblaze big endian +# Tune options for microblaze +# The only tune 'feature' defined here is the microblaze tune. +# See the machine file (microblaze[el].conf) for details. DEFAULTTUNE ?= "microblaze" -TUNE_ARCH = "microblaze" -TUNE_PKGARCH = "${TUNE_ARCH}" -AVAILTUNES += "microblaze" -TUNE_FEATURES_tune-microblaze ?= "fpu-soft" -PACKAGE_EXTRA_ARCHS_tune-microblaze = "" +TUNE_ARCH = "microblazeel" -# FPU Configuration -TUNEVALID[fpu-soft] = "Use software FPU." -TARGET_FPU = "${@bb.utils.contains("TUNE_FEATURES", "fpu-soft", "soft", "", d)}" -TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "fpu-soft", "-msoft-float", "", d)}" +require conf/machine/include/tune-microblaze-features.inc -# CPU Version Configuration -TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "microblaze", "-mcpu=v8.30.a", "", d)}" +AVAILTUNES += "microblaze" +TUNEVALID[microblaze] = "Microblaze" +TUNE_FEATURES_tune-microblaze += "microblaze" +TUNE_CCARGS += "${MBCCARGSENDIAN} ${MBCCARGSVERSION} ${MBCCARGSBARRELSHIFT} ${MBCCARGSMUL} ${MBCCARGSDIV} ${MBCCARGSFPU} ${MBCCARGSPATTERNCOMPARE} ${MBCCARGSREORDER}" +TUNE_PKGARCH = "microblaze${MBPKGENDIAN}${MBPKGVERSION}${MBPKGBARRELSHIFT}${MBPKGMUL}${MBPKGDIV}${MBPKGFPU}${MBPKGSPATTERNCOMPARE}${MBPKGREORDER}" +PACKAGE_EXTRA_ARCHS_tune-microblaze = "${TUNE_PKGARCH}" diff --git a/conf/machine/include/tune-microblazeel.inc b/conf/machine/include/tune-microblazeel.inc deleted file mode 100644 index f27dc5e1..00000000 --- a/conf/machine/include/tune-microblazeel.inc +++ /dev/null @@ -1,22 +0,0 @@ -# Tune options for microblaze endian little -DEFAULTTUNE ?= "microblazeel" - -#TUNEVALID[m32] = "Microblaze ELF32 standard ABI" -#TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "m32", "", "", d)}" -TUNE_ARCH = "microblazeel" -#"${@bb.utils.contains("TUNE_FEATURES", "m32", "microblazeel", "", d)}" - -TUNEVALID[fpu-soft] = "Use software FPU." -TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "fpu-soft", "-msoft-float", "", d)}" -TARGET_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "fpu-soft", "soft", "", d)}" - -TUNE_PKGARCH = "${TUNE_ARCH}" - -AVAILTUNES += "microblazeel" -TUNE_FEATURES_tune-microblazeel ?= "fpu-soft" -PACKAGE_EXTRA_ARCHS_tune-microblazeel = "" - -TARGET_FPU = "soft" -TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "microblazeel", "-mcpu=v8.30.a", "", d)}" - -#MACHINEOVERRIDES .= "microblaze" diff --git a/conf/machine/microblaze.conf b/conf/machine/microblaze.conf deleted file mode 100644 index 46c61888..00000000 --- a/conf/machine/microblaze.conf +++ /dev/null @@ -1,12 +0,0 @@ -#@TYPE: Machine -#@NAME: microblaze -#@DESCRIPTION: microblaze - -TARGET_CPU = "microblaze" -MACHINE_FEATURES := "" - -require conf/machine/include/tune-microblaze.inc - -KERNEL_IMAGETYPE = "uImage" - -SERIAL_CONSOLE = "115200 ttyS0" diff --git a/conf/machine/microblazeel.conf b/conf/machine/microblazeel.conf index 10d4b870..5ca9b100 100644 --- a/conf/machine/microblazeel.conf +++ b/conf/machine/microblazeel.conf @@ -1,11 +1,23 @@ #@TYPE: Machine #@NAME: microblazeel -#@DESCRIPTION: microblazeel +#@DESCRIPTION: Microblaze (Little Endian) + +# The Microblaze machine differ from those of 'fixed' architectures like +# arm as Microblaze can have each of its hardware tune features configured +# independently. +# For this reason the user must define the TUNE_FEATURES_tune-microblaze +# in the local.conf file. +# An example is: +# TUNE_FEATURES_tune-microblaze += "little-endian v830 barrel-shift multiply-high multiply-low pattern-compare reorder divide-hard fpu-hard fpu-hard-extended" +# If no other feature is defined in local.conf, then no hardware +# features will be enabled. TARGET_CPU = "microblazeel" MACHINE_FEATURES := "" -require conf/machine/include/tune-microblazeel.inc +require conf/machine/include/tune-microblaze.inc + +TUNE_FEATURES_tune-microblaze += "little-endian v830" KERNEL_IMAGETYPE = "uImage" -- cgit v1.2.3-54-g00ecf