Example #1
0
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;
}
Example #2
0
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;
}