From patchwork Thu Jun 12 17:06:16 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Zabel X-Patchwork-Id: 24331 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1Wv8Tr-00071M-V2; Thu, 12 Jun 2014 19:08:03 +0200 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.72/mailfrontend-7) with esmtp id 1Wv8Tp-0001KV-33; Thu, 12 Jun 2014 19:08:03 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756236AbaFLRGp (ORCPT + 1 other); Thu, 12 Jun 2014 13:06:45 -0400 Received: from metis.ext.pengutronix.de ([92.198.50.35]:33007 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753124AbaFLRGo (ORCPT ); Thu, 12 Jun 2014 13:06:44 -0400 Received: from dude.hi.pengutronix.de ([10.1.0.7] helo=dude.pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1Wv8SY-0000jm-Mj; Thu, 12 Jun 2014 19:06:42 +0200 From: Philipp Zabel To: linux-media@vger.kernel.org Cc: Steve Longerbeam , Sascha Hauer , Philipp Zabel Subject: [RFC PATCH 02/26] gpu: ipu-v3: Register IC with IPUv3 Date: Thu, 12 Jun 2014 19:06:16 +0200 Message-Id: <1402592800-2925-3-git-send-email-p.zabel@pengutronix.de> X-Mailer: git-send-email 2.0.0.rc2 In-Reply-To: <1402592800-2925-1-git-send-email-p.zabel@pengutronix.de> References: <1402592800-2925-1-git-send-email-p.zabel@pengutronix.de> X-SA-Exim-Connect-IP: 10.1.0.7 X-SA-Exim-Mail-From: p.zabel@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-media@vger.kernel.org Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2014.6.12.170318 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' MULTIPLE_RCPTS 0.1, HTML_00_01 0.05, HTML_00_10 0.05, BODY_SIZE_3000_3999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_URI_IN_BODY 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __IN_REP_TO 0, __MIME_TEXT_ONLY 0, __MULTIPLE_RCPTS_CC_X2 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_WWW 0, __URI_NS ' From: Sascha Hauer Signed-off-by: Sascha Hauer Signed-off-by: Philipp Zabel --- drivers/gpu/ipu-v3/ipu-common.c | 35 +++++++++++++++++++++++++++++++++++ drivers/gpu/ipu-v3/ipu-prv.h | 6 ++++++ 2 files changed, 41 insertions(+) diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index 719788c..a4910d8 100644 --- a/drivers/gpu/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c @@ -914,8 +914,18 @@ static int ipu_submodules_init(struct ipu_soc *ipu, goto err_smfc; } + ret = ipu_ic_init(ipu, dev, ipu_base + devtype->cm_ofs + + IPU_CM_IC_REG_OFS, ipu_base + devtype->tpm_ofs, + ipu_base + devtype->vdi_ofs); + if (ret) { + unit = "ic"; + goto err_ic; + } + return 0; +err_ic: + ipu_smfc_exit(ipu); err_smfc: ipu_dp_exit(ipu); err_dp: @@ -995,6 +1005,7 @@ static void ipu_submodules_exit(struct ipu_soc *ipu) ipu_dc_exit(ipu); ipu_di_exit(ipu, 1); ipu_di_exit(ipu, 0); + ipu_ic_exit(ipu); } static int platform_remove_devices_fn(struct device *dev, void *unused) @@ -1052,6 +1063,18 @@ static const struct ipu_platform_reg client_reg[] = { }, .reg_offset = IPU_CM_CSI1_REG_OFS, .name = "imx-ipuv3-camera", + }, { + .pdata = { + .dma[0] = IPUV3_CHANNEL_MEM_FG_SYNC, + }, + .name = "imx-ipuv3-scaler", + }, { + .pdata = { + .dma[0] = IPUV3_CHANNEL_MEM_FG_SYNC, + }, + .name = "imx-ipuv3-ovl", + }, { + .name = "imx-ipuv3-vdic", }, }; @@ -1179,6 +1202,7 @@ static int ipu_probe(struct platform_device *pdev) unsigned long ipu_base; int i, ret, irq_sync, irq_err; const struct ipu_devtype *devtype; + u32 reg; devtype = of_id->data; @@ -1272,6 +1296,9 @@ static int ipu_probe(struct platform_device *pdev) if (ret) goto out_failed_reset; + /* Set sync refresh channels as high priority */ + ipu_idmac_write(ipu, 0x18800000, IDMAC_CHA_PRI(0)); + /* Set MCU_T to divide MCU access window into 2 */ ipu_cm_write(ipu, 0x00400000L | (IPU_MCU_T_DEFAULT << 18), IPU_DISP_GEN); @@ -1280,6 +1307,14 @@ static int ipu_probe(struct platform_device *pdev) if (ret) goto failed_submodules_init; + reg = ipu_cm_read(ipu, IPU_FS_PROC_FLOW1); + reg |= (5 << 24); + ipu_cm_write(ipu, reg, IPU_FS_PROC_FLOW1); + + reg = ipu_cm_read(ipu, IPU_CONF); + reg |= IPU_CONF_IC_INPUT; + ipu_cm_write(ipu, reg, IPU_CONF); + ret = ipu_add_client_devices(ipu, ipu_base); if (ret) { dev_err(&pdev->dev, "adding client devices failed with %d\n", diff --git a/drivers/gpu/ipu-v3/ipu-prv.h b/drivers/gpu/ipu-v3/ipu-prv.h index acf1811..e869ac1 100644 --- a/drivers/gpu/ipu-v3/ipu-prv.h +++ b/drivers/gpu/ipu-v3/ipu-prv.h @@ -152,6 +152,7 @@ struct ipu_dc_priv; struct ipu_dmfc_priv; struct ipu_di; struct ipu_smfc_priv; +struct ipu_ic_priv; struct ipu_devtype; @@ -181,6 +182,7 @@ struct ipu_soc { struct ipu_dmfc_priv *dmfc_priv; struct ipu_di *di_priv[2]; struct ipu_smfc_priv *smfc_priv; + struct ipu_ic_priv *ic_priv; }; void ipu_srm_dp_sync_update(struct ipu_soc *ipu); @@ -209,4 +211,8 @@ void ipu_cpmem_exit(struct ipu_soc *ipu); int ipu_smfc_init(struct ipu_soc *ipu, struct device *dev, unsigned long base); void ipu_smfc_exit(struct ipu_soc *ipu); +int ipu_ic_init(struct ipu_soc *ipu, struct device *dev, unsigned long ic_base, + unsigned long tpm_base, unsigned long vdi_base); +void ipu_ic_exit(struct ipu_soc *ipu); + #endif /* __IPU_PRV_H__ */