Beispiel #1
0
static int
sysctl_machdep_led_display(SYSCTL_HANDLER_ARGS)
{
	size_t buflen;
	char buf[9];
	int error;

	if (req->newptr == NULL)
		return (EINVAL);

	if (cvmx_sysinfo_get()->led_display_base_addr == 0)
		return (ENODEV);

	/*
	 * Revision 1.x of the EBT3000 only supports 4 characters, but
	 * other devices support 8.
	 */
	if (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_EBT3000 &&
	    cvmx_sysinfo_get()->board_rev_major == 1)
		buflen = 4;
	else
		buflen = 8;

	if (req->newlen > buflen)
		return (E2BIG);

	error = SYSCTL_IN(req, buf, req->newlen);
	if (error != 0)
		return (error);

	buf[req->newlen] = '\0';
	ebt3000_str_write(buf);

	return (0);
}
Beispiel #2
0
static void
octeon_boot_params_init(register_t ptr)
{
	octeon_boot_descriptor_t *app_desc_ptr;
	cvmx_bootinfo_t *octeon_bootinfo;

	if (ptr == 0 || ptr >= MAX_APP_DESC_ADDR) {
		cvmx_safe_printf("app descriptor passed at invalid address %#jx\n",
		    (uintmax_t)ptr);
		platform_reset();
	}

	app_desc_ptr = (octeon_boot_descriptor_t *)(intptr_t)ptr;
	if (app_desc_ptr->desc_version < 6) {
		cvmx_safe_printf("Your boot code is too old to be supported.\n");
		platform_reset();
	}
	octeon_bootinfo = octeon_process_app_desc_ver_6(app_desc_ptr);
	if (octeon_bootinfo == NULL) {
		cvmx_safe_printf("Could not parse boot descriptor.\n");
		platform_reset();
	}

	if (cvmx_sysinfo_get()->led_display_base_addr != 0) {
		/*
		 * Revision 1.x of the EBT3000 only supports 4 characters, but
		 * other devices support 8.
		 */
		if (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_EBT3000 &&
		    cvmx_sysinfo_get()->board_rev_major == 1)
			ebt3000_str_write("FBSD");
		else
			ebt3000_str_write("FreeBSD!");
	}

	if (cvmx_sysinfo_get()->phy_mem_desc_addr == (uint64_t)0) {
		cvmx_safe_printf("Your boot loader did not supply a memory descriptor.\n");
		platform_reset();
	}
	cvmx_bootmem_init(cvmx_sysinfo_get()->phy_mem_desc_addr);

	octeon_feature_init();

	__cvmx_helper_cfg_init();
}
Beispiel #3
0
/**
 * Default exception handler. Prints out the exception
 * cause decode and all relevant registers.
 *
 * @param registers Registers at time of the exception
 */
static void cvmx_interrupt_default_exception_handler(uint64_t registers[32])
{
    uint64_t trap_print_cause;

    ebt3000_str_write("Trap");
    cvmx_spinlock_lock(&cvmx_interrupt_default_lock);
    safe_printf("******************************************************************\n");
    safe_printf("Core %lu: Unhandled Exception. Cause register decodes to:\n", cvmx_get_core_num());
    READ_COP0(trap_print_cause, COP0_CAUSE);
    switch ((trap_print_cause >> 2) & 0x1f)
    {
        case 0x0:
            safe_printf("Interrupt\n");
            break;
        case 0x1:
            safe_printf("TLB Mod\n");
            break;
        case 0x2:
            safe_printf("tlb load/fetch\n");
            break;
        case 0x3:
            safe_printf("tlb store\n");
            break;
        case 0x4:
            safe_printf("address exc, load/fetch\n");
            break;
        case 0x5:
            safe_printf("address exc, store\n");
            break;
        case 0x6:
            safe_printf("bus error, inst. fetch\n");
            break;
        case 0x7:
            safe_printf("bus error, load/store\n");
            break;
        case 0x8:
            safe_printf("syscall\n");
            break;
        case 0x9:
            safe_printf("breakpoint \n");
            break;
        case 0xa:
            safe_printf("reserved instruction\n");
            break;
        case 0xb:
            safe_printf("cop unusable\n");
            break;
        case 0xc:
            safe_printf("arithmetic overflow\n");
            break;
        case 0xd:
            safe_printf("trap\n");
            break;
        case 0xf:
            safe_printf("floating point exc\n");
            break;
        case 0x12:
            safe_printf("cop2 exception\n");
            break;
        case 0x16:
            safe_printf("mdmx unusable\n");
            break;
        case 0x17:
            safe_printf("watch\n");
            break;
        case 0x18:
            safe_printf("machine check\n");
            break;
        case 0x1e:
            safe_printf("cache error\n");
            break;
        default:
            safe_printf("Reserved exception cause.\n");
            break;

    }

    safe_printf("******************************************************************\n");
    cvmx_interrupt_dump_registers(registers);
    safe_printf("******************************************************************\n");
    cvmx_spinlock_unlock(&cvmx_interrupt_default_lock);

    while (1)
    {
 	if (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_SIM)
            asm volatile ("break 1");
        else
            asm volatile ("wait");
    }