linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* drivers/net/dsa/ocelot/felix.c:184: undefined reference to `ocelot_get_ts_info'
@ 2019-12-15  1:14 kbuild test robot
  0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2019-12-15  1:14 UTC (permalink / raw)
  To: Vladimir Oltean; +Cc: kbuild-all, linux-kernel, Claudiu Manoil

[-- Attachment #1: Type: text/plain, Size: 12674 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   e31736d9fae841e8a1612f263136454af10f476a
commit: 56051948773eeb4224fbda88102e891d1ad5cefd net: dsa: ocelot: add driver for Felix switch family
date:   4 weeks ago
config: powerpc-randconfig-a001-20191214 (attached as .config)
compiler: powerpc-linux-gcc (GCC) 7.5.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 56051948773eeb4224fbda88102e891d1ad5cefd
        # save the attached .config to linux build tree
        GCC_VERSION=7.5.0 make.cross ARCH=powerpc 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/net/dsa/ocelot/felix.o: In function `felix_get_ts_info':
>> drivers/net/dsa/ocelot/felix.c:184: undefined reference to `ocelot_get_ts_info'
   drivers/net/dsa/ocelot/felix.o: In function `felix_adjust_link':
>> drivers/net/dsa/ocelot/felix.c:33: undefined reference to `ocelot_adjust_link'
   drivers/net/dsa/ocelot/felix.o: In function `felix_bridge_leave':
>> drivers/net/dsa/ocelot/felix.c:84: undefined reference to `ocelot_port_bridge_leave'
   drivers/net/dsa/ocelot/felix.o: In function `felix_bridge_stp_state_set':
>> drivers/net/dsa/ocelot/felix.c:68: undefined reference to `ocelot_bridge_stp_state_set'
   drivers/net/dsa/ocelot/felix.o: In function `felix_get_ethtool_stats':
>> drivers/net/dsa/ocelot/felix.c:169: undefined reference to `ocelot_get_ethtool_stats'
   drivers/net/dsa/ocelot/felix.o: In function `felix_get_strings':
>> drivers/net/dsa/ocelot/felix.c:162: undefined reference to `ocelot_get_strings'
   drivers/net/dsa/ocelot/felix.o: In function `felix_init_structs':
>> drivers/net/dsa/ocelot/felix.c:219: undefined reference to `ocelot_regmap_init'
>> drivers/net/dsa/ocelot/felix.c:229: undefined reference to `ocelot_regfields_init'
   drivers/net/dsa/ocelot/felix.o: In function `felix_setup':
>> drivers/net/dsa/ocelot/felix.c:284: undefined reference to `ocelot_init'
>> drivers/net/dsa/ocelot/felix.c:287: undefined reference to `ocelot_init_port'
>> drivers/net/dsa/ocelot/felix.c:290: undefined reference to `ocelot_set_cpu_port'
   drivers/net/dsa/ocelot/felix.o: In function `felix_fdb_dump':
>> drivers/net/dsa/ocelot/felix.c:41: undefined reference to `ocelot_fdb_dump'
   drivers/net/dsa/ocelot/felix.o: In function `felix_vlan_add':
>> drivers/net/dsa/ocelot/felix.c:111: undefined reference to `ocelot_vlan_add'
   drivers/net/dsa/ocelot/felix.o: In function `felix_set_ageing_time':
>> drivers/net/dsa/ocelot/felix.c:23: undefined reference to `ocelot_set_ageing_time'
   drivers/net/dsa/ocelot/felix.o: In function `felix_port_enable':
>> drivers/net/dsa/ocelot/felix.c:145: undefined reference to `ocelot_port_enable'
   drivers/net/dsa/ocelot/felix.o: In function `felix_port_disable':
>> drivers/net/dsa/ocelot/felix.c:154: undefined reference to `ocelot_port_disable'
   drivers/net/dsa/ocelot/felix.o: In function `felix_get_sset_count':
>> drivers/net/dsa/ocelot/felix.c:176: undefined reference to `ocelot_get_sset_count'
   drivers/net/dsa/ocelot/felix.o: In function `felix_vlan_del':
>> drivers/net/dsa/ocelot/felix.c:130: undefined reference to `ocelot_vlan_del'
   drivers/net/dsa/ocelot/felix.o: In function `felix_teardown':
>> drivers/net/dsa/ocelot/felix.c:303: undefined reference to `ocelot_deinit'
   drivers/net/dsa/ocelot/felix.o: In function `felix_fdb_add':
>> drivers/net/dsa/ocelot/felix.c:52: undefined reference to `ocelot_fdb_add'

vim +184 drivers/net/dsa/ocelot/felix.c

    17	
    18	static int felix_set_ageing_time(struct dsa_switch *ds,
    19					 unsigned int ageing_time)
    20	{
    21		struct ocelot *ocelot = ds->priv;
    22	
  > 23		ocelot_set_ageing_time(ocelot, ageing_time);
    24	
    25		return 0;
    26	}
    27	
    28	static void felix_adjust_link(struct dsa_switch *ds, int port,
    29				      struct phy_device *phydev)
    30	{
    31		struct ocelot *ocelot = ds->priv;
    32	
  > 33		ocelot_adjust_link(ocelot, port, phydev);
    34	}
    35	
    36	static int felix_fdb_dump(struct dsa_switch *ds, int port,
    37				  dsa_fdb_dump_cb_t *cb, void *data)
    38	{
    39		struct ocelot *ocelot = ds->priv;
    40	
  > 41		return ocelot_fdb_dump(ocelot, port, cb, data);
    42	}
    43	
    44	static int felix_fdb_add(struct dsa_switch *ds, int port,
    45				 const unsigned char *addr, u16 vid)
    46	{
    47		struct ocelot *ocelot = ds->priv;
    48		bool vlan_aware;
    49	
    50		vlan_aware = dsa_port_is_vlan_filtering(dsa_to_port(ds, port));
    51	
  > 52		return ocelot_fdb_add(ocelot, port, addr, vid, vlan_aware);
    53	}
    54	
    55	static int felix_fdb_del(struct dsa_switch *ds, int port,
    56				 const unsigned char *addr, u16 vid)
    57	{
    58		struct ocelot *ocelot = ds->priv;
    59	
  > 60		return ocelot_fdb_del(ocelot, port, addr, vid);
    61	}
    62	
    63	static void felix_bridge_stp_state_set(struct dsa_switch *ds, int port,
    64					       u8 state)
    65	{
    66		struct ocelot *ocelot = ds->priv;
    67	
  > 68		return ocelot_bridge_stp_state_set(ocelot, port, state);
    69	}
    70	
    71	static int felix_bridge_join(struct dsa_switch *ds, int port,
    72				     struct net_device *br)
    73	{
    74		struct ocelot *ocelot = ds->priv;
    75	
  > 76		return ocelot_port_bridge_join(ocelot, port, br);
    77	}
    78	
    79	static void felix_bridge_leave(struct dsa_switch *ds, int port,
    80				       struct net_device *br)
    81	{
    82		struct ocelot *ocelot = ds->priv;
    83	
  > 84		ocelot_port_bridge_leave(ocelot, port, br);
    85	}
    86	
    87	/* This callback needs to be present */
    88	static int felix_vlan_prepare(struct dsa_switch *ds, int port,
    89				      const struct switchdev_obj_port_vlan *vlan)
    90	{
    91		return 0;
    92	}
    93	
    94	static int felix_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
    95	{
    96		struct ocelot *ocelot = ds->priv;
    97	
  > 98		ocelot_port_vlan_filtering(ocelot, port, enabled);
    99	
   100		return 0;
   101	}
   102	
   103	static void felix_vlan_add(struct dsa_switch *ds, int port,
   104				   const struct switchdev_obj_port_vlan *vlan)
   105	{
   106		struct ocelot *ocelot = ds->priv;
   107		u16 vid;
   108		int err;
   109	
   110		for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) {
 > 111			err = ocelot_vlan_add(ocelot, port, vid,
   112					      vlan->flags & BRIDGE_VLAN_INFO_PVID,
   113					      vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED);
   114			if (err) {
   115				dev_err(ds->dev, "Failed to add VLAN %d to port %d: %d\n",
   116					vid, port, err);
   117				return;
   118			}
   119		}
   120	}
   121	
   122	static int felix_vlan_del(struct dsa_switch *ds, int port,
   123				  const struct switchdev_obj_port_vlan *vlan)
   124	{
   125		struct ocelot *ocelot = ds->priv;
   126		u16 vid;
   127		int err;
   128	
   129		for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) {
 > 130			err = ocelot_vlan_del(ocelot, port, vid);
   131			if (err) {
   132				dev_err(ds->dev, "Failed to remove VLAN %d from port %d: %d\n",
   133					vid, port, err);
   134				return err;
   135			}
   136		}
   137		return 0;
   138	}
   139	
   140	static int felix_port_enable(struct dsa_switch *ds, int port,
   141				     struct phy_device *phy)
   142	{
   143		struct ocelot *ocelot = ds->priv;
   144	
 > 145		ocelot_port_enable(ocelot, port, phy);
   146	
   147		return 0;
   148	}
   149	
   150	static void felix_port_disable(struct dsa_switch *ds, int port)
   151	{
   152		struct ocelot *ocelot = ds->priv;
   153	
 > 154		return ocelot_port_disable(ocelot, port);
   155	}
   156	
   157	static void felix_get_strings(struct dsa_switch *ds, int port,
   158				      u32 stringset, u8 *data)
   159	{
   160		struct ocelot *ocelot = ds->priv;
   161	
 > 162		return ocelot_get_strings(ocelot, port, stringset, data);
   163	}
   164	
   165	static void felix_get_ethtool_stats(struct dsa_switch *ds, int port, u64 *data)
   166	{
   167		struct ocelot *ocelot = ds->priv;
   168	
 > 169		ocelot_get_ethtool_stats(ocelot, port, data);
   170	}
   171	
   172	static int felix_get_sset_count(struct dsa_switch *ds, int port, int sset)
   173	{
   174		struct ocelot *ocelot = ds->priv;
   175	
 > 176		return ocelot_get_sset_count(ocelot, port, sset);
   177	}
   178	
   179	static int felix_get_ts_info(struct dsa_switch *ds, int port,
   180				     struct ethtool_ts_info *info)
   181	{
   182		struct ocelot *ocelot = ds->priv;
   183	
 > 184		return ocelot_get_ts_info(ocelot, port, info);
   185	}
   186	
   187	static int felix_init_structs(struct felix *felix, int num_phys_ports)
   188	{
   189		struct ocelot *ocelot = &felix->ocelot;
   190		resource_size_t base;
   191		int port, i, err;
   192	
   193		ocelot->num_phys_ports = num_phys_ports;
   194		ocelot->ports = devm_kcalloc(ocelot->dev, num_phys_ports,
   195					     sizeof(struct ocelot_port *), GFP_KERNEL);
   196		if (!ocelot->ports)
   197			return -ENOMEM;
   198	
   199		ocelot->map		= felix->info->map;
   200		ocelot->stats_layout	= felix->info->stats_layout;
   201		ocelot->num_stats	= felix->info->num_stats;
   202		ocelot->shared_queue_sz	= felix->info->shared_queue_sz;
   203		ocelot->ops		= felix->info->ops;
   204	
   205		base = pci_resource_start(felix->pdev, felix->info->pci_bar);
   206	
   207		for (i = 0; i < TARGET_MAX; i++) {
   208			struct regmap *target;
   209			struct resource *res;
   210	
   211			if (!felix->info->target_io_res[i].name)
   212				continue;
   213	
   214			res = &felix->info->target_io_res[i];
   215			res->flags = IORESOURCE_MEM;
   216			res->start += base;
   217			res->end += base;
   218	
 > 219			target = ocelot_regmap_init(ocelot, res);
   220			if (IS_ERR(target)) {
   221				dev_err(ocelot->dev,
   222					"Failed to map device memory space\n");
   223				return PTR_ERR(target);
   224			}
   225	
   226			ocelot->targets[i] = target;
   227		}
   228	
 > 229		err = ocelot_regfields_init(ocelot, felix->info->regfields);
   230		if (err) {
   231			dev_err(ocelot->dev, "failed to init reg fields map\n");
   232			return err;
   233		}
   234	
   235		for (port = 0; port < num_phys_ports; port++) {
   236			struct ocelot_port *ocelot_port;
   237			void __iomem *port_regs;
   238			struct resource *res;
   239	
   240			ocelot_port = devm_kzalloc(ocelot->dev,
   241						   sizeof(struct ocelot_port),
   242						   GFP_KERNEL);
   243			if (!ocelot_port) {
   244				dev_err(ocelot->dev,
   245					"failed to allocate port memory\n");
   246				return -ENOMEM;
   247			}
   248	
   249			res = &felix->info->port_io_res[port];
   250			res->flags = IORESOURCE_MEM;
   251			res->start += base;
   252			res->end += base;
   253	
   254			port_regs = devm_ioremap_resource(ocelot->dev, res);
   255			if (IS_ERR(port_regs)) {
   256				dev_err(ocelot->dev,
   257					"failed to map registers for port %d\n", port);
   258				return PTR_ERR(port_regs);
   259			}
   260	
   261			ocelot_port->ocelot = ocelot;
   262			ocelot_port->regs = port_regs;
   263			ocelot->ports[port] = ocelot_port;
   264		}
   265	
   266		return 0;
   267	}
   268	
   269	/* Hardware initialization done here so that we can allocate structures with
   270	 * devm without fear of dsa_register_switch returning -EPROBE_DEFER and causing
   271	 * us to allocate structures twice (leak memory) and map PCI memory twice
   272	 * (which will not work).
   273	 */
   274	static int felix_setup(struct dsa_switch *ds)
   275	{
   276		struct ocelot *ocelot = ds->priv;
   277		struct felix *felix = ocelot_to_felix(ocelot);
   278		int port, err;
   279	
   280		err = felix_init_structs(felix, ds->num_ports);
   281		if (err)
   282			return err;
   283	
 > 284		ocelot_init(ocelot);
   285	
   286		for (port = 0; port < ds->num_ports; port++) {
 > 287			ocelot_init_port(ocelot, port);
   288	
   289			if (port == dsa_upstream_port(ds, port))
 > 290				ocelot_set_cpu_port(ocelot, port,
   291						    OCELOT_TAG_PREFIX_NONE,
   292						    OCELOT_TAG_PREFIX_LONG);
   293		}
   294	
   295		return 0;
   296	}
   297	
   298	static void felix_teardown(struct dsa_switch *ds)
   299	{
   300		struct ocelot *ocelot = ds->priv;
   301	
   302		/* stop workqueue thread */
 > 303		ocelot_deinit(ocelot);
   304	}
   305	

---
0-DAY kernel test infrastructure                 Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28035 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-12-15  1:14 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-15  1:14 drivers/net/dsa/ocelot/felix.c:184: undefined reference to `ocelot_get_ts_info' kbuild test robot

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).