* [PATCH net-next v2 0/3] Add PEROUT library for RDS PTP supported phys
@ 2025-01-09 10:25 Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 1/3] net: phy: microchip_rds_ptp: Header file library changes for PEROUT Divya Koppera
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Divya Koppera @ 2025-01-09 10:25 UTC (permalink / raw)
To: andrew, arun.ramadoss, UNGLinuxDriver, hkallweit1, linux, davem,
edumazet, kuba, pabeni, netdev, linux-kernel, richardcochran,
vadim.fedorenko
Adds support for PEROUT library, where phys can generate
periodic output signal on supported pin out.
Divya Koppera (3):
net: phy: microchip_rds_ptp: Header file library changes for PEROUT
net: phy: microchip_t1: Enable pin out specific to lan887x phy for
PEROUT signal
net: phy: microchip_rds_ptp : Add PEROUT feature library for RDS PTP
supported phys
drivers/net/phy/microchip_rds_ptp.c | 294 ++++++++++++++++++++++++++++
drivers/net/phy/microchip_rds_ptp.h | 39 ++++
drivers/net/phy/microchip_t1.c | 12 ++
3 files changed, 345 insertions(+)
--
2.17.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next v2 1/3] net: phy: microchip_rds_ptp: Header file library changes for PEROUT
2025-01-09 10:25 [PATCH net-next v2 0/3] Add PEROUT library for RDS PTP supported phys Divya Koppera
@ 2025-01-09 10:25 ` Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 2/3] net: phy: microchip_t1: Enable pin out specific to lan887x phy for PEROUT signal Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 3/3] net: phy: microchip_rds_ptp : Add PEROUT feature library for RDS PTP supported phys Divya Koppera
2 siblings, 0 replies; 5+ messages in thread
From: Divya Koppera @ 2025-01-09 10:25 UTC (permalink / raw)
To: andrew, arun.ramadoss, UNGLinuxDriver, hkallweit1, linux, davem,
edumazet, kuba, pabeni, netdev, linux-kernel, richardcochran,
vadim.fedorenko
This ptp header file library changes will cover PEROUT
macros that are required to generate periodic output
from pin out
Signed-off-by: Divya Koppera <divya.koppera@microchip.com>
---
v1 -> v2
- Removed redundant Macros
- Given proper naming to event and pin
---
drivers/net/phy/microchip_rds_ptp.h | 39 +++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/drivers/net/phy/microchip_rds_ptp.h b/drivers/net/phy/microchip_rds_ptp.h
index e95c065728b5..2a3c566b028f 100644
--- a/drivers/net/phy/microchip_rds_ptp.h
+++ b/drivers/net/phy/microchip_rds_ptp.h
@@ -130,6 +130,38 @@
#define MCHP_RDS_PTP_TSU_HARD_RESET 0xc1
#define MCHP_RDS_PTP_TSU_HARDRESET BIT(0)
+#define MCHP_RDS_PTP_CLK_TRGT_SEC_HI 0x15
+#define MCHP_RDS_PTP_CLK_TRGT_SEC_LO 0x16
+#define MCHP_RDS_PTP_CLK_TRGT_NS_HI 0x17
+#define MCHP_RDS_PTP_CLK_TRGT_NS_LO 0x18
+
+#define MCHP_RDS_PTP_CLK_TRGT_RELOAD_SEC_HI 0x19
+#define MCHP_RDS_PTP_CLK_TRGT_RELOAD_SEC_LO 0x1a
+#define MCHP_RDS_PTP_CLK_TRGT_RELOAD_NS_HI 0x1b
+#define MCHP_RDS_PTP_CLK_TRGT_RELOAD_NS_LO 0x1c
+
+#define MCHP_RDS_PTP_GEN_CFG 0x01
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_MASK GENMASK(11, 8)
+
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_SET(value) (((value) & 0xF) << 4)
+#define MCHP_RDS_PTP_GEN_CFG_RELOAD_ADD BIT(0)
+#define MCHP_RDS_PTP_GEN_CFG_POLARITY BIT(1)
+
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_200MS_ 13
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100MS_ 12
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50MS_ 11
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10MS_ 10
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5MS_ 9
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1MS_ 8
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500US_ 7
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100US_ 6
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50US_ 5
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10US_ 4
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5US_ 3
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1US_ 2
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500NS_ 1
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100NS_ 0
+
/* Represents 1ppm adjustment in 2^32 format with
* each nsec contains 4 clock cycles in 250MHz.
* The value is calculated as following: (1/1000000)/((2^-32)/4)
@@ -138,6 +170,10 @@
#define MCHP_RDS_PTP_FIFO_SIZE 8
#define MCHP_RDS_PTP_MAX_ADJ 31249999
+#define MCHP_RDS_PTP_BUFFER_TIME 2
+#define MCHP_RDS_PTP_N_PIN 4
+#define MCHP_RDS_PTP_N_PEROUT 1
+
#define BASE_CLK(p) ((p)->clk_base_addr)
#define BASE_PORT(p) ((p)->port_base_addr)
#define PTP_MMD(p) ((p)->mmd)
@@ -176,6 +212,9 @@ struct mchp_rds_ptp_clock {
/* Lock for phc */
struct mutex ptp_lock;
u8 mmd;
+ int mchp_rds_ptp_event;
+ int event_pin;
+ struct ptp_pin_desc *pin_config;
};
struct mchp_rds_ptp_rx_ts {
--
2.17.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v2 2/3] net: phy: microchip_t1: Enable pin out specific to lan887x phy for PEROUT signal
2025-01-09 10:25 [PATCH net-next v2 0/3] Add PEROUT library for RDS PTP supported phys Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 1/3] net: phy: microchip_rds_ptp: Header file library changes for PEROUT Divya Koppera
@ 2025-01-09 10:25 ` Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 3/3] net: phy: microchip_rds_ptp : Add PEROUT feature library for RDS PTP supported phys Divya Koppera
2 siblings, 0 replies; 5+ messages in thread
From: Divya Koppera @ 2025-01-09 10:25 UTC (permalink / raw)
To: andrew, arun.ramadoss, UNGLinuxDriver, hkallweit1, linux, davem,
edumazet, kuba, pabeni, netdev, linux-kernel, richardcochran,
vadim.fedorenko
Adds support for enabling pin out that is required
to generate periodic output signal on lan887x phy.
Signed-off-by: Divya Koppera <divya.koppera@microchip.com>
---
v1 -> v2
- Added support of periodic output only for the pinout that is specific
to PEROUT
---
drivers/net/phy/microchip_t1.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/net/phy/microchip_t1.c b/drivers/net/phy/microchip_t1.c
index 73f28463bc35..551a057c516e 100644
--- a/drivers/net/phy/microchip_t1.c
+++ b/drivers/net/phy/microchip_t1.c
@@ -273,6 +273,9 @@
/* End offset of samples */
#define SQI_INLIERS_END (SQI_INLIERS_START + SQI_INLIERS_NUM)
+#define LAN887X_MX_CHIP_TOP_REG_CONTROL1 0xF002
+#define LAN887X_MX_CHIP_TOP_REG_CONTROL1_EVT_EN BIT(8)
+
#define DRIVER_AUTHOR "Nisar Sayed <nisar.sayed@microchip.com>"
#define DRIVER_DESC "Microchip LAN87XX/LAN937x/LAN887x T1 PHY driver"
@@ -1286,6 +1289,15 @@ static int lan887x_phy_init(struct phy_device *phydev)
if (IS_ERR(priv->clock))
return PTR_ERR(priv->clock);
+ /* Enable pin mux for EVT */
+ phy_modify_mmd(phydev, MDIO_MMD_VEND1,
+ LAN887X_MX_CHIP_TOP_REG_CONTROL1,
+ LAN887X_MX_CHIP_TOP_REG_CONTROL1_EVT_EN,
+ LAN887X_MX_CHIP_TOP_REG_CONTROL1_EVT_EN);
+
+ /* Initialize pin numbers specific to PEROUT */
+ priv->clock->event_pin = 3;
+
priv->init_done = true;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v2 3/3] net: phy: microchip_rds_ptp : Add PEROUT feature library for RDS PTP supported phys
2025-01-09 10:25 [PATCH net-next v2 0/3] Add PEROUT library for RDS PTP supported phys Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 1/3] net: phy: microchip_rds_ptp: Header file library changes for PEROUT Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 2/3] net: phy: microchip_t1: Enable pin out specific to lan887x phy for PEROUT signal Divya Koppera
@ 2025-01-09 10:25 ` Divya Koppera
2025-01-14 3:20 ` Jakub Kicinski
2 siblings, 1 reply; 5+ messages in thread
From: Divya Koppera @ 2025-01-09 10:25 UTC (permalink / raw)
To: andrew, arun.ramadoss, UNGLinuxDriver, hkallweit1, linux, davem,
edumazet, kuba, pabeni, netdev, linux-kernel, richardcochran,
vadim.fedorenko
Adds PEROUT feature for RDS PTP supported phys where
we can generate periodic output signal on supported
pin out
Signed-off-by: Divya Koppera <divya.koppera@microchip.com>
---
v1 -> v2
- Added support of periodic output only for the pinout that is specific
to PEROUT
---
drivers/net/phy/microchip_rds_ptp.c | 294 ++++++++++++++++++++++++++++
1 file changed, 294 insertions(+)
diff --git a/drivers/net/phy/microchip_rds_ptp.c b/drivers/net/phy/microchip_rds_ptp.c
index 2936e46531cf..b32b6ae162b3 100644
--- a/drivers/net/phy/microchip_rds_ptp.c
+++ b/drivers/net/phy/microchip_rds_ptp.c
@@ -54,6 +54,267 @@ static int mchp_rds_phy_set_bits_mmd(struct mchp_rds_ptp_clock *clock,
return phy_set_bits_mmd(phydev, PTP_MMD(clock), addr, val);
}
+static int mchp_get_pulsewidth(struct phy_device *phydev,
+ struct ptp_perout_request *perout_request,
+ int *pulse_width)
+{
+ struct timespec64 ts_period;
+ s64 ts_on_nsec, period_nsec;
+ struct timespec64 ts_on;
+
+ ts_period.tv_sec = perout_request->period.sec;
+ ts_period.tv_nsec = perout_request->period.nsec;
+
+ ts_on.tv_sec = perout_request->on.sec;
+ ts_on.tv_nsec = perout_request->on.nsec;
+ ts_on_nsec = timespec64_to_ns(&ts_on);
+ period_nsec = timespec64_to_ns(&ts_period);
+
+ if (period_nsec < 200) {
+ phydev_warn(phydev, "perout period small, minimum is 200ns\n");
+ return -EOPNOTSUPP;
+ }
+
+ switch (ts_on_nsec) {
+ case 200000000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_200MS_;
+ break;
+ case 100000000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100MS_;
+ break;
+ case 50000000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50MS_;
+ break;
+ case 10000000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10MS_;
+ break;
+ case 5000000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5MS_;
+ break;
+ case 1000000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1MS_;
+ break;
+ case 500000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500US_;
+ break;
+ case 100000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100US_;
+ break;
+ case 50000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50US_;
+ break;
+ case 10000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10US_;
+ break;
+ case 5000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5US_;
+ break;
+ case 1000:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1US_;
+ break;
+ case 500:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500NS_;
+ break;
+ case 100:
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100NS_;
+ break;
+ default:
+ phydev_warn(phydev, "Using default pulse width of 200ms\n");
+ *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_200MS_;
+ break;
+ }
+ return 0;
+}
+
+static int mchp_general_event_config(struct mchp_rds_ptp_clock *clock,
+ int pulse_width)
+{
+ int general_config;
+
+ general_config = mchp_rds_phy_read_mmd(clock, MCHP_RDS_PTP_GEN_CFG,
+ MCHP_RDS_PTP_CLOCK);
+ if (general_config < 0)
+ return general_config;
+
+ general_config &= ~MCHP_RDS_PTP_GEN_CFG_LTC_EVT_MASK;
+ general_config |= MCHP_RDS_PTP_GEN_CFG_LTC_EVT_SET(pulse_width);
+ general_config &= ~MCHP_RDS_PTP_GEN_CFG_RELOAD_ADD;
+ general_config |= MCHP_RDS_PTP_GEN_CFG_POLARITY;
+
+ return mchp_rds_phy_write_mmd(clock, MCHP_RDS_PTP_GEN_CFG,
+ MCHP_RDS_PTP_CLOCK, general_config);
+}
+
+static int mchp_set_clock_reload(struct mchp_rds_ptp_clock *clock,
+ s64 period_sec, u32 period_nsec)
+{
+ int rc;
+
+ rc = mchp_rds_phy_write_mmd(clock,
+ MCHP_RDS_PTP_CLK_TRGT_RELOAD_SEC_LO,
+ MCHP_RDS_PTP_CLOCK,
+ lower_16_bits(period_sec));
+ if (rc < 0)
+ return rc;
+
+ rc = mchp_rds_phy_write_mmd(clock,
+ MCHP_RDS_PTP_CLK_TRGT_RELOAD_SEC_HI,
+ MCHP_RDS_PTP_CLOCK,
+ upper_16_bits(period_sec));
+ if (rc < 0)
+ return rc;
+
+ rc = mchp_rds_phy_write_mmd(clock,
+ MCHP_RDS_PTP_CLK_TRGT_RELOAD_NS_LO,
+ MCHP_RDS_PTP_CLOCK,
+ lower_16_bits(period_nsec));
+ if (rc < 0)
+ return rc;
+
+ return mchp_rds_phy_write_mmd(clock,
+ MCHP_RDS_PTP_CLK_TRGT_RELOAD_NS_HI,
+ MCHP_RDS_PTP_CLOCK,
+ upper_16_bits(period_nsec) & 0x3fff);
+}
+
+static int mchp_set_clock_target(struct mchp_rds_ptp_clock *clock,
+ s64 start_sec, u32 start_nsec)
+{
+ int rc;
+
+ /* Set the start time */
+ rc = mchp_rds_phy_write_mmd(clock, MCHP_RDS_PTP_CLK_TRGT_SEC_LO,
+ MCHP_RDS_PTP_CLOCK,
+ lower_16_bits(start_sec));
+ if (rc < 0)
+ return rc;
+
+ rc = mchp_rds_phy_write_mmd(clock, MCHP_RDS_PTP_CLK_TRGT_SEC_HI,
+ MCHP_RDS_PTP_CLOCK,
+ upper_16_bits(start_sec));
+ if (rc < 0)
+ return rc;
+
+ rc = mchp_rds_phy_write_mmd(clock, MCHP_RDS_PTP_CLK_TRGT_NS_LO,
+ MCHP_RDS_PTP_CLOCK,
+ lower_16_bits(start_nsec));
+ if (rc < 0)
+ return rc;
+
+ return mchp_rds_phy_write_mmd(clock, MCHP_RDS_PTP_CLK_TRGT_NS_HI,
+ MCHP_RDS_PTP_CLOCK,
+ upper_16_bits(start_nsec) & 0x3fff);
+}
+
+static int mchp_rds_ptp_perout_off(struct mchp_rds_ptp_clock *clock)
+{
+ u16 general_config;
+ int rc;
+
+ /* Set target to too far in the future, effectively disabling it */
+ rc = mchp_set_clock_target(clock, 0xFFFFFFFF, 0);
+ if (rc < 0)
+ return rc;
+
+ general_config = mchp_rds_phy_read_mmd(clock, MCHP_RDS_PTP_GEN_CFG,
+ MCHP_RDS_PTP_CLOCK);
+ general_config |= MCHP_RDS_PTP_GEN_CFG_RELOAD_ADD;
+ rc = mchp_rds_phy_write_mmd(clock, MCHP_RDS_PTP_GEN_CFG,
+ MCHP_RDS_PTP_CLOCK, general_config);
+ if (rc < 0)
+ return rc;
+
+ clock->mchp_rds_ptp_event = -1;
+
+ return 0;
+}
+
+static bool mchp_get_event(struct mchp_rds_ptp_clock *clock, int pin)
+{
+ if (clock->mchp_rds_ptp_event < 0 && pin == clock->event_pin) {
+ clock->mchp_rds_ptp_event = pin;
+ return true;
+ }
+
+ return false;
+}
+
+static int mchp_rds_ptp_perout(struct ptp_clock_info *ptpci,
+ struct ptp_perout_request *perout, int on)
+{
+ struct mchp_rds_ptp_clock *clock = container_of(ptpci,
+ struct mchp_rds_ptp_clock,
+ caps);
+ struct phy_device *phydev = clock->phydev;
+ int ret, event_pin, pulsewidth;
+
+ /* Reject requests with unsupported flags */
+ if (perout->flags & ~PTP_PEROUT_DUTY_CYCLE)
+ return -EOPNOTSUPP;
+
+ event_pin = ptp_find_pin(clock->ptp_clock, PTP_PF_PEROUT,
+ perout->index);
+ if (event_pin != clock->event_pin)
+ return -EINVAL;
+
+ if (!on) {
+ ret = mchp_rds_ptp_perout_off(clock);
+ return ret;
+ }
+
+ if (!mchp_get_event(clock, event_pin))
+ return -EINVAL;
+
+ ret = mchp_get_pulsewidth(phydev, perout, &pulsewidth);
+ if (ret < 0)
+ return ret;
+
+ /* Configure to pulse every period */
+ ret = mchp_general_event_config(clock, pulsewidth);
+ if (ret < 0)
+ return ret;
+
+ ret = mchp_set_clock_target(clock, perout->start.sec,
+ perout->start.nsec);
+ if (ret < 0)
+ return ret;
+
+ return mchp_set_clock_reload(clock, perout->period.sec,
+ perout->period.nsec);
+}
+
+static int mchp_rds_ptpci_enable(struct ptp_clock_info *ptpci,
+ struct ptp_clock_request *request, int on)
+{
+ switch (request->type) {
+ case PTP_CLK_REQ_PEROUT:
+ return mchp_rds_ptp_perout(ptpci, &request->perout, on);
+ default:
+ return -EINVAL;
+ }
+}
+
+static int mchp_rds_ptpci_verify(struct ptp_clock_info *ptpci, unsigned int pin,
+ enum ptp_pin_function func, unsigned int chan)
+{
+ struct mchp_rds_ptp_clock *clock = container_of(ptpci,
+ struct mchp_rds_ptp_clock,
+ caps);
+
+ if (!(pin == clock->event_pin && chan == 0))
+ return -1;
+
+ switch (func) {
+ case PTP_PF_NONE:
+ case PTP_PF_PEROUT:
+ break;
+ default:
+ return -1;
+ }
+
+ return 0;
+}
+
static int mchp_rds_ptp_flush_fifo(struct mchp_rds_ptp_clock *clock,
enum mchp_rds_ptp_fifo_dir dir)
{
@@ -479,6 +740,16 @@ static int mchp_rds_ptp_ltc_adjtime(struct ptp_clock_info *info, s64 delta)
MCHP_RDS_PTP_CMD_CTL_LTC_STEP_NSEC);
}
+ mutex_unlock(&clock->ptp_lock);
+ info->gettime64(info, &ts);
+ mutex_lock(&clock->ptp_lock);
+
+ /* Target update is required for pulse generation on events that
+ * are enabled
+ */
+ if (clock->mchp_rds_ptp_event >= 0)
+ mchp_set_clock_target(clock,
+ ts.tv_sec + MCHP_RDS_PTP_BUFFER_TIME, 0);
out_unlock:
mutex_unlock(&clock->ptp_lock);
@@ -989,16 +1260,37 @@ struct mchp_rds_ptp_clock *mchp_rds_ptp_probe(struct phy_device *phydev, u8 mmd,
clock->mmd = mmd;
mutex_init(&clock->ptp_lock);
+ clock->pin_config = devm_kmalloc_array(&phydev->mdio.dev,
+ MCHP_RDS_PTP_N_PIN,
+ sizeof(*clock->pin_config),
+ GFP_KERNEL);
+ if (!clock->pin_config)
+ return ERR_PTR(-ENOMEM);
+
+ for (int i = 0; i < MCHP_RDS_PTP_N_PIN; ++i) {
+ struct ptp_pin_desc *p = &clock->pin_config[i];
+
+ memset(p, 0, sizeof(*p));
+ snprintf(p->name, sizeof(p->name), "pin%d", i);
+ p->index = i;
+ p->func = PTP_PF_NONE;
+ }
/* Register PTP clock */
clock->caps.owner = THIS_MODULE;
snprintf(clock->caps.name, 30, "%s", phydev->drv->name);
clock->caps.max_adj = MCHP_RDS_PTP_MAX_ADJ;
clock->caps.n_ext_ts = 0;
clock->caps.pps = 0;
+ clock->caps.n_pins = MCHP_RDS_PTP_N_PIN;
+ clock->caps.n_per_out = MCHP_RDS_PTP_N_PEROUT;
+ clock->caps.pin_config = clock->pin_config;
clock->caps.adjfine = mchp_rds_ptp_ltc_adjfine;
clock->caps.adjtime = mchp_rds_ptp_ltc_adjtime;
clock->caps.gettime64 = mchp_rds_ptp_ltc_gettime64;
clock->caps.settime64 = mchp_rds_ptp_ltc_settime64;
+ clock->caps.enable = mchp_rds_ptpci_enable;
+ clock->caps.verify = mchp_rds_ptpci_verify;
+ clock->caps.getcrosststamp = NULL;
clock->ptp_clock = ptp_clock_register(&clock->caps,
&phydev->mdio.dev);
if (IS_ERR(clock->ptp_clock))
@@ -1021,6 +1313,8 @@ struct mchp_rds_ptp_clock *mchp_rds_ptp_probe(struct phy_device *phydev, u8 mmd,
phydev->mii_ts = &clock->mii_ts;
+ clock->mchp_rds_ptp_event = -1;
+
/* Timestamp selected by default to keep legacy API */
phydev->default_timestamp = true;
--
2.17.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v2 3/3] net: phy: microchip_rds_ptp : Add PEROUT feature library for RDS PTP supported phys
2025-01-09 10:25 ` [PATCH net-next v2 3/3] net: phy: microchip_rds_ptp : Add PEROUT feature library for RDS PTP supported phys Divya Koppera
@ 2025-01-14 3:20 ` Jakub Kicinski
0 siblings, 0 replies; 5+ messages in thread
From: Jakub Kicinski @ 2025-01-14 3:20 UTC (permalink / raw)
To: Divya Koppera
Cc: andrew, arun.ramadoss, UNGLinuxDriver, hkallweit1, linux, davem,
edumazet, pabeni, netdev, linux-kernel, richardcochran,
vadim.fedorenko
On Thu, 9 Jan 2025 15:55:33 +0530 Divya Koppera wrote:
> + switch (ts_on_nsec) {
> + case 200000000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_200MS_;
> + break;
> + case 100000000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100MS_;
> + break;
> + case 50000000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50MS_;
> + break;
> + case 10000000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10MS_;
> + break;
> + case 5000000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5MS_;
> + break;
> + case 1000000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1MS_;
> + break;
> + case 500000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500US_;
> + break;
> + case 100000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100US_;
> + break;
> + case 50000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50US_;
> + break;
> + case 10000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10US_;
> + break;
> + case 5000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5US_;
> + break;
> + case 1000:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1US_;
> + break;
> + case 500:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500NS_;
> + break;
> + case 100:
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100NS_;
> + break;
> + default:
> + phydev_warn(phydev, "Using default pulse width of 200ms\n");
> + *pulse_width = MCHP_RDS_PTP_GEN_CFG_LTC_EVT_200MS_;
> + break;
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_200MS_ 13
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100MS_ 12
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50MS_ 11
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10MS_ 10
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5MS_ 9
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1MS_ 8
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500US_ 7
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100US_ 6
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_50US_ 5
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_10US_ 4
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_5US_ 3
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_1US_ 2
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_500NS_ 1
+#define MCHP_RDS_PTP_GEN_CFG_LTC_EVT_100NS_ 0
1) seems a bit weird to me that you go to 200ms whenever user asks for
a value that couldn't be provided exactly. Why not go to the next
good value?
2) this is not very well coded up, given that the values you're
translating to are a just natural numbers you can use a table
static const sup_on_necs[] = {
100, /* 100ns */
500, /* 500ns */
1000, /* 1us */
5000, /* 5us */
...
};
for (i = 0; i < ARRAY_SIZE(sup_on_necs); i++) {
if (ts_on_nsec <= sup_on_necs[i]) {
*pulse_width = i;
break;
}
}
--
pw-bot: cr
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-01-14 3:20 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-09 10:25 [PATCH net-next v2 0/3] Add PEROUT library for RDS PTP supported phys Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 1/3] net: phy: microchip_rds_ptp: Header file library changes for PEROUT Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 2/3] net: phy: microchip_t1: Enable pin out specific to lan887x phy for PEROUT signal Divya Koppera
2025-01-09 10:25 ` [PATCH net-next v2 3/3] net: phy: microchip_rds_ptp : Add PEROUT feature library for RDS PTP supported phys Divya Koppera
2025-01-14 3:20 ` Jakub Kicinski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).