-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests/qtest: Add bcm2838 mailbox test stub
Signed-off-by: Sergey Kambalin <sergey.kambalin@auriga.com> Message-id: 20240226000259.2752893-32-sergey.kambalin@auriga.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
- Loading branch information
Showing
3 changed files
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/* | ||
* Helper functions to work with BCM2838 mailbox via qtest interface. | ||
* | ||
* Copyright (c) 2023 Auriga LLC | ||
* | ||
* This work is licensed under the terms of the GNU GPL, version 2 or later. | ||
* See the COPYING file in the top-level directory. | ||
*/ | ||
|
||
#include "qemu/osdep.h" | ||
#include "hw/registerfields.h" | ||
#include "libqtest-single.h" | ||
#include "bcm2838-mailbox.h" | ||
|
||
REG32(MBOX_EXCHNG_REG, 0) | ||
FIELD(MBOX_EXCHNG_REG, CHANNEL, 0, 4) | ||
FIELD(MBOX_EXCHNG_REG, DATA, 4, 28) | ||
|
||
static uint32_t qtest_mbox0_read_reg32(QTestState *s, uint32_t offset) | ||
{ | ||
return qtest_readl(s, MBOX0_BASE + offset); | ||
} | ||
|
||
static void qtest_mbox1_write_reg32(QTestState *s, uint32_t offset, uint32_t value) | ||
{ | ||
return qtest_writel(s, MBOX1_BASE + offset, value); | ||
} | ||
|
||
static void qtest_mbox1_write(QTestState *s, uint8_t channel, uint32_t data) | ||
{ | ||
uint32_t mbox_reg = 0; | ||
|
||
mbox_reg = FIELD_DP32(mbox_reg, MBOX_EXCHNG_REG, CHANNEL, channel); | ||
mbox_reg = FIELD_DP32(mbox_reg, MBOX_EXCHNG_REG, DATA, data); | ||
qtest_mbox1_write_reg32(s, MBOX_REG_WRITE, mbox_reg); | ||
} | ||
|
||
int qtest_mbox0_has_data(QTestState *s) { | ||
return !(qtest_mbox0_read_reg32(s, MBOX_REG_STATUS) & MBOX_READ_EMPTY); | ||
} | ||
|
||
void qtest_mbox0_read_message(QTestState *s, | ||
uint8_t channel, | ||
void *msgbuf, | ||
size_t msgbuf_size) | ||
{ | ||
uint32_t mbox_reg; | ||
uint32_t msgaddr; | ||
|
||
g_assert(qtest_mbox0_has_data(s)); | ||
mbox_reg = qtest_mbox0_read_reg32(s, MBOX_REG_READ); | ||
g_assert_cmphex(FIELD_EX32(mbox_reg, MBOX_EXCHNG_REG, CHANNEL), ==, channel); | ||
msgaddr = FIELD_EX32(mbox_reg, MBOX_EXCHNG_REG, DATA) << 4; | ||
qtest_memread(s, msgaddr, msgbuf, msgbuf_size); | ||
} | ||
|
||
void qtest_mbox1_write_message(QTestState *s, uint8_t channel, uint32_t msg_addr) | ||
{ | ||
qtest_mbox1_write(s, channel, msg_addr >> 4); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* Declarations for BCM2838 mailbox test. | ||
* | ||
* Copyright (c) 2023 Auriga LLC | ||
* | ||
* This work is licensed under the terms of the GNU GPL, version 2 or later. | ||
* See the COPYING file in the top-level directory. | ||
*/ | ||
|
||
typedef struct { | ||
uint32_t size; | ||
uint32_t req_resp_code; | ||
} MboxBufHeader; | ||
|
||
#define DECLARE_TAG_TYPE(TypeName, RequestValueType, ResponseValueType) \ | ||
typedef struct { \ | ||
uint32_t id; \ | ||
uint32_t value_buffer_size; \ | ||
union { \ | ||
struct { \ | ||
uint32_t zero; \ | ||
RequestValueType value; \ | ||
} request; \ | ||
struct { \ | ||
uint32_t size_stat; \ | ||
ResponseValueType value; \ | ||
} response; \ | ||
}; \ | ||
} TypeName | ||
|
||
|
||
int mbox0_has_data(void); | ||
void mbox0_read_message(uint8_t channel, void *msgbuf, size_t msgbuf_size); | ||
void mbox1_write_message(uint8_t channel, uint32_t msg_addr); | ||
int qtest_mbox0_has_data(QTestState *s); | ||
void qtest_mbox0_read_message(QTestState *s, uint8_t channel, void *msgbuf, size_t msgbuf_size); | ||
void qtest_mbox1_write_message(QTestState *s, uint8_t channel, uint32_t msg_addr); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters