1. 19 9月, 2015 12 次提交
  2. 18 9月, 2015 28 次提交
    • P
      Merge remote-tracking branch 'remotes/jnsnow/tags/ide-pull-request' into staging · a53efe9c
      Peter Maydell 提交于
      # gpg: Signature made Fri 18 Sep 2015 15:59:02 BST using RSA key ID AAFC390E
      # gpg: Good signature from "John Snow (John Huston) <jsnow@redhat.com>"
      
      * remotes/jnsnow/tags/ide-pull-request:
        ahci: clean up initial d2h semantics
        ahci: remove cmd_fis argument from write_fis_d2h
        ahci: fix signature generation
        ahci: remove dead reset code
        atapi: abort transfers with 0 byte limits
        ide: fix ATAPI command permissions
        ide-test: add cdrom dma test
        ide-test: add cdrom pio test
        qtest/ahci: export generate_pattern
        qtest/ahci: use generate_pattern everywhere
        ide: unify io_buffer_offset increments
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      a53efe9c
    • J
      ahci: clean up initial d2h semantics · e47f9eb1
      John Snow 提交于
      with write_fis_d2h and signature generation tidied up,
      let's adjust the initial d2h semantics to make more sense.
      
      The initial d2h is considered delivered if there is guest
      memory to save it to.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Message-id: 1441140641-17631-5-git-send-email-jsnow@redhat.com
      e47f9eb1
    • J
      ahci: remove cmd_fis argument from write_fis_d2h · 28ee8255
      John Snow 提交于
      It's no longer used. We used to generate a D2H FIS based
      upon the command FIS that prompted the update, but in reality,
      the D2H FIS is generated purely from register state.
      
      cmd_fis is vestigial, so get rid of it.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Message-id: 1441140641-17631-4-git-send-email-jsnow@redhat.com
      28ee8255
    • J
      ahci: fix signature generation · 33a983cb
      John Snow 提交于
      The initial register device-to-host FIS no longer needs to specially
      set certain fields, as these can be handled generically by setting those
      fields explicitly with the signatures we want at port reset time.
      
      (1) Signatures are decomposed into their four component registers and
          set upon (AHCI) port reset.
      (2) the signature cache register is no longer set manually per-each
          device type, but instead just once during ahci_init_d2h.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Message-id: 1441140641-17631-3-git-send-email-jsnow@redhat.com
      33a983cb
    • J
      ahci: remove dead reset code · f91a0aa3
      John Snow 提交于
      This check is dead due to an earlier conditional.
      AHCI does not currently support hotplugging, so
      checks to see if devices are present or not are useless.
      
      Remove it.
      Reported-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Message-id: 1441140641-17631-2-git-send-email-jsnow@redhat.com
      f91a0aa3
    • J
      atapi: abort transfers with 0 byte limits · 9ef2e93f
      John Snow 提交于
      We're supposed to abort on transfers like this, unless we fill
      Word 125 of our IDENTIFY data with a default transfer size, which
      we don't currently do.
      
      This is an ATA error, not a SCSI/ATAPI one.
      See ATA8-ACS3 sections 7.17.6.49 or 7.21.5.
      
      If we don't do this, QEMU will loop forever trying to transfer
      zero bytes, which isn't particularly useful.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Message-id: 1442253685-23349-2-git-send-email-jsnow@redhat.com
      9ef2e93f
    • J
      ide: fix ATAPI command permissions · d9033e1d
      John Snow 提交于
      We're a little too lenient with what we'll let an ATAPI drive handle.
      Clamp down on the IDE command execution table to remove CD_OK permissions
      from commands that are not and have never been ATAPI commands.
      
      For ATAPI command validity, please see:
      - ATA4 Section 6.5 ("PACKET Command feature set")
      - ATA8/ACS Section 4.3 ("The PACKET feature set")
      - ACS3 Section 4.3 ("The PACKET feature set")
      
      ACS3 has a historical command validity table in Table B.4
      ("Historical Command Assignments") that can be referenced to find when
      a command was introduced, deprecated, obsoleted, etc.
      
      The only reference for ATAPI command validity is by checking that
      version's PACKET feature set section.
      
      ATAPI was introduced by T13 into ATA4, all commands retired prior to ATA4
      therefore are assumed to have never been ATAPI commands.
      
      Mandatory commands, as listed in ATA8-ACS3, are:
      
      - DEVICE RESET
      - EXECUTE DEVICE DIAGNOSTIC
      - IDENTIFY DEVICE
      - IDENTIFY PACKET DEVICE
      - NOP
      - PACKET
      - READ SECTOR(S)
      - SET FEATURES
      
      Optional commands as listed in ATA8-ACS3, are:
      
      - FLUSH CACHE
      - READ LOG DMA EXT
      - READ LOG EXT
      - WRITE LOG DMA EXT
      - WRITE LOG EXT
      
      All other commands are illegal to send to an ATAPI device and should
      be rejected by the device.
      
      CD_OK removal justifications:
      
      0x06 WIN_DSM              Defined in ACS2. Not valid for ATAPI.
      0x21 WIN_READ_ONCE        Retired in ATA5. Not ATAPI in ATA4.
      0x94 WIN_STANDBYNOW2      Retired in ATA4. Did not coexist with ATAPI.
      0x95 WIN_IDLEIMMEDIATE2   Retired in ATA4. Did not coexist with ATAPI.
      0x96 WIN_STANDBY2         Retired in ATA4. Did not coexist with ATAPI.
      0x97 WIN_SETIDLE2         Retired in ATA4. Did not coexist with ATAPI.
      0x98 WIN_CHECKPOWERMODE2  Retired in ATA4. Did not coexist with ATAPI.
      0x99 WIN_SLEEPNOW2        Retired in ATA4. Did not coexist with ATAPI.
      0xE0 WIN_STANDBYNOW1      Not part of ATAPI in ATA4, ACS or ACS3.
      0xE1 WIN_IDLEIMMDIATE     Not part of ATAPI in ATA4, ACS or ACS3.
      0xE2 WIN_STANDBY          Not part of ATAPI in ATA4, ACS or ACS3.
      0xE3 WIN_SETIDLE1         Not part of ATAPI in ATA4, ACS or ACS3.
      0xE4 WIN_CHECKPOWERMODE1  Not part of ATAPI in ATA4, ACS or ACS3.
      0xE5 WIN_SLEEPNOW1        Not part of ATAPI in ATA4, ACS or ACS3.
      0xF8 WIN_READ_NATIVE_MAX  Obsoleted in ACS3. Not ATAPI in ATA4 or ACS.
      
      This patch fixes a divide by zero fault that can be caused by sending
      the WIN_READ_NATIVE_MAX command to an ATAPI drive, which causes it to
      attempt to use zeroed CHS values to perform sector arithmetic.
      Reported-by: NQinghao Tang <luodalongde@gmail.com>
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Message-id: 1441816082-21031-1-git-send-email-jsnow@redhat.com
      CC: qemu-stable@nongnu.org
      d9033e1d
    • J
      ide-test: add cdrom dma test · 00ea63fd
      John Snow 提交于
      Now, test the DMA functionality of the ATAPI drive.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 1441926555-19471-5-git-send-email-jsnow@redhat.com
      00ea63fd
    • J
      ide-test: add cdrom pio test · f7ba8d7f
      John Snow 提交于
      Add a simple read test for ATAPI devices,
      using the PIO mechanism.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 1441926555-19471-4-git-send-email-jsnow@redhat.com
      f7ba8d7f
    • J
      qtest/ahci: export generate_pattern · ab4f7057
      John Snow 提交于
      Share the pattern function for ide and ahci test.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 1441926555-19471-3-git-send-email-jsnow@redhat.com
      ab4f7057
    • J
      qtest/ahci: use generate_pattern everywhere · d7531638
      John Snow 提交于
      Fix the pattern generation to actually be interesting,
      and make sure all buffers in the ahci-test actually use it.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 1441926555-19471-2-git-send-email-jsnow@redhat.com
      d7531638
    • P
      Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2015-09-18' into staging · ffa4822c
      Peter Maydell 提交于
      Error reporting patches
      
      # gpg: Signature made Fri 18 Sep 2015 13:42:49 BST using RSA key ID EB918653
      # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
      # gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
      
      * remotes/armbru/tags/pull-error-2015-09-18:
        memory: Fix bad error handling in memory_region_init_ram_ptr()
        loader: Fix memory_region_init_resizeable_ram() error handling
        Fix bad error handling after memory_region_init_ram()
        error: New error_fatal
        MAINTAINERS: Add "Error reporting" entry
        error: Copy location information in error_copy()
        hmp: Allow for error message hints on HMP
        error: only prepend timestamp on stderr
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      ffa4822c
    • M
      memory: Fix bad error handling in memory_region_init_ram_ptr() · 0bdaa3a4
      Markus Armbruster 提交于
      Commit ef701d7b screwed up handling of out-of-memory conditions.
      Before the commit, we report the error and exit(1), in one place.  The
      commit lifts the error handling up the call chain some, to three
      places.  Fine.  Except it uses &error_abort in these places, changing
      the behavior from exit(1) to abort(), and thus undoing the work of
      commit 39228250 "exec: Don't abort when we can't allocate guest
      memory".
      
      The previous two commits fixed one of the three places, another one
      was fixed in commit 33e0eb52.  This commit fixes the third one.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1441983105-26376-5-git-send-email-armbru@redhat.com>
      Reviewed-by: NPeter Crosthwaite <crosthwaite.peter@gmail.com>
      0bdaa3a4
    • M
      loader: Fix memory_region_init_resizeable_ram() error handling · df8abec8
      Markus Armbruster 提交于
      Commit ef701d7b screwed up handling of out-of-memory conditions.
      Before the commit, we report the error and exit(1), in one place.  The
      commit lifts the error handling up the call chain some, to three
      places.  Fine.  Except it uses &error_abort in these places, changing
      the behavior from exit(1) to abort(), and thus undoing the work of
      commit 39228250 "exec: Don't abort when we can't allocate guest
      memory".
      
      The previous commit fixed up uses of memory_region_init_ram().  One of
      them was replaced by memory_region_init_resizeable_ram() [sic!] in
      commit a1666142, so Coccinelle missed it.  Fix it up.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1441983105-26376-4-git-send-email-armbru@redhat.com>
      Reviewed-by: NPeter Crosthwaite <crosthwaite.peter@gmail.com>
      df8abec8
    • M
      Fix bad error handling after memory_region_init_ram() · f8ed85ac
      Markus Armbruster 提交于
      Symptom:
      
          $ qemu-system-x86_64 -m 10000000
          Unexpected error in ram_block_add() at /work/armbru/qemu/exec.c:1456:
          upstream-qemu: cannot set up guest memory 'pc.ram': Cannot allocate memory
          Aborted (core dumped)
      
      Root cause: commit ef701d7b screwed up handling of out-of-memory
      conditions.  Before the commit, we report the error and exit(1), in
      one place, ram_block_add().  The commit lifts the error handling up
      the call chain some, to three places.  Fine.  Except it uses
      &error_abort in these places, changing the behavior from exit(1) to
      abort(), and thus undoing the work of commit 39228250 "exec: Don't
      abort when we can't allocate guest memory".
      
      The three places are:
      
      * memory_region_init_ram()
      
        Commit 49946538 (right after commit ef701d7b) lifted the error
        handling further, through memory_region_init_ram(), multiplying the
        incorrect use of &error_abort.  Later on, imitation of existing
        (bad) code may have created more.
      
      * memory_region_init_ram_ptr()
      
        The &error_abort is still there.
      
      * memory_region_init_rom_device()
      
        Doesn't need fixing, because commit 33e0eb52 (soon after commit
        ef701d7b) lifted the error handling further, and in the process
        changed it from &error_abort to passing it up the call chain.
        Correct, because the callers are realize() methods.
      
      Fix the error handling after memory_region_init_ram() with a
      Coccinelle semantic patch:
      
          @r@
          expression mr, owner, name, size, err;
          position p;
          @@
                  memory_region_init_ram(mr, owner, name, size,
          (
          -                              &error_abort
          +                              &error_fatal
          |
                                         err@p
          )
                                        );
          @script:python@
              p << r.p;
          @@
          print "%s:%s:%s" % (p[0].file, p[0].line, p[0].column)
      
      When the last argument is &error_abort, it gets replaced by
      &error_fatal.  This is the fix.
      
      If the last argument is anything else, its position is reported.  This
      lets us check the fix is complete.  Four positions get reported:
      
      * ram_backend_memory_alloc()
      
        Error is passed up the call chain, ultimately through
        user_creatable_complete().  As far as I can tell, it's callers all
        handle the error sanely.
      
      * fsl_imx25_realize(), fsl_imx31_realize(), dp8393x_realize()
      
        DeviceClass.realize() methods, errors handled sanely further up the
        call chain.
      
      We're good.  Test case again behaves:
      
          $ qemu-system-x86_64 -m 10000000
          qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory
          [Exit 1 ]
      
      The next commits will repair the rest of commit ef701d7b's damage.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1441983105-26376-3-git-send-email-armbru@redhat.com>
      Reviewed-by: NPeter Crosthwaite <crosthwaite.peter@gmail.com>
      f8ed85ac
    • M
      error: New error_fatal · a29a37b9
      Markus Armbruster 提交于
      Similar to error_abort, but doesn't report where the error was
      created, and terminates the process with exit(1) rather than abort().
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1441983105-26376-2-git-send-email-armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NPeter Crosthwaite <crosthwaite.peter@gmail.com>
      a29a37b9
    • M
      MAINTAINERS: Add "Error reporting" entry · 4f966768
      Markus Armbruster 提交于
      Error reporting work has been flowing through my tree for a while.
      Time for MAINTAINERS to catch up.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1442057396-21989-1-git-send-email-armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NPeter Crosthwaite <crosthwaite.peter@gmail.com>
      4f966768
    • E
      error: Copy location information in error_copy() · 88e2ce29
      Eric Blake 提交于
      Commit 1e9b65bb forgot to propagate source information to copied
      errors.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1441902890-23064-1-git-send-email-eblake@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      88e2ce29
    • E
      hmp: Allow for error message hints on HMP · 50b7b000
      Eric Blake 提交于
      Commits 7216ae3d and d2828429 disabled some error message hints,
      all because a change to use modern error reporting meant that the
      hint would be output prior to the actual error.  Fix this by making
      hints a first-class member of Error.
      
      For example, we are now back to the pleasant:
      
       $ qemu-system-x86_64 --nodefaults -S --vnc :0 --chardev null,id=,
       qemu-system-x86_64: --chardev null,id=,: Parameter 'id' expects an identifier
       Identifiers consist of letters, digits, '-', '.', '_', starting with a letter.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <1441901956-21991-1-git-send-email-eblake@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      50b7b000
    • S
      error: only prepend timestamp on stderr · 615cf669
      Stefan Hajnoczi 提交于
      The -msg timestamp=on option prepends a timestamp to error messages.
      This is useful on stderr where it allows users to identify when an error
      was raised.
      
      Timestamps do not make sense on the monitor since error_report() is
      called in response to a synchronous monitor command and the user already
      knows "when" the command was issued.  Additionally, the rest of the
      monitor conversation lacks timestamps so the error timestamp cannot be
      correlated with other activity.
      
      Only prepend timestamps on stderr.  This fixes libvirt's 'drive_del'
      processing, which did not expect a timestamp.  Other QEMU monitor
      clients are probably equally confused by timestamps on monitor error
      messages.
      
      Cc: Markus Armbruster <armbru@redhat.com>
      Cc: Seiji Aguchi <seiji.aguchi@hds.com>
      Cc: Frank Schreuder <fschreuder@transip.nl>
      Cc: Daniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Message-Id: <1439212541-16997-1-git-send-email-stefanha@redhat.com>
      Reviewed-by: NDaniel P. Berrange <berrange@redhat.com>
      Tested-by: NFrank Schreuder <fschreuder@transip.nl>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      615cf669
    • P
      Merge remote-tracking branch 'remotes/lalrae/tags/mips-20150918' into staging · 3bf1f5ec
      Peter Maydell 提交于
      MIPS patches 2015-09-18
      
      Changes:
      * fixes for rdhwr, tlbwr, mtc0, recip.fmt, rsqrt.fmt and daui instructions
      * removal of MIPS_DEBUG code
      * use tcg_gen_extrh_i64_i32()
      * improve random tlb index generation in cpu_mips_get_random()
      * exception handling improvements to correctly restore icount
      
      # gpg: Signature made Fri 18 Sep 2015 12:15:28 BST using RSA key ID 0B29DA6B
      # gpg: Good signature from "Leon Alrae <leon.alrae@imgtec.com>"
      
      * remotes/lalrae/tags/mips-20150918:
        target-mips: improve exception handling
        target-mips: correct MTC0 instruction on MIPS64
        target-mips: add missing restriction in DAUI instruction
        target-mips: fix corner case in TLBWR causing QEMU to hang
        pic32: use LCG algorithm for generated random index of TLBWR instruction
        target-mips: get rid of MIPS_DEBUG_SIGN_EXTENSIONS
        target-mips: get rid of MIPS_DEBUG
        target-mips: Fix RDHWR on CP0.Count
        target-mips: remove wrong checks for recip.fmt and rsqrt.fmt
        target-mips: Use tcg_gen_extrh_i64_i32
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      3bf1f5ec
    • P
      target-mips: improve exception handling · 9c708c7f
      Pavel Dovgaluk 提交于
      This patch improves exception handling in MIPS.
      Instructions generate several types of exceptions.
      When exception is generated, it breaks the execution of the current
      translation block. Implementation of the exceptions handling does not
      correctly restore icount for the instruction which caused the exception.
      In most cases icount will be decreased by the value equal to the size of
      TB. This patch passes pointer to the translation block internals to the
      exception handler. It allows correct restoring of the icount value.
      Signed-off-by: NPavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
      Reviewed-by: NAurelien Jarno <aurelien@aurel32.net>
      Reviewed-by: NLeon Alrae <leon.alrae@imgtec.com>
      [leon.alrae@imgtec.com: avoid retranslation in linux-user SC, break lines
       which are over 80 chars, remove v3 changelog from the commit message]
      Signed-off-by: NLeon Alrae <leon.alrae@imgtec.com>
      9c708c7f
    • L
      target-mips: correct MTC0 instruction on MIPS64 · d54a299b
      Leon Alrae 提交于
      MTC0 on a 64-bit processor should move entire 64-bit GPR content to CP0
      register.
      Signed-off-by: NLeon Alrae <leon.alrae@imgtec.com>
      Reviewed-by: NAurelien Jarno <aurelien@aurel32.net>
      d54a299b
    • L
      target-mips: add missing restriction in DAUI instruction · db77d852
      Leon Alrae 提交于
      rs cannot be the zero register, Reserved Instruction exception must be
      signalled for this case.
      Signed-off-by: NLeon Alrae <leon.alrae@imgtec.com>
      Reviewed-by: NAurelien Jarno <aurelien@aurel32.net>
      db77d852
    • L
      target-mips: fix corner case in TLBWR causing QEMU to hang · 3adafef2
      Leon Alrae 提交于
      cpu_mips_get_random() function is used to generate a random index from
      CP0.Wired to TLBSize-1 range. Current implementation avoids generating
      the same as before value, hence the while loop. If the guest sets
      CP0.Wired to TLBSize-1 (which actually does not sound to be very
      practical) QEMU will get stuck in the loop infinitely as we always
      generate the same index.
      Signed-off-by: NLeon Alrae <leon.alrae@imgtec.com>
      Reviewed-by: NAurelien Jarno <aurelien@aurel32.net>
      3adafef2
    • S
      pic32: use LCG algorithm for generated random index of TLBWR instruction · ceb0ee14
      Serge Vakulenko 提交于
      The LFSR algorithm, used for generating random TLB indexes for TLBWR
      instruction, was inclined to produce a degenerate sequence in some cases.
      For example, for 16-entry TLB size and Wired=1, it gives: 15, 6, 7, 2,
      7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2...
      When replaced with LCG algorithm from ISO/IEC 9899 standard, the sequence
      looks much better, with about the same computational effort needed.
      Signed-off-by: NSerge Vakulenko <serge.vakulenko@gmail.com>
      Reviewed-by: NAurelien Jarno <aurelien@aurel32.net>
      Reviewed-by: NLeon Alrae <leon.alrae@imgtec.com>
      Signed-off-by: NLeon Alrae <leon.alrae@imgtec.com>
      ceb0ee14
    • A
      target-mips: get rid of MIPS_DEBUG_SIGN_EXTENSIONS · b307446e
      Aurelien Jarno 提交于
      MIPS_DEBUG_SIGN_EXTENSIONS was used sometimes ago to verify that 32-bit
      instructions correctly sign extend their results. It's now not need
      anymore, remove it.
      
      Cc: Leon Alrae <leon.alrae@imgtec.com>
      Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>
      Reviewed-by: NLeon Alrae <leon.alrae@imgtec.com>
      Signed-off-by: NLeon Alrae <leon.alrae@imgtec.com>
      b307446e
    • A
      target-mips: get rid of MIPS_DEBUG · 9d68ac14
      Aurelien Jarno 提交于
      MIPS_DEBUG is a define used to dump the instruction disassembling. It
      has to be defined at compile time. In practice I believe it's more
      efficient to just look at the instruction disassembly and op dump using
      -d in_asm,op. This patch therefore removes the corresponding code, which
      clutters translate.c.
      
      Cc: Leon Alrae <leon.alrae@imgtec.com>
      Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>
      Reviewed-by: NLeon Alrae <leon.alrae@imgtec.com>
      Signed-off-by: NLeon Alrae <leon.alrae@imgtec.com>
      9d68ac14