Thanks for taking the time to create a Pull Request for Renode!

Please familiarize yourself with our [Contributing guidelines](https://github.com/renode/renode/blob/master/CONTRIBUTING.md) first.

Please note that all contributions to Renode require you to sign a [Contributor License Agreement](https://cla-assistant.io/renode/renode).

Before merging your code to our upstream repositories it will be reviewed by the engineering team working on the project, who will most likely ask you to adapt your code to meet Renode's requirements.

### Related issue

Please provide the number of the issue that is addressed by this PR in the #number format.

### Description

A clear and concise description of what the PR is about.
Please clearly state if it's a bug fix or a new feature/improvement.

### Usage example

We provide an [Issue reproduction template repository](https://github.com/renode/renode-issue-reproduction-template), which is the best way to show us how your PR addresses an issue or adds a feature.

If you can, please create your own repository using this template and adapt the test files to use your fix or new feature.

Link this repository here to let us understand and verify your contribution.
In most cases this should be a fairly straightforward process and provide full reproducibility on both sides.

If you find it difficult to create such a repository, please provide all the necessary details in the text of this PR.
Please keep in mind that this route may require more back-and-forth communication to verify your contribution.

### Additional information

Please add all information you feel to be relevant and are not clearly visible in the reproduction repo.
