Update DC reference clock also immediately after selection.

This commit is contained in:
Florian Pose
2026-07-15 15:51:20 +02:00
parent 18876aa2bc
commit 094f52b6ff
4 changed files with 22 additions and 29 deletions
+1
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+3 -4
View File
@@ -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];