All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/5] dp83640: Increase support perout pins
@ 2014-06-27 10:05 Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 1/5] dp83640: Program pulsewidth2 values of perout triggers 0 and 1 Stefan Sørensen
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Stefan Sørensen @ 2014-06-27 10:05 UTC (permalink / raw)
  To: davem, richardcochran; +Cc: netdev, Stefan Sørensen

This patch series increases the number of periodic output pins supported
on the dp83640 to 7, and allows for reprogramming the calibration pin.

Changes since v1:
  Add dp83640 calibration pin constraints
  Fix codingstyle

Stefan Sørensen (5):
  dp83640: Program pulsewidth2 values of perout triggers 0 and 1
  dp83640: Increase supported perout pins to 7
  dp83640: Verify calibration pin assignment
  dp83640: Get calibration pin with ptp_find_pin
  ptp: Allow reassigning calibration pin function

 drivers/net/phy/dp83640.c | 39 +++++++++++++++++++++++++++++----------
 drivers/ptp/ptp_chardev.c |  9 ++-------
 2 files changed, 31 insertions(+), 17 deletions(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH net-next v2 1/5] dp83640: Program pulsewidth2 values of perout triggers 0 and 1
  2014-06-27 10:05 [PATCH net-next v2 0/5] dp83640: Increase support perout pins Stefan Sørensen
@ 2014-06-27 10:05 ` Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 2/5] dp83640: Increase supported perout pins to 7 Stefan Sørensen
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Stefan Sørensen @ 2014-06-27 10:05 UTC (permalink / raw)
  To: davem, richardcochran; +Cc: netdev, Stefan Sørensen

Periodic output triggers 0 and 1 of the dp83640 has a programmable
duty-cycle which is controlled by the Pulsewidth2 field of the trigger
data register.  This field is not documented in the datasheet, but it
is described in the "PHYTER Software Development Guide" section
3.1.4.1. Failing to set the field can result in unstable/no trigger
output.

Add programming of the Pulsewidth2 field, setting it to the same value
as the Pulsewidth field for a 50% duty cycle.

Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
---
 drivers/net/phy/dp83640.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index 6a999e6..fcd50b77 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -353,6 +353,11 @@ static int periodic_output(struct dp83640_clock *clock,
 	ext_write(0, phydev, PAGE4, PTP_TDR, sec >> 16);       /* sec[31:16] */
 	ext_write(0, phydev, PAGE4, PTP_TDR, pwidth & 0xffff); /* ns[15:0] */
 	ext_write(0, phydev, PAGE4, PTP_TDR, pwidth >> 16);    /* ns[31:16] */
+	/* Triggers 0 and 1 has programmable pulsewidth2 */
+	if (trigger < 2) {
+		ext_write(0, phydev, PAGE4, PTP_TDR, pwidth & 0xffff);
+		ext_write(0, phydev, PAGE4, PTP_TDR, pwidth >> 16);
+	}
 
 	/*enable trigger*/
 	val &= ~TRIG_LOAD;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next v2 2/5] dp83640: Increase supported perout pins to 7
  2014-06-27 10:05 [PATCH net-next v2 0/5] dp83640: Increase support perout pins Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 1/5] dp83640: Program pulsewidth2 values of perout triggers 0 and 1 Stefan Sørensen
@ 2014-06-27 10:05 ` Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 3/5] dp83640: Verify calibration pin assignment Stefan Sørensen
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Stefan Sørensen @ 2014-06-27 10:05 UTC (permalink / raw)
  To: davem, richardcochran; +Cc: netdev, Stefan Sørensen

This patch increases the number of supported periodic output pins from
1 to 7. The last pin is reserved for sync.

Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
---
 drivers/net/phy/dp83640.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index fcd50b77..eabecff 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -40,6 +40,7 @@
 #define LAYER2		0x01
 #define MAX_RXTS	64
 #define N_EXT_TS	6
+#define N_PER_OUT	7
 #define PSF_PTPVER	2
 #define PSF_EVNT	0x4000
 #define PSF_RX		0x2000
@@ -47,7 +48,6 @@
 #define EXT_EVENT	1
 #define CAL_EVENT	7
 #define CAL_TRIGGER	7
-#define PER_TRIGGER	6
 #define DP83640_N_PINS	12
 
 #define MII_DP83640_MICR 0x11
@@ -300,23 +300,23 @@ static u64 phy2txts(struct phy_txts *p)
 }
 
 static int periodic_output(struct dp83640_clock *clock,
-			   struct ptp_clock_request *clkreq, bool on)
+			   struct ptp_clock_request *clkreq, bool on,
+			   int trigger)
 {
 	struct dp83640_private *dp83640 = clock->chosen;
 	struct phy_device *phydev = dp83640->phydev;
 	u32 sec, nsec, pwidth;
-	u16 gpio, ptp_trig, trigger, val;
+	u16 gpio, ptp_trig, val;
 
 	if (on) {
-		gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PEROUT, 0);
+		gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PEROUT,
+					trigger);
 		if (gpio < 1)
 			return -EINVAL;
 	} else {
 		gpio = 0;
 	}
 
-	trigger = PER_TRIGGER;
-
 	ptp_trig = TRIG_WR |
 		(trigger & TRIG_CSEL_MASK) << TRIG_CSEL_SHIFT |
 		(gpio & TRIG_GPIO_MASK) << TRIG_GPIO_SHIFT |
@@ -496,9 +496,9 @@ static int ptp_dp83640_enable(struct ptp_clock_info *ptp,
 		return 0;
 
 	case PTP_CLK_REQ_PEROUT:
-		if (rq->perout.index != 0)
+		if (rq->perout.index >= N_PER_OUT)
 			return -EINVAL;
-		return periodic_output(clock, rq, on);
+		return periodic_output(clock, rq, on, rq->perout.index);
 
 	default:
 		break;
@@ -949,7 +949,7 @@ static void dp83640_clock_init(struct dp83640_clock *clock, struct mii_bus *bus)
 	clock->caps.max_adj	= 1953124;
 	clock->caps.n_alarm	= 0;
 	clock->caps.n_ext_ts	= N_EXT_TS;
-	clock->caps.n_per_out	= 1;
+	clock->caps.n_per_out	= N_PER_OUT;
 	clock->caps.n_pins	= DP83640_N_PINS;
 	clock->caps.pps		= 0;
 	clock->caps.adjfreq	= ptp_dp83640_adjfreq;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next v2 3/5] dp83640: Verify calibration pin assignment
  2014-06-27 10:05 [PATCH net-next v2 0/5] dp83640: Increase support perout pins Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 1/5] dp83640: Program pulsewidth2 values of perout triggers 0 and 1 Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 2/5] dp83640: Increase supported perout pins to 7 Stefan Sørensen
@ 2014-06-27 10:05 ` Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 4/5] dp83640: Get calibration pin with ptp_find_pin Stefan Sørensen
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Stefan Sørensen @ 2014-06-27 10:05 UTC (permalink / raw)
  To: davem, richardcochran; +Cc: netdev, Stefan Sørensen

This constraints the pin assignment to not allow the calibration function to
be reassigned and only allow reassigning the calibratin pin if only one phy is
connected.

Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
---
 drivers/net/phy/dp83640.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index eabecff..ab48112 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -510,6 +510,16 @@ static int ptp_dp83640_enable(struct ptp_clock_info *ptp,
 static int ptp_dp83640_verify(struct ptp_clock_info *ptp, unsigned int pin,
 			      enum ptp_pin_function func, unsigned int chan)
 {
+	struct dp83640_clock *clock =
+		container_of(ptp, struct dp83640_clock, caps);
+
+	if (clock->caps.pin_config[pin].func == PTP_PF_PHYSYNC &&
+	    !list_empty(&clock->phylist))
+		return 1;
+
+	if (func == PTP_PF_PHYSYNC)
+		return 1;
+
 	return 0;
 }
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next v2 4/5] dp83640: Get calibration pin with ptp_find_pin
  2014-06-27 10:05 [PATCH net-next v2 0/5] dp83640: Increase support perout pins Stefan Sørensen
                   ` (2 preceding siblings ...)
  2014-06-27 10:05 ` [PATCH net-next v2 3/5] dp83640: Verify calibration pin assignment Stefan Sørensen
@ 2014-06-27 10:05 ` Stefan Sørensen
  2014-06-27 10:05 ` [PATCH net-next v2 5/5] ptp: Allow reassigning calibration pin function Stefan Sørensen
  2014-07-02  1:53 ` [PATCH net-next v2 0/5] dp83640: Increase support perout pins David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: Stefan Sørensen @ 2014-06-27 10:05 UTC (permalink / raw)
  To: davem, richardcochran; +Cc: netdev, Stefan Sørensen

For consistency, use the ptp_find_pin function to get the calibration pin,
not gpio_tab.

Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
---
 drivers/net/phy/dp83640.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index ab48112..293ad06 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -609,7 +609,11 @@ static void recalibrate(struct dp83640_clock *clock)
 	u16 cal_gpio, cfg0, evnt, ptp_trig, trigger, val;
 
 	trigger = CAL_TRIGGER;
-	cal_gpio = gpio_tab[CALIBRATE_GPIO];
+	cal_gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PHYSYNC, 0);
+	if (cal_gpio < 1) {
+		pr_err("PHY calibration pin not avaible - PHY is not calibrated.");
+		return;
+	}
 
 	mutex_lock(&clock->extreg_lock);
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next v2 5/5] ptp: Allow reassigning calibration pin function
  2014-06-27 10:05 [PATCH net-next v2 0/5] dp83640: Increase support perout pins Stefan Sørensen
                   ` (3 preceding siblings ...)
  2014-06-27 10:05 ` [PATCH net-next v2 4/5] dp83640: Get calibration pin with ptp_find_pin Stefan Sørensen
@ 2014-06-27 10:05 ` Stefan Sørensen
  2014-07-02  1:53 ` [PATCH net-next v2 0/5] dp83640: Increase support perout pins David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: Stefan Sørensen @ 2014-06-27 10:05 UTC (permalink / raw)
  To: davem, richardcochran; +Cc: netdev, Stefan Sørensen

The ptp pin function programming does not allow calibration pin to change
function. This is problematic on hardware that uses the default calibration
pin for other purposes.

Removing this limitation does not impact calibration if userspace does not
reprogram the calibration pin.

Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
---
 drivers/ptp/ptp_chardev.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c
index 419056d..f8a7609 100644
--- a/drivers/ptp/ptp_chardev.c
+++ b/drivers/ptp/ptp_chardev.c
@@ -86,17 +86,12 @@ int ptp_set_pinfunc(struct ptp_clock *ptp, unsigned int pin,
 			return -EINVAL;
 		break;
 	case PTP_PF_PHYSYNC:
-		pr_err("sorry, cannot reassign the calibration pin\n");
-		return -EINVAL;
+		if (chan != 0)
+			return -EINVAL;
 	default:
 		return -EINVAL;
 	}
 
-	if (pin2->func == PTP_PF_PHYSYNC) {
-		pr_err("sorry, cannot reprogram the calibration pin\n");
-		return -EINVAL;
-	}
-
 	if (info->verify(info, pin, func, chan)) {
 		pr_err("driver cannot use function %u on pin %u\n", func, chan);
 		return -EOPNOTSUPP;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next v2 0/5] dp83640: Increase support perout pins
  2014-06-27 10:05 [PATCH net-next v2 0/5] dp83640: Increase support perout pins Stefan Sørensen
                   ` (4 preceding siblings ...)
  2014-06-27 10:05 ` [PATCH net-next v2 5/5] ptp: Allow reassigning calibration pin function Stefan Sørensen
@ 2014-07-02  1:53 ` David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2014-07-02  1:53 UTC (permalink / raw)
  To: stefan.sorensen; +Cc: richardcochran, netdev

From: Stefan Sørensen <stefan.sorensen@spectralink.com>
Date: Fri, 27 Jun 2014 12:05:28 +0200

> This patch series increases the number of periodic output pins supported
> on the dp83640 to 7, and allows for reprogramming the calibration pin.
> 
> Changes since v1:
>   Add dp83640 calibration pin constraints
>   Fix codingstyle

Series applied, thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-07-02  1:53 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-27 10:05 [PATCH net-next v2 0/5] dp83640: Increase support perout pins Stefan Sørensen
2014-06-27 10:05 ` [PATCH net-next v2 1/5] dp83640: Program pulsewidth2 values of perout triggers 0 and 1 Stefan Sørensen
2014-06-27 10:05 ` [PATCH net-next v2 2/5] dp83640: Increase supported perout pins to 7 Stefan Sørensen
2014-06-27 10:05 ` [PATCH net-next v2 3/5] dp83640: Verify calibration pin assignment Stefan Sørensen
2014-06-27 10:05 ` [PATCH net-next v2 4/5] dp83640: Get calibration pin with ptp_find_pin Stefan Sørensen
2014-06-27 10:05 ` [PATCH net-next v2 5/5] ptp: Allow reassigning calibration pin function Stefan Sørensen
2014-07-02  1:53 ` [PATCH net-next v2 0/5] dp83640: Increase support perout pins David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.