All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] typec: mux: Introduce support for multiple TypeC muxes
@ 2021-12-28  5:21 ` Bjorn Andersson
  0 siblings, 0 replies; 63+ messages in thread
From: Bjorn Andersson @ 2021-12-28  5:21 UTC (permalink / raw)
  To: Kishon Vijay Abraham I, Vinod Koul, Rob Herring,
	Greg Kroah-Hartman, Heikki Krogerus, Hans de Goede
  Cc: Rafael J. Wysocki, linux-arm-msm, linux-phy, devicetree,
	linux-kernel, linux-usb

This series introduces a level of indirection between the controller's view of
a typec_mux/switch and the implementation and then expands that to support
multiple drivers.

This is needed in order to support devices such as the Qualcomm Snapdragon 888
HDK, which does muxing and orientation handling in the QMP (USB+DP) PHY and SBU
muxing in the external FSA4480 chip.

Additionally integration of typec mux and switch in the QMP PHY is included in
the series, as is the new FSA4480 driver. This is done to deal with the
renaming of the driver-side typec_mux -> typec_mux_dev.

Bjorn Andersson (8):
  dt-bindings: phy: qcom,qmp-usb3-dp: Add altmode/switch properties
  phy: qcom-qmp: Register typec mux and orientation switch
  device property: Helper to match multiple connections
  device property: Use multi-connection matchers for single case
  typec: mux: Introduce indirection
  typec: mux: Allow multiple mux_devs per mux
  dt-bindings: usb: Add binding for fcs,fsa4480
  usb: typec: mux: Add On Semi fsa4480 driver

 .../bindings/phy/qcom,qmp-usb3-dp-phy.yaml    |  14 +
 .../devicetree/bindings/usb/fcs,fsa4480.yaml  |  72 +++++
 drivers/base/property.c                       |  83 ++++--
 drivers/phy/qualcomm/phy-qcom-qmp.c           | 176 ++++++++++--
 drivers/usb/typec/bus.c                       |   2 +-
 drivers/usb/typec/mux.c                       | 257 +++++++++++++-----
 drivers/usb/typec/mux.h                       |  12 +-
 drivers/usb/typec/mux/Kconfig                 |   9 +
 drivers/usb/typec/mux/Makefile                |   1 +
 drivers/usb/typec/mux/fsa4480.c               | 220 +++++++++++++++
 drivers/usb/typec/mux/intel_pmc_mux.c         |   8 +-
 drivers/usb/typec/mux/pi3usb30532.c           |   8 +-
 include/linux/property.h                      |   5 +
 include/linux/usb/typec_mux.h                 |  22 +-
 14 files changed, 762 insertions(+), 127 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/usb/fcs,fsa4480.yaml
 create mode 100644 drivers/usb/typec/mux/fsa4480.c

-- 
2.33.1


^ permalink raw reply	[flat|nested] 63+ messages in thread
* Re: [PATCH 6/8] typec: mux: Allow multiple mux_devs per mux
  2021-12-28  5:21   ` Bjorn Andersson
  (?)
  (?)
@ 2022-01-06 10:43 ` Dan Carpenter
  -1 siblings, 0 replies; 63+ messages in thread
From: kernel test robot @ 2021-12-28 15:41 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20211228052116.1748443-7-bjorn.andersson@linaro.org>
References: <20211228052116.1748443-7-bjorn.andersson@linaro.org>
TO: Bjorn Andersson <bjorn.andersson@linaro.org>
TO: Kishon Vijay Abraham I <kishon@ti.com>
TO: Vinod Koul <vkoul@kernel.org>
TO: Rob Herring <robh+dt@kernel.org>
TO: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
TO: Heikki Krogerus <heikki.krogerus@linux.intel.com>
TO: Hans de Goede <hdegoede@redhat.com>
CC: "Rafael J. Wysocki" <rafael@kernel.org>
CC: linux-arm-msm(a)vger.kernel.org
CC: linux-phy(a)lists.infradead.org
CC: devicetree(a)vger.kernel.org

Hi Bjorn,

I love your patch! Perhaps something to improve:

[auto build test WARNING on usb/usb-testing]
[also build test WARNING on robh/for-next driver-core/driver-core-testing linus/master v5.16-rc7]
[cannot apply to next-20211224]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Bjorn-Andersson/typec-mux-Introduce-support-for-multiple-TypeC-muxes/20211228-132045
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
:::::: branch date: 10 hours ago
:::::: commit date: 10 hours ago
config: x86_64-randconfig-m001-20211228 (https://download.01.org/0day-ci/archive/20211228/202112282331.V8Kkx4jf-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/usb/typec/mux.c:114 fwnode_typec_switch_get() warn: possible memory leak of 'sw'
drivers/usb/typec/mux.c:373 fwnode_typec_mux_get() warn: possible memory leak of 'mux'

vim +/sw +114 drivers/usb/typec/mux.c

bdecb33af34f79 Heikki Krogerus 2018-03-20   61  
bdecb33af34f79 Heikki Krogerus 2018-03-20   62  /**
d1c6a769cdf466 Heikki Krogerus 2020-03-02   63   * fwnode_typec_switch_get - Find USB Type-C orientation switch
d1c6a769cdf466 Heikki Krogerus 2020-03-02   64   * @fwnode: The caller device node
bdecb33af34f79 Heikki Krogerus 2018-03-20   65   *
bdecb33af34f79 Heikki Krogerus 2018-03-20   66   * Finds a switch linked with @dev. Returns a reference to the switch on
bdecb33af34f79 Heikki Krogerus 2018-03-20   67   * success, NULL if no matching connection was found, or
bdecb33af34f79 Heikki Krogerus 2018-03-20   68   * ERR_PTR(-EPROBE_DEFER) when a connection was found but the switch
bdecb33af34f79 Heikki Krogerus 2018-03-20   69   * has not been enumerated yet.
bdecb33af34f79 Heikki Krogerus 2018-03-20   70   */
d1c6a769cdf466 Heikki Krogerus 2020-03-02   71  struct typec_switch *fwnode_typec_switch_get(struct fwnode_handle *fwnode)
bdecb33af34f79 Heikki Krogerus 2018-03-20   72  {
8ddb6d277ef580 Bjorn Andersson 2021-12-27   73  	struct typec_switch_dev *sw_devs[TYPEC_MUX_MAX_DEVS];
bdecb33af34f79 Heikki Krogerus 2018-03-20   74  	struct typec_switch *sw;
8ddb6d277ef580 Bjorn Andersson 2021-12-27   75  	int count;
8ddb6d277ef580 Bjorn Andersson 2021-12-27   76  	int err;
8ddb6d277ef580 Bjorn Andersson 2021-12-27   77  	int i;
bdecb33af34f79 Heikki Krogerus 2018-03-20   78  
8d7c70bd032dda Bjorn Andersson 2021-12-27   79  	sw = kzalloc(sizeof(*sw), GFP_KERNEL);
8d7c70bd032dda Bjorn Andersson 2021-12-27   80  	if (!sw)
8d7c70bd032dda Bjorn Andersson 2021-12-27   81  		return ERR_PTR(-ENOMEM);
8d7c70bd032dda Bjorn Andersson 2021-12-27   82  
8ddb6d277ef580 Bjorn Andersson 2021-12-27   83  	count = fwnode_connection_find_matches(fwnode, "orientation-switch", NULL,
8ddb6d277ef580 Bjorn Andersson 2021-12-27   84  					       typec_switch_match,
8ddb6d277ef580 Bjorn Andersson 2021-12-27   85  					       (void **)sw_devs,
8ddb6d277ef580 Bjorn Andersson 2021-12-27   86  					       ARRAY_SIZE(sw_devs));
8ddb6d277ef580 Bjorn Andersson 2021-12-27   87  	if (count <= 0) {
8d7c70bd032dda Bjorn Andersson 2021-12-27   88  		kfree(sw);
8ddb6d277ef580 Bjorn Andersson 2021-12-27   89  		return NULL;
8d7c70bd032dda Bjorn Andersson 2021-12-27   90  	}
8d7c70bd032dda Bjorn Andersson 2021-12-27   91  
8ddb6d277ef580 Bjorn Andersson 2021-12-27   92  	for (i = 0; i < count; i++) {
8ddb6d277ef580 Bjorn Andersson 2021-12-27   93  		if (IS_ERR(sw_devs[i])) {
8ddb6d277ef580 Bjorn Andersson 2021-12-27   94  			err = PTR_ERR(sw_devs[i]);
8ddb6d277ef580 Bjorn Andersson 2021-12-27   95  			goto put_sw_devs;
8ddb6d277ef580 Bjorn Andersson 2021-12-27   96  		}
8ddb6d277ef580 Bjorn Andersson 2021-12-27   97  	}
8ddb6d277ef580 Bjorn Andersson 2021-12-27   98  
8ddb6d277ef580 Bjorn Andersson 2021-12-27   99  	for (i = 0; i < count; i++) {
8ddb6d277ef580 Bjorn Andersson 2021-12-27  100  		WARN_ON(!try_module_get(sw_devs[i]->dev.parent->driver->owner));
8ddb6d277ef580 Bjorn Andersson 2021-12-27  101  		sw->sw_devs[i] = sw_devs[i];
8ddb6d277ef580 Bjorn Andersson 2021-12-27  102  	}
8d7c70bd032dda Bjorn Andersson 2021-12-27  103  
8ddb6d277ef580 Bjorn Andersson 2021-12-27  104  	sw->num_sw_devs = count;
bdecb33af34f79 Heikki Krogerus 2018-03-20  105  
bdecb33af34f79 Heikki Krogerus 2018-03-20  106  	return sw;
8ddb6d277ef580 Bjorn Andersson 2021-12-27  107  
8ddb6d277ef580 Bjorn Andersson 2021-12-27  108  put_sw_devs:
8ddb6d277ef580 Bjorn Andersson 2021-12-27  109  	for (i = 0; i < count; i++) {
8ddb6d277ef580 Bjorn Andersson 2021-12-27  110  		if (!IS_ERR(sw_devs[i]))
8ddb6d277ef580 Bjorn Andersson 2021-12-27  111  			put_device(&sw_devs[i]->dev);
8ddb6d277ef580 Bjorn Andersson 2021-12-27  112  	}
8ddb6d277ef580 Bjorn Andersson 2021-12-27  113  
8ddb6d277ef580 Bjorn Andersson 2021-12-27 @114  	return ERR_PTR(err);
bdecb33af34f79 Heikki Krogerus 2018-03-20  115  }
d1c6a769cdf466 Heikki Krogerus 2020-03-02  116  EXPORT_SYMBOL_GPL(fwnode_typec_switch_get);
bdecb33af34f79 Heikki Krogerus 2018-03-20  117  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 63+ messages in thread
* Re: [PATCH 2/8] phy: qcom-qmp: Register typec mux and orientation switch
@ 2021-12-28 23:59 kernel test robot
  0 siblings, 0 replies; 63+ messages in thread
From: kernel test robot @ 2021-12-28 23:59 UTC (permalink / raw)
  To: kbuild

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

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20211228052116.1748443-3-bjorn.andersson@linaro.org>
References: <20211228052116.1748443-3-bjorn.andersson@linaro.org>
TO: Bjorn Andersson <bjorn.andersson@linaro.org>

Hi Bjorn,

I love your patch! Perhaps something to improve:

[auto build test WARNING on usb/usb-testing]
[also build test WARNING on robh/for-next driver-core/driver-core-testing linus/master v5.16-rc7 next-20211224]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Bjorn-Andersson/typec-mux-Introduce-support-for-multiple-TypeC-muxes/20211228-132045
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
:::::: branch date: 19 hours ago
:::::: commit date: 19 hours ago
config: riscv-randconfig-c006-20211228 (https://download.01.org/0day-ci/archive/20211229/202112290722.EHAx7G1v-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 7171af744543433ac75b232eb7dfdaef7efd4d7a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://github.com/0day-ci/linux/commit/db0b002b5b2e1055b2df7b430438335a75dc1557
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Bjorn-Andersson/typec-mux-Introduce-support-for-multiple-TypeC-muxes/20211228-132045
        git checkout db0b002b5b2e1055b2df7b430438335a75dc1557
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
                                                                   ^~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5986:2: note: Loop condition is false. Execution continues on line 5991
           for_each_available_child_of_node(dev->of_node, child) {
           ^
   include/linux/of.h:1305:2: note: expanded from macro 'for_each_available_child_of_node'
           for (child = of_get_next_available_child(parent, NULL); child != NULL; \
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5991:6: note: Assuming 'num' is <= 'expected_phys'
           if (num > expected_phys)
               ^~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5991:2: note: Taking false branch
           if (num > expected_phys)
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5994:14: note: Calling 'devm_kcalloc'
           qmp->phys = devm_kcalloc(dev, num, sizeof(*qmp->phys), GFP_KERNEL);
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/device.h:223:9: note: Calling 'devm_kmalloc_array'
           return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/device.h:215:2: note: Taking false branch
           if (unlikely(check_mul_overflow(n, size, &bytes)))
           ^
   include/linux/device.h:218:2: note: Returning pointer, which participates in a condition later
           return devm_kmalloc(dev, bytes, flags);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/device.h:223:9: note: Returning from 'devm_kmalloc_array'
           return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/device.h:223:2: note: Returning pointer, which participates in a condition later
           return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5994:14: note: Returning from 'devm_kcalloc'
           qmp->phys = devm_kcalloc(dev, num, sizeof(*qmp->phys), GFP_KERNEL);
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5995:6: note: Assuming field 'phys' is non-null
           if (!qmp->phys)
               ^~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5995:2: note: Taking false branch
           if (!qmp->phys)
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:6007:49: note: Assuming 'child' is not equal to null
           for_each_available_child_of_node(dev->of_node, child) {
                                                          ^
   include/linux/of.h:1305:58: note: expanded from macro 'for_each_available_child_of_node'
           for (child = of_get_next_available_child(parent, NULL); child != NULL; \
                                                                   ^~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:6007:2: note: Loop condition is true.  Entering loop body
           for_each_available_child_of_node(dev->of_node, child) {
           ^
   include/linux/of.h:1305:2: note: expanded from macro 'for_each_available_child_of_node'
           for (child = of_get_next_available_child(parent, NULL); child != NULL; \
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:6008:7: note: Assuming the condition is true
                   if (of_node_name_eq(child, "dp-phy")) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:6008:3: note: Taking true branch
                   if (of_node_name_eq(child, "dp-phy")) {
                   ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:6009:4: note: Null pointer value stored to 'cfg'
                           cfg = dp_cfg;
                           ^~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:6016:7: note: Assuming the condition is false
                   if (of_node_name_eq(child, "port"))
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:6016:3: note: Taking false branch
                   if (of_node_name_eq(child, "port"))
                   ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:6020:53: note: Passing null pointer value via 5th parameter 'cfg'
                   ret = qcom_qmp_phy_create(dev, child, id, serdes, cfg);
                                                                     ^~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:6020:9: note: Calling 'qcom_qmp_phy_create'
                   ret = qcom_qmp_phy_create(dev, child, id, serdes, cfg);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5534:6: note: Assuming 'qphy' is non-null
           if (!qphy)
               ^~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5534:2: note: Taking false branch
           if (!qphy)
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5546:6: note: Assuming field 'tx' is non-null
           if (!qphy->tx)
               ^~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5546:2: note: Taking false branch
           if (!qphy->tx)
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5550:6: note: Assuming field 'rx' is non-null
           if (!qphy->rx)
               ^~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5550:2: note: Taking false branch
           if (!qphy->rx)
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5554:6: note: Assuming field 'pcs' is non-null
           if (!qphy->pcs)
               ^~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5554:2: note: Taking false branch
           if (!qphy->pcs)
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5563:6: note: Access to field 'is_dual_lane_phy' results in a dereference of a null pointer (loaded from variable 'cfg')
           if (cfg->is_dual_lane_phy) {
               ^~~
>> drivers/phy/qualcomm/phy-qcom-qmp.c:5833:6: warning: Branch condition evaluates to a garbage value [clang-analyzer-core.uninitialized.Branch]
           if (dp_mode)
               ^~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5804:2: note: 'dp_mode' declared without an initial value
           bool dp_mode;
           ^~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5807:2: note: 'Default' branch taken. Execution continues on line 5831
           switch (state->mode) {
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5833:6: note: Branch condition evaluates to a garbage value
           if (dp_mode)
               ^~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:6031:7: warning: Access to field 'type' results in a dereference of a null pointer (loaded from variable 'cfg') [clang-analyzer-core.NullDereference]
                   if (cfg->type == PHY_TYPE_USB3 || cfg->type == PHY_TYPE_PCIE) {
                       ^~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5911:2: note: 'dp_cfg' initialized to a null pointer value
           const struct qmp_phy_cfg *dp_cfg = NULL;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5916:6: note: Assuming 'qmp' is non-null
           if (!qmp)
               ^~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5916:2: note: Taking false branch
           if (!qmp)
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5920:2: note: Calling 'dev_set_drvdata'
           dev_set_drvdata(dev, qmp);
           ^~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/device.h:692:1: note: Returning without writing to 'data->phys', which participates in a condition later
   }
   ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5920:2: note: Returning from 'dev_set_drvdata'
           dev_set_drvdata(dev, qmp);
           ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5924:6: note: Assuming 'cfg' is non-null
           if (!cfg) {
               ^~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5924:2: note: Taking false branch
           if (!cfg) {
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5941:6: note: Calling 'IS_ERR'
           if (IS_ERR(serdes))
               ^~~~~~~~~~~~~~
   include/linux/err.h:36:9: note: Assuming the condition is false
           return IS_ERR_VALUE((unsigned long)ptr);
                  ^
   include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE'
   #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)
                           ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/err.h:36:2: note: Returning zero, which participates in a condition later
           return IS_ERR_VALUE((unsigned long)ptr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5941:6: note: Returning from 'IS_ERR'
           if (IS_ERR(serdes))
               ^~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5941:2: note: Taking false branch
           if (IS_ERR(serdes))
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5945:6: note: 'combo_cfg' is null
           if (combo_cfg || cfg->has_phy_dp_com_ctrl) {
               ^~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5945:6: note: Left side of '||' is false
   drivers/phy/qualcomm/phy-qcom-qmp.c:5945:19: note: Assuming field 'has_phy_dp_com_ctrl' is true
           if (combo_cfg || cfg->has_phy_dp_com_ctrl) {
                            ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5945:2: note: Taking true branch
           if (combo_cfg || cfg->has_phy_dp_com_ctrl) {
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5947:7: note: Calling 'IS_ERR'
                   if (IS_ERR(qmp->dp_com))
                       ^~~~~~~~~~~~~~~~~~~
   include/linux/err.h:36:9: note: Assuming the condition is false
           return IS_ERR_VALUE((unsigned long)ptr);
                  ^
   include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE'
   #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)
                           ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/err.h:36:2: note: Returning zero, which participates in a condition later
           return IS_ERR_VALUE((unsigned long)ptr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5947:7: note: Returning from 'IS_ERR'
                   if (IS_ERR(qmp->dp_com))
                       ^~~~~~~~~~~~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5947:3: note: Taking false branch
                   if (IS_ERR(qmp->dp_com))
                   ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5951:6: note: 'combo_cfg' is null
           if (combo_cfg) {
               ^~~~~~~~~
   drivers/phy/qualcomm/phy-qcom-qmp.c:5951:2: note: Taking false branch
           if (combo_cfg) {
           ^
   drivers/phy/qualcomm/phy-qcom-qmp.c:5963:2: note: Loop condition is false.  Exiting loop
           mutex_init(&qmp->phy_mutex);
           ^
   include/linux/mutex.h:101:32: note: expanded from macro 'mutex_init'

vim +5833 drivers/phy/qualcomm/phy-qcom-qmp.c

db0b002b5b2e10 Bjorn Andersson 2021-12-27  5798  
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5799  static int qcom_qmp_phy_typec_mux_set(struct typec_mux *mux,
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5800  				      struct typec_mux_state *state)
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5801  {
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5802  	struct qcom_qmp *qmp = typec_mux_get_drvdata(mux);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5803  	void __iomem *dp_com = qmp->dp_com;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5804  	bool dp_mode;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5805  	bool usb_mode;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5806  
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5807  	switch (state->mode) {
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5808  	case TYPEC_STATE_SAFE:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5809  	case TYPEC_STATE_USB:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5810  		/*
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5811  		 * TODO: Figure out if we should clear DP_MODE when we enter a
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5812  		 * USB-only state.
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5813  		 */
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5814  		dp_mode = true;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5815  		usb_mode = true;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5816  		break;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5817  	case TYPEC_DP_STATE_A:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5818  	case TYPEC_DP_STATE_C:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5819  	case TYPEC_DP_STATE_E:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5820  		dp_mode = true;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5821  		usb_mode = false;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5822  		break;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5823  	case TYPEC_DP_STATE_B:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5824  	case TYPEC_DP_STATE_D:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5825  	case TYPEC_DP_STATE_F:
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5826  		dp_mode = true;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5827  		usb_mode = true;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5828  		break;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5829  	}
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5830  
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5831  	qphy_setbits(dp_com, QPHY_V3_DP_COM_RESET_OVRD_CTRL,
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5832  		     SW_DPPHY_RESET_MUX | SW_USB3PHY_RESET_MUX);
db0b002b5b2e10 Bjorn Andersson 2021-12-27 @5833  	if (dp_mode)
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5834  		qphy_setbits(dp_com, QPHY_V3_DP_COM_PHY_MODE_CTRL, DP_MODE);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5835  	else
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5836  		qphy_clrbits(dp_com, QPHY_V3_DP_COM_PHY_MODE_CTRL, DP_MODE);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5837  
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5838  	if (usb_mode)
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5839  		qphy_setbits(dp_com, QPHY_V3_DP_COM_PHY_MODE_CTRL, USB3_MODE);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5840  	else
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5841  		qphy_clrbits(dp_com, QPHY_V3_DP_COM_PHY_MODE_CTRL, USB3_MODE);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5842  
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5843  	qphy_setbits(dp_com, QPHY_V3_DP_COM_SW_RESET, SW_RESET);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5844  	qphy_clrbits(dp_com, QPHY_V3_DP_COM_SWI_CTRL, 0x03);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5845  	qphy_clrbits(dp_com, QPHY_V3_DP_COM_SW_RESET, SW_RESET);
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5846  
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5847  	return 0;
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5848  }
db0b002b5b2e10 Bjorn Andersson 2021-12-27  5849  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 63+ messages in thread

end of thread, other threads:[~2022-01-07 19:15 UTC | newest]

Thread overview: 63+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-28  5:21 [PATCH 0/8] typec: mux: Introduce support for multiple TypeC muxes Bjorn Andersson
2021-12-28  5:21 ` Bjorn Andersson
2021-12-28  5:21 ` [PATCH 1/8] dt-bindings: phy: qcom,qmp-usb3-dp: Add altmode/switch properties Bjorn Andersson
2021-12-28  5:21   ` [PATCH 1/8] dt-bindings: phy: qcom, qmp-usb3-dp: " Bjorn Andersson
2021-12-28  5:21 ` [PATCH 2/8] phy: qcom-qmp: Register typec mux and orientation switch Bjorn Andersson
2021-12-28  5:21   ` Bjorn Andersson
2021-12-28 12:25   ` Dmitry Baryshkov
2021-12-28 12:25     ` Dmitry Baryshkov
2021-12-28 13:59   ` kernel test robot
2021-12-28 13:59     ` kernel test robot
2021-12-28 13:59     ` kernel test robot
2021-12-28 16:20     ` Bjorn Andersson
2021-12-28 16:20       ` Bjorn Andersson
2021-12-28 16:20       ` Bjorn Andersson
2021-12-29  5:27   ` Vinod Koul
2021-12-29  5:27     ` Vinod Koul
2022-01-07 19:15     ` Bjorn Andersson
2022-01-07 19:15       ` Bjorn Andersson
2021-12-28  5:21 ` [PATCH 3/8] device property: Helper to match multiple connections Bjorn Andersson
2021-12-28  5:21   ` Bjorn Andersson
2021-12-28 13:09   ` Dmitry Baryshkov
2021-12-28 13:09     ` Dmitry Baryshkov
2021-12-28 17:04     ` Bjorn Andersson
2021-12-28 17:04       ` Bjorn Andersson
2021-12-28 18:24       ` Dmitry Baryshkov
2021-12-28 18:24         ` Dmitry Baryshkov
2021-12-28 18:42         ` Bjorn Andersson
2021-12-28 18:42           ` Bjorn Andersson
2021-12-29  5:40       ` Vinod Koul
2021-12-29  5:40         ` Vinod Koul
2021-12-30  9:26   ` Heikki Krogerus
2021-12-30  9:26     ` Heikki Krogerus
2021-12-31  9:09     ` Sakari Ailus
2021-12-31  9:09       ` Sakari Ailus
2022-01-05 20:43       ` Bjorn Andersson
2022-01-05 20:43         ` Bjorn Andersson
2022-01-07 14:33         ` Sakari Ailus
2022-01-07 14:33           ` Sakari Ailus
2022-01-07 15:15           ` Bjorn Andersson
2022-01-07 15:15             ` Bjorn Andersson
2021-12-28  5:21 ` [PATCH 4/8] device property: Use multi-connection matchers for single case Bjorn Andersson
2021-12-28  5:21   ` Bjorn Andersson
2021-12-28  5:21 ` [PATCH 5/8] typec: mux: Introduce indirection Bjorn Andersson
2021-12-28  5:21   ` Bjorn Andersson
2021-12-28  5:21 ` [PATCH 6/8] typec: mux: Allow multiple mux_devs per mux Bjorn Andersson
2021-12-28  5:21   ` Bjorn Andersson
2021-12-28 16:04   ` Dmitry Baryshkov
2021-12-28 16:04     ` Dmitry Baryshkov
2021-12-28 16:40     ` Bjorn Andersson
2021-12-28 16:40       ` Bjorn Andersson
2021-12-28  5:21 ` [PATCH 7/8] dt-bindings: usb: Add binding for fcs,fsa4480 Bjorn Andersson
2021-12-28  5:21   ` Bjorn Andersson
2021-12-28  5:21 ` [PATCH 8/8] usb: typec: mux: Add On Semi fsa4480 driver Bjorn Andersson
2021-12-28  5:21   ` Bjorn Andersson
2021-12-28 12:20 ` [PATCH 0/8] typec: mux: Introduce support for multiple TypeC muxes Hans de Goede
2021-12-28 12:20   ` Hans de Goede
2021-12-28 17:08   ` Bjorn Andersson
2021-12-28 17:08     ` Bjorn Andersson
2021-12-28 15:41 [PATCH 6/8] typec: mux: Allow multiple mux_devs per mux kernel test robot
2022-01-06 10:43 ` Dan Carpenter
2022-01-06 10:43 ` Dan Carpenter
2022-01-06 10:43 ` Dan Carpenter
2021-12-28 23:59 [PATCH 2/8] phy: qcom-qmp: Register typec mux and orientation switch kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.