apple-admac.c (c900529f3d9161bfde5cca0754f83b4d3c3e0220) | apple-admac.c (43ee59fa01c8a1e8ce46b9248c678ba6f739681a) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Driver for Audio DMA Controller (ADMAC) on t8103 (M1) and other Apple chips 4 * 5 * Copyright (C) The Asahi Linux Contributors 6 */ 7 8#include <linux/bits.h> --- 43 unchanged lines hidden (view full) --- 52 53#define REG_DESC_RING(ch) (0x8070 + (ch) * 0x200) 54#define REG_REPORT_RING(ch) (0x8074 + (ch) * 0x200) 55 56#define REG_RESIDUE(ch) (0x8064 + (ch) * 0x200) 57 58#define REG_BUS_WIDTH(ch) (0x8040 + (ch) * 0x200) 59 | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Driver for Audio DMA Controller (ADMAC) on t8103 (M1) and other Apple chips 4 * 5 * Copyright (C) The Asahi Linux Contributors 6 */ 7 8#include <linux/bits.h> --- 43 unchanged lines hidden (view full) --- 52 53#define REG_DESC_RING(ch) (0x8070 + (ch) * 0x200) 54#define REG_REPORT_RING(ch) (0x8074 + (ch) * 0x200) 55 56#define REG_RESIDUE(ch) (0x8064 + (ch) * 0x200) 57 58#define REG_BUS_WIDTH(ch) (0x8040 + (ch) * 0x200) 59 |
60#define BUS_WIDTH_WORD_SIZE GENMASK(3, 0) 61#define BUS_WIDTH_FRAME_SIZE GENMASK(7, 4) |
|
60#define BUS_WIDTH_8BIT 0x00 61#define BUS_WIDTH_16BIT 0x01 62#define BUS_WIDTH_32BIT 0x02 63#define BUS_WIDTH_FRAME_2_WORDS 0x10 64#define BUS_WIDTH_FRAME_4_WORDS 0x20 65 66#define REG_CHAN_SRAM_CARVEOUT(ch) (0x8050 + (ch) * 0x200) 67#define CHAN_SRAM_CARVEOUT_SIZE GENMASK(31, 16) --- 667 unchanged lines hidden (view full) --- 735 736static int admac_device_config(struct dma_chan *chan, 737 struct dma_slave_config *config) 738{ 739 struct admac_chan *adchan = to_admac_chan(chan); 740 struct admac_data *ad = adchan->host; 741 bool is_tx = admac_chan_direction(adchan->no) == DMA_MEM_TO_DEV; 742 int wordsize = 0; | 62#define BUS_WIDTH_8BIT 0x00 63#define BUS_WIDTH_16BIT 0x01 64#define BUS_WIDTH_32BIT 0x02 65#define BUS_WIDTH_FRAME_2_WORDS 0x10 66#define BUS_WIDTH_FRAME_4_WORDS 0x20 67 68#define REG_CHAN_SRAM_CARVEOUT(ch) (0x8050 + (ch) * 0x200) 69#define CHAN_SRAM_CARVEOUT_SIZE GENMASK(31, 16) --- 667 unchanged lines hidden (view full) --- 737 738static int admac_device_config(struct dma_chan *chan, 739 struct dma_slave_config *config) 740{ 741 struct admac_chan *adchan = to_admac_chan(chan); 742 struct admac_data *ad = adchan->host; 743 bool is_tx = admac_chan_direction(adchan->no) == DMA_MEM_TO_DEV; 744 int wordsize = 0; |
743 u32 bus_width = 0; | 745 u32 bus_width = readl_relaxed(ad->base + REG_BUS_WIDTH(adchan->no)) & 746 ~(BUS_WIDTH_WORD_SIZE | BUS_WIDTH_FRAME_SIZE); |
744 745 switch (is_tx ? config->dst_addr_width : config->src_addr_width) { 746 case DMA_SLAVE_BUSWIDTH_1_BYTE: 747 wordsize = 1; 748 bus_width |= BUS_WIDTH_8BIT; 749 break; 750 case DMA_SLAVE_BUSWIDTH_2_BYTES: 751 wordsize = 2; --- 207 unchanged lines hidden --- | 747 748 switch (is_tx ? config->dst_addr_width : config->src_addr_width) { 749 case DMA_SLAVE_BUSWIDTH_1_BYTE: 750 wordsize = 1; 751 bus_width |= BUS_WIDTH_8BIT; 752 break; 753 case DMA_SLAVE_BUSWIDTH_2_BYTES: 754 wordsize = 2; --- 207 unchanged lines hidden --- |