aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFathi Boudra <fathi.boudra@linaro.org>2013-04-04 12:31:47 +0300
committerFathi Boudra <fathi.boudra@linaro.org>2013-04-04 12:31:47 +0300
commite465383b0c4b5b9aee6cb5547e173ce15b8a7fdb (patch)
tree29952240a714407362859ebdce63b5c2db93c848
parentf2d720ea4972e27c51b447d25c0c771f08a576fc (diff)
parentb56ba8cceeb3a79a75e65b29246a60c55b46caf8 (diff)
Add Highbank (Calxeda) support
-rw-r--r--linaro_image_tools/media_create/boards.py55
-rw-r--r--linaro_image_tools/media_create/partitions.py13
-rw-r--r--linaro_image_tools/media_create/tests/test_media_create.py39
3 files changed, 89 insertions, 18 deletions
diff --git a/linaro_image_tools/media_create/boards.py b/linaro_image_tools/media_create/boards.py
index d578ffa..e0d14ba 100644
--- a/linaro_image_tools/media_create/boards.py
+++ b/linaro_image_tools/media_create/boards.py
@@ -169,6 +169,8 @@ class BoardConfig(object):
self.extra_boot_args_options = None
self.fat_size = 32
self.fatload_command = 'fatload'
+ self.load_interface = 'mmc'
+ self.bootfs_type = 'vfat'
self.fdt_high = '0xffffffff'
self.hardwarepack_handler = None
self.hwpack_format = None
@@ -448,13 +450,17 @@ class BoardConfig(object):
:param should_align_boot_part: Whether to align the boot partition too.
- This returns a boot vfat partition of type FAT16
- or FAT32, followed by a root partition.
+ This returns a boot partition of type FAT16 or FAT32 or Linux,
+ followed by a root partition.
"""
- if self.fat_size == 32:
- partition_type = '0x0C'
+
+ if self.bootfs_type == 'vfat':
+ if self.fat_size == 32:
+ partition_type = '0x0C'
+ else:
+ partition_type = '0x0E'
else:
- partition_type = '0x0E'
+ partition_type = '0x83'
# align on sector 63 for compatibility with broken versions of x-loader
# unless align_boot_part is set
@@ -522,23 +528,26 @@ class BoardConfig(object):
replacements = dict(
fatload_command=self.fatload_command, uimage_path=self.uimage_path,
mmc_option=self.mmc_option, kernel_addr=self.kernel_addr,
- initrd_addr=self.initrd_addr, dtb_addr=self.dtb_addr)
+ initrd_addr=self.initrd_addr, dtb_addr=self.dtb_addr,
+ load_interface=self.load_interface)
+
boot_script = (
- ("%(fatload_command)s mmc %(mmc_option)s %(kernel_addr)s " +
- "%(uimage_path)suImage; ")) % replacements
+ ("%(fatload_command)s %(load_interface)s %(mmc_option)s "
+ "%(kernel_addr)s %(uimage_path)suImage; ")) % replacements
if i_img_data is not None:
boot_script += (
- ("%(fatload_command)s mmc %(mmc_option)s %(initrd_addr)s " +
- "%(uimage_path)suInitrd; ")) % replacements
+ ("%(fatload_command)s %(load_interface)s %(mmc_option)s "
+ "%(initrd_addr)s %(uimage_path)suInitrd; ")) % replacements
if d_img_data is not None:
assert self.dtb_addr is not None, (
"Need a dtb_addr when passing d_img_data")
- boot_script += ("%(fatload_command)s mmc %(mmc_option)s "
- "%(dtb_addr)s board.dtb; " % replacements)
+ boot_script += (
+ ("%(fatload_command)s %(load_interface)s %(mmc_option)s "
+ "%(dtb_addr)s board.dtb; ")) % replacements
boot_script += (("bootm %(kernel_addr)s")) % replacements
if i_img_data is not None:
boot_script += ((" %(initrd_addr)s")) % replacements
- if d_img_data is not None:
+ if self.dtb_addr is not None:
boot_script += ((" %(dtb_addr)s")) % replacements
return boot_script
@@ -1317,7 +1326,8 @@ class Mx51Config(Mx5Config):
class Mx53Config(Mx5Config):
def __init__(self):
super(Mx53Config, self).__init__()
- self.dtb_addr = '0x71ff0000'
+ # XXX: Is dtb_addr really needed?
+ #self.dtb_addr = '0x71ff0000'
self.initrd_addr = '0x72000000'
self.kernel_addr = '0x70000000'
self.kernel_flavors = ['linaro-lt-mx53', 'linaro-lt-mx5']
@@ -1680,6 +1690,22 @@ class ArndaleConfig(SamsungConfig):
return bl0_file
+class HighBankConfig(BoardConfig):
+ def __init__(self):
+ super(HighBankConfig, self).__init__()
+ self.boot_script = 'boot.scr'
+ self.bootloader_flavor = 'highbank'
+ self.kernel_flavors = ['highbank']
+ self.serial_tty = 'ttyAMA0'
+ self.fatload_command = 'ext2load'
+ self.load_interface = 'scsi'
+ self.bootfs_type = 'ext2'
+ self.dtb_addr = '0x00001000'
+ self.initrd_addr = '0x01000000'
+ self.kernel_addr = '0x00800000'
+ self.load_addr = '0x00000000'
+
+
class I386Config(BoardConfig):
# define bootloader
BOOTLOADER_CMD = 'grub-install'
@@ -1751,6 +1777,7 @@ board_configs = {
'efikamx': EfikamxConfig,
'efikasb': EfikasbConfig,
'fastmodel': FastModelConfig,
+ 'highbank': HighBankConfig,
'i386': I386Config,
'igep': IgepConfig,
'mx51evk': Mx51evkConfig,
diff --git a/linaro_image_tools/media_create/partitions.py b/linaro_image_tools/media_create/partitions.py
index 1335a85..9f881f5 100644
--- a/linaro_image_tools/media_create/partitions.py
+++ b/linaro_image_tools/media_create/partitions.py
@@ -164,10 +164,15 @@ def setup_partitions(board_config, media, image_size, bootfs_label,
if should_format_bootfs:
print "\nFormating boot partition\n"
- proc = cmd_runner.run(
- ['mkfs.vfat', '-F', str(board_config.fat_size), bootfs, '-n',
- bootfs_label],
- as_root=True)
+ mkfs = 'mkfs.%s' % board_config.bootfs_type
+ if board_config.bootfs_type == 'vfat':
+ proc = cmd_runner.run(
+ [mkfs, '-F', str(board_config.fat_size), bootfs, '-n',
+ bootfs_label],
+ as_root=True)
+ else:
+ proc = cmd_runner.run(
+ [mkfs, bootfs, '-L', bootfs_label], as_root=True)
proc.wait()
if should_format_rootfs:
diff --git a/linaro_image_tools/media_create/tests/test_media_create.py b/linaro_image_tools/media_create/tests/test_media_create.py
index 219770e..48f9740 100644
--- a/linaro_image_tools/media_create/tests/test_media_create.py
+++ b/linaro_image_tools/media_create/tests/test_media_create.py
@@ -1423,6 +1423,12 @@ class TestBootSteps(TestCaseWithFixtures):
'make_dtb', 'make_boot_script', 'make_boot_ini']
self.assertEqual(expected, self.funcs_calls)
+ def test_highbank_steps(self):
+ board_conf = boards.HighBankConfig()
+ board_conf.hwpack_format = HardwarepackHandler.FORMAT_1
+ expected = []
+ self.assertEqual(expected, self.funcs_calls)
+
class TestPopulateRawPartition(TestCaseWithFixtures):
@@ -1544,6 +1550,11 @@ class TestPopulateRawPartition(TestCaseWithFixtures):
expected = []
self.assertEqual(expected, self.funcs_calls)
+ def test_highbank_raw(self):
+ self.populate_raw_partition(boards.HighBankConfig())
+ expected = []
+ self.assertEqual(expected, self.funcs_calls)
+
class TestPopulateRawPartitionAndroid(TestCaseWithFixtures):
@@ -1843,6 +1854,13 @@ class TestGetSfdiskCmd(TestCase):
'1,8191,0xDA\n8192,106496,0x0C,*\n114688,,,-',
board_conf.get_sfdisk_cmd())
+ def test_highbank(self):
+ board_conf = get_board_config('highbank')
+ self.set_up_config(board_conf)
+ self.assertEquals(
+ '63,106432,0x83,*\n106496,,,-',
+ board_conf.get_sfdisk_cmd())
+
def test_panda_android(self):
self.assertEqual(
'63,270272,0x0C,*\n270336,1048576,L\n1318912,524288,L\n'
@@ -1958,6 +1976,13 @@ class TestGetSfdiskCmdV2(TestCase):
'1,8191,0xDA\n8192,106496,0x0C,*\n114688,,,-',
board_conf.get_sfdisk_cmd())
+ def test_highbank(self):
+ board_conf = get_board_config('highbank')
+ board_conf.partition_layout = 'bootfs_rootfs'
+ self.assertEquals(
+ '63,106432,0x83,*\n106496,,,-',
+ board_conf.get_sfdisk_cmd())
+
class TestGetBootCmd(TestCase):
@@ -2202,6 +2227,20 @@ class TestGetBootCmd(TestCase):
'initrd_high': '0xffffffff'}
self.assertEqual(expected, boot_commands)
+ def test_highbank(self):
+ board_conf = get_board_config('highbank')
+ boot_commands = board_conf._get_boot_env(
+ is_live=False, is_lowmem=False, consoles=[],
+ rootfs_id="UUID=deadbeef", i_img_data="initrd", d_img_data=None)
+ expected = {
+ 'bootargs': 'root=UUID=deadbeef rootwait ro',
+ 'bootcmd': 'ext2load scsi 0:1 0x00800000 uImage; '
+ 'ext2load scsi 0:1 0x01000000 uInitrd; '
+ 'bootm 0x00800000 0x01000000 0x00001000',
+ 'fdt_high': '0xffffffff',
+ 'initrd_high': '0xffffffff'}
+ self.assertEqual(expected, boot_commands)
+
class TestExtraBootCmd(TestCaseWithFixtures):