Message ID | 1617889760-17733-2-git-send-email-liulongfang@huawei.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | USB:ehci:fix the no SRBN register problem | expand |
On Thu, Apr 08, 2021 at 09:49:19PM +0800, Longfang Liu wrote: > Some types of EHCI controllers do not have SBRN registers. > By comparing the white list, the operation of reading the SBRN > registers is skipped. > > Subsequent EHCI controller types without SBRN registers can be > directly added to the white list. > > The current patch does not affect the drive function. > > Signed-off-by: Longfang Liu <liulongfang@huawei.com> > --- > drivers/usb/host/ehci-pci.c | 28 ++++++++++++++++++++++++---- > 1 file changed, 24 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c > index 3c3820a..534e906 100644 > --- a/drivers/usb/host/ehci-pci.c > +++ b/drivers/usb/host/ehci-pci.c > @@ -47,6 +47,29 @@ static inline bool is_bypassed_id(struct pci_dev *pdev) > return !!pci_match_id(bypass_pci_id_table, pdev); > } > > +static const struct usb_nosbrn_whitelist_entry { Again, please do not use the term "whitelist", it is vague and you can pick a better term for this. How about: struct ehci_nosbrn; thanks, greg k-h
Hi Longfang, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on usb/usb-testing] [also build test WARNING on v5.12-rc6 next-20210408] [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/Longfang-Liu/USB-ehci-fix-the-no-SRBN-register-problem/20210408-215249 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: x86_64-randconfig-s022-20210408 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.3-279-g6d5d9b42-dirty # https://github.com/0day-ci/linux/commit/01b93fbbf8fb6137c7779062232c0fe8c1592940 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Longfang-Liu/USB-ehci-fix-the-no-SRBN-register-problem/20210408-215249 git checkout 01b93fbbf8fb6137c7779062232c0fe8c1592940 # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> sparse warnings: (new ones prefixed by >>) >> drivers/usb/host/ehci-pci.c:57:10: sparse: sparse: incorrect type in initializer (different base types) @@ expected unsigned short [usertype] vendor @@ got void * @@ drivers/usb/host/ehci-pci.c:57:10: sparse: expected unsigned short [usertype] vendor drivers/usb/host/ehci-pci.c:57:10: sparse: got void * >> drivers/usb/host/ehci-pci.c:57:16: sparse: sparse: incorrect type in initializer (different base types) @@ expected unsigned short [usertype] device @@ got void * @@ drivers/usb/host/ehci-pci.c:57:16: sparse: expected unsigned short [usertype] device drivers/usb/host/ehci-pci.c:57:16: sparse: got void * vim +57 drivers/usb/host/ehci-pci.c 49 50 static const struct usb_nosbrn_whitelist_entry { 51 u16 vendor; 52 u16 device; 53 } usb_nosbrn_whitelist[] = { 54 /* STMICRO ConneXT has no sbrn register */ 55 {PCI_VENDOR_ID_STMICRO, PCI_DEVICE_ID_STMICRO_USB_HOST}, 56 /* End of list */ > 57 {NULL, NULL} 58 }; 59 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Longfang, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on usb/usb-testing] [also build test WARNING on v5.12-rc6 next-20210408] [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/Longfang-Liu/USB-ehci-fix-the-no-SRBN-register-problem/20210408-215249 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: riscv-randconfig-r025-20210408 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 56ea2e2fdd691136d5e6631fa0e447173694b82c) 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/01b93fbbf8fb6137c7779062232c0fe8c1592940 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Longfang-Liu/USB-ehci-fix-the-no-SRBN-register-problem/20210408-215249 git checkout 01b93fbbf8fb6137c7779062232c0fe8c1592940 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/usb/host/ehci-pci.c:57:3: warning: incompatible pointer to integer conversion initializing 'u16' (aka 'unsigned short') with an expression of type 'void *' [-Wint-conversion] {NULL, NULL} ^~~~ include/linux/stddef.h:8:14: note: expanded from macro 'NULL' #define NULL ((void *)0) ^~~~~~~~~~~ drivers/usb/host/ehci-pci.c:57:9: warning: incompatible pointer to integer conversion initializing 'u16' (aka 'unsigned short') with an expression of type 'void *' [-Wint-conversion] {NULL, NULL} ^~~~ include/linux/stddef.h:8:14: note: expanded from macro 'NULL' #define NULL ((void *)0) ^~~~~~~~~~~ 2 warnings generated. vim +57 drivers/usb/host/ehci-pci.c 49 50 static const struct usb_nosbrn_whitelist_entry { 51 u16 vendor; 52 u16 device; 53 } usb_nosbrn_whitelist[] = { 54 /* STMICRO ConneXT has no sbrn register */ 55 {PCI_VENDOR_ID_STMICRO, PCI_DEVICE_ID_STMICRO_USB_HOST}, 56 /* End of list */ > 57 {NULL, NULL} 58 }; 59 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 3c3820a..534e906 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c @@ -47,6 +47,29 @@ static inline bool is_bypassed_id(struct pci_dev *pdev) return !!pci_match_id(bypass_pci_id_table, pdev); } +static const struct usb_nosbrn_whitelist_entry { + u16 vendor; + u16 device; +} usb_nosbrn_whitelist[] = { + /* STMICRO ConneXT has no sbrn register */ + {PCI_VENDOR_ID_STMICRO, PCI_DEVICE_ID_STMICRO_USB_HOST}, + /* End of list */ + {NULL, NULL} +}; + +static bool usb_forbid_sbrn_read(struct pci_dev *pdev) +{ + const struct usb_nosbrn_whitelist_entry *entry; + + for (entry = usb_nosbrn_whitelist; entry->vendor; entry++) { + if (pdev->vendor == entry->vendor && + pdev->device == entry->device) + return true; + } + + return false; +} + /* * 0x84 is the offset of in/out threshold register, * and it is the same offset as the register of 'hostpc'. @@ -288,10 +311,7 @@ static int ehci_pci_setup(struct usb_hcd *hcd) } /* Serial Bus Release Number is at PCI 0x60 offset */ - if (pdev->vendor == PCI_VENDOR_ID_STMICRO - && pdev->device == PCI_DEVICE_ID_STMICRO_USB_HOST) - ; /* ConneXT has no sbrn register */ - else + if (!usb_forbid_sbrn_read(pdev)) pci_read_config_byte(pdev, 0x60, &ehci->sbrn); /* Keep this around for a while just in case some EHCI
Some types of EHCI controllers do not have SBRN registers. By comparing the white list, the operation of reading the SBRN registers is skipped. Subsequent EHCI controller types without SBRN registers can be directly added to the white list. The current patch does not affect the drive function. Signed-off-by: Longfang Liu <liulongfang@huawei.com> --- drivers/usb/host/ehci-pci.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-)