2021-04-08 13:53:22

by liulongfang

[permalink] [raw]
Subject: [PATCH v2 1/2] USB:ehci:Add a whitelist for EHCI controllers

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 <[email protected]>
---
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 {
+ 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
--
2.8.1


2021-04-08 14:54:31

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] USB:ehci:Add a whitelist for EHCI controllers

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 <[email protected]>
> ---
> 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

2021-04-08 17:33:07

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] USB:ehci:Add a whitelist for EHCI controllers

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 <[email protected]>


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/[email protected]


Attachments:
(No filename) (2.51 kB)
.config.gz (31.77 kB)
Download all attachments

2021-04-08 20:35:51

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] USB:ehci:Add a whitelist for EHCI controllers

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 <[email protected]>

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/[email protected]


Attachments:
(No filename) (2.83 kB)
.config.gz (25.29 kB)
Download all attachments