summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiu Ying <Ying.Liu@freescale.com>2015-06-10 16:50:58 +0800
committerLiu Ying <Ying.Liu@freescale.com>2015-06-11 10:22:23 +0800
commit439bb0179b48e543c5fe4b4dc75b0060677131cc (patch)
tree0608228f9f345513ae0fe9f069c7f4fb573dfc1b
parentb44f2fbac292efe29f2bdff36bcfec537e6c2511 (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.c17
-rw-r--r--drivers/mxc/ipu3/ipu_prv.h2
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;