Browse Source

runners: bossac: calculate the offset instead of absolute address

BOSSA takes the offset within flash memory, not the absolute address.
This doesn't matter on most boards as the flash starts at zero but
does matter on the Due as the flash starts at +512 KiB.

Signed-off-by: Michael Hope <mlhx@google.com>
pull/29084/head
Michael Hope 5 years ago committed by Kumar Gala
parent
commit
c0055ed392
  1. 26
      scripts/west_commands/runners/bossac.py
  2. 6
      scripts/west_commands/tests/test_bossac.py

26
scripts/west_commands/runners/bossac.py

@ -17,12 +17,11 @@ class BossacBinaryRunner(ZephyrBinaryRunner): @@ -17,12 +17,11 @@ class BossacBinaryRunner(ZephyrBinaryRunner):
'''Runner front-end for bossac.'''
def __init__(self, cfg, bossac='bossac', port=DEFAULT_BOSSAC_PORT,
offset=None, flash_address=None):
offset=None):
super().__init__(cfg)
self.bossac = bossac
self.port = port
self.offset = offset
self.flash_address = flash_address
@classmethod
def name(cls):
@ -44,15 +43,22 @@ class BossacBinaryRunner(ZephyrBinaryRunner): @@ -44,15 +43,22 @@ class BossacBinaryRunner(ZephyrBinaryRunner):
help='serial port to use, default is /dev/ttyACM0')
@classmethod
def do_create(cls, cfg, args):
# BOSSA means there's a bootloader so always fetch the flash address
args.dt_flash = True
def get_flash_offset(cls, cfg):
# Pull the bootloader size from the config
build_conf = BuildConfiguration(cfg.build_dir)
flash_address = cls.get_flash_address(args, build_conf, None)
if build_conf['CONFIG_HAS_FLASH_LOAD_OFFSET']:
return build_conf['CONFIG_FLASH_LOAD_OFFSET']
return None
@classmethod
def do_create(cls, cfg, args):
offset = args.offset
if offset is None:
offset = cls.get_flash_offset(cfg)
return BossacBinaryRunner(cfg, bossac=args.bossac,
port=args.bossac_port, offset=args.offset,
flash_address=flash_address)
port=args.bossac_port, offset=offset)
def read_help(self):
"""Run bossac --help and return the output as a list of lines"""
@ -75,8 +81,6 @@ class BossacBinaryRunner(ZephyrBinaryRunner): @@ -75,8 +81,6 @@ class BossacBinaryRunner(ZephyrBinaryRunner):
if supports_offset:
if self.offset is not None:
return self.offset
if self.flash_address is not None:
return self.flash_address
self.logger.warning(
'This version of BOSSA supports the --offset flag but' +
@ -113,7 +117,7 @@ class BossacBinaryRunner(ZephyrBinaryRunner): @@ -113,7 +117,7 @@ class BossacBinaryRunner(ZephyrBinaryRunner):
offset = self.get_offset(self.supports('--offset'))
if offset is not None:
if offset:
cmd_flash += ['-o', '%s' % offset]
self.check_call(cmd_flash)

6
scripts/west_commands/tests/test_bossac.py

@ -69,7 +69,7 @@ def test_bossac_init(cc, req, supports, runner_config): @@ -69,7 +69,7 @@ def test_bossac_init(cc, req, supports, runner_config):
@patch('runners.bossac.BossacBinaryRunner.supports', return_value=True)
@patch('runners.core.BuildConfiguration._init')
@patch('runners.core.ZephyrBinaryRunner.get_flash_address',
@patch('runners.bossac.BossacBinaryRunner.get_flash_offset',
return_value=None)
@patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
@patch('runners.core.ZephyrBinaryRunner.check_call')
@ -86,7 +86,7 @@ def test_bossac_create(cc, req, gfa, bcfg, supports, runner_config): @@ -86,7 +86,7 @@ def test_bossac_create(cc, req, gfa, bcfg, supports, runner_config):
@patch('runners.bossac.BossacBinaryRunner.supports', return_value=True)
@patch('runners.core.BuildConfiguration._init')
@patch('runners.core.ZephyrBinaryRunner.get_flash_address',
@patch('runners.bossac.BossacBinaryRunner.get_flash_offset',
return_value=TEST_FLASH_ADDRESS)
@patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
@patch('runners.core.ZephyrBinaryRunner.check_call')
@ -105,7 +105,7 @@ def test_bossac_create_with_offset(cc, req, gfa, bcfg, supports, @@ -105,7 +105,7 @@ def test_bossac_create_with_offset(cc, req, gfa, bcfg, supports,
@patch('runners.bossac.BossacBinaryRunner.supports', return_value=True)
@patch('runners.core.BuildConfiguration._init')
@patch('runners.core.ZephyrBinaryRunner.get_flash_address',
@patch('runners.bossac.BossacBinaryRunner.get_flash_offset',
return_value=TEST_FLASH_ADDRESS)
@patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
@patch('runners.core.ZephyrBinaryRunner.check_call')

Loading…
Cancel
Save