All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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.