1.1 --- a/pkg/devices/lib/cpm/src/common.cc Thu Dec 14 22:49:02 2023 +0100
1.2 +++ b/pkg/devices/lib/cpm/src/common.cc Fri Dec 15 18:10:13 2023 +0100
1.3 @@ -63,7 +63,7 @@
1.4 Field::get_field(Cpm_regs ®s)
1.5 {
1.6 if (defined)
1.7 - return regs.get_field(reg, mask, bit);
1.8 + return regs.get_field(reg, mask, bit) + adjustment;
1.9 else
1.10 return 0;
1.11 }
1.12 @@ -72,7 +72,7 @@
1.13 Field::set_field(Cpm_regs ®s, uint32_t value)
1.14 {
1.15 if (defined)
1.16 - regs.set_field(reg, mask, bit, value);
1.17 + regs.set_field(reg, mask, bit, value >= adjustment ? value - adjustment : 0);
1.18 }
1.19
1.20 // Undefined field.
1.21 @@ -451,19 +451,13 @@
1.22 uint32_t
1.23 Divider_pll::get_multiplier(Cpm_regs ®s)
1.24 {
1.25 - if (_adjust_by_one)
1.26 - return _multiplier.get_field(regs) + 1;
1.27 - else
1.28 - return zero_as_one(_multiplier.get_field(regs));
1.29 + return zero_as_one(_multiplier.get_field(regs));
1.30 }
1.31
1.32 void
1.33 Divider_pll::set_multiplier(Cpm_regs ®s, uint32_t multiplier)
1.34 {
1.35 - if (_adjust_by_one)
1.36 - _multiplier.set_field(regs, multiplier - 1);
1.37 - else
1.38 - _multiplier.set_field(regs, multiplier);
1.39 + _multiplier.set_field(regs, multiplier);
1.40 }
1.41
1.42 // Input divider.
1.43 @@ -471,19 +465,13 @@
1.44 uint32_t
1.45 Divider_pll::get_input_divider(Cpm_regs ®s)
1.46 {
1.47 - if (_adjust_by_one)
1.48 - return _input_divider.get_field(regs) + 1;
1.49 - else
1.50 - return zero_as_one(_input_divider.get_field(regs));
1.51 + return zero_as_one(_input_divider.get_field(regs));
1.52 }
1.53
1.54 void
1.55 Divider_pll::set_input_divider(Cpm_regs ®s, uint32_t divider)
1.56 {
1.57 - if (_adjust_by_one)
1.58 - _input_divider.set_field(regs, divider - 1);
1.59 - else
1.60 - _input_divider.set_field(regs, divider);
1.61 + _input_divider.set_field(regs, divider);
1.62 }
1.63
1.64 // Output dividers.
1.65 @@ -493,18 +481,9 @@
1.66 {
1.67 uint32_t d0, d1;
1.68
1.69 - if (_adjust_by_one)
1.70 - {
1.71 - d0 = _output_divider0.get_field(regs) + 1;
1.72 - d1 = _output_divider1.is_defined() ?
1.73 - _output_divider1.get_field(regs) + 1 : 1;
1.74 - }
1.75 - else
1.76 - {
1.77 - d0 = zero_as_one(_output_divider0.get_field(regs));
1.78 - d1 = _output_divider1.is_defined() ?
1.79 - zero_as_one(_output_divider1.get_field(regs)) : 1;
1.80 - }
1.81 + d0 = zero_as_one(_output_divider0.get_field(regs));
1.82 + d1 = _output_divider1.is_defined() ?
1.83 + zero_as_one(_output_divider1.get_field(regs)) : 1;
1.84
1.85 return d0 * d1;
1.86 }
1.87 @@ -523,10 +502,7 @@
1.88
1.89 if (!_output_divider1.is_defined())
1.90 {
1.91 - if (_adjust_by_one)
1.92 - _output_divider0.set_field(regs, divider);
1.93 - else
1.94 - _output_divider0.set_field(regs, divider - 1);
1.95 + _output_divider0.set_field(regs, divider);
1.96 return;
1.97 }
1.98
1.99 @@ -544,16 +520,8 @@
1.100 d1 = divider / d0;
1.101 }
1.102
1.103 - if (_adjust_by_one)
1.104 - {
1.105 - _output_divider0.set_field(regs, d0 - 1);
1.106 - _output_divider1.set_field(regs, d1 - 1);
1.107 - }
1.108 - else
1.109 - {
1.110 - _output_divider0.set_field(regs, d0);
1.111 - _output_divider1.set_field(regs, d1);
1.112 - }
1.113 + _output_divider0.set_field(regs, d0);
1.114 + _output_divider1.set_field(regs, d1);
1.115 }
1.116
1.117 uint64_t