diff options
author | Liu Ying <Ying.Liu@freescale.com> | 2015-06-10 16:50:58 +0800 |
---|---|---|
committer | Liu Ying <Ying.Liu@freescale.com> | 2015-06-11 10:22:23 +0800 |
commit | 439bb0179b48e543c5fe4b4dc75b0060677131cc (patch) | |
tree | 0608228f9f345513ae0fe9f069c7f4fb573dfc1b | |
parent | b44f2fbac292efe29f2bdff36bcfec537e6c2511 (diff) |
MLK-11082 mxc IPUv3: common: Explicitly set IDMAC0/1/2/3 AXI ID for various SoCs
The IDMAC0/1/2/3 channels are real time channels for video input capture via
the SMFC0/1/2/3 channels respectively. These IDMAC channels should have high
priority in IPUv3(controlled by the register IDMAC_CH_PRI_1) to make sure
the capture channels may access memory whenever they want. Accordingly,
the AXI ID of the IDMAC channels should reflect it's high priority nature in
the fabric settings(controlled by IPUx_IDy_RD/WR_QoS fields) with a relatively
good QoS value. This patch explicitly sets IDMAC0/1/2/3 AXI ID for various
SoCs to match the fabric settings(programmed in machine layer or bootloader).
Signed-off-by: Liu Ying <Ying.Liu@freescale.com>
(cherry picked from commit 70dfca096aa1be07dc6eb83c0a11998a9c69804d)
-rw-r--r-- | drivers/mxc/ipu3/ipu_common.c | 17 | ||||
-rw-r--r-- | drivers/mxc/ipu3/ipu_prv.h | 2 |
2 files changed, 11 insertions, 8 deletions
diff --git a/drivers/mxc/ipu3/ipu_common.c b/drivers/mxc/ipu3/ipu_common.c index 3c19a35cb126..297dcca46353 100644 --- a/drivers/mxc/ipu3/ipu_common.c +++ b/drivers/mxc/ipu3/ipu_common.c @@ -307,7 +307,7 @@ struct ipu_devtype { struct ipu_platform_type { struct ipu_devtype devtype; - unsigned int ch0_axi; + unsigned int ch0123_axi; unsigned int ch23_axi; unsigned int ch27_axi; unsigned int ch28_axi; @@ -340,7 +340,7 @@ static struct ipu_platform_type ipu_type_imx51 = { .type = IPUv3EX, .idmac_used_bufs_present = false, }, - .ch0_axi = 1, + .ch0123_axi = 1, .ch23_axi = 1, .ch23_axi = 1, .ch27_axi = 1, @@ -370,7 +370,7 @@ static struct ipu_platform_type ipu_type_imx53 = { .type = IPUv3M, .idmac_used_bufs_present = true, }, - .ch0_axi = 1, + .ch0123_axi = 1, .ch23_axi = 1, .ch27_axi = 1, .ch28_axi = 1, @@ -401,7 +401,7 @@ static struct ipu_platform_type ipu_type_imx6q = { .type = IPUv3H, .idmac_used_bufs_present = true, }, - .ch0_axi = 0, + .ch0123_axi = 0, .ch23_axi = 0, .ch27_axi = 0, .ch28_axi = 0, @@ -432,7 +432,7 @@ static struct ipu_platform_type ipu_type_imx6qp = { .type = IPUv3H, .idmac_used_bufs_present = true, }, - .ch0_axi = 0, + .ch0123_axi = 0, .ch23_axi = 0, .ch27_axi = 2, .ch28_axi = 3, @@ -495,7 +495,7 @@ static int ipu_probe(struct platform_device *pdev) ipu->dev = &pdev->dev; ipu->id = id; ipu->devtype = devtype->type; - ipu->ch0_axi = iputype->ch0_axi; + ipu->ch0123_axi = iputype->ch0123_axi; ipu->ch23_axi = iputype->ch23_axi; ipu->ch27_axi = iputype->ch27_axi; ipu->ch28_axi = iputype->ch28_axi; @@ -1501,7 +1501,10 @@ int32_t ipu_init_channel_buffer(struct ipu_soc *ipu, ipu_channel_t channel, switch (dma_chan) { case 0: - _ipu_ch_param_set_axi_id(ipu, dma_chan, ipu->ch0_axi); + case 1: + case 2: + case 3: + _ipu_ch_param_set_axi_id(ipu, dma_chan, ipu->ch0123_axi); break; case 23: _ipu_ch_param_set_axi_id(ipu, dma_chan, ipu->ch23_axi); diff --git a/drivers/mxc/ipu3/ipu_prv.h b/drivers/mxc/ipu3/ipu_prv.h index 130d81102a39..0a77b580d6a1 100644 --- a/drivers/mxc/ipu3/ipu_prv.h +++ b/drivers/mxc/ipu3/ipu_prv.h @@ -143,7 +143,7 @@ struct ipu_soc { */ bool bypass_reset; - unsigned int ch0_axi; + unsigned int ch0123_axi; unsigned int ch23_axi; unsigned int ch27_axi; unsigned int ch28_axi; |