From: Vladimir Oltean <vladimir.olt...@nxp.com>

Not only does Sevile not have a PTP clock, but with separate modules,
this structure cannot even live in felix.c, due to the .owner =
THIS_MODULE assignment causing this link time error:

drivers/net/dsa/ocelot/felix.o:(.data+0x0): undefined reference to 
`__this_module'

Signed-off-by: Vladimir Oltean <vladimir.olt...@nxp.com>
---
 drivers/net/dsa/ocelot/felix.c         | 19 +------------------
 drivers/net/dsa/ocelot/felix.h         |  1 +
 drivers/net/dsa/ocelot/felix_vsc9959.c | 18 ++++++++++++++++++
 3 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c
index b523ea3a2e5f..fb1b3e117c78 100644
--- a/drivers/net/dsa/ocelot/felix.c
+++ b/drivers/net/dsa/ocelot/felix.c
@@ -538,23 +538,6 @@ static int felix_init_structs(struct felix *felix, int 
num_phys_ports)
        return 0;
 }
 
-static struct ptp_clock_info ocelot_ptp_clock_info = {
-       .owner          = THIS_MODULE,
-       .name           = "felix ptp",
-       .max_adj        = 0x7fffffff,
-       .n_alarm        = 0,
-       .n_ext_ts       = 0,
-       .n_per_out      = OCELOT_PTP_PINS_NUM,
-       .n_pins         = OCELOT_PTP_PINS_NUM,
-       .pps            = 0,
-       .gettime64      = ocelot_ptp_gettime64,
-       .settime64      = ocelot_ptp_settime64,
-       .adjtime        = ocelot_ptp_adjtime,
-       .adjfine        = ocelot_ptp_adjfine,
-       .verify         = ocelot_ptp_verify,
-       .enable         = ocelot_ptp_enable,
-};
-
 /* Hardware initialization done here so that we can allocate structures with
  * devm without fear of dsa_register_switch returning -EPROBE_DEFER and causing
  * us to allocate structures twice (leak memory) and map PCI memory twice
@@ -576,7 +559,7 @@ static int felix_setup(struct dsa_switch *ds)
                return err;
 
        if (ocelot->ptp) {
-               err = ocelot_init_timestamp(ocelot, &ocelot_ptp_clock_info);
+               err = ocelot_init_timestamp(ocelot, felix->info->ptp_caps);
                if (err) {
                        dev_err(ocelot->dev,
                                "Timestamp initialization failed\n");
diff --git a/drivers/net/dsa/ocelot/felix.h b/drivers/net/dsa/ocelot/felix.h
index 1d41eeda126e..d0b2043e0ccb 100644
--- a/drivers/net/dsa/ocelot/felix.h
+++ b/drivers/net/dsa/ocelot/felix.h
@@ -26,6 +26,7 @@ struct felix_info {
        const struct vcap_props         *vcap;
        int                             switch_pci_bar;
        int                             imdio_pci_bar;
+       const struct ptp_clock_info     *ptp_caps;
        int     (*mdio_bus_alloc)(struct ocelot *ocelot);
        void    (*mdio_bus_free)(struct ocelot *ocelot);
        void    (*phylink_validate)(struct ocelot *ocelot, int port,
diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c 
b/drivers/net/dsa/ocelot/felix_vsc9959.c
index b198fe9cb62b..38e0fba6bca8 100644
--- a/drivers/net/dsa/ocelot/felix_vsc9959.c
+++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
@@ -719,6 +719,23 @@ static const struct vcap_props vsc9959_vcap_props[] = {
        },
 };
 
+static const struct ptp_clock_info vsc9959_ptp_caps = {
+       .owner          = THIS_MODULE,
+       .name           = "felix ptp",
+       .max_adj        = 0x7fffffff,
+       .n_alarm        = 0,
+       .n_ext_ts       = 0,
+       .n_per_out      = OCELOT_PTP_PINS_NUM,
+       .n_pins         = OCELOT_PTP_PINS_NUM,
+       .pps            = 0,
+       .gettime64      = ocelot_ptp_gettime64,
+       .settime64      = ocelot_ptp_settime64,
+       .adjtime        = ocelot_ptp_adjtime,
+       .adjfine        = ocelot_ptp_adjfine,
+       .verify         = ocelot_ptp_verify,
+       .enable         = ocelot_ptp_enable,
+};
+
 #define VSC9959_INIT_TIMEOUT                   50000
 #define VSC9959_GCB_RST_SLEEP                  100
 #define VSC9959_SYS_RAMINIT_SLEEP              80
@@ -1169,6 +1186,7 @@ static const struct felix_info felix_info_vsc9959 = {
        .num_tx_queues          = FELIX_NUM_TC,
        .switch_pci_bar         = 4,
        .imdio_pci_bar          = 0,
+       .ptp_caps               = &vsc9959_ptp_caps,
        .mdio_bus_alloc         = vsc9959_mdio_bus_alloc,
        .mdio_bus_free          = vsc9959_mdio_bus_free,
        .phylink_validate       = vsc9959_phylink_validate,
-- 
2.25.1

Reply via email to