From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [arm-platforms:irq/domain_cleanup 5/25] drivers/staging/octeon-usb/octeon-hcd.c:3548:26: error: dereferencing pointer to incomplete type 'struct device_node'
Date: Sun, 16 May 2021 02:27:08 +0800 [thread overview]
Message-ID: <202105160201.AT9dpMNa-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 14226 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/domain_cleanup
head: dee94333f76d0bd7b6c8302e377654b6e103b71b
commit: 59463db82808e6588f589b75f7fef5f0c0c2012d [5/25] MIPS: Do not include linux/irqdomain.h from asm/irq.h
config: mips-cavium_octeon_defconfig (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.0
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
# https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/commit/?id=59463db82808e6588f589b75f7fef5f0c0c2012d
git remote add arm-platforms https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git
git fetch --no-tags arm-platforms irq/domain_cleanup
git checkout 59463db82808e6588f589b75f7fef5f0c0c2012d
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=mips
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/staging/octeon-usb/octeon-hcd.c: In function 'octeon_usb_probe':
>> drivers/staging/octeon-usb/octeon-hcd.c:3548:26: error: dereferencing pointer to incomplete type 'struct device_node'
3548 | usbn_node = dev->of_node->parent;
| ^~
>> drivers/staging/octeon-usb/octeon-hcd.c:3550:6: error: implicit declaration of function 'of_property_read_u32' [-Werror=implicit-function-declaration]
3550 | i = of_property_read_u32(usbn_node,
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/staging/octeon-usb/octeon-hcd.c:3575:6: error: implicit declaration of function 'of_property_read_string' [-Werror=implicit-function-declaration]
3575 | i = of_property_read_string(usbn_node,
| ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/octeon-usb/octeon-hcd.c:3600:9: error: implicit declaration of function 'irq_create_mapping' [-Werror=implicit-function-declaration]
3600 | irq = irq_create_mapping(NULL, hwirq);
| ^~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +3548 drivers/staging/octeon-usb/octeon-hcd.c
96b06c0a16f737 Chris Packham 2020-02-05 3527
96b06c0a16f737 Chris Packham 2020-02-05 3528 static int octeon_usb_probe(struct platform_device *pdev)
96b06c0a16f737 Chris Packham 2020-02-05 3529 {
96b06c0a16f737 Chris Packham 2020-02-05 3530 int status;
96b06c0a16f737 Chris Packham 2020-02-05 3531 int initialize_flags;
96b06c0a16f737 Chris Packham 2020-02-05 3532 int usb_num;
96b06c0a16f737 Chris Packham 2020-02-05 3533 struct resource *res_mem;
96b06c0a16f737 Chris Packham 2020-02-05 3534 struct device_node *usbn_node;
96b06c0a16f737 Chris Packham 2020-02-05 3535 int irq = platform_get_irq(pdev, 0);
96b06c0a16f737 Chris Packham 2020-02-05 3536 struct device *dev = &pdev->dev;
96b06c0a16f737 Chris Packham 2020-02-05 3537 struct octeon_hcd *usb;
96b06c0a16f737 Chris Packham 2020-02-05 3538 struct usb_hcd *hcd;
96b06c0a16f737 Chris Packham 2020-02-05 3539 u32 clock_rate = 48000000;
96b06c0a16f737 Chris Packham 2020-02-05 3540 bool is_crystal_clock = false;
96b06c0a16f737 Chris Packham 2020-02-05 3541 const char *clock_type;
96b06c0a16f737 Chris Packham 2020-02-05 3542 int i;
96b06c0a16f737 Chris Packham 2020-02-05 3543
96b06c0a16f737 Chris Packham 2020-02-05 3544 if (!dev->of_node) {
96b06c0a16f737 Chris Packham 2020-02-05 3545 dev_err(dev, "Error: empty of_node\n");
96b06c0a16f737 Chris Packham 2020-02-05 3546 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3547 }
96b06c0a16f737 Chris Packham 2020-02-05 @3548 usbn_node = dev->of_node->parent;
96b06c0a16f737 Chris Packham 2020-02-05 3549
96b06c0a16f737 Chris Packham 2020-02-05 @3550 i = of_property_read_u32(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3551 "clock-frequency", &clock_rate);
96b06c0a16f737 Chris Packham 2020-02-05 3552 if (i)
96b06c0a16f737 Chris Packham 2020-02-05 3553 i = of_property_read_u32(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3554 "refclk-frequency", &clock_rate);
96b06c0a16f737 Chris Packham 2020-02-05 3555 if (i) {
96b06c0a16f737 Chris Packham 2020-02-05 3556 dev_err(dev, "No USBN \"clock-frequency\"\n");
96b06c0a16f737 Chris Packham 2020-02-05 3557 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3558 }
96b06c0a16f737 Chris Packham 2020-02-05 3559 switch (clock_rate) {
96b06c0a16f737 Chris Packham 2020-02-05 3560 case 12000000:
96b06c0a16f737 Chris Packham 2020-02-05 3561 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ;
96b06c0a16f737 Chris Packham 2020-02-05 3562 break;
96b06c0a16f737 Chris Packham 2020-02-05 3563 case 24000000:
96b06c0a16f737 Chris Packham 2020-02-05 3564 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ;
96b06c0a16f737 Chris Packham 2020-02-05 3565 break;
96b06c0a16f737 Chris Packham 2020-02-05 3566 case 48000000:
96b06c0a16f737 Chris Packham 2020-02-05 3567 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ;
96b06c0a16f737 Chris Packham 2020-02-05 3568 break;
96b06c0a16f737 Chris Packham 2020-02-05 3569 default:
96b06c0a16f737 Chris Packham 2020-02-05 3570 dev_err(dev, "Illegal USBN \"clock-frequency\" %u\n",
96b06c0a16f737 Chris Packham 2020-02-05 3571 clock_rate);
96b06c0a16f737 Chris Packham 2020-02-05 3572 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3573 }
96b06c0a16f737 Chris Packham 2020-02-05 3574
96b06c0a16f737 Chris Packham 2020-02-05 @3575 i = of_property_read_string(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3576 "cavium,refclk-type", &clock_type);
96b06c0a16f737 Chris Packham 2020-02-05 3577 if (i)
96b06c0a16f737 Chris Packham 2020-02-05 3578 i = of_property_read_string(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3579 "refclk-type", &clock_type);
96b06c0a16f737 Chris Packham 2020-02-05 3580
96b06c0a16f737 Chris Packham 2020-02-05 3581 if (!i && strcmp("crystal", clock_type) == 0)
96b06c0a16f737 Chris Packham 2020-02-05 3582 is_crystal_clock = true;
96b06c0a16f737 Chris Packham 2020-02-05 3583
96b06c0a16f737 Chris Packham 2020-02-05 3584 if (is_crystal_clock)
96b06c0a16f737 Chris Packham 2020-02-05 3585 initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI;
96b06c0a16f737 Chris Packham 2020-02-05 3586 else
96b06c0a16f737 Chris Packham 2020-02-05 3587 initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND;
96b06c0a16f737 Chris Packham 2020-02-05 3588
96b06c0a16f737 Chris Packham 2020-02-05 3589 res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
96b06c0a16f737 Chris Packham 2020-02-05 3590 if (!res_mem) {
96b06c0a16f737 Chris Packham 2020-02-05 3591 dev_err(dev, "found no memory resource\n");
96b06c0a16f737 Chris Packham 2020-02-05 3592 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3593 }
96b06c0a16f737 Chris Packham 2020-02-05 3594 usb_num = (res_mem->start >> 44) & 1;
96b06c0a16f737 Chris Packham 2020-02-05 3595
96b06c0a16f737 Chris Packham 2020-02-05 3596 if (irq < 0) {
96b06c0a16f737 Chris Packham 2020-02-05 3597 /* Defective device tree, but we know how to fix it. */
96b06c0a16f737 Chris Packham 2020-02-05 3598 irq_hw_number_t hwirq = usb_num ? (1 << 6) + 17 : 56;
96b06c0a16f737 Chris Packham 2020-02-05 3599
96b06c0a16f737 Chris Packham 2020-02-05 @3600 irq = irq_create_mapping(NULL, hwirq);
96b06c0a16f737 Chris Packham 2020-02-05 3601 }
96b06c0a16f737 Chris Packham 2020-02-05 3602
96b06c0a16f737 Chris Packham 2020-02-05 3603 /*
96b06c0a16f737 Chris Packham 2020-02-05 3604 * Set the DMA mask to 64bits so we get buffers already translated for
96b06c0a16f737 Chris Packham 2020-02-05 3605 * DMA.
96b06c0a16f737 Chris Packham 2020-02-05 3606 */
96b06c0a16f737 Chris Packham 2020-02-05 3607 i = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(64));
96b06c0a16f737 Chris Packham 2020-02-05 3608 if (i)
96b06c0a16f737 Chris Packham 2020-02-05 3609 return i;
96b06c0a16f737 Chris Packham 2020-02-05 3610
96b06c0a16f737 Chris Packham 2020-02-05 3611 /*
96b06c0a16f737 Chris Packham 2020-02-05 3612 * Only cn52XX and cn56XX have DWC_OTG USB hardware and the
96b06c0a16f737 Chris Packham 2020-02-05 3613 * IOB priority registers. Under heavy network load USB
96b06c0a16f737 Chris Packham 2020-02-05 3614 * hardware can be starved by the IOB causing a crash. Give
96b06c0a16f737 Chris Packham 2020-02-05 3615 * it a priority boost if it has been waiting more than 400
96b06c0a16f737 Chris Packham 2020-02-05 3616 * cycles to avoid this situation.
96b06c0a16f737 Chris Packham 2020-02-05 3617 *
96b06c0a16f737 Chris Packham 2020-02-05 3618 * Testing indicates that a cnt_val of 8192 is not sufficient,
96b06c0a16f737 Chris Packham 2020-02-05 3619 * but no failures are seen with 4096. We choose a value of
96b06c0a16f737 Chris Packham 2020-02-05 3620 * 400 to give a safety factor of 10.
96b06c0a16f737 Chris Packham 2020-02-05 3621 */
96b06c0a16f737 Chris Packham 2020-02-05 3622 if (OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)) {
96b06c0a16f737 Chris Packham 2020-02-05 3623 union cvmx_iob_n2c_l2c_pri_cnt pri_cnt;
96b06c0a16f737 Chris Packham 2020-02-05 3624
96b06c0a16f737 Chris Packham 2020-02-05 3625 pri_cnt.u64 = 0;
96b06c0a16f737 Chris Packham 2020-02-05 3626 pri_cnt.s.cnt_enb = 1;
96b06c0a16f737 Chris Packham 2020-02-05 3627 pri_cnt.s.cnt_val = 400;
96b06c0a16f737 Chris Packham 2020-02-05 3628 cvmx_write_csr(CVMX_IOB_N2C_L2C_PRI_CNT, pri_cnt.u64);
96b06c0a16f737 Chris Packham 2020-02-05 3629 }
96b06c0a16f737 Chris Packham 2020-02-05 3630
96b06c0a16f737 Chris Packham 2020-02-05 3631 hcd = usb_create_hcd(&octeon_hc_driver, dev, dev_name(dev));
96b06c0a16f737 Chris Packham 2020-02-05 3632 if (!hcd) {
96b06c0a16f737 Chris Packham 2020-02-05 3633 dev_dbg(dev, "Failed to allocate memory for HCD\n");
96b06c0a16f737 Chris Packham 2020-02-05 3634 return -1;
96b06c0a16f737 Chris Packham 2020-02-05 3635 }
96b06c0a16f737 Chris Packham 2020-02-05 3636 hcd->uses_new_polling = 1;
96b06c0a16f737 Chris Packham 2020-02-05 3637 usb = (struct octeon_hcd *)hcd->hcd_priv;
96b06c0a16f737 Chris Packham 2020-02-05 3638
96b06c0a16f737 Chris Packham 2020-02-05 3639 spin_lock_init(&usb->lock);
96b06c0a16f737 Chris Packham 2020-02-05 3640
96b06c0a16f737 Chris Packham 2020-02-05 3641 usb->init_flags = initialize_flags;
96b06c0a16f737 Chris Packham 2020-02-05 3642
96b06c0a16f737 Chris Packham 2020-02-05 3643 /* Initialize the USB state structure */
96b06c0a16f737 Chris Packham 2020-02-05 3644 usb->index = usb_num;
96b06c0a16f737 Chris Packham 2020-02-05 3645 INIT_LIST_HEAD(&usb->idle_pipes);
96b06c0a16f737 Chris Packham 2020-02-05 3646 for (i = 0; i < ARRAY_SIZE(usb->active_pipes); i++)
96b06c0a16f737 Chris Packham 2020-02-05 3647 INIT_LIST_HEAD(&usb->active_pipes[i]);
96b06c0a16f737 Chris Packham 2020-02-05 3648
96b06c0a16f737 Chris Packham 2020-02-05 3649 /* Due to an errata, CN31XX doesn't support DMA */
96b06c0a16f737 Chris Packham 2020-02-05 3650 if (OCTEON_IS_MODEL(OCTEON_CN31XX)) {
96b06c0a16f737 Chris Packham 2020-02-05 3651 usb->init_flags |= CVMX_USB_INITIALIZE_FLAGS_NO_DMA;
96b06c0a16f737 Chris Packham 2020-02-05 3652 /* Only use one channel with non DMA */
96b06c0a16f737 Chris Packham 2020-02-05 3653 usb->idle_hardware_channels = 0x1;
96b06c0a16f737 Chris Packham 2020-02-05 3654 } else if (OCTEON_IS_MODEL(OCTEON_CN5XXX)) {
96b06c0a16f737 Chris Packham 2020-02-05 3655 /* CN5XXX have an errata with channel 3 */
96b06c0a16f737 Chris Packham 2020-02-05 3656 usb->idle_hardware_channels = 0xf7;
96b06c0a16f737 Chris Packham 2020-02-05 3657 } else {
96b06c0a16f737 Chris Packham 2020-02-05 3658 usb->idle_hardware_channels = 0xff;
96b06c0a16f737 Chris Packham 2020-02-05 3659 }
96b06c0a16f737 Chris Packham 2020-02-05 3660
96b06c0a16f737 Chris Packham 2020-02-05 3661 status = cvmx_usb_initialize(dev, usb);
96b06c0a16f737 Chris Packham 2020-02-05 3662 if (status) {
96b06c0a16f737 Chris Packham 2020-02-05 3663 dev_dbg(dev, "USB initialization failed with %d\n", status);
96b06c0a16f737 Chris Packham 2020-02-05 3664 usb_put_hcd(hcd);
96b06c0a16f737 Chris Packham 2020-02-05 3665 return -1;
96b06c0a16f737 Chris Packham 2020-02-05 3666 }
96b06c0a16f737 Chris Packham 2020-02-05 3667
96b06c0a16f737 Chris Packham 2020-02-05 3668 status = usb_add_hcd(hcd, irq, 0);
96b06c0a16f737 Chris Packham 2020-02-05 3669 if (status) {
96b06c0a16f737 Chris Packham 2020-02-05 3670 dev_dbg(dev, "USB add HCD failed with %d\n", status);
96b06c0a16f737 Chris Packham 2020-02-05 3671 usb_put_hcd(hcd);
96b06c0a16f737 Chris Packham 2020-02-05 3672 return -1;
96b06c0a16f737 Chris Packham 2020-02-05 3673 }
96b06c0a16f737 Chris Packham 2020-02-05 3674 device_wakeup_enable(hcd->self.controller);
96b06c0a16f737 Chris Packham 2020-02-05 3675
96b06c0a16f737 Chris Packham 2020-02-05 3676 dev_info(dev, "Registered HCD for port %d on irq %d\n", usb_num, irq);
96b06c0a16f737 Chris Packham 2020-02-05 3677
96b06c0a16f737 Chris Packham 2020-02-05 3678 return 0;
96b06c0a16f737 Chris Packham 2020-02-05 3679 }
96b06c0a16f737 Chris Packham 2020-02-05 3680
:::::: The code at line 3548 was first introduced by commit
:::::: 96b06c0a16f737e9ea7dff1e23dd5f6d847e6731 Revert "staging: octeon-usb: delete the octeon usb host controller driver"
:::::: TO: Chris Packham <chris.packham@alliedtelesis.co.nz>
:::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 18966 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Marc Zyngier <maz@kernel.org>
Cc: kbuild-all@lists.01.org, linux-arm-kernel@lists.infradead.org
Subject: [arm-platforms:irq/domain_cleanup 5/25] drivers/staging/octeon-usb/octeon-hcd.c:3548:26: error: dereferencing pointer to incomplete type 'struct device_node'
Date: Sun, 16 May 2021 02:27:08 +0800 [thread overview]
Message-ID: <202105160201.AT9dpMNa-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 14022 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/domain_cleanup
head: dee94333f76d0bd7b6c8302e377654b6e103b71b
commit: 59463db82808e6588f589b75f7fef5f0c0c2012d [5/25] MIPS: Do not include linux/irqdomain.h from asm/irq.h
config: mips-cavium_octeon_defconfig (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.0
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
# https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/commit/?id=59463db82808e6588f589b75f7fef5f0c0c2012d
git remote add arm-platforms https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git
git fetch --no-tags arm-platforms irq/domain_cleanup
git checkout 59463db82808e6588f589b75f7fef5f0c0c2012d
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=mips
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/staging/octeon-usb/octeon-hcd.c: In function 'octeon_usb_probe':
>> drivers/staging/octeon-usb/octeon-hcd.c:3548:26: error: dereferencing pointer to incomplete type 'struct device_node'
3548 | usbn_node = dev->of_node->parent;
| ^~
>> drivers/staging/octeon-usb/octeon-hcd.c:3550:6: error: implicit declaration of function 'of_property_read_u32' [-Werror=implicit-function-declaration]
3550 | i = of_property_read_u32(usbn_node,
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/staging/octeon-usb/octeon-hcd.c:3575:6: error: implicit declaration of function 'of_property_read_string' [-Werror=implicit-function-declaration]
3575 | i = of_property_read_string(usbn_node,
| ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/octeon-usb/octeon-hcd.c:3600:9: error: implicit declaration of function 'irq_create_mapping' [-Werror=implicit-function-declaration]
3600 | irq = irq_create_mapping(NULL, hwirq);
| ^~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +3548 drivers/staging/octeon-usb/octeon-hcd.c
96b06c0a16f737 Chris Packham 2020-02-05 3527
96b06c0a16f737 Chris Packham 2020-02-05 3528 static int octeon_usb_probe(struct platform_device *pdev)
96b06c0a16f737 Chris Packham 2020-02-05 3529 {
96b06c0a16f737 Chris Packham 2020-02-05 3530 int status;
96b06c0a16f737 Chris Packham 2020-02-05 3531 int initialize_flags;
96b06c0a16f737 Chris Packham 2020-02-05 3532 int usb_num;
96b06c0a16f737 Chris Packham 2020-02-05 3533 struct resource *res_mem;
96b06c0a16f737 Chris Packham 2020-02-05 3534 struct device_node *usbn_node;
96b06c0a16f737 Chris Packham 2020-02-05 3535 int irq = platform_get_irq(pdev, 0);
96b06c0a16f737 Chris Packham 2020-02-05 3536 struct device *dev = &pdev->dev;
96b06c0a16f737 Chris Packham 2020-02-05 3537 struct octeon_hcd *usb;
96b06c0a16f737 Chris Packham 2020-02-05 3538 struct usb_hcd *hcd;
96b06c0a16f737 Chris Packham 2020-02-05 3539 u32 clock_rate = 48000000;
96b06c0a16f737 Chris Packham 2020-02-05 3540 bool is_crystal_clock = false;
96b06c0a16f737 Chris Packham 2020-02-05 3541 const char *clock_type;
96b06c0a16f737 Chris Packham 2020-02-05 3542 int i;
96b06c0a16f737 Chris Packham 2020-02-05 3543
96b06c0a16f737 Chris Packham 2020-02-05 3544 if (!dev->of_node) {
96b06c0a16f737 Chris Packham 2020-02-05 3545 dev_err(dev, "Error: empty of_node\n");
96b06c0a16f737 Chris Packham 2020-02-05 3546 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3547 }
96b06c0a16f737 Chris Packham 2020-02-05 @3548 usbn_node = dev->of_node->parent;
96b06c0a16f737 Chris Packham 2020-02-05 3549
96b06c0a16f737 Chris Packham 2020-02-05 @3550 i = of_property_read_u32(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3551 "clock-frequency", &clock_rate);
96b06c0a16f737 Chris Packham 2020-02-05 3552 if (i)
96b06c0a16f737 Chris Packham 2020-02-05 3553 i = of_property_read_u32(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3554 "refclk-frequency", &clock_rate);
96b06c0a16f737 Chris Packham 2020-02-05 3555 if (i) {
96b06c0a16f737 Chris Packham 2020-02-05 3556 dev_err(dev, "No USBN \"clock-frequency\"\n");
96b06c0a16f737 Chris Packham 2020-02-05 3557 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3558 }
96b06c0a16f737 Chris Packham 2020-02-05 3559 switch (clock_rate) {
96b06c0a16f737 Chris Packham 2020-02-05 3560 case 12000000:
96b06c0a16f737 Chris Packham 2020-02-05 3561 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ;
96b06c0a16f737 Chris Packham 2020-02-05 3562 break;
96b06c0a16f737 Chris Packham 2020-02-05 3563 case 24000000:
96b06c0a16f737 Chris Packham 2020-02-05 3564 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ;
96b06c0a16f737 Chris Packham 2020-02-05 3565 break;
96b06c0a16f737 Chris Packham 2020-02-05 3566 case 48000000:
96b06c0a16f737 Chris Packham 2020-02-05 3567 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ;
96b06c0a16f737 Chris Packham 2020-02-05 3568 break;
96b06c0a16f737 Chris Packham 2020-02-05 3569 default:
96b06c0a16f737 Chris Packham 2020-02-05 3570 dev_err(dev, "Illegal USBN \"clock-frequency\" %u\n",
96b06c0a16f737 Chris Packham 2020-02-05 3571 clock_rate);
96b06c0a16f737 Chris Packham 2020-02-05 3572 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3573 }
96b06c0a16f737 Chris Packham 2020-02-05 3574
96b06c0a16f737 Chris Packham 2020-02-05 @3575 i = of_property_read_string(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3576 "cavium,refclk-type", &clock_type);
96b06c0a16f737 Chris Packham 2020-02-05 3577 if (i)
96b06c0a16f737 Chris Packham 2020-02-05 3578 i = of_property_read_string(usbn_node,
96b06c0a16f737 Chris Packham 2020-02-05 3579 "refclk-type", &clock_type);
96b06c0a16f737 Chris Packham 2020-02-05 3580
96b06c0a16f737 Chris Packham 2020-02-05 3581 if (!i && strcmp("crystal", clock_type) == 0)
96b06c0a16f737 Chris Packham 2020-02-05 3582 is_crystal_clock = true;
96b06c0a16f737 Chris Packham 2020-02-05 3583
96b06c0a16f737 Chris Packham 2020-02-05 3584 if (is_crystal_clock)
96b06c0a16f737 Chris Packham 2020-02-05 3585 initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI;
96b06c0a16f737 Chris Packham 2020-02-05 3586 else
96b06c0a16f737 Chris Packham 2020-02-05 3587 initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND;
96b06c0a16f737 Chris Packham 2020-02-05 3588
96b06c0a16f737 Chris Packham 2020-02-05 3589 res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
96b06c0a16f737 Chris Packham 2020-02-05 3590 if (!res_mem) {
96b06c0a16f737 Chris Packham 2020-02-05 3591 dev_err(dev, "found no memory resource\n");
96b06c0a16f737 Chris Packham 2020-02-05 3592 return -ENXIO;
96b06c0a16f737 Chris Packham 2020-02-05 3593 }
96b06c0a16f737 Chris Packham 2020-02-05 3594 usb_num = (res_mem->start >> 44) & 1;
96b06c0a16f737 Chris Packham 2020-02-05 3595
96b06c0a16f737 Chris Packham 2020-02-05 3596 if (irq < 0) {
96b06c0a16f737 Chris Packham 2020-02-05 3597 /* Defective device tree, but we know how to fix it. */
96b06c0a16f737 Chris Packham 2020-02-05 3598 irq_hw_number_t hwirq = usb_num ? (1 << 6) + 17 : 56;
96b06c0a16f737 Chris Packham 2020-02-05 3599
96b06c0a16f737 Chris Packham 2020-02-05 @3600 irq = irq_create_mapping(NULL, hwirq);
96b06c0a16f737 Chris Packham 2020-02-05 3601 }
96b06c0a16f737 Chris Packham 2020-02-05 3602
96b06c0a16f737 Chris Packham 2020-02-05 3603 /*
96b06c0a16f737 Chris Packham 2020-02-05 3604 * Set the DMA mask to 64bits so we get buffers already translated for
96b06c0a16f737 Chris Packham 2020-02-05 3605 * DMA.
96b06c0a16f737 Chris Packham 2020-02-05 3606 */
96b06c0a16f737 Chris Packham 2020-02-05 3607 i = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(64));
96b06c0a16f737 Chris Packham 2020-02-05 3608 if (i)
96b06c0a16f737 Chris Packham 2020-02-05 3609 return i;
96b06c0a16f737 Chris Packham 2020-02-05 3610
96b06c0a16f737 Chris Packham 2020-02-05 3611 /*
96b06c0a16f737 Chris Packham 2020-02-05 3612 * Only cn52XX and cn56XX have DWC_OTG USB hardware and the
96b06c0a16f737 Chris Packham 2020-02-05 3613 * IOB priority registers. Under heavy network load USB
96b06c0a16f737 Chris Packham 2020-02-05 3614 * hardware can be starved by the IOB causing a crash. Give
96b06c0a16f737 Chris Packham 2020-02-05 3615 * it a priority boost if it has been waiting more than 400
96b06c0a16f737 Chris Packham 2020-02-05 3616 * cycles to avoid this situation.
96b06c0a16f737 Chris Packham 2020-02-05 3617 *
96b06c0a16f737 Chris Packham 2020-02-05 3618 * Testing indicates that a cnt_val of 8192 is not sufficient,
96b06c0a16f737 Chris Packham 2020-02-05 3619 * but no failures are seen with 4096. We choose a value of
96b06c0a16f737 Chris Packham 2020-02-05 3620 * 400 to give a safety factor of 10.
96b06c0a16f737 Chris Packham 2020-02-05 3621 */
96b06c0a16f737 Chris Packham 2020-02-05 3622 if (OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)) {
96b06c0a16f737 Chris Packham 2020-02-05 3623 union cvmx_iob_n2c_l2c_pri_cnt pri_cnt;
96b06c0a16f737 Chris Packham 2020-02-05 3624
96b06c0a16f737 Chris Packham 2020-02-05 3625 pri_cnt.u64 = 0;
96b06c0a16f737 Chris Packham 2020-02-05 3626 pri_cnt.s.cnt_enb = 1;
96b06c0a16f737 Chris Packham 2020-02-05 3627 pri_cnt.s.cnt_val = 400;
96b06c0a16f737 Chris Packham 2020-02-05 3628 cvmx_write_csr(CVMX_IOB_N2C_L2C_PRI_CNT, pri_cnt.u64);
96b06c0a16f737 Chris Packham 2020-02-05 3629 }
96b06c0a16f737 Chris Packham 2020-02-05 3630
96b06c0a16f737 Chris Packham 2020-02-05 3631 hcd = usb_create_hcd(&octeon_hc_driver, dev, dev_name(dev));
96b06c0a16f737 Chris Packham 2020-02-05 3632 if (!hcd) {
96b06c0a16f737 Chris Packham 2020-02-05 3633 dev_dbg(dev, "Failed to allocate memory for HCD\n");
96b06c0a16f737 Chris Packham 2020-02-05 3634 return -1;
96b06c0a16f737 Chris Packham 2020-02-05 3635 }
96b06c0a16f737 Chris Packham 2020-02-05 3636 hcd->uses_new_polling = 1;
96b06c0a16f737 Chris Packham 2020-02-05 3637 usb = (struct octeon_hcd *)hcd->hcd_priv;
96b06c0a16f737 Chris Packham 2020-02-05 3638
96b06c0a16f737 Chris Packham 2020-02-05 3639 spin_lock_init(&usb->lock);
96b06c0a16f737 Chris Packham 2020-02-05 3640
96b06c0a16f737 Chris Packham 2020-02-05 3641 usb->init_flags = initialize_flags;
96b06c0a16f737 Chris Packham 2020-02-05 3642
96b06c0a16f737 Chris Packham 2020-02-05 3643 /* Initialize the USB state structure */
96b06c0a16f737 Chris Packham 2020-02-05 3644 usb->index = usb_num;
96b06c0a16f737 Chris Packham 2020-02-05 3645 INIT_LIST_HEAD(&usb->idle_pipes);
96b06c0a16f737 Chris Packham 2020-02-05 3646 for (i = 0; i < ARRAY_SIZE(usb->active_pipes); i++)
96b06c0a16f737 Chris Packham 2020-02-05 3647 INIT_LIST_HEAD(&usb->active_pipes[i]);
96b06c0a16f737 Chris Packham 2020-02-05 3648
96b06c0a16f737 Chris Packham 2020-02-05 3649 /* Due to an errata, CN31XX doesn't support DMA */
96b06c0a16f737 Chris Packham 2020-02-05 3650 if (OCTEON_IS_MODEL(OCTEON_CN31XX)) {
96b06c0a16f737 Chris Packham 2020-02-05 3651 usb->init_flags |= CVMX_USB_INITIALIZE_FLAGS_NO_DMA;
96b06c0a16f737 Chris Packham 2020-02-05 3652 /* Only use one channel with non DMA */
96b06c0a16f737 Chris Packham 2020-02-05 3653 usb->idle_hardware_channels = 0x1;
96b06c0a16f737 Chris Packham 2020-02-05 3654 } else if (OCTEON_IS_MODEL(OCTEON_CN5XXX)) {
96b06c0a16f737 Chris Packham 2020-02-05 3655 /* CN5XXX have an errata with channel 3 */
96b06c0a16f737 Chris Packham 2020-02-05 3656 usb->idle_hardware_channels = 0xf7;
96b06c0a16f737 Chris Packham 2020-02-05 3657 } else {
96b06c0a16f737 Chris Packham 2020-02-05 3658 usb->idle_hardware_channels = 0xff;
96b06c0a16f737 Chris Packham 2020-02-05 3659 }
96b06c0a16f737 Chris Packham 2020-02-05 3660
96b06c0a16f737 Chris Packham 2020-02-05 3661 status = cvmx_usb_initialize(dev, usb);
96b06c0a16f737 Chris Packham 2020-02-05 3662 if (status) {
96b06c0a16f737 Chris Packham 2020-02-05 3663 dev_dbg(dev, "USB initialization failed with %d\n", status);
96b06c0a16f737 Chris Packham 2020-02-05 3664 usb_put_hcd(hcd);
96b06c0a16f737 Chris Packham 2020-02-05 3665 return -1;
96b06c0a16f737 Chris Packham 2020-02-05 3666 }
96b06c0a16f737 Chris Packham 2020-02-05 3667
96b06c0a16f737 Chris Packham 2020-02-05 3668 status = usb_add_hcd(hcd, irq, 0);
96b06c0a16f737 Chris Packham 2020-02-05 3669 if (status) {
96b06c0a16f737 Chris Packham 2020-02-05 3670 dev_dbg(dev, "USB add HCD failed with %d\n", status);
96b06c0a16f737 Chris Packham 2020-02-05 3671 usb_put_hcd(hcd);
96b06c0a16f737 Chris Packham 2020-02-05 3672 return -1;
96b06c0a16f737 Chris Packham 2020-02-05 3673 }
96b06c0a16f737 Chris Packham 2020-02-05 3674 device_wakeup_enable(hcd->self.controller);
96b06c0a16f737 Chris Packham 2020-02-05 3675
96b06c0a16f737 Chris Packham 2020-02-05 3676 dev_info(dev, "Registered HCD for port %d on irq %d\n", usb_num, irq);
96b06c0a16f737 Chris Packham 2020-02-05 3677
96b06c0a16f737 Chris Packham 2020-02-05 3678 return 0;
96b06c0a16f737 Chris Packham 2020-02-05 3679 }
96b06c0a16f737 Chris Packham 2020-02-05 3680
:::::: The code at line 3548 was first introduced by commit
:::::: 96b06c0a16f737e9ea7dff1e23dd5f6d847e6731 Revert "staging: octeon-usb: delete the octeon usb host controller driver"
:::::: TO: Chris Packham <chris.packham@alliedtelesis.co.nz>
:::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 18966 bytes --]
[-- Attachment #3: Type: text/plain, Size: 176 bytes --]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2021-05-15 18:27 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-15 18:27 kernel test robot [this message]
2021-05-15 18:27 ` [arm-platforms:irq/domain_cleanup 5/25] drivers/staging/octeon-usb/octeon-hcd.c:3548:26: error: dereferencing pointer to incomplete type 'struct device_node' kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202105160201.AT9dpMNa-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.