From patchwork Thu Apr 2 15:30:24 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Stach X-Patchwork-Id: 6149851 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5446FBF4A6 for ; Thu, 2 Apr 2015 15:32:22 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7D4E0203AB for ; Thu, 2 Apr 2015 15:32:21 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id A3AAB203AC for ; Thu, 2 Apr 2015 15:32:20 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D9ABC6EA91; Thu, 2 Apr 2015 08:31:05 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [92.198.50.35]) by gabe.freedesktop.org (Postfix) with ESMTP id D7C0B6E210 for ; Thu, 2 Apr 2015 08:31:00 -0700 (PDT) Received: from dude.hi.4.pengutronix.de ([10.1.0.7] helo=dude.pengutronix.de.) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1Ydh5A-0005OD-4D; Thu, 02 Apr 2015 17:31:00 +0200 From: Lucas Stach To: dri-devel@lists.freedesktop.org Subject: [PATCH RFC 082/111] staging: etnaviv: separate out etnaviv gpu hardware initialisation Date: Thu, 2 Apr 2015 17:30:24 +0200 Message-Id: <1427988653-754-83-git-send-email-l.stach@pengutronix.de> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1427988653-754-1-git-send-email-l.stach@pengutronix.de> References: <1427988653-754-1-git-send-email-l.stach@pengutronix.de> X-SA-Exim-Connect-IP: 10.1.0.7 X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: dri-devel@lists.freedesktop.org Cc: Russell King , kernel@pengutronix.de X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Russell King We need to reprogram various registers when coming out of runtime PM, many of which are those which are setup by the main initialisation. Abstract this code out and arrange for the runtime PM resume method to call it. Signed-off-by: Russell King --- drivers/staging/etnaviv/etnaviv_gpu.c | 51 ++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/drivers/staging/etnaviv/etnaviv_gpu.c b/drivers/staging/etnaviv/etnaviv_gpu.c index dd8dc6707ce4..df3210424d09 100644 --- a/drivers/staging/etnaviv/etnaviv_gpu.c +++ b/drivers/staging/etnaviv/etnaviv_gpu.c @@ -400,17 +400,9 @@ static int etnaviv_hw_reset(struct etnaviv_gpu *gpu) return 0; } -int etnaviv_gpu_init(struct etnaviv_gpu *gpu) +static void etnaviv_gpu_hw_init(struct etnaviv_gpu *gpu) { - int ret, i; u32 words; /* 32 bit words */ - struct iommu_domain *iommu; - bool mmuv2; - - etnaviv_hw_identify(gpu); - ret = etnaviv_hw_reset(gpu); - if (ret) - return ret; if (gpu->identity.model == chipModel_GC320 && gpu_read(gpu, VIVS_HI_CHIP_TIME) != 0x2062400 && @@ -443,6 +435,33 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu) gpu_write(gpu, VIVS_MC_MEMORY_BASE_ADDR_PEZ, 0x0); gpu_write(gpu, VIVS_MC_MEMORY_BASE_ADDR_PE, 0x0); + /* FIXME: we need to program the GPU table pointer(s) here */ + + /* Start command processor */ + words = etnaviv_buffer_init(gpu); + + /* convert number of 32 bit words to number of 64 bit words */ + words = ALIGN(words, 2) / 2; + + gpu_write(gpu, VIVS_HI_INTR_ENBL, ~0U); + gpu_write(gpu, VIVS_FE_COMMAND_ADDRESS, + etnaviv_gem_paddr_locked(gpu->buffer)); + gpu_write(gpu, VIVS_FE_COMMAND_CONTROL, + VIVS_FE_COMMAND_CONTROL_ENABLE | + VIVS_FE_COMMAND_CONTROL_PREFETCH(words)); +} + +int etnaviv_gpu_init(struct etnaviv_gpu *gpu) +{ + int ret, i; + struct iommu_domain *iommu; + bool mmuv2; + + etnaviv_hw_identify(gpu); + ret = etnaviv_hw_reset(gpu); + if (ret) + return ret; + /* Setup IOMMU.. eventually we will (I think) do this once per context * and have separate page tables per context. For now, to keep things * simple and to get something working, just use a single address space: @@ -489,18 +508,8 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu) complete(&gpu->event_free); } - /* Start command processor */ - words = etnaviv_buffer_init(gpu); - - /* convert number of 32 bit words to number of 64 bit words */ - words = ALIGN(words, 2) / 2; - - gpu_write(gpu, VIVS_HI_INTR_ENBL, ~0U); - gpu_write(gpu, VIVS_FE_COMMAND_ADDRESS, - etnaviv_gem_paddr_locked(gpu->buffer)); - gpu_write(gpu, VIVS_FE_COMMAND_CONTROL, - VIVS_FE_COMMAND_CONTROL_ENABLE | - VIVS_FE_COMMAND_CONTROL_PREFETCH(words)); + /* Now program the hardware */ + etnaviv_gpu_hw_init(gpu); return 0;