hw/misc/bcm2835_property: Add missed BCM2835 properties
Our model of the bcm2835 mailbox is missing a few properties that we need for the raspi4 kernel: * RPI_FWREQ_GET_CLOCKS * RPI_FWREQ_GET_THROTTLED * RPI_FWREQ_VCHIQ_INIT Add minimal implementations of them. Signed-off-by: Sergey Kambalin <sergey.kambalin@auriga.com> Message-id: 20240226000259.2752893-40-sergey.kambalin@auriga.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org> [PMM: improved commit message] Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
2f79d2ed64
commit
cda5a7d640
@ -19,6 +19,8 @@
|
||||
#include "trace.h"
|
||||
#include "hw/arm/raspi_platform.h"
|
||||
|
||||
#define VCHI_BUSADDR_SIZE sizeof(uint32_t)
|
||||
|
||||
/* https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface */
|
||||
|
||||
static void bcm2835_property_mbox_push(BCM2835PropertyState *s, uint32_t value)
|
||||
@ -138,6 +140,13 @@ static void bcm2835_property_mbox_push(BCM2835PropertyState *s, uint32_t value)
|
||||
resplen = 8;
|
||||
break;
|
||||
|
||||
case RPI_FWREQ_GET_CLOCKS:
|
||||
/* TODO: add more clock IDs if needed */
|
||||
stl_le_phys(&s->dma_as, value + 12, 0);
|
||||
stl_le_phys(&s->dma_as, value + 16, RPI_FIRMWARE_ARM_CLK_ID);
|
||||
resplen = 8;
|
||||
break;
|
||||
|
||||
case RPI_FWREQ_SET_CLOCK_RATE:
|
||||
case RPI_FWREQ_SET_MAX_CLOCK_RATE:
|
||||
case RPI_FWREQ_SET_MIN_CLOCK_RATE:
|
||||
@ -276,6 +285,7 @@ static void bcm2835_property_mbox_push(BCM2835PropertyState *s, uint32_t value)
|
||||
stl_le_phys(&s->dma_as, value + 12, 0);
|
||||
resplen = 4;
|
||||
break;
|
||||
|
||||
case RPI_FWREQ_FRAMEBUFFER_GET_NUM_DISPLAYS:
|
||||
stl_le_phys(&s->dma_as, value + 12, 1);
|
||||
resplen = 4;
|
||||
@ -301,6 +311,17 @@ static void bcm2835_property_mbox_push(BCM2835PropertyState *s, uint32_t value)
|
||||
resplen);
|
||||
break;
|
||||
|
||||
case RPI_FWREQ_GET_THROTTLED:
|
||||
stl_le_phys(&s->dma_as, value + 12, 0);
|
||||
resplen = 4;
|
||||
break;
|
||||
|
||||
case RPI_FWREQ_VCHIQ_INIT:
|
||||
stl_le_phys(&s->dma_as,
|
||||
value + offsetof(rpi_firmware_prop_request_t, payload),
|
||||
0);
|
||||
resplen = VCHI_BUSADDR_SIZE;
|
||||
break;
|
||||
default:
|
||||
qemu_log_mask(LOG_UNIMP,
|
||||
"bcm2835_property: unhandled tag 0x%08x\n", tag);
|
||||
|
@ -159,4 +159,15 @@ enum rpi_firmware_clk_id {
|
||||
RPI_FIRMWARE_NUM_CLK_ID,
|
||||
};
|
||||
|
||||
struct rpi_firmware_property_tag_header {
|
||||
uint32_t tag;
|
||||
uint32_t buf_size;
|
||||
uint32_t req_resp_size;
|
||||
};
|
||||
|
||||
typedef struct rpi_firmware_prop_request {
|
||||
struct rpi_firmware_property_tag_header hdr;
|
||||
uint8_t payload[0];
|
||||
} rpi_firmware_prop_request_t;
|
||||
|
||||
#endif /* INCLUDE_HW_MISC_RASPBERRYPI_FW_DEFS_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user