RE: [PATCH v3 3/4] soc: aspeed: Add eSPI driver

From: ChiaWei Wang
Date: Thu Aug 26 2021 - 23:52:16 EST


Aspeed 5th and 6th generation SoCs are based on the ARM 32-bits architecture.
Should we follow the report to make the driver 64-bits compatible?
Or revise the driver to use more specific data types?

Thanks.

Chiawei

> From: kernel test robot <lkp@xxxxxxxxx>
> Sent: Friday, August 27, 2021 7:30 AM
>
> Hi Chia-Wei,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on robh/for-next] [also build test ERROR on
> arm/for-next keystone/next soc/for-next rockchip/for-next
> arm64/for-next/core linus/master joel-aspeed/for-next v5.14-rc7
> next-20210826] [cannot apply to xlnx/master] [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/Chia-Wei-Wang/arm-aspeed-Add-e
> SPI-support/20210826-141737
> base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
> config: arm64-randconfig-r002-20210826 (attached as .config)
> compiler: aarch64-linux-gcc (GCC) 11.2.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://github.com/0day-ci/linux/commit/2980a1777c50754fe145f2e73ded873
> 9931c0712
> git remote add linux-review https://github.com/0day-ci/linux
> git fetch --no-tags linux-review
> Chia-Wei-Wang/arm-aspeed-Add-eSPI-support/20210826-141737
> git checkout 2980a1777c50754fe145f2e73ded8739931c0712
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0
> make.cross ARCH=arm64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
>
> All errors (new ones prefixed by >>):
>
> In file included from drivers/soc/aspeed/aspeed-espi-ctrl.c:22:
> drivers/soc/aspeed/aspeed-espi-perif.h: In function
> 'aspeed_espi_perif_alloc':
> >> drivers/soc/aspeed/aspeed-espi-perif.h:446:43: error: passing
> >> argument 3 of 'of_property_read_u32' from incompatible pointer type
> >> [-Werror=incompatible-pointer-types]
> 446 |
> &espi_perif->mcyc_saddr);
> |
> ^~~~~~~~~~~~~~~~~~~~~~~
> | |
> | phys_addr_t
> * {aka long long unsigned int *}
> In file included from include/linux/of_device.h:9,
> from drivers/soc/aspeed/aspeed-espi-ctrl.c:9:
> include/linux/of.h:1249:45: note: expected 'u32 *' {aka 'unsigned int *'} but
> argument is of type 'phys_addr_t *' {aka 'long long unsigned int *'}
> 1249 | u32 *out_value)
> | ~~~~~^~~~~~~~~
> drivers/soc/aspeed/aspeed-espi-ctrl.c: In function
> 'aspeed_espi_ctrl_probe':
> drivers/soc/aspeed/aspeed-espi-ctrl.c:98:30: warning: cast from pointer to
> integer of different size [-Wpointer-to-int-cast]
> 98 | espi_ctrl->version =
> (uint32_t)of_device_get_match_data(dev);
> | ^
> cc1: some warnings being treated as errors
>
>
> vim +/of_property_read_u32 +446 drivers/soc/aspeed/aspeed-espi-perif.h
>
> 422
> 423 static void *aspeed_espi_perif_alloc(struct device *dev, struct
> aspeed_espi_ctrl *espi_ctrl)
> 424 {
> 425 int rc;
> 426 struct aspeed_espi_perif *espi_perif;
> 427 struct aspeed_espi_perif_dma *dma;
> 428
> 429 espi_perif = devm_kzalloc(dev, sizeof(*espi_perif),
> GFP_KERNEL);
> 430 if (!espi_perif)
> 431 return ERR_PTR(-ENOMEM);
> 432
> 433 espi_perif->ctrl = espi_ctrl;
> 434
> 435 init_waitqueue_head(&espi_perif->wq);
> 436
> 437 spin_lock_init(&espi_perif->lock);
> 438
> 439 mutex_init(&espi_perif->pc_rx_mtx);
> 440 mutex_init(&espi_perif->pc_tx_mtx);
> 441 mutex_init(&espi_perif->np_tx_mtx);
> 442
> 443 espi_perif->mcyc_enable =
> of_property_read_bool(dev->of_node, "perif,memcyc-enable");
> 444 if (espi_perif->mcyc_enable) {
> 445 rc = of_property_read_u32(dev->of_node,
> "perif,memcyc-src-addr",
> > 446 &espi_perif->mcyc_saddr);
> 447 if (rc) {
> 448 dev_err(dev, "cannot get Host source address for
> memory cycle\n");
> 449 return ERR_PTR(-ENODEV);
> 450 }
> 451
> 452 rc = of_property_read_u32(dev->of_node,
> "perif,memcyc-size",
> 453 &espi_perif->mcyc_size);
> 454 if (rc) {
> 455 dev_err(dev, "cannot get size for memory cycle\n");
> 456 return ERR_PTR(-ENODEV);
> 457 }
> 458
> 459 if (espi_perif->mcyc_size < PERIF_MEMCYC_SIZE_MIN)
> 460 espi_perif->mcyc_size = PERIF_MEMCYC_SIZE_MIN;
> 461 else
> 462 espi_perif->mcyc_size =
> roundup_pow_of_two(espi_perif->mcyc_size);
> 463
> 464 espi_perif->mcyc_mask = ~(espi_perif->mcyc_size - 1);
> 465 espi_perif->mcyc_virt = dma_alloc_coherent(dev,
> espi_perif->mcyc_size,
> 466 &espi_perif->mcyc_taddr,
> GFP_KERNEL);
> 467 if (!espi_perif->mcyc_virt) {
> 468 dev_err(dev, "cannot allocate memory cycle
> region\n");
> 469 return ERR_PTR(-ENOMEM);
> 470 }
> 471 }
> 472
> 473 if (of_property_read_bool(dev->of_node, "perif,dma-mode")) {
> 474 dma = &espi_perif->dma;
> 475
> 476 dma->pc_tx_virt = dma_alloc_coherent(dev, PAGE_SIZE,
> 477 &dma->pc_tx_addr,
> GFP_KERNEL);
> 478 if (!dma->pc_tx_virt) {
> 479 dev_err(dev, "cannot allocate posted TX DMA
> buffer\n");
> 480 return ERR_PTR(-ENOMEM);
> 481 }
> 482
> 483 dma->pc_rx_virt = dma_alloc_coherent(dev, PAGE_SIZE,
> 484 &dma->pc_rx_addr,
> GFP_KERNEL);
> 485 if (!dma->pc_rx_virt) {
> 486 dev_err(dev, "cannot allocate posted RX DMA
> buffer\n");
> 487 return ERR_PTR(-ENOMEM);
> 488 }
> 489
> 490 dma->np_tx_virt = dma_alloc_coherent(dev, PAGE_SIZE,
> 491 &dma->np_tx_addr, GFP_KERNEL);
> 492 if (!dma->np_tx_virt) {
> 493 dev_err(dev, "cannot allocate non-posted TX DMA
> buffer\n");
> 494 return ERR_PTR(-ENOMEM);
> 495 }
> 496
> 497 espi_perif->dma_mode = 1;
> 498 }
> 499
> 500 espi_perif->mdev.parent = dev;
> 501 espi_perif->mdev.minor = MISC_DYNAMIC_MINOR;
> 502 espi_perif->mdev.name = devm_kasprintf(dev, GFP_KERNEL,
> "%s", PERIF_MDEV_NAME);
> 503 espi_perif->mdev.fops = &aspeed_espi_perif_fops;
> 504 rc = misc_register(&espi_perif->mdev);
> 505 if (rc) {
> 506 dev_err(dev, "cannot register device\n");
> 507 return ERR_PTR(rc);
> 508 }
> 509
> 510 aspeed_espi_perif_enable(espi_perif);
> 511
> 512 return espi_perif;
> 513 }
> 514
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx