예제 #1
0
static urj_bus_t *
bf533_stamp_bus_new (urj_chain_t *chain, const urj_bus_driver_t *driver,
                     const urj_param_t *cmd_params[])
{
    urj_bus_t *bus;
    urj_part_t *part;
    bfin_bus_params_t *params;
    int failed = 0;

    bus = urj_bus_generic_new (chain, driver, sizeof (bus_params_t));
    if (bus == NULL)
        return NULL;
    part = bus->part;

    params = bus->params;
    params->async_size = 4 * 1024 * 1024;
    params->ams_cnt = 4;
    params->abe_cnt = 2;
    params->addr_cnt = 19;
    params->data_cnt = 16;
    params->select_flash = bf533_stamp_select_flash;
    params->unselect_flash = bf533_stamp_unselect_flash;
    params->sdram = 1;
    failed |= bfin_bus_new (bus, cmd_params, NULL);

    failed |= urj_bus_generic_attach_sig (part, &PF[0], "PF0");
    failed |= urj_bus_generic_attach_sig (part, &PF[1], "PF1");

    if (failed)
    {
        urj_bus_generic_free (bus);
        return NULL;
    }

    return bus;
}
예제 #2
0
파일: mpc837x.c 프로젝트: cktben/urjtag
static urj_bus_t *
mpc837x_bus_new( urj_chain_t *chain, const urj_bus_driver_t *driver, const urj_param_t *cmd_params[] )
{
	urj_bus_t *bus;
	bus_params_t *bp;
	urj_part_t *part;
	char buff[10];
	int i;
	int failed = 0;


	bus = urj_bus_generic_new (chain, driver, sizeof (bus_params_t));
	if (bus == NULL)
		return NULL;

	part = bus->part;
	bp = bus->params;
	
	/* default values	*/	
	bp->lbc_muxed = 0;
	bp->lbc_num_d = 8;
	bp->lbc_num_ad = 25;
	
	for (i = 0; cmd_params[i] != NULL; i++)
	{
	    switch (cmd_params[i]->key)
	    {
	    case URJ_BUS_PARAM_KEY_HELP:
		urj_bus_generic_free (bus);
		urj_log (URJ_LOG_LEVEL_NORMAL,
			_("Usage: initbus mpc837x [mux] [width=WIDTH]\n"	\
			"            MUX        multiplexed data bus (default no)\n"	\
			"            WIDTH      data bus width - 8, 16, 32 (default 8)\n"));
		return NULL;
	    case URJ_BUS_PARAM_KEY_MUX:
		bp->lbc_muxed = 1;
		break;
	    case URJ_BUS_PARAM_KEY_WIDTH:
		switch (cmd_params[i]->value.lu)
		{
		case 8:
		    bp->lbc_num_d = 8;
		    break;
		case 16:
		    bp->lbc_num_d = 16;
		    break;
		case 32:
		    bp->lbc_num_d = 32;
		    break;
		default:
		    urj_error_set (URJ_ERROR_UNSUPPORTED,
				_("    Only 8, 16, 32 bus width are suported\n")); 
		}
		break;
	    default:
		urj_bus_generic_free (bus);
		urj_error_set (URJ_ERROR_SYNTAX, "unrecognised bus parameter '%s'",	\
			    urj_param_string(&urj_bus_param_list, cmd_params[i]));
		return NULL;
	    }
	}
	
	if ((!bp->lbc_muxed) && (bp->lbc_num_d > 16))
	{
	    urj_bus_generic_free (bus);
    	    urj_error_set (URJ_ERROR_UNSUPPORTED,
		_("    Only 8 and 16 non multiplexed bus width are suported\n")); 
	    return NULL;
	}
	
	if (bp->lbc_muxed)
	    bp->lbc_num_ad = 32;	

	/* Get the signals */
	if (bp->lbc_muxed) 
	{
	    failed |= urj_bus_generic_attach_sig( part, &(ALE), "LALE" );
	    for (i = 0; i < LBC_NUM_LAD; i++) {
		sprintf( buff, "LAD%d", i );
	        failed |= urj_bus_generic_attach_sig( part, &(LAD[i]), buff );
	    }	
	}
	else
	{
	    failed |= urj_bus_generic_attach_sig( part, &(LA[7]),  "LDP2" );
    	    failed |= urj_bus_generic_attach_sig( part, &(LA[8]),  "LDP3" );
	    failed |= urj_bus_generic_attach_sig( part, &(LA[9]),  "LGPL5" );
	    failed |= urj_bus_generic_attach_sig( part, &(LA[10]), "LALE" );
	    for (i = 11; i < 27; i++) {
	        sprintf( buff, "LAD%d", i + 5 );
	        failed |= urj_bus_generic_attach_sig( part, &(LA[i]), buff );		
	    }	    
	}
		
	for (i = 27; i < LBC_NUM_LAD; i++) {
		sprintf( buff, "LA%d", i );
		failed |= urj_bus_generic_attach_sig( part, &(LA[i]), buff );
	}

	for (i = 0; i < LBC_NUM_LCS; i++) {
		sprintf( buff, "LCS_B%d", i );
		failed |= urj_bus_generic_attach_sig( part, &(nCS[i]), buff );
	}

	for (i = 0; i < LBC_NUM_LWE; i++) {
		sprintf( buff, "LWE_B%d", i );
		failed |= urj_bus_generic_attach_sig( part, &(nWE[i]), buff );
	}

	failed |= urj_bus_generic_attach_sig( part, &(nOE), "LGPL2" );
	failed |= urj_bus_generic_attach_sig( part, &(BCTL), "LBCTL" );

	if (failed) {
	    urj_bus_generic_free (bus);
	    return NULL;
	}

	urj_log(URJ_LOG_LEVEL_NORMAL, 
		"%sMUXed %db address, %db data bus\n", 
		((bp->lbc_muxed) ? "" : "Non-"), bp->lbc_num_ad, bp->lbc_num_d);

	return bus;
}