From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752133AbcCaHeu (ORCPT ); Thu, 31 Mar 2016 03:34:50 -0400 Received: from mail-oi0-f50.google.com ([209.85.218.50]:35208 "EHLO mail-oi0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751006AbcCaHer (ORCPT ); Thu, 31 Mar 2016 03:34:47 -0400 MIME-Version: 1.0 In-Reply-To: <87pouci03i.fsf@intel.com> References: <1457594332-7490-1-git-send-email-tqnguyen@apm.com> <1457594332-7490-2-git-send-email-tqnguyen@apm.com> <87pouci03i.fsf@intel.com> Date: Thu, 31 Mar 2016 14:34:46 +0700 Message-ID: Subject: Re: [PATCH v3 1/2] usb:dwc3: Enable support for 64-bit system From: "Thang Q. Nguyen" To: Felipe Balbi Cc: Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm@lists.infradead.org, Phong Vo , Loc Ho , patches Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Balbi, If CONFIG_DMA_CMA=y, dma mask is set properly. The issue just happen when CONFIG_DMA_CMA is not set. In this case, dma mask is not set and we need this code to check if dma mask should be manually set to 32 or 64. ---- Thang On Wed, Mar 30, 2016 at 8:09 PM, Felipe Balbi wrote: > > Hi, > > "Thang Q. Nguyen" writes: >> From: "Thang Q. Nguyen" >> >> Add 64-bit DMA operation support to the USB DWC3 driver. >> First attempt to set the coherent DMA mask for 64-bit DMA. >> If that failed, attempt again with 32-bit DMA. >> >> Changes from v2: >> - None. >> >> Changes from v1: >> - Remove WARN_ON if dma_mask is NULL > > these changes lines should be between the tearline (---) and diffstat > below. > >> Signed-off-by: Thang Q. Nguyen >> --- >> drivers/usb/dwc3/core.c | 15 +++++++++++++++ >> 1 file changed, 15 insertions(+) >> >> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c >> index de5e01f..2479c24 100644 >> --- a/drivers/usb/dwc3/core.c >> +++ b/drivers/usb/dwc3/core.c >> @@ -831,6 +831,21 @@ static int dwc3_probe(struct platform_device *pdev) >> dwc->mem = mem; >> dwc->dev = dev; >> >> + /* Try to set 64-bit DMA first */ >> + if (!pdev->dev.dma_mask) >> + /* Platform did not initialize dma_mask */ >> + ret = dma_coerce_mask_and_coherent(&pdev->dev, >> + DMA_BIT_MASK(64)); >> + else >> + ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); >> + >> + /* If seting 64-bit DMA mask fails, fall back to 32-bit DMA mask */ >> + if (ret) { >> + ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); >> + if (ret) >> + return ret; >> + } > > Also, why is it so that you need this now ? glue layers are copying dma > mask from parent device and that should be set properly. This really > shouldn't be necessary in dwc3-core; it would mean that glue layer > didn't set this device up properly. > > -- > balbi -- Thang Q. Nguyen | Staff SW Eng. C: +849.7684.7606 | O: +848.3770.0640 F: +848.3770.0641 | tqnguyen@apm.com