Commit e58f6f4f authored by Aida Mynzhasova's avatar Aida Mynzhasova Committed by David S. Miller

powerpc/83xx: gianfar_ptp: select 1588 clock source through dts file

Currently IEEE 1588 timer reference clock source is determined through
hard-coded value in gianfar_ptp driver. This patch allows to select ptp
clock source by means of device tree file node.

For instance:

	fsl,cksel = <0>;

for using external (TSEC_TMR_CLK input) high precision timer
reference clock.

Other acceptable values:

	<1> : eTSEC system clock
	<2> : eTSEC1 transmit clock
	<3> : RTC clock input

When this attribute isn't used, eTSEC system clock will serve as
IEEE 1588 timer reference clock.
Signed-off-by: default avatarAida Mynzhasova <aida.mynzhasova@skitlab.ru>
Acked-by: default avatarKumar Gala <galak@codeaurora.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3f3f0960
...@@ -86,6 +86,7 @@ General Properties: ...@@ -86,6 +86,7 @@ General Properties:
Clock Properties: Clock Properties:
- fsl,cksel Timer reference clock source.
- fsl,tclk-period Timer reference clock period in nanoseconds. - fsl,tclk-period Timer reference clock period in nanoseconds.
- fsl,tmr-prsc Prescaler, divides the output clock. - fsl,tmr-prsc Prescaler, divides the output clock.
- fsl,tmr-add Frequency compensation value. - fsl,tmr-add Frequency compensation value.
...@@ -97,7 +98,7 @@ Clock Properties: ...@@ -97,7 +98,7 @@ Clock Properties:
clock. You must choose these carefully for the clock to work right. clock. You must choose these carefully for the clock to work right.
Here is how to figure good values: Here is how to figure good values:
TimerOsc = system clock MHz TimerOsc = selected reference clock MHz
tclk_period = desired clock period nanoseconds tclk_period = desired clock period nanoseconds
NominalFreq = 1000 / tclk_period MHz NominalFreq = 1000 / tclk_period MHz
FreqDivRatio = TimerOsc / NominalFreq (must be greater that 1.0) FreqDivRatio = TimerOsc / NominalFreq (must be greater that 1.0)
...@@ -114,6 +115,20 @@ Clock Properties: ...@@ -114,6 +115,20 @@ Clock Properties:
Pulse Per Second (PPS) signal, since this will be offered to the PPS Pulse Per Second (PPS) signal, since this will be offered to the PPS
subsystem to synchronize the Linux clock. subsystem to synchronize the Linux clock.
Reference clock source is determined by the value, which is holded
in CKSEL bits in TMR_CTRL register. "fsl,cksel" property keeps the
value, which will be directly written in those bits, that is why,
according to reference manual, the next clock sources can be used:
<0> - external high precision timer reference clock (TSEC_TMR_CLK
input is used for this purpose);
<1> - eTSEC system clock;
<2> - eTSEC1 transmit clock;
<3> - RTC clock input.
When this attribute is not used, eTSEC system clock will serve as
IEEE 1588 timer reference clock.
Example: Example:
ptp_clock@24E00 { ptp_clock@24E00 {
...@@ -121,6 +136,7 @@ Example: ...@@ -121,6 +136,7 @@ Example:
reg = <0x24E00 0xB0>; reg = <0x24E00 0xB0>;
interrupts = <12 0x8 13 0x8>; interrupts = <12 0x8 13 0x8>;
interrupt-parent = < &ipic >; interrupt-parent = < &ipic >;
fsl,cksel = <1>;
fsl,tclk-period = <10>; fsl,tclk-period = <10>;
fsl,tmr-prsc = <100>; fsl,tmr-prsc = <100>;
fsl,tmr-add = <0x999999A4>; fsl,tmr-add = <0x999999A4>;
......
...@@ -452,7 +452,9 @@ static int gianfar_ptp_probe(struct platform_device *dev) ...@@ -452,7 +452,9 @@ static int gianfar_ptp_probe(struct platform_device *dev)
err = -ENODEV; err = -ENODEV;
etsects->caps = ptp_gianfar_caps; etsects->caps = ptp_gianfar_caps;
etsects->cksel = DEFAULT_CKSEL;
if (get_of_u32(node, "fsl,cksel", &etsects->cksel))
etsects->cksel = DEFAULT_CKSEL;
if (get_of_u32(node, "fsl,tclk-period", &etsects->tclk_period) || if (get_of_u32(node, "fsl,tclk-period", &etsects->tclk_period) ||
get_of_u32(node, "fsl,tmr-prsc", &etsects->tmr_prsc) || get_of_u32(node, "fsl,tmr-prsc", &etsects->tmr_prsc) ||
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment