mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
aspeed/i2c: Add support for DMA transfers
The I2C controller of the Aspeed AST2500 and AST2600 SoCs supports DMA transfers to and from DRAM. A pair of registers defines the buffer address and the length of the DMA transfer. The address should be aligned on 4 bytes and the maximum length should not exceed 4K. The receive or transmit DMA transfer can then be initiated with specific bits in the Command/Status register of the controller. Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Joel Stanley <joel@jms.id.au> Tested-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com> Signed-off-by: Cédric Le Goater <clg@kaod.org> Message-id: 20191119141211.25716-5-clg@kaod.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
95b56e173e
commit
545d6bef70
4 changed files with 138 additions and 3 deletions
|
@ -52,6 +52,8 @@ typedef struct AspeedI2CBus {
|
|||
uint32_t cmd;
|
||||
uint32_t buf;
|
||||
uint32_t pool_ctrl;
|
||||
uint32_t dma_addr;
|
||||
uint32_t dma_len;
|
||||
} AspeedI2CBus;
|
||||
|
||||
typedef struct AspeedI2CState {
|
||||
|
@ -66,6 +68,8 @@ typedef struct AspeedI2CState {
|
|||
uint8_t pool[ASPEED_I2C_MAX_POOL_SIZE];
|
||||
|
||||
AspeedI2CBus busses[ASPEED_I2C_NR_BUSSES];
|
||||
MemoryRegion *dram_mr;
|
||||
AddressSpace dram_as;
|
||||
} AspeedI2CState;
|
||||
|
||||
#define ASPEED_I2C_CLASS(klass) \
|
||||
|
@ -85,6 +89,7 @@ typedef struct AspeedI2CClass {
|
|||
hwaddr pool_base;
|
||||
uint8_t *(*bus_pool_base)(AspeedI2CBus *);
|
||||
bool check_sram;
|
||||
bool has_dma;
|
||||
|
||||
} AspeedI2CClass;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue