xlnx-zdma.c (b7cbebf2b9d7aa8854cfd6a45484e160244e9f48) | xlnx-zdma.c (19f703477314a5db09ffc3c0f6be9c45645f8302) |
---|---|
1/* 2 * QEMU model of the ZynqMP generic DMA 3 * 4 * Copyright (c) 2014 Xilinx Inc. 5 * Copyright (c) 2018 FEIMTECH AB 6 * 7 * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>, 8 * Francisco Iglesias <francisco.iglesias@feimtech.se> --- 297 unchanged lines hidden (view full) --- 306 qemu_log_mask(LOG_GUEST_ERROR, 307 "zdma: unaligned descriptor at %" PRIx64, 308 addr); 309 memset(buf, 0x0, sizeof(XlnxZDMADescr)); 310 s->error = true; 311 return false; 312 } 313 | 1/* 2 * QEMU model of the ZynqMP generic DMA 3 * 4 * Copyright (c) 2014 Xilinx Inc. 5 * Copyright (c) 2018 FEIMTECH AB 6 * 7 * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>, 8 * Francisco Iglesias <francisco.iglesias@feimtech.se> --- 297 unchanged lines hidden (view full) --- 306 qemu_log_mask(LOG_GUEST_ERROR, 307 "zdma: unaligned descriptor at %" PRIx64, 308 addr); 309 memset(buf, 0x0, sizeof(XlnxZDMADescr)); 310 s->error = true; 311 return false; 312 } 313 |
314 address_space_rw(s->dma_as, addr, s->attr, 315 buf, sizeof(XlnxZDMADescr), false); | 314 address_space_read(s->dma_as, addr, s->attr, buf, sizeof(XlnxZDMADescr)); |
316 return true; 317} 318 319static void zdma_load_src_descriptor(XlnxZDMA *s) 320{ 321 uint64_t src_addr; 322 unsigned int ptype = ARRAY_FIELD_EX32(s->regs, ZDMA_CH_CTRL0, POINT_TYPE); 323 --- 35 unchanged lines hidden (view full) --- 359 360 if (type == DTYPE_LINEAR) { 361 next = zdma_get_regaddr64(s, basereg); 362 next += sizeof(s->dsc_dst); 363 zdma_put_regaddr64(s, basereg, next); 364 } else { 365 addr = zdma_get_regaddr64(s, basereg); 366 addr += sizeof(s->dsc_dst); | 315 return true; 316} 317 318static void zdma_load_src_descriptor(XlnxZDMA *s) 319{ 320 uint64_t src_addr; 321 unsigned int ptype = ARRAY_FIELD_EX32(s->regs, ZDMA_CH_CTRL0, POINT_TYPE); 322 --- 35 unchanged lines hidden (view full) --- 358 359 if (type == DTYPE_LINEAR) { 360 next = zdma_get_regaddr64(s, basereg); 361 next += sizeof(s->dsc_dst); 362 zdma_put_regaddr64(s, basereg, next); 363 } else { 364 addr = zdma_get_regaddr64(s, basereg); 365 addr += sizeof(s->dsc_dst); |
367 address_space_rw(s->dma_as, addr, s->attr, &next, 8, false); | 366 address_space_read(s->dma_as, addr, s->attr, &next, 8); |
368 zdma_put_regaddr64(s, basereg, next); 369 } 370 return next; 371} 372 373static void zdma_write_dst(XlnxZDMA *s, uint8_t *buf, uint32_t len) 374{ 375 uint32_t dst_size, dlen; --- 35 unchanged lines hidden (view full) --- 411 412 dlen = len > dst_size ? dst_size : len; 413 if (burst_type == AXI_BURST_FIXED) { 414 if (dlen > (s->cfg.bus_width / 8)) { 415 dlen = s->cfg.bus_width / 8; 416 } 417 } 418 | 367 zdma_put_regaddr64(s, basereg, next); 368 } 369 return next; 370} 371 372static void zdma_write_dst(XlnxZDMA *s, uint8_t *buf, uint32_t len) 373{ 374 uint32_t dst_size, dlen; --- 35 unchanged lines hidden (view full) --- 410 411 dlen = len > dst_size ? dst_size : len; 412 if (burst_type == AXI_BURST_FIXED) { 413 if (dlen > (s->cfg.bus_width / 8)) { 414 dlen = s->cfg.bus_width / 8; 415 } 416 } 417 |
419 address_space_rw(s->dma_as, s->dsc_dst.addr, s->attr, buf, dlen, 420 true); | 418 address_space_write(s->dma_as, s->dsc_dst.addr, s->attr, buf, dlen); |
421 if (burst_type == AXI_BURST_INCR) { 422 s->dsc_dst.addr += dlen; 423 } 424 dst_size -= dlen; 425 buf += dlen; 426 len -= dlen; 427 428 if (dst_size == 0 && dst_intr) { --- 59 unchanged lines hidden (view full) --- 488 } 489 } 490 491 if (rw_mode == RW_MODE_WO) { 492 if (len > s->cfg.bus_width / 8) { 493 len = s->cfg.bus_width / 8; 494 } 495 } else { | 419 if (burst_type == AXI_BURST_INCR) { 420 s->dsc_dst.addr += dlen; 421 } 422 dst_size -= dlen; 423 buf += dlen; 424 len -= dlen; 425 426 if (dst_size == 0 && dst_intr) { --- 59 unchanged lines hidden (view full) --- 486 } 487 } 488 489 if (rw_mode == RW_MODE_WO) { 490 if (len > s->cfg.bus_width / 8) { 491 len = s->cfg.bus_width / 8; 492 } 493 } else { |
496 address_space_rw(s->dma_as, src_addr, s->attr, s->buf, len, 497 false); | 494 address_space_read(s->dma_as, src_addr, s->attr, s->buf, len); |
498 if (burst_type == AXI_BURST_INCR) { 499 src_addr += len; 500 } 501 } 502 503 if (rw_mode != RW_MODE_RO) { 504 zdma_write_dst(s, s->buf, len); 505 } --- 335 unchanged lines hidden --- | 495 if (burst_type == AXI_BURST_INCR) { 496 src_addr += len; 497 } 498 } 499 500 if (rw_mode != RW_MODE_RO) { 501 zdma_write_dst(s, s->buf, len); 502 } --- 335 unchanged lines hidden --- |