static uint32_t get_uint32_t(void) { struct vc_msg_uint32_t vc_msg __attribute__((aligned(16))); vc_msg.msg_size = sizeof(struct vc_msg_uint32_t); vc_msg.request_code = 0; vc_msg.tag.tag_id = RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF; vc_msg.tag.buffer_size = 4; vc_msg.tag.data_size = 0; vc_msg.tag.value = 0; vc_msg.end_tag = 0; clean_data_cache(); dsb(); dmb(); bcm2835_mailbox_flush(); bcm2835_mailbox_write(BCM2835_MAILBOX_PROP_CHANNEL, GPU_MEM_BASE + (uint32_t)&vc_msg); (void)bcm2835_mailbox_read(BCM2835_MAILBOX_PROP_CHANNEL); dmb(); invalidate_data_cache(); dsb(); if (vc_msg.request_code != BCM2835_MAILBOX_SUCCESS) { return 0; } return vc_msg.tag.value; }
bool HardwareBaremetal::Reboot(void) { hardware_led_set(1); h3_watchdog_enable(); invalidate_instruction_cache(); flush_branch_target_cache(); flush_prefetch_buffer(); clean_data_cache(); invalidate_data_cache(); for (;;) ; __builtin_unreachable (); return true; }