mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-08-17 16:51:44 +08:00
Update DC reference clock also immediately after selection.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
filter=-build/include_subdir
|
||||
filter=-build/include_what_you_use
|
||||
filter=-readability/braces
|
||||
filter=-readability/multiline_comment
|
||||
filter=-runtime/int
|
||||
filter=-whitespace/braces
|
||||
filter=-whitespace/comments
|
||||
|
||||
+4
-7
@@ -200,7 +200,6 @@ int shall_count(
|
||||
for (; first_fmmu != cur_fmmu;
|
||||
first_fmmu = list_entry(first_fmmu->list.next,
|
||||
ec_fmmu_config_t, list)) {
|
||||
|
||||
if (first_fmmu->sc == cur_fmmu->sc
|
||||
&& first_fmmu->dir == cur_fmmu->dir) {
|
||||
return 0; // was already counted
|
||||
@@ -264,7 +263,6 @@ int ec_domain_finish(
|
||||
}
|
||||
|
||||
list_for_each_entry(fmmu, &domain->fmmu_configs, list) {
|
||||
|
||||
// Correct logical FMMU address
|
||||
fmmu->logical_start_address += base_address;
|
||||
|
||||
@@ -401,8 +399,8 @@ int ecrt_domain_reg_pdo_entry_list(ec_domain_t *domain,
|
||||
ec_slave_config_t *sc;
|
||||
int ret;
|
||||
|
||||
EC_MASTER_DBG(domain->master, 1, "ecrt_domain_reg_pdo_entry_list("
|
||||
"domain = 0x%p, regs = 0x%p)\n", domain, regs);
|
||||
EC_MASTER_DBG(domain->master, 1, "%s(domain = 0x%p, regs = 0x%p)\n",
|
||||
__func__, domain, regs);
|
||||
|
||||
for (reg = regs; reg->index; reg++) {
|
||||
sc = ecrt_master_slave_config_err(domain->master, reg->alias,
|
||||
@@ -432,8 +430,8 @@ size_t ecrt_domain_size(const ec_domain_t *domain)
|
||||
|
||||
void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *mem)
|
||||
{
|
||||
EC_MASTER_DBG(domain->master, 1, "ecrt_domain_external_memory("
|
||||
"domain = 0x%p, mem = 0x%p)\n", domain, mem);
|
||||
EC_MASTER_DBG(domain->master, 1, "%s(domain = 0x%p, mem = 0x%p)\n",
|
||||
__func__, domain, mem);
|
||||
|
||||
down(&domain->master->master_sem);
|
||||
|
||||
@@ -651,7 +649,6 @@ int ecrt_domain_queue(ec_domain_t *domain)
|
||||
ec_device_index_t dev_idx;
|
||||
|
||||
list_for_each_entry(datagram_pair, &domain->datagram_pairs, list) {
|
||||
|
||||
#if EC_MAX_NUM_DEVICES > 1
|
||||
/* copy main data to send buffer */
|
||||
memcpy(datagram_pair->send_buffer,
|
||||
|
||||
+14
-18
@@ -2271,8 +2271,7 @@ ec_domain_t *ecrt_master_create_domain_err(
|
||||
ec_domain_t *domain, *last_domain;
|
||||
unsigned int index;
|
||||
|
||||
EC_MASTER_DBG(master, 1, "ecrt_master_create_domain(master = 0x%p)\n",
|
||||
master);
|
||||
EC_MASTER_DBG(master, 1, "%s(master = 0x%p)\n", __func__, master);
|
||||
|
||||
if (!(domain =
|
||||
(ec_domain_t *) kmalloc(sizeof(ec_domain_t), GFP_KERNEL))) {
|
||||
@@ -2320,7 +2319,7 @@ int ecrt_master_activate(ec_master_t *master)
|
||||
int eoe_was_running;
|
||||
#endif
|
||||
|
||||
EC_MASTER_DBG(master, 1, "ecrt_master_activate(master = 0x%p)\n", master);
|
||||
EC_MASTER_DBG(master, 1, "%s(master = 0x%p)\n", __func__, master);
|
||||
|
||||
if (master->active) {
|
||||
EC_MASTER_WARN(master, "%s: Master already active!\n", __func__);
|
||||
@@ -2584,7 +2583,6 @@ ec_slave_config_t *ecrt_master_slave_config_err(ec_master_t *master,
|
||||
ec_slave_config_t *sc;
|
||||
unsigned int found = 0;
|
||||
|
||||
|
||||
EC_MASTER_DBG(master, 1, "ecrt_master_slave_config(master = 0x%p,"
|
||||
" alias = %u, position = %u, vendor_id = 0x%08x,"
|
||||
" product_code = 0x%08x)\n",
|
||||
@@ -2649,18 +2647,16 @@ ec_slave_config_t *ecrt_master_slave_config(ec_master_t *master,
|
||||
int ecrt_master_select_reference_clock(ec_master_t *master,
|
||||
ec_slave_config_t *sc)
|
||||
{
|
||||
if (sc) {
|
||||
ec_slave_t *slave = sc->slave;
|
||||
EC_MASTER_DBG(master, 1, "%s(master = 0x%p, sc = 0x%p)\n",
|
||||
__func__, master, sc);
|
||||
|
||||
// output an early warning
|
||||
if (slave &&
|
||||
(!slave->base_dc_supported || !slave->has_dc_system_time)) {
|
||||
EC_MASTER_WARN(master, "Slave %u can not act as"
|
||||
" a reference clock!", slave->ring_position);
|
||||
}
|
||||
if (down_interruptible(&master->master_sem)) {
|
||||
return -EINTR;
|
||||
}
|
||||
|
||||
master->dc_ref_config = sc;
|
||||
ec_master_find_dc_ref_clock(master);
|
||||
up(&master->master_sem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2668,8 +2664,8 @@ int ecrt_master_select_reference_clock(ec_master_t *master,
|
||||
|
||||
int ecrt_master(ec_master_t *master, ec_master_info_t *master_info)
|
||||
{
|
||||
EC_MASTER_DBG(master, 1, "ecrt_master(master = 0x%p,"
|
||||
" master_info = 0x%p)\n", master, master_info);
|
||||
EC_MASTER_DBG(master, 1, "%s(master = 0x%p,"
|
||||
" master_info = 0x%p)\n", __func__, master, master_info);
|
||||
|
||||
master_info->slave_count = master->slave_count;
|
||||
master_info->link_up = master->devices[EC_DEVICE_MAIN].link_state;
|
||||
@@ -2683,8 +2679,8 @@ int ecrt_master(ec_master_t *master, ec_master_info_t *master_info)
|
||||
int ecrt_master_scan_progress(ec_master_t *master,
|
||||
ec_master_scan_progress_t *progress)
|
||||
{
|
||||
EC_MASTER_DBG(master, 1, "ecrt_master_scan_progress(master = 0x%p,"
|
||||
" progress = 0x%p)\n", master, progress);
|
||||
EC_MASTER_DBG(master, 1, "%s(master = 0x%p, progress = 0x%p)\n",
|
||||
__func__, master, progress);
|
||||
|
||||
progress->slave_count = master->slave_count;
|
||||
progress->scan_index = master->scan_index;
|
||||
@@ -2758,9 +2754,9 @@ out_get_slave:
|
||||
void ecrt_master_callbacks(ec_master_t *master,
|
||||
void (*send_cb)(void *), void (*receive_cb)(void *), void *cb_data)
|
||||
{
|
||||
EC_MASTER_DBG(master, 1, "ecrt_master_callbacks(master = 0x%p,"
|
||||
EC_MASTER_DBG(master, 1, "%s(master = 0x%p,"
|
||||
" send_cb = 0x%p, receive_cb = 0x%p, cb_data = 0x%p)\n",
|
||||
master, send_cb, receive_cb, cb_data);
|
||||
__func__, master, send_cb, receive_cb, cb_data);
|
||||
|
||||
master->app_send_cb = send_cb;
|
||||
master->app_receive_cb = receive_cb;
|
||||
|
||||
@@ -681,9 +681,9 @@ int ecrt_slave_config_sync_manager(ec_slave_config_t *sc, uint8_t sync_index,
|
||||
{
|
||||
ec_sync_config_t *sync_config;
|
||||
|
||||
EC_CONFIG_DBG(sc, 1, "ecrt_slave_config_sync_manager(sc = 0x%p,"
|
||||
" sync_index = %u, dir = %i, watchdog_mode = %i)\n",
|
||||
sc, sync_index, dir, watchdog_mode);
|
||||
EC_CONFIG_DBG(sc, 1, "%s(sc = 0x%p, sync_index = %u, dir = %i,"
|
||||
" watchdog_mode = %i)\n", __func__, sc, sync_index, dir,
|
||||
watchdog_mode);
|
||||
|
||||
if (sync_index >= EC_MAX_SYNC_MANAGERS) {
|
||||
EC_CONFIG_ERR(sc, "Invalid sync manager index %u!\n", sync_index);
|
||||
@@ -863,7 +863,6 @@ int ecrt_slave_config_pdos(ec_slave_config_t *sc,
|
||||
ecrt_slave_config_pdo_assign_clear(sc, sync_info->index);
|
||||
|
||||
if (sync_info->n_pdos && sync_info->pdos) {
|
||||
|
||||
for (j = 0; j < sync_info->n_pdos; j++) {
|
||||
pdo_info = &sync_info->pdos[j];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user