From: kernel test robot <lkp@intel.com> To: Shubhankar Kuranagatti <shubhankarvk@gmail.com>, James.Bottomley@HansenPartnership.com Cc: kbuild-all@lists.01.org, deller@gmx.de, linux-parisc@vger.kernel.org, linux-kernel@vger.kernel.org, sanjanasrinidhi1810@gmail.com Subject: Re: [PATCH] drivers: parisc: ccio-dma.c: Added tab insead of spaces Date: Thu, 29 Apr 2021 05:44:38 +0800 [thread overview] Message-ID: <202104290520.dBG08UEB-lkp@intel.com> (raw) In-Reply-To: <20210428153942.uyips5a3osoz3nju@kewl-virtual-machine> [-- Attachment #1: Type: text/plain, Size: 31296 bytes --] Hi Shubhankar, Thank you for the patch! Yet something to improve: [auto build test ERROR on hp-parisc/for-next] [also build test ERROR on v5.12 next-20210428] [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/Shubhankar-Kuranagatti/drivers-parisc-ccio-dma-c-Added-tab-insead-of-spaces/20210428-235316 base: https://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git for-next config: parisc-defconfig (attached as .config) compiler: hppa-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://github.com/0day-ci/linux/commit/d69bc48f1b1d854da39ad6d1809d2a009d9d4de3 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Shubhankar-Kuranagatti/drivers-parisc-ccio-dma-c-Added-tab-insead-of-spaces/20210428-235316 git checkout d69bc48f1b1d854da39ad6d1809d2a009d9d4de3 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=parisc 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/parisc/ccio-dma.c: In function 'ccio_alloc_range': >> drivers/parisc/ccio-dma.c:378:4: error: 'else' without a previous 'if' 378 | } else if (pages_needed <= 16) { | ^~~~ drivers/parisc/ccio-dma.c:380:4: error: 'else' without a previous 'if' 380 | } else if (pages_needed <= 32) { | ^~~~ drivers/parisc/ccio-dma.c:386:4: error: 'else' without a previous 'if' 386 | } else { | ^~~~ >> drivers/parisc/ccio-dma.c:431:1: error: invalid storage class for function 'ccio_free_range' 431 | ccio_free_range(struct ioc *ioc, dma_addr_t iova, unsigned long pages_mapped) | ^~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:430:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] 430 | static void | ^~~~~~ drivers/parisc/ccio-dma.c:555:1: warning: 'inline' is not at beginning of declaration [-Wold-style-declaration] 555 | static void CCIO_INLINE | ^~~~~~ >> drivers/parisc/ccio-dma.c:556:1: error: invalid storage class for function 'ccio_io_pdir_entry' 556 | ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba, | ^~~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:627:1: error: invalid storage class for function 'ccio_clear_io_tlb' 627 | ccio_clear_io_tlb(struct ioc *ioc, dma_addr_t iovp, size_t byte_cnt) | ^~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:660:1: error: invalid storage class for function 'ccio_mark_invalid' 660 | ccio_mark_invalid(struct ioc *ioc, dma_addr_t iova, size_t byte_cnt) | ^~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:702:1: error: invalid storage class for function 'ccio_dma_supported' 702 | ccio_dma_supported(struct device *dev, u64 mask) | ^~~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:724:1: error: invalid storage class for function 'ccio_map_single' 724 | ccio_map_single(struct device *dev, void *addr, size_t size, | ^~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:786:1: error: invalid storage class for function 'ccio_map_page' 786 | ccio_map_page(struct device *dev, struct page *page, unsigned long offset, | ^~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:803:1: error: invalid storage class for function 'ccio_unmap_page' 803 | ccio_unmap_page(struct device *dev, dma_addr_t iova, size_t size, | ^~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:845:1: error: invalid storage class for function 'ccio_alloc' 845 | ccio_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, | ^~~~~~~~~~ >> drivers/parisc/ccio-dma.c:879:1: error: invalid storage class for function 'ccio_free' 879 | ccio_free(struct device *dev, size_t size, void *cpu_addr, | ^~~~~~~~~ In file included from drivers/parisc/iommu-helpers.h:2, from drivers/parisc/ccio-dma.c:896: >> include/linux/prefetch.h:55:20: error: invalid storage class for function 'prefetch_range' 55 | static inline void prefetch_range(void *addr, size_t len) | ^~~~~~~~~~~~~~ >> include/linux/prefetch.h:66:20: error: invalid storage class for function 'prefetch_page_address' 66 | static inline void prefetch_page_address(struct page *page) | ^~~~~~~~~~~~~~~~~~~~~ In file included from drivers/parisc/ccio-dma.c:896: >> drivers/parisc/iommu-helpers.h:15:1: error: invalid storage class for function 'iommu_fill_pdir' 15 | iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents, | ^~~~~~~~~~~~~~~ >> drivers/parisc/iommu-helpers.h:101:1: error: invalid storage class for function 'iommu_coalesce_chunks' 101 | iommu_coalesce_chunks(struct ioc *ioc, struct device *dev, | ^~~~~~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:908:1: error: invalid storage class for function 'ccio_map_sg' 908 | ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents, | ^~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:987:1: error: invalid storage class for function 'ccio_unmap_sg' 987 | ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, | ^~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:1020:19: error: initializer element is not constant 1020 | .dma_supported = ccio_dma_supported, | ^~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1020:19: note: (near initialization for 'ccio_ops.dma_supported') drivers/parisc/ccio-dma.c:1021:12: error: initializer element is not constant 1021 | .alloc = ccio_alloc, | ^~~~~~~~~~ drivers/parisc/ccio-dma.c:1021:12: note: (near initialization for 'ccio_ops.alloc') drivers/parisc/ccio-dma.c:1022:12: error: initializer element is not constant 1022 | .free = ccio_free, | ^~~~~~~~~ drivers/parisc/ccio-dma.c:1022:12: note: (near initialization for 'ccio_ops.free') drivers/parisc/ccio-dma.c:1023:15: error: initializer element is not constant 1023 | .map_page = ccio_map_page, | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1023:15: note: (near initialization for 'ccio_ops.map_page') drivers/parisc/ccio-dma.c:1024:17: error: initializer element is not constant 1024 | .unmap_page = ccio_unmap_page, | ^~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1024:17: note: (near initialization for 'ccio_ops.unmap_page') drivers/parisc/ccio-dma.c:1025:13: error: initializer element is not constant 1025 | .map_sg = ccio_map_sg, | ^~~~~~~~~~~ drivers/parisc/ccio-dma.c:1025:13: note: (near initialization for 'ccio_ops.map_sg') drivers/parisc/ccio-dma.c:1026:15: error: initializer element is not constant 1026 | .unmap_sg = ccio_unmap_sg, | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1026:15: note: (near initialization for 'ccio_ops.unmap_sg') >> drivers/parisc/ccio-dma.c:1033:12: error: invalid storage class for function 'ccio_proc_info' 1033 | static int ccio_proc_info(struct seq_file *m, void *p) | ^~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:1099:12: error: invalid storage class for function 'ccio_proc_bitmap_info' 1099 | static int ccio_proc_bitmap_info(struct seq_file *m, void *p) | ^~~~~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1122:21: error: invalid storage class for function 'ccio_find_ioc' 1122 | static struct ioc * ccio_find_ioc(int hw_path) | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1212:12: error: invalid storage class for function 'ccio_probe' 1212 | static int ccio_probe(struct parisc_device *dev); | ^~~~~~~~~~ drivers/parisc/ccio-dma.c:1217:11: error: 'ccio_probe' undeclared (first use in this function); did you mean 'ccio_free'? 1217 | .probe = ccio_probe, | ^~~~~~~~~~ | ccio_free drivers/parisc/ccio-dma.c:1217:11: note: each undeclared identifier is reported only once for each function it appears in drivers/parisc/ccio-dma.c:1229:1: error: invalid storage class for function 'ccio_ioc_init' 1229 | ccio_ioc_init(struct ioc *ioc) | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1350:1: error: invalid storage class for function 'ccio_init_resource' 1350 | ccio_init_resource(struct resource *res, char *name, void __iomem *ioaddr) | ^~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1382:20: error: invalid storage class for function 'ccio_init_resources' 1382 | static void __init ccio_init_resources(struct ioc *ioc) | ^~~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1393:12: error: invalid storage class for function 'new_ioc_area' 1393 | static int new_ioc_area(struct resource *res, unsigned long size, | ^~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1412:12: error: invalid storage class for function 'expand_ioc_area' 1412 | static int expand_ioc_area(struct resource *res, unsigned long size, | ^~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1516:19: error: invalid storage class for function 'ccio_probe' 1516 | static int __init ccio_probe(struct parisc_device *dev) | ^~~~~~~~~~ drivers/parisc/ccio-dma.c:1517: confused by earlier errors, bailing out vim +378 drivers/parisc/ccio-dma.c ^1da177e4c3f41 Linus Torvalds 2005-04-16 329 ^1da177e4c3f41 Linus Torvalds 2005-04-16 330 /** ^1da177e4c3f41 Linus Torvalds 2005-04-16 331 * ccio_alloc_range - Allocate pages in the ioc's resource map. ^1da177e4c3f41 Linus Torvalds 2005-04-16 332 * @ioc: The I/O Controller. ^1da177e4c3f41 Linus Torvalds 2005-04-16 333 * @pages_needed: The requested number of pages to be mapped into the ^1da177e4c3f41 Linus Torvalds 2005-04-16 334 * I/O Pdir... ^1da177e4c3f41 Linus Torvalds 2005-04-16 335 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 336 * This function searches the resource map of the ioc to locate a range ^1da177e4c3f41 Linus Torvalds 2005-04-16 337 * of available pages for the requested size. ^1da177e4c3f41 Linus Torvalds 2005-04-16 338 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 339 static int 7c8cda625acd9b FUJITA Tomonori 2008-03-04 340 ccio_alloc_range(struct ioc *ioc, struct device *dev, size_t size) ^1da177e4c3f41 Linus Torvalds 2005-04-16 341 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 342 unsigned int pages_needed = size >> IOVP_SHIFT; ^1da177e4c3f41 Linus Torvalds 2005-04-16 343 unsigned int res_idx; 466634488e8096 FUJITA Tomonori 2008-03-04 344 unsigned long boundary_size; 1e22166c40a99f Kyle McMartin 2008-07-28 345 #ifdef CCIO_COLLECT_STATS ^1da177e4c3f41 Linus Torvalds 2005-04-16 346 unsigned long cr_start = mfctl(16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 347 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 348 ^1da177e4c3f41 Linus Torvalds 2005-04-16 349 BUG_ON(pages_needed == 0); ^1da177e4c3f41 Linus Torvalds 2005-04-16 350 BUG_ON((pages_needed * IOVP_SIZE) > DMA_CHUNK_SIZE); ^1da177e4c3f41 Linus Torvalds 2005-04-16 351 ^1da177e4c3f41 Linus Torvalds 2005-04-16 352 DBG_RES("%s() size: %d pages_needed %d\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 353 __func__, size, pages_needed); ^1da177e4c3f41 Linus Torvalds 2005-04-16 354 ^1da177e4c3f41 Linus Torvalds 2005-04-16 355 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 356 ** "seek and ye shall find"...praying never hurts either... ^1da177e4c3f41 Linus Torvalds 2005-04-16 357 ** ggg sacrifices another 710 to the computer gods. ^1da177e4c3f41 Linus Torvalds 2005-04-16 358 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 359 1e9d90dbed120e Nicolin Chen 2020-09-01 360 boundary_size = dma_get_seg_boundary_nr_pages(dev, IOVP_SHIFT); 466634488e8096 FUJITA Tomonori 2008-03-04 361 ^1da177e4c3f41 Linus Torvalds 2005-04-16 362 if (pages_needed <= 8) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 363 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 364 * LAN traffic will not thrash the TLB IFF the same NIC 4f63ba17086673 Joe Perches 2008-02-03 365 * uses 8 adjacent pages to map separate payload data. ^1da177e4c3f41 Linus Torvalds 2005-04-16 366 * ie the same byte in the resource bit map. ^1da177e4c3f41 Linus Torvalds 2005-04-16 367 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 368 #if 0 ^1da177e4c3f41 Linus Torvalds 2005-04-16 369 /* FIXME: bit search should shift it's way through ^1da177e4c3f41 Linus Torvalds 2005-04-16 370 * an unsigned long - not byte at a time. As it is now, ^1da177e4c3f41 Linus Torvalds 2005-04-16 371 * we effectively allocate this byte to this mapping. ^1da177e4c3f41 Linus Torvalds 2005-04-16 372 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 373 unsigned long mask = ~(~0UL >> pages_needed); ^1da177e4c3f41 Linus Torvalds 2005-04-16 374 CCIO_FIND_FREE_MAPPING(ioc, res_idx, mask, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 375 #else ^1da177e4c3f41 Linus Torvalds 2005-04-16 376 CCIO_FIND_FREE_MAPPING(ioc, res_idx, 0xff, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 377 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 @378 } else if (pages_needed <= 16) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 379 CCIO_FIND_FREE_MAPPING(ioc, res_idx, 0xffff, 16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 380 } else if (pages_needed <= 32) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 381 CCIO_FIND_FREE_MAPPING(ioc, res_idx, ~(unsigned int)0, 32); ^1da177e4c3f41 Linus Torvalds 2005-04-16 382 #ifdef __LP64__ ^1da177e4c3f41 Linus Torvalds 2005-04-16 383 } else if (pages_needed <= 64) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 384 CCIO_FIND_FREE_MAPPING(ioc, res_idx, ~0UL, 64); ^1da177e4c3f41 Linus Torvalds 2005-04-16 385 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 386 } else { ^1da177e4c3f41 Linus Torvalds 2005-04-16 387 panic("%s: %s() Too many pages to map. pages_needed: %u\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 388 __FILE__, __func__, pages_needed); ^1da177e4c3f41 Linus Torvalds 2005-04-16 389 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 390 ^1da177e4c3f41 Linus Torvalds 2005-04-16 391 panic("%s: %s() I/O MMU is out of mapping resources.\n", __FILE__, a8043ecb17bd2e Harvey Harrison 2008-05-14 392 __func__); ^1da177e4c3f41 Linus Torvalds 2005-04-16 393 ^1da177e4c3f41 Linus Torvalds 2005-04-16 394 resource_found: ^1da177e4c3f41 Linus Torvalds 2005-04-16 395 ^1da177e4c3f41 Linus Torvalds 2005-04-16 396 DBG_RES("%s() res_idx %d res_hint: %d\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 397 __func__, res_idx, ioc->res_hint); ^1da177e4c3f41 Linus Torvalds 2005-04-16 398 1e22166c40a99f Kyle McMartin 2008-07-28 399 #ifdef CCIO_COLLECT_STATS ^1da177e4c3f41 Linus Torvalds 2005-04-16 400 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 401 unsigned long cr_end = mfctl(16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 402 unsigned long tmp = cr_end - cr_start; ^1da177e4c3f41 Linus Torvalds 2005-04-16 403 /* check for roll over */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 404 cr_start = (cr_end < cr_start) ? -(tmp) : (tmp); ^1da177e4c3f41 Linus Torvalds 2005-04-16 405 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 406 ioc->avg_search[ioc->avg_idx++] = cr_start; ^1da177e4c3f41 Linus Torvalds 2005-04-16 407 ioc->avg_idx &= CCIO_SEARCH_SAMPLE - 1; ^1da177e4c3f41 Linus Torvalds 2005-04-16 408 ioc->used_pages += pages_needed; ^1da177e4c3f41 Linus Torvalds 2005-04-16 409 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 410 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 411 ** return the bit address. ^1da177e4c3f41 Linus Torvalds 2005-04-16 412 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 413 return res_idx << 3; ^1da177e4c3f41 Linus Torvalds 2005-04-16 414 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 415 ^1da177e4c3f41 Linus Torvalds 2005-04-16 416 #define CCIO_FREE_MAPPINGS(ioc, res_idx, mask, size) \ ^1da177e4c3f41 Linus Torvalds 2005-04-16 417 u##size *res_ptr = (u##size *)&((ioc)->res_map[res_idx]); \ ^1da177e4c3f41 Linus Torvalds 2005-04-16 418 BUG_ON((*res_ptr & mask) != mask); \ ^1da177e4c3f41 Linus Torvalds 2005-04-16 419 *res_ptr &= ~(mask); ^1da177e4c3f41 Linus Torvalds 2005-04-16 420 ^1da177e4c3f41 Linus Torvalds 2005-04-16 421 /** ^1da177e4c3f41 Linus Torvalds 2005-04-16 422 * ccio_free_range - Free pages from the ioc's resource map. ^1da177e4c3f41 Linus Torvalds 2005-04-16 423 * @ioc: The I/O Controller. ^1da177e4c3f41 Linus Torvalds 2005-04-16 424 * @iova: The I/O Virtual Address. ^1da177e4c3f41 Linus Torvalds 2005-04-16 425 * @pages_mapped: The requested number of pages to be freed from the ^1da177e4c3f41 Linus Torvalds 2005-04-16 426 * I/O Pdir. ^1da177e4c3f41 Linus Torvalds 2005-04-16 427 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 428 * This function frees the resouces allocated for the iova. ^1da177e4c3f41 Linus Torvalds 2005-04-16 429 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 430 static void ^1da177e4c3f41 Linus Torvalds 2005-04-16 @431 ccio_free_range(struct ioc *ioc, dma_addr_t iova, unsigned long pages_mapped) ^1da177e4c3f41 Linus Torvalds 2005-04-16 432 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 433 unsigned long iovp = CCIO_IOVP(iova); ^1da177e4c3f41 Linus Torvalds 2005-04-16 434 unsigned int res_idx = PDIR_INDEX(iovp) >> 3; ^1da177e4c3f41 Linus Torvalds 2005-04-16 435 ^1da177e4c3f41 Linus Torvalds 2005-04-16 436 BUG_ON(pages_mapped == 0); ^1da177e4c3f41 Linus Torvalds 2005-04-16 437 BUG_ON((pages_mapped * IOVP_SIZE) > DMA_CHUNK_SIZE); ^1da177e4c3f41 Linus Torvalds 2005-04-16 438 BUG_ON(pages_mapped > BITS_PER_LONG); ^1da177e4c3f41 Linus Torvalds 2005-04-16 439 ^1da177e4c3f41 Linus Torvalds 2005-04-16 440 DBG_RES("%s(): res_idx: %d pages_mapped %d\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 441 __func__, res_idx, pages_mapped); ^1da177e4c3f41 Linus Torvalds 2005-04-16 442 1e22166c40a99f Kyle McMartin 2008-07-28 443 #ifdef CCIO_COLLECT_STATS ^1da177e4c3f41 Linus Torvalds 2005-04-16 444 ioc->used_pages -= pages_mapped; ^1da177e4c3f41 Linus Torvalds 2005-04-16 445 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 446 ^1da177e4c3f41 Linus Torvalds 2005-04-16 447 if(pages_mapped <= 8) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 448 #if 0 ^1da177e4c3f41 Linus Torvalds 2005-04-16 449 /* see matching comments in alloc_range */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 450 unsigned long mask = ~(~0UL >> pages_mapped); ^1da177e4c3f41 Linus Torvalds 2005-04-16 451 CCIO_FREE_MAPPINGS(ioc, res_idx, mask, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 452 #else c18b4608958ff4 Alexander Beregalov 2009-03-19 453 CCIO_FREE_MAPPINGS(ioc, res_idx, 0xffUL, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 454 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 455 } else if(pages_mapped <= 16) { c18b4608958ff4 Alexander Beregalov 2009-03-19 456 CCIO_FREE_MAPPINGS(ioc, res_idx, 0xffffUL, 16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 457 } else if(pages_mapped <= 32) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 458 CCIO_FREE_MAPPINGS(ioc, res_idx, ~(unsigned int)0, 32); ^1da177e4c3f41 Linus Torvalds 2005-04-16 459 #ifdef __LP64__ ^1da177e4c3f41 Linus Torvalds 2005-04-16 460 } else if(pages_mapped <= 64) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 461 CCIO_FREE_MAPPINGS(ioc, res_idx, ~0UL, 64); ^1da177e4c3f41 Linus Torvalds 2005-04-16 462 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 463 } else { ^1da177e4c3f41 Linus Torvalds 2005-04-16 464 panic("%s:%s() Too many pages to unmap.\n", __FILE__, a8043ecb17bd2e Harvey Harrison 2008-05-14 465 __func__); ^1da177e4c3f41 Linus Torvalds 2005-04-16 466 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 467 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 468 ^1da177e4c3f41 Linus Torvalds 2005-04-16 469 /**************************************************************** ^1da177e4c3f41 Linus Torvalds 2005-04-16 470 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 471 ** CCIO dma_ops support routines ^1da177e4c3f41 Linus Torvalds 2005-04-16 472 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 473 *****************************************************************/ ^1da177e4c3f41 Linus Torvalds 2005-04-16 474 ^1da177e4c3f41 Linus Torvalds 2005-04-16 475 typedef unsigned long space_t; ^1da177e4c3f41 Linus Torvalds 2005-04-16 476 #define KERNEL_SPACE 0 ^1da177e4c3f41 Linus Torvalds 2005-04-16 477 ^1da177e4c3f41 Linus Torvalds 2005-04-16 478 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 479 ** DMA "Page Type" and Hints ^1da177e4c3f41 Linus Torvalds 2005-04-16 480 ** o if SAFE_DMA isn't set, mapping is for FAST_DMA. SAFE_DMA should be ^1da177e4c3f41 Linus Torvalds 2005-04-16 481 ** set for subcacheline DMA transfers since we don't want to damage the ^1da177e4c3f41 Linus Torvalds 2005-04-16 482 ** other part of a cacheline. ^1da177e4c3f41 Linus Torvalds 2005-04-16 483 ** o SAFE_DMA must be set for "memory" allocated via pci_alloc_consistent(). ^1da177e4c3f41 Linus Torvalds 2005-04-16 484 ** This bit tells U2 to do R/M/W for partial cachelines. "Streaming" ^1da177e4c3f41 Linus Torvalds 2005-04-16 485 ** data can avoid this if the mapping covers full cache lines. ^1da177e4c3f41 Linus Torvalds 2005-04-16 486 ** o STOP_MOST is needed for atomicity across cachelines. 0779bf2d2ecc4d Matt LaPlante 2006-11-30 487 ** Apparently only "some EISA devices" need this. ^1da177e4c3f41 Linus Torvalds 2005-04-16 488 ** Using CONFIG_ISA is hack. Only the IOA with EISA under it needs ^1da177e4c3f41 Linus Torvalds 2005-04-16 489 ** to use this hint iff the EISA devices needs this feature. ^1da177e4c3f41 Linus Torvalds 2005-04-16 490 ** According to the U2 ERS, STOP_MOST enabled pages hurt performance. ^1da177e4c3f41 Linus Torvalds 2005-04-16 491 ** o PREFETCH should *not* be set for cases like Multiple PCI devices ^1da177e4c3f41 Linus Torvalds 2005-04-16 492 ** behind GSCtoPCI (dino) bus converter. Only one cacheline per GSC ^1da177e4c3f41 Linus Torvalds 2005-04-16 493 ** device can be fetched and multiply DMA streams will thrash the ^1da177e4c3f41 Linus Torvalds 2005-04-16 494 ** prefetch buffer and burn memory bandwidth. See 6.7.3 "Prefetch Rules ^1da177e4c3f41 Linus Torvalds 2005-04-16 495 ** and Invalidation of Prefetch Entries". ^1da177e4c3f41 Linus Torvalds 2005-04-16 496 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 497 ** FIXME: the default hints need to be per GSC device - not global. ^1da177e4c3f41 Linus Torvalds 2005-04-16 498 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 499 ** HP-UX dorks: linux device driver programming model is totally different ^1da177e4c3f41 Linus Torvalds 2005-04-16 500 ** than HP-UX's. HP-UX always sets HINT_PREFETCH since it's drivers ^1da177e4c3f41 Linus Torvalds 2005-04-16 501 ** do special things to work on non-coherent platforms...linux has to ^1da177e4c3f41 Linus Torvalds 2005-04-16 502 ** be much more careful with this. ^1da177e4c3f41 Linus Torvalds 2005-04-16 503 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 504 #define IOPDIR_VALID 0x01UL ^1da177e4c3f41 Linus Torvalds 2005-04-16 505 #define HINT_SAFE_DMA 0x02UL /* used for pci_alloc_consistent() pages */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 506 #ifdef CONFIG_EISA ^1da177e4c3f41 Linus Torvalds 2005-04-16 507 #define HINT_STOP_MOST 0x04UL /* LSL support */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 508 #else ^1da177e4c3f41 Linus Torvalds 2005-04-16 509 #define HINT_STOP_MOST 0x00UL /* only needed for "some EISA devices" */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 510 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 511 #define HINT_UDPATE_ENB 0x08UL /* not used/supported by U2 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 512 #define HINT_PREFETCH 0x10UL /* for outbound pages which are not SAFE */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 513 ^1da177e4c3f41 Linus Torvalds 2005-04-16 514 ^1da177e4c3f41 Linus Torvalds 2005-04-16 515 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 516 ** Use direction (ie PCI_DMA_TODEVICE) to pick hint. ^1da177e4c3f41 Linus Torvalds 2005-04-16 517 ** ccio_alloc_consistent() depends on this to get SAFE_DMA ^1da177e4c3f41 Linus Torvalds 2005-04-16 518 ** when it passes in BIDIRECTIONAL flag. ^1da177e4c3f41 Linus Torvalds 2005-04-16 519 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 520 static u32 hint_lookup[] = { ^1da177e4c3f41 Linus Torvalds 2005-04-16 521 [PCI_DMA_BIDIRECTIONAL] = HINT_STOP_MOST | HINT_SAFE_DMA | IOPDIR_VALID, ^1da177e4c3f41 Linus Torvalds 2005-04-16 522 [PCI_DMA_TODEVICE] = HINT_STOP_MOST | HINT_PREFETCH | IOPDIR_VALID, ^1da177e4c3f41 Linus Torvalds 2005-04-16 523 [PCI_DMA_FROMDEVICE] = HINT_STOP_MOST | IOPDIR_VALID, ^1da177e4c3f41 Linus Torvalds 2005-04-16 524 }; ^1da177e4c3f41 Linus Torvalds 2005-04-16 525 ^1da177e4c3f41 Linus Torvalds 2005-04-16 526 /** ^1da177e4c3f41 Linus Torvalds 2005-04-16 527 * ccio_io_pdir_entry - Initialize an I/O Pdir. ^1da177e4c3f41 Linus Torvalds 2005-04-16 528 * @pdir_ptr: A pointer into I/O Pdir. ^1da177e4c3f41 Linus Torvalds 2005-04-16 529 * @sid: The Space Identifier. ^1da177e4c3f41 Linus Torvalds 2005-04-16 530 * @vba: The virtual address. ^1da177e4c3f41 Linus Torvalds 2005-04-16 531 * @hints: The DMA Hint. ^1da177e4c3f41 Linus Torvalds 2005-04-16 532 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 533 * Given a virtual address (vba, arg2) and space id, (sid, arg1), ^1da177e4c3f41 Linus Torvalds 2005-04-16 534 * load the I/O PDIR entry pointed to by pdir_ptr (arg0). Each IO Pdir ^1da177e4c3f41 Linus Torvalds 2005-04-16 535 * entry consists of 8 bytes as shown below (MSB == bit 0): ^1da177e4c3f41 Linus Torvalds 2005-04-16 536 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 537 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 538 * WORD 0: ^1da177e4c3f41 Linus Torvalds 2005-04-16 539 * +------+----------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 540 * | Phys | Virtual Index | Phys | ^1da177e4c3f41 Linus Torvalds 2005-04-16 541 * | 0:3 | 0:11 | 4:19 | ^1da177e4c3f41 Linus Torvalds 2005-04-16 542 * |4 bits| 12 bits | 16 bits | ^1da177e4c3f41 Linus Torvalds 2005-04-16 543 * +------+----------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 544 * WORD 1: ^1da177e4c3f41 Linus Torvalds 2005-04-16 545 * +-----------------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 546 * | Phys | Rsvd | Prefetch |Update |Rsvd |Lock |Safe |Valid | ^1da177e4c3f41 Linus Torvalds 2005-04-16 547 * | 20:39 | | Enable |Enable | |Enable|DMA | | ^1da177e4c3f41 Linus Torvalds 2005-04-16 548 * | 20 bits | 5 bits | 1 bit |1 bit |2 bits|1 bit |1 bit |1 bit | ^1da177e4c3f41 Linus Torvalds 2005-04-16 549 * +-----------------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 550 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 551 * The virtual index field is filled with the results of the LCI ^1da177e4c3f41 Linus Torvalds 2005-04-16 552 * (Load Coherence Index) instruction. The 8 bits used for the virtual ^1da177e4c3f41 Linus Torvalds 2005-04-16 553 * index are bits 12:19 of the value returned by LCI. ^1da177e4c3f41 Linus Torvalds 2005-04-16 554 */ df8e5bc6b7b61c Adrian Bunk 2008-12-02 555 static void CCIO_INLINE ^1da177e4c3f41 Linus Torvalds 2005-04-16 @556 ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba, ^1da177e4c3f41 Linus Torvalds 2005-04-16 557 unsigned long hints) ^1da177e4c3f41 Linus Torvalds 2005-04-16 558 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 559 register unsigned long pa; ^1da177e4c3f41 Linus Torvalds 2005-04-16 560 register unsigned long ci; /* coherent index */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 561 ^1da177e4c3f41 Linus Torvalds 2005-04-16 562 /* We currently only support kernel addresses */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 563 BUG_ON(sid != KERNEL_SPACE); ^1da177e4c3f41 Linus Torvalds 2005-04-16 564 ^1da177e4c3f41 Linus Torvalds 2005-04-16 565 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 566 ** WORD 1 - low order word ^1da177e4c3f41 Linus Torvalds 2005-04-16 567 ** "hints" parm includes the VALID bit! ^1da177e4c3f41 Linus Torvalds 2005-04-16 568 ** "dep" clobbers the physical address offset bits as well. ^1da177e4c3f41 Linus Torvalds 2005-04-16 569 */ 116d753308cf03 John David Anglin 2019-06-02 570 pa = lpa(vba); ^1da177e4c3f41 Linus Torvalds 2005-04-16 571 asm volatile("depw %1,31,12,%0" : "+r" (pa) : "r" (hints)); ^1da177e4c3f41 Linus Torvalds 2005-04-16 572 ((u32 *)pdir_ptr)[1] = (u32) pa; ^1da177e4c3f41 Linus Torvalds 2005-04-16 573 ^1da177e4c3f41 Linus Torvalds 2005-04-16 574 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 575 ** WORD 0 - high order word ^1da177e4c3f41 Linus Torvalds 2005-04-16 576 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 577 --- 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: 18449 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com> To: kbuild-all@lists.01.org Subject: Re: [PATCH] drivers: parisc: ccio-dma.c: Added tab insead of spaces Date: Thu, 29 Apr 2021 05:44:38 +0800 [thread overview] Message-ID: <202104290520.dBG08UEB-lkp@intel.com> (raw) In-Reply-To: <20210428153942.uyips5a3osoz3nju@kewl-virtual-machine> [-- Attachment #1: Type: text/plain, Size: 31710 bytes --] Hi Shubhankar, Thank you for the patch! Yet something to improve: [auto build test ERROR on hp-parisc/for-next] [also build test ERROR on v5.12 next-20210428] [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/Shubhankar-Kuranagatti/drivers-parisc-ccio-dma-c-Added-tab-insead-of-spaces/20210428-235316 base: https://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git for-next config: parisc-defconfig (attached as .config) compiler: hppa-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://github.com/0day-ci/linux/commit/d69bc48f1b1d854da39ad6d1809d2a009d9d4de3 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Shubhankar-Kuranagatti/drivers-parisc-ccio-dma-c-Added-tab-insead-of-spaces/20210428-235316 git checkout d69bc48f1b1d854da39ad6d1809d2a009d9d4de3 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=parisc 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/parisc/ccio-dma.c: In function 'ccio_alloc_range': >> drivers/parisc/ccio-dma.c:378:4: error: 'else' without a previous 'if' 378 | } else if (pages_needed <= 16) { | ^~~~ drivers/parisc/ccio-dma.c:380:4: error: 'else' without a previous 'if' 380 | } else if (pages_needed <= 32) { | ^~~~ drivers/parisc/ccio-dma.c:386:4: error: 'else' without a previous 'if' 386 | } else { | ^~~~ >> drivers/parisc/ccio-dma.c:431:1: error: invalid storage class for function 'ccio_free_range' 431 | ccio_free_range(struct ioc *ioc, dma_addr_t iova, unsigned long pages_mapped) | ^~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:430:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] 430 | static void | ^~~~~~ drivers/parisc/ccio-dma.c:555:1: warning: 'inline' is not at beginning of declaration [-Wold-style-declaration] 555 | static void CCIO_INLINE | ^~~~~~ >> drivers/parisc/ccio-dma.c:556:1: error: invalid storage class for function 'ccio_io_pdir_entry' 556 | ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba, | ^~~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:627:1: error: invalid storage class for function 'ccio_clear_io_tlb' 627 | ccio_clear_io_tlb(struct ioc *ioc, dma_addr_t iovp, size_t byte_cnt) | ^~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:660:1: error: invalid storage class for function 'ccio_mark_invalid' 660 | ccio_mark_invalid(struct ioc *ioc, dma_addr_t iova, size_t byte_cnt) | ^~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:702:1: error: invalid storage class for function 'ccio_dma_supported' 702 | ccio_dma_supported(struct device *dev, u64 mask) | ^~~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:724:1: error: invalid storage class for function 'ccio_map_single' 724 | ccio_map_single(struct device *dev, void *addr, size_t size, | ^~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:786:1: error: invalid storage class for function 'ccio_map_page' 786 | ccio_map_page(struct device *dev, struct page *page, unsigned long offset, | ^~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:803:1: error: invalid storage class for function 'ccio_unmap_page' 803 | ccio_unmap_page(struct device *dev, dma_addr_t iova, size_t size, | ^~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:845:1: error: invalid storage class for function 'ccio_alloc' 845 | ccio_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, | ^~~~~~~~~~ >> drivers/parisc/ccio-dma.c:879:1: error: invalid storage class for function 'ccio_free' 879 | ccio_free(struct device *dev, size_t size, void *cpu_addr, | ^~~~~~~~~ In file included from drivers/parisc/iommu-helpers.h:2, from drivers/parisc/ccio-dma.c:896: >> include/linux/prefetch.h:55:20: error: invalid storage class for function 'prefetch_range' 55 | static inline void prefetch_range(void *addr, size_t len) | ^~~~~~~~~~~~~~ >> include/linux/prefetch.h:66:20: error: invalid storage class for function 'prefetch_page_address' 66 | static inline void prefetch_page_address(struct page *page) | ^~~~~~~~~~~~~~~~~~~~~ In file included from drivers/parisc/ccio-dma.c:896: >> drivers/parisc/iommu-helpers.h:15:1: error: invalid storage class for function 'iommu_fill_pdir' 15 | iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents, | ^~~~~~~~~~~~~~~ >> drivers/parisc/iommu-helpers.h:101:1: error: invalid storage class for function 'iommu_coalesce_chunks' 101 | iommu_coalesce_chunks(struct ioc *ioc, struct device *dev, | ^~~~~~~~~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:908:1: error: invalid storage class for function 'ccio_map_sg' 908 | ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents, | ^~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:987:1: error: invalid storage class for function 'ccio_unmap_sg' 987 | ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, | ^~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:1020:19: error: initializer element is not constant 1020 | .dma_supported = ccio_dma_supported, | ^~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1020:19: note: (near initialization for 'ccio_ops.dma_supported') drivers/parisc/ccio-dma.c:1021:12: error: initializer element is not constant 1021 | .alloc = ccio_alloc, | ^~~~~~~~~~ drivers/parisc/ccio-dma.c:1021:12: note: (near initialization for 'ccio_ops.alloc') drivers/parisc/ccio-dma.c:1022:12: error: initializer element is not constant 1022 | .free = ccio_free, | ^~~~~~~~~ drivers/parisc/ccio-dma.c:1022:12: note: (near initialization for 'ccio_ops.free') drivers/parisc/ccio-dma.c:1023:15: error: initializer element is not constant 1023 | .map_page = ccio_map_page, | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1023:15: note: (near initialization for 'ccio_ops.map_page') drivers/parisc/ccio-dma.c:1024:17: error: initializer element is not constant 1024 | .unmap_page = ccio_unmap_page, | ^~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1024:17: note: (near initialization for 'ccio_ops.unmap_page') drivers/parisc/ccio-dma.c:1025:13: error: initializer element is not constant 1025 | .map_sg = ccio_map_sg, | ^~~~~~~~~~~ drivers/parisc/ccio-dma.c:1025:13: note: (near initialization for 'ccio_ops.map_sg') drivers/parisc/ccio-dma.c:1026:15: error: initializer element is not constant 1026 | .unmap_sg = ccio_unmap_sg, | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1026:15: note: (near initialization for 'ccio_ops.unmap_sg') >> drivers/parisc/ccio-dma.c:1033:12: error: invalid storage class for function 'ccio_proc_info' 1033 | static int ccio_proc_info(struct seq_file *m, void *p) | ^~~~~~~~~~~~~~ >> drivers/parisc/ccio-dma.c:1099:12: error: invalid storage class for function 'ccio_proc_bitmap_info' 1099 | static int ccio_proc_bitmap_info(struct seq_file *m, void *p) | ^~~~~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1122:21: error: invalid storage class for function 'ccio_find_ioc' 1122 | static struct ioc * ccio_find_ioc(int hw_path) | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1212:12: error: invalid storage class for function 'ccio_probe' 1212 | static int ccio_probe(struct parisc_device *dev); | ^~~~~~~~~~ drivers/parisc/ccio-dma.c:1217:11: error: 'ccio_probe' undeclared (first use in this function); did you mean 'ccio_free'? 1217 | .probe = ccio_probe, | ^~~~~~~~~~ | ccio_free drivers/parisc/ccio-dma.c:1217:11: note: each undeclared identifier is reported only once for each function it appears in drivers/parisc/ccio-dma.c:1229:1: error: invalid storage class for function 'ccio_ioc_init' 1229 | ccio_ioc_init(struct ioc *ioc) | ^~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1350:1: error: invalid storage class for function 'ccio_init_resource' 1350 | ccio_init_resource(struct resource *res, char *name, void __iomem *ioaddr) | ^~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1382:20: error: invalid storage class for function 'ccio_init_resources' 1382 | static void __init ccio_init_resources(struct ioc *ioc) | ^~~~~~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1393:12: error: invalid storage class for function 'new_ioc_area' 1393 | static int new_ioc_area(struct resource *res, unsigned long size, | ^~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1412:12: error: invalid storage class for function 'expand_ioc_area' 1412 | static int expand_ioc_area(struct resource *res, unsigned long size, | ^~~~~~~~~~~~~~~ drivers/parisc/ccio-dma.c:1516:19: error: invalid storage class for function 'ccio_probe' 1516 | static int __init ccio_probe(struct parisc_device *dev) | ^~~~~~~~~~ drivers/parisc/ccio-dma.c:1517: confused by earlier errors, bailing out vim +378 drivers/parisc/ccio-dma.c ^1da177e4c3f41 Linus Torvalds 2005-04-16 329 ^1da177e4c3f41 Linus Torvalds 2005-04-16 330 /** ^1da177e4c3f41 Linus Torvalds 2005-04-16 331 * ccio_alloc_range - Allocate pages in the ioc's resource map. ^1da177e4c3f41 Linus Torvalds 2005-04-16 332 * @ioc: The I/O Controller. ^1da177e4c3f41 Linus Torvalds 2005-04-16 333 * @pages_needed: The requested number of pages to be mapped into the ^1da177e4c3f41 Linus Torvalds 2005-04-16 334 * I/O Pdir... ^1da177e4c3f41 Linus Torvalds 2005-04-16 335 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 336 * This function searches the resource map of the ioc to locate a range ^1da177e4c3f41 Linus Torvalds 2005-04-16 337 * of available pages for the requested size. ^1da177e4c3f41 Linus Torvalds 2005-04-16 338 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 339 static int 7c8cda625acd9b FUJITA Tomonori 2008-03-04 340 ccio_alloc_range(struct ioc *ioc, struct device *dev, size_t size) ^1da177e4c3f41 Linus Torvalds 2005-04-16 341 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 342 unsigned int pages_needed = size >> IOVP_SHIFT; ^1da177e4c3f41 Linus Torvalds 2005-04-16 343 unsigned int res_idx; 466634488e8096 FUJITA Tomonori 2008-03-04 344 unsigned long boundary_size; 1e22166c40a99f Kyle McMartin 2008-07-28 345 #ifdef CCIO_COLLECT_STATS ^1da177e4c3f41 Linus Torvalds 2005-04-16 346 unsigned long cr_start = mfctl(16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 347 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 348 ^1da177e4c3f41 Linus Torvalds 2005-04-16 349 BUG_ON(pages_needed == 0); ^1da177e4c3f41 Linus Torvalds 2005-04-16 350 BUG_ON((pages_needed * IOVP_SIZE) > DMA_CHUNK_SIZE); ^1da177e4c3f41 Linus Torvalds 2005-04-16 351 ^1da177e4c3f41 Linus Torvalds 2005-04-16 352 DBG_RES("%s() size: %d pages_needed %d\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 353 __func__, size, pages_needed); ^1da177e4c3f41 Linus Torvalds 2005-04-16 354 ^1da177e4c3f41 Linus Torvalds 2005-04-16 355 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 356 ** "seek and ye shall find"...praying never hurts either... ^1da177e4c3f41 Linus Torvalds 2005-04-16 357 ** ggg sacrifices another 710 to the computer gods. ^1da177e4c3f41 Linus Torvalds 2005-04-16 358 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 359 1e9d90dbed120e Nicolin Chen 2020-09-01 360 boundary_size = dma_get_seg_boundary_nr_pages(dev, IOVP_SHIFT); 466634488e8096 FUJITA Tomonori 2008-03-04 361 ^1da177e4c3f41 Linus Torvalds 2005-04-16 362 if (pages_needed <= 8) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 363 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 364 * LAN traffic will not thrash the TLB IFF the same NIC 4f63ba17086673 Joe Perches 2008-02-03 365 * uses 8 adjacent pages to map separate payload data. ^1da177e4c3f41 Linus Torvalds 2005-04-16 366 * ie the same byte in the resource bit map. ^1da177e4c3f41 Linus Torvalds 2005-04-16 367 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 368 #if 0 ^1da177e4c3f41 Linus Torvalds 2005-04-16 369 /* FIXME: bit search should shift it's way through ^1da177e4c3f41 Linus Torvalds 2005-04-16 370 * an unsigned long - not byte@a time. As it is now, ^1da177e4c3f41 Linus Torvalds 2005-04-16 371 * we effectively allocate this byte to this mapping. ^1da177e4c3f41 Linus Torvalds 2005-04-16 372 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 373 unsigned long mask = ~(~0UL >> pages_needed); ^1da177e4c3f41 Linus Torvalds 2005-04-16 374 CCIO_FIND_FREE_MAPPING(ioc, res_idx, mask, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 375 #else ^1da177e4c3f41 Linus Torvalds 2005-04-16 376 CCIO_FIND_FREE_MAPPING(ioc, res_idx, 0xff, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 377 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 @378 } else if (pages_needed <= 16) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 379 CCIO_FIND_FREE_MAPPING(ioc, res_idx, 0xffff, 16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 380 } else if (pages_needed <= 32) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 381 CCIO_FIND_FREE_MAPPING(ioc, res_idx, ~(unsigned int)0, 32); ^1da177e4c3f41 Linus Torvalds 2005-04-16 382 #ifdef __LP64__ ^1da177e4c3f41 Linus Torvalds 2005-04-16 383 } else if (pages_needed <= 64) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 384 CCIO_FIND_FREE_MAPPING(ioc, res_idx, ~0UL, 64); ^1da177e4c3f41 Linus Torvalds 2005-04-16 385 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 386 } else { ^1da177e4c3f41 Linus Torvalds 2005-04-16 387 panic("%s: %s() Too many pages to map. pages_needed: %u\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 388 __FILE__, __func__, pages_needed); ^1da177e4c3f41 Linus Torvalds 2005-04-16 389 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 390 ^1da177e4c3f41 Linus Torvalds 2005-04-16 391 panic("%s: %s() I/O MMU is out of mapping resources.\n", __FILE__, a8043ecb17bd2e Harvey Harrison 2008-05-14 392 __func__); ^1da177e4c3f41 Linus Torvalds 2005-04-16 393 ^1da177e4c3f41 Linus Torvalds 2005-04-16 394 resource_found: ^1da177e4c3f41 Linus Torvalds 2005-04-16 395 ^1da177e4c3f41 Linus Torvalds 2005-04-16 396 DBG_RES("%s() res_idx %d res_hint: %d\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 397 __func__, res_idx, ioc->res_hint); ^1da177e4c3f41 Linus Torvalds 2005-04-16 398 1e22166c40a99f Kyle McMartin 2008-07-28 399 #ifdef CCIO_COLLECT_STATS ^1da177e4c3f41 Linus Torvalds 2005-04-16 400 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 401 unsigned long cr_end = mfctl(16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 402 unsigned long tmp = cr_end - cr_start; ^1da177e4c3f41 Linus Torvalds 2005-04-16 403 /* check for roll over */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 404 cr_start = (cr_end < cr_start) ? -(tmp) : (tmp); ^1da177e4c3f41 Linus Torvalds 2005-04-16 405 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 406 ioc->avg_search[ioc->avg_idx++] = cr_start; ^1da177e4c3f41 Linus Torvalds 2005-04-16 407 ioc->avg_idx &= CCIO_SEARCH_SAMPLE - 1; ^1da177e4c3f41 Linus Torvalds 2005-04-16 408 ioc->used_pages += pages_needed; ^1da177e4c3f41 Linus Torvalds 2005-04-16 409 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 410 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 411 ** return the bit address. ^1da177e4c3f41 Linus Torvalds 2005-04-16 412 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 413 return res_idx << 3; ^1da177e4c3f41 Linus Torvalds 2005-04-16 414 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 415 ^1da177e4c3f41 Linus Torvalds 2005-04-16 416 #define CCIO_FREE_MAPPINGS(ioc, res_idx, mask, size) \ ^1da177e4c3f41 Linus Torvalds 2005-04-16 417 u##size *res_ptr = (u##size *)&((ioc)->res_map[res_idx]); \ ^1da177e4c3f41 Linus Torvalds 2005-04-16 418 BUG_ON((*res_ptr & mask) != mask); \ ^1da177e4c3f41 Linus Torvalds 2005-04-16 419 *res_ptr &= ~(mask); ^1da177e4c3f41 Linus Torvalds 2005-04-16 420 ^1da177e4c3f41 Linus Torvalds 2005-04-16 421 /** ^1da177e4c3f41 Linus Torvalds 2005-04-16 422 * ccio_free_range - Free pages from the ioc's resource map. ^1da177e4c3f41 Linus Torvalds 2005-04-16 423 * @ioc: The I/O Controller. ^1da177e4c3f41 Linus Torvalds 2005-04-16 424 * @iova: The I/O Virtual Address. ^1da177e4c3f41 Linus Torvalds 2005-04-16 425 * @pages_mapped: The requested number of pages to be freed from the ^1da177e4c3f41 Linus Torvalds 2005-04-16 426 * I/O Pdir. ^1da177e4c3f41 Linus Torvalds 2005-04-16 427 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 428 * This function frees the resouces allocated for the iova. ^1da177e4c3f41 Linus Torvalds 2005-04-16 429 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 430 static void ^1da177e4c3f41 Linus Torvalds 2005-04-16 @431 ccio_free_range(struct ioc *ioc, dma_addr_t iova, unsigned long pages_mapped) ^1da177e4c3f41 Linus Torvalds 2005-04-16 432 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 433 unsigned long iovp = CCIO_IOVP(iova); ^1da177e4c3f41 Linus Torvalds 2005-04-16 434 unsigned int res_idx = PDIR_INDEX(iovp) >> 3; ^1da177e4c3f41 Linus Torvalds 2005-04-16 435 ^1da177e4c3f41 Linus Torvalds 2005-04-16 436 BUG_ON(pages_mapped == 0); ^1da177e4c3f41 Linus Torvalds 2005-04-16 437 BUG_ON((pages_mapped * IOVP_SIZE) > DMA_CHUNK_SIZE); ^1da177e4c3f41 Linus Torvalds 2005-04-16 438 BUG_ON(pages_mapped > BITS_PER_LONG); ^1da177e4c3f41 Linus Torvalds 2005-04-16 439 ^1da177e4c3f41 Linus Torvalds 2005-04-16 440 DBG_RES("%s(): res_idx: %d pages_mapped %d\n", a8043ecb17bd2e Harvey Harrison 2008-05-14 441 __func__, res_idx, pages_mapped); ^1da177e4c3f41 Linus Torvalds 2005-04-16 442 1e22166c40a99f Kyle McMartin 2008-07-28 443 #ifdef CCIO_COLLECT_STATS ^1da177e4c3f41 Linus Torvalds 2005-04-16 444 ioc->used_pages -= pages_mapped; ^1da177e4c3f41 Linus Torvalds 2005-04-16 445 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 446 ^1da177e4c3f41 Linus Torvalds 2005-04-16 447 if(pages_mapped <= 8) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 448 #if 0 ^1da177e4c3f41 Linus Torvalds 2005-04-16 449 /* see matching comments in alloc_range */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 450 unsigned long mask = ~(~0UL >> pages_mapped); ^1da177e4c3f41 Linus Torvalds 2005-04-16 451 CCIO_FREE_MAPPINGS(ioc, res_idx, mask, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 452 #else c18b4608958ff4 Alexander Beregalov 2009-03-19 453 CCIO_FREE_MAPPINGS(ioc, res_idx, 0xffUL, 8); ^1da177e4c3f41 Linus Torvalds 2005-04-16 454 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 455 } else if(pages_mapped <= 16) { c18b4608958ff4 Alexander Beregalov 2009-03-19 456 CCIO_FREE_MAPPINGS(ioc, res_idx, 0xffffUL, 16); ^1da177e4c3f41 Linus Torvalds 2005-04-16 457 } else if(pages_mapped <= 32) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 458 CCIO_FREE_MAPPINGS(ioc, res_idx, ~(unsigned int)0, 32); ^1da177e4c3f41 Linus Torvalds 2005-04-16 459 #ifdef __LP64__ ^1da177e4c3f41 Linus Torvalds 2005-04-16 460 } else if(pages_mapped <= 64) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 461 CCIO_FREE_MAPPINGS(ioc, res_idx, ~0UL, 64); ^1da177e4c3f41 Linus Torvalds 2005-04-16 462 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 463 } else { ^1da177e4c3f41 Linus Torvalds 2005-04-16 464 panic("%s:%s() Too many pages to unmap.\n", __FILE__, a8043ecb17bd2e Harvey Harrison 2008-05-14 465 __func__); ^1da177e4c3f41 Linus Torvalds 2005-04-16 466 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 467 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 468 ^1da177e4c3f41 Linus Torvalds 2005-04-16 469 /**************************************************************** ^1da177e4c3f41 Linus Torvalds 2005-04-16 470 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 471 ** CCIO dma_ops support routines ^1da177e4c3f41 Linus Torvalds 2005-04-16 472 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 473 *****************************************************************/ ^1da177e4c3f41 Linus Torvalds 2005-04-16 474 ^1da177e4c3f41 Linus Torvalds 2005-04-16 475 typedef unsigned long space_t; ^1da177e4c3f41 Linus Torvalds 2005-04-16 476 #define KERNEL_SPACE 0 ^1da177e4c3f41 Linus Torvalds 2005-04-16 477 ^1da177e4c3f41 Linus Torvalds 2005-04-16 478 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 479 ** DMA "Page Type" and Hints ^1da177e4c3f41 Linus Torvalds 2005-04-16 480 ** o if SAFE_DMA isn't set, mapping is for FAST_DMA. SAFE_DMA should be ^1da177e4c3f41 Linus Torvalds 2005-04-16 481 ** set for subcacheline DMA transfers since we don't want to damage the ^1da177e4c3f41 Linus Torvalds 2005-04-16 482 ** other part of a cacheline. ^1da177e4c3f41 Linus Torvalds 2005-04-16 483 ** o SAFE_DMA must be set for "memory" allocated via pci_alloc_consistent(). ^1da177e4c3f41 Linus Torvalds 2005-04-16 484 ** This bit tells U2 to do R/M/W for partial cachelines. "Streaming" ^1da177e4c3f41 Linus Torvalds 2005-04-16 485 ** data can avoid this if the mapping covers full cache lines. ^1da177e4c3f41 Linus Torvalds 2005-04-16 486 ** o STOP_MOST is needed for atomicity across cachelines. 0779bf2d2ecc4d Matt LaPlante 2006-11-30 487 ** Apparently only "some EISA devices" need this. ^1da177e4c3f41 Linus Torvalds 2005-04-16 488 ** Using CONFIG_ISA is hack. Only the IOA with EISA under it needs ^1da177e4c3f41 Linus Torvalds 2005-04-16 489 ** to use this hint iff the EISA devices needs this feature. ^1da177e4c3f41 Linus Torvalds 2005-04-16 490 ** According to the U2 ERS, STOP_MOST enabled pages hurt performance. ^1da177e4c3f41 Linus Torvalds 2005-04-16 491 ** o PREFETCH should *not* be set for cases like Multiple PCI devices ^1da177e4c3f41 Linus Torvalds 2005-04-16 492 ** behind GSCtoPCI (dino) bus converter. Only one cacheline per GSC ^1da177e4c3f41 Linus Torvalds 2005-04-16 493 ** device can be fetched and multiply DMA streams will thrash the ^1da177e4c3f41 Linus Torvalds 2005-04-16 494 ** prefetch buffer and burn memory bandwidth. See 6.7.3 "Prefetch Rules ^1da177e4c3f41 Linus Torvalds 2005-04-16 495 ** and Invalidation of Prefetch Entries". ^1da177e4c3f41 Linus Torvalds 2005-04-16 496 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 497 ** FIXME: the default hints need to be per GSC device - not global. ^1da177e4c3f41 Linus Torvalds 2005-04-16 498 ** ^1da177e4c3f41 Linus Torvalds 2005-04-16 499 ** HP-UX dorks: linux device driver programming model is totally different ^1da177e4c3f41 Linus Torvalds 2005-04-16 500 ** than HP-UX's. HP-UX always sets HINT_PREFETCH since it's drivers ^1da177e4c3f41 Linus Torvalds 2005-04-16 501 ** do special things to work on non-coherent platforms...linux has to ^1da177e4c3f41 Linus Torvalds 2005-04-16 502 ** be much more careful with this. ^1da177e4c3f41 Linus Torvalds 2005-04-16 503 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 504 #define IOPDIR_VALID 0x01UL ^1da177e4c3f41 Linus Torvalds 2005-04-16 505 #define HINT_SAFE_DMA 0x02UL /* used for pci_alloc_consistent() pages */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 506 #ifdef CONFIG_EISA ^1da177e4c3f41 Linus Torvalds 2005-04-16 507 #define HINT_STOP_MOST 0x04UL /* LSL support */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 508 #else ^1da177e4c3f41 Linus Torvalds 2005-04-16 509 #define HINT_STOP_MOST 0x00UL /* only needed for "some EISA devices" */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 510 #endif ^1da177e4c3f41 Linus Torvalds 2005-04-16 511 #define HINT_UDPATE_ENB 0x08UL /* not used/supported by U2 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 512 #define HINT_PREFETCH 0x10UL /* for outbound pages which are not SAFE */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 513 ^1da177e4c3f41 Linus Torvalds 2005-04-16 514 ^1da177e4c3f41 Linus Torvalds 2005-04-16 515 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 516 ** Use direction (ie PCI_DMA_TODEVICE) to pick hint. ^1da177e4c3f41 Linus Torvalds 2005-04-16 517 ** ccio_alloc_consistent() depends on this to get SAFE_DMA ^1da177e4c3f41 Linus Torvalds 2005-04-16 518 ** when it passes in BIDIRECTIONAL flag. ^1da177e4c3f41 Linus Torvalds 2005-04-16 519 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 520 static u32 hint_lookup[] = { ^1da177e4c3f41 Linus Torvalds 2005-04-16 521 [PCI_DMA_BIDIRECTIONAL] = HINT_STOP_MOST | HINT_SAFE_DMA | IOPDIR_VALID, ^1da177e4c3f41 Linus Torvalds 2005-04-16 522 [PCI_DMA_TODEVICE] = HINT_STOP_MOST | HINT_PREFETCH | IOPDIR_VALID, ^1da177e4c3f41 Linus Torvalds 2005-04-16 523 [PCI_DMA_FROMDEVICE] = HINT_STOP_MOST | IOPDIR_VALID, ^1da177e4c3f41 Linus Torvalds 2005-04-16 524 }; ^1da177e4c3f41 Linus Torvalds 2005-04-16 525 ^1da177e4c3f41 Linus Torvalds 2005-04-16 526 /** ^1da177e4c3f41 Linus Torvalds 2005-04-16 527 * ccio_io_pdir_entry - Initialize an I/O Pdir. ^1da177e4c3f41 Linus Torvalds 2005-04-16 528 * @pdir_ptr: A pointer into I/O Pdir. ^1da177e4c3f41 Linus Torvalds 2005-04-16 529 * @sid: The Space Identifier. ^1da177e4c3f41 Linus Torvalds 2005-04-16 530 * @vba: The virtual address. ^1da177e4c3f41 Linus Torvalds 2005-04-16 531 * @hints: The DMA Hint. ^1da177e4c3f41 Linus Torvalds 2005-04-16 532 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 533 * Given a virtual address (vba, arg2) and space id, (sid, arg1), ^1da177e4c3f41 Linus Torvalds 2005-04-16 534 * load the I/O PDIR entry pointed to by pdir_ptr (arg0). Each IO Pdir ^1da177e4c3f41 Linus Torvalds 2005-04-16 535 * entry consists of 8 bytes as shown below (MSB == bit 0): ^1da177e4c3f41 Linus Torvalds 2005-04-16 536 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 537 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 538 * WORD 0: ^1da177e4c3f41 Linus Torvalds 2005-04-16 539 * +------+----------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 540 * | Phys | Virtual Index | Phys | ^1da177e4c3f41 Linus Torvalds 2005-04-16 541 * | 0:3 | 0:11 | 4:19 | ^1da177e4c3f41 Linus Torvalds 2005-04-16 542 * |4 bits| 12 bits | 16 bits | ^1da177e4c3f41 Linus Torvalds 2005-04-16 543 * +------+----------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 544 * WORD 1: ^1da177e4c3f41 Linus Torvalds 2005-04-16 545 * +-----------------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 546 * | Phys | Rsvd | Prefetch |Update |Rsvd |Lock |Safe |Valid | ^1da177e4c3f41 Linus Torvalds 2005-04-16 547 * | 20:39 | | Enable |Enable | |Enable|DMA | | ^1da177e4c3f41 Linus Torvalds 2005-04-16 548 * | 20 bits | 5 bits | 1 bit |1 bit |2 bits|1 bit |1 bit |1 bit | ^1da177e4c3f41 Linus Torvalds 2005-04-16 549 * +-----------------------+-----------------------------------------------+ ^1da177e4c3f41 Linus Torvalds 2005-04-16 550 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 551 * The virtual index field is filled with the results of the LCI ^1da177e4c3f41 Linus Torvalds 2005-04-16 552 * (Load Coherence Index) instruction. The 8 bits used for the virtual ^1da177e4c3f41 Linus Torvalds 2005-04-16 553 * index are bits 12:19 of the value returned by LCI. ^1da177e4c3f41 Linus Torvalds 2005-04-16 554 */ df8e5bc6b7b61c Adrian Bunk 2008-12-02 555 static void CCIO_INLINE ^1da177e4c3f41 Linus Torvalds 2005-04-16 @556 ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba, ^1da177e4c3f41 Linus Torvalds 2005-04-16 557 unsigned long hints) ^1da177e4c3f41 Linus Torvalds 2005-04-16 558 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 559 register unsigned long pa; ^1da177e4c3f41 Linus Torvalds 2005-04-16 560 register unsigned long ci; /* coherent index */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 561 ^1da177e4c3f41 Linus Torvalds 2005-04-16 562 /* We currently only support kernel addresses */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 563 BUG_ON(sid != KERNEL_SPACE); ^1da177e4c3f41 Linus Torvalds 2005-04-16 564 ^1da177e4c3f41 Linus Torvalds 2005-04-16 565 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 566 ** WORD 1 - low order word ^1da177e4c3f41 Linus Torvalds 2005-04-16 567 ** "hints" parm includes the VALID bit! ^1da177e4c3f41 Linus Torvalds 2005-04-16 568 ** "dep" clobbers the physical address offset bits as well. ^1da177e4c3f41 Linus Torvalds 2005-04-16 569 */ 116d753308cf03 John David Anglin 2019-06-02 570 pa = lpa(vba); ^1da177e4c3f41 Linus Torvalds 2005-04-16 571 asm volatile("depw %1,31,12,%0" : "+r" (pa) : "r" (hints)); ^1da177e4c3f41 Linus Torvalds 2005-04-16 572 ((u32 *)pdir_ptr)[1] = (u32) pa; ^1da177e4c3f41 Linus Torvalds 2005-04-16 573 ^1da177e4c3f41 Linus Torvalds 2005-04-16 574 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 575 ** WORD 0 - high order word ^1da177e4c3f41 Linus Torvalds 2005-04-16 576 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 577 --- 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: 18449 bytes --]
next prev parent reply other threads:[~2021-04-28 21:45 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-28 15:39 [PATCH] drivers: parisc: ccio-dma.c: Added tab insead of spaces Shubhankar Kuranagatti 2021-04-28 19:37 ` kernel test robot 2021-04-28 19:37 ` kernel test robot 2021-04-28 21:44 ` kernel test robot [this message] 2021-04-28 21:44 ` 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=202104290520.dBG08UEB-lkp@intel.com \ --to=lkp@intel.com \ --cc=James.Bottomley@HansenPartnership.com \ --cc=deller@gmx.de \ --cc=kbuild-all@lists.01.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-parisc@vger.kernel.org \ --cc=sanjanasrinidhi1810@gmail.com \ --cc=shubhankarvk@gmail.com \ /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: linkBe 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.