Re: [PATCH v2 8/8] partitions/tegra: Implement eMMC boot partitions scanning

From: kbuild test robot
Date: Mon Mar 09 2020 - 01:57:37 EST


Hi Dmitry,

I love your patch! Yet something to improve:

[auto build test ERROR on tegra/for-next]
[also build test ERROR on block/for-next linus/master v5.6-rc5 next-20200306]
[cannot apply to ulf.hansson-mmc/next]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url: https://github.com/0day-ci/linux/commits/Dmitry-Osipenko/Introduce-NVIDIA-Tegra-Partition-Tablex/20200306-124106
base: https://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git for-next
config: arm64-randconfig-a001-20200308 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=arm64

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

block/partitions/tegra.o: In function `tegra_partition_table_emmc_boot_offset':
block/partitions/tegra.c:379: undefined reference to `mmc_bdev_to_card'
block/partitions/tegra.c:379:(.text+0x674): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `mmc_bdev_to_card'
block/partitions/tegra.c:389: undefined reference to `mmc_card_is_blockaddr'
block/partitions/tegra.c:389:(.text+0x6a4): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `mmc_card_is_blockaddr'
>> block/partitions/tegra.c:424: undefined reference to `mmc_bdev_to_part_type'
block/partitions/tegra.c:424:(.text+0x748): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `mmc_bdev_to_part_type'
>> block/partitions/tegra.c:417: undefined reference to `mmc_bdev_to_area_type'
block/partitions/tegra.c:417:(.text+0xbec): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `mmc_bdev_to_area_type'

vim +424 block/partitions/tegra.c

375
376 static int
377 tegra_partition_table_emmc_boot_offset(struct tegra_partition_table_parser *ptp)
378 {
379 struct mmc_card *card = mmc_bdev_to_card(ptp->state->bdev);
380 const struct of_device_id *matched;
381 int part_type, area_type;
382 const u32 *sdhci_bases;
383 u32 sdhci_base;
384 unsigned int i;
385 int err;
386
387 /* filter out unexpected/untested boot sources */
388 if (!card || card->ext_csd.rev < 3 ||
389 !mmc_card_is_blockaddr(card) ||
390 mmc_card_is_removable(card->host))
391 return -1;
392
393 /* skip everything unrelated to Tegra eMMC */
394 matched = of_match_node(tegra_sdhci_match, card->host->parent->of_node);
395 if (!matched)
396 return -1;
397
398 sdhci_bases = matched->data;
399
400 /* figure out SDHCI instance ID by the base address */
401 err = of_property_read_u32_index(card->host->parent->of_node,
402 "reg", 0, &sdhci_base);
403 if (err)
404 return -1;
405
406 for (i = 0; i < TEGRA_PT_SDHCI_DEVICE_INSTANCES; i++) {
407 if (sdhci_base == sdhci_bases[i])
408 break;
409 }
410
411 if (i == TEGRA_PT_SDHCI_DEVICE_INSTANCES)
412 return -1;
413
414 ptp->dev_id = TEGRA_PT_SDHCI_DEVICE_ID;
415 ptp->dev_instance = i;
416
> 417 area_type = mmc_bdev_to_area_type(ptp->state->bdev);
418
419 if (WARN_ON(area_type < 0))
420 return -1;
421
422 switch (area_type) {
423 case MMC_BLK_DATA_AREA_BOOT:
> 424 part_type = mmc_bdev_to_part_type(ptp->state->bdev);
425
426 if (WARN_ON(part_type < 0))
427 return -1;
428
429 ptp->boot_id = part_type - EXT_CSD_PART_CONFIG_ACC_BOOT0;
430 ptp->snapshot_mode = true;
431 break;
432
433 case MMC_BLK_DATA_AREA_MAIN:
434 break;
435
436 default:
437 TEGRA_PT_ERR(ptp, "unexpected area_type: %u\n", area_type);
438 return -1;
439 }
440
441 ptp->card = card;
442
443 /*
444 * eMMC storage has two special boot partitions in addition to the
445 * main one. NVIDIA's bootloader linearizes eMMC boot0->boot1->main
446 * accesses, this means that the partition table addresses are shifted
447 * by the size of boot partitions. In accordance with the eMMC
448 * specification, the boot partition size is calculated as follows:
449 *
450 * boot partition size = 128K byte x BOOT_SIZE_MULT
451 *
452 * This function returns number of sectors occupied by the both boot
453 * partitions.
454 */
455 return card->ext_csd.raw_boot_mult * SZ_128K /
456 SECTOR_SIZE * MMC_NUM_BOOT_PARTITION;
457 }
458

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip