From: Arnd Bergmann <arnd@arndb.de>
Without this option, the driver fails to link:
ld.lld: error: undefined symbol: devlink_sb_register
quoted
quoted
referenced by ocelot_devlink.c
net/ethernet/mscc/ocelot_devlink.o:(ocelot_devlink_sb_register) in archive drivers/built-in.a
referenced by ocelot_devlink.c
net/ethernet/mscc/ocelot_devlink.o:(ocelot_devlink_sb_register) in archive drivers/built-in.a
@@ -13,6 +13,7 @@ if NET_VENDOR_MICROSEMI# Users should depend on NET_SWITCHDEV, HAS_IOMEMconfigMSCC_OCELOT_SWITCH_LIB+selectNET_DEVLINKselectREGMAP_MMIOselectPACKINGselectPHYLIB
From: Arnd Bergmann <arnd@arndb.de>
When the ocelot driver code is in a library, the dsa tag
code cannot be built-in:
ld.lld: error: undefined symbol: ocelot_can_inject
quoted
quoted
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
Building the tag support only really makes sense for compile-testing
when the driver is available, so add a Kconfig dependency that prevents
the broken configuration while allowing COMPILE_TEST alternative when
MSCC_OCELOT_SWITCH_LIB is disabled entirely. This case is handled
through the #ifdef check in include/soc/mscc/ocelot.h.
Fixes: 0a6f17c6ae21 ("net: dsa: tag_ocelot_8021q: add support for PTP timestamping")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
net/dsa/Kconfig | 2 ++
1 file changed, 2 insertions(+)
@@ -118,6 +118,8 @@ config NET_DSA_TAG_OCELOTconfigNET_DSA_TAG_OCELOT_8021Qtristate"Tag driver for Ocelot family of switches, using VLAN"+depends onMSCC_OCELOT_SWITCH_LIB||\+(MSCC_OCELOT_SWITCH_LIB=n&&COMPILE_TEST)selectNET_DSA_TAG_8021QhelpSayYorMifyouwanttoenablesupportfortaggingframeswitha
From: Arnd Bergmann <arnd@arndb.de>
The new gpio support may be optional at runtime, but it requires
building against gpiolib:
ERROR: modpost: "gpiochip_get_data" [drivers/net/dsa/mt7530.ko] undefined!
ERROR: modpost: "devm_gpiochip_add_data_with_key" [drivers/net/dsa/mt7530.ko] undefined!
Add a Kconfig dependency to enforce this.
Fixes: 429a0edeefd8 ("net: dsa: mt7530: MT7530 optional GPIO support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/net/dsa/Kconfig | 1 +
1 file changed, 1 insertion(+)
From: Vladimir Oltean <olteanv@gmail.com> Date: 2021-02-25 14:44:50
On Thu, Feb 25, 2021 at 03:38:32PM +0100, Arnd Bergmann wrote:
quoted hunk
From: Arnd Bergmann <arnd@arndb.de>
When the ocelot driver code is in a library, the dsa tag
code cannot be built-in:
ld.lld: error: undefined symbol: ocelot_can_inject
quoted
quoted
quoted
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
Building the tag support only really makes sense for compile-testing
when the driver is available, so add a Kconfig dependency that prevents
the broken configuration while allowing COMPILE_TEST alternative when
MSCC_OCELOT_SWITCH_LIB is disabled entirely. This case is handled
through the #ifdef check in include/soc/mscc/ocelot.h.
Fixes: 0a6f17c6ae21 ("net: dsa: tag_ocelot_8021q: add support for PTP timestamping")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
net/dsa/Kconfig | 2 ++
1 file changed, 2 insertions(+)
@@ -118,6 +118,8 @@ config NET_DSA_TAG_OCELOTconfigNET_DSA_TAG_OCELOT_8021Qtristate"Tag driver for Ocelot family of switches, using VLAN"+depends onMSCC_OCELOT_SWITCH_LIB||\+(MSCC_OCELOT_SWITCH_LIB=n&&COMPILE_TEST)selectNET_DSA_TAG_8021QhelpSayYorMifyouwanttoenablesupportfortaggingframeswitha
--
2.29.2
Why isn't this code in include/soc/mscc/ocelot.h enough?
#if IS_ENABLED(CONFIG_MSCC_OCELOT_SWITCH_LIB)
bool ocelot_can_inject(struct ocelot *ocelot, int grp);
void ocelot_port_inject_frame(struct ocelot *ocelot, int port, int grp,
u32 rew_op, struct sk_buff *skb);
int ocelot_xtr_poll_frame(struct ocelot *ocelot, int grp, struct sk_buff **skb);
void ocelot_drain_cpu_queue(struct ocelot *ocelot, int grp);
#else
static inline bool ocelot_can_inject(struct ocelot *ocelot, int grp)
{
return false;
}
static inline void ocelot_port_inject_frame(struct ocelot *ocelot, int port,
int grp, u32 rew_op,
struct sk_buff *skb)
{
}
static inline int ocelot_xtr_poll_frame(struct ocelot *ocelot, int grp,
struct sk_buff **skb)
{
return -EIO;
}
static inline void ocelot_drain_cpu_queue(struct ocelot *ocelot, int grp)
{
}
#endif
On Thu, Feb 25, 2021 at 3:43 PM Vladimir Oltean [off-list ref] wrote:
On Thu, Feb 25, 2021 at 03:38:32PM +0100, Arnd Bergmann wrote:
quoted
From: Arnd Bergmann <arnd@arndb.de>
When the ocelot driver code is in a library, the dsa tag
code cannot be built-in:
ld.lld: error: undefined symbol: ocelot_can_inject
quoted
quoted
quoted
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
Building the tag support only really makes sense for compile-testing
when the driver is available, so add a Kconfig dependency that prevents
the broken configuration while allowing COMPILE_TEST alternative when
MSCC_OCELOT_SWITCH_LIB is disabled entirely. This case is handled
through the #ifdef check in include/soc/mscc/ocelot.h.
Fixes: 0a6f17c6ae21 ("net: dsa: tag_ocelot_8021q: add support for PTP timestamping")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
net/dsa/Kconfig | 2 ++
1 file changed, 2 insertions(+)
@@ -118,6 +118,8 @@ config NET_DSA_TAG_OCELOTconfigNET_DSA_TAG_OCELOT_8021Qtristate"Tag driver for Ocelot family of switches, using VLAN"+depends onMSCC_OCELOT_SWITCH_LIB||\+(MSCC_OCELOT_SWITCH_LIB=n&&COMPILE_TEST)selectNET_DSA_TAG_8021QhelpSayYorMifyouwanttoenablesupportfortaggingframeswitha--
2.29.2
Why isn't this code in include/soc/mscc/ocelot.h enough?
#if IS_ENABLED(CONFIG_MSCC_OCELOT_SWITCH_LIB)
bool ocelot_can_inject(struct ocelot *ocelot, int grp);
void ocelot_port_inject_frame(struct ocelot *ocelot, int port, int grp,
u32 rew_op, struct sk_buff *skb);
int ocelot_xtr_poll_frame(struct ocelot *ocelot, int grp, struct sk_buff **skb);
void ocelot_drain_cpu_queue(struct ocelot *ocelot, int grp);
#else
static inline bool ocelot_can_inject(struct ocelot *ocelot, int grp)
{
return false;
}
That code is in include/soc/mscc/ocelot.h, it is what causes the
problem with CONFIG_MSCC_OCELOT_SWITCH_LIB=m
and NET_DSA_TAG_OCELOT_8021Q=y, as I tried to explain.
Arnd
From: Vladimir Oltean <olteanv@gmail.com> Date: 2021-02-25 15:08:33
On Thu, Feb 25, 2021 at 03:49:08PM +0100, Arnd Bergmann wrote:
On Thu, Feb 25, 2021 at 3:47 PM Arnd Bergmann [off-list ref] wrote:
quoted
On Thu, Feb 25, 2021 at 3:43 PM Vladimir Oltean [off-list ref] wrote:
quoted
On Thu, Feb 25, 2021 at 03:38:32PM +0100, Arnd Bergmann wrote:
quoted
From: Arnd Bergmann <arnd@arndb.de>
When the ocelot driver code is in a library, the dsa tag
I see the problem now, I should have written 'loadable module', not 'library'.
Let me know if I should resend with a fixed changelog text.
Ah, ok, things clicked into place now that you said 'module'.
So basically, your patch is the standard Kconfig incantation for 'if the
ocelot switch lib is built as module, build the tagger as module too',
plus some extra handling to allow NET_DSA_TAG_OCELOT_8021Q to still be y
or m when COMPILE_TEST is enabled, but it will be compiled in a
reduced-functionality mode, without MSCC_OCELOT_SWITCH_LIB, therefore
without PTP.
Do I get things right? Sorry, Kconfig is a very strange language.
On Thu, Feb 25, 2021 at 4:07 PM Vladimir Oltean [off-list ref] wrote:
On Thu, Feb 25, 2021 at 03:49:08PM +0100, Arnd Bergmann wrote:
quoted
On Thu, Feb 25, 2021 at 3:47 PM Arnd Bergmann [off-list ref] wrote:
quoted
On Thu, Feb 25, 2021 at 3:43 PM Vladimir Oltean [off-list ref] wrote:
quoted
On Thu, Feb 25, 2021 at 03:38:32PM +0100, Arnd Bergmann wrote:
quoted
From: Arnd Bergmann <arnd@arndb.de>
When the ocelot driver code is in a library, the dsa tag
I see the problem now, I should have written 'loadable module', not 'library'.
Let me know if I should resend with a fixed changelog text.
Ah, ok, things clicked into place now that you said 'module'.
So basically, your patch is the standard Kconfig incantation for 'if the
ocelot switch lib is built as module, build the tagger as module too',
plus some extra handling to allow NET_DSA_TAG_OCELOT_8021Q to still be y
or m when COMPILE_TEST is enabled, but it will be compiled in a
reduced-functionality mode, without MSCC_OCELOT_SWITCH_LIB, therefore
without PTP.
Do I get things right? Sorry, Kconfig is a very strange language.
Yes, that's basically correct. I tried to express it in Kconfig the way
I would explain it in English, which means it there are two options:
a) If MSCC_OCELOT_SWITCH_LIB is enabled (y or m) there is
a direct dependency, so NET_DSA_TAG_OCELOT_8021Q cannot
be built-in if MSCC_OCELOT_SWITCH_LIB=m
b) When compile-testing *and* MSCC_OCELOT_SWITCH_LIB is fully
disabled, NET_DSA_TAG_OCELOT_8021Q can be anything (y/m/n)
As a side-effect, this also means that if we are not compile-testing
and MSCC_OCELOT_SWITCH_LIB is disabled, the option is
hdden.
Arnd.
From: DENG Qingfang <dqfext@gmail.com> Date: 2021-02-25 15:53:59
Hi Arnd,
On Thu, Feb 25, 2021 at 10:40 PM Arnd Bergmann [off-list ref] wrote:
From: Arnd Bergmann <arnd@arndb.de>
The new gpio support may be optional at runtime, but it requires
building against gpiolib:
ERROR: modpost: "gpiochip_get_data" [drivers/net/dsa/mt7530.ko] undefined!
ERROR: modpost: "devm_gpiochip_add_data_with_key" [drivers/net/dsa/mt7530.ko] undefined!
Add a Kconfig dependency to enforce this.
I think wrapping the GPIO code block with #ifdef CONFIG_GPIOLIB ...
#endif may be a better idea.
On Thu, Feb 25, 2021 at 4:52 PM DENG Qingfang [off-list ref] wrote:
Hi Arnd,
On Thu, Feb 25, 2021 at 10:40 PM Arnd Bergmann [off-list ref] wrote:
quoted
From: Arnd Bergmann <arnd@arndb.de>
The new gpio support may be optional at runtime, but it requires
building against gpiolib:
ERROR: modpost: "gpiochip_get_data" [drivers/net/dsa/mt7530.ko] undefined!
ERROR: modpost: "devm_gpiochip_add_data_with_key" [drivers/net/dsa/mt7530.ko] undefined!
Add a Kconfig dependency to enforce this.
I think wrapping the GPIO code block with #ifdef CONFIG_GPIOLIB ...
#endif may be a better idea.
In practice there is little difference, as most configurations have GPIOLIB
enabled anyway, in particular every configuration in which this driver is
used.
If you want to send an alternative patch to add the #ifdef, please include
Reported-by: Arnd Bergmann <arnd@arndb.de>
Arnd
From: Vladimir Oltean <olteanv@gmail.com> Date: 2021-02-26 21:32:41
On Thu, Feb 25, 2021 at 03:38:32PM +0100, Arnd Bergmann wrote:
From: Arnd Bergmann <arnd@arndb.de>
When the ocelot driver code is in a library, the dsa tag
code cannot be built-in:
ld.lld: error: undefined symbol: ocelot_can_inject
quoted
quoted
quoted
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
referenced by tag_ocelot_8021q.c
dsa/tag_ocelot_8021q.o:(ocelot_xmit) in archive net/built-in.a
Building the tag support only really makes sense for compile-testing
when the driver is available, so add a Kconfig dependency that prevents
the broken configuration while allowing COMPILE_TEST alternative when
MSCC_OCELOT_SWITCH_LIB is disabled entirely. This case is handled
through the #ifdef check in include/soc/mscc/ocelot.h.
Fixes: 0a6f17c6ae21 ("net: dsa: tag_ocelot_8021q: add support for PTP timestamping")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
Acked-by: Vladimir Oltean <vladimir.oltean@nxp.com>