Only warn (and do not abort) if Pdo assignment/mapping configuration
fails, or is impossible.
This commit is contained in:
parent
23274507c7
commit
60aa049b63
1
TODO
1
TODO
|
|
@ -13,6 +13,7 @@ Version 1.4.0:
|
|||
* Update documentation.
|
||||
* Get original driver for r8169.
|
||||
* Race in jiffies frame timeout?
|
||||
* Error at no sync manager for configuration.
|
||||
|
||||
Future issues:
|
||||
|
||||
|
|
|
|||
|
|
@ -171,8 +171,8 @@ void ec_fsm_pdo_assign_next_sync(
|
|||
|
||||
if (!(fsm->sync = ec_slave_get_sync(fsm->slave, fsm->sync_index))) {
|
||||
if (!list_empty(&fsm->pdos->list)) {
|
||||
EC_ERR("Slave %u does not provide a configuration for sync "
|
||||
"manager %u!\n", fsm->slave->ring_position,
|
||||
EC_WARN("Slave %u does not provide a configuration "
|
||||
"for SM%u!\n", fsm->slave->ring_position,
|
||||
fsm->sync_index);
|
||||
fsm->state = ec_fsm_pdo_assign_state_error;
|
||||
return;
|
||||
|
|
@ -185,8 +185,7 @@ void ec_fsm_pdo_assign_next_sync(
|
|||
continue;
|
||||
|
||||
if (fsm->slave->master->debug_level) {
|
||||
EC_DBG("Pdo assignment of SM%u differs in slave %u:\n",
|
||||
fsm->sync_index, fsm->slave->ring_position);
|
||||
EC_DBG("Pdo assignment of SM%u differs:\n", fsm->sync_index);
|
||||
EC_DBG("Currently assigned Pdos: ");
|
||||
ec_pdo_list_print(&fsm->sync->pdos);
|
||||
printk("\n");
|
||||
|
|
@ -199,7 +198,7 @@ void ec_fsm_pdo_assign_next_sync(
|
|||
if (!(fsm->slave->sii.mailbox_protocols & EC_MBOX_COE)
|
||||
|| (fsm->slave->sii.has_general
|
||||
&& !fsm->slave->sii.coe_details.enable_pdo_assign)) {
|
||||
EC_ERR("Slave %u does not support assigning Pdos!\n",
|
||||
EC_WARN("Slave %u does not support assigning Pdos!\n",
|
||||
fsm->slave->ring_position);
|
||||
fsm->state = ec_fsm_pdo_assign_state_error;
|
||||
return;
|
||||
|
|
@ -207,11 +206,6 @@ void ec_fsm_pdo_assign_next_sync(
|
|||
|
||||
fsm->num_configured_syncs++;
|
||||
|
||||
if (fsm->slave->master->debug_level) {
|
||||
EC_DBG("Changing Pdo assignment for SM%u of slave %u.\n",
|
||||
fsm->sync_index, fsm->slave->ring_position);
|
||||
}
|
||||
|
||||
if (ec_sdo_request_alloc(&fsm->request, 2)) {
|
||||
fsm->state = ec_fsm_pdo_assign_state_error;
|
||||
return;
|
||||
|
|
@ -222,8 +216,9 @@ void ec_fsm_pdo_assign_next_sync(
|
|||
fsm->request.data_size = 1;
|
||||
ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index, 0);
|
||||
ecrt_sdo_request_write(&fsm->request);
|
||||
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("Setting Pdo count to zero for SM%u.\n", fsm->sync_index);
|
||||
EC_DBG("Setting Pdo count to zero.\n");
|
||||
|
||||
fsm->state = ec_fsm_pdo_assign_state_zero_count;
|
||||
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
|
||||
|
|
@ -232,8 +227,7 @@ void ec_fsm_pdo_assign_next_sync(
|
|||
}
|
||||
|
||||
if (fsm->slave->master->debug_level && !fsm->num_configured_syncs)
|
||||
EC_DBG("Pdo assignments of slave %u are already configured"
|
||||
" correctly.\n", fsm->slave->ring_position);
|
||||
EC_DBG("Pdo assignments are already configured correctly.\n");
|
||||
fsm->state = ec_fsm_pdo_assign_state_end;
|
||||
}
|
||||
|
||||
|
|
@ -265,6 +259,7 @@ void ec_fsm_pdo_assign_add_pdo(
|
|||
ec_sdo_request_address(&fsm->request,
|
||||
0x1C10 + fsm->sync_index, fsm->pdo_count);
|
||||
ecrt_sdo_request_write(&fsm->request);
|
||||
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("Assigning Pdo 0x%04X at position %u.\n",
|
||||
fsm->pdo->index, fsm->pdo_count);
|
||||
|
|
@ -285,8 +280,7 @@ void ec_fsm_pdo_assign_state_zero_count(
|
|||
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
|
||||
|
||||
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
|
||||
EC_ERR("Failed to clear Pdo assignment of slave %u.\n",
|
||||
fsm->slave->ring_position);
|
||||
EC_WARN("Failed to clear Pdo assignment of SM%u.\n", fsm->sync_index);
|
||||
fsm->state = ec_fsm_pdo_assign_state_error;
|
||||
return;
|
||||
}
|
||||
|
|
@ -296,8 +290,7 @@ void ec_fsm_pdo_assign_state_zero_count(
|
|||
// find first Pdo
|
||||
if (!(fsm->pdo = ec_fsm_pdo_assign_next_pdo(fsm, &fsm->pdos->list))) {
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("No Pdos to assign for SM%u of slave %u.\n",
|
||||
fsm->sync_index, fsm->slave->ring_position);
|
||||
EC_DBG("No Pdos to assign.\n");
|
||||
ec_fsm_pdo_assign_next_sync(fsm);
|
||||
return;
|
||||
}
|
||||
|
|
@ -318,8 +311,8 @@ void ec_fsm_pdo_assign_state_add_pdo(
|
|||
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
|
||||
|
||||
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
|
||||
EC_ERR("Failed to map Pdo 0x%04X for SM%u of slave %u.\n",
|
||||
fsm->pdo->index, fsm->sync_index, fsm->slave->ring_position);
|
||||
EC_WARN("Failed to assign Pdo 0x%04X to position %u in SM%u.\n",
|
||||
fsm->pdo->index, fsm->pdo_count, fsm->sync_index);
|
||||
fsm->state = ec_fsm_pdo_assign_state_error;
|
||||
return;
|
||||
}
|
||||
|
|
@ -331,6 +324,7 @@ void ec_fsm_pdo_assign_state_add_pdo(
|
|||
fsm->request.data_size = 1;
|
||||
ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index, 0);
|
||||
ecrt_sdo_request_write(&fsm->request);
|
||||
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("Setting number of assigned Pdos to %u.\n",
|
||||
fsm->pdo_count);
|
||||
|
|
@ -357,15 +351,14 @@ void ec_fsm_pdo_assign_state_pdo_count(
|
|||
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
|
||||
|
||||
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
|
||||
EC_ERR("Failed to set number of assigned Pdos for slave %u.\n",
|
||||
fsm->slave->ring_position);
|
||||
EC_WARN("Failed to set number of assigned Pdos for SM%u.\n",
|
||||
fsm->sync_index);
|
||||
fsm->state = ec_fsm_pdo_assign_state_error;
|
||||
return;
|
||||
}
|
||||
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("Successfully configured Pdo assignment for SM%u of"
|
||||
" slave %u.\n", fsm->sync_index, fsm->slave->ring_position);
|
||||
EC_DBG("Pdo assignment successful for SM%u.\n", fsm->sync_index);
|
||||
|
||||
// assignment for this sync manager finished
|
||||
ec_fsm_pdo_assign_next_sync(fsm);
|
||||
|
|
|
|||
|
|
@ -186,8 +186,7 @@ void ec_fsm_pdo_mapping_next_pdo(
|
|||
|
||||
if (!fsm->pdo) {
|
||||
if (fsm->slave->master->debug_level && !fsm->num_configured_pdos)
|
||||
EC_DBG("Pdo mappings of slave %u are already configured"
|
||||
" correctly.\n", fsm->slave->ring_position);
|
||||
EC_DBG("Pdo mappings are already configured correctly.\n");
|
||||
fsm->state = ec_fsm_pdo_mapping_state_end;
|
||||
return;
|
||||
}
|
||||
|
|
@ -196,15 +195,14 @@ void ec_fsm_pdo_mapping_next_pdo(
|
|||
if (!(fsm->slave->sii.mailbox_protocols & EC_MBOX_COE)
|
||||
|| (fsm->slave->sii.has_general
|
||||
&& !fsm->slave->sii.coe_details.enable_pdo_configuration)) {
|
||||
EC_ERR("Slave %u does not support changing the Pdo mapping!\n",
|
||||
EC_WARN("Slave %u does not support Pdo mapping configuration!\n",
|
||||
fsm->slave->ring_position);
|
||||
fsm->state = ec_fsm_pdo_mapping_state_error;
|
||||
return;
|
||||
}
|
||||
|
||||
if (fsm->slave->master->debug_level) {
|
||||
EC_DBG("Changing mapping of Pdo 0x%04X of slave %u.\n",
|
||||
fsm->pdo->index, fsm->slave->ring_position);
|
||||
EC_DBG("Changing mapping of Pdo 0x%04X.\n", fsm->pdo->index);
|
||||
}
|
||||
|
||||
if (ec_sdo_request_alloc(&fsm->request, 4)) {
|
||||
|
|
@ -218,8 +216,7 @@ void ec_fsm_pdo_mapping_next_pdo(
|
|||
ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0);
|
||||
ecrt_sdo_request_write(&fsm->request);
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("Setting entry count to zero for Pdo 0x%04X.\n",
|
||||
fsm->pdo->index);
|
||||
EC_DBG("Setting entry count to zero.\n");
|
||||
|
||||
fsm->state = ec_fsm_pdo_mapping_state_zero_count;
|
||||
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
|
||||
|
|
@ -279,8 +276,7 @@ void ec_fsm_pdo_mapping_state_zero_count(
|
|||
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
|
||||
|
||||
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
|
||||
EC_ERR("Failed to clear Pdo mapping for slave %u.\n",
|
||||
fsm->slave->ring_position);
|
||||
EC_WARN("Failed to clear mapping of Pdo 0x%04X.\n", fsm->pdo->index);
|
||||
fsm->state = ec_fsm_pdo_mapping_state_error;
|
||||
return;
|
||||
}
|
||||
|
|
@ -289,8 +285,7 @@ void ec_fsm_pdo_mapping_state_zero_count(
|
|||
if (!(fsm->entry =
|
||||
ec_fsm_pdo_mapping_next_entry(fsm, &fsm->pdo->entries))) {
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("No entries to map for Pdo 0x%04X of slave %u.\n",
|
||||
fsm->pdo->index, fsm->slave->ring_position);
|
||||
EC_DBG("No entries to map.\n");
|
||||
ec_fsm_pdo_mapping_next_pdo(fsm);
|
||||
return;
|
||||
}
|
||||
|
|
@ -311,9 +306,9 @@ void ec_fsm_pdo_mapping_state_add_entry(
|
|||
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
|
||||
|
||||
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
|
||||
EC_ERR("Failed to add entry 0x%04X:%02X for slave %u.\n",
|
||||
fsm->entry->index, fsm->entry->subindex,
|
||||
fsm->slave->ring_position);
|
||||
EC_WARN("Failed to map Pdo entry 0x%04X:%02X at 0x%04X:%02X.\n",
|
||||
fsm->entry->index, fsm->entry->subindex, fsm->pdo->index,
|
||||
fsm->entry_count);
|
||||
fsm->state = ec_fsm_pdo_mapping_state_error;
|
||||
return;
|
||||
}
|
||||
|
|
@ -325,9 +320,9 @@ void ec_fsm_pdo_mapping_state_add_entry(
|
|||
fsm->request.data_size = 1;
|
||||
ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0);
|
||||
ecrt_sdo_request_write(&fsm->request);
|
||||
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("Setting number of Pdo entries to %u.\n",
|
||||
fsm->entry_count);
|
||||
EC_DBG("Setting number of Pdo entries to %u.\n", fsm->entry_count);
|
||||
|
||||
fsm->state = ec_fsm_pdo_mapping_state_entry_count;
|
||||
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
|
||||
|
|
@ -351,15 +346,14 @@ void ec_fsm_pdo_mapping_state_entry_count(
|
|||
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
|
||||
|
||||
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
|
||||
EC_ERR("Failed to set number of entries for slave %u.\n",
|
||||
fsm->slave->ring_position);
|
||||
EC_WARN("Failed to set number of entries for Pdo 0x%04X.\n",
|
||||
fsm->pdo->index);
|
||||
fsm->state = ec_fsm_pdo_mapping_state_error;
|
||||
return;
|
||||
}
|
||||
|
||||
if (fsm->slave->master->debug_level)
|
||||
EC_DBG("Successfully configured mapping for Pdo 0x%04X on slave %u.\n",
|
||||
fsm->pdo->index, fsm->slave->ring_position);
|
||||
EC_DBG("Pdo mapping configuration successful.\n");
|
||||
|
||||
ec_fsm_pdo_mapping_next_pdo(fsm);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -588,14 +588,11 @@ void ec_fsm_slave_config_state_pdo_mapping(
|
|||
if (ec_fsm_pdo_mapping_exec(&fsm->fsm_pdo_mapping)) return;
|
||||
|
||||
if (!ec_fsm_pdo_mapping_success(&fsm->fsm_pdo_mapping)) {
|
||||
EC_ERR("Configuration of Pdo mapping failed for slave %u.\n",
|
||||
EC_WARN("Configuration of Pdo mappings failed on slave %u.\n",
|
||||
fsm->slave->ring_position);
|
||||
fsm->slave->error_flag = 1;
|
||||
fsm->state = ec_fsm_slave_config_state_error;
|
||||
return;
|
||||
}
|
||||
|
||||
// start applying alternate Pdo assignments
|
||||
// start applying Pdo assignments
|
||||
ec_fsm_pdo_assign_start(&fsm->fsm_pdo_assign, fsm->slave);
|
||||
fsm->state = ec_fsm_slave_config_state_pdo_assign;
|
||||
fsm->state(fsm); // execute immediately
|
||||
|
|
@ -612,11 +609,8 @@ void ec_fsm_slave_config_state_pdo_assign(
|
|||
if (ec_fsm_pdo_assign_exec(&fsm->fsm_pdo_assign)) return;
|
||||
|
||||
if (!ec_fsm_pdo_assign_success(&fsm->fsm_pdo_assign)) {
|
||||
EC_ERR("Pdo assignment failed for slave %u.\n",
|
||||
EC_WARN("Configuration of Pdo assignments failed on slave %u.\n",
|
||||
fsm->slave->ring_position);
|
||||
fsm->slave->error_flag = 1;
|
||||
fsm->state = ec_fsm_slave_config_state_error;
|
||||
return;
|
||||
}
|
||||
|
||||
ec_fsm_slave_config_enter_fmmu(fsm);
|
||||
|
|
|
|||
Loading…
Reference in New Issue