From patchwork Fri Aug 12 18:20:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raghu Vatsavayi X-Patchwork-Id: 658762 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3s9tWl0zFzz9sR8 for ; Sat, 13 Aug 2016 04:21:55 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b=h2wm37IL; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752415AbcHLSVw (ORCPT ); Fri, 12 Aug 2016 14:21:52 -0400 Received: from mail-sn1nam02on0088.outbound.protection.outlook.com ([104.47.36.88]:33472 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752279AbcHLSVm (ORCPT ); Fri, 12 Aug 2016 14:21:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=NekuvPVnd0zSP60c6IBOGW77MZPMiTIJhJ49/j0+bJ4=; b=h2wm37ILC4CUnRNsLoROy9zRpCGBgVfF5Mhd8y7zWDL/WFe9T7rNxK1F5gxNUwS+/2QTKVLS8CW0lPOIk7oZFz+9H+3DBV9J86d23w8oL7egJ211uqUh79WlR2hivyVXdZfkX9SlIrisI5H8F6kf5jfi95XrvycVVnz47UV5yWk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Raghu.Vatsavayi@cavium.com; Received: from localhost.caveonetworks.com (50.233.148.156) by BN4PR07MB2129.namprd07.prod.outlook.com (10.164.63.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.557.21; Fri, 12 Aug 2016 18:21:35 +0000 From: Raghu Vatsavayi To: CC: , Raghu Vatsavayi , Derek Chickles , Satanand Burla , Felix Manlunas , Raghu Vatsavayi Subject: [PATCH net-next V2 10/18] liquidio: CN23XX firmware download Date: Fri, 12 Aug 2016 11:20:27 -0700 Message-ID: <1471026035-15323-11-git-send-email-rvatsavayi@caviumnetworks.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1471026035-15323-1-git-send-email-rvatsavayi@caviumnetworks.com> References: <1471026035-15323-1-git-send-email-rvatsavayi@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: CY1PR18CA0036.namprd18.prod.outlook.com (10.163.31.46) To BN4PR07MB2129.namprd07.prod.outlook.com (10.164.63.11) X-MS-Office365-Filtering-Correlation-Id: d61b54e8-785b-41b4-b1e7-08d3c2dd7ea6 X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2129; 2:Ek+RL348O+ip5q8jkgb4jbWayG97iXUb7Po1OKKvgmp25jbY/8LHl6q+q57S/OwbZnACBFfHI3zIStkxgMLOwzfiCtoF108XamNcLqzR/JJG3bc3zdnThMNk7Pz+HmN+2A4hHHZhRUkZy1gLdRrcRrSaQqk+KCLMbpfE0lGqZcm7Cn2KBylSo1JIk8m1kIxc; 3:8TemH4JtGWD96NLnLj0kImuquT5V79C4VWN2ZC2UUOE4ehN5cpaWpc17m1pVe9Vlpt4IJ+cYAH8xGxwTX2rk8CigBJLouqbOzpuXH/H7gFj0Eb7KiLvLj6Fbs57i1RuG X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN4PR07MB2129; X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2129; 25:qvGJlxlqzVW8jGh9ryAGAd/ECzpJAZMHCbmfUgAYuZ0i2wL9yZmquD8nFwK4+cWONVS4IWsl55rgVnthgwqFPSTMhUHyMuwc6JIfENdyjoXN0PbVsNFVKLJPt+RVjoHkbeiLtnpk+xOknQw4v7Ls6+vFZQJsNQ0hd8HxwK4yro9pkLLMdt5MBApzs7YeREpUZ2+9w5T7LciLJq/smI+9AsUingGxRpOaQ/fmm6G5YnxpwpRKPx6dMEVPOfVfcdt+2m1rC6e22/hHH9ESEu8BxtV+fUwdS2r/QEUt4YWfP2TBy5KRzn9qEA0XewSGO0yOGxcQX+VQfemZyBH0dBm/YkTrHkmCzp0AHVLITxUDj0x+GowSehsVeallFFj1AEKbzk9IFlK/5JygglMDIR27Ph24Jx7ZREB6CdxnVwRcoDnJIZHZLeJ3JEaIErKXmvJZlORs+iqiKSIoB8jncgXW5tyJgxWYZPQ9FolTFES1PQYwY+ZLbaYdKs/WFukJy6GQrqkZrOYbyjjM6rN64zUWbi9Ysuq5FTXEu3F87GMn2/9INw88x54Nu7Gdy3F9dN3JUOPorvxu7ANMtToZIzKd8t6tnt+mrleVxNx5I3lxIV2fZBoZb6GVWstc+5XZLa1jE+/t49zJYZa88gNk6t9WNh6KJrePKZkprTzvD5AdqZGtoErsMv4sy3wRl9znivT7oKDJJ/zLoij0eZJYVyWj9bynqOFa5criVwykku8YTzyBhwDSVPB2qcFcvpJzpjKyOQmSYO5E1D9zaWdePxwGJw== X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2129; 31:CAKvsnEzkBjJlZ7F1C1hTaglUC5fy4CimxgvLvBxhCxGf4H+FGXpVrYD8AWg5uzEZKHUd+a+rvQMRei22neGsLSdKjeES6b9+G8B7F/rjzva/oQEt36lmK8D++LCihS6/pQoqBMxTjSPII3HhfD+uTaCETNIIZTm5gggW9HFnqRQVOJbgBhNf97JzHNQY2bEpCDAqX0zlZqBiwtmC87q0emuY+PJyPdy+uvji08KsJc=; 20:0/lg3/ypPSFzx1lV8ZCwwcB+c+gN6uQFvxolh4SFjbcDA3J8HHeGDyLXFVaKHPkLxZS5/M1wV0D7w6c1vz6vB8o3/UX9LOoxLv6jdjwRHqbti3rA8mhAc74EJYgYhpKphxwj349/qfZ5LR62u2dprxdn2Al7WS/245GfYBn2V51W4FgpHJhi2eIvBOmEcJ95u8u3Q7XtkRwyWkR0L6Gg2Oh3UiSLRegkBpIyfbmQez6H6/yqU1pBZgu70KQKIzSr4Q0omnpZGKjddG4/lXm8m8L8D6V57edKRdBVJnUsDE+zs25Lq9G1n5XWbE47uzNs50JnoMbjA+GkImV5Z3d5Qogy8ko0+vzb3fKrK98Wew59waKQ+tvQTJazYlAC3TzFx1mC5gz1xTAanEVCtBaUUFYaxdS/AKFQQgdzVJc7Yc9BP6XYM8rqYmG0W9a+vcZGVwOcz+vgu5w3q2G7XnmFtH3yFL2rLhR1cH5RKQcwJpQor1oiVUKjMfuZYRRFQqcinVB+eOH3AluF3LZeENR15YEKSl32oStlMb2y4OYso2jlnwaDXoOodLK8Z2OGuQ38IwHrFarHBhlNdXOLShBRUTIFkHRoP0C8wembtO64pfI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001); SRVR:BN4PR07MB2129; BCL:0; PCL:0; RULEID:; SRVR:BN4PR07MB2129; X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2129; 4:QwxuPlFljBEdJV0TuIlDhWtJS57nEY6Zluuwir5E9RyJg4TdYXKWSOTX5+bILcOwCNUuPXJOQ2S76WSETdJXDitPKk+Eq1Dg+oM7E7YyDgK3YF/0DiwqhQUnnD+cszV0tM5U+6YJgMXQ/svgBRMjzTL3fegc8cqUM0GTI+KG7lY2XlOqa2PUKN48tF9UCkUi0+Z8di2uv8kBRXub1lNYYEwC+RTwvvcYToHLOqm2RWPrwGSsMGOV18jHXocI2zvJWPVZ3b85RielN71QyedqsyJvZ1BgO4pTef+W9jiV8XzSibdjAklqQ6X67Rt+aPAC3s6cCgPFNBtFuuD/yji180fCdmfoBCaVTGhv3BFt8kWVk6dhuacu/jXS5HwFF/nWUdgWD7LdXT+dY1CSxlBCkQ== X-Forefront-PRVS: 003245E729 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(199003)(189002)(76176999)(47776003)(3846002)(66066001)(105586002)(586003)(101416001)(6116002)(36756003)(81156014)(8676002)(50986999)(81166006)(4001430100002)(92566002)(97736004)(106356001)(48376002)(50466002)(53416004)(76506005)(33646002)(42186005)(110136002)(229853001)(2351001)(5003940100001)(107886002)(189998001)(68736007)(2950100001)(77096005)(19580395003)(4326007)(2906002)(7736002)(305945005)(50226002)(19580405001)(69596002)(7846002)(4720700001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN4PR07MB2129; H:localhost.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN4PR07MB2129; 23:rbqcWVHpO5wd4MOlRKcMm2qfuHf/LA8wZ0sBunK9L?= =?us-ascii?Q?u2ofM+DlMmDB/vjuRasTCJNa2dun50rdLp2ksz/T/O6wRMcH5+pklm0HV9ST?= =?us-ascii?Q?rB1LzxhybfsM45EStN/QQWDd+/IwqCsdUsYpCH5q+x3zKWjtZuUMvbEBr5/H?= =?us-ascii?Q?l1tqIX3u41HnrisJ1lTA4Lauw8jzVLiBjamIUcRfuT27MtmutrkyiMjXauOn?= =?us-ascii?Q?L0GadBq3tAnVhnpPkAyT5jD/9ss+KVIBe6tcDOodyfGCjNeahrGlzWQizRiV?= =?us-ascii?Q?DXWMRIFXntbAI1kco8SPnHqMl2felVpzWrvM5vV1Wy7M+sIWePd3Hnb1FOqT?= =?us-ascii?Q?RcF1+5H2ywNd/kFrjaOpuzt0J1kXyBnaqo2SFozWGxBU/PRodfD6YZQr2DTw?= =?us-ascii?Q?bcr5iEYWcUcTu9SA1wRALzZMtnT1jP9KLnhBkr/84CeyzHCrUbjeHOLCQqTp?= =?us-ascii?Q?k0nBIRMWDtJhGid5OYqDD3P6fIRjarwvMYysNF035epHEllFnJXVSEokEUWZ?= =?us-ascii?Q?gOsGgZFesIv6hDPS9xTkbwenNNw4Y41+OR2RVWo3gG2xgdJNwwItdPqBXEtc?= =?us-ascii?Q?E5DH+wZrCpGzxbPDDOtm7zcSfp/7DABYZpJM4cBOWfj43kKb0fYi3iE9Jxjq?= =?us-ascii?Q?CpUlBhlDycD9hb6mFhDDB6OgxRQx12SB32JNSzx7XuvT8IJmQlddquxJvAGQ?= =?us-ascii?Q?mNgPHcQzHj067j1gJAXPOxCyfmsLUdGyBjOzISt/845pHgr7IA7gYjmKz3KB?= =?us-ascii?Q?eLM3jEtDeCSe94tnND3HMlD4PEo+inOccS3gl+NFKYxnPuFSJoxnREZt2ys4?= =?us-ascii?Q?Tm0RSgVRtTHVyJrDumWLNShDMrJNqHfFEyBZPdRquCTjYg9+dcpl6l9U7brD?= =?us-ascii?Q?GvDSegxYyp3GYW+QzIx6+wAHUV0iLI6taTGD6tU3iU/Q7aYAxidn5pXU0l8Z?= =?us-ascii?Q?obdnfpa+siu4XOrQJC60c4ehX8wjk1q3f0pu1sNBtL//FSDd8+7wqAGke23Z?= =?us-ascii?Q?dRlg/MC7zsVfacopQELSETP9a5TqXtEu7uz1flkQu86HqayZTFa04wPt7Xah?= =?us-ascii?Q?APl5kb9FcUlyymxHlZCSrwIfeqtwyvZNC/8cavMs9lX7i2T0unPt5gO1b7eb?= =?us-ascii?Q?5TZRg/Nq6oTT4NHjpCeoGT9qYJO/k0CSpWZ14br02zCujo3T16T9w5oSWT9T?= =?us-ascii?Q?ylYrzEdFN1t7sAkLhokk9ugnpEpz+ymLF9C?= X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2129; 6:eFY+bwVqXsqfP8Hy7QNsiAJnBWDUoXeXawMj1amjgsVLUBgoWv5t+Y8/rPDD5oZAs2+Wr/soKlAQ1ffVl3EY+sdkWNR/m6qpg4BUjzOwUeP45iBJ1yZbqtdE/KDVoP9QnIXis/AL0LWpfpwqy9IWuZN9Eo4UGAjnFN8G7AaZOJeepyhxiJ/896wFzPECBPczqtz+lLzhjvd0k/yU3GfaczcGjDLgdrWtQPUE7+IfBgbLR7/eO+Vo7FK4aAPXEp5Dr60P+0mX4RSmW0jCJ5j3AGDfWQhpSIudl7/X0Kkv3DE=; 5:+BPIOjzJvZpkTcMY5SlTPlsfcCcs6CqmNLozXIpklJkh4T7o1GsylcWwj8Rw6BY82B1myNXpFHTYxzH8dCpwPMbM6C501URyijVgBZvKK2Dhvrt1dhva6boP4ooNyt/np6dsxh3FY5+zH45XbvOwpw==; 24:fSNNkeb6ybeiTrWAI8h5GaTXTJeCsD/ygOTnKnzMBSl+yWFimmNR8n1UVRQwvTV6CNHfEG5F3Ex0a4zqP+qu2e910X2d6381prNvL5Yjetg=; 7:zV1+K/0tWOpT9kYhWTSj80Ms1IHEQ3ddUIyoVGHk6kUvunajX0s9UYYm3Mly4elaZp4CW7LfyQegsrn/qGcFFdhJzrijz5uFuTpaoKFBGxQgFEutlVvN2nFNtzci6WhFduPlruyfpfxkLW/2Rc7R+8kwKZtm8WewqBlSnzbegbRbMrIox7280q3vRTqU049mBUQPDHGFgiPzP3/WidoQEFMTQP7uJunz9myqe0NBrrYTR+jj9A8Wp9JOicMPsYGX SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2016 18:21:35.0310 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN4PR07MB2129 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add firmware download support for cn23xx device. Signed-off-by: Derek Chickles Signed-off-by: Satanand Burla Signed-off-by: Felix Manlunas Signed-off-by: Raghu Vatsavayi --- .../ethernet/cavium/liquidio/cn23xx_pf_device.c | 40 +++++++ .../ethernet/cavium/liquidio/cn23xx_pf_device.h | 2 + drivers/net/ethernet/cavium/liquidio/lio_main.c | 115 ++++++++++++--------- 3 files changed, 111 insertions(+), 46 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c index 64b681f..f1d4572 100644 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c @@ -214,6 +214,37 @@ void cn23xx_dump_pf_initialized_regs(struct octeon_device *oct) CVM_CAST64(octeon_read_csr64(oct, CN23XX_SLI_PKT_CNT_INT))); } +static int cn23xx_pf_soft_reset(struct octeon_device *oct) +{ + octeon_write_csr64(oct, CN23XX_WIN_WR_MASK_REG, 0xFF); + + dev_dbg(&oct->pci_dev->dev, "OCTEON[%d]: BIST enabled for CN23XX soft reset\n", + oct->octeon_id); + + octeon_write_csr64(oct, CN23XX_SLI_SCRATCH1, 0x1234ULL); + + /* Initiate chip-wide soft reset */ + lio_pci_readq(oct, CN23XX_RST_SOFT_RST); + lio_pci_writeq(oct, 1, CN23XX_RST_SOFT_RST); + + /* Wait for 100ms as Octeon resets. */ + mdelay(100); + + if (octeon_read_csr64(oct, CN23XX_SLI_SCRATCH1) == 0x1234ULL) { + dev_err(&oct->pci_dev->dev, "OCTEON[%d]: Soft reset failed\n", + oct->octeon_id); + return 1; + } + + dev_dbg(&oct->pci_dev->dev, "OCTEON[%d]: Reset completed\n", + oct->octeon_id); + + /* restore the reset value*/ + octeon_write_csr64(oct, CN23XX_WIN_WR_MASK_REG, 0xFF); + + return 0; +} + static void cn23xx_enable_error_reporting(struct octeon_device *oct) { u32 regval; @@ -1051,6 +1082,7 @@ int setup_cn23xx_octeon_pf_device(struct octeon_device *oct) oct->fn_list.process_interrupt_regs = cn23xx_interrupt_handler; oct->fn_list.msix_interrupt_handler = cn23xx_pf_msix_interrupt_handler; + oct->fn_list.soft_reset = cn23xx_pf_soft_reset; oct->fn_list.setup_device_regs = cn23xx_setup_pf_device_regs; oct->fn_list.reinit_regs = cn23xx_reinit_regs; @@ -1151,3 +1183,11 @@ void cn23xx_dump_iq_regs(struct octeon_device *oct) CVM_CAST64(octeon_read_csr64( oct, CN23XX_SLI_S2M_PORTX_CTL(oct->pcie_port)))); } + +int cn23xx_fw_loaded(struct octeon_device *oct) +{ + u64 val; + + val = octeon_read_csr64(oct, CN23XX_SLI_SCRATCH1); + return (val >> 1) & 1ULL; +} diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h index 36252e7..33b7589 100644 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h @@ -52,4 +52,6 @@ int validate_cn23xx_pf_config_info(struct octeon_device *oct, struct octeon_config *conf23xx); void cn23xx_dump_pf_initialized_regs(struct octeon_device *oct); + +int cn23xx_fw_loaded(struct octeon_device *oct); #endif diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 152d4ef..f5d8322 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -1312,9 +1312,9 @@ static void octeon_destroy_resources(struct octeon_device *oct) /* fallthrough */ case OCT_DEV_PCI_MAP_DONE: - /* Soft reset the octeon device before exiting */ - oct->fn_list.soft_reset(oct); + if ((!OCTEON_CN23XX_PF(oct)) || !oct->octeon_id) + oct->fn_list.soft_reset(oct); octeon_unmap_pci_barx(oct, 0); octeon_unmap_pci_barx(oct, 1); @@ -3818,6 +3818,7 @@ static void nic_starter(struct work_struct *work) static int octeon_device_init(struct octeon_device *octeon_dev) { int j, ret; + int fw_loaded = 0; char bootcmd[] = "\n"; struct octeon_device_priv *oct_priv = (struct octeon_device_priv *)octeon_dev->priv; @@ -3839,9 +3840,23 @@ static int octeon_device_init(struct octeon_device *octeon_dev) octeon_dev->app_mode = CVM_DRV_INVALID_APP; - /* Do a soft reset of the Octeon device. */ - if (octeon_dev->fn_list.soft_reset(octeon_dev)) + if (OCTEON_CN23XX_PF(octeon_dev)) { + if (!cn23xx_fw_loaded(octeon_dev)) { + fw_loaded = 0; + /* Do a soft reset of the Octeon device. */ + if (octeon_dev->fn_list.soft_reset(octeon_dev)) + return 1; + /* things might have changed */ + if (!cn23xx_fw_loaded(octeon_dev)) + fw_loaded = 0; + else + fw_loaded = 1; + } else { + fw_loaded = 1; + } + } else if (octeon_dev->fn_list.soft_reset(octeon_dev)) { return 1; + } /* Initialize the dispatch mechanism used to push packets arriving on * Octeon Output queues. @@ -3946,56 +3961,65 @@ static int octeon_device_init(struct octeon_device *octeon_dev) atomic_set(&octeon_dev->status, OCT_DEV_IO_QUEUES_DONE); - dev_dbg(&octeon_dev->pci_dev->dev, "Waiting for DDR initialization...\n"); - - if (ddr_timeout == 0) - dev_info(&octeon_dev->pci_dev->dev, "WAITING. Set ddr_timeout to non-zero value to proceed with initialization.\n"); + if ((!OCTEON_CN23XX_PF(octeon_dev)) || !fw_loaded) { + dev_dbg(&octeon_dev->pci_dev->dev, "Waiting for DDR initialization...\n"); + if (!ddr_timeout) { + dev_info(&octeon_dev->pci_dev->dev, + "WAITING. Set ddr_timeout to non-zero value to proceed with initialization.\n"); + } - schedule_timeout_uninterruptible(HZ * LIO_RESET_SECS); + schedule_timeout_uninterruptible(HZ * LIO_RESET_SECS); - /* Wait for the octeon to initialize DDR after the soft-reset. */ - while (ddr_timeout == 0) { - set_current_state(TASK_INTERRUPTIBLE); - if (schedule_timeout(HZ / 10)) { - /* user probably pressed Control-C */ + /* Wait for the octeon to initialize DDR after the soft-reset.*/ + while (!ddr_timeout) { + set_current_state(TASK_INTERRUPTIBLE); + if (schedule_timeout(HZ / 10)) { + /* user probably pressed Control-C */ + return 1; + } + } + ret = octeon_wait_for_ddr_init(octeon_dev, &ddr_timeout); + if (ret) { + dev_err(&octeon_dev->pci_dev->dev, + "DDR not initialized. Please confirm that board is configured to boot from Flash, ret: %d\n", + ret); return 1; } - } - ret = octeon_wait_for_ddr_init(octeon_dev, &ddr_timeout); - if (ret) { - dev_err(&octeon_dev->pci_dev->dev, - "DDR not initialized. Please confirm that board is configured to boot from Flash, ret: %d\n", - ret); - return 1; - } - if (octeon_wait_for_bootloader(octeon_dev, 1000) != 0) { - dev_err(&octeon_dev->pci_dev->dev, "Board not responding\n"); - return 1; - } + if (octeon_wait_for_bootloader(octeon_dev, 1000)) { + dev_err(&octeon_dev->pci_dev->dev, "Board not responding\n"); + return 1; + } - /* Divert uboot to take commands from host instead. */ - ret = octeon_console_send_cmd(octeon_dev, bootcmd, 50); + /* Divert uboot to take commands from host instead. */ + ret = octeon_console_send_cmd(octeon_dev, bootcmd, 50); - dev_dbg(&octeon_dev->pci_dev->dev, "Initializing consoles\n"); - ret = octeon_init_consoles(octeon_dev); - if (ret) { - dev_err(&octeon_dev->pci_dev->dev, "Could not access board consoles\n"); - return 1; - } - ret = octeon_add_console(octeon_dev, 0); - if (ret) { - dev_err(&octeon_dev->pci_dev->dev, "Could not access board console\n"); - return 1; - } + dev_dbg(&octeon_dev->pci_dev->dev, "Initializing consoles\n"); + ret = octeon_init_consoles(octeon_dev); + if (ret) { + dev_err(&octeon_dev->pci_dev->dev, "Could not access board consoles\n"); + return 1; + } + ret = octeon_add_console(octeon_dev, 0); + if (ret) { + dev_err(&octeon_dev->pci_dev->dev, "Could not access board console\n"); + return 1; + } - atomic_set(&octeon_dev->status, OCT_DEV_CONSOLE_INIT_DONE); + atomic_set(&octeon_dev->status, OCT_DEV_CONSOLE_INIT_DONE); - dev_dbg(&octeon_dev->pci_dev->dev, "Loading firmware\n"); - ret = load_firmware(octeon_dev); - if (ret) { - dev_err(&octeon_dev->pci_dev->dev, "Could not load firmware to board\n"); - return 1; + dev_dbg(&octeon_dev->pci_dev->dev, "Loading firmware\n"); + ret = load_firmware(octeon_dev); + if (ret) { + dev_err(&octeon_dev->pci_dev->dev, "Could not load firmware to board\n"); + return 1; + } + /* set bit 1 of SLI_SCRATCH_1 to indicate that firmware is + * loaded + */ + if (OCTEON_CN23XX_PF(octeon_dev)) + octeon_write_csr64(octeon_dev, CN23XX_SLI_SCRATCH1, + 2ULL); } handshake[octeon_dev->octeon_id].init_ok = 1; @@ -4011,7 +4035,6 @@ static int octeon_device_init(struct octeon_device *octeon_dev) octeon_dev->droq[j]->pkts_credit_reg); /* Packets can start arriving on the output queues from this point. */ - return 0; }