From patchwork Fri Oct 16 10:12:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chin Liang See X-Patchwork-Id: 531188 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 9B5A014012C for ; Fri, 16 Oct 2015 21:12:41 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 193614B62B; Fri, 16 Oct 2015 12:12:39 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id u3cCQJ_lvCXJ; Fri, 16 Oct 2015 12:12:38 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 1AA1B4A03A; Fri, 16 Oct 2015 12:12:38 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 58CAE4A03A for ; Fri, 16 Oct 2015 12:12:32 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ztbne5Xoo_z2 for ; Fri, 16 Oct 2015 12:12:31 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0079.outbound.protection.outlook.com [65.55.169.79]) by theia.denx.de (Postfix) with ESMTPS id CC3BE4A033 for ; Fri, 16 Oct 2015 12:12:26 +0200 (CEST) Received: from BLUPR03CA002.namprd03.prod.outlook.com (10.255.124.19) by BN1PR03MB037.namprd03.prod.outlook.com (10.255.225.145) with Microsoft SMTP Server (TLS) id 15.1.300.14; Fri, 16 Oct 2015 10:12:23 +0000 Received: from BL2FFO11FD017.protection.gbl (10.255.124.4) by BLUPR03CA002.outlook.office365.com (10.255.124.19) with Microsoft SMTP Server (TLS) id 15.1.300.14 via Frontend Transport; Fri, 16 Oct 2015 10:12:22 +0000 Authentication-Results: spf=softfail (sender IP is 66.35.236.227) smtp.mailfrom=altera.com; denx.de; dkim=none (message not signed) header.d=none; denx.de; dmarc=none action=none header.from=altera.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning altera.com discourages use of 66.35.236.227 as permitted sender) Received: from sj-itexedge03.altera.priv.altera.com (66.35.236.227) by BL2FFO11FD017.mail.protection.outlook.com (10.173.161.35) with Microsoft SMTP Server (TLS) id 15.1.293.9 via Frontend Transport; Fri, 16 Oct 2015 10:12:21 +0000 Received: from sj-mail01.altera.com (137.57.1.6) by webmail.altera.com (66.35.236.227) with Microsoft SMTP Server (TLS) id 14.3.174.1; Fri, 16 Oct 2015 03:11:56 -0700 Received: from [10.0.2.15] (tx-clsee-530.altera.priv.altera.com [137.57.103.31]) by sj-mail01.altera.com (8.13.7+Sun/8.13.7) with ESMTP id t9GACG49018781; Fri, 16 Oct 2015 03:12:17 -0700 (PDT) Message-ID: <1444990336.2436.1.camel@clsee-VirtualBox> From: Chin Liang See To: ZY - u-boot Date: Fri, 16 Oct 2015 05:12:16 -0500 In-Reply-To: <1444987155-2650-1-git-send-email-clsee@altera.com> References: <1444987155-2650-1-git-send-email-clsee@altera.com> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD017; 1:B5+aLqaZb2Tt2XECwt9T/6JsphClDgpnmLUpXShPaCs0h5SHpAfDxL5taYw8JFJk8tBYKNJFrs3S842ARXkgH3IHSfAjFiJdSoJqhaLjqp+2W6RTlrdFeYxr8WTms2y2F+dW9cGx8wLK1n8klwouwTU0Yv0sh4qOkTlgaSaiRByJb7LVqCG0oHYyi+663hqhQEzCFEJfn7GkfI1eIcLQmMTA5jsQcsa24gEI+2OevF3jHcRQ3MBblLhBA+zMMo+lJkthE59+ToRFEkxgd0YVJORuTis35ykDklD+Ok12+zrHVO/J0uoiICGpeNY4bqU0O0CuLr24Pjeo3vwmKi1VlU9SRr0KEEC9vbQ2BmLXjW7GmPgakKu5DxwC3U5qoxmiDvT0tDpLsSRIgzHYrtr3bw== X-Forefront-Antispam-Report: CIP:66.35.236.227; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(189002)(199003)(16796002)(33716001)(19580405001)(5001960100002)(19580395003)(2950100001)(46102003)(97736004)(105596002)(5007970100001)(76176999)(50986999)(77096005)(81156007)(23676002)(229853001)(50226001)(106466001)(33646002)(575784001)(5820100001)(110136002)(50466002)(86362001)(6806005)(92566002)(87936001)(189998001)(64706001)(47776003)(5008740100001)(103116003)(7099028)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR03MB037; H:sj-itexedge03.altera.priv.altera.com; FPR:; SPF:SoftFail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB037; 2:wrejXPZ8P70m3a1j2s9X+rVMSl6agRZLpP0biQ6TaDssLQ71tPcYiIqkYDvszFmnAtWS+P9WcPQcTwr8aLgwqP8MGL1olckWAhLVs1J6vQvm7OLfr4OnY3Z3qEgJYPWcLACqzIFfCL4wt9c5CrjaVlJgVkHVmBROrNzyc7Qt+c8=; 3:fg3Dc3cDI9M81XCOPgPMBV/7oK+pADN4jW0StSwAXK+o/USfqEYAcuzhRWMiHs7BOD7E3hxJqY+O7mNOobmLIomZI1Ejj9eF6hq6fIMrdDTsBuxAYXLE5kUKYudSOXz8W6quRDcwB8J5egwTYG7UisoQY7CuQcech1p+gcqyTo2GIkd1Zs5jU/6CHjvwHc45wzYF1mlpbejZFqbHu5aUpKIJwwjcZr7Ss7mAba4G+0U=; 25:u6IUlT+r7/5pD2Iek/EXOnbE9F1+Yc0DFryPPOPqlWYEOAcKT9U2SZXM4syqAnoVsA9lbLObQPO9svQAsxEHHVuHzXlO5yxNgdDpKjTFCnc+Xv9seXqkk/0K3PESDBrBF7kVewigCjzrKKAqHWCYBvVlSIjLFBPj4soDZRHpj/RSQYA/rFQ4gZ4fmxsDAyrv1bh8E7mdaRyB7XN/499FChHTBphP+k54JROGcwT38zam6QBNw3nL6dMw1gTLBpYVMF84KAL84U5XFXvNG9yVNQ==; 20:h2bXICXNDaybyQWdROxMyBqSDi10IGunktOZkHt46RU9L0nFi6k3l5wVsUA3uvPXB9ROTxNnO9v4dRnRhH+W9097zCtCFlsGcpUiAYjjrPBsFz2etqOn/X9+TuLozQh059cC9gyUlJ+X8eozpMmDUQvb9NKJGOt8lpvcTkpNzSA= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN1PR03MB037; X-LD-Processed: fbd72e03-d4a5-4110-adce-614d51f2077a,ExtAddr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(80048183373757)(202767206196957)(204874498639787); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(520078)(3002001); SRVR:BN1PR03MB037; BCL:0; PCL:0; RULEID:; SRVR:BN1PR03MB037; X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB037; 4:JXIAZM2eFHGKNkx+OnNUw78o9kExh6vTmoL1ZWWdZvMAJvX+1V8helgz1AuGjE3GRoGT9qmvyTWkxAjlp1CIi+GcvzoYR0Gk0DxlbR8o0whr913yENIpAHED8ax/lKtJwosO79/BqVCXSbp/b/yWl+/d5dtMHK6yrojnmL5Hme78uxHvdeHpH+ASOmM7Y64Rk5qzmN8WqnYpofdhvxpO8aTPWSsTMy3M7jCljyPsZztTQ7mmZphEDACNO6WZswgQq364fcZtNyT5tI7vtHMSlL+8AjqDH1TJ/LaqdqjwnAW9guTGCU3xPm2iSOIO12aqL+5sGd6qGUW9V8gjwgW6FVyz5KTSvgdpKRAssiWED2Y= X-Forefront-PRVS: 0731AA2DE6 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTjFQUjAzTUIwMzc7MjM6bkFFVzl1VjhCUXhoNlpuajZJTlpvVERad2xH?= =?utf-8?B?RjYyV3JDdGRBajJ6aUkxUE9lOEg0aHdub2o0UE8rNzFsSmJlWmh3VEpWQ2FM?= =?utf-8?B?SU0xVXZZSnZpdGc1bTZmd2orOEZlMTBFNCtVRzFzZmVpV1M1TUJsVkJ5cTdB?= =?utf-8?B?c2JmMDZVelVDN3RJbThpaHFJV1VZSVdLcDd5NmxteHI1SUI5Q2JGbzRpS2Nu?= =?utf-8?B?OXh5WXVqdkgvWk04eWJyNmxOVWZZOXR6bXhZY1BIdTl1K3poSnRva1hNUFNp?= =?utf-8?B?S2x6STBYUnYwTWlyQW0vcnBtK0hMdXVaSUpWc01HOHNBM1pCN1VVQTRYay9v?= =?utf-8?B?d0d0UHh2eHNGVEpOcXZJejl3RTZJMTMxRVgzWElobnVCUjk0T1UxVkp6YkFQ?= =?utf-8?B?ZGhUYmdkMElQaHdlQUJ1MWZDQnFzL2xxU3VjVHUxVjVtMWVrR1M4NTdDS1lC?= =?utf-8?B?V01EMmZWQzBzL3FxeUxQM2RRMHVFdWZCZmdOcW1uVkt1Wi8vcGg2U2R2N1Z5?= =?utf-8?B?dk8vUGdEWEwvQThhWkcrVmoyaVNKVXdnSUsyZ1NyRE52Vm5DSm9tL2xvLzVh?= =?utf-8?B?MnlVK0tkM2o5L0xiMjIwaU0vM0dFdFVDcUVWd0RqL2R5c3czaXhHSngyMWkz?= =?utf-8?B?SjJQQWQ4aThQUUtPR3RzeE10ajdJRDJzTXdLQTV6N0lXM1NJei91Q0wwdUt4?= =?utf-8?B?eEMwVEF5K0xtanpZcnltUFF0ZGJmVmFCVXF5ek1RWXVud0RYSk1tQ3BUazgy?= =?utf-8?B?NGppS09jMnFuTjdzY0ZhdUx6RTlaR0d5blEzUGxmY3d4SmRMTmJTdUV6MGZW?= =?utf-8?B?ZFY2ZFN5bHdHeTBCTWE2Z3FYMGJjTEl2Z1g0cWVpbUwyODIrQ0ZRd215dWo1?= =?utf-8?B?bUMxeWNHUTkwZmRJRjNORTZIOXpRS3R2eDdPdEtRWEU2SjVVYVRYUWlUNStK?= =?utf-8?B?Mk5lTll4WkFUZTVNeDk5ZlFxOHZxK09CUFBUMjR6RENrVVcxbUp0ck5FSE1Y?= =?utf-8?B?NTgwZ2xzbDRuV2ZWU0c3Z2lGblFZcDB1S1JMU1NNUURKQkZJZnF3SWJBZDc4?= =?utf-8?B?U1lZSFFCVWFqZDUva0dWWndDTXQyUXU2eXNVdVE2MkJmQ0tIdXZKZjVlQTVK?= =?utf-8?B?QUtmZVZ1RnFpWStMWngraVRaZUVSbGNBUVg0NndlZ2E0SGR4R2R3WnRDWEU0?= =?utf-8?B?aTcxYkxpbks2SlYrdmVpbyt1UGhtcGRvZ0lueCtGTnhGSlB6aURGK0tJVS8z?= =?utf-8?B?dGdQNDdBZWQ5ZUZWbUFJS1ZJb0xuem1VWjJONVdJaFhvVU1BNkhXMmVEcGFR?= =?utf-8?B?QjY1aTR3ZjF5Z3lDOUxUQkZzblVCVnNwYkFORGJyY0VJd2pJV2Ezb2t6RW5r?= =?utf-8?B?NE9SejdGc3lnTmdPQzI4blJCNWdTQ1ZFd3ZNcmc9PQ==?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB037; 5:uweaqFZ+/WZsZHcHuTtHu966waCMB+IC5V56NNZfjrIMRd80OnC6ryRXAsrugpBt8znXQCVw1dlwhT9sj5qI8mbbsnn1a1N9mbtj/M958nn478iyxVn3L3xvuPP4yzqQy5/9gZIPVx/VgtMXTSihhA==; 24:dTvGwEzHTjQ+O81CaX/cPRsNL+hBBlADdpXTr3TS3JHp6SLpasIgLSb9yfpX3jhGbs+kQIpI131MWoJpihX1AtgJV4loUENUoGtAY4INaVs=; 20:B36eVhK2i6WagkQlHSMuHPl6tzjNViFisG960D5gs6kl3Pvrdnq1uPWprrH5DF/Q4kJSlKz6V62/vZyXBcjmpFhNytI2y63XU1LvkQyQInz770NToiNfsKW3nPwOYGnei8gseHewJjt+fzGB+WXtdBkLAkhpG9hwfdIB+ADVrkw= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2015 10:12:21.9698 (UTC) X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fbd72e03-d4a5-4110-adce-614d51f2077a; Ip=[66.35.236.227]; Helo=[sj-itexedge03.altera.priv.altera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR03MB037 Cc: Marek Vasut , Pavel Machek , Jagannadh Teki , Stefan Roese Subject: [U-Boot] [PATCH v4 1/5] spi: cadence_qspi: Ensure spi_calibration is run when sclk change X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From f22064087684b04d6d6ff105a4766a0902d361a8 Mon Sep 17 00:00:00 2001 From: Chin Liang See Date: Thu, 15 Oct 2015 13:56:45 +0800 Subject: [PATCH 1/5] spi: cadence_qspi: Ensure spi_calibration is run when sclk change Ensuring spi_calibration is run when there is a change of sclk frequency. This will ensure the qspi flash access works for high sclk frequency Signed-off-by: Chin Liang See Cc: Dinh Nguyen Cc: Dinh Nguyen Cc: Marek Vasut Cc: Stefan Roese Cc: Vikas Manocha Cc: Jagannadh Teki Cc: Pavel Machek Acked-by: Marek Vasut Reviewed-by: Jagan Teki --- Changes for v4 - shift the checking for requested SCLK to the caller Changes for v3 - no changes Changes for v2 - remove frequency set before calibration - introducing previous_hz to store requested frequency - prevent calibration run when request same frequency --- drivers/spi/cadence_qspi.c | 22 +++++++++++++--------- drivers/spi/cadence_qspi.h | 1 + 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c index 34a0f46..c5a4276 100644 --- a/drivers/spi/cadence_qspi.c +++ b/drivers/spi/cadence_qspi.c @@ -37,9 +37,8 @@ static int cadence_spi_write_speed(struct udevice *bus, uint hz) } /* Calibration sequence to determine the read data capture delay register */ -static int spi_calibration(struct udevice *bus) +static int spi_calibration(struct udevice *bus, uint hz) { - struct cadence_spi_platdata *plat = bus->platdata; struct cadence_spi_priv *priv = dev_get_priv(bus); void *base = priv->regbase; u8 opcode_rdid = 0x9F; @@ -64,7 +63,7 @@ static int spi_calibration(struct udevice *bus) } /* use back the intended clock and find low range */ - cadence_spi_write_speed(bus, plat->max_hz); + cadence_spi_write_speed(bus, hz); for (i = 0; i < CQSPI_READ_CAPTURE_MAX_DELAY; i++) { /* Disable QSPI */ cadence_qspi_apb_controller_disable(base); @@ -111,7 +110,7 @@ static int spi_calibration(struct udevice *bus) (range_hi + range_lo) / 2, range_lo, range_hi); /* just to ensure we do once only when speed or chip select change */ - priv->qspi_calibrated_hz = plat->max_hz; + priv->qspi_calibrated_hz = hz; priv->qspi_calibrated_cs = spi_chip_select(bus); return 0; @@ -126,14 +125,19 @@ static int cadence_spi_set_speed(struct udevice *bus, uint hz) /* Disable QSPI */ cadence_qspi_apb_controller_disable(priv->regbase); - cadence_spi_write_speed(bus, hz); - - /* Calibration required for different SCLK speed or chip select */ - if (priv->qspi_calibrated_hz != plat->max_hz || + /* + * Calibration required for different current SCLK speed, requested + * SCLK speed or chip select + */ + if (priv->previous_hz != hz || + priv->qspi_calibrated_hz != hz || priv->qspi_calibrated_cs != spi_chip_select(bus)) { - err = spi_calibration(bus); + err = spi_calibration(bus, hz); if (err) return err; + + /* prevent calibration run when same as previous request */ + priv->previous_hz = hz; } /* Enable QSPI */ diff --git a/drivers/spi/cadence_qspi.h b/drivers/spi/cadence_qspi.h index 98e57aa..2912e36 100644 --- a/drivers/spi/cadence_qspi.h +++ b/drivers/spi/cadence_qspi.h @@ -38,6 +38,7 @@ struct cadence_spi_priv { int qspi_is_init; unsigned int qspi_calibrated_hz; unsigned int qspi_calibrated_cs; + unsigned int previous_hz; }; /* Functions call declaration */