Module Name: src Committed By: skrll Date: Sat Apr 19 07:28:18 UTC 2014
Modified Files: src/sys/external/bsd/vchiq/dist/interface/vchiq_arm: vchiq_2835_arm.c Log Message: Deal in 4KB pages for vchiq regardless of ARM page size. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 \ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c diff -u src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c:1.15 src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c:1.16 --- src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c:1.15 Sat Apr 19 07:17:21 2014 +++ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c Sat Apr 19 07:28:18 2014 @@ -338,14 +338,19 @@ vchiq_prepare_bulk_data(VCHIQ_BULK_T *bu pagelist->type = (dir == VCHIQ_BULK_RECEIVE) ? PAGELIST_READ : PAGELIST_WRITE; pagelist->length = size; - pagelist->offset = va & PAGE_MASK; + pagelist->offset = va & L2_S_OFFSET; /* * busdma already coalesces contiguous pages for us */ for (int i = 0; i < bi->dmamap->dm_nsegs; i++) { - pagelist->addrs[i] = bi->dmamap->dm_segs[i].ds_addr & ~PAGE_MASK; - pagelist->addrs[i] |= atop(round_page(bi->dmamap->dm_segs[i].ds_len)) - 1; + bus_addr_t addr = bi->dmamap->dm_segs[i].ds_addr; + bus_size_t len = bi->dmamap->dm_segs[i].ds_len; + bus_size_t off = addr & L2_S_OFFSET; + int npgs = ((off + len + L2_S_OFFSET) >> L2_S_SHIFT); + + pagelist->addrs[i] = addr & ~L2_S_OFFSET; + pagelist->addrs[i] |= npgs - 1; } /* Partial cache lines (fragments) require special measures */