[asahilinux:bits/270-thunderbolt 19/19] drivers/thunderbolt/apple.c:701:34: error: implicit declaration of function 'typec_thunderbolt_switch_get_drvdata'; did you mean 'typec_switch_get_drvdata'?

kernel test robot <[email protected]>
Newsgroups dev.linux.lists.oe-kbuild-all
Message-ID <[email protected]>
tree:   https://github.com/AsahiLinux/linux bits/270-thunderbolt
head:   bcb818cd40b22610c3356572de22d51ecc248dbe
commit: bcb818cd40b22610c3356572de22d51ecc248dbe [19/19] thunderbolt: Add Apple Silicon support
config: powerpc-allmodconfig (https://download.01.org/0day-ci/archive/20260824/[email protected]/config)
compiler: powerpc64-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260824/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All error/warnings (new ones prefixed by >>):

>> drivers/thunderbolt/apple.c:699:50: warning: 'struct typec_thunderbolt_switch_data' declared inside parameter list will not be visible outside of this definition or declaration
     699 |                                     const struct typec_thunderbolt_switch_data *data)
         |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c: In function 'apple_cio_tbt_switch_set':
>> drivers/thunderbolt/apple.c:701:34: error: implicit declaration of function 'typec_thunderbolt_switch_get_drvdata'; did you mean 'typec_switch_get_drvdata'? [-Wimplicit-function-declaration]
     701 |         struct apple_cio *acio = typec_thunderbolt_switch_get_drvdata(sw);
         |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                  typec_switch_get_drvdata
>> drivers/thunderbolt/apple.c:701:34: error: initialization of 'struct apple_cio *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
   In file included from include/linux/printk.h:620,
                    from include/asm-generic/bug.h:31,
                    from arch/powerpc/include/asm/bug.h:116,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:13,
                    from include/asm-generic/preempt.h:5,
                    from ./arch/powerpc/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:79,
                    from include/linux/spinlock.h:56,
                    from include/linux/swait.h:7,
                    from include/linux/completion.h:12,
                    from drivers/thunderbolt/apple.c:55:
>> drivers/thunderbolt/apple.c:705:57: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     705 |         dev_dbg(acio->dev, "set cable state: %d\n", data->state);
         |                                                         ^~
   include/linux/dynamic_debug.h:231:29: note: in definition of macro '__dynamic_func_call_cls'
     231 |                 func(&id, ##__VA_ARGS__);                       \
         |                             ^~~~~~~~~~~
   include/linux/dynamic_debug.h:261:9: note: in expansion of macro '_dynamic_func_call_cls'
     261 |         _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dynamic_debug.h:284:9: note: in expansion of macro '_dynamic_func_call'
     284 |         _dynamic_func_call(fmt, __dynamic_dev_dbg,              \
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:165:9: note: in expansion of macro 'dynamic_dev_dbg'
     165 |         dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:705:9: note: in expansion of macro 'dev_dbg'
     705 |         dev_dbg(acio->dev, "set cable state: %d\n", data->state);
         |         ^~~~~~~
   drivers/thunderbolt/apple.c:707:21: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     707 |         switch (data->state) {
         |                     ^~
>> drivers/thunderbolt/apple.c:708:14: error: 'TYPEC_THUNDERBOLT_SWITCH_OFF' undeclared (first use in this function)
     708 |         case TYPEC_THUNDERBOLT_SWITCH_OFF:
         |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:708:14: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/thunderbolt/apple.c:711:14: error: 'TYPEC_THUNDERBOLT_SWITCH_TBT' undeclared (first use in this function)
     711 |         case TYPEC_THUNDERBOLT_SWITCH_TBT:
         |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:714:25: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     714 |                 if (data->tbt.cable_mode & TBT_CABLE_ACTIVE_PASSIVE) {
         |                         ^~
   drivers/thunderbolt/apple.c:716:35: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     716 |                         if (!(data->tbt.cable_mode & TBT_CABLE_LINK_TRAINING))
         |                                   ^~
   In file included from <command-line>:
   drivers/thunderbolt/apple.c:720:37: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     720 |                 if (TBT_ADAPTER(data->tbt.device_mode))
         |                                     ^~
   include/linux/compiler_types.h:682:23: note: in definition of macro '__compiletime_assert'
     682 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:702:9: note: in expansion of macro '_compiletime_assert'
     702 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:40:37: note: in expansion of macro 'compiletime_assert'
      40 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:79:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      79 |         BUILD_BUG_ON_MSG(__bf_cast_unsigned(mask, mask) >               \
         |         ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:63:43: note: in expansion of macro '__unsigned_scalar_typeof'
      63 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:80:26: note: in expansion of macro '__bf_cast_unsigned'
      80 |                          __bf_cast_unsigned(reg, ~0ull),                \
         |                          ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:177:17: note: in expansion of macro '__BF_FIELD_CHECK_REG'
     177 |                 __BF_FIELD_CHECK_REG(_mask, _reg, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~~~~~
   include/linux/usb/typec_tbt.h:29:41: note: in expansion of macro 'FIELD_GET'
      29 | #define TBT_ADAPTER(_vdo_)              FIELD_GET(BIT(16), _vdo_)
         |                                         ^~~~~~~~~
   drivers/thunderbolt/apple.c:720:21: note: in expansion of macro 'TBT_ADAPTER'
     720 |                 if (TBT_ADAPTER(data->tbt.device_mode))
         |                     ^~~~~~~~~~~
   In file included from drivers/thunderbolt/apple.c:54:
   drivers/thunderbolt/apple.c:720:37: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     720 |                 if (TBT_ADAPTER(data->tbt.device_mode))
         |                                     ^~
   include/linux/bitfield.h:98:34: note: in definition of macro '__FIELD_GET'
      98 |                 (typeof(mask))(((reg) & (mask)) >> __bf_shf(mask));     \
         |                                  ^~~
   include/linux/usb/typec_tbt.h:29:41: note: in expansion of macro 'FIELD_GET'
      29 | #define TBT_ADAPTER(_vdo_)              FIELD_GET(BIT(16), _vdo_)
         |                                         ^~~~~~~~~
   drivers/thunderbolt/apple.c:720:21: note: in expansion of macro 'TBT_ADAPTER'
     720 |                 if (TBT_ADAPTER(data->tbt.device_mode))
         |                     ^~~~~~~~~~~
   drivers/thunderbolt/apple.c:722:41: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     722 |                 if (TBT_CABLE_SPEED(data->tbt.cable_mode) == TBT_CABLE_10_AND_20GBPS)
         |                                         ^~
   include/linux/compiler_types.h:682:23: note: in definition of macro '__compiletime_assert'
     682 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:702:9: note: in expansion of macro '_compiletime_assert'
     702 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:40:37: note: in expansion of macro 'compiletime_assert'
      40 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:79:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      79 |         BUILD_BUG_ON_MSG(__bf_cast_unsigned(mask, mask) >               \
         |         ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:63:43: note: in expansion of macro '__unsigned_scalar_typeof'
      63 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:80:26: note: in expansion of macro '__bf_cast_unsigned'
      80 |                          __bf_cast_unsigned(reg, ~0ull),                \
         |                          ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:177:17: note: in expansion of macro '__BF_FIELD_CHECK_REG'
     177 |                 __BF_FIELD_CHECK_REG(_mask, _reg, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~~~~~
   include/linux/usb/typec_tbt.h:39:41: note: in expansion of macro 'FIELD_GET'
      39 | #define TBT_CABLE_SPEED(_vdo_)          FIELD_GET(GENMASK(18, 16), _vdo_)
         |                                         ^~~~~~~~~
   drivers/thunderbolt/apple.c:722:21: note: in expansion of macro 'TBT_CABLE_SPEED'
     722 |                 if (TBT_CABLE_SPEED(data->tbt.cable_mode) == TBT_CABLE_10_AND_20GBPS)
         |                     ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:722:41: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     722 |                 if (TBT_CABLE_SPEED(data->tbt.cable_mode) == TBT_CABLE_10_AND_20GBPS)
         |                                         ^~
   include/linux/bitfield.h:98:34: note: in definition of macro '__FIELD_GET'
      98 |                 (typeof(mask))(((reg) & (mask)) >> __bf_shf(mask));     \
         |                                  ^~~
   include/linux/usb/typec_tbt.h:39:41: note: in expansion of macro 'FIELD_GET'
      39 | #define TBT_CABLE_SPEED(_vdo_)          FIELD_GET(GENMASK(18, 16), _vdo_)
         |                                         ^~~~~~~~~
   drivers/thunderbolt/apple.c:722:21: note: in expansion of macro 'TBT_CABLE_SPEED'
     722 |                 if (TBT_CABLE_SPEED(data->tbt.cable_mode) == TBT_CABLE_10_AND_20GBPS)
         |                     ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:724:25: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     724 |                 if (data->orientation == TYPEC_ORIENTATION_REVERSE)
         |                         ^~
   drivers/thunderbolt/apple.c:728:29: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     728 |                         data->tbt.cable_mode, data->tbt.device_mode,
         |                             ^~
   include/linux/dynamic_debug.h:231:29: note: in definition of macro '__dynamic_func_call_cls'
     231 |                 func(&id, ##__VA_ARGS__);                       \
         |                             ^~~~~~~~~~~
   include/linux/dynamic_debug.h:261:9: note: in expansion of macro '_dynamic_func_call_cls'
     261 |         _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dynamic_debug.h:284:9: note: in expansion of macro '_dynamic_func_call'
     284 |         _dynamic_func_call(fmt, __dynamic_dev_dbg,              \
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:165:9: note: in expansion of macro 'dynamic_dev_dbg'
     165 |         dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:726:17: note: in expansion of macro 'dev_dbg'
     726 |                 dev_dbg(acio->dev,
         |                 ^~~~~~~
   drivers/thunderbolt/apple.c:728:51: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     728 |                         data->tbt.cable_mode, data->tbt.device_mode,
         |                                                   ^~
   include/linux/dynamic_debug.h:231:29: note: in definition of macro '__dynamic_func_call_cls'
     231 |                 func(&id, ##__VA_ARGS__);                       \
         |                             ^~~~~~~~~~~
   include/linux/dynamic_debug.h:261:9: note: in expansion of macro '_dynamic_func_call_cls'
     261 |         _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dynamic_debug.h:284:9: note: in expansion of macro '_dynamic_func_call'
     284 |         _dynamic_func_call(fmt, __dynamic_dev_dbg,              \
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:165:9: note: in expansion of macro 'dynamic_dev_dbg'
     165 |         dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:726:17: note: in expansion of macro 'dev_dbg'
     726 |                 dev_dbg(acio->dev,
         |                 ^~~~~~~
   drivers/thunderbolt/apple.c:729:29: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     729 |                         data->tbt.enter_vdo, data->orientation,
         |                             ^~
   include/linux/dynamic_debug.h:231:29: note: in definition of macro '__dynamic_func_call_cls'
     231 |                 func(&id, ##__VA_ARGS__);                       \
         |                             ^~~~~~~~~~~
   include/linux/dynamic_debug.h:261:9: note: in expansion of macro '_dynamic_func_call_cls'
     261 |         _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dynamic_debug.h:284:9: note: in expansion of macro '_dynamic_func_call'
     284 |         _dynamic_func_call(fmt, __dynamic_dev_dbg,              \
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:165:9: note: in expansion of macro 'dynamic_dev_dbg'
     165 |         dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:726:17: note: in expansion of macro 'dev_dbg'
     726 |                 dev_dbg(acio->dev,
         |                 ^~~~~~~
   drivers/thunderbolt/apple.c:729:50: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     729 |                         data->tbt.enter_vdo, data->orientation,
         |                                                  ^~
   include/linux/dynamic_debug.h:231:29: note: in definition of macro '__dynamic_func_call_cls'
     231 |                 func(&id, ##__VA_ARGS__);                       \
         |                             ^~~~~~~~~~~
   include/linux/dynamic_debug.h:261:9: note: in expansion of macro '_dynamic_func_call_cls'
     261 |         _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dynamic_debug.h:284:9: note: in expansion of macro '_dynamic_func_call'
     284 |         _dynamic_func_call(fmt, __dynamic_dev_dbg,              \
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:165:9: note: in expansion of macro 'dynamic_dev_dbg'
     165 |         dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:726:17: note: in expansion of macro 'dev_dbg'
     726 |                 dev_dbg(acio->dev,
         |                 ^~~~~~~
>> drivers/thunderbolt/apple.c:732:14: error: 'TYPEC_THUNDERBOLT_SWITCH_USB4' undeclared (first use in this function)
     732 |         case TYPEC_THUNDERBOLT_SWITCH_USB4:
         |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:734:57: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     734 |                 if (FIELD_GET(EUDO_CABLE_TYPE_MASK, data->usb4.eudo) != EUDO_CABLE_TYPE_PASSIVE)
         |                                                         ^~
   include/linux/compiler_types.h:682:23: note: in definition of macro '__compiletime_assert'
     682 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:702:9: note: in expansion of macro '_compiletime_assert'
     702 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:40:37: note: in expansion of macro 'compiletime_assert'
      40 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:79:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      79 |         BUILD_BUG_ON_MSG(__bf_cast_unsigned(mask, mask) >               \
         |         ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:63:43: note: in expansion of macro '__unsigned_scalar_typeof'
      63 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:80:26: note: in expansion of macro '__bf_cast_unsigned'
      80 |                          __bf_cast_unsigned(reg, ~0ull),                \
         |                          ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:177:17: note: in expansion of macro '__BF_FIELD_CHECK_REG'
     177 |                 __BF_FIELD_CHECK_REG(_mask, _reg, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:734:21: note: in expansion of macro 'FIELD_GET'
     734 |                 if (FIELD_GET(EUDO_CABLE_TYPE_MASK, data->usb4.eudo) != EUDO_CABLE_TYPE_PASSIVE)
         |                     ^~~~~~~~~
   drivers/thunderbolt/apple.c:734:57: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     734 |                 if (FIELD_GET(EUDO_CABLE_TYPE_MASK, data->usb4.eudo) != EUDO_CABLE_TYPE_PASSIVE)
         |                                                         ^~
   include/linux/bitfield.h:98:34: note: in definition of macro '__FIELD_GET'
      98 |                 (typeof(mask))(((reg) & (mask)) >> __bf_shf(mask));     \
         |                                  ^~~
   drivers/thunderbolt/apple.c:734:21: note: in expansion of macro 'FIELD_GET'
     734 |                 if (FIELD_GET(EUDO_CABLE_TYPE_MASK, data->usb4.eudo) != EUDO_CABLE_TYPE_PASSIVE)
         |                     ^~~~~~~~~
   drivers/thunderbolt/apple.c:736:58: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     736 |                 if (FIELD_GET(EUDO_CABLE_SPEED_MASK, data->usb4.eudo) == EUDO_CABLE_SPEED_USB4_GEN3)
         |                                                          ^~
   include/linux/compiler_types.h:682:23: note: in definition of macro '__compiletime_assert'
     682 |                 if (!(condition))                                       \
         |                       ^~~~~~~~~
   include/linux/compiler_types.h:702:9: note: in expansion of macro '_compiletime_assert'
     702 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |         ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:40:37: note: in expansion of macro 'compiletime_assert'
      40 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:79:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
      79 |         BUILD_BUG_ON_MSG(__bf_cast_unsigned(mask, mask) >               \
         |         ^~~~~~~~~~~~~~~~
   include/linux/bitfield.h:63:43: note: in expansion of macro '__unsigned_scalar_typeof'
      63 | #define __bf_cast_unsigned(type, x)     ((__unsigned_scalar_typeof(type))(x))
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:80:26: note: in expansion of macro '__bf_cast_unsigned'
      80 |                          __bf_cast_unsigned(reg, ~0ull),                \
         |                          ^~~~~~~~~~~~~~~~~~
   include/linux/bitfield.h:177:17: note: in expansion of macro '__BF_FIELD_CHECK_REG'
     177 |                 __BF_FIELD_CHECK_REG(_mask, _reg, "FIELD_GET: ");       \
         |                 ^~~~~~~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:736:21: note: in expansion of macro 'FIELD_GET'
     736 |                 if (FIELD_GET(EUDO_CABLE_SPEED_MASK, data->usb4.eudo) == EUDO_CABLE_SPEED_USB4_GEN3)
         |                     ^~~~~~~~~
   drivers/thunderbolt/apple.c:736:58: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     736 |                 if (FIELD_GET(EUDO_CABLE_SPEED_MASK, data->usb4.eudo) == EUDO_CABLE_SPEED_USB4_GEN3)
         |                                                          ^~
   include/linux/bitfield.h:98:34: note: in definition of macro '__FIELD_GET'
      98 |                 (typeof(mask))(((reg) & (mask)) >> __bf_shf(mask));     \
         |                                  ^~~
   drivers/thunderbolt/apple.c:736:21: note: in expansion of macro 'FIELD_GET'
     736 |                 if (FIELD_GET(EUDO_CABLE_SPEED_MASK, data->usb4.eudo) == EUDO_CABLE_SPEED_USB4_GEN3)
         |                     ^~~~~~~~~
   drivers/thunderbolt/apple.c:738:25: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     738 |                 if (data->orientation == TYPEC_ORIENTATION_REVERSE)
         |                         ^~
   drivers/thunderbolt/apple.c:741:29: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     741 |                         data->usb4.eudo, data->orientation, acio->target_cable_info);
         |                             ^~
   include/linux/dynamic_debug.h:231:29: note: in definition of macro '__dynamic_func_call_cls'
     231 |                 func(&id, ##__VA_ARGS__);                       \
         |                             ^~~~~~~~~~~
   include/linux/dynamic_debug.h:261:9: note: in expansion of macro '_dynamic_func_call_cls'
     261 |         _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dynamic_debug.h:284:9: note: in expansion of macro '_dynamic_func_call'
     284 |         _dynamic_func_call(fmt, __dynamic_dev_dbg,              \
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:165:9: note: in expansion of macro 'dynamic_dev_dbg'
     165 |         dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:740:17: note: in expansion of macro 'dev_dbg'
     740 |                 dev_dbg(acio->dev, "USB4 cable: eudo 0x%x, orientation %d -> cable info 0x%x\n",
         |                 ^~~~~~~
   drivers/thunderbolt/apple.c:741:46: error: invalid use of undefined type 'const struct typec_thunderbolt_switch_data'
     741 |                         data->usb4.eudo, data->orientation, acio->target_cable_info);
         |                                              ^~
   include/linux/dynamic_debug.h:231:29: note: in definition of macro '__dynamic_func_call_cls'
     231 |                 func(&id, ##__VA_ARGS__);                       \
         |                             ^~~~~~~~~~~
   include/linux/dynamic_debug.h:261:9: note: in expansion of macro '_dynamic_func_call_cls'
     261 |         _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dynamic_debug.h:284:9: note: in expansion of macro '_dynamic_func_call'
     284 |         _dynamic_func_call(fmt, __dynamic_dev_dbg,              \
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:165:9: note: in expansion of macro 'dynamic_dev_dbg'
     165 |         dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:740:17: note: in expansion of macro 'dev_dbg'
     740 |                 dev_dbg(acio->dev, "USB4 cable: eudo 0x%x, orientation %d -> cable info 0x%x\n",
         |                 ^~~~~~~
   drivers/thunderbolt/apple.c: In function 'apple_cio_probe':
>> drivers/thunderbolt/apple.c:836:16: error: variable 'desc' has initializer but incomplete type
     836 |         struct typec_thunderbolt_switch_desc desc = {
         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/thunderbolt/apple.c:837:18: error: 'struct typec_thunderbolt_switch_desc' has no member named 'fwnode'
     837 |                 .fwnode = pdev->dev.fwnode,
         |                  ^~~~~~
>> drivers/thunderbolt/apple.c:837:27: warning: excess elements in struct initializer
     837 |                 .fwnode = pdev->dev.fwnode,
         |                           ^~~~
   drivers/thunderbolt/apple.c:837:27: note: (near initialization for 'desc')
>> drivers/thunderbolt/apple.c:838:18: error: 'struct typec_thunderbolt_switch_desc' has no member named 'set'
     838 |                 .set = apple_cio_tbt_switch_set,
         |                  ^~~
   drivers/thunderbolt/apple.c:838:24: warning: excess elements in struct initializer
     838 |                 .set = apple_cio_tbt_switch_set,
         |                        ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/thunderbolt/apple.c:838:24: note: (near initialization for 'desc')
>> drivers/thunderbolt/apple.c:839:18: error: 'struct typec_thunderbolt_switch_desc' has no member named 'drvdata'
     839 |                 .drvdata = acio,
         |                  ^~~~~~~
   drivers/thunderbolt/apple.c:839:28: warning: excess elements in struct initializer
     839 |                 .drvdata = acio,
         |                            ^~~~
   drivers/thunderbolt/apple.c:839:28: note: (near initialization for 'desc')
>> drivers/thunderbolt/apple.c:836:46: error: storage size of 'desc' isn't known
     836 |         struct typec_thunderbolt_switch_desc desc = {
         |                                              ^~~~
>> drivers/thunderbolt/apple.c:841:28: error: implicit declaration of function 'typec_thunderbolt_switch_register' [-Wimplicit-function-declaration]
     841 |         acio->tbt_switch = typec_thunderbolt_switch_register(dev, &desc);
         |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/thunderbolt/apple.c:836:46: warning: unused variable 'desc' [-Wunused-variable]
     836 |         struct typec_thunderbolt_switch_desc desc = {
         |                                              ^~~~
   drivers/thunderbolt/apple.c: In function 'apple_cio_remove':
>> drivers/thunderbolt/apple.c:853:9: error: implicit declaration of function 'typec_thunderbolt_switch_unregister'; did you mean 'typec_switch_unregister'? [-Wimplicit-function-declaration]
     853 |         typec_thunderbolt_switch_unregister(acio->tbt_switch);
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |         typec_switch_unregister


vim +701 drivers/thunderbolt/apple.c

   697	
   698	static int apple_cio_tbt_switch_set(struct typec_thunderbolt_switch_dev *sw,
 > 699					    const struct typec_thunderbolt_switch_data *data)
   700	{
 > 701		struct apple_cio *acio = typec_thunderbolt_switch_get_drvdata(sw);
   702	
   703		guard(mutex)(&acio->lock);
   704	
 > 705		dev_dbg(acio->dev, "set cable state: %d\n", data->state);
   706	
   707		switch (data->state) {
 > 708		case TYPEC_THUNDERBOLT_SWITCH_OFF:
   709			acio->target_cable_info = 0;
   710			break;
 > 711		case TYPEC_THUNDERBOLT_SWITCH_TBT:
   712			acio->target_cable_info = TB_VSE_CAP_APPLE_CABLE_INFO_PRESENT;
   713			acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_TBT2_3;
   714			if (data->tbt.cable_mode & TBT_CABLE_ACTIVE_PASSIVE) {
   715				acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_ACTIVE_CABLE;
   716				if (!(data->tbt.cable_mode & TBT_CABLE_LINK_TRAINING))
   717					acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_BIDIR_LSRX;
   718			}
   719			/* bit 16 of the Device Discover Mode VDO is 1 for a legacy TBT2 adapter */
   720			if (TBT_ADAPTER(data->tbt.device_mode))
   721				acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_LEGACY_ADAPTER;
   722			if (TBT_CABLE_SPEED(data->tbt.cable_mode) == TBT_CABLE_10_AND_20GBPS)
   723				acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_20_GBPS;
   724			if (data->orientation == TYPEC_ORIENTATION_REVERSE)
   725				acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_ORIENTATION_REVERSE;
   726			dev_dbg(acio->dev,
   727				"TBT cable: cable_mode 0x%x, device_mode 0x%x, enter_vdo 0x%x, orientation %d -> cable info 0x%x\n",
   728				data->tbt.cable_mode, data->tbt.device_mode,
   729				data->tbt.enter_vdo, data->orientation,
   730				acio->target_cable_info);
   731			break;
 > 732		case TYPEC_THUNDERBOLT_SWITCH_USB4:
   733			acio->target_cable_info = TB_VSE_CAP_APPLE_CABLE_INFO_PRESENT;
   734			if (FIELD_GET(EUDO_CABLE_TYPE_MASK, data->usb4.eudo) != EUDO_CABLE_TYPE_PASSIVE)
   735				acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_ACTIVE_CABLE;
   736			if (FIELD_GET(EUDO_CABLE_SPEED_MASK, data->usb4.eudo) == EUDO_CABLE_SPEED_USB4_GEN3)
   737				acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_20_GBPS;
   738			if (data->orientation == TYPEC_ORIENTATION_REVERSE)
   739				acio->target_cable_info |= TB_VSE_CAP_APPLE_CABLE_INFO_ORIENTATION_REVERSE;
   740			dev_dbg(acio->dev, "USB4 cable: eudo 0x%x, orientation %d -> cable info 0x%x\n",
   741				data->usb4.eudo, data->orientation, acio->target_cable_info);
   742			break;
   743		}
   744	
   745		if (acio->target_cable_info == acio->current_cable_info)
   746			return 0;
   747	
   748		/*
   749		 * Transitions between different cables without a shutdown inbetween are invalid and can
   750		 * only happen when there's a bug inside the Type-C PD driver. If we tried such a
   751		 * transition, ACIO would crash and then trigger some watchdog that would reset the entire
   752		 * SoC a few seconds later. Shutting down instead only makes the connected device not work
   753		 * but we should be able to recover once the next cable is plugged in.
   754		 */
   755		if (acio->current_cable_info && acio->target_cable_info) {
   756			dev_err(acio->dev,
   757				"Invalid cable transition from 0x%x to 0x%x, shutting down instead\n",
   758				acio->current_cable_info, acio->target_cable_info);
   759			acio->target_cable_info = 0;
   760		}
   761	
   762		/*
   763		 * Bring up or power down the ACIO complex
   764		 * current_cable_info will be updated in the start/stop functions
   765		 */
   766		if (acio->target_cable_info)
   767			return apple_cio_start(acio);
   768	
   769		apple_cio_stop(acio);
   770		return 0;
   771	}
   772	
   773	static int apple_cio_probe(struct platform_device *pdev)
   774	{
   775		struct device *dev = &pdev->dev;
   776		struct apple_cio *acio;
   777		int ret;
   778	
   779		acio = devm_kzalloc(dev, sizeof(*acio), GFP_KERNEL);
   780		if (!acio)
   781			return -ENOMEM;
   782		platform_set_drvdata(pdev, acio);
   783	
   784		ret = devm_mutex_init(dev, &acio->lock);
   785		if (ret)
   786			return ret;
   787		init_completion(&acio->nhi_boot_completion);
   788		acio->dev = &pdev->dev;
   789		acio->np = dev->of_node;
   790	
   791		acio->sram_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sram");
   792		if (!acio->sram_res)
   793			return dev_err_probe(dev, -EIO, "Failed to get SRAM resource\n");
   794		acio->sram_base = devm_ioremap_resource(dev, acio->sram_res);
   795		if (IS_ERR(acio->sram_base))
   796			return dev_err_probe(dev, PTR_ERR(acio->sram_base), "Failed to map SRAM\n");
   797	
   798		acio->rc_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rc");
   799		acio->rc_base = devm_ioremap_resource(&pdev->dev, acio->rc_res);
   800		if (IS_ERR(acio->rc_base))
   801			return dev_err_probe(dev, PTR_ERR(acio->rc_base), "Unable to map rc regs\n");
   802		acio->rc_tunable =
   803			devm_apple_tunable_parse(dev, acio->np, "apple,tunable-rc", acio->rc_res);
   804		if (IS_ERR(acio->rc_tunable))
   805			return dev_err_probe(dev, PTR_ERR(acio->rc_tunable), "Unable to load rc tunable\n");
   806	
   807		acio->reset = devm_reset_control_get_exclusive(dev, NULL);
   808		if (IS_ERR(acio->reset))
   809			return dev_err_probe(dev, PTR_ERR(acio->reset), "Unable to get CIO reset\n");
   810	
   811		/*
   812		 * If there is only a single domain listed in the device tree the platform driver
   813		 * framework will already attach it. Thus, if we find an already attached domain
   814		 * here something's wrong in the device tree because we expect at least three separate
   815		 * domains that we have to control manually.
   816		 */
   817		if (dev->pm_domain) {
   818			dev_err(dev, "PM domain already attached, check if the DT lists three domains\n");
   819			return -EINVAL;
   820		}
   821	
   822		/*
   823		 * Find and attach the PM domains but don't power them on yet since we must only
   824		 * do that after the PHY has already been configured into USB4/Thunderbolt mode.
   825		 */
   826		struct dev_pm_domain_attach_data pd_data = {
   827			.pd_flags = PD_FLAG_NO_DEV_LINK,
   828		};
   829		ret = devm_pm_domain_attach_list(dev, &pd_data, &acio->pd_list);
   830		if (ret < 0)
   831			return dev_err_probe(dev, ret, "Unable to attach PM domains\n");
   832		else if (ret < 3)
   833			return dev_err_probe(dev, -EINVAL, "Not enough PM domains\n");
   834	
   835		/* And finally register the OOB notification for Thunderbolt/USB4 cables */
 > 836		struct typec_thunderbolt_switch_desc desc = {
 > 837			.fwnode = pdev->dev.fwnode,
 > 838			.set = apple_cio_tbt_switch_set,
 > 839			.drvdata = acio,
   840		};
 > 841		acio->tbt_switch = typec_thunderbolt_switch_register(dev, &desc);
   842		if (IS_ERR(acio->tbt_switch))
   843			return dev_err_probe(dev, PTR_ERR(acio->tbt_switch),
   844					     "Unable to register thunderbolt switch\n");
   845	
   846		return 0;
   847	}
   848	
   849	static void apple_cio_remove(struct platform_device *pdev)
   850	{
   851		struct apple_cio *acio = platform_get_drvdata(pdev);
   852	
 > 853		typec_thunderbolt_switch_unregister(acio->tbt_switch);
   854	
   855		guard(mutex)(&acio->lock);
   856		if (acio->current_cable_info)
   857			apple_cio_stop(acio);
   858	}
   859	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.