mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
dmaengine: PL08x: Add support for different maximum transfer size
PL080S has separate register to store transfer size in, allowing single transfer to be much larger than in standard PL080. This patch makes the amba-pl08x driver aware of this and removes writing transfer size to reserved bits of CH_CONTROL register on PL080S, which was not a problem witn transfer sizes fitting the original bitfield of PL080, but now would overwrite other fields. Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
da1b6c05b8
commit
5110e51d12
1 changed files with 7 additions and 1 deletions
|
@ -115,6 +115,7 @@ struct vendor_data {
|
|||
bool dualmaster;
|
||||
bool nomadik;
|
||||
bool pl080s;
|
||||
u32 max_transfer_size;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -783,6 +784,7 @@ static inline u32 pl08x_cctl_bits(u32 cctl, u8 srcwidth, u8 dstwidth,
|
|||
break;
|
||||
}
|
||||
|
||||
tsize &= PL080_CONTROL_TRANSFER_SIZE_MASK;
|
||||
retbits |= tsize << PL080_CONTROL_TRANSFER_SIZE_SHIFT;
|
||||
return retbits;
|
||||
}
|
||||
|
@ -1050,7 +1052,7 @@ static int pl08x_fill_llis_for_desc(struct pl08x_driver_data *pl08x,
|
|||
* MIN(buswidths)
|
||||
*/
|
||||
max_bytes_per_lli = bd.srcbus.buswidth *
|
||||
PL080_CONTROL_TRANSFER_SIZE_MASK;
|
||||
pl08x->vd->max_transfer_size;
|
||||
dev_vdbg(&pl08x->adev->dev,
|
||||
"%s max bytes per lli = %zu\n",
|
||||
__func__, max_bytes_per_lli);
|
||||
|
@ -2152,6 +2154,7 @@ static struct vendor_data vendor_pl080 = {
|
|||
.config_offset = PL080_CH_CONFIG,
|
||||
.channels = 8,
|
||||
.dualmaster = true,
|
||||
.max_transfer_size = PL080_CONTROL_TRANSFER_SIZE_MASK,
|
||||
};
|
||||
|
||||
static struct vendor_data vendor_nomadik = {
|
||||
|
@ -2159,18 +2162,21 @@ static struct vendor_data vendor_nomadik = {
|
|||
.channels = 8,
|
||||
.dualmaster = true,
|
||||
.nomadik = true,
|
||||
.max_transfer_size = PL080_CONTROL_TRANSFER_SIZE_MASK,
|
||||
};
|
||||
|
||||
static struct vendor_data vendor_pl080s = {
|
||||
.config_offset = PL080S_CH_CONFIG,
|
||||
.channels = 8,
|
||||
.pl080s = true,
|
||||
.max_transfer_size = PL080S_CONTROL_TRANSFER_SIZE_MASK,
|
||||
};
|
||||
|
||||
static struct vendor_data vendor_pl081 = {
|
||||
.config_offset = PL080_CH_CONFIG,
|
||||
.channels = 2,
|
||||
.dualmaster = false,
|
||||
.max_transfer_size = PL080_CONTROL_TRANSFER_SIZE_MASK,
|
||||
};
|
||||
|
||||
static struct amba_id pl08x_ids[] = {
|
||||
|
|
Loading…
Reference in a new issue