From patchwork Tue Jan 28 13:33:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230350 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=GSayUzQB; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SLX3hLrz9sSh for ; Wed, 29 Jan 2020 00:36:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726320AbgA1NeN (ORCPT ); Tue, 28 Jan 2020 08:34:13 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58859 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726292AbgA1NeN (ORCPT ); Tue, 28 Jan 2020 08:34:13 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133411euoutp01b646dd3cfadfff49e682305079e553ab~uEE87Suvc0325703257euoutp01D for ; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133411euoutp01b646dd3cfadfff49e682305079e553ab~uEE87Suvc0325703257euoutp01D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218451; bh=ePuNIRXCdAVaLAW228VBbPf1mEA8XYlrGDlSfA/cZkI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GSayUzQBP1C0zxnlJ3SX3NwzV5f3ISnlg45oEADUawBXPjNWP1+E5iXkxy9zZaYFw hqh/4Zh4eokuNV8DKkQMzfIcJT7MLtLTa8lRahosFi0fEamJ6lMPFLdh5mE1ol+qe7 Gul4/xjwf4sl9EYhPXevA++wndDqQWMWtDrAXtmM= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133411eucas1p1bb9a82bb6cdf0ebd0c91513fbfd7059a~uEE8YR5GE1375113751eucas1p1C; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 9A.CA.61286.358303E5; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133410eucas1p271284329b9b63c2c48167308809c569c~uEE8IRj-b3228632286eucas1p2h; Tue, 28 Jan 2020 13:34:10 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133410eusmtrp228251aa3a90197833460bd842d5bc520~uEE8HruUL0330103301eusmtrp2k; Tue, 28 Jan 2020 13:34:10 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-71-5e3038536605 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id BE.82.08375.258303E5; Tue, 28 Jan 2020 13:34:10 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133410eusmtip204ae489d1d3ea0abb6e0edba27d637f4~uEE7yFf410685506855eusmtip2S; Tue, 28 Jan 2020 13:34:10 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com, Tejun Heo Subject: [PATCH 01/28] ata: remove stale maintainership information from core code Date: Tue, 28 Jan 2020 14:33:16 +0100 Message-Id: <20200128133343.29905-2-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrEKsWRmVeSWpSXmKPExsWy7djP87rBFgZxBo8WsVmsvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezW/xafpTRgd1j56y77B6Xz5Z6bFrVyeZx6HAHo0ffllWM Hp83yQWwRXHZpKTmZJalFunbJXBlPDi0lLXgsmTFop+TWRoYr4t0MXJwSAiYSMyfFdvFyMkh JLCCUeLla9suRi4g+wujxNUF25ggnM+MEs9vdLOBVIE0rHh5nxUisZxR4syuM2xwLWdX/mIE qWITsJKY2L4KzBYRUJDo+b0SrIhZ4CSjxNzWd6wgCWGBEImP33rAbBYBVYk9X3+yg9i8ArYS k5b+YIFYJy+x9dsnVpBbOQXsJHr2mkOUCEqcnPkErIQZqKR562xmkPkSAtPZJa51bmaG6HWR aJ72nB3CFpZ4dXwLlC0j8X/nfCaIhnWMEn87XkB1b2eUWD75H9Sj1hJ3zv1iA9nMLKApsX6X PkTYUeL/47tMkMDjk7jxVhDiCD6JSdumM0OEeSU62oQgqtUkNizbwAaztmvnSqjTPCQaf3xh n8CoOAvJO7OQvDMLYe8CRuZVjOKppcW56anFhnmp5XrFibnFpXnpesn5uZsYgSnn9L/jn3Yw fr2UdIhRgINRiYd3hopBnBBrYllxZe4hRgkOZiUR3k4moBBvSmJlVWpRfnxRaU5q8SFGaQ4W JXFe40UvY4UE0hNLUrNTUwtSi2CyTBycUg2MDGJ/05sucXjby0utfmb7eO0uYRatBslVpiyz pni4beXbech41fX8WXUR7+QTVi99UXNn0y1BcXexGoG9h9arxWz2+x62en8Vd/7x1QffntW7 FSo6beFmvl3H7j3lTrru/WV39/k3HHlBlvVLb9ay3zy4sXL1xWOZczJ+evFe9i0oCf91Y+7c S0osxRmJhlrMRcWJALEK0IY1AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprAIsWRmVeSWpSXmKPExsVy+t/xe7pBFgZxBi2/jS1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZLX4tP8rowO6xc9Zddo/LZ0s9Nq3qZPM4dLiD0aNvyypG j8+b5ALYovRsivJLS1IVMvKLS2yVog0tjPQMLS30jEws9QyNzWOtjEyV9O1sUlJzMstSi/Tt EvQyHhxaylpwWbJi0c/JLA2M10W6GDk5JARMJFa8vM/axcjFISSwlFHi7Jf9jF2MHEAJGYnj 68sgaoQl/lzrYoOo+cQosW7LclaQBJuAlcTE9lWMILaIgIJEz++VYEXMAmcZJeZuawJLCAsE SXQ92ccOYrMIqErs+foTzOYVsJWYtPQHC8QGeYmt3z6xgizmFLCT6NlrDhIWAipZf+YpK0S5 oMTJmU/AypmBypu3zmaewCgwC0lqFpLUAkamVYwiqaXFuem5xYZ6xYm5xaV56XrJ+bmbGIGx se3Yz807GC9tDD7EKMDBqMTDO0PFIE6INbGsuDL3EKMEB7OSCG8nE1CINyWxsiq1KD++qDQn tfgQoynQDxOZpUST84Fxm1cSb2hqaG5haWhubG5sZqEkztshcDBGSCA9sSQ1OzW1ILUIpo+J g1OqgTH3mIP47Q6Dgv6KMqW/pq06Dyv8D0d0PTFPVbV32ZLY4HJ6XWR94ufmeR1qDoXKrlVv GpT3RJeeuxzG8yP1bW/Z+w8Fd3ftj2y9MXELK4fyNeYP6+/NeX2p27yKX+LntEaba7vqFTYl /jWuUbqucL3v+qU9q/+oaZ4xvlizd+LEuN2L/6fkhyixFGckGmoxFxUnAgCdf35QowIAAA== X-CMS-MailID: 20200128133410eucas1p271284329b9b63c2c48167308809c569c X-Msg-Generator: CA X-RootMTR: 20200128133410eucas1p271284329b9b63c2c48167308809c569c X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133410eucas1p271284329b9b63c2c48167308809c569c References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org In commit 7634ccd2da97 ("libata: maintainership update") from 2018 Jens has officially taken over libata maintainership from Tejun so remove stale information from core libata code. Cc: Tejun Heo Signed-off-by: Bartlomiej Zolnierkiewicz Acked-by: Tejun Heo --- I've not touched host drivers which also list Tejun as Maintainer: drivers/ata/acard-ahci.c: * Maintained by: Tejun Heo drivers/ata/ahci.c: * Maintained by: Tejun Heo drivers/ata/ahci.h: * Maintained by: Tejun Heo drivers/ata/ata_piix.c: * Maintained by: Tejun Heo drivers/ata/libahci.c: * Maintained by: Tejun Heo drivers/ata/pdc_adma.c: * Maintained by: Tejun Heo drivers/ata/sata_promise.c: * Maintained by: Tejun Heo drivers/ata/sata_sil.c: * Maintained by: Tejun Heo drivers/ata/sata_sx4.c: * Maintained by: Tejun Heo drivers/ata/sata_via.c: * Maintained by: Tejun Heo Tejun, please let me know if you want me to update any of them. drivers/ata/libata-core.c | 4 ---- drivers/ata/libata-eh.c | 4 ---- drivers/ata/libata-scsi.c | 4 ---- drivers/ata/libata-sff.c | 4 ---- 4 files changed, 16 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 6f4ab5c5b52d..fa36e3248039 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2,10 +2,6 @@ /* * libata-core.c - helper library for ATA * - * Maintained by: Tejun Heo - * Please ALWAYS copy linux-ide@vger.kernel.org - * on emails. - * * Copyright 2003-2004 Red Hat, Inc. All rights reserved. * Copyright 2003-2004 Jeff Garzik * diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 3bfd9da58473..53605c8949d8 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -2,10 +2,6 @@ /* * libata-eh.c - libata error handling * - * Maintained by: Tejun Heo - * Please ALWAYS copy linux-ide@vger.kernel.org - * on emails. - * * Copyright 2006 Tejun Heo * * libata documentation is available via 'make {ps|pdf}docs', diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index eb2eb599e602..11eb25b6e2cd 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -2,10 +2,6 @@ /* * libata-scsi.c - helper library for ATA * - * Maintained by: Tejun Heo - * Please ALWAYS copy linux-ide@vger.kernel.org - * on emails. - * * Copyright 2003-2004 Red Hat, Inc. All rights reserved. * Copyright 2003-2004 Jeff Garzik * diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 038db94216a9..ae7189d1a568 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c @@ -2,10 +2,6 @@ /* * libata-sff.c - helper library for PCI IDE BMDMA * - * Maintained by: Tejun Heo - * Please ALWAYS copy linux-ide@vger.kernel.org - * on emails. - * * Copyright 2003-2006 Red Hat, Inc. All rights reserved. * Copyright 2003-2006 Jeff Garzik * From patchwork Tue Jan 28 13:33:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230349 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=Oh+z9LWd; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SLW2Rmgz9sSn for ; Wed, 29 Jan 2020 00:36:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726243AbgA1NgA (ORCPT ); Tue, 28 Jan 2020 08:36:00 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58868 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726290AbgA1NeN (ORCPT ); Tue, 28 Jan 2020 08:34:13 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133411euoutp010888435094856b53f2a6ab240f08e56f~uEE9DuBCN0325703257euoutp01E for ; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133411euoutp010888435094856b53f2a6ab240f08e56f~uEE9DuBCN0325703257euoutp01E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218451; bh=fQRPpY/j6R22KpyWirOw9I+9JR4nX2LGrBjD+UV1aaY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Oh+z9LWdlggJNC5uVxQMxN7xO0730nIM+ohFTJP1tf0Xu0PQjy89FgUyu1rUBmlnp JjHhRqVPNG451fkrzkKTKswgLPu/Hkh08u3Co79hySzXFwE1MF0oW75y8su+NvMQTF WGF/c2umK5WPRiWVPOD8HLlrxZBtOAaHSl4+Zg/Q= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133411eucas1p172fca709f85ccf515477a53ed483effc~uEE832lXW1586715867eucas1p1B; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 4E.4A.60679.358303E5; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133411eucas1p2db496c50fea321b621b1a07b4b8a8cc2~uEE8gECm51390313903eucas1p2w; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133411eusmtrp205895dffee8bd31b612f12f0979d677f~uEE8fiGqa0330003300eusmtrp2o; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-3c-5e303853fc83 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 3F.82.08375.358303E5; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133410eusmtip21f35e33ca5b9f1a849cce97583c15484~uEE8Hr_Lv0657406574eusmtip2Z; Tue, 28 Jan 2020 13:34:10 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 02/28] ata: expose ncq_enable_prio sysfs attribute only on NCQ capable hosts Date: Tue, 28 Jan 2020 14:33:17 +0100 Message-Id: <20200128133343.29905-3-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7djP87rBFgZxBk8uqFusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK6N95WKWgh/8FS9mzGVpYDzE28XIySEhYCKxfN4iti5GLg4hgRWMEqc3zmEG SQgJfGGUePY3ByLxmVFi0boZjF2MHGAdmy76QMSXM0rcvnWRFcIBarh7dyIjSDebgJXExPZV YLaIgIJEz++VYCuYBdYwSqw63ASWEBaIk+j6PAnMZhFQlfj/9hWYzStgK3Hh6FdWiPvkJbZ+ +8QKsplTwE6iZ685RImgxMmZT1hAbGagkuats5lB5ksItLNLfGn6xwLR6yKx68p0ZghbWOLV 8S3sELaMxP+d85kgGtYxSvzteAHVvZ1RYvnkf2wQVdYSd879YgPZzCygKbF+lz5E2FGiad1m JkhQ8EnceCsIcQSfxKRtILtAwrwSHW1CENVqEhuWbWCDWdu1cyXUOR4SD9deY53AqDgLyTuz kLwzC2HvAkbmVYziqaXFuempxUZ5qeV6xYm5xaV56XrJ+bmbGIHp5fS/4192MO76k3SIUYCD UYmHd4aKQZwQa2JZcWXuIUYJDmYlEd5OJqAQb0piZVVqUX58UWlOavEhRmkOFiVxXuNFL2OF BNITS1KzU1MLUotgskwcnFINjLO3rApsc2OdKt5+rZH7xucl59czWxuYS6hlrV/kcfvGswvy LjUTG1vUtBRuKH91yK/0jJGOSeuN8/R89Uxl+a7ln3TOTLpX+3EXl/U3tj8db9me1+7vmcF9 /9+pG5NmC1jcP8+b75rLsfbdQZNj10U+Vp7t0tbN/O3XGfoo9v7i+XpfU9XMI5VYijMSDbWY i4oTAZAZU8crAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmkeLIzCtJLcpLzFFi42I5/e/4Pd1gC4M4gydt3Bar7/azWWycsZ7V 4tmtvUwWx3Y8YrK4vGsOm8Xc1unsDmweO2fdZfe4fLbU49DhDkaPvi2rGD0+b5ILYI3SsynK Ly1JVcjILy6xVYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJzcksSy3St0vQy2hfuZil4Ad/ xYsZc1kaGA/xdjFycEgImEhsuujTxcjJISSwlFFi/bFEiLCMxPH1ZSBhCQFhiT/Xuti6GLmA Sj4xSsz92sQIkmATsJKY2L4KzBYRUJDo+b0SrIhZYAOjxKubX1hABgkLxEgs+5ALUsMioCrx /+0rsHpeAVuJC0e/skIskJfY+u0TK0g5p4CdRM9ec4hzbCXWn3nKClEuKHFy5hMWEJsZqLx5 62zmCYwCs5CkZiFJLWBkWsUoklpanJueW2yoV5yYW1yal66XnJ+7iREYAduO/dy8g/HSxuBD jAIcjEo8vDNUDOKEWBPLiitzDzFKcDArifB2MgGFeFMSK6tSi/Lji0pzUosPMZoC/TCRWUo0 OR8YnXkl8YamhuYWlobmxubGZhZK4rwdAgdjhATSE0tSs1NTC1KLYPqYODilGhh1ljhe8+QM eWfLmV42xzORX8lrnsnM9RO/XTvWwu4X/6S0PiZngXj88mXr9+wPnbq7eP0lQWbVxYfNQna4 fpvkPcv4ZJPN78c3bgXt2hNp6XxifudVto9l+9eeXfp202yVzTnPlS1TUjPW6Xttf9v6SvXz jzsKE7e92abU8DZFt1BhNveyygxlJZbijERDLeai4kQAIWuzA5YCAAA= X-CMS-MailID: 20200128133411eucas1p2db496c50fea321b621b1a07b4b8a8cc2 X-Msg-Generator: CA X-RootMTR: 20200128133411eucas1p2db496c50fea321b621b1a07b4b8a8cc2 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133411eucas1p2db496c50fea321b621b1a07b4b8a8cc2 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org There is no point in exposing ncq_enable_prio sysfs attribute for devices on PATA and non-NCQ capable SATA hosts so: * remove dev_attr_ncq_prio_enable from ata_common_sdev_attrs[] * add ata_ncq_sdev_attrs[] * update ATA_NCQ_SHT() macro to use ata_ncq_sdev_attrs[] Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-scsi.c | 8 +++++++- include/linux/libata.h | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 11eb25b6e2cd..161e5d84bd82 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -462,11 +462,17 @@ EXPORT_SYMBOL_GPL(dev_attr_sw_activity); struct device_attribute *ata_common_sdev_attrs[] = { &dev_attr_unload_heads, - &dev_attr_ncq_prio_enable, NULL }; EXPORT_SYMBOL_GPL(ata_common_sdev_attrs); +struct device_attribute *ata_ncq_sdev_attrs[] = { + &dev_attr_unload_heads, + &dev_attr_ncq_prio_enable, + NULL +}; +EXPORT_SYMBOL_GPL(ata_ncq_sdev_attrs); + /** * ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd. * @sdev: SCSI device for which BIOS geometry is to be determined diff --git a/include/linux/libata.h b/include/linux/libata.h index a36bdcb8d9e9..2a9d50b0e219 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1335,6 +1335,7 @@ extern int ata_link_nr_enabled(struct ata_link *link); extern const struct ata_port_operations ata_base_port_ops; extern const struct ata_port_operations sata_port_ops; extern struct device_attribute *ata_common_sdev_attrs[]; +extern struct device_attribute *ata_ncq_sdev_attrs[]; /* * All sht initializers (BASE, PIO, BMDMA, NCQ) must be instantiated @@ -1361,6 +1362,7 @@ extern struct device_attribute *ata_common_sdev_attrs[]; #define ATA_NCQ_SHT(drv_name) \ ATA_BASE_SHT(drv_name), \ + .sdev_attrs = ata_ncq_sdev_attrs, \ .change_queue_depth = ata_scsi_change_queue_depth /* From patchwork Tue Jan 28 13:33:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230322 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=B8Ot9Ehl; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SJT4Mjfz9sQp for ; Wed, 29 Jan 2020 00:34:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726504AbgA1NeQ (ORCPT ); Tue, 28 Jan 2020 08:34:16 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58896 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726346AbgA1NeP (ORCPT ); Tue, 28 Jan 2020 08:34:15 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133412euoutp01298e68f92b9fc8ae88b8c8fa48a6624e~uEE9oQU-20325703257euoutp01F for ; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133412euoutp01298e68f92b9fc8ae88b8c8fa48a6624e~uEE9oQU-20325703257euoutp01F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218452; bh=RLgi3xyOZziUdWyXtNMjMVsiVYVnGbMcgDPO7LvqSCQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=B8Ot9EhlHE9lNHBQm5Hu8knSmfv66dwjI3/znCy/Z/j98wsqSxZJ5Eue/aaYzFDQL MDixy7ThEh81In2ONh68JaqccDnnTA4EvmmABFT6r9tI2vu/qJvua66vTer2mKXqAl HpOaSJV1Ogd6XobnsWBuIjcv+ADvHEZQcGZeFTeM= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133412eucas1p16bb8d8118a38e262142c0f84e9a39985~uEE9Wkm5v0713407134eucas1p1m; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 8B.CA.61286.458303E5; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133411eucas1p1671c280eb6f5d2ca2d10743eea6c96e5~uEE827OfJ0680006800eucas1p1m; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133411eusmtrp21fea6dacd033589ada9357901e954c37~uEE82Uhv_0330103301eusmtrp2n; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-75-5e303854d09f Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 5D.72.07950.358303E5; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133411eusmtip20abd6e2f6735eb7b31e252fa758dff9e~uEE8bflkm0685506855eusmtip2T; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com, "James E.J. Bottomley" , "Martin K. Petersen" Subject: [PATCH 03/28] ata: make SATA_PMP option selectable only if any SATA host driver is enabled Date: Tue, 28 Jan 2020 14:33:18 +0100 Message-Id: <20200128133343.29905-4-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrLKsWRmVeSWpSXmKPExsWy7djP87ohFgZxBu87uCxW3+1ns9g4Yz2r xbNbe5ksFt3YxmRxbMcjJovLu+awWSw//o/JYm7rdHYHDo+ds+6ye1w+W+px6HAHo8eERQcY PT4+vcXi0bdlFaPH501yAexRXDYpqTmZZalF+nYJXBnNV3YyFzwLqfg+9xpjA+N0py5GTg4J AROJGROvM3YxcnEICaxglDi8bgUrhPOFUeLJyk4o5zOjxJUjS5i6GDnAWqZtEIeIL2eUmHah GaGj59NudpC5bAJWEhPbVzGC2CICChI9v1eygRQxC0xgkviyfgULSEJYIFVia08bM4jNIqAq cWX/QiYQm1fAVmLt/EZWiAPlJbZ++8QKsplTwE6iZ685RImgxMmZT8DGMAOVNG+dzQwyX0Jg GbvE/dsL2SF6XSSWzp/MBGELS7w6vgUqLiPxf+d8JoiGdYwSfzteQHVvZ5RYPvkfG0SVtcSd c7/YQDYzC2hKrN+lDxF2lFi+cxorJCj4JG68FYQ4gk9i0rbpzBBhXomONiGIajWJDcs2sMGs 7dq5khnC9pDYvGgF0wRGxVlI3pmF5J1ZCHsXMDKvYhRPLS3OTU8tNsxLLdcrTswtLs1L10vO z93ECExEp/8d/7SD8eulpEOMAhyMSjy8M1QM4oRYE8uKK3MPMUpwMCuJ8HYyAYV4UxIrq1KL 8uOLSnNSiw8xSnOwKInzGi96GSskkJ5YkpqdmlqQWgSTZeLglGpg3Nj8+sIeY409k56t2Ce4 TJhbhzNyVeX3iqRGo4xFuSU2njt8DObeW/r30r/MDQoHs/5z2JyYWOoZwcUk+UxbPft0xqHq lfryyz6WsZ2J3HhtfbFmVJ29UM/qd+nigTquFoaph8Qflr40X6EyRfPRfZ4y4WIR9iXabeW7 /KNzDC7GiixTsz6pxFKckWioxVxUnAgAyvjPYkADAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBIsWRmVeSWpSXmKPExsVy+t/xe7rBFgZxBgevK1usvtvPZrFxxnpW i2e39jJZLLqxjcni2I5HTBaXd81hs1h+/B+TxdzW6ewOHB47Z91l97h8ttTj0OEORo8Jiw4w enx8eovFo2/LKkaPz5vkAtij9GyK8ktLUhUy8otLbJWiDS2M9AwtLfSMTCz1DI3NY62MTJX0 7WxSUnMyy1KL9O0S9DKar+xkLngWUvF97jXGBsbpTl2MHBwSAiYS0zaIdzFycggJLGWUOPcq AiIsI3F8fRlIWEJAWOLPtS62LkYuoJJPjBJ39p1nA0mwCVhJTGxfxQhiiwgoSPT8XglWxCww hUli4vtrYEXCAskSk9onsoPYLAKqElf2L2QCsXkFbCXWzm9khdggL7H12ydWkMWcAnYSPXvN Ie6xlVh/5ikrRLmgxMmZT1hAbGag8uats5knMArMQpKahSS1gJFpFaNIamlxbnpusZFecWJu cWleul5yfu4mRmCsbDv2c8sOxq53wYcYBTgYlXh4HZQM4oRYE8uKK3MPMUpwMCuJ8HYyAYV4 UxIrq1KL8uOLSnNSiw8xmgL9MJFZSjQ5HxjHeSXxhqaG5haWhubG5sZmFkrivB0CB2OEBNIT S1KzU1MLUotg+pg4OKUaGONvCk/4lsAgKW74fOldGeV8yysbVk+5ftZQULj6cOjX7DqrRL2y eXeCzqs+kH2ao8CytGupSrHuq+K68/snvHxskKiRVKu3f9avzriPy6S29p1s6JF87TTvvJWI ZtyXOYcjFOWWPX6il3FSz7rWTdzxgNyET7ZlD77YbtLKkxG27PJj/BxTpMRSnJFoqMVcVJwI AHvSQlqrAgAA X-CMS-MailID: 20200128133411eucas1p1671c280eb6f5d2ca2d10743eea6c96e5 X-Msg-Generator: CA X-RootMTR: 20200128133411eucas1p1671c280eb6f5d2ca2d10743eea6c96e5 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133411eucas1p1671c280eb6f5d2ca2d10743eea6c96e5 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org There is no reason to expose SATA_PMP config option when no SATA host drivers are enabled. To fix it add SATA_HOST config option, make all SATA host drivers select it and finally make SATA_PMP config options depend on it. This also serves as a preparation for the future changes which optimize libata core code size on PATA only setups. Cc: "James E.J. Bottomley" Cc: "Martin K. Petersen" Signed-off-by: Bartlomiej Zolnierkiewicz Reviewed-by: Martin K. Petersen --- drivers/ata/Kconfig | 40 +++++++++++++++++++++++++++++++++++++ drivers/scsi/Kconfig | 1 + drivers/scsi/libsas/Kconfig | 1 + 3 files changed, 42 insertions(+) diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index a6beb2c5a692..ad7760656f71 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig @@ -34,6 +34,9 @@ if ATA config ATA_NONSTANDARD bool +config SATA_HOST + bool + config ATA_VERBOSE_ERROR bool "Verbose ATA error reporting" default y @@ -73,6 +76,7 @@ config SATA_ZPODD config SATA_PMP bool "SATA Port Multiplier support" + depends on SATA_HOST default y help This option adds support for SATA Port Multipliers @@ -85,6 +89,7 @@ comment "Controllers with non-SFF native interface" config SATA_AHCI tristate "AHCI SATA support" depends on PCI + select SATA_HOST help This option enables support for AHCI Serial ATA. @@ -111,6 +116,7 @@ config SATA_MOBILE_LPM_POLICY config SATA_AHCI_PLATFORM tristate "Platform AHCI SATA support" + select SATA_HOST help This option enables support for Platform AHCI Serial ATA controllers. @@ -121,6 +127,7 @@ config AHCI_BRCM tristate "Broadcom AHCI SATA support" depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_NSP || \ ARCH_BCM_63XX + select SATA_HOST help This option enables support for the AHCI SATA3 controller found on Broadcom SoC's. @@ -130,6 +137,7 @@ config AHCI_BRCM config AHCI_DA850 tristate "DaVinci DA850 AHCI SATA support" depends on ARCH_DAVINCI_DA850 + select SATA_HOST help This option enables support for the DaVinci DA850 SoC's onboard AHCI SATA. @@ -139,6 +147,7 @@ config AHCI_DA850 config AHCI_DM816 tristate "DaVinci DM816 AHCI SATA support" depends on ARCH_OMAP2PLUS + select SATA_HOST help This option enables support for the DaVinci DM816 SoC's onboard AHCI SATA controller. @@ -148,6 +157,7 @@ config AHCI_DM816 config AHCI_ST tristate "ST AHCI SATA support" depends on ARCH_STI + select SATA_HOST help This option enables support for ST AHCI SATA controller. @@ -157,6 +167,7 @@ config AHCI_IMX tristate "Freescale i.MX AHCI SATA support" depends on MFD_SYSCON && (ARCH_MXC || COMPILE_TEST) depends on (HWMON && (THERMAL || !THERMAL_OF)) || !HWMON + select SATA_HOST help This option enables support for the Freescale i.MX SoC's onboard AHCI SATA. @@ -166,6 +177,7 @@ config AHCI_IMX config AHCI_CEVA tristate "CEVA AHCI SATA support" depends on OF + select SATA_HOST help This option enables support for the CEVA AHCI SATA. It can be found on the Xilinx Zynq UltraScale+ MPSoC. @@ -176,6 +188,7 @@ config AHCI_MTK tristate "MediaTek AHCI SATA support" depends on ARCH_MEDIATEK select MFD_SYSCON + select SATA_HOST help This option enables support for the MediaTek SoC's onboard AHCI SATA controller. @@ -185,6 +198,7 @@ config AHCI_MTK config AHCI_MVEBU tristate "Marvell EBU AHCI SATA support" depends on ARCH_MVEBU + select SATA_HOST help This option enables support for the Marvebu EBU SoC's onboard AHCI SATA. @@ -203,6 +217,7 @@ config AHCI_OCTEON config AHCI_SUNXI tristate "Allwinner sunxi AHCI SATA support" depends on ARCH_SUNXI + select SATA_HOST help This option enables support for the Allwinner sunxi SoC's onboard AHCI SATA. @@ -212,6 +227,7 @@ config AHCI_SUNXI config AHCI_TEGRA tristate "NVIDIA Tegra AHCI SATA support" depends on ARCH_TEGRA + select SATA_HOST help This option enables support for the NVIDIA Tegra SoC's onboard AHCI SATA. @@ -221,12 +237,14 @@ config AHCI_TEGRA config AHCI_XGENE tristate "APM X-Gene 6.0Gbps AHCI SATA host controller support" depends on PHY_XGENE + select SATA_HOST help This option enables support for APM X-Gene SoC SATA host controller. config AHCI_QORIQ tristate "Freescale QorIQ AHCI SATA support" depends on OF + select SATA_HOST help This option enables support for the Freescale QorIQ AHCI SoC's onboard AHCI SATA. @@ -236,6 +254,7 @@ config AHCI_QORIQ config SATA_FSL tristate "Freescale 3.0Gbps SATA support" depends on FSL_SOC + select SATA_HOST help This option enables support for Freescale 3.0Gbps SATA controller. It can be found on MPC837x and MPC8315. @@ -245,6 +264,7 @@ config SATA_FSL config SATA_GEMINI tristate "Gemini SATA bridge support" depends on ARCH_GEMINI || COMPILE_TEST + select SATA_HOST default ARCH_GEMINI help This enabled support for the FTIDE010 to SATA bridge @@ -255,6 +275,7 @@ config SATA_GEMINI config SATA_AHCI_SEATTLE tristate "AMD Seattle 6.0Gbps AHCI SATA host controller support" depends on ARCH_SEATTLE + select SATA_HOST help This option enables support for AMD Seattle SATA host controller. @@ -263,12 +284,14 @@ config SATA_AHCI_SEATTLE config SATA_INIC162X tristate "Initio 162x SATA support (Very Experimental)" depends on PCI + select SATA_HOST help This option enables support for Initio 162x Serial ATA. config SATA_ACARD_AHCI tristate "ACard AHCI variant (ATP 8620)" depends on PCI + select SATA_HOST help This option enables support for Acard. @@ -277,6 +300,7 @@ config SATA_ACARD_AHCI config SATA_SIL24 tristate "Silicon Image 3124/3132 SATA support" depends on PCI + select SATA_HOST help This option enables support for Silicon Image 3124/3132 Serial ATA. @@ -326,6 +350,7 @@ config PATA_OCTEON_CF config SATA_QSTOR tristate "Pacific Digital SATA QStor support" depends on PCI + select SATA_HOST help This option enables support for Pacific Digital Serial ATA QStor. @@ -334,6 +359,7 @@ config SATA_QSTOR config SATA_SX4 tristate "Promise SATA SX4 support (Experimental)" depends on PCI + select SATA_HOST help This option enables support for Promise Serial ATA SX4. @@ -357,6 +383,7 @@ comment "SATA SFF controllers with BMDMA" config ATA_PIIX tristate "Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support" depends on PCI + select SATA_HOST help This option enables support for ICH5/6/7/8 Serial ATA and support for PATA on the Intel ESB/ICH/PIIX3/PIIX4 series @@ -368,6 +395,7 @@ config SATA_DWC tristate "DesignWare Cores SATA support" depends on DMADEVICES select GENERIC_PHY + select SATA_HOST help This option enables support for the on-chip SATA controller of the AppliedMicro processor 460EX. @@ -398,6 +426,7 @@ config SATA_DWC_VDEBUG config SATA_HIGHBANK tristate "Calxeda Highbank SATA support" depends on ARCH_HIGHBANK || COMPILE_TEST + select SATA_HOST help This option enables support for the Calxeda Highbank SoC's onboard SATA. @@ -409,6 +438,7 @@ config SATA_MV depends on PCI || ARCH_DOVE || ARCH_MV78XX0 || \ ARCH_MVEBU || ARCH_ORION5X || COMPILE_TEST select GENERIC_PHY + select SATA_HOST help This option enables support for the Marvell Serial ATA family. Currently supports 88SX[56]0[48][01] PCI(-X) chips, @@ -419,6 +449,7 @@ config SATA_MV config SATA_NV tristate "NVIDIA SATA support" depends on PCI + select SATA_HOST help This option enables support for NVIDIA Serial ATA. @@ -427,6 +458,7 @@ config SATA_NV config SATA_PROMISE tristate "Promise SATA TX2/TX4 support" depends on PCI + select SATA_HOST help This option enables support for Promise Serial ATA TX2/TX4. @@ -435,6 +467,7 @@ config SATA_PROMISE config SATA_RCAR tristate "Renesas R-Car SATA support" depends on ARCH_RENESAS || COMPILE_TEST + select SATA_HOST help This option enables support for Renesas R-Car Serial ATA. @@ -443,6 +476,7 @@ config SATA_RCAR config SATA_SIL tristate "Silicon Image SATA support" depends on PCI + select SATA_HOST help This option enables support for Silicon Image Serial ATA. @@ -452,6 +486,7 @@ config SATA_SIS tristate "SiS 964/965/966/180 SATA support" depends on PCI select PATA_SIS + select SATA_HOST help This option enables support for SiS Serial ATA on SiS 964/965/966/180 and Parallel ATA on SiS 180. @@ -462,6 +497,7 @@ config SATA_SIS config SATA_SVW tristate "ServerWorks Frodo / Apple K2 SATA support" depends on PCI + select SATA_HOST help This option enables support for Broadcom/Serverworks/Apple K2 SATA support. @@ -471,6 +507,7 @@ config SATA_SVW config SATA_ULI tristate "ULi Electronics SATA support" depends on PCI + select SATA_HOST help This option enables support for ULi Electronics SATA. @@ -479,6 +516,7 @@ config SATA_ULI config SATA_VIA tristate "VIA SATA support" depends on PCI + select SATA_HOST help This option enables support for VIA Serial ATA. @@ -487,6 +525,7 @@ config SATA_VIA config SATA_VITESSE tristate "VITESSE VSC-7174 / INTEL 31244 SATA support" depends on PCI + select SATA_HOST help This option enables support for Vitesse VSC7174 and Intel 31244 Serial ATA. @@ -1113,6 +1152,7 @@ config PATA_ACPI config ATA_GENERIC tristate "Generic ATA support" depends on PCI && ATA_BMDMA + select SATA_HOST help This option enables support for generic BIOS configured ATA controllers via the new ATA layer diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index a7881f8eb05e..1b6eaf8da5fa 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig @@ -989,6 +989,7 @@ config SCSI_SYM53C8XX_MMIO config SCSI_IPR tristate "IBM Power Linux RAID adapter support" depends on PCI && SCSI && ATA + select SATA_HOST select FW_LOADER select IRQ_POLL select SGL_ALLOC diff --git a/drivers/scsi/libsas/Kconfig b/drivers/scsi/libsas/Kconfig index 5c6a5eff2f8e..052ee3a26f6e 100644 --- a/drivers/scsi/libsas/Kconfig +++ b/drivers/scsi/libsas/Kconfig @@ -19,6 +19,7 @@ config SCSI_SAS_ATA bool "ATA support for libsas (requires libata)" depends on SCSI_SAS_LIBSAS depends on ATA = y || ATA = SCSI_SAS_LIBSAS + select SATA_HOST help Builds in ATA support into libsas. Will necessitate the loading of libata along with libsas. From patchwork Tue Jan 28 13:33:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230347 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=lJfh/2Tn; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SLR08Wbz9sSh for ; Wed, 29 Jan 2020 00:35:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726620AbgA1Nfs (ORCPT ); Tue, 28 Jan 2020 08:35:48 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52328 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726299AbgA1NeO (ORCPT ); Tue, 28 Jan 2020 08:34:14 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133412euoutp026fe36d36c671c4971328d533d5d3b933~uEE9_A0gf2858228582euoutp026 for ; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133412euoutp026fe36d36c671c4971328d533d5d3b933~uEE9_A0gf2858228582euoutp026 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218452; bh=H4QrtVL61FUm03xLuWQqA31QHy5dP4mqpTAK4yNgYiU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lJfh/2TnO9ri6N6FXG5TF7Yg2nreU0sG+O3B+r/ezH+isuhPVQH/5/1B+hLfAX/JB hPeBaNCy4Z6UFN0m1JrDSOXyM2E6xDWRV9VBMfJfn1NvGX7yj9gNRM12dWVZwcKo+D 0ZgGKXNTkWUzMCFA9OyLVfYJt6KqqpiTpeqk15KA= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133412eucas1p2591cc02d579aab2c4e4bbb8f95ed73e3~uEE9liTEM2264122641eucas1p2-; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id A5.DA.60698.458303E5; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133412eucas1p2c79626824fcadc63c133548cd2e7d8cf~uEE9Ow2xZ0474204742eucas1p2O; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133412eusmtrp28a80fb3382759d075c0ed3a6243050ed~uEE9OLG3V0330003300eusmtrp2r; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) X-AuditID: cbfec7f5-a29ff7000001ed1a-b0-5e303854941c Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 8E.72.07950.358303E5; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133411eusmtip2d0054da31de363afae1c6eada367454b~uEE8zeF0J3275932759eusmtip2k; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com, Mikael Pettersson Subject: [PATCH 04/28] sata_promise: use ata_cable_sata() Date: Tue, 28 Jan 2020 14:33:19 +0100 Message-Id: <20200128133343.29905-5-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA01Sa0hTYRju29nOzqwjn1PwxaJyZGCYLjRcN7HSGNSPiIKMtJYeLzQvbM6c /ZG0snnPcDoTxR95A53mZRMnNEMLNSOlpiilRakl0XTi3dyOlv+e97nwvC+8FCEs53lQcQnJ jCJBJheRTty2nqXBo1cl4ghx/xpI6sfzSUlTSSNP8n3UxJH0GCY5kqGO56Qkt7qNkJQ/1PKD +VKjbpwvHRpQSc3dWUia11KHpHPN+y/zbjidjmLkcSmMwi/otlPsq0oNJ+nz7lTLSHQ6+iXQ IAEFOAD08zakQU6UENcgmMj+yGeHeQSjpjWCHeYQ5Bt/ou1Iee4fBxbiagTmzKB/iYHOMcIu kPgkFD6uc5jc8EHIWakl7SYCWxB0mwtIu+CKT8DQSLcDc7EXTL62dwsoGp+BB7aZrbYD0Lpg 5WkQRQlwEOSYAlmLC7wt/ca1Y2LTktFa5tgUcD4fbHM6ks2GwGJeO5fFrjDT28Jn8T7YMFZw 2EADgrWsqa10O4LqovWt9CkYe7dM2psJ7A2NHX4sfRaG5+sdNGBnsMy6sEs4w9M2LcHSNGQ9 ErLuw6B/oSe3azXGWoLFUrDaCskC5KnbcY5uxzm6/72ViKhD7oxKGR/DKP0TmHu+Slm8UpUQ 4xuZGN+MNp+mb73XZkBdq3fMCFNItIcOFokjhDxZilIdb0ZAESI3+glnk6KjZOo0RpF4S6GS M0oz2ktxRe60f9V0uBDHyJKZuwyTxCi2VQ4l8EhHXd4+0z44cPCrunTYedTL9/4nwxe5x4ew VL/fxyOjbQ1W6eIFsQ95pZjObKq8vrCrhn5vzC+6WWaZ7qcO+QcYMypwpcePpbDZEkOwVXzu 0stwfalfWuZUqDp0Iz2k1LSatCi/VkV6nleY2rXPJlo7Rdq+5ZleeHMx21K8IqZFXGWs7NgR QqGU/QXEa81uMAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkkeLIzCtJLcpLzFFi42I5/e/4Pd1gC4M4g3X9Vhar7/azWWycsZ7V 4tmtvUwWx3Y8YrK4vGsOm0Xv8m3MFnNbp7M7sHvsnHWX3ePy2VKPQ4c7GD36tqxi9Pi8SS6A NUrPpii/tCRVISO/uMRWKdrQwkjP0NJCz8jEUs/Q2DzWyshUSd/OJiU1J7MstUjfLkEv4+CC LqaC+9wVN26mNTC+4exi5OSQEDCRmNv7kbGLkYtDSGApo8SlG+uYuxg5gBIyEsfXl0HUCEv8 udbFBmILCXxilNhyQAzEZhOwkpjYvooRxBYRUJDo+b2SDWQOs8AdRomWJROYQRLCApYSl28e BmtmEVCVeHTkGjuIzStgK9H09RUjxAJ5ia3fPrGC7OUUsJPo2WsOsctWYv2Zp6wQ5YISJ2c+ YQGxmYHKm7fOZp7AKDALSWoWktQCRqZVjCKppcW56bnFRnrFibnFpXnpesn5uZsYgdGw7djP LTsYu94FH2IU4GBU4uF1UDKIE2JNLCuuzD3EKMHBrCTC28kEFOJNSaysSi3Kjy8qzUktPsRo CvTDRGYp0eR8YKTmlcQbmhqaW1gamhubG5tZKInzdggcjBESSE8sSc1OTS1ILYLpY+LglGpg bGbfpnT1SWb5oVuJ/XcdLvfm/d6pKdaVvPdCf7ZTu6tlnEjcj55piiKLdk/l+nprayLLy/m7 zLWuiJtmVgdEfT1af/vy2pawpO23k9LqC1YV3WpOU2LX/r018ntz6OxQaeW6cyUWOW9q/sZI cs333rNhycHHyk4MUtwnkxwv+9jLPeY+ZrxOiaU4I9FQi7moOBEAKsLVBZwCAAA= X-CMS-MailID: 20200128133412eucas1p2c79626824fcadc63c133548cd2e7d8cf X-Msg-Generator: CA X-RootMTR: 20200128133412eucas1p2c79626824fcadc63c133548cd2e7d8cf X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133412eucas1p2c79626824fcadc63c133548cd2e7d8cf References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Use core helper instead of open-coding it. Cc: Mikael Pettersson Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/sata_promise.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index c451d7d1c817..8729f78cef5f 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c @@ -157,7 +157,6 @@ static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class, static void pdc_error_handler(struct ata_port *ap); static void pdc_post_internal_cmd(struct ata_queued_cmd *qc); static int pdc_pata_cable_detect(struct ata_port *ap); -static int pdc_sata_cable_detect(struct ata_port *ap); static struct scsi_host_template pdc_ata_sht = { ATA_BASE_SHT(DRV_NAME), @@ -183,7 +182,7 @@ static const struct ata_port_operations pdc_common_ops = { static struct ata_port_operations pdc_sata_ops = { .inherits = &pdc_common_ops, - .cable_detect = pdc_sata_cable_detect, + .cable_detect = ata_cable_sata, .freeze = pdc_sata_freeze, .thaw = pdc_sata_thaw, .scr_read = pdc_sata_scr_read, @@ -459,11 +458,6 @@ static int pdc_pata_cable_detect(struct ata_port *ap) return ATA_CBL_PATA80; } -static int pdc_sata_cable_detect(struct ata_port *ap) -{ - return ATA_CBL_SATA; -} - static int pdc_sata_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val) { From patchwork Tue Jan 28 13:33:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230348 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=szMC7Ogm; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SLV48pVz9sSm for ; Wed, 29 Jan 2020 00:36:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726340AbgA1Nfr (ORCPT ); Tue, 28 Jan 2020 08:35:47 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52331 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726327AbgA1NeO (ORCPT ); Tue, 28 Jan 2020 08:34:14 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133413euoutp0278a81fec2ff2920713de7184775a2108~uEE_QQX802801628016euoutp02j for ; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133413euoutp0278a81fec2ff2920713de7184775a2108~uEE_QQX802801628016euoutp02j DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218453; bh=CoO3uiXQ9SOoUC43gpkI/o0SgbiP9y/CoSgqKowqa3M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=szMC7OgmtfTTzgt3op3Y0wZ8+1sAcQsJ4E2yeGIKVsekHiPkLaRlPBXEvaU8KyiEe cuVa4kr+2ux0pjg8/9K1wFuX8n7c8FC0JGTmbjk7dIDPIGK1lcrRPJarO6CXI9ebZQ aBEiN/C3l+oLQhEp62MCpmX1tKtGs/GeOKAqIrbg= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133412eucas1p1896acbca8bfb3ba2090734f7825d62ed~uEE_B4pHu0089200892eucas1p1y; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 96.DA.60698.458303E5; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133412eucas1p258499338146481964e4c26ad3f1cbf14~uEE9hqm013204732047eucas1p2f; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133412eusmtrp250c08a0fc887bbe60db7c9134559c4d9~uEE9hGtEL0330103301eusmtrp2p; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-b1-5e3038544e75 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id FF.82.08375.458303E5; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133411eusmtip20d9d3abfd59d6c33039f4b30c9b0e99e~uEE9Jc1Yr0657406574eusmtip2b; Tue, 28 Jan 2020 13:34:11 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 05/28] ata: simplify ata_scsiop_inq_89() Date: Tue, 28 Jan 2020 14:33:20 +0100 Message-Id: <20200128133343.29905-6-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7djPc7ohFgZxBhefG1isvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+P0lg/sBfP4K040LGZuYPzG3cXIySEhYCLx48Ztxi5GLg4hgRWMEuf3HGWB cL4wSvyd9ocdwvnMKLFr4VV2mJZr7TuYIRLLGSWePjvACtdybtYEFpAqNgEriYntqxhBbBEB BYme3yvZQIqYBdYwSqw63ASWEBawkNh54zRQgoODRUBV4tf+GJAwr4CtxP33L6G2yUts/faJ FaSEU8BOomevOUSJoMTJmU/AVjEDlTRvnQ12kIRAO7vExQ/3mSF6XST2nXzCBGELS7w6vgVq pozE/53zmSAa1gH92fECqns7o8Tyyf/YIKqsJe6c+wV2HLOApsT6XfogpoSAo8TR+6wQJp/E jbeCEDfwSUzaNp0ZIswr0dEmBDFDTWLDsg1sMFu7dq6EusxDYuOO26wTGBVnIflmFpJvZiGs XcDIvIpRPLW0ODc9tdg4L7Vcrzgxt7g0L10vOT93EyMwvZz+d/zrDsZ9f5IOMQpwMCrx8Doo GcQJsSaWFVfmHmKU4GBWEuHtZAIK8aYkVlalFuXHF5XmpBYfYpTmYFES5zVe9DJWSCA9sSQ1 OzW1ILUIJsvEwSnVwCi0Te5BSnCxvZG91lE2ft4YQeW13ScDZr/skzVp0W8MNJDRe1AbsfQ+ +5Pr997sSl32PYlLUPTT6vIZvxc4eqrnPJl/edVRnu2J9woqBc0aDgflfTefeuG/0Pb8UIn+ Js0ve8q3zTo0X0A989V1b4fuVdbbPtU3PjtdwjAjJ1P+w/k9dk4Cq5RYijMSDbWYi4oTAXsK 6FMrAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeLIzCtJLcpLzFFi42I5/e/4Pd0QC4M4gwXbBS1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl3F6ywf2gnn8 FScaFjM3MH7j7mLk5JAQMJG41r6DuYuRi0NIYCmjxI3W/axdjBxACRmJ4+vLIGqEJf5c62KD qPnEKDHrzllWkASbgJXExPZVjCC2iICCRM/vlWBFzAIbGCVe3fzCApIQFrCQ2HnjNBvIUBYB VYlf+2NAwrwCthL3379kh1ggL7H12yewvZwCdhI9e81BwkJAJevPPGWFKBeUODnzCdhEZqDy 5q2zmScwCsxCkpqFJLWAkWkVo0hqaXFuem6xoV5xYm5xaV66XnJ+7iZGYBRsO/Zz8w7GSxuD DzEKcDAq8fDOUDGIE2JNLCuuzD3EKMHBrCTC28kEFOJNSaysSi3Kjy8qzUktPsRoCvTCRGYp 0eR8YITmlcQbmhqaW1gamhubG5tZKInzdggcjBESSE8sSc1OTS1ILYLpY+LglGpgDDt2v6g7 SffDejFNqW9LImdorZe1PJasUveALdumfcEy96OPt+ZYZr4X5TCT5n3mYHtHRVQue27giVvv 7jFP+5ycwVZzQNBwr7eatGfJppc3o3WdlZRzXZZtCkuSmv5y7ZUVt9O4O5l4N0c65J2dkrA6 RzO4UHrryTgzp+bpOi/fPs/z8GtVYinOSDTUYi4qTgQAgKB+xpgCAAA= X-CMS-MailID: 20200128133412eucas1p258499338146481964e4c26ad3f1cbf14 X-Msg-Generator: CA X-RootMTR: 20200128133412eucas1p258499338146481964e4c26ad3f1cbf14 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133412eucas1p258499338146481964e4c26ad3f1cbf14 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Initialize rbuf[] directly instead of using ata_tf_to_fis(). This results in simpler and smaller code. It also allows separating ata_tf_to_fis() into SATA specific libata part in the future. Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 20824 105 4096 25025 61c1 drivers/ata/libata-scsi.o after: 20782 105 4096 24983 6197 drivers/ata/libata-scsi.o Signed-off-by: Bartlomiej Zolnierkiewicz Reviewed-by: Christoph Hellwig --- drivers/ata/libata-scsi.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 161e5d84bd82..cc8ba49275e7 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -2356,10 +2356,6 @@ static unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf) */ static unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf) { - struct ata_taskfile tf; - - memset(&tf, 0, sizeof(tf)); - rbuf[1] = 0x89; /* our page code */ rbuf[2] = (0x238 >> 8); /* page size fixed at 238h */ rbuf[3] = (0x238 & 0xff); @@ -2368,14 +2364,14 @@ static unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf) memcpy(&rbuf[16], "libata ", 16); memcpy(&rbuf[32], DRV_VERSION, 4); - /* we don't store the ATA device signature, so we fake it */ - - tf.command = ATA_DRDY; /* really, this is Status reg */ - tf.lbal = 0x1; - tf.nsect = 0x1; - - ata_tf_to_fis(&tf, 0, 1, &rbuf[36]); /* TODO: PMP? */ rbuf[36] = 0x34; /* force D2H Reg FIS (34h) */ + rbuf[37] = (1 << 7); /* bit 7 indicates Command FIS */ + /* TODO: PMP? */ + + /* we don't store the ATA device signature, so we fake it */ + rbuf[38] = ATA_DRDY; /* really, this is Status reg */ + rbuf[40] = 0x1; + rbuf[48] = 0x1; rbuf[56] = ATA_CMD_ID_ATA; From patchwork Tue Jan 28 13:33:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230345 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=KT0pxhiM; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SLC1J2Vz9sSN for ; Wed, 29 Jan 2020 00:35:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726633AbgA1Nfk (ORCPT ); Tue, 28 Jan 2020 08:35:40 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58897 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726360AbgA1NeP (ORCPT ); Tue, 28 Jan 2020 08:34:15 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133413euoutp01264b56a73ead9967f8acc8718b2517df~uEE_dQMGw0325703257euoutp01H for ; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133413euoutp01264b56a73ead9967f8acc8718b2517df~uEE_dQMGw0325703257euoutp01H DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218453; bh=/11LmSbFfdh3lGOnCOAUTninvk6Wt0TVSztP/3TorhE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KT0pxhiMNCHLgGsB1CL1eK0LpJF4Gn4LbD17e8c2rejGyOhE2Vw2j7zctWl/A82Ix mnfKQ0mBGCC3Pq3RHnpbS3DFzPf1Cd3ngkRepepVPgqauV6DBWLQ80inNRMgDpeY0A HN1R2XqW2HG2D/F16ITnVH32qIdmj4pbSEY96wqU= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133413eucas1p20925a186899017da2847ee4496b75234~uEE_M0CL13103131031eucas1p2j; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id CF.4A.60679.458303E5; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133412eucas1p2e5e3e29ea554bf57c1f2cc05b3d2d3a8~uEE9ybhBt3103131031eucas1p2g; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133412eusmtrp2364ffdb82b445e49ba0247723586887f~uEE9x1s9h0330003300eusmtrp2s; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-40-5e303854459c Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 60.92.08375.458303E5; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133412eusmtip2d5453687e98874aad5186544fdac3a11~uEE9dRBFR0657106571eusmtip2d; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 06/28] ata: use COMMAND_LINE_SIZE for ata_force_param_buf[] size Date: Tue, 28 Jan 2020 14:33:21 +0100 Message-Id: <20200128133343.29905-7-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7djPc7qhFgZxBhf8LFbf7Wez2DhjPavF s1t7mSyO7XjEZHF51xw2i7mt09kd2Dx2zrrL7nH5bKnHocMdjB59W1YxenzeJBfAGsVlk5Ka k1mWWqRvl8CVMeX1QuaCFbwVD6adY29g7OHuYuTkkBAwkVj44wRLFyMXh5DACkaJw3/nQjlf GCUWrPoC5XxmlNjV9JgdpmXOnK3sEInljBIXN05gg2s5M7WDDaSKTcBKYmL7KkYQW0RAQaLn 90qwImaBNYwSqw43gSWEBYIkrk1+BmazCKhKXLhxghXE5hWwlbj7fxMLxDp5ia3fPgHFOTg4 BewkevaaQ5QISpyc+QSshBmopHnrbGaI8nZ2idknyyFsF4lr244yQtjCEq+Ob4H6QEbi/875 TCD3SAisY5T42/GCGcLZziixfPI/Nogqa4k7536xgSxmFtCUWL9LHyLsKHFp/mGweyQE+CRu vBWEuIFPYtK26cwQYV6JjjYhiGo1iQ3LNrDBrO3auRLqTA+JQ1vvsExgVJyF5JtZSL6ZhbB3 ASPzKkbx1NLi3PTUYqO81HK94sTc4tK8dL3k/NxNjMD0cvrf8S87GHf9STrEKMDBqMTDO0PF IE6INbGsuDL3EKMEB7OSCG8nE1CINyWxsiq1KD++qDQntfgQozQHi5I4r/Gil7FCAumJJanZ qakFqUUwWSYOTqkGxtk8NxkNzBWDsuZfm7Vi0qpcnybTyJptl1PvdQbYMk5r9G7vlWxwl1KS CHzXcCZfWTDsmVukvMC5qUt3Vv2V//jkWVQ630Hx3uVSRw5KqsSeuKOtZ+xRYTj31dxpan+m 2EevPfzCP5b1xw3Znv1y8xrzs+Td583MPfFrf/SR6RuX6MYmTxf+qsRSnJFoqMVcVJwIACC9 tpcrAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd0QC4M4g5f7VS1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5eglzHl9ULmghW8 FQ+mnWNvYOzh7mLk5JAQMJGYM2crexcjF4eQwFJGibYZD5m7GDmAEjISx9eXQdQIS/y51sUG UfOJUWJ200ZWkASbgJXExPZVjCC2iICCRM/vlWBFzAIbGCVe3fzCApIQFgiQ+HHsIDuIzSKg KnHhxgmwZl4BW4m7/zexQGyQl9j67RMryGJOATuJnr3mIGEhoJL1Z55ClQtKnJz5BKycGai8 eets5gmMArOQpGYhSS1gZFrFKJJaWpybnltsqFecmFtcmpeul5yfu4kRGAfbjv3cvIPx0sbg Q4wCHIxKPLwzVAzihFgTy4orcw8xSnAwK4nwdjIBhXhTEiurUovy44tKc1KLDzGaAv0wkVlK NDkfGKN5JfGGpobmFpaG5sbmxmYWSuK8HQIHY4QE0hNLUrNTUwtSi2D6mDg4pRoYxYOanljp vlm285nmhER300e7WFsqrz0+PFn+TNmD5e6bnHZbrZn6R1qp+0Dd+755Z+37J/y+9H975E9R O16FWxldL9Va3kbPmc14fdrqonMNqQd0Co7x/l9/KI/dz2XSz/e+YnlKu7MKzP/Xv+uQYl3V fcq/Mf3VN19pv9cdoit+Xw1+IsAjpsRSnJFoqMVcVJwIAIu27pWZAgAA X-CMS-MailID: 20200128133412eucas1p2e5e3e29ea554bf57c1f2cc05b3d2d3a8 X-Msg-Generator: CA X-RootMTR: 20200128133412eucas1p2e5e3e29ea554bf57c1f2cc05b3d2d3a8 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133412eucas1p2e5e3e29ea554bf57c1f2cc05b3d2d3a8 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Use COMMAND_LINE_SIZE instead PAGE_SIZE for ata_force_param_buf[] size as libata parameters buffer doesn't need to be bigger than the command line buffer. For many architectures this results in decreased libata-core.o size (COMMAND_LINE_SIZE varies from 256 to 4096 while the minimum PAGE_SIZE is 4096). Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 41064 4413 40 45517 b1cd drivers/ata/libata-core.o after: 41064 573 40 41677 a2cd drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz Reviewed-by: Christoph Hellwig --- drivers/ata/libata-core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index fa36e3248039..9b824788d04f 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -52,6 +52,7 @@ #include #include #include +#include #define CREATE_TRACE_POINTS #include @@ -106,7 +107,7 @@ struct ata_force_ent { static struct ata_force_ent *ata_force_tbl; static int ata_force_tbl_size; -static char ata_force_param_buf[PAGE_SIZE] __initdata; +static char ata_force_param_buf[COMMAND_LINE_SIZE] __initdata; /* param_buf is thrown away after initialization, disallow read */ module_param_string(force, ata_force_param_buf, sizeof(ata_force_param_buf), 0); MODULE_PARM_DESC(force, "Force ATA configurations including cable type, link speed and transfer mode (see Documentation/admin-guide/kernel-parameters.rst for details)"); From patchwork Tue Jan 28 13:33:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230344 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=C8KFg6ms; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SL531zWz9sSb for ; Wed, 29 Jan 2020 00:35:41 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726906AbgA1Nfk (ORCPT ); Tue, 28 Jan 2020 08:35:40 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58904 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726389AbgA1NeP (ORCPT ); Tue, 28 Jan 2020 08:34:15 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133413euoutp01452fe035593bc271b895cfa66a7848e6~uEE_zVZXo0195601956euoutp01D for ; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133413euoutp01452fe035593bc271b895cfa66a7848e6~uEE_zVZXo0195601956euoutp01D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218453; bh=WgiqNiMKzYYraoDM/81Lk3NsaiaSgCDlNANUSgsx2Cs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C8KFg6msx7pX5QwA87s4l8ZUrRyWfjIt1q2IN8MO1By7lkSsGwXjyo1Kwx0FIngA+ 2ksNnsnMv6S+3lg3Tkh+QfOYmGWPmSzSVxJde/aLQii4fApZsMi/R5xbsf5EM5dDAn Nl4ZmYp6gccwzwP3FuvNrm6X3PnSobIxx1JVCjg8= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133413eucas1p1ee52dd69b2a3296cfc1224f4cfb93a5f~uEE_T0Cj_0713407134eucas1p1o; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 27.DA.60698.558303E5; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133412eucas1p1b1b4f025e4c0e6ae6e7a95e9832880dd~uEE_Fd0MN0680006800eucas1p1o; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133412eusmtrp2af521830eee15acd42e790211573297c~uEE_E6ZZl0330103301eusmtrp2r; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-b3-5e303855c394 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id D0.92.08375.458303E5; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133412eusmtip2e44d1d71d5683aea480ef39bd56ffeca~uEE9w7Kmr0685506855eusmtip2U; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 07/28] ata: optimize struct ata_force_param size Date: Tue, 28 Jan 2020 14:33:22 +0100 Message-Id: <20200128133343.29905-8-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djP87qhFgZxBn+aeSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBrFZZOS mpNZllqkb5fAlbH76Ff2guM8Fbvu/GJrYPzI2cXIySEhYCKxseklSxcjF4eQwApGiUnfZjFB OF8YJTacW8YI4XxmlFj+eDYbTEv73S9QLcsZJc7fvMAM17Llyhx2kCo2ASuJie2rGEFsEQEF iZ7fK9lAipgF1jBKrDrcBJYQFnCQ+Da1gxnEZhFQlWhbexJsBa+ArUTzu/8sEOvkJbZ++8Ta xcjBwSlgJ9Gz1xyiRFDi5MwnYCXMQCXNW2eDHSEh0M0ucerERXaQegkBF4nmNfoQY4QlXh3f wg5hy0j83zmfCaJ+HaPE344XUM3bgf6c/A/qT2uJO+d+sYEMYhbQlFi/C2qQo8T8v2dYIObz Sdx4KwhxA5/EpG3TmSHCvBIdbUIQ1WoSG5ZtYINZ27VzJTOE7SGxecMU1gmMirOQfDMLyTez EPYuYGRexSieWlqcm55abJyXWq5XnJhbXJqXrpecn7uJEZhgTv87/nUH474/SYcYBTgYlXh4 HZQM4oRYE8uKK3MPMUpwMCuJ8HYyAYV4UxIrq1KL8uOLSnNSiw8xSnOwKInzGi96GSskkJ5Y kpqdmlqQWgSTZeLglGpg5NCwmMVUIN93ZPfEMyvjWKaXfjM6Oekat0FQzfXuNslXeWaKx6YV ciQanHgQ59tjZrXA7uGtTTcenxR/Zq290aHBuK97h/vil//rn7PmPbddVPvPquPnh9ULDIR+ fXJy7N92a+Yz8X81VrMW3e+bksnx8d2fDUE3j4jOmSHWUyreGKXZcYTHSomlOCPRUIu5qDgR AHO+rcosAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd0QC4M4g8OPLC1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl7H76Ff2guM8 Fbvu/GJrYPzI2cXIySEhYCLRfvcLSxcjF4eQwFJGidenP7F3MXIAJWQkjq8vg6gRlvhzrYsN ouYTo0TH4zmsIAk2ASuJie2rGEFsEQEFiZ7fK8GKmAU2MEq8ugkylZNDWMBB4tvUDmYQm0VA VaJt7Uk2EJtXwFai+d1/FogN8hJbv31iBVnMKWAn0bPXHCQsBFSy/sxTVohyQYmTM5+AlTMD lTdvnc08gVFgFpLULCSpBYxMqxhFUkuLc9Nziw31ihNzi0vz0vWS83M3MQLjYNuxn5t3MF7a GHyIUYCDUYmHd4aKQZwQa2JZcWXuIUYJDmYlEd5OJqAQb0piZVVqUX58UWlOavEhRlOgHyYy S4km5wNjNK8k3tDU0NzC0tDc2NzYzEJJnLdD4GCMkEB6YklqdmpqQWoRTB8TB6dUA2Nvxp8d LqJ713Zy3ihL2938dVKN5tlLQativ4Tfbdzw8mjrpBPzNAWbZojGJ7Qafje4uLV1S3BxQE1S 8VP5up8H/lW/Wco2WWcmz8fyJwoXPVRVHh7bVy+gMiWv/7HgKqF3h3s6s/2ZXOsLE5qF5147 rXPwxQtHBwZ1ppslT243ex80CD6+eYoSS3FGoqEWc1FxIgBb0bthmQIAAA== X-CMS-MailID: 20200128133412eucas1p1b1b4f025e4c0e6ae6e7a95e9832880dd X-Msg-Generator: CA X-RootMTR: 20200128133412eucas1p1b1b4f025e4c0e6ae6e7a95e9832880dd X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133412eucas1p1b1b4f025e4c0e6ae6e7a95e9832880dd References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Optimize struct ata_force_param size by: - using u8 for cbl and spd_limit fields - using u16 for lflags field Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 41064 573 40 41677 a2cd drivers/ata/libata-core.o after: 40654 573 40 41267 a133 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz Reviewed-by: Christoph Hellwig --- drivers/ata/libata-core.c | 6 +++--- include/linux/libata.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 9b824788d04f..47703c8ba0e6 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -90,12 +90,12 @@ atomic_t ata_print_id = ATOMIC_INIT(0); struct ata_force_param { const char *name; - unsigned int cbl; - int spd_limit; + u8 cbl; + u8 spd_limit; unsigned long xfer_mask; unsigned int horkage_on; unsigned int horkage_off; - unsigned int lflags; + u16 lflags; }; struct ata_force_ent { diff --git a/include/linux/libata.h b/include/linux/libata.h index 2a9d50b0e219..dc162cca63a4 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -176,6 +176,7 @@ enum { ATA_DEV_NONE = 11, /* no device */ /* struct ata_link flags */ + /* NOTE: struct ata_force_param currently stores lflags in u16 */ ATA_LFLAG_NO_HRST = (1 << 1), /* avoid hardreset */ ATA_LFLAG_NO_SRST = (1 << 2), /* avoid softreset */ ATA_LFLAG_ASSUME_ATA = (1 << 3), /* assume ATA class */ From patchwork Tue Jan 28 13:33:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230346 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=X69Y/Lp0; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SLC5sdhz9sSX for ; Wed, 29 Jan 2020 00:35:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726618AbgA1Nfj (ORCPT ); Tue, 28 Jan 2020 08:35:39 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52350 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726438AbgA1NeP (ORCPT ); Tue, 28 Jan 2020 08:34:15 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133414euoutp0254383c78bd6e152ee54538a21a3e827e~uEE-UWQn02801628016euoutp02k for ; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133414euoutp0254383c78bd6e152ee54538a21a3e827e~uEE-UWQn02801628016euoutp02k DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218454; bh=DlGB2I0x8F3/bY9YdVcWyobgKzYHxlODIAoi6Gsf6vo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X69Y/Lp0yFs7E9h6HmRhhW8w5g6GIWleJx8j2YQlt3O0GxhT/tuJ9GpNuQEdJPJ8X 8BI00zGiw4tGtbCRFBMB8q68RexgpDMbwuBL0u46ZaSJG+/z/XT/NQUBt7f2wwnxOb kmZPpodt/7q5oBNRo5SNl/+8NvNeyG8ggcATKwDM= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133413eucas1p1d269d47bd7fef4b023d6408d62e8b33d~uEE_7_FZD1586715867eucas1p1E; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 0D.CA.61286.558303E5; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133413eucas1p195d291f69413cbb3bb86da9571942259~uEE_cXJvh1369913699eucas1p1P; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133413eusmtrp2d17653f8c0d35a9b0d11b26295ccc9c3~uEE_bsiy60330003300eusmtrp2u; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-7a-5e3038559289 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 6F.72.07950.558303E5; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133412eusmtip28cdcd4800c29541ab4959b163ed0d836~uEE_EuNZ00657106571eusmtip2e; Tue, 28 Jan 2020 13:34:12 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 08/28] ata: move EXPORT_SYMBOL_GPL()s close to exported code Date: Tue, 28 Jan 2020 14:33:23 +0100 Message-Id: <20200128133343.29905-9-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djP87qhFgZxBus+GFisvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+Np7x2mgt9vGCtu//3C3MC4+xhjFyMnh4SAicTOMz2sXYxcHEICKxgl2hf8 ZAVJCAl8YZTonF0GkfjMKPFy3wymLkYOsI7eV/UQ8eWMEku3XWaGcIAaNv7pZwHpZhOwkpjY vgpshYiAgkTP75VsIEXMAmsYJVYdbmIEmSQs4CNxf0UqSA2LgKrEvqttYL28ArYSe/e9hTpP XmLrt0+sIOWcAnYSPXvNIUoEJU7OfAJWzgxU0rx1NtgNEgLd7BKru7+xQvS6SHzef4sFwhaW eHV8CzuELSPxf+d8JoiGdYwSfzteQHVvZ5RYPvkfG0SVtcSdc7/YQDYzC2hKrN+lDxF2lFi7 /xQzJCT4JG68FYQ4gk9i0rbpUGFeiY42IYhqNYkNyzawwazt2rmSGcL2kLh0+RvbBEbFWUje mYXknVkIexcwMq9iFE8tLc5NTy02zEst1ytOzC0uzUvXS87P3cQITDCn/x3/tIPx66WkQ4wC HIxKPLwzVAzihFgTy4orcw8xSnAwK4nwdjIBhXhTEiurUovy44tKc1KLDzFKc7AoifMaL3oZ KySQnliSmp2aWpBaBJNl4uCUamB0imqXOPv1v/KnMBaOm9suXXj/n3OT97+Isw8uvWTr/HTg eX6ol9S6aSyCh34yVnfJl4aVzipP7nq4MyJEy26ePpMad7r69+amx6l8qz+qersEK1a+P1/E ncbx4H4SU7qJ5NG/kZvLF36RuH8t+INMvX2r9Xbhj8bBe36ud5lh4Lf5gHfM/vdKLMUZiYZa zEXFiQBZXZZHLAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd1QC4M4gwe/hS1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl/G09w5Twe83 jBW3/35hbmDcfYyxi5GDQ0LARKL3VX0XIxeHkMBSRok1XcdYIOIyEsfXl3UxcgKZwhJ/rnWx QdR8YpT4su8zE0iCTcBKYmL7KkYQW0RAQaLn90qwImaBDYwSr25+ARskLOAjcX9FKkgNi4Cq xL6rbSwgNq+ArcTefW8ZIRbIS2z99okVpJxTwE6iZ685SFgIqGT9maesEOWCEidnPgFrZQYq b946m3kCo8AsJKlZSFILGJlWMYqklhbnpucWG+kVJ+YWl+al6yXn525iBMbBtmM/t+xg7HoX fIhRgINRiYfXQckgTog1say4MvcQowQHs5IIbycTUIg3JbGyKrUoP76oNCe1+BCjKdAPE5ml RJPzgTGaVxJvaGpobmFpaG5sbmxmoSTO2yFwMEZIID2xJDU7NbUgtQimj4mDU6qBUXtt0GzL NucJjgXPwszfOzybFWF5+N6eiwUPGGfd5Vpz9plI4IZvxRcMjh+eXcB8NmfNs4ZFK/49zpmQ IbXr3Ox47YSvIkcz2d5Zx588fTu9ZsKtD5MdJ3x/cSyw9/eGRQ2qBZptbucXWb+fVlvKV5/t eioq4xP7lebPCREW7wtyNNirum3fayqxFGckGmoxFxUnAgAWv3v5mQIAAA== X-CMS-MailID: 20200128133413eucas1p195d291f69413cbb3bb86da9571942259 X-Msg-Generator: CA X-RootMTR: 20200128133413eucas1p195d291f69413cbb3bb86da9571942259 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133413eucas1p195d291f69413cbb3bb86da9571942259 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Move EXPORT_SYMBOL_GPL()s close to exported code like it is done in other kernel subsystems. As a nice side effect this results in the removal of few ifdefs. Signed-off-by: Bartlomiej Zolnierkiewicz Reviewed-by: Christoph Hellwig --- drivers/ata/libata-core.c | 206 +++++++++++++++----------------------- drivers/ata/libata-eh.c | 20 +++- drivers/ata/libata-scsi.c | 8 ++ 3 files changed, 108 insertions(+), 126 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 47703c8ba0e6..ad724602c47c 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -18,6 +18,11 @@ * http://www.compactflash.org (CF) * http://www.qic.org (QIC157 - Tape and DSC) * http://www.ce-ata.org (CE-ATA: not supported) + * + * libata is essentially a library of internal helper functions for + * low-level ATA host controller drivers. As such, the API/ABI is + * likely to change as new drivers are added and updated. + * Do not depend on ABI/API stability. */ #include @@ -62,8 +67,11 @@ /* debounce timing parameters in msecs { interval, duration, timeout } */ const unsigned long sata_deb_timing_normal[] = { 5, 100, 2000 }; +EXPORT_SYMBOL_GPL(sata_deb_timing_normal); const unsigned long sata_deb_timing_hotplug[] = { 25, 500, 2000 }; +EXPORT_SYMBOL_GPL(sata_deb_timing_hotplug); const unsigned long sata_deb_timing_long[] = { 100, 2000, 5000 }; +EXPORT_SYMBOL_GPL(sata_deb_timing_long); const struct ata_port_operations ata_base_port_ops = { .prereset = ata_std_prereset, @@ -72,6 +80,7 @@ const struct ata_port_operations ata_base_port_ops = { .sched_eh = ata_std_sched_eh, .end_eh = ata_std_end_eh, }; +EXPORT_SYMBOL_GPL(ata_base_port_ops); const struct ata_port_operations sata_port_ops = { .inherits = &ata_base_port_ops, @@ -79,6 +88,7 @@ const struct ata_port_operations sata_port_ops = { .qc_defer = ata_std_qc_defer, .hardreset = sata_std_hardreset, }; +EXPORT_SYMBOL_GPL(sata_port_ops); static unsigned int ata_dev_init_params(struct ata_device *dev, u16 heads, u16 sectors); @@ -221,6 +231,7 @@ struct ata_link *ata_link_next(struct ata_link *link, struct ata_port *ap, return NULL; } +EXPORT_SYMBOL_GPL(ata_link_next); /** * ata_dev_next - device iteration helper @@ -274,6 +285,7 @@ struct ata_device *ata_dev_next(struct ata_device *dev, struct ata_link *link, goto next; return dev; } +EXPORT_SYMBOL_GPL(ata_dev_next); /** * ata_dev_phys_link - find physical link for a device @@ -518,6 +530,7 @@ int atapi_cmd_type(u8 opcode) return ATAPI_MISC; } } +EXPORT_SYMBOL_GPL(atapi_cmd_type); /** * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure @@ -562,6 +575,7 @@ void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis) fis[18] = (tf->auxiliary >> 16) & 0xff; fis[19] = (tf->auxiliary >> 24) & 0xff; } +EXPORT_SYMBOL_GPL(ata_tf_to_fis); /** * ata_tf_from_fis - Convert SATA FIS to ATA taskfile @@ -591,6 +605,7 @@ void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf) tf->nsect = fis[12]; tf->hob_nsect = fis[13]; } +EXPORT_SYMBOL_GPL(ata_tf_from_fis); static const u8 ata_rw_cmds[] = { /* pio multi */ @@ -865,6 +880,7 @@ unsigned long ata_pack_xfermask(unsigned long pio_mask, ((mwdma_mask << ATA_SHIFT_MWDMA) & ATA_MASK_MWDMA) | ((udma_mask << ATA_SHIFT_UDMA) & ATA_MASK_UDMA); } +EXPORT_SYMBOL_GPL(ata_pack_xfermask); /** * ata_unpack_xfermask - Unpack xfer_mask into pio, mwdma and udma masks @@ -886,6 +902,7 @@ void ata_unpack_xfermask(unsigned long xfer_mask, unsigned long *pio_mask, if (udma_mask) *udma_mask = (xfer_mask & ATA_MASK_UDMA) >> ATA_SHIFT_UDMA; } +EXPORT_SYMBOL_GPL(ata_unpack_xfermask); static const struct ata_xfer_ent { int shift, bits; @@ -920,6 +937,7 @@ u8 ata_xfer_mask2mode(unsigned long xfer_mask) return ent->base + highbit - ent->shift; return 0xff; } +EXPORT_SYMBOL_GPL(ata_xfer_mask2mode); /** * ata_xfer_mode2mask - Find matching xfer_mask for XFER_* @@ -943,6 +961,7 @@ unsigned long ata_xfer_mode2mask(u8 xfer_mode) & ~((1 << ent->shift) - 1); return 0; } +EXPORT_SYMBOL_GPL(ata_xfer_mode2mask); /** * ata_xfer_mode2shift - Find matching xfer_shift for XFER_* @@ -965,6 +984,7 @@ int ata_xfer_mode2shift(unsigned long xfer_mode) return ent->shift; return -1; } +EXPORT_SYMBOL_GPL(ata_xfer_mode2shift); /** * ata_mode_string - convert xfer_mask to string @@ -1011,6 +1031,7 @@ const char *ata_mode_string(unsigned long xfer_mask) return xfer_mode_str[highbit]; return ""; } +EXPORT_SYMBOL_GPL(ata_mode_string); const char *sata_spd_string(unsigned int spd) { @@ -1091,6 +1112,7 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf) DPRINTK("unknown device\n"); return ATA_DEV_UNKNOWN; } +EXPORT_SYMBOL_GPL(ata_dev_classify); /** * ata_id_string - Convert IDENTIFY DEVICE page into string @@ -1127,6 +1149,7 @@ void ata_id_string(const u16 *id, unsigned char *s, len -= 2; } } +EXPORT_SYMBOL_GPL(ata_id_string); /** * ata_id_c_string - Convert IDENTIFY DEVICE page into C string @@ -1154,6 +1177,7 @@ void ata_id_c_string(const u16 *id, unsigned char *s, p--; *p = '\0'; } +EXPORT_SYMBOL_GPL(ata_id_c_string); static u64 ata_id_n_sectors(const u16 *id) { @@ -1511,6 +1535,7 @@ unsigned long ata_id_xfermask(const u16 *id) return ata_pack_xfermask(pio_mask, mwdma_mask, udma_mask); } +EXPORT_SYMBOL_GPL(ata_id_xfermask); static void ata_qc_complete_internal(struct ata_queued_cmd *qc) { @@ -1768,6 +1793,7 @@ unsigned int ata_pio_need_iordy(const struct ata_device *adev) return 1; return 0; } +EXPORT_SYMBOL_GPL(ata_pio_need_iordy); /** * ata_pio_mask_no_iordy - Return the non IORDY mask @@ -1808,6 +1834,7 @@ unsigned int ata_do_dev_read_id(struct ata_device *dev, return ata_exec_internal(dev, tf, NULL, DMA_FROM_DEVICE, id, sizeof(id[0]) * ATA_ID_WORDS, 0); } +EXPORT_SYMBOL_GPL(ata_do_dev_read_id); /** * ata_dev_read_id - Read ID data from the specified device @@ -2780,6 +2807,7 @@ int ata_cable_40wire(struct ata_port *ap) { return ATA_CBL_PATA40; } +EXPORT_SYMBOL_GPL(ata_cable_40wire); /** * ata_cable_80wire - return 80 wire cable type @@ -2793,6 +2821,7 @@ int ata_cable_80wire(struct ata_port *ap) { return ATA_CBL_PATA80; } +EXPORT_SYMBOL_GPL(ata_cable_80wire); /** * ata_cable_unknown - return unknown PATA cable. @@ -2805,6 +2834,7 @@ int ata_cable_unknown(struct ata_port *ap) { return ATA_CBL_PATA_UNK; } +EXPORT_SYMBOL_GPL(ata_cable_unknown); /** * ata_cable_ignore - return ignored PATA cable. @@ -2817,6 +2847,7 @@ int ata_cable_ignore(struct ata_port *ap) { return ATA_CBL_PATA_IGN; } +EXPORT_SYMBOL_GPL(ata_cable_ignore); /** * ata_cable_sata - return SATA cable type @@ -2829,6 +2860,7 @@ int ata_cable_sata(struct ata_port *ap) { return ATA_CBL_SATA; } +EXPORT_SYMBOL_GPL(ata_cable_sata); /** * ata_bus_probe - Reset and probe ATA bus @@ -3011,6 +3043,7 @@ struct ata_device *ata_dev_pair(struct ata_device *adev) return NULL; return pair; } +EXPORT_SYMBOL_GPL(ata_dev_pair); /** * sata_down_spd_limit - adjust SATA spd limit downward @@ -3171,6 +3204,7 @@ int sata_set_spd(struct ata_link *link) return 1; } +EXPORT_SYMBOL_GPL(sata_set_spd); /* * This mode timing computation functionality is ported over from @@ -3245,6 +3279,7 @@ void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b, if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle); if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma); } +EXPORT_SYMBOL_GPL(ata_timing_merge); const struct ata_timing *ata_timing_find_mode(u8 xfer_mode) { @@ -3261,6 +3296,7 @@ const struct ata_timing *ata_timing_find_mode(u8 xfer_mode) return NULL; } +EXPORT_SYMBOL_GPL(ata_timing_find_mode); int ata_timing_compute(struct ata_device *adev, unsigned short speed, struct ata_timing *t, int T, int UT) @@ -3337,6 +3373,7 @@ int ata_timing_compute(struct ata_device *adev, unsigned short speed, return 0; } +EXPORT_SYMBOL_GPL(ata_timing_compute); /** * ata_timing_cycle2mode - find xfer mode for the specified cycle duration @@ -3388,6 +3425,7 @@ u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle) return last_mode; } +EXPORT_SYMBOL_GPL(ata_timing_cycle2mode); /** * ata_down_xfermask_limit - adjust dev xfer masks downward @@ -3659,6 +3697,7 @@ int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev) *r_failed_dev = dev; return rc; } +EXPORT_SYMBOL_GPL(ata_do_set_mode); /** * ata_wait_ready - wait for link to become ready @@ -3768,6 +3807,7 @@ int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, return ata_wait_ready(link, deadline, check_ready); } +EXPORT_SYMBOL_GPL(ata_wait_after_reset); /** * sata_link_debounce - debounce SATA phy status @@ -3838,6 +3878,7 @@ int sata_link_debounce(struct ata_link *link, const unsigned long *params, return -EPIPE; } } +EXPORT_SYMBOL_GPL(sata_link_debounce); /** * sata_link_resume - resume SATA link @@ -3904,6 +3945,7 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params, return rc != -EINVAL ? rc : 0; } +EXPORT_SYMBOL_GPL(sata_link_resume); /** * sata_link_scr_lpm - manipulate SControl IPM and SPM fields @@ -3978,6 +4020,7 @@ int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, ehc->i.serror &= ~SERR_PHYRDY_CHG; return sata_scr_write(link, SCR_ERROR, SERR_PHYRDY_CHG); } +EXPORT_SYMBOL_GPL(sata_link_scr_lpm); /** * ata_std_prereset - prepare for reset @@ -4023,6 +4066,7 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline) return 0; } +EXPORT_SYMBOL_GPL(ata_std_prereset); /** * sata_link_hardreset - reset link via SATA phy reset @@ -4135,6 +4179,7 @@ int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, DPRINTK("EXIT, rc=%d\n", rc); return rc; } +EXPORT_SYMBOL_GPL(sata_link_hardreset); /** * sata_std_hardreset - COMRESET w/o waiting or classification @@ -4161,6 +4206,7 @@ int sata_std_hardreset(struct ata_link *link, unsigned int *class, rc = sata_link_hardreset(link, timing, deadline, &online, NULL); return online ? -EAGAIN : rc; } +EXPORT_SYMBOL_GPL(sata_std_hardreset); /** * ata_std_postreset - standard postreset callback @@ -4189,6 +4235,7 @@ void ata_std_postreset(struct ata_link *link, unsigned int *classes) DPRINTK("EXIT\n"); } +EXPORT_SYMBOL_GPL(ata_std_postreset); /** * ata_dev_same_device - Determine whether new ID matches configured device @@ -4976,11 +5023,13 @@ int ata_std_qc_defer(struct ata_queued_cmd *qc) return ATA_DEFER_LINK; } +EXPORT_SYMBOL_GPL(ata_std_qc_defer); enum ata_completion_errors ata_noop_qc_prep(struct ata_queued_cmd *qc) { return AC_ERR_OK; } +EXPORT_SYMBOL_GPL(ata_noop_qc_prep); /** * ata_sg_init - Associate command with scatter-gather table. @@ -5002,6 +5051,7 @@ void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, qc->n_elem = n_elem; qc->cursg = qc->sg; } +EXPORT_SYMBOL_GPL(ata_sg_init); #ifdef CONFIG_HAS_DMA @@ -5324,6 +5374,7 @@ void ata_qc_complete(struct ata_queued_cmd *qc) __ata_qc_complete(qc); } } +EXPORT_SYMBOL_GPL(ata_qc_complete); /** * ata_qc_get_active - get bitmask of active qcs @@ -5406,6 +5457,7 @@ int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active) return nr_done; } +EXPORT_SYMBOL_GPL(ata_qc_complete_multiple); /** * ata_qc_issue - issue taskfile to device @@ -5500,6 +5552,7 @@ int sata_scr_valid(struct ata_link *link) return (ap->flags & ATA_FLAG_SATA) && ap->ops->scr_read; } +EXPORT_SYMBOL_GPL(sata_scr_valid); /** * sata_scr_read - read SCR register of the specified port @@ -5527,6 +5580,7 @@ int sata_scr_read(struct ata_link *link, int reg, u32 *val) return sata_pmp_scr_read(link, reg, val); } +EXPORT_SYMBOL_GPL(sata_scr_read); /** * sata_scr_write - write SCR register of the specified port @@ -5554,6 +5608,7 @@ int sata_scr_write(struct ata_link *link, int reg, u32 val) return sata_pmp_scr_write(link, reg, val); } +EXPORT_SYMBOL_GPL(sata_scr_write); /** * sata_scr_write_flush - write SCR register of the specified port and flush @@ -5586,6 +5641,7 @@ int sata_scr_write_flush(struct ata_link *link, int reg, u32 val) return sata_pmp_scr_write(link, reg, val); } +EXPORT_SYMBOL_GPL(sata_scr_write_flush); /** * ata_phys_link_online - test whether the given link is online @@ -5660,6 +5716,7 @@ bool ata_link_online(struct ata_link *link) return ata_phys_link_online(link) || (slave && ata_phys_link_online(slave)); } +EXPORT_SYMBOL_GPL(ata_link_online); /** * ata_link_offline - test whether the given link is offline @@ -5686,6 +5743,7 @@ bool ata_link_offline(struct ata_link *link) return ata_phys_link_offline(link) && (!slave || ata_phys_link_offline(slave)); } +EXPORT_SYMBOL_GPL(ata_link_offline); #ifdef CONFIG_PM static void ata_port_request_pm(struct ata_port *ap, pm_message_t mesg, @@ -5872,6 +5930,7 @@ int ata_host_suspend(struct ata_host *host, pm_message_t mesg) host->dev->power.power_state = mesg; return 0; } +EXPORT_SYMBOL_GPL(ata_host_suspend); /** * ata_host_resume - resume host @@ -5883,6 +5942,7 @@ void ata_host_resume(struct ata_host *host) { host->dev->power.power_state = PMSG_ON; } +EXPORT_SYMBOL_GPL(ata_host_resume); #endif const struct device_type ata_port_type = { @@ -6097,11 +6157,13 @@ void ata_host_get(struct ata_host *host) { kref_get(&host->kref); } +EXPORT_SYMBOL_GPL(ata_host_get); void ata_host_put(struct ata_host *host) { kref_put(&host->kref, ata_host_release); } +EXPORT_SYMBOL_GPL(ata_host_put); /** * ata_host_alloc - allocate and init basic ATA host resources @@ -6175,6 +6237,7 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports) kfree(host); return NULL; } +EXPORT_SYMBOL_GPL(ata_host_alloc); /** * ata_host_alloc_pinfo - alloc host and init with port_info array @@ -6223,6 +6286,7 @@ struct ata_host *ata_host_alloc_pinfo(struct device *dev, return host; } +EXPORT_SYMBOL_GPL(ata_host_alloc_pinfo); /** * ata_slave_link_init - initialize slave link @@ -6285,6 +6349,7 @@ int ata_slave_link_init(struct ata_port *ap) ap->slave_link = link; return 0; } +EXPORT_SYMBOL_GPL(ata_slave_link_init); static void ata_host_stop(struct device *gendev, void *res) { @@ -6433,6 +6498,7 @@ int ata_host_start(struct ata_host *host) devres_free(start_dr); return rc; } +EXPORT_SYMBOL_GPL(ata_host_start); /** * ata_sas_host_init - Initialize a host struct for sas (ipr, libsas) @@ -6451,6 +6517,7 @@ void ata_host_init(struct ata_host *host, struct device *dev, host->ops = ops; kref_init(&host->kref); } +EXPORT_SYMBOL_GPL(ata_host_init); void __ata_port_probe(struct ata_port *ap) { @@ -6606,6 +6673,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) return rc; } +EXPORT_SYMBOL_GPL(ata_host_register); /** * ata_host_activate - start host, request IRQ and register it @@ -6668,6 +6736,7 @@ int ata_host_activate(struct ata_host *host, int irq, return rc; } +EXPORT_SYMBOL_GPL(ata_host_activate); /** * ata_port_detach - Detach ATA port in preparation of device removal @@ -6743,6 +6812,7 @@ void ata_host_detach(struct ata_host *host) /* the host is dead now, dissociate ACPI */ ata_acpi_dissociate(host); } +EXPORT_SYMBOL_GPL(ata_host_detach); #ifdef CONFIG_PCI @@ -6763,6 +6833,7 @@ void ata_pci_remove_one(struct pci_dev *pdev) ata_host_detach(host); } +EXPORT_SYMBOL_GPL(ata_pci_remove_one); /* move to PCI subsystem */ int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits) @@ -6797,6 +6868,7 @@ int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits) return (tmp == bits->val) ? 1 : 0; } +EXPORT_SYMBOL_GPL(pci_test_config_bits); #ifdef CONFIG_PM void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg) @@ -6807,6 +6879,7 @@ void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg) if (mesg.event & PM_EVENT_SLEEP) pci_set_power_state(pdev, PCI_D3hot); } +EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend); int ata_pci_device_do_resume(struct pci_dev *pdev) { @@ -6825,6 +6898,7 @@ int ata_pci_device_do_resume(struct pci_dev *pdev) pci_set_master(pdev); return 0; } +EXPORT_SYMBOL_GPL(ata_pci_device_do_resume); int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) { @@ -6839,6 +6913,7 @@ int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) return 0; } +EXPORT_SYMBOL_GPL(ata_pci_device_suspend); int ata_pci_device_resume(struct pci_dev *pdev) { @@ -6850,8 +6925,8 @@ int ata_pci_device_resume(struct pci_dev *pdev) ata_host_resume(host); return rc; } +EXPORT_SYMBOL_GPL(ata_pci_device_resume); #endif /* CONFIG_PM */ - #endif /* CONFIG_PCI */ /** @@ -6873,6 +6948,7 @@ int ata_platform_remove_one(struct platform_device *pdev) return 0; } +EXPORT_SYMBOL_GPL(ata_platform_remove_one); static int __init ata_parse_force_one(char **cur, struct ata_force_ent *force_ent, @@ -7097,6 +7173,7 @@ int ata_ratelimit(void) { return __ratelimit(&ratelimit); } +EXPORT_SYMBOL_GPL(ata_ratelimit); /** * ata_msleep - ATA EH owner aware msleep @@ -7129,6 +7206,7 @@ void ata_msleep(struct ata_port *ap, unsigned int msecs) if (owns_eh) ata_eh_acquire(ap); } +EXPORT_SYMBOL_GPL(ata_msleep); /** * ata_wait_register - wait until register value changes @@ -7175,6 +7253,7 @@ u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val, return tmp; } +EXPORT_SYMBOL_GPL(ata_wait_register); /** * sata_lpm_ignore_phy_events - test if PHY event should be ignored @@ -7228,10 +7307,12 @@ struct ata_port_operations ata_dummy_port_ops = { .sched_eh = ata_std_sched_eh, .end_eh = ata_std_end_eh, }; +EXPORT_SYMBOL_GPL(ata_dummy_port_ops); const struct ata_port_info ata_dummy_port_info = { .port_ops = &ata_dummy_port_ops, }; +EXPORT_SYMBOL_GPL(ata_dummy_port_info); /* * Utility print functions @@ -7299,126 +7380,3 @@ void ata_print_version(const struct device *dev, const char *version) dev_printk(KERN_DEBUG, dev, "version %s\n", version); } EXPORT_SYMBOL(ata_print_version); - -/* - * libata is essentially a library of internal helper functions for - * low-level ATA host controller drivers. As such, the API/ABI is - * likely to change as new drivers are added and updated. - * Do not depend on ABI/API stability. - */ -EXPORT_SYMBOL_GPL(sata_deb_timing_normal); -EXPORT_SYMBOL_GPL(sata_deb_timing_hotplug); -EXPORT_SYMBOL_GPL(sata_deb_timing_long); -EXPORT_SYMBOL_GPL(ata_base_port_ops); -EXPORT_SYMBOL_GPL(sata_port_ops); -EXPORT_SYMBOL_GPL(ata_dummy_port_ops); -EXPORT_SYMBOL_GPL(ata_dummy_port_info); -EXPORT_SYMBOL_GPL(ata_link_next); -EXPORT_SYMBOL_GPL(ata_dev_next); -EXPORT_SYMBOL_GPL(ata_std_bios_param); -EXPORT_SYMBOL_GPL(ata_scsi_unlock_native_capacity); -EXPORT_SYMBOL_GPL(ata_host_init); -EXPORT_SYMBOL_GPL(ata_host_alloc); -EXPORT_SYMBOL_GPL(ata_host_alloc_pinfo); -EXPORT_SYMBOL_GPL(ata_slave_link_init); -EXPORT_SYMBOL_GPL(ata_host_start); -EXPORT_SYMBOL_GPL(ata_host_register); -EXPORT_SYMBOL_GPL(ata_host_activate); -EXPORT_SYMBOL_GPL(ata_host_detach); -EXPORT_SYMBOL_GPL(ata_sg_init); -EXPORT_SYMBOL_GPL(ata_qc_complete); -EXPORT_SYMBOL_GPL(ata_qc_complete_multiple); -EXPORT_SYMBOL_GPL(atapi_cmd_type); -EXPORT_SYMBOL_GPL(ata_tf_to_fis); -EXPORT_SYMBOL_GPL(ata_tf_from_fis); -EXPORT_SYMBOL_GPL(ata_pack_xfermask); -EXPORT_SYMBOL_GPL(ata_unpack_xfermask); -EXPORT_SYMBOL_GPL(ata_xfer_mask2mode); -EXPORT_SYMBOL_GPL(ata_xfer_mode2mask); -EXPORT_SYMBOL_GPL(ata_xfer_mode2shift); -EXPORT_SYMBOL_GPL(ata_mode_string); -EXPORT_SYMBOL_GPL(ata_id_xfermask); -EXPORT_SYMBOL_GPL(ata_do_set_mode); -EXPORT_SYMBOL_GPL(ata_std_qc_defer); -EXPORT_SYMBOL_GPL(ata_noop_qc_prep); -EXPORT_SYMBOL_GPL(ata_dev_disable); -EXPORT_SYMBOL_GPL(sata_set_spd); -EXPORT_SYMBOL_GPL(ata_wait_after_reset); -EXPORT_SYMBOL_GPL(sata_link_debounce); -EXPORT_SYMBOL_GPL(sata_link_resume); -EXPORT_SYMBOL_GPL(sata_link_scr_lpm); -EXPORT_SYMBOL_GPL(ata_std_prereset); -EXPORT_SYMBOL_GPL(sata_link_hardreset); -EXPORT_SYMBOL_GPL(sata_std_hardreset); -EXPORT_SYMBOL_GPL(ata_std_postreset); -EXPORT_SYMBOL_GPL(ata_dev_classify); -EXPORT_SYMBOL_GPL(ata_dev_pair); -EXPORT_SYMBOL_GPL(ata_ratelimit); -EXPORT_SYMBOL_GPL(ata_msleep); -EXPORT_SYMBOL_GPL(ata_wait_register); -EXPORT_SYMBOL_GPL(ata_scsi_queuecmd); -EXPORT_SYMBOL_GPL(ata_scsi_slave_config); -EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy); -EXPORT_SYMBOL_GPL(ata_scsi_change_queue_depth); -EXPORT_SYMBOL_GPL(__ata_change_queue_depth); -EXPORT_SYMBOL_GPL(sata_scr_valid); -EXPORT_SYMBOL_GPL(sata_scr_read); -EXPORT_SYMBOL_GPL(sata_scr_write); -EXPORT_SYMBOL_GPL(sata_scr_write_flush); -EXPORT_SYMBOL_GPL(ata_link_online); -EXPORT_SYMBOL_GPL(ata_link_offline); -#ifdef CONFIG_PM -EXPORT_SYMBOL_GPL(ata_host_suspend); -EXPORT_SYMBOL_GPL(ata_host_resume); -#endif /* CONFIG_PM */ -EXPORT_SYMBOL_GPL(ata_id_string); -EXPORT_SYMBOL_GPL(ata_id_c_string); -EXPORT_SYMBOL_GPL(ata_do_dev_read_id); -EXPORT_SYMBOL_GPL(ata_scsi_simulate); - -EXPORT_SYMBOL_GPL(ata_pio_need_iordy); -EXPORT_SYMBOL_GPL(ata_timing_find_mode); -EXPORT_SYMBOL_GPL(ata_timing_compute); -EXPORT_SYMBOL_GPL(ata_timing_merge); -EXPORT_SYMBOL_GPL(ata_timing_cycle2mode); - -#ifdef CONFIG_PCI -EXPORT_SYMBOL_GPL(pci_test_config_bits); -EXPORT_SYMBOL_GPL(ata_pci_remove_one); -#ifdef CONFIG_PM -EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend); -EXPORT_SYMBOL_GPL(ata_pci_device_do_resume); -EXPORT_SYMBOL_GPL(ata_pci_device_suspend); -EXPORT_SYMBOL_GPL(ata_pci_device_resume); -#endif /* CONFIG_PM */ -#endif /* CONFIG_PCI */ - -EXPORT_SYMBOL_GPL(ata_platform_remove_one); - -EXPORT_SYMBOL_GPL(__ata_ehi_push_desc); -EXPORT_SYMBOL_GPL(ata_ehi_push_desc); -EXPORT_SYMBOL_GPL(ata_ehi_clear_desc); -EXPORT_SYMBOL_GPL(ata_port_desc); -#ifdef CONFIG_PCI -EXPORT_SYMBOL_GPL(ata_port_pbar_desc); -#endif /* CONFIG_PCI */ -EXPORT_SYMBOL_GPL(ata_port_schedule_eh); -EXPORT_SYMBOL_GPL(ata_link_abort); -EXPORT_SYMBOL_GPL(ata_port_abort); -EXPORT_SYMBOL_GPL(ata_port_freeze); -EXPORT_SYMBOL_GPL(sata_async_notification); -EXPORT_SYMBOL_GPL(ata_eh_freeze_port); -EXPORT_SYMBOL_GPL(ata_eh_thaw_port); -EXPORT_SYMBOL_GPL(ata_eh_qc_complete); -EXPORT_SYMBOL_GPL(ata_eh_qc_retry); -EXPORT_SYMBOL_GPL(ata_eh_analyze_ncq_error); -EXPORT_SYMBOL_GPL(ata_do_eh); -EXPORT_SYMBOL_GPL(ata_std_error_handler); - -EXPORT_SYMBOL_GPL(ata_cable_40wire); -EXPORT_SYMBOL_GPL(ata_cable_80wire); -EXPORT_SYMBOL_GPL(ata_cable_unknown); -EXPORT_SYMBOL_GPL(ata_cable_ignore); -EXPORT_SYMBOL_GPL(ata_cable_sata); -EXPORT_SYMBOL_GPL(ata_host_get); -EXPORT_SYMBOL_GPL(ata_host_put); diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 53605c8949d8..1d231cfab26f 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -180,6 +180,7 @@ void __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...) __ata_ehi_pushv_desc(ehi, fmt, args); va_end(args); } +EXPORT_SYMBOL_GPL(__ata_ehi_push_desc); /** * ata_ehi_push_desc - push error description with separator @@ -203,6 +204,7 @@ void ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...) __ata_ehi_pushv_desc(ehi, fmt, args); va_end(args); } +EXPORT_SYMBOL_GPL(ata_ehi_push_desc); /** * ata_ehi_clear_desc - clean error description @@ -218,6 +220,7 @@ void ata_ehi_clear_desc(struct ata_eh_info *ehi) ehi->desc[0] = '\0'; ehi->desc_len = 0; } +EXPORT_SYMBOL_GPL(ata_ehi_clear_desc); /** * ata_port_desc - append port description @@ -245,9 +248,9 @@ void ata_port_desc(struct ata_port *ap, const char *fmt, ...) __ata_ehi_pushv_desc(&ap->link.eh_info, fmt, args); va_end(args); } +EXPORT_SYMBOL_GPL(ata_port_desc); #ifdef CONFIG_PCI - /** * ata_port_pbar_desc - append PCI BAR description * @ap: target ATA port @@ -284,7 +287,7 @@ void ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset, ata_port_desc(ap, "%s 0x%llx", name, start + (unsigned long long)offset); } - +EXPORT_SYMBOL_GPL(ata_port_pbar_desc); #endif /* CONFIG_PCI */ static int ata_lookup_timeout_table(u8 cmd) @@ -969,6 +972,7 @@ void ata_port_schedule_eh(struct ata_port *ap) /* see: ata_std_sched_eh, unless you know better */ ap->ops->sched_eh(ap); } +EXPORT_SYMBOL_GPL(ata_port_schedule_eh); static int ata_do_link_abort(struct ata_port *ap, struct ata_link *link) { @@ -1011,6 +1015,7 @@ int ata_link_abort(struct ata_link *link) { return ata_do_link_abort(link->ap, link); } +EXPORT_SYMBOL_GPL(ata_link_abort); /** * ata_port_abort - abort all qc's on the port @@ -1028,6 +1033,7 @@ int ata_port_abort(struct ata_port *ap) { return ata_do_link_abort(ap, NULL); } +EXPORT_SYMBOL_GPL(ata_port_abort); /** * __ata_port_freeze - freeze port @@ -1084,6 +1090,7 @@ int ata_port_freeze(struct ata_port *ap) return nr_aborted; } +EXPORT_SYMBOL_GPL(ata_port_freeze); /** * sata_async_notification - SATA async notification handler @@ -1157,6 +1164,7 @@ int sata_async_notification(struct ata_port *ap) return 0; } } +EXPORT_SYMBOL_GPL(sata_async_notification); /** * ata_eh_freeze_port - EH helper to freeze port @@ -1178,6 +1186,7 @@ void ata_eh_freeze_port(struct ata_port *ap) __ata_port_freeze(ap); spin_unlock_irqrestore(ap->lock, flags); } +EXPORT_SYMBOL_GPL(ata_eh_freeze_port); /** * ata_port_thaw_port - EH helper to thaw port @@ -1206,6 +1215,7 @@ void ata_eh_thaw_port(struct ata_port *ap) DPRINTK("ata%u port thawed\n", ap->print_id); } +EXPORT_SYMBOL_GPL(ata_eh_thaw_port); static void ata_eh_scsidone(struct scsi_cmnd *scmd) { @@ -1240,6 +1250,7 @@ void ata_eh_qc_complete(struct ata_queued_cmd *qc) scmd->retries = scmd->allowed; __ata_eh_qc_complete(qc); } +EXPORT_SYMBOL_GPL(ata_eh_qc_complete); /** * ata_eh_qc_retry - Tell midlayer to retry an ATA command after EH @@ -1259,6 +1270,7 @@ void ata_eh_qc_retry(struct ata_queued_cmd *qc) scmd->allowed++; __ata_eh_qc_complete(qc); } +EXPORT_SYMBOL_GPL(ata_eh_qc_retry); /** * ata_dev_disable - disable ATA device @@ -1285,6 +1297,7 @@ void ata_dev_disable(struct ata_device *dev) */ ata_ering_clear(&dev->ering); } +EXPORT_SYMBOL_GPL(ata_dev_disable); /** * ata_eh_detach_dev - detach ATA device @@ -1727,6 +1740,7 @@ void ata_eh_analyze_ncq_error(struct ata_link *link) ehc->i.err_mask &= ~AC_ERR_DEV; } +EXPORT_SYMBOL_GPL(ata_eh_analyze_ncq_error); /** * ata_eh_analyze_tf - analyze taskfile of a failed qc @@ -4027,6 +4041,7 @@ void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset, ata_eh_finish(ap); } +EXPORT_SYMBOL_GPL(ata_do_eh); /** * ata_std_error_handler - standard error handler @@ -4048,6 +4063,7 @@ void ata_std_error_handler(struct ata_port *ap) ata_do_eh(ap, ops->prereset, ops->softreset, hardreset, ops->postreset); } +EXPORT_SYMBOL_GPL(ata_std_error_handler); #ifdef CONFIG_PM /** diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index cc8ba49275e7..321b5a1d610a 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -501,6 +501,7 @@ int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev, return 0; } +EXPORT_SYMBOL_GPL(ata_std_bios_param); /** * ata_scsi_unlock_native_capacity - unlock native capacity @@ -530,6 +531,7 @@ void ata_scsi_unlock_native_capacity(struct scsi_device *sdev) spin_unlock_irqrestore(ap->lock, flags); ata_port_wait_eh(ap); } +EXPORT_SYMBOL_GPL(ata_scsi_unlock_native_capacity); /** * ata_get_identity - Handler for HDIO_GET_IDENTITY ioctl @@ -1346,6 +1348,7 @@ int ata_scsi_slave_config(struct scsi_device *sdev) return rc; } +EXPORT_SYMBOL_GPL(ata_scsi_slave_config); /** * ata_scsi_slave_destroy - SCSI device is about to be destroyed @@ -1385,6 +1388,7 @@ void ata_scsi_slave_destroy(struct scsi_device *sdev) q->dma_drain_buffer = NULL; q->dma_drain_size = 0; } +EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy); /** * __ata_change_queue_depth - helper for ata_scsi_change_queue_depth @@ -1428,6 +1432,7 @@ int __ata_change_queue_depth(struct ata_port *ap, struct scsi_device *sdev, return scsi_change_queue_depth(sdev, queue_depth); } +EXPORT_SYMBOL_GPL(__ata_change_queue_depth); /** * ata_scsi_change_queue_depth - SCSI callback for queue depth config @@ -1450,6 +1455,7 @@ int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth) return __ata_change_queue_depth(ap, sdev, queue_depth); } +EXPORT_SYMBOL_GPL(ata_scsi_change_queue_depth); /** * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command @@ -4405,6 +4411,7 @@ int ata_scsi_queuecmd(struct Scsi_Host *shost, struct scsi_cmnd *cmd) return rc; } +EXPORT_SYMBOL_GPL(ata_scsi_queuecmd); /** * ata_scsi_simulate - simulate SCSI command on ATA device @@ -4528,6 +4535,7 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd) cmd->scsi_done(cmd); } +EXPORT_SYMBOL_GPL(ata_scsi_simulate); int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht) { From patchwork Tue Jan 28 13:33:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230342 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=rzq5epKh; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKv4cXDz9sSQ for ; Wed, 29 Jan 2020 00:35:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726486AbgA1NeQ (ORCPT ); Tue, 28 Jan 2020 08:34:16 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52353 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726442AbgA1NeP (ORCPT ); Tue, 28 Jan 2020 08:34:15 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133414euoutp02e57d554a99cfaad68ea1fdc51cfb155e~uEE-aahw02862028620euoutp026 for ; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133414euoutp02e57d554a99cfaad68ea1fdc51cfb155e~uEE-aahw02862028620euoutp026 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218454; bh=YvXBNHY+8yH0MLPg1IfQRsk9QA/9ErQStYmSCxwTyY4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rzq5epKhh3hmdDR+TcLsS9T4QpybId/1Ili714oQAmxDzGAxJk23prU/gzPcba7Lq rPz00zU9OQcg1ewJNKxK3NdHSImV67jbrncT/uGc0ehnCpg1tc16KBa7ROz/K9LmVC eb2QBgpfXptHOb6HhG8OM34ZuR6fEEOvkegGIcv0= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133414eucas1p154c78b12f3047e87c493bc32b2c8c75d~uEE-CgCWO1369913699eucas1p1Q; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id C0.5A.60679.558303E5; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133413eucas1p1725ccae03fb5aba49f0e0cef798da9d6~uEE_vLL-K0096700967eucas1p1A; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133413eusmtrp2cbc5876973ff5f09eba9408c566d00e5~uEE_uoHWd0330003300eusmtrp2v; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-43-5e30385540b4 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 51.92.08375.558303E5; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133413eusmtip2244283b159be6c5e2b198a60a9d4da73~uEE_baEVU0685506855eusmtip2V; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 09/28] ata: remove EXPORT_SYMBOL_GPL()s not used by modules Date: Tue, 28 Jan 2020 14:33:24 +0100 Message-Id: <20200128133343.29905-10-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprGKsWRmVeSWpSXmKPExsWy7djP87qhFgZxBt0zrSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBrFZZOS mpNZllqkb5fAlTGno6zglUzF/HmaDYzbxbsYOTkkBEwk7i7bzNLFyMUhJLCCUeJ6Vx+U84VR 4t2ED1DOZ0aJR892McO0PJ/1lREisRyo5eluRpAEWMus68kgNpuAlcTE9lVgcREBBYme3yvZ QBqYBdYwSqw63ASWEBbwlpjfuhJsKouAqsTKHZdZQGxeATuJfd1LmCC2yUts/faJtYuRg4MT KN6z1xyiRFDi5MwnYOXMQCXNW2czg8yXEGhmlzhz4DBUr4vE08UboK4Wlnh1fAs7hC0j8X/n fCaIhnWMEn87XkB1b2eUWD75HxtElbXEnXO/2EA2MwtoSqzfpQ8RdpR4Mvk4C0hYQoBP4sZb QYgj+CQmbZvODBHmlehoE4KoVpPYsGwDG8zarp0roUo8JM4vVZzAqDgLyTezkHwzC2HtAkbm VYziqaXFuempxUZ5qeV6xYm5xaV56XrJ+bmbGIGp5fS/4192MO76k3SIUYCDUYmHd4aKQZwQ a2JZcWXuIUYJDmYlEd5OJqAQb0piZVVqUX58UWlOavEhRmkOFiVxXuNFL2OFBNITS1KzU1ML UotgskwcnFINjBum6nIkO35RCxLl3DXDQOu988t5bXbqbZyzJIsmc6vM7Q0Wi/vSaD7hTYEM j/OrBRZL5tRUXKmbEi5x53ei2Md2T+fZaU3hcoq/+uM3WhoaBHK3XnYqFp3U3d/VtCeNWzq/ Q6X8uH+j6MVNPjrX3s2a+d/8Unjf0mt3viz4K7k/MOPD4sAlSizFGYmGWsxFxYkAASlETSkD AAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmphkeLIzCtJLcpLzFFi42I5/e/4Pd1QC4M4g7ZFGhar7/azWWycsZ7V 4tmtvUwWx3Y8YrK4vGsOm8Xc1unsDmweO2fdZfe4fLbU49DhDkaPvi2rGD0+b5ILYI3SsynK Ly1JVcjILy6xVYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJzcksSy3St0vQy5jTUVbwSqZi /jzNBsbt4l2MnBwSAiYSz2d9Zexi5OIQEljKKLH0Sj9TFyMHUEJG4vj6MogaYYk/17rYIGo+ MUq8mP2PBSTBJmAlMbF9FSOILSKgINHzeyVYEbPABkaJVze/gBUJC3hLzG9dyQxiswioSqzc cRkszitgJ7GvewkTxAZ5ia3fPrGCLOYEivfsNQcJCwnYSqw/85QVolxQ4uTMJ2CtzEDlzVtn M09gFJiFJDULSWoBI9MqRpHU0uLc9NxiQ73ixNzi0rx0veT83E2MwBjYduzn5h2MlzYGH2IU 4GBU4uGdoWIQJ8SaWFZcmXuIUYKDWUmEt5MJKMSbklhZlVqUH19UmpNafIjRFOiHicxSosn5 wPjMK4k3NDU0t7A0NDc2NzazUBLn7RA4GCMkkJ5YkpqdmlqQWgTTx8TBKdXAKD/7VMyySxWT df0j4q5wTDlnNNO8fGnrniObxe/JMRo1HC8umytpZ6JoF8H15WWu1EzD6xwSB/fJc5VMiTW0 OL/00Z9PAevXyMxQj+Y4U7YoakfED+W8qbznHm7KUqp6cfer95vNUR+fBhouzow+meeilv4j 6ltFo3jX+ur3rX+qXxrKzdj7XImlOCPRUIu5qDgRAGSvj+iXAgAA X-CMS-MailID: 20200128133413eucas1p1725ccae03fb5aba49f0e0cef798da9d6 X-Msg-Generator: CA X-RootMTR: 20200128133413eucas1p1725ccae03fb5aba49f0e0cef798da9d6 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133413eucas1p1725ccae03fb5aba49f0e0cef798da9d6 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Remove EXPORT_SYMBOL_GPL()s for functions used only by the core libata code. Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 39838 573 40 40451 9e03 drivers/ata/libata-core.o 21071 105 4096 25272 62b8 drivers/ata/libata-scsi.o 17519 18 0 17537 4481 drivers/ata/libata-eh.o after: 39688 573 40 40301 9d6d drivers/ata/libata-core.o 21040 105 4096 25241 6299 drivers/ata/libata-scsi.o 17405 18 0 17423 440f drivers/ata/libata-eh.o Signed-off-by: Bartlomiej Zolnierkiewicz Reviewed-by: Christoph Hellwig --- drivers/ata/libata-core.c | 5 ----- drivers/ata/libata-eh.c | 4 ---- drivers/ata/libata-scsi.c | 1 - 3 files changed, 10 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index ad724602c47c..c41198bb9582 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -80,7 +80,6 @@ const struct ata_port_operations ata_base_port_ops = { .sched_eh = ata_std_sched_eh, .end_eh = ata_std_end_eh, }; -EXPORT_SYMBOL_GPL(ata_base_port_ops); const struct ata_port_operations sata_port_ops = { .inherits = &ata_base_port_ops, @@ -902,7 +901,6 @@ void ata_unpack_xfermask(unsigned long xfer_mask, unsigned long *pio_mask, if (udma_mask) *udma_mask = (xfer_mask & ATA_MASK_UDMA) >> ATA_SHIFT_UDMA; } -EXPORT_SYMBOL_GPL(ata_unpack_xfermask); static const struct ata_xfer_ent { int shift, bits; @@ -3425,7 +3423,6 @@ u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle) return last_mode; } -EXPORT_SYMBOL_GPL(ata_timing_cycle2mode); /** * ata_down_xfermask_limit - adjust dev xfer masks downward @@ -5051,7 +5048,6 @@ void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, qc->n_elem = n_elem; qc->cursg = qc->sg; } -EXPORT_SYMBOL_GPL(ata_sg_init); #ifdef CONFIG_HAS_DMA @@ -6157,7 +6153,6 @@ void ata_host_get(struct ata_host *host) { kref_get(&host->kref); } -EXPORT_SYMBOL_GPL(ata_host_get); void ata_host_put(struct ata_host *host) { diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 1d231cfab26f..04275f4c8d36 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -1215,7 +1215,6 @@ void ata_eh_thaw_port(struct ata_port *ap) DPRINTK("ata%u port thawed\n", ap->print_id); } -EXPORT_SYMBOL_GPL(ata_eh_thaw_port); static void ata_eh_scsidone(struct scsi_cmnd *scmd) { @@ -1250,7 +1249,6 @@ void ata_eh_qc_complete(struct ata_queued_cmd *qc) scmd->retries = scmd->allowed; __ata_eh_qc_complete(qc); } -EXPORT_SYMBOL_GPL(ata_eh_qc_complete); /** * ata_eh_qc_retry - Tell midlayer to retry an ATA command after EH @@ -1270,7 +1268,6 @@ void ata_eh_qc_retry(struct ata_queued_cmd *qc) scmd->allowed++; __ata_eh_qc_complete(qc); } -EXPORT_SYMBOL_GPL(ata_eh_qc_retry); /** * ata_dev_disable - disable ATA device @@ -4041,7 +4038,6 @@ void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset, ata_eh_finish(ap); } -EXPORT_SYMBOL_GPL(ata_do_eh); /** * ata_std_error_handler - standard error handler diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 321b5a1d610a..d549bd5b3d36 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -4535,7 +4535,6 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd) cmd->scsi_done(cmd); } -EXPORT_SYMBOL_GPL(ata_scsi_simulate); int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht) { From patchwork Tue Jan 28 13:33:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230323 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=HbBLNq7L; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SJV3twqz9sR1 for ; Wed, 29 Jan 2020 00:34:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726515AbgA1NeR (ORCPT ); Tue, 28 Jan 2020 08:34:17 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58923 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726445AbgA1NeR (ORCPT ); Tue, 28 Jan 2020 08:34:17 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133414euoutp0113795494ce5a09498e06c35ae4099659~uEE-6ZtOy0325703257euoutp01J for ; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133414euoutp0113795494ce5a09498e06c35ae4099659~uEE-6ZtOy0325703257euoutp01J DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218454; bh=T6lHnAKlpw/zz4V71yEIDoPVDXBTHjTDKfCDgnmDEbQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HbBLNq7LE8AcXEsRiy+v6h9h/cT/H4bowJW8RDZbcTwaywxsM5eicwlowDayF+Pe6 CsUJkULBRnQbzx4xt0oqnLAhSlIhER3An2ETXvzK3FQtWSAB9fP5a3hT9/GxtTWU3p 03/N+EtC/lOFMlYNDOX3Rk70tmPRA8lbvH7ZOGDc= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133414eucas1p2fd6d6e560c9236c3a922169f6b1b65df~uEE-pAeXB3103131031eucas1p2o; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id C1.5A.60679.658303E5; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133414eucas1p14b041a2d58ca70817f3007c0f405ee73~uEE-GAEbc0713407134eucas1p1q; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133414eusmtrp299a1e2d410bca940bda641faf6fad1e8~uEE-FadAh0330103301eusmtrp2t; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-48-5e3038565483 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id DF.72.07950.558303E5; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133413eusmtip2b1a0bc87cbd83581eacf298dd6f8aa5b~uEE_vQk0N0657106571eusmtip2f; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 10/28] ata: separate PATA timings code from libata-core.c Date: Tue, 28 Jan 2020 14:33:25 +0100 Message-Id: <20200128133343.29905-11-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djPc7phFgZxBrO+KVqsvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+Po1i9MBcdXMVb0dRY0MH5rZOxi5OSQEDCR2HbjNnsXIxeHkMAKRolHm9aw QDhfGCXOzvjDDOF8ZpS4+GsnUxcjB1jLles8EPHljBLr/t9ihuuY2HieBWQum4CVxMT2VWA7 RAQUJHp+r2QDKWIWWMMosepwE1hCWMBTYtbF2awgNouAqsTLqzPBbF4BO4k9DbehDpSX2Prt EyvIZk6geM9ec4gSQYmTM5+A7WIGKmneOpsZorydXWL+YxYI20Xi4+N9TBC2sMSr41vYIWwZ if875zOB3CMhsI5R4m/HC2YIZzujxPLJ/9ggqqwl7pz7xQaymFlAU2L9Ln2IsKNE17aFLJCQ 4JO48VYQ4gY+iUnbpjNDhHklOtqEIKrVJDYs28AGs7Zr50qoMz0k9v2dyziBUXEWkm9mIflm FsLeBYzMqxjFU0uLc9NTi43yUsv1ihNzi0vz0vWS83M3MQITzOl/x7/sYNz1J+kQowAHoxIP 7wwVgzgh1sSy4srcQ4wSHMxKIrydTEAh3pTEyqrUovz4otKc1OJDjNIcLErivMaLXsYKCaQn lqRmp6YWpBbBZJk4OKUaGD0XFvjdLv2kuFWxa+HOixkSCttfvbnf/1JMf9fmDfX5Cr5BV2Wd StsSXYwqvbkWvfC/VfMiKiKaidPdSFeimVn6N0OAfuXSfklRm4+5k46IFkTl7v203CnhVCB7 0IrZW73KX1d9N1Zi2ZGxYIvRg/qiiueVk/mtipobF8XeSKqvkdI2+pGuxFKckWioxVxUnAgA 2yUM8ywDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeLIzCtJLcpLzFFi42I5/e/4Pd0wC4M4gxeCFqvv9rNZbJyxntXi 2a29TBbHdjxisri8aw6bxdzW6ewObB47Z91l97h8ttTj0OEORo++LasYPT5vkgtgjdKzKcov LUlVyMgvLrFVija0MNIztLTQMzKx1DM0No+1MjJV0rezSUnNySxLLdK3S9DLOLr1C1PB8VWM FX2dBQ2M3xoZuxg5OCQETCSuXOfpYuTiEBJYyijxb9IMFoi4jMTx9WVdjJxAprDEn2tdbBA1 nxgl9ky/zQ6SYBOwkpjYvooRxBYRUJDo+b0SrIhZYAOjxKubX1hAEsICnhKzLs5mBbFZBFQl Xl6dCWbzCthJ7Gm4zQixQV5i67dPrCCLOYHiPXvNQcJCArYS6888hSoXlDg58wnYSGag8uat s5knMArMQpKahSS1gJFpFaNIamlxbnpusZFecWJucWleul5yfu4mRmAUbDv2c8sOxq53wYcY BTgYlXh4HZQM4oRYE8uKK3MPMUpwMCuJ8HYyAYV4UxIrq1KL8uOLSnNSiw8xmgL9MJFZSjQ5 HxiheSXxhqaG5haWhubG5sZmFkrivB0CB2OEBNITS1KzU1MLUotg+pg4OKUaGG/Y/k49tSZ8 p+zzjKPbdz37NO+uYIW/lui8thXWHZ4hM55etfpv+HrxA1UL1aKr+oKrtvE87fJectI4xMRi j3/du393Xt29dt2SxXVqwzS24G0PZgso7zC5Kr9mzYSanz9mG2YLGdlPmhUQ2dB7SLnwFRPH lJfdqedvLMn+e11bdrW1+40FFvOVWIozEg21mIuKEwHf1BJEmAIAAA== X-CMS-MailID: 20200128133414eucas1p14b041a2d58ca70817f3007c0f405ee73 X-Msg-Generator: CA X-RootMTR: 20200128133414eucas1p14b041a2d58ca70817f3007c0f405ee73 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133414eucas1p14b041a2d58ca70817f3007c0f405ee73 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Separate PATA timings code from libata-core.c: * add PATA_TIMINGS config option and make corresponding PATA host drivers (and ATA ACPI code) select it * move following PATA timings code to libata-pata-timings.c: - ata_timing_quantize() - ata_timing_merge() - ata_timing_find_mode() - ata_timing_compute() * group above functions together in and cover them with CONFIG_PATA_TIMINGS ifdef * include libata-pata-timings.c in the build when PATA_TIMINGS config option is enabled * cover ata_timing_cycle2mode() with CONFIG_ATA_ACPI ifdef (it depends on code from libata-core.c and libata-pata-timings.c while its only user is ATA ACPI) Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 39688 573 40 40301 9d6d drivers/ata/libata-core.o after: 37820 572 40 38432 9620 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/Kconfig | 21 ++++ drivers/ata/Makefile | 1 + drivers/ata/libata-core.c | 171 +--------------------------- drivers/ata/libata-pata-timings.c | 180 ++++++++++++++++++++++++++++++ include/linux/libata.h | 20 +++- 5 files changed, 218 insertions(+), 175 deletions(-) create mode 100644 drivers/ata/libata-pata-timings.c diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index ad7760656f71..5b55ebf56b5a 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig @@ -37,6 +37,9 @@ config ATA_NONSTANDARD config SATA_HOST bool +config PATA_TIMINGS + bool + config ATA_VERBOSE_ERROR bool "Verbose ATA error reporting" default y @@ -51,6 +54,7 @@ config ATA_VERBOSE_ERROR config ATA_ACPI bool "ATA ACPI Support" depends on ACPI + select PATA_TIMINGS default y help This option adds support for ATA-related ACPI objects. @@ -341,6 +345,7 @@ config PDC_ADMA config PATA_OCTEON_CF tristate "OCTEON Boot Bus Compact Flash support" depends on CAVIUM_OCTEON_SOC + select PATA_TIMINGS help This option enables a polled compact flash driver for use with compact flash cards attached to the OCTEON boot bus. @@ -536,6 +541,7 @@ comment "PATA SFF controllers with BMDMA" config PATA_ALI tristate "ALi PATA support" depends on PCI + select PATA_TIMINGS help This option enables support for the ALi ATA interfaces found on the many ALi chipsets. @@ -545,6 +551,7 @@ config PATA_ALI config PATA_AMD tristate "AMD/NVidia PATA support" depends on PCI + select PATA_TIMINGS help This option enables support for the AMD and NVidia PATA interfaces found on the chipsets for Athlon/Athlon64. @@ -579,6 +586,7 @@ config PATA_ATIIXP config PATA_ATP867X tristate "ARTOP/Acard ATP867X PATA support" depends on PCI + select PATA_TIMINGS help This option enables support for ARTOP/Acard ATP867X PATA controllers. @@ -588,6 +596,7 @@ config PATA_ATP867X config PATA_BK3710 tristate "Palmchip BK3710 PATA support" depends on ARCH_DAVINCI + select PATA_TIMINGS help This option enables support for the integrated IDE controller on the TI DaVinci SoC. @@ -597,6 +606,7 @@ config PATA_BK3710 config PATA_CMD64X tristate "CMD64x PATA support" depends on PCI + select PATA_TIMINGS help This option enables support for the CMD64x series chips except for the CMD640. @@ -642,6 +652,7 @@ config PATA_CS5536 config PATA_CYPRESS tristate "Cypress CY82C693 PATA support (Very Experimental)" depends on PCI + select PATA_TIMINGS help This option enables support for the Cypress/Contaq CY82C693 chipset found in some Alpha systems @@ -660,6 +671,7 @@ config PATA_EFAR config PATA_EP93XX tristate "Cirrus Logic EP93xx PATA support" depends on ARCH_EP93XX + select PATA_TIMINGS help This option enables support for the PATA controller in the Cirrus Logic EP9312 and EP9315 ARM CPU. @@ -724,6 +736,7 @@ config PATA_HPT3X3_DMA config PATA_ICSIDE tristate "Acorn ICS PATA support" depends on ARM && ARCH_ACORN + select PATA_TIMINGS help On Acorn systems, say Y here if you wish to use the ICS PATA interface card. This is not required for ICS partition support. @@ -732,6 +745,7 @@ config PATA_ICSIDE config PATA_IMX tristate "PATA support for Freescale iMX" depends on ARCH_MXC + select PATA_TIMINGS help This option enables support for the PATA host available on Freescale iMX SoCs. @@ -817,6 +831,7 @@ config PATA_NINJA32 config PATA_NS87415 tristate "Nat Semi NS87415 PATA support" depends on PCI + select PATA_TIMINGS help This option enables support for the National Semiconductor NS87415 PCI-IDE controller. @@ -941,6 +956,7 @@ config PATA_TRIFLEX config PATA_VIA tristate "VIA PATA support" depends on PCI + select PATA_TIMINGS help This option enables support for the VIA PATA interfaces found on the many VIA chipsets. @@ -974,6 +990,7 @@ comment "PIO-only SFF controllers" config PATA_CMD640_PCI tristate "CMD640 PCI PATA support (Experimental)" depends on PCI + select PATA_TIMINGS help This option enables support for the CMD640 PCI IDE interface chip. Only the primary channel is currently @@ -1044,6 +1061,7 @@ config PATA_MPIIX config PATA_NS87410 tristate "Nat Semi NS87410 PATA support" depends on PCI + select PATA_TIMINGS help This option enables support for the National Semiconductor NS87410 PCI-IDE controller. @@ -1124,6 +1142,7 @@ config PATA_RZ1000 config PATA_SAMSUNG_CF tristate "Samsung SoC PATA support" depends on SAMSUNG_DEV_IDE + select PATA_TIMINGS help This option enables basic support for Samsung's S3C/S5P board PATA controllers via the new ATA layer @@ -1143,6 +1162,7 @@ comment "Generic fallback / legacy drivers" config PATA_ACPI tristate "ACPI firmware driver for PATA" depends on ATA_ACPI && ATA_BMDMA && PCI + select PATA_TIMINGS help This option enables an ACPI method driver which drives motherboard PATA controller interfaces through the ACPI @@ -1162,6 +1182,7 @@ config ATA_GENERIC config PATA_LEGACY tristate "Legacy ISA PATA support (Experimental)" depends on (ISA || PCI) + select PATA_TIMINGS help This option enables support for ISA/VLB/PCI bus legacy PATA ports and allows them to be accessed via the new ATA layer. diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index d8cc2e04a6c7..cdaf965fed25 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -127,3 +127,4 @@ libata-$(CONFIG_ATA_SFF) += libata-sff.o libata-$(CONFIG_SATA_PMP) += libata-pmp.o libata-$(CONFIG_ATA_ACPI) += libata-acpi.o libata-$(CONFIG_SATA_ZPODD) += libata-zpodd.o +libata-$(CONFIG_PATA_TIMINGS) += libata-pata-timings.o diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index c41198bb9582..408dee580f24 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -3204,175 +3204,7 @@ int sata_set_spd(struct ata_link *link) } EXPORT_SYMBOL_GPL(sata_set_spd); -/* - * This mode timing computation functionality is ported over from - * drivers/ide/ide-timing.h and was originally written by Vojtech Pavlik - */ -/* - * PIO 0-4, MWDMA 0-2 and UDMA 0-6 timings (in nanoseconds). - * These were taken from ATA/ATAPI-6 standard, rev 0a, except - * for UDMA6, which is currently supported only by Maxtor drives. - * - * For PIO 5/6 MWDMA 3/4 see the CFA specification 3.0. - */ - -static const struct ata_timing ata_timing[] = { -/* { XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 0, 960, 0 }, */ - { XFER_PIO_0, 70, 290, 240, 600, 165, 150, 0, 600, 0 }, - { XFER_PIO_1, 50, 290, 93, 383, 125, 100, 0, 383, 0 }, - { XFER_PIO_2, 30, 290, 40, 330, 100, 90, 0, 240, 0 }, - { XFER_PIO_3, 30, 80, 70, 180, 80, 70, 0, 180, 0 }, - { XFER_PIO_4, 25, 70, 25, 120, 70, 25, 0, 120, 0 }, - { XFER_PIO_5, 15, 65, 25, 100, 65, 25, 0, 100, 0 }, - { XFER_PIO_6, 10, 55, 20, 80, 55, 20, 0, 80, 0 }, - - { XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 50, 960, 0 }, - { XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 30, 480, 0 }, - { XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 20, 240, 0 }, - - { XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 20, 480, 0 }, - { XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 5, 150, 0 }, - { XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 5, 120, 0 }, - { XFER_MW_DMA_3, 25, 0, 0, 0, 65, 25, 5, 100, 0 }, - { XFER_MW_DMA_4, 25, 0, 0, 0, 55, 20, 5, 80, 0 }, - -/* { XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 0, 150 }, */ - { XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 0, 120 }, - { XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 0, 80 }, - { XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 0, 60 }, - { XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 0, 45 }, - { XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 0, 30 }, - { XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 0, 20 }, - { XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 0, 15 }, - - { 0xFF } -}; - -#define ENOUGH(v, unit) (((v)-1)/(unit)+1) -#define EZ(v, unit) ((v)?ENOUGH(((v) * 1000), unit):0) - -static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT) -{ - q->setup = EZ(t->setup, T); - q->act8b = EZ(t->act8b, T); - q->rec8b = EZ(t->rec8b, T); - q->cyc8b = EZ(t->cyc8b, T); - q->active = EZ(t->active, T); - q->recover = EZ(t->recover, T); - q->dmack_hold = EZ(t->dmack_hold, T); - q->cycle = EZ(t->cycle, T); - q->udma = EZ(t->udma, UT); -} - -void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b, - struct ata_timing *m, unsigned int what) -{ - if (what & ATA_TIMING_SETUP ) m->setup = max(a->setup, b->setup); - if (what & ATA_TIMING_ACT8B ) m->act8b = max(a->act8b, b->act8b); - if (what & ATA_TIMING_REC8B ) m->rec8b = max(a->rec8b, b->rec8b); - if (what & ATA_TIMING_CYC8B ) m->cyc8b = max(a->cyc8b, b->cyc8b); - if (what & ATA_TIMING_ACTIVE ) m->active = max(a->active, b->active); - if (what & ATA_TIMING_RECOVER) m->recover = max(a->recover, b->recover); - if (what & ATA_TIMING_DMACK_HOLD) m->dmack_hold = max(a->dmack_hold, b->dmack_hold); - if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle); - if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma); -} -EXPORT_SYMBOL_GPL(ata_timing_merge); - -const struct ata_timing *ata_timing_find_mode(u8 xfer_mode) -{ - const struct ata_timing *t = ata_timing; - - while (xfer_mode > t->mode) - t++; - - if (xfer_mode == t->mode) - return t; - - WARN_ONCE(true, "%s: unable to find timing for xfer_mode 0x%x\n", - __func__, xfer_mode); - - return NULL; -} -EXPORT_SYMBOL_GPL(ata_timing_find_mode); - -int ata_timing_compute(struct ata_device *adev, unsigned short speed, - struct ata_timing *t, int T, int UT) -{ - const u16 *id = adev->id; - const struct ata_timing *s; - struct ata_timing p; - - /* - * Find the mode. - */ - - if (!(s = ata_timing_find_mode(speed))) - return -EINVAL; - - memcpy(t, s, sizeof(*s)); - - /* - * If the drive is an EIDE drive, it can tell us it needs extended - * PIO/MW_DMA cycle timing. - */ - - if (id[ATA_ID_FIELD_VALID] & 2) { /* EIDE drive */ - memset(&p, 0, sizeof(p)); - - if (speed >= XFER_PIO_0 && speed < XFER_SW_DMA_0) { - if (speed <= XFER_PIO_2) - p.cycle = p.cyc8b = id[ATA_ID_EIDE_PIO]; - else if ((speed <= XFER_PIO_4) || - (speed == XFER_PIO_5 && !ata_id_is_cfa(id))) - p.cycle = p.cyc8b = id[ATA_ID_EIDE_PIO_IORDY]; - } else if (speed >= XFER_MW_DMA_0 && speed <= XFER_MW_DMA_2) - p.cycle = id[ATA_ID_EIDE_DMA_MIN]; - - ata_timing_merge(&p, t, t, ATA_TIMING_CYCLE | ATA_TIMING_CYC8B); - } - - /* - * Convert the timing to bus clock counts. - */ - - ata_timing_quantize(t, t, T, UT); - - /* - * Even in DMA/UDMA modes we still use PIO access for IDENTIFY, - * S.M.A.R.T * and some other commands. We have to ensure that the - * DMA cycle timing is slower/equal than the fastest PIO timing. - */ - - if (speed > XFER_PIO_6) { - ata_timing_compute(adev, adev->pio_mode, &p, T, UT); - ata_timing_merge(&p, t, t, ATA_TIMING_ALL); - } - - /* - * Lengthen active & recovery time so that cycle time is correct. - */ - - if (t->act8b + t->rec8b < t->cyc8b) { - t->act8b += (t->cyc8b - (t->act8b + t->rec8b)) / 2; - t->rec8b = t->cyc8b - t->act8b; - } - - if (t->active + t->recover < t->cycle) { - t->active += (t->cycle - (t->active + t->recover)) / 2; - t->recover = t->cycle - t->active; - } - - /* In a few cases quantisation may produce enough errors to - leave t->cycle too low for the sum of active and recovery - if so we must correct this */ - if (t->active + t->recover > t->cycle) - t->cycle = t->active + t->recover; - - return 0; -} -EXPORT_SYMBOL_GPL(ata_timing_compute); - +#ifdef CONFIG_ATA_ACPI /** * ata_timing_cycle2mode - find xfer mode for the specified cycle duration * @xfer_shift: ATA_SHIFT_* value for transfer type to examine. @@ -3423,6 +3255,7 @@ u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle) return last_mode; } +#endif /** * ata_down_xfermask_limit - adjust dev xfer masks downward diff --git a/drivers/ata/libata-pata-timings.c b/drivers/ata/libata-pata-timings.c new file mode 100644 index 000000000000..bababa6f519b --- /dev/null +++ b/drivers/ata/libata-pata-timings.c @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * libata-pata-timings.c - helper library for PATA timings + * + * Copyright 2003-2004 Red Hat, Inc. All rights reserved. + * Copyright 2003-2004 Jeff Garzik + */ + +#include +#include +#include + +/* + * This mode timing computation functionality is ported over from + * drivers/ide/ide-timing.h and was originally written by Vojtech Pavlik + */ +/* + * PIO 0-4, MWDMA 0-2 and UDMA 0-6 timings (in nanoseconds). + * These were taken from ATA/ATAPI-6 standard, rev 0a, except + * for UDMA6, which is currently supported only by Maxtor drives. + * + * For PIO 5/6 MWDMA 3/4 see the CFA specification 3.0. + */ + +static const struct ata_timing ata_timing[] = { +/* { XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 0, 960, 0 }, */ + { XFER_PIO_0, 70, 290, 240, 600, 165, 150, 0, 600, 0 }, + { XFER_PIO_1, 50, 290, 93, 383, 125, 100, 0, 383, 0 }, + { XFER_PIO_2, 30, 290, 40, 330, 100, 90, 0, 240, 0 }, + { XFER_PIO_3, 30, 80, 70, 180, 80, 70, 0, 180, 0 }, + { XFER_PIO_4, 25, 70, 25, 120, 70, 25, 0, 120, 0 }, + { XFER_PIO_5, 15, 65, 25, 100, 65, 25, 0, 100, 0 }, + { XFER_PIO_6, 10, 55, 20, 80, 55, 20, 0, 80, 0 }, + + { XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 50, 960, 0 }, + { XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 30, 480, 0 }, + { XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 20, 240, 0 }, + + { XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 20, 480, 0 }, + { XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 5, 150, 0 }, + { XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 5, 120, 0 }, + { XFER_MW_DMA_3, 25, 0, 0, 0, 65, 25, 5, 100, 0 }, + { XFER_MW_DMA_4, 25, 0, 0, 0, 55, 20, 5, 80, 0 }, + +/* { XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 0, 150 }, */ + { XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 0, 120 }, + { XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 0, 80 }, + { XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 0, 60 }, + { XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 0, 45 }, + { XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 0, 30 }, + { XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 0, 20 }, + { XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 0, 15 }, + + { 0xFF } +}; + +#define ENOUGH(v, unit) (((v)-1)/(unit)+1) +#define EZ(v, unit) ((v)?ENOUGH(((v) * 1000), unit):0) + +static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT) +{ + q->setup = EZ(t->setup, T); + q->act8b = EZ(t->act8b, T); + q->rec8b = EZ(t->rec8b, T); + q->cyc8b = EZ(t->cyc8b, T); + q->active = EZ(t->active, T); + q->recover = EZ(t->recover, T); + q->dmack_hold = EZ(t->dmack_hold, T); + q->cycle = EZ(t->cycle, T); + q->udma = EZ(t->udma, UT); +} + +void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b, + struct ata_timing *m, unsigned int what) +{ + if (what & ATA_TIMING_SETUP ) m->setup = max(a->setup, b->setup); + if (what & ATA_TIMING_ACT8B ) m->act8b = max(a->act8b, b->act8b); + if (what & ATA_TIMING_REC8B ) m->rec8b = max(a->rec8b, b->rec8b); + if (what & ATA_TIMING_CYC8B ) m->cyc8b = max(a->cyc8b, b->cyc8b); + if (what & ATA_TIMING_ACTIVE ) m->active = max(a->active, b->active); + if (what & ATA_TIMING_RECOVER) m->recover = max(a->recover, b->recover); + if (what & ATA_TIMING_DMACK_HOLD) m->dmack_hold = max(a->dmack_hold, b->dmack_hold); + if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle); + if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma); +} +EXPORT_SYMBOL_GPL(ata_timing_merge); + +const struct ata_timing *ata_timing_find_mode(u8 xfer_mode) +{ + const struct ata_timing *t = ata_timing; + + while (xfer_mode > t->mode) + t++; + + if (xfer_mode == t->mode) + return t; + + WARN_ONCE(true, "%s: unable to find timing for xfer_mode 0x%x\n", + __func__, xfer_mode); + + return NULL; +} +EXPORT_SYMBOL_GPL(ata_timing_find_mode); + +int ata_timing_compute(struct ata_device *adev, unsigned short speed, + struct ata_timing *t, int T, int UT) +{ + const u16 *id = adev->id; + const struct ata_timing *s; + struct ata_timing p; + + /* + * Find the mode. + */ + + if (!(s = ata_timing_find_mode(speed))) + return -EINVAL; + + memcpy(t, s, sizeof(*s)); + + /* + * If the drive is an EIDE drive, it can tell us it needs extended + * PIO/MW_DMA cycle timing. + */ + + if (id[ATA_ID_FIELD_VALID] & 2) { /* EIDE drive */ + memset(&p, 0, sizeof(p)); + + if (speed >= XFER_PIO_0 && speed < XFER_SW_DMA_0) { + if (speed <= XFER_PIO_2) + p.cycle = p.cyc8b = id[ATA_ID_EIDE_PIO]; + else if ((speed <= XFER_PIO_4) || + (speed == XFER_PIO_5 && !ata_id_is_cfa(id))) + p.cycle = p.cyc8b = id[ATA_ID_EIDE_PIO_IORDY]; + } else if (speed >= XFER_MW_DMA_0 && speed <= XFER_MW_DMA_2) + p.cycle = id[ATA_ID_EIDE_DMA_MIN]; + + ata_timing_merge(&p, t, t, ATA_TIMING_CYCLE | ATA_TIMING_CYC8B); + } + + /* + * Convert the timing to bus clock counts. + */ + + ata_timing_quantize(t, t, T, UT); + + /* + * Even in DMA/UDMA modes we still use PIO access for IDENTIFY, + * S.M.A.R.T * and some other commands. We have to ensure that the + * DMA cycle timing is slower/equal than the fastest PIO timing. + */ + + if (speed > XFER_PIO_6) { + ata_timing_compute(adev, adev->pio_mode, &p, T, UT); + ata_timing_merge(&p, t, t, ATA_TIMING_ALL); + } + + /* + * Lengthen active & recovery time so that cycle time is correct. + */ + + if (t->act8b + t->rec8b < t->cyc8b) { + t->act8b += (t->cyc8b - (t->act8b + t->rec8b)) / 2; + t->rec8b = t->cyc8b - t->act8b; + } + + if (t->active + t->recover < t->cycle) { + t->active += (t->cycle - (t->active + t->recover)) / 2; + t->recover = t->cycle - t->active; + } + + /* In a few cases quantisation may produce enough errors to + leave t->cycle too low for the sum of active and recovery + if so we must correct this */ + if (t->active + t->recover > t->cycle) + t->cycle = t->active + t->recover; + + return 0; +} +EXPORT_SYMBOL_GPL(ata_timing_compute); diff --git a/include/linux/libata.h b/include/linux/libata.h index dc162cca63a4..79953c6d769c 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1207,13 +1207,9 @@ extern int ata_cable_unknown(struct ata_port *ap); /* Timing helpers */ extern unsigned int ata_pio_need_iordy(const struct ata_device *); -extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode); -extern int ata_timing_compute(struct ata_device *, unsigned short, - struct ata_timing *, int, int); -extern void ata_timing_merge(const struct ata_timing *, - const struct ata_timing *, struct ata_timing *, - unsigned int); +#ifdef CONFIG_ATA_ACPI extern u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle); +#endif /* PCI */ #ifdef CONFIG_PCI @@ -1805,6 +1801,18 @@ static inline int ata_dma_enabled(struct ata_device *adev) return (adev->dma_mode == 0xFF ? 0 : 1); } +/************************************************************************** + * PATA timings - drivers/ata/libata-pata-timings.c + */ +#ifdef CONFIG_PATA_TIMINGS +extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode); +extern int ata_timing_compute(struct ata_device *, unsigned short, + struct ata_timing *, int, int); +extern void ata_timing_merge(const struct ata_timing *, + const struct ata_timing *, struct ata_timing *, + unsigned int); +#endif + /************************************************************************** * PMP - drivers/ata/libata-pmp.c */ From patchwork Tue Jan 28 13:33:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230341 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=hfj5AkmD; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKp4GbMz9sSQ for ; Wed, 29 Jan 2020 00:35:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726445AbgA1NeR (ORCPT ); Tue, 28 Jan 2020 08:34:17 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58904 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726482AbgA1NeQ (ORCPT ); Tue, 28 Jan 2020 08:34:16 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133415euoutp0136806a5c1998f62a40e2a48f75fe0c3c~uEFACubP60189001890euoutp01K for ; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133415euoutp0136806a5c1998f62a40e2a48f75fe0c3c~uEFACubP60189001890euoutp01K DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218455; bh=wpx4TLvxtzogQETiS4e9c/g9SsM92c85oTXZs5jViAI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hfj5AkmDYLmmLDUTbS5auyrA+cAIS/YPvoKwVE46fzTSz2CMDjYhjmrwmIEo5crIY VdXxvnurYw5Wfl29jB8bFtv1o+XRjKQlyjLnAhhjk6PbzwcgFyFLcbc4edtaBf32qi s1iiP9G6K/ZU8t/AaQrUyCLPS/pfEyKtM+rHK2JY= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133414eucas1p279a5e9b876f0f3b1705ed35a19b4a088~uEE-03qPM3248732487eucas1p2Z; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 7D.CA.61286.658303E5; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133414eucas1p1c69ee66d4799a5aea22561b42ab73e11~uEE-Y4uLG1375113751eucas1p1F; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133414eusmtrp29879237e06f2b9be32471836e32f0638~uEE-YV7lK0330003300eusmtrp2w; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-7c-5e303856b750 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 12.92.08375.658303E5; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133414eusmtip281ce51848b3413606a30e0434311f388~uEE-Dkagk0657406574eusmtip2d; Tue, 28 Jan 2020 13:34:13 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 11/28] ata: add CONFIG_SATA_HOST=n version of ata_ncq_enabled() Date: Tue, 28 Jan 2020 14:33:26 +0100 Message-Id: <20200128133343.29905-12-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFKsWRmVeSWpSXmKPExsWy7djP87phFgZxBl/P6lusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK6Nr82fWgqdcFX8mXmRtYFzA0cXIySEhYCLR/LabtYuRi0NIYAWjxPnzv1kg nC+MEi/+/YDKfGaU2DKllRWm5fLsr1BVyxklDjyczgTXsmvzBjaQKjYBK4mJ7asYQWwRAQWJ nt8r2UCKmAXWMEqsOtwElhAWCJRY1XGfHcRmEVCVOLzuCNgKXgE7iT+bnjBBrJOX2PrtE1Cc g4MTKN6z1xyiRFDi5MwnLCA2M1BJ89bZzCDzJQTa2SWe3V/CDtHrIvHr50YoW1ji1fEtULaM xP+d85kgGtYxSvzteAHVvZ1RYvnkf2wQVdYSd879YgPZzCygKbF+lz5E2FGif1M/M0hYQoBP 4sZbQYgj+CQmbZsOFeaV6GgTgqhWk9iwbAMbzNqunSuZIWwPiW0bVjFPYFScheSdWUjemYWw dwEj8ypG8dTS4tz01GLDvNRyveLE3OLSvHS95PzcTYzAFHP63/FPOxi/Xko6xCjAwajEwztD xSBOiDWxrLgy9xCjBAezkghvJxNQiDclsbIqtSg/vqg0J7X4EKM0B4uSOK/xopexQgLpiSWp 2ampBalFMFkmDk6pBsZqxTflRQ1rnh3fn3N6vc/Xpd0d21++nl58MDWfoTYzaqZSm0znAz3Z ynU8y4/VHexYtW63XnDIsSTxJJeEdYef1v5nibOLu7JqV/uXhlS1tmqNDaeKzrfv0dit2uIY kzwv6eVx3a7p/RX8JhbhSUdbbP5XnneYP9Wu+OMm4bfFHo85VrFu2K7EUpyRaKjFXFScCACY WX7jLQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeLIzCtJLcpLzFFi42I5/e/4Pd0wC4M4g0drRSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl9G1+TNrwVOu ij8TL7I2MC7g6GLk5JAQMJG4PPsrSxcjF4eQwFJGiXcTl7F1MXIAJWQkjq8vg6gRlvhzrYsN xBYS+MQo0XLKHcRmE7CSmNi+ihHEFhFQkOj5vZINZA6zwAZGiVc3v7CAJIQF/CWmXm1lBrFZ BFQlDq87wgpi8wrYSfzZ9IQJYoG8xNZvn1hB9nICxXv2mkPsspVYf+YpVLmgxMmZT8BGMgOV N2+dzTyBUWAWktQsJKkFjEyrGEVSS4tz03OLDfWKE3OLS/PS9ZLzczcxAqNg27Gfm3cwXtoY fIhRgINRiYd3hopBnBBrYllxZe4hRgkOZiUR3k4moBBvSmJlVWpRfnxRaU5q8SFGU6AfJjJL iSbnAyM0ryTe0NTQ3MLS0NzY3NjMQkmct0PgYIyQQHpiSWp2ampBahFMHxMHp1QDo76HxpV/ iXNy1NT0lX/HR76euXFm+6Z9Nj/uKZ5+uKxwV2LyTra4ToYLwTXpC4V+lRSVVU7cuj7ziXJb 5DofJkahzrd+03svTU5SXbO+3dshdtmGK2tjAzN7K/b1Oqps8Jr85bBDi2gy84lbm/k283mv 2OjD53SsM2l6jOq1pb4nLzcfjfp9XYmlOCPRUIu5qDgRAAjPcIyYAgAA X-CMS-MailID: 20200128133414eucas1p1c69ee66d4799a5aea22561b42ab73e11 X-Msg-Generator: CA X-RootMTR: 20200128133414eucas1p1c69ee66d4799a5aea22561b42ab73e11 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133414eucas1p1c69ee66d4799a5aea22561b42ab73e11 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org When CONFIG_SATA_HOST=n there are no NCQ capable host drivers built so it is safe to hardwire ata_ncq_enabled() to always return zero. Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 37820 572 40 38432 9620 drivers/ata/libata-core.o 21040 105 4096 25241 6299 drivers/ata/libata-scsi.o 17405 18 0 17423 440f drivers/ata/libata-eh.o after: 37582 572 40 38194 9532 drivers/ata/libata-core.o 20702 105 4096 24903 6147 drivers/ata/libata-scsi.o 17353 18 0 17371 43db drivers/ata/libata-eh.o Signed-off-by: Bartlomiej Zolnierkiewicz --- include/linux/libata.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/linux/libata.h b/include/linux/libata.h index 79953c6d769c..5b7bed18f56e 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1633,8 +1633,12 @@ extern struct ata_device *ata_dev_next(struct ata_device *dev, */ static inline int ata_ncq_enabled(struct ata_device *dev) { +#ifdef CONFIG_SATA_HOST return (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ_OFF | ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ; +#else + return 0; +#endif } static inline bool ata_fpdma_dsm_supported(struct ata_device *dev) From patchwork Tue Jan 28 13:33:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230338 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=h3nPfmnZ; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKk5Cjyz9sSQ for ; Wed, 29 Jan 2020 00:35:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726323AbgA1NfW (ORCPT ); Tue, 28 Jan 2020 08:35:22 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58898 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726481AbgA1NeR (ORCPT ); Tue, 28 Jan 2020 08:34:17 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133415euoutp010f8dabb9809a2106db752384fd277a72~uEFAYxAkd0286702867euoutp01W for ; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133415euoutp010f8dabb9809a2106db752384fd277a72~uEFAYxAkd0286702867euoutp01W DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218455; bh=3uYMSAA1WyojWrdPwQGuRlb/VV0u+NCe8ys3XAQpI7w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=h3nPfmnZove6ymJ0F2+Ti/vVXUMcp+yEPG9lwLrXWDKEs4ympICj4XuxmbfSpgrNg tGn/A2YTjrdITaMx8kWCuyChrsPj8oNpbKEsMoN75gInt2ofT/g+Gpm3OFE/TmBxhx OZkmAGmCQCdbcGSicgkg0EaMKZ471DWjDpzZB4yA= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133415eucas1p13a1220ac6eb18b14ef4d123862821eec~uEFAJfkqK1372113721eucas1p1D; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 3E.CA.61286.758303E5; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133414eucas1p2baefeb1a492375b18bdf6cdfbd0db796~uEE-wxc433228632286eucas1p2l; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133414eusmtrp2d069b470b42661cdc5dd67ff1b4e3ddd~uEE-wOcls0330103301eusmtrp2w; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-7e-5e30385729dc Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id F2.92.08375.658303E5; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133414eusmtip21b39c6c1bb4b68cbd13b411ebb4e7ec5~uEE-Xb22a0657406574eusmtip2e; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 12/28] ata: start separating SATA specific code from libata-core.c Date: Tue, 28 Jan 2020 14:33:27 +0100 Message-Id: <20200128133343.29905-13-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFKsWRmVeSWpSXmKPExsWy7djP87rhFgZxBq8msFusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+P7+ttsBdfmMlZs/LuEvYHxZ20XIyeHhICJxLnjh9m6GLk4hARWMEr0fu5m BUkICXxhlFjc7QuR+Mwo8ff9VDaYjolvvrJCJJYzStz928oE4QB1/O/awQ5SxSZgJTGxfRUj iC0ioCDR83sl2A5mgTWMEqsON4ElhAVCJJ7OPgrWwCKgKnH4wi8wm1fATmL1vdtQ6+Qltn77 BLSOg4MTKN6z1xyiRFDi5MwnLCA2M1BJ89bZzCDzJQTa2SU+zvzLDtHrIrHr6m0mCFtY4tXx LVBxGYn/O+czQTSsA/qt4wVU93ZGieWT/0Fttpa4c+4XG8hmZgFNifW79CHCjhLv+1sZQcIS AnwSN94KQhzBJzFp23RmiDCvREebEES1msSGZRvYYNZ27VzJDGF7SJxcfZRlAqPiLCTvzELy ziyEvQsYmVcxiqeWFuempxYb5qWW6xUn5haX5qXrJefnbmIEppjT/45/2sH49VLSIUYBDkYl Ht4ZKgZxQqyJZcWVuYcYJTiYlUR4O5mAQrwpiZVVqUX58UWlOanFhxilOViUxHmNF72MFRJI TyxJzU5NLUgtgskycXBKNTDmxDKv+3PuXIDOw/rUS6cZVhyRctu1z2VjRlOuBfuGHUeUlr0O 3vMypFUoyMVEIvbnpPQflmwWuYetXATnSR1SP/A44XnrTZPfR6v9047GzDXPvL7z2rJvz+Yd NTZ1m30/IWbKnP8py+6u/Wc7TeWWdFKbwm8vxhtvGtbP27bK/GeV7nXxop4yJZbijERDLeai 4kQA8IWspS0DAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd0wC4M4g8M/NCxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl/F9/W22gmtz GSs2/l3C3sD4s7aLkZNDQsBEYuKbr6xdjFwcQgJLGSVe7pwN5HAAJWQkjq8vg6gRlvhzrYsN ouYTUM30m2wgCTYBK4mJ7asYQWwRAQWJnt8rwYqYBTYwSry6+YUFZJCwQJDErm1gg1gEVCUO X/jFDmLzCthJrL53mw1igbzE1m+fwPZyAsV79pqDhIUEbCXWn3nKClEuKHFy5hMWEJsZqLx5 62zmCYwCs5CkZiFJLWBkWsUoklpanJueW2yoV5yYW1yal66XnJ+7iREYB9uO/dy8g/HSxuBD jAIcjEo8vDNUDOKEWBPLiitzDzFKcDArifB2MgGFeFMSK6tSi/Lji0pzUosPMZoC/TCRWUo0 OR8Yo3kl8YamhuYWlobmxubGZhZK4rwdAgdjhATSE0tSs1NTC1KLYPqYODilGhi7ZLLNLEU9 A0W3S7FPtEs6UPzhguwqzsLOJwJzFudK72GWZjdv2B/Ju8WffVPu38ld+vXq09dM79APtlr5 LOL0CbsGTevrrRuldhxYpLyhx+yq6m3THUuNruqxBYa9mSHKEfAg1jFw6rZb21duKVdwaZA4 kCn2fe0yl86vH4QUbnvV+R7gn6HEUpyRaKjFXFScCABAP4v2mQIAAA== X-CMS-MailID: 20200128133414eucas1p2baefeb1a492375b18bdf6cdfbd0db796 X-Msg-Generator: CA X-RootMTR: 20200128133414eucas1p2baefeb1a492375b18bdf6cdfbd0db796 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133414eucas1p2baefeb1a492375b18bdf6cdfbd0db796 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Start separating SATA specific code from libata-core.c: * move following functions to libata-core-sata.c: - ata_tf_to_fis() - ata_tf_from_fis() - sata_link_scr_lpm() - ata_slave_link_init() - sata_lpm_ignore_phy_events() * group above functions together in and cover them with CONFIG_SATA_HOST ifdef * include libata-core-sata.c in the build when CONFIG_SATA_HOST=y Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 37582 572 40 38194 9532 drivers/ata/libata-core.o after: 36762 572 40 37374 91fe drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/Makefile | 1 + drivers/ata/libata-core-sata.c | 258 +++++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 245 ------------------------------- include/linux/libata.h | 18 ++- 4 files changed, 271 insertions(+), 251 deletions(-) create mode 100644 drivers/ata/libata-core-sata.c diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index cdaf965fed25..b06b9a211691 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -123,6 +123,7 @@ obj-$(CONFIG_PATA_LEGACY) += pata_legacy.o libata-y := libata-core.o libata-scsi.o libata-eh.o \ libata-transport.o libata-trace.o +libata-$(CONFIG_SATA_HOST) += libata-core-sata.o libata-$(CONFIG_ATA_SFF) += libata-sff.o libata-$(CONFIG_SATA_PMP) += libata-pmp.o libata-$(CONFIG_ATA_ACPI) += libata-acpi.o diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c new file mode 100644 index 000000000000..8b939d2db0a6 --- /dev/null +++ b/drivers/ata/libata-core-sata.c @@ -0,0 +1,258 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * libata-core-sata.c - SATA specific part of ATA helper library + * + * Copyright 2003-2004 Red Hat, Inc. All rights reserved. + * Copyright 2003-2004 Jeff Garzik + */ + +#include +#include +#include + +#include "libata.h" + +/** + * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure + * @tf: Taskfile to convert + * @pmp: Port multiplier port + * @is_cmd: This FIS is for command + * @fis: Buffer into which data will output + * + * Converts a standard ATA taskfile to a Serial ATA + * FIS structure (Register - Host to Device). + * + * LOCKING: + * Inherited from caller. + */ +void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis) +{ + fis[0] = 0x27; /* Register - Host to Device FIS */ + fis[1] = pmp & 0xf; /* Port multiplier number*/ + if (is_cmd) + fis[1] |= (1 << 7); /* bit 7 indicates Command FIS */ + + fis[2] = tf->command; + fis[3] = tf->feature; + + fis[4] = tf->lbal; + fis[5] = tf->lbam; + fis[6] = tf->lbah; + fis[7] = tf->device; + + fis[8] = tf->hob_lbal; + fis[9] = tf->hob_lbam; + fis[10] = tf->hob_lbah; + fis[11] = tf->hob_feature; + + fis[12] = tf->nsect; + fis[13] = tf->hob_nsect; + fis[14] = 0; + fis[15] = tf->ctl; + + fis[16] = tf->auxiliary & 0xff; + fis[17] = (tf->auxiliary >> 8) & 0xff; + fis[18] = (tf->auxiliary >> 16) & 0xff; + fis[19] = (tf->auxiliary >> 24) & 0xff; +} +EXPORT_SYMBOL_GPL(ata_tf_to_fis); + +/** + * ata_tf_from_fis - Convert SATA FIS to ATA taskfile + * @fis: Buffer from which data will be input + * @tf: Taskfile to output + * + * Converts a serial ATA FIS structure to a standard ATA taskfile. + * + * LOCKING: + * Inherited from caller. + */ + +void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf) +{ + tf->command = fis[2]; /* status */ + tf->feature = fis[3]; /* error */ + + tf->lbal = fis[4]; + tf->lbam = fis[5]; + tf->lbah = fis[6]; + tf->device = fis[7]; + + tf->hob_lbal = fis[8]; + tf->hob_lbam = fis[9]; + tf->hob_lbah = fis[10]; + + tf->nsect = fis[12]; + tf->hob_nsect = fis[13]; +} +EXPORT_SYMBOL_GPL(ata_tf_from_fis); + +/** + * sata_link_scr_lpm - manipulate SControl IPM and SPM fields + * @link: ATA link to manipulate SControl for + * @policy: LPM policy to configure + * @spm_wakeup: initiate LPM transition to active state + * + * Manipulate the IPM field of the SControl register of @link + * according to @policy. If @policy is ATA_LPM_MAX_POWER and + * @spm_wakeup is %true, the SPM field is manipulated to wake up + * the link. This function also clears PHYRDY_CHG before + * returning. + * + * LOCKING: + * EH context. + * + * RETURNS: + * 0 on success, -errno otherwise. + */ +int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, + bool spm_wakeup) +{ + struct ata_eh_context *ehc = &link->eh_context; + bool woken_up = false; + u32 scontrol; + int rc; + + rc = sata_scr_read(link, SCR_CONTROL, &scontrol); + if (rc) + return rc; + + switch (policy) { + case ATA_LPM_MAX_POWER: + /* disable all LPM transitions */ + scontrol |= (0x7 << 8); + /* initiate transition to active state */ + if (spm_wakeup) { + scontrol |= (0x4 << 12); + woken_up = true; + } + break; + case ATA_LPM_MED_POWER: + /* allow LPM to PARTIAL */ + scontrol &= ~(0x1 << 8); + scontrol |= (0x6 << 8); + break; + case ATA_LPM_MED_POWER_WITH_DIPM: + case ATA_LPM_MIN_POWER_WITH_PARTIAL: + case ATA_LPM_MIN_POWER: + if (ata_link_nr_enabled(link) > 0) + /* no restrictions on LPM transitions */ + scontrol &= ~(0x7 << 8); + else { + /* empty port, power off */ + scontrol &= ~0xf; + scontrol |= (0x1 << 2); + } + break; + default: + WARN_ON(1); + } + + rc = sata_scr_write(link, SCR_CONTROL, scontrol); + if (rc) + return rc; + + /* give the link time to transit out of LPM state */ + if (woken_up) + msleep(10); + + /* clear PHYRDY_CHG from SError */ + ehc->i.serror &= ~SERR_PHYRDY_CHG; + return sata_scr_write(link, SCR_ERROR, SERR_PHYRDY_CHG); +} +EXPORT_SYMBOL_GPL(sata_link_scr_lpm); + +/** + * ata_slave_link_init - initialize slave link + * @ap: port to initialize slave link for + * + * Create and initialize slave link for @ap. This enables slave + * link handling on the port. + * + * In libata, a port contains links and a link contains devices. + * There is single host link but if a PMP is attached to it, + * there can be multiple fan-out links. On SATA, there's usually + * a single device connected to a link but PATA and SATA + * controllers emulating TF based interface can have two - master + * and slave. + * + * However, there are a few controllers which don't fit into this + * abstraction too well - SATA controllers which emulate TF + * interface with both master and slave devices but also have + * separate SCR register sets for each device. These controllers + * need separate links for physical link handling + * (e.g. onlineness, link speed) but should be treated like a + * traditional M/S controller for everything else (e.g. command + * issue, softreset). + * + * slave_link is libata's way of handling this class of + * controllers without impacting core layer too much. For + * anything other than physical link handling, the default host + * link is used for both master and slave. For physical link + * handling, separate @ap->slave_link is used. All dirty details + * are implemented inside libata core layer. From LLD's POV, the + * only difference is that prereset, hardreset and postreset are + * called once more for the slave link, so the reset sequence + * looks like the following. + * + * prereset(M) -> prereset(S) -> hardreset(M) -> hardreset(S) -> + * softreset(M) -> postreset(M) -> postreset(S) + * + * Note that softreset is called only for the master. Softreset + * resets both M/S by definition, so SRST on master should handle + * both (the standard method will work just fine). + * + * LOCKING: + * Should be called before host is registered. + * + * RETURNS: + * 0 on success, -errno on failure. + */ +int ata_slave_link_init(struct ata_port *ap) +{ + struct ata_link *link; + + WARN_ON(ap->slave_link); + WARN_ON(ap->flags & ATA_FLAG_PMP); + + link = kzalloc(sizeof(*link), GFP_KERNEL); + if (!link) + return -ENOMEM; + + ata_link_init(ap, link, 1); + ap->slave_link = link; + return 0; +} +EXPORT_SYMBOL_GPL(ata_slave_link_init); + +/** + * sata_lpm_ignore_phy_events - test if PHY event should be ignored + * @link: Link receiving the event + * + * Test whether the received PHY event has to be ignored or not. + * + * LOCKING: + * None: + * + * RETURNS: + * True if the event has to be ignored. + */ +bool sata_lpm_ignore_phy_events(struct ata_link *link) +{ + unsigned long lpm_timeout = link->last_lpm_change + + msecs_to_jiffies(ATA_TMOUT_SPURIOUS_PHY); + + /* if LPM is enabled, PHYRDY doesn't mean anything */ + if (link->lpm_policy > ATA_LPM_MAX_POWER) + return true; + + /* ignore the first PHY event after the LPM policy changed + * as it is might be spurious + */ + if ((link->flags & ATA_LFLAG_CHANGED) && + time_before(jiffies, lpm_timeout)) + return true; + + return false; +} +EXPORT_SYMBOL_GPL(sata_lpm_ignore_phy_events); diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 408dee580f24..24b8ee668e6f 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -531,81 +531,6 @@ int atapi_cmd_type(u8 opcode) } EXPORT_SYMBOL_GPL(atapi_cmd_type); -/** - * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure - * @tf: Taskfile to convert - * @pmp: Port multiplier port - * @is_cmd: This FIS is for command - * @fis: Buffer into which data will output - * - * Converts a standard ATA taskfile to a Serial ATA - * FIS structure (Register - Host to Device). - * - * LOCKING: - * Inherited from caller. - */ -void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis) -{ - fis[0] = 0x27; /* Register - Host to Device FIS */ - fis[1] = pmp & 0xf; /* Port multiplier number*/ - if (is_cmd) - fis[1] |= (1 << 7); /* bit 7 indicates Command FIS */ - - fis[2] = tf->command; - fis[3] = tf->feature; - - fis[4] = tf->lbal; - fis[5] = tf->lbam; - fis[6] = tf->lbah; - fis[7] = tf->device; - - fis[8] = tf->hob_lbal; - fis[9] = tf->hob_lbam; - fis[10] = tf->hob_lbah; - fis[11] = tf->hob_feature; - - fis[12] = tf->nsect; - fis[13] = tf->hob_nsect; - fis[14] = 0; - fis[15] = tf->ctl; - - fis[16] = tf->auxiliary & 0xff; - fis[17] = (tf->auxiliary >> 8) & 0xff; - fis[18] = (tf->auxiliary >> 16) & 0xff; - fis[19] = (tf->auxiliary >> 24) & 0xff; -} -EXPORT_SYMBOL_GPL(ata_tf_to_fis); - -/** - * ata_tf_from_fis - Convert SATA FIS to ATA taskfile - * @fis: Buffer from which data will be input - * @tf: Taskfile to output - * - * Converts a serial ATA FIS structure to a standard ATA taskfile. - * - * LOCKING: - * Inherited from caller. - */ - -void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf) -{ - tf->command = fis[2]; /* status */ - tf->feature = fis[3]; /* error */ - - tf->lbal = fis[4]; - tf->lbam = fis[5]; - tf->lbah = fis[6]; - tf->device = fis[7]; - - tf->hob_lbal = fis[8]; - tf->hob_lbam = fis[9]; - tf->hob_lbah = fis[10]; - - tf->nsect = fis[12]; - tf->hob_nsect = fis[13]; -} -EXPORT_SYMBOL_GPL(ata_tf_from_fis); - static const u8 ata_rw_cmds[] = { /* pio multi */ ATA_CMD_READ_MULTI, @@ -3777,81 +3702,6 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params, } EXPORT_SYMBOL_GPL(sata_link_resume); -/** - * sata_link_scr_lpm - manipulate SControl IPM and SPM fields - * @link: ATA link to manipulate SControl for - * @policy: LPM policy to configure - * @spm_wakeup: initiate LPM transition to active state - * - * Manipulate the IPM field of the SControl register of @link - * according to @policy. If @policy is ATA_LPM_MAX_POWER and - * @spm_wakeup is %true, the SPM field is manipulated to wake up - * the link. This function also clears PHYRDY_CHG before - * returning. - * - * LOCKING: - * EH context. - * - * RETURNS: - * 0 on success, -errno otherwise. - */ -int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, - bool spm_wakeup) -{ - struct ata_eh_context *ehc = &link->eh_context; - bool woken_up = false; - u32 scontrol; - int rc; - - rc = sata_scr_read(link, SCR_CONTROL, &scontrol); - if (rc) - return rc; - - switch (policy) { - case ATA_LPM_MAX_POWER: - /* disable all LPM transitions */ - scontrol |= (0x7 << 8); - /* initiate transition to active state */ - if (spm_wakeup) { - scontrol |= (0x4 << 12); - woken_up = true; - } - break; - case ATA_LPM_MED_POWER: - /* allow LPM to PARTIAL */ - scontrol &= ~(0x1 << 8); - scontrol |= (0x6 << 8); - break; - case ATA_LPM_MED_POWER_WITH_DIPM: - case ATA_LPM_MIN_POWER_WITH_PARTIAL: - case ATA_LPM_MIN_POWER: - if (ata_link_nr_enabled(link) > 0) - /* no restrictions on LPM transitions */ - scontrol &= ~(0x7 << 8); - else { - /* empty port, power off */ - scontrol &= ~0xf; - scontrol |= (0x1 << 2); - } - break; - default: - WARN_ON(1); - } - - rc = sata_scr_write(link, SCR_CONTROL, scontrol); - if (rc) - return rc; - - /* give the link time to transit out of LPM state */ - if (woken_up) - msleep(10); - - /* clear PHYRDY_CHG from SError */ - ehc->i.serror &= ~SERR_PHYRDY_CHG; - return sata_scr_write(link, SCR_ERROR, SERR_PHYRDY_CHG); -} -EXPORT_SYMBOL_GPL(sata_link_scr_lpm); - /** * ata_std_prereset - prepare for reset * @link: ATA link to be reset @@ -6116,69 +5966,6 @@ struct ata_host *ata_host_alloc_pinfo(struct device *dev, } EXPORT_SYMBOL_GPL(ata_host_alloc_pinfo); -/** - * ata_slave_link_init - initialize slave link - * @ap: port to initialize slave link for - * - * Create and initialize slave link for @ap. This enables slave - * link handling on the port. - * - * In libata, a port contains links and a link contains devices. - * There is single host link but if a PMP is attached to it, - * there can be multiple fan-out links. On SATA, there's usually - * a single device connected to a link but PATA and SATA - * controllers emulating TF based interface can have two - master - * and slave. - * - * However, there are a few controllers which don't fit into this - * abstraction too well - SATA controllers which emulate TF - * interface with both master and slave devices but also have - * separate SCR register sets for each device. These controllers - * need separate links for physical link handling - * (e.g. onlineness, link speed) but should be treated like a - * traditional M/S controller for everything else (e.g. command - * issue, softreset). - * - * slave_link is libata's way of handling this class of - * controllers without impacting core layer too much. For - * anything other than physical link handling, the default host - * link is used for both master and slave. For physical link - * handling, separate @ap->slave_link is used. All dirty details - * are implemented inside libata core layer. From LLD's POV, the - * only difference is that prereset, hardreset and postreset are - * called once more for the slave link, so the reset sequence - * looks like the following. - * - * prereset(M) -> prereset(S) -> hardreset(M) -> hardreset(S) -> - * softreset(M) -> postreset(M) -> postreset(S) - * - * Note that softreset is called only for the master. Softreset - * resets both M/S by definition, so SRST on master should handle - * both (the standard method will work just fine). - * - * LOCKING: - * Should be called before host is registered. - * - * RETURNS: - * 0 on success, -errno on failure. - */ -int ata_slave_link_init(struct ata_port *ap) -{ - struct ata_link *link; - - WARN_ON(ap->slave_link); - WARN_ON(ap->flags & ATA_FLAG_PMP); - - link = kzalloc(sizeof(*link), GFP_KERNEL); - if (!link) - return -ENOMEM; - - ata_link_init(ap, link, 1); - ap->slave_link = link; - return 0; -} -EXPORT_SYMBOL_GPL(ata_slave_link_init); - static void ata_host_stop(struct device *gendev, void *res) { struct ata_host *host = dev_get_drvdata(gendev); @@ -7083,38 +6870,6 @@ u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val, } EXPORT_SYMBOL_GPL(ata_wait_register); -/** - * sata_lpm_ignore_phy_events - test if PHY event should be ignored - * @link: Link receiving the event - * - * Test whether the received PHY event has to be ignored or not. - * - * LOCKING: - * None: - * - * RETURNS: - * True if the event has to be ignored. - */ -bool sata_lpm_ignore_phy_events(struct ata_link *link) -{ - unsigned long lpm_timeout = link->last_lpm_change + - msecs_to_jiffies(ATA_TMOUT_SPURIOUS_PHY); - - /* if LPM is enabled, PHYRDY doesn't mean anything */ - if (link->lpm_policy > ATA_LPM_MAX_POWER) - return true; - - /* ignore the first PHY event after the LPM policy changed - * as it is might be spurious - */ - if ((link->flags & ATA_LFLAG_CHANGED) && - time_before(jiffies, lpm_timeout)) - return true; - - return false; -} -EXPORT_SYMBOL_GPL(sata_lpm_ignore_phy_events); - /* * Dummy port_ops */ diff --git a/include/linux/libata.h b/include/linux/libata.h index 5b7bed18f56e..6bb0bd644f17 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1084,8 +1084,6 @@ extern int sata_link_debounce(struct ata_link *link, const unsigned long *params, unsigned long deadline); extern int sata_link_resume(struct ata_link *link, const unsigned long *params, unsigned long deadline); -extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, - bool spm_wakeup); extern int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, unsigned long deadline, bool *online, int (*check_ready)(struct ata_link *)); @@ -1096,7 +1094,6 @@ extern void ata_std_postreset(struct ata_link *link, unsigned int *classes); extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports); extern struct ata_host *ata_host_alloc_pinfo(struct device *dev, const struct ata_port_info * const * ppi, int n_ports); -extern int ata_slave_link_init(struct ata_port *ap); extern void ata_host_get(struct ata_host *host); extern void ata_host_put(struct ata_host *host); extern int ata_host_start(struct ata_host *host); @@ -1154,9 +1151,6 @@ extern void ata_msleep(struct ata_port *ap, unsigned int msecs); extern u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val, unsigned long interval, unsigned long timeout); extern int atapi_cmd_type(u8 opcode); -extern void ata_tf_to_fis(const struct ata_taskfile *tf, - u8 pmp, int is_cmd, u8 *fis); -extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); extern unsigned long ata_pack_xfermask(unsigned long pio_mask, unsigned long mwdma_mask, unsigned long udma_mask); extern void ata_unpack_xfermask(unsigned long xfer_mask, @@ -1197,7 +1191,19 @@ extern struct ata_device *ata_dev_pair(struct ata_device *adev); extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev); extern void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap); extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_q); + +/* + * Core layer (SATA specific part) - drivers/ata/libata-core-sata.c + */ +#ifdef CONFIG_SATA_HOST +extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, + bool spm_wakeup); +extern int ata_slave_link_init(struct ata_port *ap); +extern void ata_tf_to_fis(const struct ata_taskfile *tf, + u8 pmp, int is_cmd, u8 *fis); +extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); extern bool sata_lpm_ignore_phy_events(struct ata_link *link); +#endif extern int ata_cable_40wire(struct ata_port *ap); extern int ata_cable_80wire(struct ata_port *ap); From patchwork Tue Jan 28 13:33:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230339 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=ft/2pzy0; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKm1BH7z9sS9 for ; Wed, 29 Jan 2020 00:35:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726443AbgA1NfW (ORCPT ); Tue, 28 Jan 2020 08:35:22 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58900 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726467AbgA1NeR (ORCPT ); Tue, 28 Jan 2020 08:34:17 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133415euoutp01f9811f8d7839225aef6204bb9e42de8b~uEFAvYgd20284402844euoutp01Z for ; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133415euoutp01f9811f8d7839225aef6204bb9e42de8b~uEFAvYgd20284402844euoutp01Z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218455; bh=Ark+fkMgLf1ZNUCc5wzMzdsqKRNjN891oQ1Cqnnqj+0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ft/2pzy0E7qOKRZOjsk3Me2pJ2sFjHHzuDiwI5RmuiGaHzr/YjOOk9z9Xzk5xRCDx 7bjjfYYL345fCfbjt5ezb8rk5oWezkygkQbfPOxrQxXOiiqv6uFgvuImPwe2D7H4dY IJ/A0zD3wIgZf6r2xC5UC+wDWAmaoERc8hGJCq2E= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133415eucas1p21456bb04fd2cbfdd63f1d9ade02c6b66~uEFAVY3xO1867618676eucas1p2c; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id BE.CA.61286.758303E5; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133415eucas1p258c0d5c313e2ae42a05508b67eec16ef~uEFABo90w1871818718eucas1p2I; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133415eusmtrp248656553bccf58a04aa8f5a33d7a6b05~uEFABHKpH0330003300eusmtrp20; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-80-5e3038571d9a Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id E0.82.07950.658303E5; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133414eusmtip2ac44a4cec89001bf562317e2180daeb9~uEE-rYOv10657406574eusmtip2f; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 13/28] ata: move ata_do_link_spd_horkage() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:28 +0100 Message-Id: <20200128133343.29905-14-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFKsWRmVeSWpSXmKPExsWy7djPc7rhFgZxBpvniVmsvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+P/rSdsBTvlKpb+usnUwHhFoouRk0NCwESif8kv1i5GLg4hgRWMEm07X7FD OF8YJdbseMcI4XxmlHjw+DgzTMuMFX3MEInljBLXNlxihmv5v/UfG0gVm4CVxMT2VYwgtoiA gkTP75VsIEXMAmsYJVYdbgJLCAsESXyatBHMZhFQlejsessCYvMK2El8eP+eEWKdvMTWb5+A LuTg4ASK9+w1hygRlDg58wlYOTNQSfPW2WBHSAi0s0ssWjudFaLXReLT+/0sELawxKvjW9gh bBmJ/zvnM0E0rGOU+NvxAqp7O6PE8skQL0gIWEvcOfeLDWQzs4CmxPpd+hBhR4nvG2aDhSUE +CRuvBWEOIJPYtK26cwQYV6JjjYhiGo1iQ3LNrDBrO3auRIaih4ST2ZdYpzAqDgLyTuzkLwz C2HvAkbmVYziqaXFuempxYZ5qeV6xYm5xaV56XrJ+bmbGIEp5vS/4592MH69lHSIUYCDUYmH d4aKQZwQa2JZcWXuIUYJDmYlEd5OJqAQb0piZVVqUX58UWlOavEhRmkOFiVxXuNFL2OFBNIT S1KzU1MLUotgskwcnFINjFo+dy61XvplE2QqIfvI+FTMrG9Xms/scfq3/dOl36VsL/mWeUwz rVu/q8XNZdMch8WRNQuCNzQZrP59ZeWnR41B8tOu9Tf4fg/9kLXtyoUTRcHageXfzY/w3Jf5 MMtMNXV9VIJNo/qtabsuWjJfd9bYVHzinuzf7dv47d9tPiPFv939qHgvV5MSS3FGoqEWc1Fx IgDGwjdCLQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd0wC4M4g5+Nthar7/azWWycsZ7V 4tmtvUwWx3Y8YrK4vGsOm8Xc1unsDmweO2fdZfe4fLbU49DhDkaPvi2rGD0+b5ILYI3SsynK Ly1JVcjILy6xVYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJzcksSy3St0vQy/h/6wlbwU65 iqW/bjI1MF6R6GLk5JAQMJGYsaKPuYuRi0NIYCmjRPO6RsYuRg6ghIzE8fVlEDXCEn+udbFB 1HxilHjStpIJJMEmYCUxsX0VI4gtIqAg0fN7JVgRs8AGRolXN7+wgCSEBQIkzjWfB7NZBFQl Orvegtm8AnYSH96/Z4TYIC+x9dsnVpDFnEDxnr3mIGEhAVuJ9WeeskKUC0qcnPkErJUZqLx5 62zmCYwCs5CkZiFJLWBkWsUoklpanJueW2ykV5yYW1yal66XnJ+7iREYB9uO/dyyg7HrXfAh RgEORiUeXgclgzgh1sSy4srcQ4wSHMxKIrydTEAh3pTEyqrUovz4otKc1OJDjKZAP0xklhJN zgfGaF5JvKGpobmFpaG5sbmxmYWSOG+HwMEYIYH0xJLU7NTUgtQimD4mDk6pBkbza/Nb+Xm2 5RtMXuZz4J31IhW3bTwV/y9Frzkh1596Yp7O6ntx1xdOTurJ+j7RKT730+0DB0/fX90ss7b+ 9+cL116+PW8X6GJxctutqTmMu1cFzrS5s9umtUfzR7Z/aK69rmlF6On051Kx86TS9dJND+pW du4pPP1BL3XfwlXlf3p63Q8sLl6rxFKckWioxVxUnAgARIMkgpkCAAA= X-CMS-MailID: 20200128133415eucas1p258c0d5c313e2ae42a05508b67eec16ef X-Msg-Generator: CA X-RootMTR: 20200128133415eucas1p258c0d5c313e2ae42a05508b67eec16ef X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133415eucas1p258c0d5c313e2ae42a05508b67eec16ef References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move ata_do_link_spd_horkage() to libata-core-sata.c * add static inline for CONFIG_SATA_HOST=n case Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 36762 572 40 37374 91fe drivers/ata/libata-core.o after: 36627 572 40 37239 9177 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 33 +++++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 33 --------------------------------- drivers/ata/libata.h | 7 +++++++ 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index 8b939d2db0a6..fed8009981c0 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -87,6 +87,39 @@ void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf) } EXPORT_SYMBOL_GPL(ata_tf_from_fis); +int ata_do_link_spd_horkage(struct ata_device *dev) +{ + struct ata_link *plink = ata_dev_phys_link(dev); + u32 target, target_limit; + + if (!sata_scr_valid(plink)) + return 0; + + if (dev->horkage & ATA_HORKAGE_1_5_GBPS) + target = 1; + else + return 0; + + target_limit = (1 << target) - 1; + + /* if already on stricter limit, no need to push further */ + if (plink->sata_spd_limit <= target_limit) + return 0; + + plink->sata_spd_limit = target_limit; + + /* Request another EH round by returning -EAGAIN if link is + * going faster than the target speed. Forward progress is + * guaranteed by setting sata_spd_limit to target_limit above. + */ + if (plink->sata_spd > target) { + ata_dev_info(dev, "applying link speed limit horkage to %s\n", + sata_spd_string(target)); + return -EAGAIN; + } + return 0; +} + /** * sata_link_scr_lpm - manipulate SControl IPM and SPM fields * @link: ATA link to manipulate SControl for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 24b8ee668e6f..52bd81bad484 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2074,39 +2074,6 @@ static bool ata_identify_page_supported(struct ata_device *dev, u8 page) return false; } -static int ata_do_link_spd_horkage(struct ata_device *dev) -{ - struct ata_link *plink = ata_dev_phys_link(dev); - u32 target, target_limit; - - if (!sata_scr_valid(plink)) - return 0; - - if (dev->horkage & ATA_HORKAGE_1_5_GBPS) - target = 1; - else - return 0; - - target_limit = (1 << target) - 1; - - /* if already on stricter limit, no need to push further */ - if (plink->sata_spd_limit <= target_limit) - return 0; - - plink->sata_spd_limit = target_limit; - - /* Request another EH round by returning -EAGAIN if link is - * going faster than the target speed. Forward progress is - * guaranteed by setting sata_spd_limit to target_limit above. - */ - if (plink->sata_spd > target) { - ata_dev_info(dev, "applying link speed limit horkage to %s\n", - sata_spd_string(target)); - return -EAGAIN; - } - return 0; -} - static inline u8 ata_dev_knobble(struct ata_device *dev) { struct ata_port *ap = dev->link->ap; diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index cd8090ad43e5..9eebe4e0be39 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -87,6 +87,13 @@ extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log, #define to_ata_port(d) container_of(d, struct ata_port, tdev) +/* libata-core-sata.c */ +#ifdef CONFIG_SATA_HOST +int ata_do_link_spd_horkage(struct ata_device *dev); +#else +static inline int ata_do_link_spd_horkage(struct ata_device *dev) { return 0; } +#endif + /* libata-acpi.c */ #ifdef CONFIG_ATA_ACPI extern unsigned int ata_acpi_gtf_filter; From patchwork Tue Jan 28 13:33:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230335 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=AS5HJMu8; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKS6qLRz9sSL for ; Wed, 29 Jan 2020 00:35:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726771AbgA1NfC (ORCPT ); Tue, 28 Jan 2020 08:35:02 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52378 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726496AbgA1NeS (ORCPT ); Tue, 28 Jan 2020 08:34:18 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133416euoutp0253c930be76be71e498651666373812c8~uEFBA8tXb2932529325euoutp02L for ; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133416euoutp0253c930be76be71e498651666373812c8~uEFBA8tXb2932529325euoutp02L DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218456; bh=YJuztuDcbtIa1CTQmlrIwWwmuUQVBn+CSkuRet1nkR8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AS5HJMu8y1zv72dmiZLal3rxhpOhbK/1NnaztVv+l7HyRdyBVMQcfxlvVVeY/xYDt UM/rceEbn6aCWezx6btP3QJ3IYNKOFjKSxv/ZOjCWk70QTpW8kvPy8bamoRnkNnF/S i1AaFQPPeX7QSNhsFwHzUtQuxBpvt0JdChGKqYT0= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133415eucas1p24a251a44e423d3382f722c7a2bf472d7~uEFAzRnRQ1867618676eucas1p2e; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 8F.CA.61286.758303E5; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133415eucas1p1cd35ec3ee9783b76c1a32de63796ce30~uEFAUmukq0087500875eucas1p1-; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133415eusmtrp2326360a694214c3d920da348f5247054~uEFAT_xGq0330003300eusmtrp21; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-84-5e303857529c Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 93.92.08375.758303E5; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133415eusmtip2980e30d713ad90fcf10fd3e1397f9405~uEE--HvAl0685506855eusmtip2X; Tue, 28 Jan 2020 13:34:14 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 14/28] ata: move ata_dev_config_ncq*() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:29 +0100 Message-Id: <20200128133343.29905-15-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprOKsWRmVeSWpSXmKPExsWy7djPc7rhFgZxBg++mlisvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK2Nak1vBybCK6bPWMzYwLnbtYuTgkBAwkbg5W6mLkYtDSGAFo8Tjv1dYIZwv jBKHtvUzQzifGSXmblgBlOEE6zjwfR1U1XJGicMXXjLDtfzYvZUFpIpNwEpiYvsqRhBbREBB ouf3SjaQImaBNYwSqw43gSWEBXwkNs+4yw5iswioSrzrfswOchSvgJ1E4x4hiG3yElu/fWIF CXMChXv2moOEeQUEJU7OfAK2ihmopHnrbLAbJAS62SU2nNjHBtHrIvF9/WdmCFtY4tXxLewQ tozE/53zmSAa1jFK/O14AdW9nVFi+eR/UN3WEnfO/WID2cwsoCmxfpc+RNhRYvedB6yQwOOT uPFWEOIIPolJ26YzQ4R5JTraoM5Xk9iwbAMbzNqunSuhzvGQuDxzG/sERsVZSN6ZheSdWQh7 FzAyr2IUTy0tzk1PLTbMSy3XK07MLS7NS9dLzs/dxAhMLqf/Hf+0g/HrpaRDjAIcjEo8vDNU DOKEWBPLiitzDzFKcDArifB2MgGFeFMSK6tSi/Lji0pzUosPMUpzsCiJ8xovehkrJJCeWJKa nZpakFoEk2Xi4JRqYCyM5ue6XfVymaq75tbkCTY6K4SyHxjNM/nRdi5YcL7/pn/H5/ySFc9i W6B4ee7UEJuOHC2e62E5b3gfqE/jvBHce5h9Scf5CQWpN1at+nJhnprKln8cfgUxuwRPsly5 r7vgEOts4dRAy4VvNDqfChpoVjzTUPRraXEKErIXzatbF6FRkeV0QImlOCPRUIu5qDgRAK3Y JVMqAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmkeLIzCtJLcpLzFFi42I5/e/4Pd1wC4M4gymLRCxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5eglzGtya3gZFjF 9FnrGRsYF7t2MXJySAiYSBz4vo61i5GLQ0hgKaPE8dapjF2MHEAJGYnj68sgaoQl/lzrYgOx hQQ+MUp82+MAYrMJWElMbF/FCGKLCChI9PxeyQYyh1lgA6PEq5tfWEASwgI+Eptn3GUHsVkE VCXedT9mB5nPK2An0bhHCGK+vMTWb59YQcKcQOGeveYQq2wl1p95ygpi8woISpyc+QRsIjNQ efPW2cwTGAVmIUnNQpJawMi0ilEktbQ4Nz232FCvODG3uDQvXS85P3cTIzACth37uXkH46WN wYcYBTgYlXh4Z6gYxAmxJpYVV+YeYpTgYFYS4e1kAgrxpiRWVqUW5ccXleakFh9iNAV6YSKz lGhyPjA680riDU0NzS0sDc2NzY3NLJTEeTsEDsYICaQnlqRmp6YWpBbB9DFxcEo1MCo+iS+Y Ud+psa3jYpyNK7/y+8b/JpOSbu98KJDGWi708ewPxd2flQ5nzzISzk/hmbff+GqNrOGy7FNB C9zfP9j0/bv+/Fm6i3KmsBRK3zt9/HAds22g8fL8r/I3Xn76Zt15eUbzhAtT9ff+2pf+6uc8 vR/MtT+5qu79rg9TPJps9qLjh/yvxHVKLMUZiYZazEXFiQAMSQwPlgIAAA== X-CMS-MailID: 20200128133415eucas1p1cd35ec3ee9783b76c1a32de63796ce30 X-Msg-Generator: CA X-RootMTR: 20200128133415eucas1p1cd35ec3ee9783b76c1a32de63796ce30 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133415eucas1p1cd35ec3ee9783b76c1a32de63796ce30 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move ata_log_supported() to libata.h and make it inline * move ata_dev_config_ncq*() to libata-core-sata.c * add static inline version of ata_dev_config_ncq() for CONFIG_SATA_HOST=n case Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 36627 572 40 37239 9177 drivers/ata/libata-core.o after: 35499 572 40 36111 8d0f drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 138 ++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 148 --------------------------------- drivers/ata/libata.h | 18 ++++ 3 files changed, 156 insertions(+), 148 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index fed8009981c0..f2629e069a55 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -120,6 +120,144 @@ int ata_do_link_spd_horkage(struct ata_device *dev) return 0; } +static void ata_dev_config_ncq_send_recv(struct ata_device *dev) +{ + struct ata_port *ap = dev->link->ap; + unsigned int err_mask; + + if (!ata_log_supported(dev, ATA_LOG_NCQ_SEND_RECV)) { + ata_dev_warn(dev, "NCQ Send/Recv Log not supported\n"); + return; + } + err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_SEND_RECV, + 0, ap->sector_buf, 1); + if (err_mask) { + ata_dev_dbg(dev, + "failed to get NCQ Send/Recv Log Emask 0x%x\n", + err_mask); + } else { + u8 *cmds = dev->ncq_send_recv_cmds; + + dev->flags |= ATA_DFLAG_NCQ_SEND_RECV; + memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_SEND_RECV_SIZE); + + if (dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) { + ata_dev_dbg(dev, "disabling queued TRIM support\n"); + cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &= + ~ATA_LOG_NCQ_SEND_RECV_DSM_TRIM; + } + } +} + +static void ata_dev_config_ncq_non_data(struct ata_device *dev) +{ + struct ata_port *ap = dev->link->ap; + unsigned int err_mask; + + if (!ata_log_supported(dev, ATA_LOG_NCQ_NON_DATA)) { + ata_dev_warn(dev, + "NCQ Send/Recv Log not supported\n"); + return; + } + err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_NON_DATA, + 0, ap->sector_buf, 1); + if (err_mask) { + ata_dev_dbg(dev, + "failed to get NCQ Non-Data Log Emask 0x%x\n", + err_mask); + } else { + u8 *cmds = dev->ncq_non_data_cmds; + + memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_NON_DATA_SIZE); + } +} + +static void ata_dev_config_ncq_prio(struct ata_device *dev) +{ + struct ata_port *ap = dev->link->ap; + unsigned int err_mask; + + if (!(dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE)) { + dev->flags &= ~ATA_DFLAG_NCQ_PRIO; + return; + } + + err_mask = ata_read_log_page(dev, + ATA_LOG_IDENTIFY_DEVICE, + ATA_LOG_SATA_SETTINGS, + ap->sector_buf, + 1); + if (err_mask) { + ata_dev_dbg(dev, + "failed to get Identify Device data, Emask 0x%x\n", + err_mask); + return; + } + + if (ap->sector_buf[ATA_LOG_NCQ_PRIO_OFFSET] & BIT(3)) { + dev->flags |= ATA_DFLAG_NCQ_PRIO; + } else { + dev->flags &= ~ATA_DFLAG_NCQ_PRIO; + ata_dev_dbg(dev, "SATA page does not support priority\n"); + } + +} + +int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz) +{ + struct ata_port *ap = dev->link->ap; + int hdepth = 0, ddepth = ata_id_queue_depth(dev->id); + unsigned int err_mask; + char *aa_desc = ""; + + if (!ata_id_has_ncq(dev->id)) { + desc[0] = '\0'; + return 0; + } + if (dev->horkage & ATA_HORKAGE_NONCQ) { + snprintf(desc, desc_sz, "NCQ (not used)"); + return 0; + } + if (ap->flags & ATA_FLAG_NCQ) { + hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE); + dev->flags |= ATA_DFLAG_NCQ; + } + + if (!(dev->horkage & ATA_HORKAGE_BROKEN_FPDMA_AA) && + (ap->flags & ATA_FLAG_FPDMA_AA) && + ata_id_has_fpdma_aa(dev->id)) { + err_mask = ata_dev_set_feature(dev, SETFEATURES_SATA_ENABLE, + SATA_FPDMA_AA); + if (err_mask) { + ata_dev_err(dev, + "failed to enable AA (error_mask=0x%x)\n", + err_mask); + if (err_mask != AC_ERR_DEV) { + dev->horkage |= ATA_HORKAGE_BROKEN_FPDMA_AA; + return -EIO; + } + } else + aa_desc = ", AA"; + } + + if (hdepth >= ddepth) + snprintf(desc, desc_sz, "NCQ (depth %d)%s", ddepth, aa_desc); + else + snprintf(desc, desc_sz, "NCQ (depth %d/%d)%s", hdepth, + ddepth, aa_desc); + + if ((ap->flags & ATA_FLAG_FPDMA_AUX)) { + if (ata_id_has_ncq_send_and_recv(dev->id)) + ata_dev_config_ncq_send_recv(dev); + if (ata_id_has_ncq_non_data(dev->id)) + ata_dev_config_ncq_non_data(dev); + if (ata_id_has_ncq_prio(dev->id)) + ata_dev_config_ncq_prio(dev); + } + + return 0; +} + /** * sata_link_scr_lpm - manipulate SControl IPM and SPM fields * @link: ATA link to manipulate SControl for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 52bd81bad484..0a90e0e65f0b 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2034,15 +2034,6 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log, return err_mask; } -static bool ata_log_supported(struct ata_device *dev, u8 log) -{ - struct ata_port *ap = dev->link->ap; - - if (ata_read_log_page(dev, ATA_LOG_DIRECTORY, 0, ap->sector_buf, 1)) - return false; - return get_unaligned_le16(&ap->sector_buf[log * 2]) ? true : false; -} - static bool ata_identify_page_supported(struct ata_device *dev, u8 page) { struct ata_port *ap = dev->link->ap; @@ -2084,145 +2075,6 @@ static inline u8 ata_dev_knobble(struct ata_device *dev) return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id))); } -static void ata_dev_config_ncq_send_recv(struct ata_device *dev) -{ - struct ata_port *ap = dev->link->ap; - unsigned int err_mask; - - if (!ata_log_supported(dev, ATA_LOG_NCQ_SEND_RECV)) { - ata_dev_warn(dev, "NCQ Send/Recv Log not supported\n"); - return; - } - err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_SEND_RECV, - 0, ap->sector_buf, 1); - if (err_mask) { - ata_dev_dbg(dev, - "failed to get NCQ Send/Recv Log Emask 0x%x\n", - err_mask); - } else { - u8 *cmds = dev->ncq_send_recv_cmds; - - dev->flags |= ATA_DFLAG_NCQ_SEND_RECV; - memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_SEND_RECV_SIZE); - - if (dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) { - ata_dev_dbg(dev, "disabling queued TRIM support\n"); - cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &= - ~ATA_LOG_NCQ_SEND_RECV_DSM_TRIM; - } - } -} - -static void ata_dev_config_ncq_non_data(struct ata_device *dev) -{ - struct ata_port *ap = dev->link->ap; - unsigned int err_mask; - - if (!ata_log_supported(dev, ATA_LOG_NCQ_NON_DATA)) { - ata_dev_warn(dev, - "NCQ Send/Recv Log not supported\n"); - return; - } - err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_NON_DATA, - 0, ap->sector_buf, 1); - if (err_mask) { - ata_dev_dbg(dev, - "failed to get NCQ Non-Data Log Emask 0x%x\n", - err_mask); - } else { - u8 *cmds = dev->ncq_non_data_cmds; - - memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_NON_DATA_SIZE); - } -} - -static void ata_dev_config_ncq_prio(struct ata_device *dev) -{ - struct ata_port *ap = dev->link->ap; - unsigned int err_mask; - - if (!(dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE)) { - dev->flags &= ~ATA_DFLAG_NCQ_PRIO; - return; - } - - err_mask = ata_read_log_page(dev, - ATA_LOG_IDENTIFY_DEVICE, - ATA_LOG_SATA_SETTINGS, - ap->sector_buf, - 1); - if (err_mask) { - ata_dev_dbg(dev, - "failed to get Identify Device data, Emask 0x%x\n", - err_mask); - return; - } - - if (ap->sector_buf[ATA_LOG_NCQ_PRIO_OFFSET] & BIT(3)) { - dev->flags |= ATA_DFLAG_NCQ_PRIO; - } else { - dev->flags &= ~ATA_DFLAG_NCQ_PRIO; - ata_dev_dbg(dev, "SATA page does not support priority\n"); - } - -} - -static int ata_dev_config_ncq(struct ata_device *dev, - char *desc, size_t desc_sz) -{ - struct ata_port *ap = dev->link->ap; - int hdepth = 0, ddepth = ata_id_queue_depth(dev->id); - unsigned int err_mask; - char *aa_desc = ""; - - if (!ata_id_has_ncq(dev->id)) { - desc[0] = '\0'; - return 0; - } - if (dev->horkage & ATA_HORKAGE_NONCQ) { - snprintf(desc, desc_sz, "NCQ (not used)"); - return 0; - } - if (ap->flags & ATA_FLAG_NCQ) { - hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE); - dev->flags |= ATA_DFLAG_NCQ; - } - - if (!(dev->horkage & ATA_HORKAGE_BROKEN_FPDMA_AA) && - (ap->flags & ATA_FLAG_FPDMA_AA) && - ata_id_has_fpdma_aa(dev->id)) { - err_mask = ata_dev_set_feature(dev, SETFEATURES_SATA_ENABLE, - SATA_FPDMA_AA); - if (err_mask) { - ata_dev_err(dev, - "failed to enable AA (error_mask=0x%x)\n", - err_mask); - if (err_mask != AC_ERR_DEV) { - dev->horkage |= ATA_HORKAGE_BROKEN_FPDMA_AA; - return -EIO; - } - } else - aa_desc = ", AA"; - } - - if (hdepth >= ddepth) - snprintf(desc, desc_sz, "NCQ (depth %d)%s", ddepth, aa_desc); - else - snprintf(desc, desc_sz, "NCQ (depth %d/%d)%s", hdepth, - ddepth, aa_desc); - - if ((ap->flags & ATA_FLAG_FPDMA_AUX)) { - if (ata_id_has_ncq_send_and_recv(dev->id)) - ata_dev_config_ncq_send_recv(dev); - if (ata_id_has_ncq_non_data(dev->id)) - ata_dev_config_ncq_non_data(dev); - if (ata_id_has_ncq_prio(dev->id)) - ata_dev_config_ncq_prio(dev); - } - - return 0; -} - static void ata_dev_config_sense_reporting(struct ata_device *dev) { unsigned int err_mask; diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 9eebe4e0be39..24b08efd79a3 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -15,6 +15,8 @@ #define DRV_NAME "libata" #define DRV_VERSION "3.00" /* must be exactly four chars */ +#include + /* libata-core.c */ enum { /* flags for ata_dev_read_id() */ @@ -85,13 +87,29 @@ extern void __ata_port_probe(struct ata_port *ap); extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log, u8 page, void *buf, unsigned int sectors); +static inline bool ata_log_supported(struct ata_device *dev, u8 log) +{ + struct ata_port *ap = dev->link->ap; + + if (ata_read_log_page(dev, ATA_LOG_DIRECTORY, 0, ap->sector_buf, 1)) + return false; + return get_unaligned_le16(&ap->sector_buf[log * 2]) ? true : false; +} + #define to_ata_port(d) container_of(d, struct ata_port, tdev) /* libata-core-sata.c */ #ifdef CONFIG_SATA_HOST int ata_do_link_spd_horkage(struct ata_device *dev); +int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz); #else static inline int ata_do_link_spd_horkage(struct ata_device *dev) { return 0; } +static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, + size_t desc_sz) +{ + desc[0] = '\0'; + return 0; +} #endif /* libata-acpi.c */ From patchwork Tue Jan 28 13:33:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230340 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=ErSftcT7; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKn4VZQz9sST for ; Wed, 29 Jan 2020 00:35:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726504AbgA1NfW (ORCPT ); Tue, 28 Jan 2020 08:35:22 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58896 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726293AbgA1NeR (ORCPT ); Tue, 28 Jan 2020 08:34:17 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133416euoutp01baf0c60b41b972d31ee849665c48eb70~uEFBYAo5p0325703257euoutp01L for ; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133416euoutp01baf0c60b41b972d31ee849665c48eb70~uEFBYAo5p0325703257euoutp01L DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218456; bh=9GC41GZxsu9pE/kEPtcdNoCfP8ZZpAvDx72nJ/t5b5M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ErSftcT7fuYEpEulBSvxDYwH1zck4TT9hjY1SMJX2Tn6lX60JQMTwtImEb9INpCYF Aevd7X8duTooH/L2EkEhFLkeIuvhIyn0OJeyI5JKuAqOK5kw5qrpzg39IqiRwUDk7F t6pU2zV/i6Rbuo/kqAK/PigWBJ5MsJjDLG3o1/cU= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133416eucas1p170536042e847b1d13cd09fc51ec308ae~uEFBGrF7S1372113721eucas1p1F; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id F8.DA.60698.858303E5; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133415eucas1p12cc620dd5f19e6a26f1deeba083ea82f~uEFAwye7t0714007140eucas1p1j; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133415eusmtrp2be066cc50ecb226b9de5031f609a3522~uEFAq2Mvj0330103301eusmtrp2z; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) X-AuditID: cbfec7f5-a29ff7000001ed1a-bc-5e3038589b4c Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 71.82.07950.758303E5; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133415eusmtip270e3d36fdc14666da25e0e6e36854a2f~uEFAS4n1z0657106571eusmtip2i; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 15/28] ata: move sata_print_link_status() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:30 +0100 Message-Id: <20200128133343.29905-16-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7djP87oRFgZxBuv/cVmsvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+PU9DtMBcdlK/Zu72ZqYHwt3sXIySEhYCJxdf5Uxi5GLg4hgRWMEnu+LWKB cL4wSlzrmw2V+cwo0f6gnQWmZfXeXcwgtpDAckaJD/uL4Dqm9j0BK2ITsJKY2L6KEcQWEVCQ 6Pm9kg2kiFlgDaPEqsNNYAlhgUCJ210bmUBsFgFViRfdu8CaeQXsJL6ffgi1TV5i67dPrF2M HBycQPGeveYQJYISJ2dC7GIGKmneOpsZorydXeLskWoI20Vi5atGJghbWOLV8S3sELaMxP+d 85lA7pEQWMco8bfjBTOEs51RYvnkf2wQVdYSd879YgNZzCygKbF+lz5E2FFi5vfT7CBhCQE+ iRtvBSFu4JOYtG06M0SYV6KjTQiiWk1iw7INbDBru3auhDrTQ+Ll6TbWCYyKs5B8MwvJN7MQ 9i5gZF7FKJ5aWpybnlpsnJdarlecmFtcmpeul5yfu4kRmF5O/zv+dQfjvj9JhxgFOBiVeHgd lAzihFgTy4orcw8xSnAwK4nwdjIBhXhTEiurUovy44tKc1KLDzFKc7AoifMaL3oZKySQnliS mp2aWpBaBJNl4uCUamA8/2pZc2n4V68DnTq7/0ipS29r3Dq16qnbvrz1Fy4enfyme780Z+4/ k3xdyQNB7N2BGTGBUZcskjgufdr/bZnTKzmp1we8u4PiuhZ59z2Smy5fqrh2LdeZYN6kCKk5 eRImbkntrWJxp37oXIv6XbKkYGa9UNbrWYprTk1/ZXprvdefJsNbtxqVWIozEg21mIuKEwHk OXu+KwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd1wC4M4gwWPNSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl3Fq+h2mguOy FXu3dzM1ML4W72Lk5JAQMJFYvXcXcxcjF4eQwFJGic2rTrB3MXIAJWQkjq8vg6gRlvhzrYsN ouYTo8Tk9cuZQRJsAlYSE9tXMYLYIgIKEj2/V4IVMQtsYJR4dfMLC0hCWMBfYv/++2A2i4Cq xIvuXWA2r4CdxPfTD1kgNshLbP32iRVkMSdQvGevOUhYSMBWYv2Zp6wQ5YISJ2c+AStnBipv 3jqbeQKjwCwkqVlIUgsYmVYxiqSWFuem5xYb6RUn5haX5qXrJefnbmIExsG2Yz+37GDsehd8 iFGAg1GJh9dBySBOiDWxrLgy9xCjBAezkghvJxNQiDclsbIqtSg/vqg0J7X4EKMp0A8TmaVE k/OBMZpXEm9oamhuYWlobmxubGahJM7bIXAwRkggPbEkNTs1tSC1CKaPiYNTqoGxearq3HYG jhd2591M1so8UOq++Sr0q9KaoI8HtJ/nyj6Qn+JZuHpX/YxV19m61ctyv81o6PcL9Nugm5Tl cj6j+G1r1DIxpbMPX27u36jHLCkctyztgCdn6KtP+jJfPq8XnrnceV2h+px6lUUTV50OCWnq ObLQ3O7HguBL+pNcJ3jMEqoOO2ioxFKckWioxVxUnAgAp50g2JkCAAA= X-CMS-MailID: 20200128133415eucas1p12cc620dd5f19e6a26f1deeba083ea82f X-Msg-Generator: CA X-RootMTR: 20200128133415eucas1p12cc620dd5f19e6a26f1deeba083ea82f X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133415eucas1p12cc620dd5f19e6a26f1deeba083ea82f References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move sata_print_link_status() to libata-core-sata.c * add static inline for CONFIG_SATA_HOST=n case Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 35499 572 40 36111 8d0f drivers/ata/libata-core.o after: 35276 572 40 35888 8c30 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 27 +++++++++++++++++++++++++++ drivers/ata/libata-core.c | 27 --------------------------- drivers/ata/libata.h | 2 ++ 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index f2629e069a55..8ad8f97660df 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -258,6 +258,33 @@ int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz) return 0; } +/** + * sata_print_link_status - Print SATA link status + * @link: SATA link to printk link status about + * + * This function prints link speed and status of a SATA link. + * + * LOCKING: + * None. + */ +void sata_print_link_status(struct ata_link *link) +{ + u32 sstatus, scontrol, tmp; + + if (sata_scr_read(link, SCR_STATUS, &sstatus)) + return; + sata_scr_read(link, SCR_CONTROL, &scontrol); + + if (ata_phys_link_online(link)) { + tmp = (sstatus >> 4) & 0xf; + ata_link_info(link, "SATA link up %s (SStatus %X SControl %X)\n", + sata_spd_string(tmp), sstatus, scontrol); + } else { + ata_link_info(link, "SATA link down (SStatus %X SControl %X)\n", + sstatus, scontrol); + } +} + /** * sata_link_scr_lpm - manipulate SControl IPM and SPM fields * @link: ATA link to manipulate SControl for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 0a90e0e65f0b..73f732a32261 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2742,33 +2742,6 @@ int ata_bus_probe(struct ata_port *ap) goto retry; } -/** - * sata_print_link_status - Print SATA link status - * @link: SATA link to printk link status about - * - * This function prints link speed and status of a SATA link. - * - * LOCKING: - * None. - */ -static void sata_print_link_status(struct ata_link *link) -{ - u32 sstatus, scontrol, tmp; - - if (sata_scr_read(link, SCR_STATUS, &sstatus)) - return; - sata_scr_read(link, SCR_CONTROL, &scontrol); - - if (ata_phys_link_online(link)) { - tmp = (sstatus >> 4) & 0xf; - ata_link_info(link, "SATA link up %s (SStatus %X SControl %X)\n", - sata_spd_string(tmp), sstatus, scontrol); - } else { - ata_link_info(link, "SATA link down (SStatus %X SControl %X)\n", - sstatus, scontrol); - } -} - /** * ata_dev_pair - return other device on cable * @adev: device diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 24b08efd79a3..909c2cae52a0 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -102,6 +102,7 @@ static inline bool ata_log_supported(struct ata_device *dev, u8 log) #ifdef CONFIG_SATA_HOST int ata_do_link_spd_horkage(struct ata_device *dev); int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz); +void sata_print_link_status(struct ata_link *link); #else static inline int ata_do_link_spd_horkage(struct ata_device *dev) { return 0; } static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, @@ -110,6 +111,7 @@ static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, desc[0] = '\0'; return 0; } +static inline void sata_print_link_status(struct ata_link *link) { } #endif /* libata-acpi.c */ From patchwork Tue Jan 28 13:33:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230337 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=qJfMuVY9; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKg00bJz9sS9 for ; Wed, 29 Jan 2020 00:35:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726791AbgA1NfJ (ORCPT ); Tue, 28 Jan 2020 08:35:09 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52350 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726508AbgA1NeS (ORCPT ); Tue, 28 Jan 2020 08:34:18 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133416euoutp026a37de59577069cfa1f71534a5f7361a~uEFBef-7D2862028620euoutp02- for ; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133416euoutp026a37de59577069cfa1f71534a5f7361a~uEFBef-7D2862028620euoutp02- DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218456; bh=+nhl2QgmqdoNH5vOKvOoBGGKQG+7lMuwayVmJW3tto0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qJfMuVY9ja+nGsnGXnyt2fAljvNE4D2tdtx6hbw+lM9B/yOZPER/tmjS7SBZLODqX peiC7YlvssdiCvOJzz5/fBxLSbtXBlHFQTLaewC4ThXz3WE7E6TaWNwNHOz4HJj/LS XlN2m1j7+9TMbWG4+upWgZJsKySnhUH4j60LTPCE= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133416eucas1p279457a2cb05080fbee9c0a223a21eb07~uEFBRnDd70683706837eucas1p2H; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id F3.5A.60679.858303E5; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133416eucas1p1eb121384be2323aed1fc63a6d1ebe14f~uEFA8EeCh0713407134eucas1p1u; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133416eusmtrp24985406fc97da71716c231976f5997ad~uEFA7h93J0330003300eusmtrp22; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-51-5e3038581b88 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 04.92.08375.758303E5; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133415eusmtip26f0b06ff629847adfb1ecdfafdf3de9a~uEFAm5fAM0113601136eusmtip2F; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 16/28] ata: move sata_down_spd_limit() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:31 +0100 Message-Id: <20200128133343.29905-17-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djPc7oRFgZxBj+2i1usvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+Pf0Q/MBT/sKy5cbmZuYFxn1MXIySEhYCIxu2UeSxcjF4eQwApGiVVfdzJC OF8YJZ4t7oXKfGaU+LO3hRWmZeOz3ewQieWMEg8mH2eGa5l6fBsbSBWbgJXExPZVjCC2iICC RM/vlWwgRcwCa4CWHG4CSwgL+EicnnWPCcRmEVCV6D40DczmFbCTWL31IRvEOnmJrd8+Aa3m 4OAEivfsNYcoEZQ4OfMJC4jNDFTSvHU22BESAu3sEr9//IA61UXi84kJLBC2sMSr41vYIWwZ if875zNBNKxjlPjb8QKqezujxPLJ/6A2W0vcOfeLDWQzs4CmxPpd+iCmhICjxKfbghAmn8SN t4IQN/BJTNo2nRkizCvR0SYEMUNNYsOyDWwwW7t2rmSGsD0kJlw4xjqBUXEWkm9mIflmFsLa BYzMqxjFU0uLc9NTi43yUsv1ihNzi0vz0vWS83M3MQITzOl/x7/sYNz1J+kQowAHoxIP7wwV gzgh1sSy4srcQ4wSHMxKIrydTEAh3pTEyqrUovz4otKc1OJDjNIcLErivMaLXsYKCaQnlqRm p6YWpBbBZJk4OKUaGAMvi1QKq/FMvbtO5iKb76ep26a5vo5gts+6n7dIxFj4L8/nu4vuGx7q mS2l9u7S0lMXHqr8YPgTJNup+vXrtgWSvuK32id1+V5eXZFUOe02u0WcZjWf5dP8gHVqAQ7h hVvYHp0o6Vms/dnXz6WtS9zP6JHeuZAnd38tytn13Vv6xxEPzsqb2UosxRmJhlrMRcWJAC44 2a0sAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd1wC4M4g/NvbCxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl/Hv6Afmgh/2 FRcuNzM3MK4z6mLk5JAQMJHY+Gw3excjF4eQwFJGiemHJjF3MXIAJWQkjq8vg6gRlvhzrYsN ouYTo8SMUxNZQRJsAlYSE9tXMYLYIgIKEj2/V4IVMQtsYJR4dfMLC0hCWMBH4vSse0wgNouA qkT3oWlgNq+AncTqrQ/ZIDbIS2z99okVZDEnULxnrzlIWEjAVmL9maesEOWCEidnPgEbyQxU 3rx1NvMERoFZSFKzkKQWMDKtYhRJLS3OTc8tNtQrTswtLs1L10vOz93ECIyDbcd+bt7BeGlj 8CFGAQ5GJR7eGSoGcUKsiWXFlbmHGCU4mJVEeDuZgEK8KYmVValF+fFFpTmpxYcYTYF+mMgs JZqcD4zRvJJ4Q1NDcwtLQ3Njc2MzCyVx3g6BgzFCAumJJanZqakFqUUwfUwcnFINjJWr9/K4 aYWItWhblL8V///h6teprhcuWucH//dewHlHe6Lfo0YeJp9tT0rXSJi5vuSbp+yTt/Hu3I39 pVV9C9bxPZ5bGPBPzXzZmqwFdk/exshsmnatVM5qtyXDxuNhoiuXF27qezPHgtF8wl+HDeVW 4qpfm1sXLrFvPqT3Ur1LVuMXg55RpRJLcUaioRZzUXEiAADOLQyZAgAA X-CMS-MailID: 20200128133416eucas1p1eb121384be2323aed1fc63a6d1ebe14f X-Msg-Generator: CA X-RootMTR: 20200128133416eucas1p1eb121384be2323aed1fc63a6d1ebe14f X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133416eucas1p1eb121384be2323aed1fc63a6d1ebe14f References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move ata_sstatus_online() to libata.h and make it inline * move sata_down_spd_limit() to libata-core-sata.c * add static inline for CONFIG_SATA_HOST=n case Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 35276 572 40 35888 8c30 drivers/ata/libata-core.o after: 34996 572 40 35608 8b18 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 80 ++++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 85 ---------------------------------- drivers/ata/libata.h | 11 ++++- 3 files changed, 90 insertions(+), 86 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index 8ad8f97660df..fb956c8aee9a 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -285,6 +285,86 @@ void sata_print_link_status(struct ata_link *link) } } +/** + * sata_down_spd_limit - adjust SATA spd limit downward + * @link: Link to adjust SATA spd limit for + * @spd_limit: Additional limit + * + * Adjust SATA spd limit of @link downward. Note that this + * function only adjusts the limit. The change must be applied + * using sata_set_spd(). + * + * If @spd_limit is non-zero, the speed is limited to equal to or + * lower than @spd_limit if such speed is supported. If + * @spd_limit is slower than any supported speed, only the lowest + * supported speed is allowed. + * + * LOCKING: + * Inherited from caller. + * + * RETURNS: + * 0 on success, negative errno on failure + */ +int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) +{ + u32 sstatus, spd, mask; + int rc, bit; + + if (!sata_scr_valid(link)) + return -EOPNOTSUPP; + + /* If SCR can be read, use it to determine the current SPD. + * If not, use cached value in link->sata_spd. + */ + rc = sata_scr_read(link, SCR_STATUS, &sstatus); + if (rc == 0 && ata_sstatus_online(sstatus)) + spd = (sstatus >> 4) & 0xf; + else + spd = link->sata_spd; + + mask = link->sata_spd_limit; + if (mask <= 1) + return -EINVAL; + + /* unconditionally mask off the highest bit */ + bit = fls(mask) - 1; + mask &= ~(1 << bit); + + /* + * Mask off all speeds higher than or equal to the current one. At + * this point, if current SPD is not available and we previously + * recorded the link speed from SStatus, the driver has already + * masked off the highest bit so mask should already be 1 or 0. + * Otherwise, we should not force 1.5Gbps on a link where we have + * not previously recorded speed from SStatus. Just return in this + * case. + */ + if (spd > 1) + mask &= (1 << (spd - 1)) - 1; + else + return -EINVAL; + + /* were we already at the bottom? */ + if (!mask) + return -EINVAL; + + if (spd_limit) { + if (mask & ((1 << spd_limit) - 1)) + mask &= (1 << spd_limit) - 1; + else { + bit = ffs(mask) - 1; + mask = 1 << bit; + } + } + + link->sata_spd_limit = mask; + + ata_link_warn(link, "limiting SATA link speed to %s\n", + sata_spd_string(fls(mask))); + + return 0; +} + /** * sata_link_scr_lpm - manipulate SControl IPM and SPM fields * @link: ATA link to manipulate SControl for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 73f732a32261..1d0744f18754 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -167,11 +167,6 @@ MODULE_LICENSE("GPL"); MODULE_VERSION(DRV_VERSION); -static bool ata_sstatus_online(u32 sstatus) -{ - return (sstatus & 0xf) == 0x3; -} - /** * ata_link_next - link iteration helper * @link: the previous link, NULL to start @@ -2760,86 +2755,6 @@ struct ata_device *ata_dev_pair(struct ata_device *adev) } EXPORT_SYMBOL_GPL(ata_dev_pair); -/** - * sata_down_spd_limit - adjust SATA spd limit downward - * @link: Link to adjust SATA spd limit for - * @spd_limit: Additional limit - * - * Adjust SATA spd limit of @link downward. Note that this - * function only adjusts the limit. The change must be applied - * using sata_set_spd(). - * - * If @spd_limit is non-zero, the speed is limited to equal to or - * lower than @spd_limit if such speed is supported. If - * @spd_limit is slower than any supported speed, only the lowest - * supported speed is allowed. - * - * LOCKING: - * Inherited from caller. - * - * RETURNS: - * 0 on success, negative errno on failure - */ -int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) -{ - u32 sstatus, spd, mask; - int rc, bit; - - if (!sata_scr_valid(link)) - return -EOPNOTSUPP; - - /* If SCR can be read, use it to determine the current SPD. - * If not, use cached value in link->sata_spd. - */ - rc = sata_scr_read(link, SCR_STATUS, &sstatus); - if (rc == 0 && ata_sstatus_online(sstatus)) - spd = (sstatus >> 4) & 0xf; - else - spd = link->sata_spd; - - mask = link->sata_spd_limit; - if (mask <= 1) - return -EINVAL; - - /* unconditionally mask off the highest bit */ - bit = fls(mask) - 1; - mask &= ~(1 << bit); - - /* - * Mask off all speeds higher than or equal to the current one. At - * this point, if current SPD is not available and we previously - * recorded the link speed from SStatus, the driver has already - * masked off the highest bit so mask should already be 1 or 0. - * Otherwise, we should not force 1.5Gbps on a link where we have - * not previously recorded speed from SStatus. Just return in this - * case. - */ - if (spd > 1) - mask &= (1 << (spd - 1)) - 1; - else - return -EINVAL; - - /* were we already at the bottom? */ - if (!mask) - return -EINVAL; - - if (spd_limit) { - if (mask & ((1 << spd_limit) - 1)) - mask &= (1 << spd_limit) - 1; - else { - bit = ffs(mask) - 1; - mask = 1 << bit; - } - } - - link->sata_spd_limit = mask; - - ata_link_warn(link, "limiting SATA link speed to %s\n", - sata_spd_string(fls(mask))); - - return 0; -} - static int __sata_set_spd_needed(struct ata_link *link, u32 *scontrol) { struct ata_link *host_link = &link->ap->link; diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 909c2cae52a0..518a8e08a26d 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -64,7 +64,6 @@ extern int ata_dev_reread_id(struct ata_device *dev, unsigned int readid_flags); extern int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class, unsigned int readid_flags); extern int ata_dev_configure(struct ata_device *dev); -extern int sata_down_spd_limit(struct ata_link *link, u32 spd_limit); extern int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel); extern unsigned int ata_dev_set_feature(struct ata_device *dev, u8 enable, u8 feature); @@ -87,6 +86,11 @@ extern void __ata_port_probe(struct ata_port *ap); extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log, u8 page, void *buf, unsigned int sectors); +static inline bool ata_sstatus_online(u32 sstatus) +{ + return (sstatus & 0xf) == 0x3; +} + static inline bool ata_log_supported(struct ata_device *dev, u8 log) { struct ata_port *ap = dev->link->ap; @@ -103,6 +107,7 @@ static inline bool ata_log_supported(struct ata_device *dev, u8 log) int ata_do_link_spd_horkage(struct ata_device *dev); int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz); void sata_print_link_status(struct ata_link *link); +int sata_down_spd_limit(struct ata_link *link, u32 spd_limit); #else static inline int ata_do_link_spd_horkage(struct ata_device *dev) { return 0; } static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, @@ -112,6 +117,10 @@ static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, return 0; } static inline void sata_print_link_status(struct ata_link *link) { } +static inline int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) +{ + return -EOPNOTSUPP; +} #endif /* libata-acpi.c */ From patchwork Tue Jan 28 13:33:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230336 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=Axr2+LHA; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKd3rV8z9sSN for ; Wed, 29 Jan 2020 00:35:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726482AbgA1NfI (ORCPT ); Tue, 28 Jan 2020 08:35:08 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52353 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726512AbgA1NeS (ORCPT ); Tue, 28 Jan 2020 08:34:18 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133417euoutp02b0133135299dc284259c575a40571683~uEFB5XpIU2911929119euoutp02l for ; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133417euoutp02b0133135299dc284259c575a40571683~uEFB5XpIU2911929119euoutp02l DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218457; bh=WqY0W3HvC6cqWZyiVukr+Lf2qHDg/ANtKN6Xk5rhJFo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Axr2+LHA2ox5kozBidrUbv2Bbqy3x55B1zOWHahMRQF5L3NG/8DHhJYuBoZgJhAFE hCxI+NJqEoYOGH2QoP4+XHEXAdqDMZ/qbBKkZcjoI/Mz5LXZx4ehWZQbhrr4w83TZi KyeEwCd+dPpVDSYS9b7s3UKyU3DN5Leu7kwz1Ypo= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133416eucas1p1a6f1b5ad3c14c47c1aa5e45b74427b30~uEFBhijGo1376413764eucas1p1E; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id F4.5A.60679.858303E5; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133416eucas1p240f8fc15b334e0608cce30f2b6f0fbe1~uEFBPO3o51585815858eucas1p2-; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133416eusmtrp25b03fc764b8bbd875f75d8acd9e1e5e4~uEFBOpFKQ0330003300eusmtrp23; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-52-5e303858245e Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 02.82.07950.858303E5; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133416eusmtip25b550982b5cf5738632031e68c75bf96~uEFA6kN1Y0685506855eusmtip2Y; Tue, 28 Jan 2020 13:34:15 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 17/28] ata: move *sata_set_spd*() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:32 +0100 Message-Id: <20200128133343.29905-18-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprOKsWRmVeSWpSXmKPExsWy7djPc7oRFgZxBtsnqFusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK2Pb85+MBS9tKraceMbYwDjdsIuRk0NCwETiWtdjRhBbSGAFo8TZVxJdjFxA 9hdGibWLd7FDOJ8ZJeZu/MII07Fo5mlGiMRyRonnBzuY4VoOrTvLDlLFJmAlMbF9FViHiICC RM/vlWwgRcwCaxglVh1uAkpwcAgLuEs8vK0BUsMioCox+eI7JhCbV8BO4uTlZWwQ2+Qltn77 xApSzgkU79lrDlEiKHFy5hMWEJsZqKR562xmiPJudomNS50gbBeJJ9Nes0PYwhKvjm+BsmUk /u+czwRyjoTAOkaJvx0vmCGc7YwSyyf/g1psLXHn3C82kMXMApoS63fpQ4QdJWYvvsAOEpYQ 4JO48VYQ4gY+iUnbpjNDhHklOtqEIKrVJDYs28AGs7Zr50qoMz0klh49zjaBUXEWkm9mIflm FsLeBYzMqxjFU0uLc9NTi43yUsv1ihNzi0vz0vWS83M3MQKTy+l/x7/sYNz1J+kQowAHoxIP 7wwVgzgh1sSy4srcQ4wSHMxKIrydTEAh3pTEyqrUovz4otKc1OJDjNIcLErivMaLXsYKCaQn lqRmp6YWpBbBZJk4OKUaGJmnfSmvn3u//OAuuw8qE3ffD68qmF14XkDb+seeBaavl04oiJc4 +bzNLeiKgMYtRt7/2VwfrVxb3/BenlthzHlYVvFxfJJknol/SaUWs0JG3JYO1Vzeeyv9bq70 1nu163IWw519OyKqn+29vfCqcKfO3Hqpu3tTpt5P7touPDdqfXaEzO9VZkosxRmJhlrMRcWJ AJNnWX8qAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeLIzCtJLcpLzFFi42I5/e/4Pd0IC4M4g71NIhar7/azWWycsZ7V 4tmtvUwWx3Y8YrK4vGsOm8Xc1unsDmweO2fdZfe4fLbU49DhDkaPvi2rGD0+b5ILYI3SsynK Ly1JVcjILy6xVYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJzcksSy3St0vQy9j2/CdjwUub ii0nnjE2ME437GLk5JAQMJFYNPM0YxcjF4eQwFJGiSXvrzJ3MXIAJWQkjq8vg6gRlvhzrYsN ouYTo8TB2QuZQRJsAlYSE9tXMYLYIgIKEj2/V4IVMQtsYJR4dfMLC8ggYQF3iYe3NUBqWARU JSZffMcEYvMK2EmcvLyMDWKBvMTWb59YQco5geI9e81BwkICthLrzzxlhSgXlDg58wkLiM0M VN68dTbzBEaBWUhSs5CkFjAyrWIUSS0tzk3PLTbSK07MLS7NS9dLzs/dxAiMgm3Hfm7Zwdj1 LvgQowAHoxIPr4OSQZwQa2JZcWXuIUYJDmYlEd5OJqAQb0piZVVqUX58UWlOavEhRlOgHyYy S4km5wMjNK8k3tDU0NzC0tDc2NzYzEJJnLdD4GCMkEB6YklqdmpqQWoRTB8TB6dUA6OMCoPl shmhlg83JFWvfcZaHnoj7W/0/4ySrKgZpZ/Oh9+3sI/dstQiLDo/aMLWYNOvsuHGS0MXad/7 U8F64U+MjZ5hSiHPU9lrdhmhU423Plh3XKbr250LvG4rP59cdmjSCjHGDdOW7Lhut+tq5uNF E+oti2LehX7TvSPjvT1Q3bKvWJE1s02JpTgj0VCLuag4EQBUq+1OmAIAAA== X-CMS-MailID: 20200128133416eucas1p240f8fc15b334e0608cce30f2b6f0fbe1 X-Msg-Generator: CA X-RootMTR: 20200128133416eucas1p240f8fc15b334e0608cce30f2b6f0fbe1 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133416eucas1p240f8fc15b334e0608cce30f2b6f0fbe1 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move *sata_set_spd*() to libata-core-sata.c * add static inlines for CONFIG_SATA_HOST=n case Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 34996 572 40 35608 8b18 drivers/ata/libata-core.o after: 34766 572 40 35378 8a32 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 81 ++++++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 81 ---------------------------------- drivers/ata/libata.h | 2 + include/linux/libata.h | 4 +- 4 files changed, 86 insertions(+), 82 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index fb956c8aee9a..4aa938c1df8d 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -365,6 +365,87 @@ int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) return 0; } +static int __sata_set_spd_needed(struct ata_link *link, u32 *scontrol) +{ + struct ata_link *host_link = &link->ap->link; + u32 limit, target, spd; + + limit = link->sata_spd_limit; + + /* Don't configure downstream link faster than upstream link. + * It doesn't speed up anything and some PMPs choke on such + * configuration. + */ + if (!ata_is_host_link(link) && host_link->sata_spd) + limit &= (1 << host_link->sata_spd) - 1; + + if (limit == UINT_MAX) + target = 0; + else + target = fls(limit); + + spd = (*scontrol >> 4) & 0xf; + *scontrol = (*scontrol & ~0xf0) | ((target & 0xf) << 4); + + return spd != target; +} + +/** + * sata_set_spd_needed - is SATA spd configuration needed + * @link: Link in question + * + * Test whether the spd limit in SControl matches + * @link->sata_spd_limit. This function is used to determine + * whether hardreset is necessary to apply SATA spd + * configuration. + * + * LOCKING: + * Inherited from caller. + * + * RETURNS: + * 1 if SATA spd configuration is needed, 0 otherwise. + */ +int sata_set_spd_needed(struct ata_link *link) +{ + u32 scontrol; + + if (sata_scr_read(link, SCR_CONTROL, &scontrol)) + return 1; + + return __sata_set_spd_needed(link, &scontrol); +} + +/** + * sata_set_spd - set SATA spd according to spd limit + * @link: Link to set SATA spd for + * + * Set SATA spd of @link according to sata_spd_limit. + * + * LOCKING: + * Inherited from caller. + * + * RETURNS: + * 0 if spd doesn't need to be changed, 1 if spd has been + * changed. Negative errno if SCR registers are inaccessible. + */ +int sata_set_spd(struct ata_link *link) +{ + u32 scontrol; + int rc; + + if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) + return rc; + + if (!__sata_set_spd_needed(link, &scontrol)) + return 0; + + if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) + return rc; + + return 1; +} +EXPORT_SYMBOL_GPL(sata_set_spd); + /** * sata_link_scr_lpm - manipulate SControl IPM and SPM fields * @link: ATA link to manipulate SControl for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 1d0744f18754..ff44d16b718e 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2755,87 +2755,6 @@ struct ata_device *ata_dev_pair(struct ata_device *adev) } EXPORT_SYMBOL_GPL(ata_dev_pair); -static int __sata_set_spd_needed(struct ata_link *link, u32 *scontrol) -{ - struct ata_link *host_link = &link->ap->link; - u32 limit, target, spd; - - limit = link->sata_spd_limit; - - /* Don't configure downstream link faster than upstream link. - * It doesn't speed up anything and some PMPs choke on such - * configuration. - */ - if (!ata_is_host_link(link) && host_link->sata_spd) - limit &= (1 << host_link->sata_spd) - 1; - - if (limit == UINT_MAX) - target = 0; - else - target = fls(limit); - - spd = (*scontrol >> 4) & 0xf; - *scontrol = (*scontrol & ~0xf0) | ((target & 0xf) << 4); - - return spd != target; -} - -/** - * sata_set_spd_needed - is SATA spd configuration needed - * @link: Link in question - * - * Test whether the spd limit in SControl matches - * @link->sata_spd_limit. This function is used to determine - * whether hardreset is necessary to apply SATA spd - * configuration. - * - * LOCKING: - * Inherited from caller. - * - * RETURNS: - * 1 if SATA spd configuration is needed, 0 otherwise. - */ -static int sata_set_spd_needed(struct ata_link *link) -{ - u32 scontrol; - - if (sata_scr_read(link, SCR_CONTROL, &scontrol)) - return 1; - - return __sata_set_spd_needed(link, &scontrol); -} - -/** - * sata_set_spd - set SATA spd according to spd limit - * @link: Link to set SATA spd for - * - * Set SATA spd of @link according to sata_spd_limit. - * - * LOCKING: - * Inherited from caller. - * - * RETURNS: - * 0 if spd doesn't need to be changed, 1 if spd has been - * changed. Negative errno if SCR registers are inaccessible. - */ -int sata_set_spd(struct ata_link *link) -{ - u32 scontrol; - int rc; - - if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) - return rc; - - if (!__sata_set_spd_needed(link, &scontrol)) - return 0; - - if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) - return rc; - - return 1; -} -EXPORT_SYMBOL_GPL(sata_set_spd); - #ifdef CONFIG_ATA_ACPI /** * ata_timing_cycle2mode - find xfer mode for the specified cycle duration diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 518a8e08a26d..ea614ac10c76 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -108,6 +108,7 @@ int ata_do_link_spd_horkage(struct ata_device *dev); int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz); void sata_print_link_status(struct ata_link *link); int sata_down_spd_limit(struct ata_link *link, u32 spd_limit); +int sata_set_spd_needed(struct ata_link *link); #else static inline int ata_do_link_spd_horkage(struct ata_device *dev) { return 0; } static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, @@ -121,6 +122,7 @@ static inline int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) { return -EOPNOTSUPP; } +static inline int sata_set_spd_needed(struct ata_link *link) { return 1; } #endif /* libata-acpi.c */ diff --git a/include/linux/libata.h b/include/linux/libata.h index 6bb0bd644f17..e466dbe56158 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1076,7 +1076,6 @@ static inline int ata_port_is_dummy(struct ata_port *ap) return ap->ops == &ata_dummy_port_ops; } -extern int sata_set_spd(struct ata_link *link); extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, int (*check_ready)(struct ata_link *link)); @@ -1196,6 +1195,7 @@ extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port * * Core layer (SATA specific part) - drivers/ata/libata-core-sata.c */ #ifdef CONFIG_SATA_HOST +extern int sata_set_spd(struct ata_link *link); extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, bool spm_wakeup); extern int ata_slave_link_init(struct ata_port *ap); @@ -1203,6 +1203,8 @@ extern void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis); extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); extern bool sata_lpm_ignore_phy_events(struct ata_link *link); +#else +static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; } #endif extern int ata_cable_40wire(struct ata_port *ap); From patchwork Tue Jan 28 13:33:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230334 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=S53LH3CY; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKL4vCDz9sP3 for ; Wed, 29 Jan 2020 00:35:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726598AbgA1NeU (ORCPT ); Tue, 28 Jan 2020 08:34:20 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52410 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726540AbgA1NeT (ORCPT ); Tue, 28 Jan 2020 08:34:19 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133417euoutp0207a44b100f212c2be2694556bebfdc4a~uEFCkkK2V2911929119euoutp02m for ; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133417euoutp0207a44b100f212c2be2694556bebfdc4a~uEFCkkK2V2911929119euoutp02m DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218457; bh=vpGdIB9thEp072F1DkjIZyy1yEPEEdtmljPGrQ3v0/o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=S53LH3CYTAb93U8SDooN3S06D7AuyyWDH8bzoGxHNG0xwnqqLrWQXDdUc/g2LiplE +/132IkLfi8tpwbVf5yL6RVzt2n2ckSMN3w9pvXJ5BniWFIVbuxyclAI0btjRdROPV 1dVmO9E6h+83BTT8729QkULRkgBfaPAaxtHjLx94= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133417eucas1p25849b4194b3ede9c7762b2c7686331ea~uEFCGuGc70683706837eucas1p2J; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 10.DA.61286.958303E5; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133416eucas1p172512260c12e8cce9516dd194c467134~uEFBmNGPa0087500875eucas1p1A; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133416eusmtrp2339a18ac37f8501cf503c33aee3676cc~uEFBlot_n0330003300eusmtrp24; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-87-5e303859c635 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id A4.92.08375.858303E5; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133416eusmtip2574692252d5dbb85ca8f271ed835bf0f~uEFBOR4sP0113601136eusmtip2G; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 18/28] ata: move sata_link_{debounce,resume}() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:33 +0100 Message-Id: <20200128133343.29905-19-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djP87qRFgZxBrNvcVusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK2PGm3fMBS2RFSdWnmVtYFzh1sXIySEhYCLx5tFZ9i5GLg4hgRWMEht2L4Ry vjBKTFn7CMr5zCjR3bSZHabl1bxeqMRyRoltiycjtPSd7WACqWITsJKY2L6KEcQWEVCQ6Pm9 kg2kiFlgDaPEqsNNYAlhgTCJ7h89rCA2i4CqRM+8iWDNvAJ2EtNXPGSEWCcvsfXbJ6AaDg5O oHjPXnOIEkGJkzOfsIDYzEAlzVtnM4PMlxBoZ5dYtvEA1KkuEt0/1zJD2MISr45vgYrLSPzf OZ8JomEdo8TfjhdQ3dsZJZZP/scGUWUtcefcLzaQzcwCmhLrd+lDhB0l5rbNZgIJSwjwSdx4 KwhxBJ/EpG3TmSHCvBIdbUIQ1WoSG5ZtYINZ27VzJVSJh8TujYwTGBVnIflmFpJvZiGsXcDI vIpRPLW0ODc9tdgwL7Vcrzgxt7g0L10vOT93EyMwwZz+d/zTDsavl5IOMQpwMCrx8M5QMYgT Yk0sK67MPcQowcGsJMLbyQQU4k1JrKxKLcqPLyrNSS0+xCjNwaIkzmu86GWskEB6Yklqdmpq QWoRTJaJg1OqgVHTRTfA89c7ltLgZQdXm+vYLWJ4etz674yu5d96bLZ+yRSp/GCyfLlbk6dv qk1Cgl/gku7Hajb/Mm2FLe6vqHxkXb5DdB+nbnjQjeJf2Ws/9k4s041XjnG8Vuh3pbyL8xCL xX29y7sYzV2TJ7ovr2arqZwou+SFVgnzi9UlRlPMa1+bep0OVWIpzkg01GIuKk4EAPLgdAgs AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd0IC4M4g6Z7Whar7/azWWycsZ7V 4tmtvUwWx3Y8YrK4vGsOm8Xc1unsDmweO2fdZfe4fLbU49DhDkaPvi2rGD0+b5ILYI3SsynK Ly1JVcjILy6xVYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJzcksSy3St0vQy5jx5h1zQUtk xYmVZ1kbGFe4dTFyckgImEi8mtfL3sXIxSEksJRRYtLrG8xdjBxACRmJ4+vLIGqEJf5c62KD qPnEKPHs81JGkASbgJXExPZVYLaIgIJEz++VYEXMAhsYJV7d/MICkhAWCJF493kVG4jNIqAq 0TNvIhOIzStgJzF9xUNGiA3yElu/fWIFWcwJFO/Zaw4SFhKwlVh/5ikrRLmgxMmZT8BGMgOV N2+dzTyBUWAWktQsJKkFjEyrGEVSS4tz03OLDfWKE3OLS/PS9ZLzczcxAuNg27Gfm3cwXtoY fIhRgINRiYd3hopBnBBrYllxZe4hRgkOZiUR3k4moBBvSmJlVWpRfnxRaU5q8SFGU6AfJjJL iSbnA2M0ryTe0NTQ3MLS0NzY3NjMQkmct0PgYIyQQHpiSWp2ampBahFMHxMHp1QDY74Zs/w8 3UXWyxWTjPWmB2U3zOL9ZJtfpecWe6P6XHG80GMmw2d6ktOENFw2TfUr3vz3v5bhgsDqAsfl R/ilTKy8RL0FqzL1NN1n7Av9UHvR8LzsXBvus6KVJQcrL91mKOoPXJr88k3JabGP+55tWDfV JvBGVU9qtfJnVaPH15Y8Fv7Bcei3EktxRqKhFnNRcSIArXFuK5kCAAA= X-CMS-MailID: 20200128133416eucas1p172512260c12e8cce9516dd194c467134 X-Msg-Generator: CA X-RootMTR: 20200128133416eucas1p172512260c12e8cce9516dd194c467134 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133416eucas1p172512260c12e8cce9516dd194c467134 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move sata_link_{debounce,resume}() to libata-core-sata.c * add static inline for CONFIG_SATA_HOST=n case (only one, for sata_link_resume() is needed) Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 34766 572 40 35378 8a32 drivers/ata/libata-core.o after: 33909 572 40 34521 86d9 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 138 +++++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 138 --------------------------------- include/linux/libata.h | 14 +++- 3 files changed, 148 insertions(+), 142 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index 4aa938c1df8d..73f8be386a44 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -446,6 +446,144 @@ int sata_set_spd(struct ata_link *link) } EXPORT_SYMBOL_GPL(sata_set_spd); +/** + * sata_link_debounce - debounce SATA phy status + * @link: ATA link to debounce SATA phy status for + * @params: timing parameters { interval, duration, timeout } in msec + * @deadline: deadline jiffies for the operation + * + * Make sure SStatus of @link reaches stable state, determined by + * holding the same value where DET is not 1 for @duration polled + * every @interval, before @timeout. Timeout constraints the + * beginning of the stable state. Because DET gets stuck at 1 on + * some controllers after hot unplugging, this functions waits + * until timeout then returns 0 if DET is stable at 1. + * + * @timeout is further limited by @deadline. The sooner of the + * two is used. + * + * LOCKING: + * Kernel thread context (may sleep) + * + * RETURNS: + * 0 on success, -errno on failure. + */ +int sata_link_debounce(struct ata_link *link, const unsigned long *params, + unsigned long deadline) +{ + unsigned long interval = params[0]; + unsigned long duration = params[1]; + unsigned long last_jiffies, t; + u32 last, cur; + int rc; + + t = ata_deadline(jiffies, params[2]); + if (time_before(t, deadline)) + deadline = t; + + if ((rc = sata_scr_read(link, SCR_STATUS, &cur))) + return rc; + cur &= 0xf; + + last = cur; + last_jiffies = jiffies; + + while (1) { + ata_msleep(link->ap, interval); + if ((rc = sata_scr_read(link, SCR_STATUS, &cur))) + return rc; + cur &= 0xf; + + /* DET stable? */ + if (cur == last) { + if (cur == 1 && time_before(jiffies, deadline)) + continue; + if (time_after(jiffies, + ata_deadline(last_jiffies, duration))) + return 0; + continue; + } + + /* unstable, start over */ + last = cur; + last_jiffies = jiffies; + + /* Check deadline. If debouncing failed, return + * -EPIPE to tell upper layer to lower link speed. + */ + if (time_after(jiffies, deadline)) + return -EPIPE; + } +} +EXPORT_SYMBOL_GPL(sata_link_debounce); + +/** + * sata_link_resume - resume SATA link + * @link: ATA link to resume SATA + * @params: timing parameters { interval, duration, timeout } in msec + * @deadline: deadline jiffies for the operation + * + * Resume SATA phy @link and debounce it. + * + * LOCKING: + * Kernel thread context (may sleep) + * + * RETURNS: + * 0 on success, -errno on failure. + */ +int sata_link_resume(struct ata_link *link, const unsigned long *params, + unsigned long deadline) +{ + int tries = ATA_LINK_RESUME_TRIES; + u32 scontrol, serror; + int rc; + + if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) + return rc; + + /* + * Writes to SControl sometimes get ignored under certain + * controllers (ata_piix SIDPR). Make sure DET actually is + * cleared. + */ + do { + scontrol = (scontrol & 0x0f0) | 0x300; + if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) + return rc; + /* + * Some PHYs react badly if SStatus is pounded + * immediately after resuming. Delay 200ms before + * debouncing. + */ + if (!(link->flags & ATA_LFLAG_NO_DB_DELAY)) + ata_msleep(link->ap, 200); + + /* is SControl restored correctly? */ + if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) + return rc; + } while ((scontrol & 0xf0f) != 0x300 && --tries); + + if ((scontrol & 0xf0f) != 0x300) { + ata_link_warn(link, "failed to resume link (SControl %X)\n", + scontrol); + return 0; + } + + if (tries < ATA_LINK_RESUME_TRIES) + ata_link_warn(link, "link resume succeeded after %d retries\n", + ATA_LINK_RESUME_TRIES - tries); + + if ((rc = sata_link_debounce(link, params, deadline))) + return rc; + + /* clear SError, some PHYs require this even for SRST to work */ + if (!(rc = sata_scr_read(link, SCR_ERROR, &serror))) + rc = sata_scr_write(link, SCR_ERROR, serror); + + return rc != -EINVAL ? rc : 0; +} +EXPORT_SYMBOL_GPL(sata_link_resume); + /** * sata_link_scr_lpm - manipulate SControl IPM and SPM fields * @link: ATA link to manipulate SControl for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index ff44d16b718e..d3587fb1e78c 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -3190,144 +3190,6 @@ int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, } EXPORT_SYMBOL_GPL(ata_wait_after_reset); -/** - * sata_link_debounce - debounce SATA phy status - * @link: ATA link to debounce SATA phy status for - * @params: timing parameters { interval, duration, timeout } in msec - * @deadline: deadline jiffies for the operation - * - * Make sure SStatus of @link reaches stable state, determined by - * holding the same value where DET is not 1 for @duration polled - * every @interval, before @timeout. Timeout constraints the - * beginning of the stable state. Because DET gets stuck at 1 on - * some controllers after hot unplugging, this functions waits - * until timeout then returns 0 if DET is stable at 1. - * - * @timeout is further limited by @deadline. The sooner of the - * two is used. - * - * LOCKING: - * Kernel thread context (may sleep) - * - * RETURNS: - * 0 on success, -errno on failure. - */ -int sata_link_debounce(struct ata_link *link, const unsigned long *params, - unsigned long deadline) -{ - unsigned long interval = params[0]; - unsigned long duration = params[1]; - unsigned long last_jiffies, t; - u32 last, cur; - int rc; - - t = ata_deadline(jiffies, params[2]); - if (time_before(t, deadline)) - deadline = t; - - if ((rc = sata_scr_read(link, SCR_STATUS, &cur))) - return rc; - cur &= 0xf; - - last = cur; - last_jiffies = jiffies; - - while (1) { - ata_msleep(link->ap, interval); - if ((rc = sata_scr_read(link, SCR_STATUS, &cur))) - return rc; - cur &= 0xf; - - /* DET stable? */ - if (cur == last) { - if (cur == 1 && time_before(jiffies, deadline)) - continue; - if (time_after(jiffies, - ata_deadline(last_jiffies, duration))) - return 0; - continue; - } - - /* unstable, start over */ - last = cur; - last_jiffies = jiffies; - - /* Check deadline. If debouncing failed, return - * -EPIPE to tell upper layer to lower link speed. - */ - if (time_after(jiffies, deadline)) - return -EPIPE; - } -} -EXPORT_SYMBOL_GPL(sata_link_debounce); - -/** - * sata_link_resume - resume SATA link - * @link: ATA link to resume SATA - * @params: timing parameters { interval, duration, timeout } in msec - * @deadline: deadline jiffies for the operation - * - * Resume SATA phy @link and debounce it. - * - * LOCKING: - * Kernel thread context (may sleep) - * - * RETURNS: - * 0 on success, -errno on failure. - */ -int sata_link_resume(struct ata_link *link, const unsigned long *params, - unsigned long deadline) -{ - int tries = ATA_LINK_RESUME_TRIES; - u32 scontrol, serror; - int rc; - - if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) - return rc; - - /* - * Writes to SControl sometimes get ignored under certain - * controllers (ata_piix SIDPR). Make sure DET actually is - * cleared. - */ - do { - scontrol = (scontrol & 0x0f0) | 0x300; - if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) - return rc; - /* - * Some PHYs react badly if SStatus is pounded - * immediately after resuming. Delay 200ms before - * debouncing. - */ - if (!(link->flags & ATA_LFLAG_NO_DB_DELAY)) - ata_msleep(link->ap, 200); - - /* is SControl restored correctly? */ - if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) - return rc; - } while ((scontrol & 0xf0f) != 0x300 && --tries); - - if ((scontrol & 0xf0f) != 0x300) { - ata_link_warn(link, "failed to resume link (SControl %X)\n", - scontrol); - return 0; - } - - if (tries < ATA_LINK_RESUME_TRIES) - ata_link_warn(link, "link resume succeeded after %d retries\n", - ATA_LINK_RESUME_TRIES - tries); - - if ((rc = sata_link_debounce(link, params, deadline))) - return rc; - - /* clear SError, some PHYs require this even for SRST to work */ - if (!(rc = sata_scr_read(link, SCR_ERROR, &serror))) - rc = sata_scr_write(link, SCR_ERROR, serror); - - return rc != -EINVAL ? rc : 0; -} -EXPORT_SYMBOL_GPL(sata_link_resume); - /** * ata_std_prereset - prepare for reset * @link: ATA link to be reset diff --git a/include/linux/libata.h b/include/linux/libata.h index e466dbe56158..8a11ae3a019f 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1079,10 +1079,6 @@ static inline int ata_port_is_dummy(struct ata_port *ap) extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, int (*check_ready)(struct ata_link *link)); -extern int sata_link_debounce(struct ata_link *link, - const unsigned long *params, unsigned long deadline); -extern int sata_link_resume(struct ata_link *link, const unsigned long *params, - unsigned long deadline); extern int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, unsigned long deadline, bool *online, int (*check_ready)(struct ata_link *)); @@ -1196,6 +1192,10 @@ extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port * */ #ifdef CONFIG_SATA_HOST extern int sata_set_spd(struct ata_link *link); +extern int sata_link_debounce(struct ata_link *link, + const unsigned long *params, unsigned long deadline); +extern int sata_link_resume(struct ata_link *link, const unsigned long *params, + unsigned long deadline); extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, bool spm_wakeup); extern int ata_slave_link_init(struct ata_port *ap); @@ -1205,6 +1205,12 @@ extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); extern bool sata_lpm_ignore_phy_events(struct ata_link *link); #else static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; } +static inline int sata_link_resume(struct ata_link *link, + const unsigned long *params, + unsigned long deadline) +{ + return -EOPNOTSUPP; +} #endif extern int ata_cable_40wire(struct ata_port *ap); From patchwork Tue Jan 28 13:33:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230333 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=JgbbXAiI; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKK5ymHz9sSL for ; Wed, 29 Jan 2020 00:35:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726162AbgA1Net (ORCPT ); Tue, 28 Jan 2020 08:34:49 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58923 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726525AbgA1NeU (ORCPT ); Tue, 28 Jan 2020 08:34:20 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133417euoutp014ec82854c6cdddee2199fb8d784efcbf~uEFCqf-X30189001890euoutp01O for ; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133417euoutp014ec82854c6cdddee2199fb8d784efcbf~uEFCqf-X30189001890euoutp01O DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218457; bh=MSsDQt5Pg4t4BFk2Ll3SVYQv6ObFV5LjYpoHSs93Inw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JgbbXAiImp9pltcVS6+T5YsQhHCme/SFUwPfY3DeCC4bbFlWWhsRJ76jkFbYauTPP n3/rG8kBw+J9ehL43AikaOYLoK0IO2Brz126bvIbh/Lojq18B9rAbF48AiGsyRvkRV 8e7UBo76I1nwdmVPfCDDTwWuMm9q3g9yb7SRNJdE= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133417eucas1p2a022c9c89c709de575118cfd88db350c~uEFCOLNH32469924699eucas1p2x; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id A9.DA.60698.958303E5; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133417eucas1p1b907d220ad2b809cdf628fb47a14589c~uEFB57vDd0713407134eucas1p1v; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133417eusmtrp24cf63c301d0a681fb9929ef9c67fce57~uEFB5YMPd0330103301eusmtrp23; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-bf-5e30385941d4 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 45.92.08375.858303E5; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133416eusmtip21911f557d610ec023d6ac9a132b2f1a1~uEFBiNZSG0657106571eusmtip2j; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 19/28] ata: move sata_link_hardreset() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:34 +0100 Message-Id: <20200128133343.29905-20-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djP87qRFgZxBmuaJSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBrFZZOS mpNZllqkb5fAlfFxwQX2gtnhFU2HbzE2MO527WLk5JAQMJFYdu0tYxcjF4eQwApGiYNnzrBD OF8YJRY+vAGV+cwo8f/EU0aYlj0Nr9kgEssZJc6dusUCkgBruXEWzGYTsJKY2L4KrEFEQEGi 5/dKsAZmgTWMEqsON4ElhAV8JP5cX8oGYrMIqErcbPrDBGLzCthJ3Hz9jR1im7zE1m+fWLsY OTg4geI9e80hSgQlTs58AraLGaikeetsZpD5EgLt7BLHti+B6nWReHf2CCuELSzx6vgWqLiM xP+d85kgGtYxSvzteAHVvZ1RYvnkf2wQVdYSd879YgPZzCygKbF+lz5E2FFi2ollTCBhCQE+ iRtvBSGO4JOYtG06M0SYV6KjTQiiWk1iw7INbDBru3auZIawPSR+zfjEPoFRcRaSd2YheWcW wt4FjMyrGMVTS4tz01OLjfNSy/WKE3OLS/PS9ZLzczcxAhPM6X/Hv+5g3Pcn6RCjAAejEg+v g5JBnBBrYllxZe4hRgkOZiUR3k4moBBvSmJlVWpRfnxRaU5q8SFGaQ4WJXFe40UvY4UE0hNL UrNTUwtSi2CyTBycUg2MonYXtp4+td7SrvX2N6aP1c9vy6gKzv69vTpA01twYX2G5DzlnWka CpOWLtrkUHo+5uTb3e8u8ORzuhS3VNx50SV981bk3lAtk4XBBa+0Tz0Qk4jmct/Qy+Hgvvdo ueevTc43Xyze11RV/eCKYcdbCxfNBaqBBxjF5dkrTeW4BQK6q7vsZ71XYinOSDTUYi4qTgQA lmzSdCwDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd0IC4M4g/+XbCxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl/FxwQX2gtnh FU2HbzE2MO527WLk5JAQMJHY0/CarYuRi0NIYCmjxPK+/axdjBxACRmJ4+vLIGqEJf5c64Kq +cQoMX/tNxaQBJuAlcTE9lWMILaIgIJEz++VYEXMAhsYJV7d/AJWJCzgI/Hn+lI2EJtFQFXi ZtMfJhCbV8BO4ubrb+wQG+Qltn77BLaYEyjes9ccJCwkYCux/sxTVohyQYmTM5+AjWQGKm/e Opt5AqPALCSpWUhSCxiZVjGKpJYW56bnFhvqFSfmFpfmpesl5+duYgTGwbZjPzfvYLy0MfgQ owAHoxIP7wwVgzgh1sSy4srcQ4wSHMxKIrydTEAh3pTEyqrUovz4otKc1OJDjKZAP0xklhJN zgfGaF5JvKGpobmFpaG5sbmxmYWSOG+HwMEYIYH0xJLU7NTUgtQimD4mDk6pBka7S0xnD/xp UykV+b1t3Xm9aj1h32tzf3ssOcf+xGeB7F3RUM/wC2E7mbn3mwanTJmQdHpXU1pY+t0pDgFN +/f7+Sc6NouIzZtzPJuxXYPdgyUodqn2g38FyUf5FjoYTM86+fRerHjX7ltrnzeb8m6XfKF/ 6N2nfRp6N6timRmfLzk7Q0W3x1+JpTgj0VCLuag4EQAH8N9zmQIAAA== X-CMS-MailID: 20200128133417eucas1p1b907d220ad2b809cdf628fb47a14589c X-Msg-Generator: CA X-RootMTR: 20200128133417eucas1p1b907d220ad2b809cdf628fb47a14589c X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133417eucas1p1b907d220ad2b809cdf628fb47a14589c References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move sata_link_hardreset() to libata-core-sata.c * add static inline for CONFIG_SATA_HOST=n case * make sata_set_spd_needed() static Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 33909 572 40 34521 86d9 drivers/ata/libata-core.o after: 33574 572 40 34186 858a drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 115 ++++++++++++++++++++++++++++++++- drivers/ata/libata-core.c | 113 -------------------------------- drivers/ata/libata.h | 2 - include/linux/libata.h | 16 ++++- 4 files changed, 127 insertions(+), 119 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index 73f8be386a44..b43207396829 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -405,7 +405,7 @@ static int __sata_set_spd_needed(struct ata_link *link, u32 *scontrol) * RETURNS: * 1 if SATA spd configuration is needed, 0 otherwise. */ -int sata_set_spd_needed(struct ata_link *link) +static int sata_set_spd_needed(struct ata_link *link) { u32 scontrol; @@ -659,6 +659,119 @@ int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, } EXPORT_SYMBOL_GPL(sata_link_scr_lpm); +/** + * sata_link_hardreset - reset link via SATA phy reset + * @link: link to reset + * @timing: timing parameters { interval, duration, timeout } in msec + * @deadline: deadline jiffies for the operation + * @online: optional out parameter indicating link onlineness + * @check_ready: optional callback to check link readiness + * + * SATA phy-reset @link using DET bits of SControl register. + * After hardreset, link readiness is waited upon using + * ata_wait_ready() if @check_ready is specified. LLDs are + * allowed to not specify @check_ready and wait itself after this + * function returns. Device classification is LLD's + * responsibility. + * + * *@online is set to one iff reset succeeded and @link is online + * after reset. + * + * LOCKING: + * Kernel thread context (may sleep) + * + * RETURNS: + * 0 on success, -errno otherwise. + */ +int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, + unsigned long deadline, + bool *online, int (*check_ready)(struct ata_link *)) +{ + u32 scontrol; + int rc; + + DPRINTK("ENTER\n"); + + if (online) + *online = false; + + if (sata_set_spd_needed(link)) { + /* SATA spec says nothing about how to reconfigure + * spd. To be on the safe side, turn off phy during + * reconfiguration. This works for at least ICH7 AHCI + * and Sil3124. + */ + if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) + goto out; + + scontrol = (scontrol & 0x0f0) | 0x304; + + if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) + goto out; + + sata_set_spd(link); + } + + /* issue phy wake/reset */ + if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) + goto out; + + scontrol = (scontrol & 0x0f0) | 0x301; + + if ((rc = sata_scr_write_flush(link, SCR_CONTROL, scontrol))) + goto out; + + /* Couldn't find anything in SATA I/II specs, but AHCI-1.1 + * 10.4.2 says at least 1 ms. + */ + ata_msleep(link->ap, 1); + + /* bring link back */ + rc = sata_link_resume(link, timing, deadline); + if (rc) + goto out; + /* if link is offline nothing more to do */ + if (ata_phys_link_offline(link)) + goto out; + + /* Link is online. From this point, -ENODEV too is an error. */ + if (online) + *online = true; + + if (sata_pmp_supported(link->ap) && ata_is_host_link(link)) { + /* If PMP is supported, we have to do follow-up SRST. + * Some PMPs don't send D2H Reg FIS after hardreset if + * the first port is empty. Wait only for + * ATA_TMOUT_PMP_SRST_WAIT. + */ + if (check_ready) { + unsigned long pmp_deadline; + + pmp_deadline = ata_deadline(jiffies, + ATA_TMOUT_PMP_SRST_WAIT); + if (time_after(pmp_deadline, deadline)) + pmp_deadline = deadline; + ata_wait_ready(link, pmp_deadline, check_ready); + } + rc = -EAGAIN; + goto out; + } + + rc = 0; + if (check_ready) + rc = ata_wait_ready(link, deadline, check_ready); + out: + if (rc && rc != -EAGAIN) { + /* online is set iff link is online && reset succeeded */ + if (online) + *online = false; + ata_link_err(link, "COMRESET failed (errno=%d)\n", rc); + } + DPRINTK("EXIT, rc=%d\n", rc); + return rc; +} +EXPORT_SYMBOL_GPL(sata_link_hardreset); + /** * ata_slave_link_init - initialize slave link * @ap: port to initialize slave link for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index d3587fb1e78c..bd82cab2996e 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -3236,119 +3236,6 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline) } EXPORT_SYMBOL_GPL(ata_std_prereset); -/** - * sata_link_hardreset - reset link via SATA phy reset - * @link: link to reset - * @timing: timing parameters { interval, duration, timeout } in msec - * @deadline: deadline jiffies for the operation - * @online: optional out parameter indicating link onlineness - * @check_ready: optional callback to check link readiness - * - * SATA phy-reset @link using DET bits of SControl register. - * After hardreset, link readiness is waited upon using - * ata_wait_ready() if @check_ready is specified. LLDs are - * allowed to not specify @check_ready and wait itself after this - * function returns. Device classification is LLD's - * responsibility. - * - * *@online is set to one iff reset succeeded and @link is online - * after reset. - * - * LOCKING: - * Kernel thread context (may sleep) - * - * RETURNS: - * 0 on success, -errno otherwise. - */ -int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, - unsigned long deadline, - bool *online, int (*check_ready)(struct ata_link *)) -{ - u32 scontrol; - int rc; - - DPRINTK("ENTER\n"); - - if (online) - *online = false; - - if (sata_set_spd_needed(link)) { - /* SATA spec says nothing about how to reconfigure - * spd. To be on the safe side, turn off phy during - * reconfiguration. This works for at least ICH7 AHCI - * and Sil3124. - */ - if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) - goto out; - - scontrol = (scontrol & 0x0f0) | 0x304; - - if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) - goto out; - - sata_set_spd(link); - } - - /* issue phy wake/reset */ - if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) - goto out; - - scontrol = (scontrol & 0x0f0) | 0x301; - - if ((rc = sata_scr_write_flush(link, SCR_CONTROL, scontrol))) - goto out; - - /* Couldn't find anything in SATA I/II specs, but AHCI-1.1 - * 10.4.2 says at least 1 ms. - */ - ata_msleep(link->ap, 1); - - /* bring link back */ - rc = sata_link_resume(link, timing, deadline); - if (rc) - goto out; - /* if link is offline nothing more to do */ - if (ata_phys_link_offline(link)) - goto out; - - /* Link is online. From this point, -ENODEV too is an error. */ - if (online) - *online = true; - - if (sata_pmp_supported(link->ap) && ata_is_host_link(link)) { - /* If PMP is supported, we have to do follow-up SRST. - * Some PMPs don't send D2H Reg FIS after hardreset if - * the first port is empty. Wait only for - * ATA_TMOUT_PMP_SRST_WAIT. - */ - if (check_ready) { - unsigned long pmp_deadline; - - pmp_deadline = ata_deadline(jiffies, - ATA_TMOUT_PMP_SRST_WAIT); - if (time_after(pmp_deadline, deadline)) - pmp_deadline = deadline; - ata_wait_ready(link, pmp_deadline, check_ready); - } - rc = -EAGAIN; - goto out; - } - - rc = 0; - if (check_ready) - rc = ata_wait_ready(link, deadline, check_ready); - out: - if (rc && rc != -EAGAIN) { - /* online is set iff link is online && reset succeeded */ - if (online) - *online = false; - ata_link_err(link, "COMRESET failed (errno=%d)\n", rc); - } - DPRINTK("EXIT, rc=%d\n", rc); - return rc; -} -EXPORT_SYMBOL_GPL(sata_link_hardreset); - /** * sata_std_hardreset - COMRESET w/o waiting or classification * @link: link to reset diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index ea614ac10c76..518a8e08a26d 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -108,7 +108,6 @@ int ata_do_link_spd_horkage(struct ata_device *dev); int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz); void sata_print_link_status(struct ata_link *link); int sata_down_spd_limit(struct ata_link *link, u32 spd_limit); -int sata_set_spd_needed(struct ata_link *link); #else static inline int ata_do_link_spd_horkage(struct ata_device *dev) { return 0; } static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, @@ -122,7 +121,6 @@ static inline int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) { return -EOPNOTSUPP; } -static inline int sata_set_spd_needed(struct ata_link *link) { return 1; } #endif /* libata-acpi.c */ diff --git a/include/linux/libata.h b/include/linux/libata.h index 8a11ae3a019f..453322cdf64a 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1079,9 +1079,6 @@ static inline int ata_port_is_dummy(struct ata_port *ap) extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, int (*check_ready)(struct ata_link *link)); -extern int sata_link_hardreset(struct ata_link *link, - const unsigned long *timing, unsigned long deadline, - bool *online, int (*check_ready)(struct ata_link *)); extern int sata_std_hardreset(struct ata_link *link, unsigned int *class, unsigned long deadline); extern void ata_std_postreset(struct ata_link *link, unsigned int *classes); @@ -1198,6 +1195,9 @@ extern int sata_link_resume(struct ata_link *link, const unsigned long *params, unsigned long deadline); extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, bool spm_wakeup); +extern int sata_link_hardreset(struct ata_link *link, + const unsigned long *timing, unsigned long deadline, + bool *online, int (*check_ready)(struct ata_link *)); extern int ata_slave_link_init(struct ata_port *ap); extern void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis); @@ -1211,6 +1211,16 @@ static inline int sata_link_resume(struct ata_link *link, { return -EOPNOTSUPP; } +static inline int sata_link_hardreset(struct ata_link *link, + const unsigned long *timing, + unsigned long deadline, + bool *online, + int (*check_ready)(struct ata_link *)) +{ + if (online) + *online = false; + return -EOPNOTSUPP; +} #endif extern int ata_cable_40wire(struct ata_port *ap); From patchwork Tue Jan 28 13:33:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230331 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=VQmvCVGY; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SK66Vczz9sRl for ; Wed, 29 Jan 2020 00:34:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726599AbgA1NeV (ORCPT ); Tue, 28 Jan 2020 08:34:21 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52418 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726548AbgA1NeT (ORCPT ); Tue, 28 Jan 2020 08:34:19 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133418euoutp0244c9b5c998ad1c130975a6bad2121997~uEFC1HLi12858228582euoutp02C for ; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133418euoutp0244c9b5c998ad1c130975a6bad2121997~uEFC1HLi12858228582euoutp02C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218458; bh=CEDKPDVx78ARY0rhMGLN2/WrTMo5btTHp+8A5sbfC1w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VQmvCVGYEOkEPeJvGkrd3pd0IQxbVSXBhOWo37kS9LU3jCjiE+x2OFSl/rMCPtLtf JpHzlkbOU34NfeLPZBpMnTyDMdoliAYPfVVd/Ily1tgpnrFwICbp2DQEeAHBs9avaD 9nxas4TjXlv2XGK4byZ2u+zAxqVavdVzG9Gl/GuY= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133417eucas1p132d7a2b0e104d8e0824b4096c93fb000~uEFCqj6s20713407134eucas1p1w; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id A0.DA.61286.958303E5; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133417eucas1p28b1e3fbb20c686bd75997f5339993071~uEFCKwOc51871818718eucas1p2L; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133417eusmtrp2e7c771d1b394cb125aefe84d2ce57772~uEFCKQkDi0330003300eusmtrp27; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-8a-5e3038597d59 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id A2.82.07950.958303E5; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133417eusmtip296496a0bc9275258b5d53e4f03cac4aa~uEFB16PmA0113601136eusmtip2H; Tue, 28 Jan 2020 13:34:16 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 20/28] ata: move sata_link_init_spd() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:35 +0100 Message-Id: <20200128133343.29905-21-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7djPc7qRFgZxBt++mFisvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+PE7V2sBWe0K57fP8TSwHhJuYuRk0NCwETiSNs+pi5GLg4hgRWMEp1P26Gc L4wSs47/ZIZwPjNKNPxfwNrFyAHWcrVNGyK+nFHiz/xFrHAdkzsOs4HMZROwkpjYvooRxBYR UJDo+b2SDaSIWWANo8Sqw01gCWEBb4mFv76wgNgsAqoSDc9ngDXzCthJzHx7mAXiQHmJrd8+ gW3mBIr37DWHKBGUODnzCVgJM1BJ89bZYJdKCDSzS2w52s4O0esi8bTxMyuELSzx6vgWqLiM xP+d85kgGtYxSvzteAHVvZ1RYvnkf2wQVdYSd879YgPZzCygKbF+lz5E2FHi+Lp7LJCg4JO4 8VYQ4gg+iUnbpjNDhHklOtqEIKrVJDYs28AGs7Zr50qoEg+JmadLJjAqzkLyzSwk38xCWLuA kXkVo3hqaXFuemqxYV5quV5xYm5xaV66XnJ+7iZGYHo5/e/4px2MXy8lHWIU4GBU4uGdoWIQ J8SaWFZcmXuIUYKDWUmEt5MJKMSbklhZlVqUH19UmpNafIhRmoNFSZzXeNHLWCGB9MSS1OzU 1ILUIpgsEwenVAOjBFPrpQcqXKX7q022uLuZtAs/9Gow3WnIeuzN3uTZ3iccvWJcRVUM+A6u c7d4qhwq+6ReWVJ9w8neHbm1ItG8qxeuz6/ISLvwq7c4csYvtl3vNj/ezyp47tmFiI6VrxSP 9bpIR1uyTJBJCPZyv2RRcy/5tMtyV6/fcxTj2AVkjqTVz53V2KXEUpyRaKjFXFScCAAvEc2y KwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmphkeLIzCtJLcpLzFFi42I5/e/4Pd1IC4M4g08tIhar7/azWWycsZ7V 4tmtvUwWx3Y8YrK4vGsOm8Xc1unsDmweO2fdZfe4fLbU49DhDkaPvi2rGD0+b5ILYI3SsynK Ly1JVcjILy6xVYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJzcksSy3St0vQyzhxexdrwRnt iuf3D7E0MF5S7mLk4JAQMJG42qbdxcjJISSwlFHixm0ziLCMxPH1ZSBhCQFhiT/Xuti6GLmA Sj4xSpyc/YIVJMEmYCUxsX0VI4gtIqAg0fN7JVgRs8AGRolXN7+wgCSEBbwlFv6CsFkEVCUa ns9gA7F5BewkZr49zAKxQV5i67dPrCCLOYHiPXvNIe6xlVh/5ikrRLmgxMmZT8DKmYHKm7fO Zp7AKDALSWoWktQCRqZVjCKppcW56bnFRnrFibnFpXnpesn5uZsYgTGw7djPLTsYu94FH2IU 4GBU4uF1UDKIE2JNLCuuzD3EKMHBrCTC28kEFOJNSaysSi3Kjy8qzUktPsRoCvTDRGYp0eR8 YHzmlcQbmhqaW1gamhubG5tZKInzdggcjBESSE8sSc1OTS1ILYLpY+LglGpgXHUrWWLxaWWD 2S+0H6ySsTsx+17ehdhD9m4S+xaEv3vCslpxrxj71WS+m08N03Yd0Iq+uTrfWEbhnDVX72KW pTmcIpZttawnmwP+8h5g/pZnV/9KetoVvc7kjS3ah1k4D0+Z1cly5Mq1QJHm4OWX3308UJjT d37NxbfTpzD8VJ9udJVxtiarmxJLcUaioRZzUXEiAL4si3+XAgAA X-CMS-MailID: 20200128133417eucas1p28b1e3fbb20c686bd75997f5339993071 X-Msg-Generator: CA X-RootMTR: 20200128133417eucas1p28b1e3fbb20c686bd75997f5339993071 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133417eucas1p28b1e3fbb20c686bd75997f5339993071 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move sata_link_init_spd() to libata-core-sata.c * add static inline for CONFIG_SATA_HOST=n case * cover ata_force_link_limits() with CONFIG_SATA_HOST ifdef (it depends on code from libata-core.c while its only user is in libata-core-sata.c) Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 33574 572 40 34186 858a drivers/ata/libata-core.o after: 33212 572 40 33824 8420 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 33 ++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 37 +++------------------------------- drivers/ata/libata.h | 7 ++++++- 3 files changed, 42 insertions(+), 35 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index b43207396829..8c6ed82dc166 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -772,6 +772,39 @@ int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, } EXPORT_SYMBOL_GPL(sata_link_hardreset); +/** + * sata_link_init_spd - Initialize link->sata_spd_limit + * @link: Link to configure sata_spd_limit for + * + * Initialize @link->[hw_]sata_spd_limit to the currently + * configured value. + * + * LOCKING: + * Kernel thread context (may sleep). + * + * RETURNS: + * 0 on success, -errno on failure. + */ +int sata_link_init_spd(struct ata_link *link) +{ + u8 spd; + int rc; + + rc = sata_scr_read(link, SCR_CONTROL, &link->saved_scontrol); + if (rc) + return rc; + + spd = (link->saved_scontrol >> 4) & 0xf; + if (spd) + link->hw_sata_spd_limit &= (1 << spd) - 1; + + ata_force_link_limits(link); + + link->sata_spd_limit = link->hw_sata_spd_limit; + + return 0; +} + /** * ata_slave_link_init - initialize slave link * @ap: port to initialize slave link for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index bd82cab2996e..17f1d98eab71 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -338,6 +338,7 @@ void ata_force_cbl(struct ata_port *ap) } } +#ifdef CONFIG_SATA_HOST /** * ata_force_link_limits - force link limits according to libata.force * @link: ATA link of interest @@ -354,7 +355,7 @@ void ata_force_cbl(struct ata_port *ap) * LOCKING: * EH context. */ -static void ata_force_link_limits(struct ata_link *link) +void ata_force_link_limits(struct ata_link *link) { bool did_spd = false; int linkno = link->pmp; @@ -389,6 +390,7 @@ static void ata_force_link_limits(struct ata_link *link) } } } +#endif /** * ata_force_xfermask - force xfermask according to libata.force @@ -5078,39 +5080,6 @@ void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp) } } -/** - * sata_link_init_spd - Initialize link->sata_spd_limit - * @link: Link to configure sata_spd_limit for - * - * Initialize @link->[hw_]sata_spd_limit to the currently - * configured value. - * - * LOCKING: - * Kernel thread context (may sleep). - * - * RETURNS: - * 0 on success, -errno on failure. - */ -int sata_link_init_spd(struct ata_link *link) -{ - u8 spd; - int rc; - - rc = sata_scr_read(link, SCR_CONTROL, &link->saved_scontrol); - if (rc) - return rc; - - spd = (link->saved_scontrol >> 4) & 0xf; - if (spd) - link->hw_sata_spd_limit &= (1 << spd) - 1; - - ata_force_link_limits(link); - - link->sata_spd_limit = link->hw_sata_spd_limit; - - return 0; -} - /** * ata_port_alloc - allocate and initialize basic ATA port resources * @host: ATA host this allocated port belongs to diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 518a8e08a26d..8f5da7be88fe 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -76,7 +76,6 @@ extern bool ata_phys_link_online(struct ata_link *link); extern bool ata_phys_link_offline(struct ata_link *link); extern void ata_dev_init(struct ata_device *dev); extern void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp); -extern int sata_link_init_spd(struct ata_link *link); extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg); extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg); extern struct ata_port *ata_port_alloc(struct ata_host *host); @@ -85,6 +84,7 @@ extern int ata_port_probe(struct ata_port *ap); extern void __ata_port_probe(struct ata_port *ap); extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log, u8 page, void *buf, unsigned int sectors); +extern void ata_force_link_limits(struct ata_link *link); static inline bool ata_sstatus_online(u32 sstatus) { @@ -108,6 +108,7 @@ int ata_do_link_spd_horkage(struct ata_device *dev); int ata_dev_config_ncq(struct ata_device *dev, char *desc, size_t desc_sz); void sata_print_link_status(struct ata_link *link); int sata_down_spd_limit(struct ata_link *link, u32 spd_limit); +int sata_link_init_spd(struct ata_link *link); #else static inline int ata_do_link_spd_horkage(struct ata_device *dev) { return 0; } static inline int ata_dev_config_ncq(struct ata_device *dev, char *desc, @@ -121,6 +122,10 @@ static inline int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) { return -EOPNOTSUPP; } +static inline int sata_link_init_spd(struct ata_link *link) +{ + return -EOPNOTSUPP; +} #endif /* libata-acpi.c */ From patchwork Tue Jan 28 13:33:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230324 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=rR//N+6N; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SJZ30dbz9sRV for ; Wed, 29 Jan 2020 00:34:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726548AbgA1NeV (ORCPT ); Tue, 28 Jan 2020 08:34:21 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58987 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726557AbgA1NeT (ORCPT ); Tue, 28 Jan 2020 08:34:19 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133418euoutp01641fc49598555bc078cf51da1eb05de3~uEFDEeMT00325703257euoutp01O for ; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133418euoutp01641fc49598555bc078cf51da1eb05de3~uEFDEeMT00325703257euoutp01O DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218458; bh=8/d83X2GMFWte90CRHDeZ11Hw0OcTRKjIJ3T+rqa7hE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rR//N+6N3692tTC8smygh/ol6oO7xZM1eqgOr6e4d4cNYsUGlMFIXrJBwiFZf+7jP /lBusZbZ4O3Ik6OO0zz31pnI7/HJl/6mRkQEex+JTE9TQyopf/AAuxUMlC7dmNeJFc fGJqG/MAuA6Y0DK7mbYM15Y2byihG1fw6iDJ2mZs= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133418eucas1p1d67cd1530bcba3b151ca7243c0919915~uEFC3AGGS1375113751eucas1p1J; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 76.5A.60679.A58303E5; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133417eucas1p27f91558f4b86f6951d2f9f1ed19d84b5~uEFCjq-xu2469924699eucas1p2z; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133417eusmtrp262dad9ac779ad03c2d198d880f7afeeb~uEFCjIntb0330103301eusmtrp25; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-59-5e30385aa0c3 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id C5.92.08375.958303E5; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133417eusmtip22a22b559b3fd1c74a17a98ecdced0af9~uEFCJwRAA0657106571eusmtip2k; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 21/28] ata: move ata_qc_complete_multiple() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:36 +0100 Message-Id: <20200128133343.29905-22-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djPc7pRFgZxBn1XWSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBrFZZOS mpNZllqkb5fAldE16S1LwVH9iu1bTrM1MJ5S62Lk5JAQMJE4tq2PrYuRi0NIYAWjREfDDhYI 5wujxLwX11ghnM+MEguvbmCFaXn1uo8dIrGcUeLwy4lscC3Trz5iBqliE7CSmNi+ihHEFhFQ kOj5vRKsiFlgDaPEqsNNYAlhgWCJFTOnMoHYLAKqEjsXfAFr5hWwk7h76BMbxDp5ia3fPgGt 5uDgBIr37DWHKBGUODnzCQuIzQxU0rx1NjNEeTu7xOeNdRC2i8TBbWug4sISr45vYYewZST+ 75zPBHKPhMA6Rom/HS+YIZztjBLLJ/+DWmwtcefcLzaQxcwCmhLrd+lDhB0lDkybww4SlhDg k7jxVhDiBj6JSdumM0OEeSU62oQgqtUkNizbwAaztmvnSqhzPCQOXv3PPoFRcRaSb2Yh+WYW wt4FjMyrGMVTS4tz01OLjfJSy/WKE3OLS/PS9ZLzczcxAhPM6X/Hv+xg3PUn6RCjAAejEg/v DBWDOCHWxLLiytxDjBIczEoivJ1MQCHelMTKqtSi/Pii0pzU4kOM0hwsSuK8xotexgoJpCeW pGanphakFsFkmTg4pRoYFa/PWt6qviT/dpztbmYp19RPv9fc13/ydh175p3LLmL96f/7H2aX /ir7paDvv0A66ofz4cTQedOZpAQKzzt1GRpPnnVq2+NZslcMn83/6B6e/+HQwsNy1fc/SOR8 KznhEKfUJBF8ISlZ2VOnxW7mtTLXzT861vAY6Wlccgy4m+D3tq3Y6s1MJZbijERDLeai4kQA 79Lk6ywDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd1IC4M4gzOnNCxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl9E16S1LwVH9 iu1bTrM1MJ5S62Lk5JAQMJF49bqPvYuRi0NIYCmjRP/CA2xdjBxACRmJ4+vLIGqEJf5c62KD qPnEKPG++wwLSIJNwEpiYvsqRhBbREBBouf3SrAiZoENjBKvbn4BKxIWCJSYv/MwG4jNIqAq sXPBF2YQm1fATuLuoU9sEBvkJbZ++8QKspgTKN6z1xwkLCRgK7H+zFNWiHJBiZMzn4CNZAYq b946m3kCo8AsJKlZSFILGJlWMYqklhbnpucWG+oVJ+YWl+al6yXn525iBMbBtmM/N+9gvLQx +BCjAAejEg/vDBWDOCHWxLLiytxDjBIczEoivJ1MQCHelMTKqtSi/Pii0pzU4kOMpkA/TGSW Ek3OB8ZoXkm8oamhuYWlobmxubGZhZI4b4fAwRghgfTEktTs1NSC1CKYPiYOTqkGxil9xrOj K3c8tuC5xPhoQp13tX7/vg3Hmn17/RY73F53MqSyOqY0ttlDK1vpHxOPieTT/771IZFOPcuy 2mLaZwVaflvls3Q/Z8N/4UrfG0063LxtardiHqy6t82bvYLj/nnD60pHgh1r2Fpt1ogL6BoW 8YdmT723Wv80z4S/Ov8XcHYb/q5UYinOSDTUYi4qTgQAcA23f5kCAAA= X-CMS-MailID: 20200128133417eucas1p27f91558f4b86f6951d2f9f1ed19d84b5 X-Msg-Generator: CA X-RootMTR: 20200128133417eucas1p27f91558f4b86f6951d2f9f1ed19d84b5 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133417eucas1p27f91558f4b86f6951d2f9f1ed19d84b5 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move ata_qc_complete_multiple() to libata-core-sata.c Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 33212 572 40 33824 8420 drivers/ata/libata-core.o after: 32815 572 40 33427 8293 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 59 ++++++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 59 ---------------------------------- include/linux/libata.h | 2 +- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index 8c6ed82dc166..5749aa57c352 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -772,6 +772,65 @@ int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, } EXPORT_SYMBOL_GPL(sata_link_hardreset); +/** + * ata_qc_complete_multiple - Complete multiple qcs successfully + * @ap: port in question + * @qc_active: new qc_active mask + * + * Complete in-flight commands. This functions is meant to be + * called from low-level driver's interrupt routine to complete + * requests normally. ap->qc_active and @qc_active is compared + * and commands are completed accordingly. + * + * Always use this function when completing multiple NCQ commands + * from IRQ handlers instead of calling ata_qc_complete() + * multiple times to keep IRQ expect status properly in sync. + * + * LOCKING: + * spin_lock_irqsave(host lock) + * + * RETURNS: + * Number of completed commands on success, -errno otherwise. + */ +int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active) +{ + u64 done_mask, ap_qc_active = ap->qc_active; + int nr_done = 0; + + /* + * If the internal tag is set on ap->qc_active, then we care about + * bit0 on the passed in qc_active mask. Move that bit up to match + * the internal tag. + */ + if (ap_qc_active & (1ULL << ATA_TAG_INTERNAL)) { + qc_active |= (qc_active & 0x01) << ATA_TAG_INTERNAL; + qc_active ^= qc_active & 0x01; + } + + done_mask = ap_qc_active ^ qc_active; + + if (unlikely(done_mask & qc_active)) { + ata_port_err(ap, "illegal qc_active transition (%08llx->%08llx)\n", + ap->qc_active, qc_active); + return -EINVAL; + } + + while (done_mask) { + struct ata_queued_cmd *qc; + unsigned int tag = __ffs64(done_mask); + + qc = ata_qc_from_tag(ap, tag); + if (qc) { + ata_qc_complete(qc); + nr_done++; + } + done_mask &= ~(1ULL << tag); + } + + return nr_done; +} +EXPORT_SYMBOL_GPL(ata_qc_complete_multiple); + /** * sata_link_init_spd - Initialize link->sata_spd_limit * @link: Link to configure sata_spd_limit for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 17f1d98eab71..204e64ff4b93 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -4456,65 +4456,6 @@ u64 ata_qc_get_active(struct ata_port *ap) } EXPORT_SYMBOL_GPL(ata_qc_get_active); -/** - * ata_qc_complete_multiple - Complete multiple qcs successfully - * @ap: port in question - * @qc_active: new qc_active mask - * - * Complete in-flight commands. This functions is meant to be - * called from low-level driver's interrupt routine to complete - * requests normally. ap->qc_active and @qc_active is compared - * and commands are completed accordingly. - * - * Always use this function when completing multiple NCQ commands - * from IRQ handlers instead of calling ata_qc_complete() - * multiple times to keep IRQ expect status properly in sync. - * - * LOCKING: - * spin_lock_irqsave(host lock) - * - * RETURNS: - * Number of completed commands on success, -errno otherwise. - */ -int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active) -{ - u64 done_mask, ap_qc_active = ap->qc_active; - int nr_done = 0; - - /* - * If the internal tag is set on ap->qc_active, then we care about - * bit0 on the passed in qc_active mask. Move that bit up to match - * the internal tag. - */ - if (ap_qc_active & (1ULL << ATA_TAG_INTERNAL)) { - qc_active |= (qc_active & 0x01) << ATA_TAG_INTERNAL; - qc_active ^= qc_active & 0x01; - } - - done_mask = ap_qc_active ^ qc_active; - - if (unlikely(done_mask & qc_active)) { - ata_port_err(ap, "illegal qc_active transition (%08llx->%08llx)\n", - ap->qc_active, qc_active); - return -EINVAL; - } - - while (done_mask) { - struct ata_queued_cmd *qc; - unsigned int tag = __ffs64(done_mask); - - qc = ata_qc_from_tag(ap, tag); - if (qc) { - ata_qc_complete(qc); - nr_done++; - } - done_mask &= ~(1ULL << tag); - } - - return nr_done; -} -EXPORT_SYMBOL_GPL(ata_qc_complete_multiple); - /** * ata_qc_issue - issue taskfile to device * @qc: command to issue to device diff --git a/include/linux/libata.h b/include/linux/libata.h index 453322cdf64a..62e962b62c5d 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1166,7 +1166,6 @@ extern void ata_id_c_string(const u16 *id, unsigned char *s, extern unsigned int ata_do_dev_read_id(struct ata_device *dev, struct ata_taskfile *tf, u16 *id); extern void ata_qc_complete(struct ata_queued_cmd *qc); -extern int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active); extern u64 ata_qc_get_active(struct ata_port *ap); extern void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd); extern int ata_std_bios_param(struct scsi_device *sdev, @@ -1202,6 +1201,7 @@ extern int ata_slave_link_init(struct ata_port *ap); extern void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis); extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); +extern int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active); extern bool sata_lpm_ignore_phy_events(struct ata_link *link); #else static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; } From patchwork Tue Jan 28 13:33:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230332 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=CHCZPGRX; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SKK0JVsz9sRl for ; Wed, 29 Jan 2020 00:35:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726595AbgA1Neu (ORCPT ); Tue, 28 Jan 2020 08:34:50 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58994 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726558AbgA1NeU (ORCPT ); Tue, 28 Jan 2020 08:34:20 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133418euoutp01caad8263bb155cfe4710b862e9e83c85~uEFDdz3mG0325703257euoutp01P for ; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133418euoutp01caad8263bb155cfe4710b862e9e83c85~uEFDdz3mG0325703257euoutp01P DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218458; bh=AXm0HSoMq02vwcjEKRD6f3iMCXkI1IufLmhvZIy3S/g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CHCZPGRX7V/mntRgx6btgsjXMc5OYPabRF6RxndJPLkRlAkJc0ojlv8bctjuYo11/ sP9txOY3dS4v5PiQHBixR0Tmqim0kr9ggEmZSLF/i7IffZDrWF+STsLoDcIxMy7hXj a1YHNHNvNtpM0DSE0bf5KSzFpf4rxF8qRKCw3j9w= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133418eucas1p121657ba799ac94596e06bb37318e9fde~uEFDRYeUK0089200892eucas1p18; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id AA.DA.60698.A58303E5; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133418eucas1p1b28eb901c4d21446376c1028b2977017~uEFC0nVFk0714007140eucas1p1n; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133418eusmtrp2eb935f5f3685fac7e9511a7902b1abf8~uEFC0AAn_0330003300eusmtrp28; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) X-AuditID: cbfec7f5-a29ff7000001ed1a-c6-5e30385af143 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 43.82.07950.958303E5; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133417eusmtip2942640f5c4e310c20cb0ac641eba1cce~uEFCejSHz0657406574eusmtip2i; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 22/28] ata: move sata_scr_*() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:37 +0100 Message-Id: <20200128133343.29905-23-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7djPc7pRFgZxBouXyVusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK2PGq26WggbvihkzRBoY19h0MXJwSAiYSPT1FXQxcnEICaxglNhzbDYrhPOF UWLZnc9sEM5nRommLe+Yuxg5wTp+Pf7JDJFYziix/PNtZriWhm0fwKrYBKwkJravYgSxRQQU JHp+rwQbxSywhlFi1eEmsISwgLPE1Xv/2EFsFgFViburtjCB2LwCdhLdP9ayQ6yTl9j67RMr yLGcQPGeveYQJYISJ2c+YQGxmYFKmrfOBjtCQqCZXeLX5aVQvS4SvQ37oWxhiVfHt0DZMhL/ d85ngmhYxyjxt+MFVPd2oH8m/2ODqLKWuHPuFxvIZmYBTYn1u/Qhwo4Sd+6uYYeEHp/EjbeC EEfwSUzaNp0ZIswr0dEmBFGtJrFh2QY2mLVdO1dCQ9FD4uTOL6wTGBVnIXlnFpJ3ZiHsXcDI vIpRPLW0ODc9tdg4L7Vcrzgxt7g0L10vOT93EyMwvZz+d/zrDsZ9f5IOMQpwMCrx8DooGcQJ sSaWFVfmHmKU4GBWEuHtZAIK8aYkVlalFuXHF5XmpBYfYpTmYFES5zVe9DJWSCA9sSQ1OzW1 ILUIJsvEwSnVwNj2f1rn5LLFDVXdWfOP7TT/wGyU2hCW4vr8zB1JFoN9m1cr8cxPvh3IzKTu 9nLqh1VChTK/n2gXnRa45rdftU+qlk9gU4bAh2PSCxsc2lXTXU33hn4oWfWyWJ718OdbU6q3 NJUWzV6Qk389MOzPsx3yTO3BSy7KLakyc51V8v5XtGFoK/dcPiWW4oxEQy3mouJEAPhhqVkr AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmkeLIzCtJLcpLzFFi42I5/e/4Pd0oC4M4gycOFqvv9rNZbJyxntXi 2a29TBbHdjxisri8aw6bxdzW6ewObB47Z91l97h8ttTj0OEORo++LasYPT5vkgtgjdKzKcov LUlVyMgvLrFVija0MNIztLTQMzKx1DM0No+1MjJV0rezSUnNySxLLdK3S9DLmPGqm6Wgwbti xgyRBsY1Nl2MnBwSAiYSvx7/ZO5i5OIQEljKKNFy6yyQwwGUkJE4vr4MokZY4s+1LjYQW0jg E6PE7aZIEJtNwEpiYvsqRhBbREBBouf3SjaQOcwCGxglXt38wgKSEBZwlrh67x87iM0ioCpx d9UWJhCbV8BOovvHWnaIBfISW799YgXZywkU79lrDrHLVmL9maesEOWCEidnPgEbyQxU3rx1 NvMERoFZSFKzkKQWMDKtYhRJLS3OTc8tNtIrTswtLs1L10vOz93ECIyAbcd+btnB2PUu+BCj AAejEg+vg5JBnBBrYllxZe4hRgkOZiUR3k4moBBvSmJlVWpRfnxRaU5q8SFGU6AfJjJLiSbn A6MzryTe0NTQ3MLS0NzY3NjMQkmct0PgYIyQQHpiSWp2ampBahFMHxMHp1QD44z4O8euh06N 1WdZ8iI7snXqkbKHL+8/2t+3s1D1SqJeojb7lEcHa9fUtbOucNr6U+pdoHpptrjOmVvBKamm 3eWtR+dqnzReEGFx7nz6vk3lj7Niv219WKx88X9wUSlf457LYSdyNT7XRRwuEqvc/v9Rb12H e8nE/dHzPJKn8imUHV2zvZMrQImlOCPRUIu5qDgRAB0v6DOWAgAA X-CMS-MailID: 20200128133418eucas1p1b28eb901c4d21446376c1028b2977017 X-Msg-Generator: CA X-RootMTR: 20200128133418eucas1p1b28eb901c4d21446376c1028b2977017 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133418eucas1p1b28eb901c4d21446376c1028b2977017 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move sata_scr_*() to libata-core-sata.c * add static inlines for CONFIG_SATA_HOST=n case Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 32815 572 40 33427 8293 drivers/ata/libata-core.o after: 32146 572 40 32758 7ff6 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 109 +++++++++++++++++++++++++++++++++ drivers/ata/libata-core.c | 109 --------------------------------- include/linux/libata.h | 21 +++++-- 3 files changed, 126 insertions(+), 113 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index 5749aa57c352..a3709b356fd2 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -831,6 +831,115 @@ int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active) } EXPORT_SYMBOL_GPL(ata_qc_complete_multiple); +/** + * sata_scr_valid - test whether SCRs are accessible + * @link: ATA link to test SCR accessibility for + * + * Test whether SCRs are accessible for @link. + * + * LOCKING: + * None. + * + * RETURNS: + * 1 if SCRs are accessible, 0 otherwise. + */ +int sata_scr_valid(struct ata_link *link) +{ + struct ata_port *ap = link->ap; + + return (ap->flags & ATA_FLAG_SATA) && ap->ops->scr_read; +} +EXPORT_SYMBOL_GPL(sata_scr_valid); + +/** + * sata_scr_read - read SCR register of the specified port + * @link: ATA link to read SCR for + * @reg: SCR to read + * @val: Place to store read value + * + * Read SCR register @reg of @link into *@val. This function is + * guaranteed to succeed if @link is ap->link, the cable type of + * the port is SATA and the port implements ->scr_read. + * + * LOCKING: + * None if @link is ap->link. Kernel thread context otherwise. + * + * RETURNS: + * 0 on success, negative errno on failure. + */ +int sata_scr_read(struct ata_link *link, int reg, u32 *val) +{ + if (ata_is_host_link(link)) { + if (sata_scr_valid(link)) + return link->ap->ops->scr_read(link, reg, val); + return -EOPNOTSUPP; + } + + return sata_pmp_scr_read(link, reg, val); +} +EXPORT_SYMBOL_GPL(sata_scr_read); + +/** + * sata_scr_write - write SCR register of the specified port + * @link: ATA link to write SCR for + * @reg: SCR to write + * @val: value to write + * + * Write @val to SCR register @reg of @link. This function is + * guaranteed to succeed if @link is ap->link, the cable type of + * the port is SATA and the port implements ->scr_read. + * + * LOCKING: + * None if @link is ap->link. Kernel thread context otherwise. + * + * RETURNS: + * 0 on success, negative errno on failure. + */ +int sata_scr_write(struct ata_link *link, int reg, u32 val) +{ + if (ata_is_host_link(link)) { + if (sata_scr_valid(link)) + return link->ap->ops->scr_write(link, reg, val); + return -EOPNOTSUPP; + } + + return sata_pmp_scr_write(link, reg, val); +} +EXPORT_SYMBOL_GPL(sata_scr_write); + +/** + * sata_scr_write_flush - write SCR register of the specified port and flush + * @link: ATA link to write SCR for + * @reg: SCR to write + * @val: value to write + * + * This function is identical to sata_scr_write() except that this + * function performs flush after writing to the register. + * + * LOCKING: + * None if @link is ap->link. Kernel thread context otherwise. + * + * RETURNS: + * 0 on success, negative errno on failure. + */ +int sata_scr_write_flush(struct ata_link *link, int reg, u32 val) +{ + if (ata_is_host_link(link)) { + int rc; + + if (sata_scr_valid(link)) { + rc = link->ap->ops->scr_write(link, reg, val); + if (rc == 0) + rc = link->ap->ops->scr_read(link, reg, &val); + return rc; + } + return -EOPNOTSUPP; + } + + return sata_pmp_scr_write(link, reg, val); +} +EXPORT_SYMBOL_GPL(sata_scr_write_flush); + /** * sata_link_init_spd - Initialize link->sata_spd_limit * @link: Link to configure sata_spd_limit for diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 204e64ff4b93..f7124aede419 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -4531,115 +4531,6 @@ void ata_qc_issue(struct ata_queued_cmd *qc) ata_qc_complete(qc); } -/** - * sata_scr_valid - test whether SCRs are accessible - * @link: ATA link to test SCR accessibility for - * - * Test whether SCRs are accessible for @link. - * - * LOCKING: - * None. - * - * RETURNS: - * 1 if SCRs are accessible, 0 otherwise. - */ -int sata_scr_valid(struct ata_link *link) -{ - struct ata_port *ap = link->ap; - - return (ap->flags & ATA_FLAG_SATA) && ap->ops->scr_read; -} -EXPORT_SYMBOL_GPL(sata_scr_valid); - -/** - * sata_scr_read - read SCR register of the specified port - * @link: ATA link to read SCR for - * @reg: SCR to read - * @val: Place to store read value - * - * Read SCR register @reg of @link into *@val. This function is - * guaranteed to succeed if @link is ap->link, the cable type of - * the port is SATA and the port implements ->scr_read. - * - * LOCKING: - * None if @link is ap->link. Kernel thread context otherwise. - * - * RETURNS: - * 0 on success, negative errno on failure. - */ -int sata_scr_read(struct ata_link *link, int reg, u32 *val) -{ - if (ata_is_host_link(link)) { - if (sata_scr_valid(link)) - return link->ap->ops->scr_read(link, reg, val); - return -EOPNOTSUPP; - } - - return sata_pmp_scr_read(link, reg, val); -} -EXPORT_SYMBOL_GPL(sata_scr_read); - -/** - * sata_scr_write - write SCR register of the specified port - * @link: ATA link to write SCR for - * @reg: SCR to write - * @val: value to write - * - * Write @val to SCR register @reg of @link. This function is - * guaranteed to succeed if @link is ap->link, the cable type of - * the port is SATA and the port implements ->scr_read. - * - * LOCKING: - * None if @link is ap->link. Kernel thread context otherwise. - * - * RETURNS: - * 0 on success, negative errno on failure. - */ -int sata_scr_write(struct ata_link *link, int reg, u32 val) -{ - if (ata_is_host_link(link)) { - if (sata_scr_valid(link)) - return link->ap->ops->scr_write(link, reg, val); - return -EOPNOTSUPP; - } - - return sata_pmp_scr_write(link, reg, val); -} -EXPORT_SYMBOL_GPL(sata_scr_write); - -/** - * sata_scr_write_flush - write SCR register of the specified port and flush - * @link: ATA link to write SCR for - * @reg: SCR to write - * @val: value to write - * - * This function is identical to sata_scr_write() except that this - * function performs flush after writing to the register. - * - * LOCKING: - * None if @link is ap->link. Kernel thread context otherwise. - * - * RETURNS: - * 0 on success, negative errno on failure. - */ -int sata_scr_write_flush(struct ata_link *link, int reg, u32 val) -{ - if (ata_is_host_link(link)) { - int rc; - - if (sata_scr_valid(link)) { - rc = link->ap->ops->scr_write(link, reg, val); - if (rc == 0) - rc = link->ap->ops->scr_read(link, reg, &val); - return rc; - } - return -EOPNOTSUPP; - } - - return sata_pmp_scr_write(link, reg, val); -} -EXPORT_SYMBOL_GPL(sata_scr_write_flush); - /** * ata_phys_link_online - test whether the given link is online * @link: ATA link to test diff --git a/include/linux/libata.h b/include/linux/libata.h index 62e962b62c5d..3f5d714caa43 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1119,10 +1119,6 @@ extern void ata_sas_tport_delete(struct ata_port *ap); extern void ata_sas_port_stop(struct ata_port *ap); extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *); extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap); -extern int sata_scr_valid(struct ata_link *link); -extern int sata_scr_read(struct ata_link *link, int reg, u32 *val); -extern int sata_scr_write(struct ata_link *link, int reg, u32 val); -extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val); extern bool ata_link_online(struct ata_link *link); extern bool ata_link_offline(struct ata_link *link); #ifdef CONFIG_PM @@ -1198,6 +1194,10 @@ extern int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, unsigned long deadline, bool *online, int (*check_ready)(struct ata_link *)); extern int ata_slave_link_init(struct ata_port *ap); +extern int sata_scr_valid(struct ata_link *link); +extern int sata_scr_read(struct ata_link *link, int reg, u32 *val); +extern int sata_scr_write(struct ata_link *link, int reg, u32 val); +extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val); extern void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis); extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); @@ -1221,6 +1221,19 @@ static inline int sata_link_hardreset(struct ata_link *link, *online = false; return -EOPNOTSUPP; } +static inline int sata_scr_valid(struct ata_link *link) { return 0; } +static inline int sata_scr_read(struct ata_link *link, int reg, u32 *val) +{ + return -EOPNOTSUPP; +} +static inline int sata_scr_write(struct ata_link *link, int reg, u32 val) +{ + return -EOPNOTSUPP; +} +static inline int sata_scr_write_flush(struct ata_link *link, int reg, u32 val) +{ + return -EOPNOTSUPP; +} #endif extern int ata_cable_40wire(struct ata_port *ap); From patchwork Tue Jan 28 13:33:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230328 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=mB+RnDR+; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SK35YZ8z9sRd for ; Wed, 29 Jan 2020 00:34:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726681AbgA1Nee (ORCPT ); Tue, 28 Jan 2020 08:34:34 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52438 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726564AbgA1NeV (ORCPT ); Tue, 28 Jan 2020 08:34:21 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133419euoutp02c8d00e4a80d95bbd21979df2b67225b5~uEFD76sEn2862028620euoutp02E for ; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133419euoutp02c8d00e4a80d95bbd21979df2b67225b5~uEFD76sEn2862028620euoutp02E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218459; bh=NeSh++fdyBE5U7WVo4sr4O4ZCyftf3oHxPCdwGubSgM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mB+RnDR+4BDHTof+i7yE6uSYr0JjoLd1cMQqkao4cn3h5oMxoIGkZ47u+l3TH/0P7 tqjEeWoP+XgWfLOqIH1VgcqgXBYxQ+HAhGn5uoxwkWIcCxmnwtu3wl5IZ0EF/dg1ub FnGruMaqcLwHOdvIQcTPQmqjFMF6lAggtN1hGOa8= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133418eucas1p1d1bb7165a0359e7503fe7a9d4020bc39~uEFDsMmYa1375113751eucas1p1L; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id D1.DA.61286.A58303E5; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133418eucas1p1fd63b12146a2848ab61db768fde77857~uEFDHblmv0089200892eucas1p17; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133418eusmtrp2e7c93e79848b8a99460c9d26a3e36b24~uEFDG5Bzo0330003300eusmtrp29; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-8f-5e30385a8a94 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 56.92.08375.A58303E5; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133418eusmtip26b17fdf31352cc842f866af26f81343d~uEFCycQkO0685506855eusmtip2a; Tue, 28 Jan 2020 13:34:17 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 23/28] ata: move sata_deb_timing_*() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:38 +0100 Message-Id: <20200128133343.29905-24-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprGKsWRmVeSWpSXmKPExsWy7djP87pRFgZxBjemmlmsvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK2PZSd2Cx8oVq6f/ZW9gfC/bxcjJISFgInH++TYmEFtIYAWjxLRZ0l2MXED2 F0aJwy9/MUI4nxklJkx/zgTT8fTFEhaIxHJGiZMvX7NCtAO1zF1sAWKzCVhJTGxfxQhiiwgo SPT8XskG0sAssIZRYtXhJrCEsICXxKKHN1hAbBYBVYnJx88BxTk4eAXsJC5tqoZYJi+x9dsn VpAwJ1C4Z685SJhXQFDi5MwnYJ3MQCXNW2czg4yXEGhnlzh/+DUbRK+LxOmTK6FsYYlXx7ew Q9gyEv93zmeCaFjHKPG34wVU93ZGieWT/0F1WEvcOfeLDWQzs4CmxPpd+hBhR4klC8+yg4Ql BPgkbrwVhDiCT2LStunMEGFeiY42IYhqNYkNyzawwazt2rmSGcL2kFgz9z/LBEbFWUjemYXk nVkIexcwMq9iFE8tLc5NTy02zEst1ytOzC0uzUvXS87P3cQITC2n/x3/tIPx66WkQ4wCHIxK PLwzVAzihFgTy4orcw8xSnAwK4nwdjIBhXhTEiurUovy44tKc1KLDzFKc7AoifMaL3oZKySQ nliSmp2aWpBaBJNl4uCUamDckbSOdcUad5M7f10410i9Y/aczbr2g12XvtzM8/nde9hni/zl 62UJN+ObnCzbs/bBG61+aT7l/RXfZ/VIifb4PZ17VaxdMU3p9hf5DQGOT/1Kmn7viJJTrK30 fXnf+MFWvy83NMRTD6966yLel39zhuJ9MS7xb0+ZQ15bnOPyCp9dEj9jnZwSS3FGoqEWc1Fx IgDFcc9MKQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmphkeLIzCtJLcpLzFFi42I5/e/4Pd0oC4M4g71vRSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl7HspG7BY+WK 1dP/sjcwvpftYuTkkBAwkXj6YglLFyMXh5DAUkaJyfNnMHUxcgAlZCSOry+DqBGW+HOtiw2i 5hOjxNO5z5lBEmwCVhIT21cxgtgiAgoSPb9XghUxC2xglHh18wsLSEJYwEti0cMbYDaLgKrE 5OPnGEEW8ArYSVzaVA2xQF5i67dPrCBhTqBwz15zkLCQgK3E+jNPWUFsXgFBiZMzn4BNYQYq b946m3kCo8AsJKlZSFILGJlWMYqklhbnpucWG+oVJ+YWl+al6yXn525iBMbAtmM/N+9gvLQx +BCjAAejEg/vDBWDOCHWxLLiytxDjBIczEoivJ1MQCHelMTKqtSi/Pii0pzU4kOMpkAvTGSW Ek3OB8ZnXkm8oamhuYWlobmxubGZhZI4b4fAwRghgfTEktTs1NSC1CKYPiYOTqkGxrTAmPyn vYW8y6JfiBzlePV264erk5wFGKQri3N5NJ4L17HILLN8OrH9ng/DOUXN8GBTk/8/TnY61uds 3t2kU2mprc9yf67kC3bjorvXD+S4cMjsZJo090T3pM9qrnvPOOkEzpZYsGC2pIzwt1dtGwN1 psb/Ti0WD5g3hcfWWNOJ79q3pUtslViKMxINtZiLihMBsj4sWZcCAAA= X-CMS-MailID: 20200128133418eucas1p1fd63b12146a2848ab61db768fde77857 X-Msg-Generator: CA X-RootMTR: 20200128133418eucas1p1fd63b12146a2848ab61db768fde77857 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133418eucas1p1fd63b12146a2848ab61db768fde77857 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move sata_deb_timing_*() to libata-core-sata.c * add static inline for sata_ehc_deb_timing() for CONFIG_SATA_HOST=n case Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 32146 572 40 32758 7ff6 drivers/ata/libata-core.o after: 32003 572 40 32615 7f67 drivers/ata/libata-core.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-core-sata.c | 8 ++++++++ drivers/ata/libata-core.c | 8 -------- include/linux/libata.h | 31 ++++++++++++++++++------------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/drivers/ata/libata-core-sata.c b/drivers/ata/libata-core-sata.c index a3709b356fd2..2bfbb67450f2 100644 --- a/drivers/ata/libata-core-sata.c +++ b/drivers/ata/libata-core-sata.c @@ -12,6 +12,14 @@ #include "libata.h" +/* debounce timing parameters in msecs { interval, duration, timeout } */ +const unsigned long sata_deb_timing_normal[] = { 5, 100, 2000 }; +EXPORT_SYMBOL_GPL(sata_deb_timing_normal); +const unsigned long sata_deb_timing_hotplug[] = { 25, 500, 2000 }; +EXPORT_SYMBOL_GPL(sata_deb_timing_hotplug); +const unsigned long sata_deb_timing_long[] = { 100, 2000, 5000 }; +EXPORT_SYMBOL_GPL(sata_deb_timing_long); + /** * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure * @tf: Taskfile to convert diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index f7124aede419..c7583f7e9bf0 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -65,14 +65,6 @@ #include "libata.h" #include "libata-transport.h" -/* debounce timing parameters in msecs { interval, duration, timeout } */ -const unsigned long sata_deb_timing_normal[] = { 5, 100, 2000 }; -EXPORT_SYMBOL_GPL(sata_deb_timing_normal); -const unsigned long sata_deb_timing_hotplug[] = { 25, 500, 2000 }; -EXPORT_SYMBOL_GPL(sata_deb_timing_hotplug); -const unsigned long sata_deb_timing_long[] = { 100, 2000, 5000 }; -EXPORT_SYMBOL_GPL(sata_deb_timing_long); - const struct ata_port_operations ata_base_port_ops = { .prereset = ata_std_prereset, .postreset = ata_std_postreset, diff --git a/include/linux/libata.h b/include/linux/libata.h index 3f5d714caa43..3124cad39d50 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1021,10 +1021,6 @@ struct ata_timing { /* * Core layer - drivers/ata/libata-core.c */ -extern const unsigned long sata_deb_timing_normal[]; -extern const unsigned long sata_deb_timing_hotplug[]; -extern const unsigned long sata_deb_timing_long[]; - extern struct ata_port_operations ata_dummy_port_ops; extern const struct ata_port_info ata_dummy_port_info; @@ -1062,15 +1058,6 @@ static inline int is_multi_taskfile(struct ata_taskfile *tf) (tf->command == ATA_CMD_WRITE_MULTI_FUA_EXT); } -static inline const unsigned long * -sata_ehc_deb_timing(struct ata_eh_context *ehc) -{ - if (ehc->i.flags & ATA_EHI_HOTPLUGGED) - return sata_deb_timing_hotplug; - else - return sata_deb_timing_normal; -} - static inline int ata_port_is_dummy(struct ata_port *ap) { return ap->ops == &ata_dummy_port_ops; @@ -1183,6 +1170,19 @@ extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port * * Core layer (SATA specific part) - drivers/ata/libata-core-sata.c */ #ifdef CONFIG_SATA_HOST +extern const unsigned long sata_deb_timing_normal[]; +extern const unsigned long sata_deb_timing_hotplug[]; +extern const unsigned long sata_deb_timing_long[]; + +static inline const unsigned long * +sata_ehc_deb_timing(struct ata_eh_context *ehc) +{ + if (ehc->i.flags & ATA_EHI_HOTPLUGGED) + return sata_deb_timing_hotplug; + else + return sata_deb_timing_normal; +} + extern int sata_set_spd(struct ata_link *link); extern int sata_link_debounce(struct ata_link *link, const unsigned long *params, unsigned long deadline); @@ -1204,6 +1204,11 @@ extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); extern int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active); extern bool sata_lpm_ignore_phy_events(struct ata_link *link); #else +static inline const unsigned long * +sata_ehc_deb_timing(struct ata_eh_context *ehc) +{ + return NULL; +} static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; } static inline int sata_link_resume(struct ata_link *link, const unsigned long *params, From patchwork Tue Jan 28 13:33:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230330 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=g3CpGCqV; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SK53ZSxz9sRd for ; Wed, 29 Jan 2020 00:34:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726571AbgA1Ned (ORCPT ); Tue, 28 Jan 2020 08:34:33 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58912 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726583AbgA1NeV (ORCPT ); Tue, 28 Jan 2020 08:34:21 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133419euoutp01797be67537a60df1581a61222649c954~uEFEnWwd60284402844euoutp01h for ; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133419euoutp01797be67537a60df1581a61222649c954~uEFEnWwd60284402844euoutp01h DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218460; bh=7KkbsgmQe/um6m6E7//6K5sl97KdX9f4Pf7L7oFWqz0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=g3CpGCqVK7WO1a3eQuMUsFoD0FJR4i3D7ChIxSTpuPypZEdAehT1/RN5KlB+vO1f5 X81lT/pjQcgWf4NL37q05kdKLLQi+9BArsN1BG4qo8F9e4+bkJ6qpS00n5ubjgPkuO J8EhD8E28qHL7ZlBPecBqSsR5eCG7I1p5nkaVCLk= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133419eucas1p2c81a6b3ea1c353befbb9fd588b7be714~uEFEDpJwJ0683706837eucas1p2M; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id A7.5A.60679.B58303E5; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133418eucas1p157933935f14f9c83c604bc5dc38bcbae~uEFDeUa0b1372613726eucas1p1B; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133418eusmtrp25fda2082e67cd14dd71f96b2c2ea9bde~uEFDdvqaW0330103301eusmtrp28; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-5e-5e30385b9c69 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 24.82.07950.A58303E5; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133418eusmtip2cdb17601cb057c5190d329cc14b67ba8~uEFDGaG100685506855eusmtip2b; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 24/28] ata: start separating SATA specific code from libata-scsi.c Date: Tue, 28 Jan 2020 14:33:39 +0100 Message-Id: <20200128133343.29905-25-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNKsWRmVeSWpSXmKPExsWy7djP87rRFgZxBmsuCFusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+N+4y32gp27GSsmrtzB2sC4YjZjFyMnh4SAicSkKQ/Yuxi5OIQEVjBKrHg3 kwXC+cIo8bf/GZTzmVFiV+8uVpiW+x3HGCESyxkl/jU9QWjZcXMVE0gVm4CVxMT2VWBLRAQU JHp+r2QDKWIWWMMosepwE1hCWCBE4vLPzSwgNouAqsS9tmvMIDavgJ3E/H972SHWyUts/fYJ aDUHBydQvGevOUSJoMTJmU/AWpmBSpq3zmYGmS8h0M0uMb39Lli9hICLxO1PFhBjhCVeHd8C NVJG4v/O+UwQ9euA/ux4AdW8nVFi+eR/bBBV1hJ3zv1iAxnELKApsX6XPkTYUWLx+TPMEPP5 JG68FYS4gU9i0rbpUGFeiY42IYhqNYkNyzawwazt2rmSGcL2kLj7p59lAqPiLCTfzELyzSyE vQsYmVcxiqeWFuempxYb5aWW6xUn5haX5qXrJefnbmIEJpnT/45/2cG460/SIUYBDkYlHt4Z KgZxQqyJZcWVuYcYJTiYlUR4O5mAQrwpiZVVqUX58UWlOanFhxilOViUxHmNF72MFRJITyxJ zU5NLUgtgskycXBKNTCa35yZtuvtv0naH1+HLOsSFV58d0aH+zmJKy0NLmx39WPtBayLd+4N Us3Omm+qkDAnjP/M9+CDK+98CLw43d/98UO3d54eDmw3Nn9K+PHw34Lr2vMYrlkv33tv0QxR NqvEP8eeR6xlWbuZ8YPlvf0Vk7kfXrj+uXz+P4WkBQ/vePRcU5/27cXHn0osxRmJhlrMRcWJ AKpJWbYuAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpnkeLIzCtJLcpLzFFi42I5/e/4Pd0oC4M4g5OfNS1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl3G/8RZ7wc7d jBUTV+5gbWBcMZuxi5GTQ0LAROJ+xzEgm4tDSGApo8TGVx1MXYwcQAkZiePryyBqhCX+XOti A7GFBD4xSlxYmw9iswlYSUxsXwU2R0RAQaLn90o2kDnMAhsYJV7d/MICkhAWCJJ4deIDM4jN IqAqca/tGpjNK2AnMf/fXnaIBfISW799YgXZywkU79lrDrHLVmL9maesEOWCEidnPgEbyQxU 3rx1NvMERoFZSFKzkKQWMDKtYhRJLS3OTc8tNtIrTswtLs1L10vOz93ECIyEbcd+btnB2PUu +BCjAAejEg+vg5JBnBBrYllxZe4hRgkOZiUR3k4moBBvSmJlVWpRfnxRaU5q8SFGU6AfJjJL iSbnA6M0ryTe0NTQ3MLS0NzY3NjMQkmct0PgYIyQQHpiSWp2ampBahFMHxMHp1QDo1yKUJ7n SjXpGx/DllavXZEi7fhaMfBty2GetG1eJ9cxzDD+pyG432Jd5qH9gXcUZocyHS2/cc7l3Gv9 myIfF/49bLlvilPkja5O/3eLVv3Z/ZHbV2iZp1q75IQv2bNXd/j+XFlhNnXxrLtywWL/ck3u GwUtKDF3zJkq+eKPxZ9Ls5wmWFQmJCqxFGckGmoxFxUnAgAOUm2ImgIAAA== X-CMS-MailID: 20200128133418eucas1p157933935f14f9c83c604bc5dc38bcbae X-Msg-Generator: CA X-RootMTR: 20200128133418eucas1p157933935f14f9c83c604bc5dc38bcbae X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133418eucas1p157933935f14f9c83c604bc5dc38bcbae References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Start separating SATA specific code from libata-scsi.c: * un-static ata_scsi_find_dev() * move following code to libata-scsi-sata.c: - SATA only sysfs device attributes handling - __ata_change_queue_depth() - ata_scsi_change_queue_depth() * cover with CONFIG_SATA_HOST ifdef SATA only sysfs device attributes handling code and ATA_SHT_NCQ() macro in * include libata-scsi-sata.c in the build when CONFIG_SATA_HOST=y Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 20702 105 4096 24903 6147 drivers/ata/libata-scsi.o after: 19137 23 4096 23256 5ad8 drivers/ata/libata-scsi.o Signed-off-by: Bartlomiej Zolnierkiewicz Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/Makefile | 2 +- drivers/ata/libata-scsi-sata.c | 310 +++++++++++++++++++++++++++++++++ drivers/ata/libata-scsi.c | 301 +------------------------------- drivers/ata/libata.h | 2 + include/linux/libata.h | 9 +- 5 files changed, 321 insertions(+), 303 deletions(-) create mode 100644 drivers/ata/libata-scsi-sata.c diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index b06b9a211691..d6fb3d4a2ac5 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -123,7 +123,7 @@ obj-$(CONFIG_PATA_LEGACY) += pata_legacy.o libata-y := libata-core.o libata-scsi.o libata-eh.o \ libata-transport.o libata-trace.o -libata-$(CONFIG_SATA_HOST) += libata-core-sata.o +libata-$(CONFIG_SATA_HOST) += libata-core-sata.o libata-scsi-sata.o libata-$(CONFIG_ATA_SFF) += libata-sff.o libata-$(CONFIG_SATA_PMP) += libata-pmp.o libata-$(CONFIG_ATA_ACPI) += libata-acpi.o diff --git a/drivers/ata/libata-scsi-sata.c b/drivers/ata/libata-scsi-sata.c new file mode 100644 index 000000000000..da7d8344d003 --- /dev/null +++ b/drivers/ata/libata-scsi-sata.c @@ -0,0 +1,310 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * libata-scsi-sata.c - SATA specific part of ATA helper library + * + * Copyright 2003-2004 Red Hat, Inc. All rights reserved. + * Copyright 2003-2004 Jeff Garzik + */ + +#include +#include +#include + +#include "libata.h" + +static const char *ata_lpm_policy_names[] = { + [ATA_LPM_UNKNOWN] = "max_performance", + [ATA_LPM_MAX_POWER] = "max_performance", + [ATA_LPM_MED_POWER] = "medium_power", + [ATA_LPM_MED_POWER_WITH_DIPM] = "med_power_with_dipm", + [ATA_LPM_MIN_POWER_WITH_PARTIAL] = "min_power_with_partial", + [ATA_LPM_MIN_POWER] = "min_power", +}; + +static ssize_t ata_scsi_lpm_store(struct device *device, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct Scsi_Host *shost = class_to_shost(device); + struct ata_port *ap = ata_shost_to_port(shost); + struct ata_link *link; + struct ata_device *dev; + enum ata_lpm_policy policy; + unsigned long flags; + + /* UNKNOWN is internal state, iterate from MAX_POWER */ + for (policy = ATA_LPM_MAX_POWER; + policy < ARRAY_SIZE(ata_lpm_policy_names); policy++) { + const char *name = ata_lpm_policy_names[policy]; + + if (strncmp(name, buf, strlen(name)) == 0) + break; + } + if (policy == ARRAY_SIZE(ata_lpm_policy_names)) + return -EINVAL; + + spin_lock_irqsave(ap->lock, flags); + + ata_for_each_link(link, ap, EDGE) { + ata_for_each_dev(dev, &ap->link, ENABLED) { + if (dev->horkage & ATA_HORKAGE_NOLPM) { + count = -EOPNOTSUPP; + goto out_unlock; + } + } + } + + ap->target_lpm_policy = policy; + ata_port_schedule_eh(ap); +out_unlock: + spin_unlock_irqrestore(ap->lock, flags); + return count; +} + +static ssize_t ata_scsi_lpm_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct Scsi_Host *shost = class_to_shost(dev); + struct ata_port *ap = ata_shost_to_port(shost); + + if (ap->target_lpm_policy >= ARRAY_SIZE(ata_lpm_policy_names)) + return -EINVAL; + + return snprintf(buf, PAGE_SIZE, "%s\n", + ata_lpm_policy_names[ap->target_lpm_policy]); +} +DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR, + ata_scsi_lpm_show, ata_scsi_lpm_store); +EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy); + +static ssize_t ata_ncq_prio_enable_show(struct device *device, + struct device_attribute *attr, + char *buf) +{ + struct scsi_device *sdev = to_scsi_device(device); + struct ata_port *ap; + struct ata_device *dev; + bool ncq_prio_enable; + int rc = 0; + + ap = ata_shost_to_port(sdev->host); + + spin_lock_irq(ap->lock); + dev = ata_scsi_find_dev(ap, sdev); + if (!dev) { + rc = -ENODEV; + goto unlock; + } + + ncq_prio_enable = dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE; + +unlock: + spin_unlock_irq(ap->lock); + + return rc ? rc : snprintf(buf, 20, "%u\n", ncq_prio_enable); +} + +static ssize_t ata_ncq_prio_enable_store(struct device *device, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct scsi_device *sdev = to_scsi_device(device); + struct ata_port *ap; + struct ata_device *dev; + long int input; + int rc; + + rc = kstrtol(buf, 10, &input); + if (rc) + return rc; + if ((input < 0) || (input > 1)) + return -EINVAL; + + ap = ata_shost_to_port(sdev->host); + dev = ata_scsi_find_dev(ap, sdev); + if (unlikely(!dev)) + return -ENODEV; + + spin_lock_irq(ap->lock); + if (input) + dev->flags |= ATA_DFLAG_NCQ_PRIO_ENABLE; + else + dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE; + + dev->link->eh_info.action |= ATA_EH_REVALIDATE; + dev->link->eh_info.flags |= ATA_EHI_QUIET; + ata_port_schedule_eh(ap); + spin_unlock_irq(ap->lock); + + ata_port_wait_eh(ap); + + if (input) { + spin_lock_irq(ap->lock); + if (!(dev->flags & ATA_DFLAG_NCQ_PRIO)) { + dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE; + rc = -EIO; + } + spin_unlock_irq(ap->lock); + } + + return rc ? rc : len; +} + +DEVICE_ATTR(ncq_prio_enable, S_IRUGO | S_IWUSR, + ata_ncq_prio_enable_show, ata_ncq_prio_enable_store); +EXPORT_SYMBOL_GPL(dev_attr_ncq_prio_enable); + +struct device_attribute *ata_ncq_sdev_attrs[] = { + &dev_attr_unload_heads, + &dev_attr_ncq_prio_enable, + NULL +}; +EXPORT_SYMBOL_GPL(ata_ncq_sdev_attrs); + +static ssize_t +ata_scsi_em_message_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + struct Scsi_Host *shost = class_to_shost(dev); + struct ata_port *ap = ata_shost_to_port(shost); + if (ap->ops->em_store && (ap->flags & ATA_FLAG_EM)) + return ap->ops->em_store(ap, buf, count); + return -EINVAL; +} + +static ssize_t +ata_scsi_em_message_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct Scsi_Host *shost = class_to_shost(dev); + struct ata_port *ap = ata_shost_to_port(shost); + + if (ap->ops->em_show && (ap->flags & ATA_FLAG_EM)) + return ap->ops->em_show(ap, buf); + return -EINVAL; +} +DEVICE_ATTR(em_message, S_IRUGO | S_IWUSR, + ata_scsi_em_message_show, ata_scsi_em_message_store); +EXPORT_SYMBOL_GPL(dev_attr_em_message); + +static ssize_t +ata_scsi_em_message_type_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct Scsi_Host *shost = class_to_shost(dev); + struct ata_port *ap = ata_shost_to_port(shost); + + return snprintf(buf, 23, "%d\n", ap->em_message_type); +} +DEVICE_ATTR(em_message_type, S_IRUGO, + ata_scsi_em_message_type_show, NULL); +EXPORT_SYMBOL_GPL(dev_attr_em_message_type); + +static ssize_t +ata_scsi_activity_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct scsi_device *sdev = to_scsi_device(dev); + struct ata_port *ap = ata_shost_to_port(sdev->host); + struct ata_device *atadev = ata_scsi_find_dev(ap, sdev); + + if (atadev && ap->ops->sw_activity_show && + (ap->flags & ATA_FLAG_SW_ACTIVITY)) + return ap->ops->sw_activity_show(atadev, buf); + return -EINVAL; +} + +static ssize_t +ata_scsi_activity_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + struct scsi_device *sdev = to_scsi_device(dev); + struct ata_port *ap = ata_shost_to_port(sdev->host); + struct ata_device *atadev = ata_scsi_find_dev(ap, sdev); + enum sw_activity val; + int rc; + + if (atadev && ap->ops->sw_activity_store && + (ap->flags & ATA_FLAG_SW_ACTIVITY)) { + val = simple_strtoul(buf, NULL, 0); + switch (val) { + case OFF: case BLINK_ON: case BLINK_OFF: + rc = ap->ops->sw_activity_store(atadev, val); + if (!rc) + return count; + else + return rc; + } + } + return -EINVAL; +} +DEVICE_ATTR(sw_activity, S_IWUSR | S_IRUGO, ata_scsi_activity_show, + ata_scsi_activity_store); +EXPORT_SYMBOL_GPL(dev_attr_sw_activity); + +/** + * __ata_change_queue_depth - helper for ata_scsi_change_queue_depth + * @ap: ATA port to which the device change the queue depth + * @sdev: SCSI device to configure queue depth for + * @queue_depth: new queue depth + * + * libsas and libata have different approaches for associating a sdev to + * its ata_port. + * + */ +int __ata_change_queue_depth(struct ata_port *ap, struct scsi_device *sdev, + int queue_depth) +{ + struct ata_device *dev; + unsigned long flags; + + if (queue_depth < 1 || queue_depth == sdev->queue_depth) + return sdev->queue_depth; + + dev = ata_scsi_find_dev(ap, sdev); + if (!dev || !ata_dev_enabled(dev)) + return sdev->queue_depth; + + /* NCQ enabled? */ + spin_lock_irqsave(ap->lock, flags); + dev->flags &= ~ATA_DFLAG_NCQ_OFF; + if (queue_depth == 1 || !ata_ncq_enabled(dev)) { + dev->flags |= ATA_DFLAG_NCQ_OFF; + queue_depth = 1; + } + spin_unlock_irqrestore(ap->lock, flags); + + /* limit and apply queue depth */ + queue_depth = min(queue_depth, sdev->host->can_queue); + queue_depth = min(queue_depth, ata_id_queue_depth(dev->id)); + queue_depth = min(queue_depth, ATA_MAX_QUEUE); + + if (sdev->queue_depth == queue_depth) + return -EINVAL; + + return scsi_change_queue_depth(sdev, queue_depth); +} +EXPORT_SYMBOL_GPL(__ata_change_queue_depth); + +/** + * ata_scsi_change_queue_depth - SCSI callback for queue depth config + * @sdev: SCSI device to configure queue depth for + * @queue_depth: new queue depth + * + * This is libata standard hostt->change_queue_depth callback. + * SCSI will call into this callback when user tries to set queue + * depth via sysfs. + * + * LOCKING: + * SCSI layer (we don't care) + * + * RETURNS: + * Newly configured queue depth. + */ +int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth) +{ + struct ata_port *ap = ata_shost_to_port(sdev->host); + + return __ata_change_queue_depth(ap, sdev, queue_depth); +} +EXPORT_SYMBOL_GPL(ata_scsi_change_queue_depth); diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index d549bd5b3d36..82c398c93379 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -45,8 +45,6 @@ typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc); static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev); -static struct ata_device *ata_scsi_find_dev(struct ata_port *ap, - const struct scsi_device *scsidev); #define RW_RECOVERY_MPAGE 0x1 #define RW_RECOVERY_MPAGE_LEN 12 @@ -86,71 +84,6 @@ static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = { 0, 30 /* extended self test time, see 05-359r1 */ }; -static const char *ata_lpm_policy_names[] = { - [ATA_LPM_UNKNOWN] = "max_performance", - [ATA_LPM_MAX_POWER] = "max_performance", - [ATA_LPM_MED_POWER] = "medium_power", - [ATA_LPM_MED_POWER_WITH_DIPM] = "med_power_with_dipm", - [ATA_LPM_MIN_POWER_WITH_PARTIAL] = "min_power_with_partial", - [ATA_LPM_MIN_POWER] = "min_power", -}; - -static ssize_t ata_scsi_lpm_store(struct device *device, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct Scsi_Host *shost = class_to_shost(device); - struct ata_port *ap = ata_shost_to_port(shost); - struct ata_link *link; - struct ata_device *dev; - enum ata_lpm_policy policy; - unsigned long flags; - - /* UNKNOWN is internal state, iterate from MAX_POWER */ - for (policy = ATA_LPM_MAX_POWER; - policy < ARRAY_SIZE(ata_lpm_policy_names); policy++) { - const char *name = ata_lpm_policy_names[policy]; - - if (strncmp(name, buf, strlen(name)) == 0) - break; - } - if (policy == ARRAY_SIZE(ata_lpm_policy_names)) - return -EINVAL; - - spin_lock_irqsave(ap->lock, flags); - - ata_for_each_link(link, ap, EDGE) { - ata_for_each_dev(dev, &ap->link, ENABLED) { - if (dev->horkage & ATA_HORKAGE_NOLPM) { - count = -EOPNOTSUPP; - goto out_unlock; - } - } - } - - ap->target_lpm_policy = policy; - ata_port_schedule_eh(ap); -out_unlock: - spin_unlock_irqrestore(ap->lock, flags); - return count; -} - -static ssize_t ata_scsi_lpm_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct Scsi_Host *shost = class_to_shost(dev); - struct ata_port *ap = ata_shost_to_port(shost); - - if (ap->target_lpm_policy >= ARRAY_SIZE(ata_lpm_policy_names)) - return -EINVAL; - - return snprintf(buf, PAGE_SIZE, "%s\n", - ata_lpm_policy_names[ap->target_lpm_policy]); -} -DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR, - ata_scsi_lpm_show, ata_scsi_lpm_store); -EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy); - static ssize_t ata_scsi_park_show(struct device *device, struct device_attribute *attr, char *buf) { @@ -254,83 +187,6 @@ DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR, ata_scsi_park_show, ata_scsi_park_store); EXPORT_SYMBOL_GPL(dev_attr_unload_heads); -static ssize_t ata_ncq_prio_enable_show(struct device *device, - struct device_attribute *attr, - char *buf) -{ - struct scsi_device *sdev = to_scsi_device(device); - struct ata_port *ap; - struct ata_device *dev; - bool ncq_prio_enable; - int rc = 0; - - ap = ata_shost_to_port(sdev->host); - - spin_lock_irq(ap->lock); - dev = ata_scsi_find_dev(ap, sdev); - if (!dev) { - rc = -ENODEV; - goto unlock; - } - - ncq_prio_enable = dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE; - -unlock: - spin_unlock_irq(ap->lock); - - return rc ? rc : snprintf(buf, 20, "%u\n", ncq_prio_enable); -} - -static ssize_t ata_ncq_prio_enable_store(struct device *device, - struct device_attribute *attr, - const char *buf, size_t len) -{ - struct scsi_device *sdev = to_scsi_device(device); - struct ata_port *ap; - struct ata_device *dev; - long int input; - int rc; - - rc = kstrtol(buf, 10, &input); - if (rc) - return rc; - if ((input < 0) || (input > 1)) - return -EINVAL; - - ap = ata_shost_to_port(sdev->host); - dev = ata_scsi_find_dev(ap, sdev); - if (unlikely(!dev)) - return -ENODEV; - - spin_lock_irq(ap->lock); - if (input) - dev->flags |= ATA_DFLAG_NCQ_PRIO_ENABLE; - else - dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE; - - dev->link->eh_info.action |= ATA_EH_REVALIDATE; - dev->link->eh_info.flags |= ATA_EHI_QUIET; - ata_port_schedule_eh(ap); - spin_unlock_irq(ap->lock); - - ata_port_wait_eh(ap); - - if (input) { - spin_lock_irq(ap->lock); - if (!(dev->flags & ATA_DFLAG_NCQ_PRIO)) { - dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE; - rc = -EIO; - } - spin_unlock_irq(ap->lock); - } - - return rc ? rc : len; -} - -DEVICE_ATTR(ncq_prio_enable, S_IRUGO | S_IWUSR, - ata_ncq_prio_enable_show, ata_ncq_prio_enable_store); -EXPORT_SYMBOL_GPL(dev_attr_ncq_prio_enable); - void ata_scsi_set_sense(struct ata_device *dev, struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq) { @@ -379,100 +235,12 @@ static void ata_scsi_set_invalid_parameter(struct ata_device *dev, field, 0xff, 0); } -static ssize_t -ata_scsi_em_message_store(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) -{ - struct Scsi_Host *shost = class_to_shost(dev); - struct ata_port *ap = ata_shost_to_port(shost); - if (ap->ops->em_store && (ap->flags & ATA_FLAG_EM)) - return ap->ops->em_store(ap, buf, count); - return -EINVAL; -} - -static ssize_t -ata_scsi_em_message_show(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct Scsi_Host *shost = class_to_shost(dev); - struct ata_port *ap = ata_shost_to_port(shost); - - if (ap->ops->em_show && (ap->flags & ATA_FLAG_EM)) - return ap->ops->em_show(ap, buf); - return -EINVAL; -} -DEVICE_ATTR(em_message, S_IRUGO | S_IWUSR, - ata_scsi_em_message_show, ata_scsi_em_message_store); -EXPORT_SYMBOL_GPL(dev_attr_em_message); - -static ssize_t -ata_scsi_em_message_type_show(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct Scsi_Host *shost = class_to_shost(dev); - struct ata_port *ap = ata_shost_to_port(shost); - - return snprintf(buf, 23, "%d\n", ap->em_message_type); -} -DEVICE_ATTR(em_message_type, S_IRUGO, - ata_scsi_em_message_type_show, NULL); -EXPORT_SYMBOL_GPL(dev_attr_em_message_type); - -static ssize_t -ata_scsi_activity_show(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct scsi_device *sdev = to_scsi_device(dev); - struct ata_port *ap = ata_shost_to_port(sdev->host); - struct ata_device *atadev = ata_scsi_find_dev(ap, sdev); - - if (atadev && ap->ops->sw_activity_show && - (ap->flags & ATA_FLAG_SW_ACTIVITY)) - return ap->ops->sw_activity_show(atadev, buf); - return -EINVAL; -} - -static ssize_t -ata_scsi_activity_store(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) -{ - struct scsi_device *sdev = to_scsi_device(dev); - struct ata_port *ap = ata_shost_to_port(sdev->host); - struct ata_device *atadev = ata_scsi_find_dev(ap, sdev); - enum sw_activity val; - int rc; - - if (atadev && ap->ops->sw_activity_store && - (ap->flags & ATA_FLAG_SW_ACTIVITY)) { - val = simple_strtoul(buf, NULL, 0); - switch (val) { - case OFF: case BLINK_ON: case BLINK_OFF: - rc = ap->ops->sw_activity_store(atadev, val); - if (!rc) - return count; - else - return rc; - } - } - return -EINVAL; -} -DEVICE_ATTR(sw_activity, S_IWUSR | S_IRUGO, ata_scsi_activity_show, - ata_scsi_activity_store); -EXPORT_SYMBOL_GPL(dev_attr_sw_activity); - struct device_attribute *ata_common_sdev_attrs[] = { &dev_attr_unload_heads, NULL }; EXPORT_SYMBOL_GPL(ata_common_sdev_attrs); -struct device_attribute *ata_ncq_sdev_attrs[] = { - &dev_attr_unload_heads, - &dev_attr_ncq_prio_enable, - NULL -}; -EXPORT_SYMBOL_GPL(ata_ncq_sdev_attrs); - /** * ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd. * @sdev: SCSI device for which BIOS geometry is to be determined @@ -1390,73 +1158,6 @@ void ata_scsi_slave_destroy(struct scsi_device *sdev) } EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy); -/** - * __ata_change_queue_depth - helper for ata_scsi_change_queue_depth - * @ap: ATA port to which the device change the queue depth - * @sdev: SCSI device to configure queue depth for - * @queue_depth: new queue depth - * - * libsas and libata have different approaches for associating a sdev to - * its ata_port. - * - */ -int __ata_change_queue_depth(struct ata_port *ap, struct scsi_device *sdev, - int queue_depth) -{ - struct ata_device *dev; - unsigned long flags; - - if (queue_depth < 1 || queue_depth == sdev->queue_depth) - return sdev->queue_depth; - - dev = ata_scsi_find_dev(ap, sdev); - if (!dev || !ata_dev_enabled(dev)) - return sdev->queue_depth; - - /* NCQ enabled? */ - spin_lock_irqsave(ap->lock, flags); - dev->flags &= ~ATA_DFLAG_NCQ_OFF; - if (queue_depth == 1 || !ata_ncq_enabled(dev)) { - dev->flags |= ATA_DFLAG_NCQ_OFF; - queue_depth = 1; - } - spin_unlock_irqrestore(ap->lock, flags); - - /* limit and apply queue depth */ - queue_depth = min(queue_depth, sdev->host->can_queue); - queue_depth = min(queue_depth, ata_id_queue_depth(dev->id)); - queue_depth = min(queue_depth, ATA_MAX_QUEUE); - - if (sdev->queue_depth == queue_depth) - return -EINVAL; - - return scsi_change_queue_depth(sdev, queue_depth); -} -EXPORT_SYMBOL_GPL(__ata_change_queue_depth); - -/** - * ata_scsi_change_queue_depth - SCSI callback for queue depth config - * @sdev: SCSI device to configure queue depth for - * @queue_depth: new queue depth - * - * This is libata standard hostt->change_queue_depth callback. - * SCSI will call into this callback when user tries to set queue - * depth via sysfs. - * - * LOCKING: - * SCSI layer (we don't care) - * - * RETURNS: - * Newly configured queue depth. - */ -int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth) -{ - struct ata_port *ap = ata_shost_to_port(sdev->host); - - return __ata_change_queue_depth(ap, sdev, queue_depth); -} -EXPORT_SYMBOL_GPL(ata_scsi_change_queue_depth); - /** * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command * @qc: Storage for translated ATA taskfile @@ -3093,7 +2794,7 @@ static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap, * RETURNS: * Associated ATA device, or %NULL if not found. */ -static struct ata_device * +struct ata_device * ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev) { struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev); diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 8f5da7be88fe..2c479e48c4c9 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -153,6 +153,8 @@ static inline void ata_acpi_bind_dev(struct ata_device *dev) {} #endif /* libata-scsi.c */ +extern struct ata_device *ata_scsi_find_dev(struct ata_port *ap, + const struct scsi_device *scsidev); extern int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht); extern void ata_scsi_scan_host(struct ata_port *ap, int sync); diff --git a/include/linux/libata.h b/include/linux/libata.h index 3124cad39d50..4b6ac3eda0c9 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -532,12 +532,14 @@ typedef int (*ata_reset_fn_t)(struct ata_link *link, unsigned int *classes, unsigned long deadline); typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes); -extern struct device_attribute dev_attr_link_power_management_policy; extern struct device_attribute dev_attr_unload_heads; +#ifdef CONFIG_SATA_HOST +extern struct device_attribute dev_attr_link_power_management_policy; extern struct device_attribute dev_attr_ncq_prio_enable; extern struct device_attribute dev_attr_em_message_type; extern struct device_attribute dev_attr_em_message; extern struct device_attribute dev_attr_sw_activity; +#endif enum sw_activity { OFF, @@ -1374,7 +1376,6 @@ extern int ata_link_nr_enabled(struct ata_link *link); extern const struct ata_port_operations ata_base_port_ops; extern const struct ata_port_operations sata_port_ops; extern struct device_attribute *ata_common_sdev_attrs[]; -extern struct device_attribute *ata_ncq_sdev_attrs[]; /* * All sht initializers (BASE, PIO, BMDMA, NCQ) must be instantiated @@ -1399,10 +1400,14 @@ extern struct device_attribute *ata_ncq_sdev_attrs[]; .unlock_native_capacity = ata_scsi_unlock_native_capacity, \ .sdev_attrs = ata_common_sdev_attrs +#ifdef CONFIG_SATA_HOST +extern struct device_attribute *ata_ncq_sdev_attrs[]; + #define ATA_NCQ_SHT(drv_name) \ ATA_BASE_SHT(drv_name), \ .sdev_attrs = ata_ncq_sdev_attrs \ .change_queue_depth = ata_scsi_change_queue_depth +#endif /* * PMP helpers From patchwork Tue Jan 28 13:33:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230327 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=sh5PcppA; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SJp3kTtz9sRW for ; Wed, 29 Jan 2020 00:34:34 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726504AbgA1Ned (ORCPT ); Tue, 28 Jan 2020 08:34:33 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52342 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgA1NeV (ORCPT ); Tue, 28 Jan 2020 08:34:21 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133419euoutp02b581f101726ca5420c5015e35b211ae3~uEFEhpC_t2858228582euoutp02E for ; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200128133419euoutp02b581f101726ca5420c5015e35b211ae3~uEFEhpC_t2858228582euoutp02E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218459; bh=WpsHicWI94p87coMzYSnYFtFCARkHKWCi7JZ46kLA9k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sh5PcppA5Hy37R5qnoRIL+ZerCl/lPrxZaw2ZtU+DHsl4OB+rlLWlmqKWNKTxmfUw KUiTY8Slw9IaxuZ7HDmSQbRshfOmpM1GVuqJ1u2IDCe7xhc016j2KAz8Y4WAxnf+Ue rHqlsjnF9r9fv00E+kHyUgM4FH5m/ksai1qbFhnA= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133419eucas1p2e3e53db27b652a58a528288bd2494d55~uEFEEFcxJ1867618676eucas1p2i; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 42.DA.61286.B58303E5; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200128133419eucas1p14f7ed619db42aba72e83b7814f45a3bc~uEFDwMkT81372113721eucas1p1K; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133419eusmtrp2b6532c6678dc7fbfe353fcdee4bac300~uEFDvog9_0330103301eusmtrp29; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-90-5e30385b2027 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 94.82.07950.A58303E5; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133418eusmtip2ae9dafbb54bbb7080dffc7f6e032afa6~uEFDa96ud0685506855eusmtip2c; Tue, 28 Jan 2020 13:34:18 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 25/28] ata: move ata_sas_*() to libata-scsi-sata.c Date: Tue, 28 Jan 2020 14:33:40 +0100 Message-Id: <20200128133343.29905-26-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsWy7djPc7rRFgZxBh8XiVqsvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+P3V/WCFy2MFS2TLjA3ML7N6WLk5JAQMJFY8Xg/SxcjF4eQwApGiXW7D0A5 Xxgl/t1rYIVwPjNK9G14zwLTMmnqB2YQW0hgOaPEyd+2cB0HD9wCK2ITsJKY2L6KEcQWEVCQ 6Pm9kg2kiFlgDaPEqsNNYAlhASeJq1/fg9ksAqoSS79eBrN5BewkJh1pZYPYJi+x9dsnoDM4 ODiB4j17zSFKBCVOznwCtosZqKR562xmkPkSAu3sEo/27WWG6HWRWP3nJNTVwhKvjm9hh7Bl JP7vnM8E0bCOUeJvxwuo7u2MEssn/4PabC1x59wvNpDNzAKaEut36UOEHSV23uxgBAlLCPBJ 3HgrCHEEn8SkbdOZIcK8Eh1tQhDVahIblm1gg1nbtXMl1GkeEkc3XGeawKg4C8k7s5C8Mwth 7wJG5lWM4qmlxbnpqcWGeanlesWJucWleel6yfm5mxiBCeb0v+OfdjB+vZR0iFGAg1GJh3eG ikGcEGtiWXFl7iFGCQ5mJRHeTiagEG9KYmVValF+fFFpTmrxIUZpDhYlcV7jRS9jhQTSE0tS s1NTC1KLYLJMHJxSDYxN7KvKL+WIGngLqF4rs1tQceZy0IOv/6expUtt6q9SqzCbbp3Swnlj Rc6cXxbz/FYe+svp7FMW08DBGWLV2SI8sV9K3d1W72YT57fvK+0L/i0PX/XZwGP9rVXrI08+ PWv7xP102iamD2k79ZRnxqeYL/JpdzC+k/YxZMuugH9KT5U2t5tNY1ViKc5INNRiLipOBAAp D7/qLAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42I5/e/4Pd1oC4M4g4MHGS1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl/H7q3rBixbG ipZJF5gbGN/mdDFyckgImEhMmvqBuYuRi0NIYCmjxLYXd4EcDqCEjMTx9WUQNcISf651sUHU fGKUOP7vNxtIgk3ASmJi+ypGEFtEQEGi5/dKsCJmgQ2MEq9ufmEBSQgLOElc/foerIhFQFVi 6dfLYDavgJ3EpCOtbBAb5CW2fvvECrKYEyjes9ccJCwkYCux/sxTVohyQYmTM5+AjWQGKm/e Opt5AqPALCSpWUhSCxiZVjGKpJYW56bnFhvpFSfmFpfmpesl5+duYgTGwbZjP7fsYOx6F3yI UYCDUYmH10HJIE6INbGsuDL3EKMEB7OSCG8nE1CINyWxsiq1KD++qDQntfgQoynQDxOZpUST 84ExmlcSb2hqaG5haWhubG5sZqEkztshcDBGSCA9sSQ1OzW1ILUIpo+Jg1OqgXFFz9vWhdVX D++WkzloFXv9cvzTdIvAW/vfPMg/ONH1mvbGu++vCXO/6rEV4s5SO6nzO810Rlx9vdb+Ex1r Wmzeb5jXqmS+NuqclvGfL1OvVc6TVGC+837LwhMvVqvv2z27ijVtQYpeaeuFDxWf2SX69zJL 3ZgmwLwyePZPhyreRj1uZob6RnElluKMREMt5qLiRACBqGplmQIAAA== X-CMS-MailID: 20200128133419eucas1p14f7ed619db42aba72e83b7814f45a3bc X-Msg-Generator: CA X-RootMTR: 20200128133419eucas1p14f7ed619db42aba72e83b7814f45a3bc X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133419eucas1p14f7ed619db42aba72e83b7814f45a3bc References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * un-inline: - ata_scsi_dump_cdb() - __ata_scsi_queuecmd() * un-static: - ata_scsi_sdev_config() - ata_scsi_dev_config() - ata_scsi_dump_cdb() - __ata_scsi_queuecmd() * move ata_sas_*() to libata-scsi-sata.c: * add static inlines for CONFIG_SATA_HOST=n case for ata_sas_{allocate,free}_tag() Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 19137 23 4096 23256 5ad8 drivers/ata/libata-scsi.o after: 18330 23 4096 22449 57b1 drivers/ata/libata-scsi.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-scsi-sata.c | 213 +++++++++++++++++++++++++++++++ drivers/ata/libata-scsi.c | 222 +-------------------------------- drivers/ata/libata.h | 13 ++ include/linux/libata.h | 24 ++-- 4 files changed, 242 insertions(+), 230 deletions(-) diff --git a/drivers/ata/libata-scsi-sata.c b/drivers/ata/libata-scsi-sata.c index da7d8344d003..bc60841c4045 100644 --- a/drivers/ata/libata-scsi-sata.c +++ b/drivers/ata/libata-scsi-sata.c @@ -7,10 +7,12 @@ */ #include +#include #include #include #include "libata.h" +#include "libata-transport.h" static const char *ata_lpm_policy_names[] = { [ATA_LPM_UNKNOWN] = "max_performance", @@ -308,3 +310,214 @@ int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth) return __ata_change_queue_depth(ap, sdev, queue_depth); } EXPORT_SYMBOL_GPL(ata_scsi_change_queue_depth); + +/** + * port_alloc - Allocate port for a SAS attached SATA device + * @host: ATA host container for all SAS ports + * @port_info: Information from low-level host driver + * @shost: SCSI host that the scsi device is attached to + * + * LOCKING: + * PCI/etc. bus probe sem. + * + * RETURNS: + * ata_port pointer on success / NULL on failure. + */ + +struct ata_port *ata_sas_port_alloc(struct ata_host *host, + struct ata_port_info *port_info, + struct Scsi_Host *shost) +{ + struct ata_port *ap; + + ap = ata_port_alloc(host); + if (!ap) + return NULL; + + ap->port_no = 0; + ap->lock = &host->lock; + ap->pio_mask = port_info->pio_mask; + ap->mwdma_mask = port_info->mwdma_mask; + ap->udma_mask = port_info->udma_mask; + ap->flags |= port_info->flags; + ap->ops = port_info->port_ops; + ap->cbl = ATA_CBL_SATA; + + return ap; +} +EXPORT_SYMBOL_GPL(ata_sas_port_alloc); + +/** + * ata_sas_port_start - Set port up for dma. + * @ap: Port to initialize + * + * Called just after data structures for each port are + * initialized. + * + * May be used as the port_start() entry in ata_port_operations. + * + * LOCKING: + * Inherited from caller. + */ +int ata_sas_port_start(struct ata_port *ap) +{ + /* + * the port is marked as frozen at allocation time, but if we don't + * have new eh, we won't thaw it + */ + if (!ap->ops->error_handler) + ap->pflags &= ~ATA_PFLAG_FROZEN; + return 0; +} +EXPORT_SYMBOL_GPL(ata_sas_port_start); + +/** + * ata_port_stop - Undo ata_sas_port_start() + * @ap: Port to shut down + * + * May be used as the port_stop() entry in ata_port_operations. + * + * LOCKING: + * Inherited from caller. + */ + +void ata_sas_port_stop(struct ata_port *ap) +{ +} +EXPORT_SYMBOL_GPL(ata_sas_port_stop); + +/** + * ata_sas_async_probe - simply schedule probing and return + * @ap: Port to probe + * + * For batch scheduling of probe for sas attached ata devices, assumes + * the port has already been through ata_sas_port_init() + */ +void ata_sas_async_probe(struct ata_port *ap) +{ + __ata_port_probe(ap); +} +EXPORT_SYMBOL_GPL(ata_sas_async_probe); + +int ata_sas_sync_probe(struct ata_port *ap) +{ + return ata_port_probe(ap); +} +EXPORT_SYMBOL_GPL(ata_sas_sync_probe); + + +/** + * ata_sas_port_init - Initialize a SATA device + * @ap: SATA port to initialize + * + * LOCKING: + * PCI/etc. bus probe sem. + * + * RETURNS: + * Zero on success, non-zero on error. + */ + +int ata_sas_port_init(struct ata_port *ap) +{ + int rc = ap->ops->port_start(ap); + + if (rc) + return rc; + ap->print_id = atomic_inc_return(&ata_print_id); + return 0; +} +EXPORT_SYMBOL_GPL(ata_sas_port_init); + +int ata_sas_tport_add(struct device *parent, struct ata_port *ap) +{ + return ata_tport_add(parent, ap); +} +EXPORT_SYMBOL_GPL(ata_sas_tport_add); + +void ata_sas_tport_delete(struct ata_port *ap) +{ + ata_tport_delete(ap); +} +EXPORT_SYMBOL_GPL(ata_sas_tport_delete); + +/** + * ata_sas_port_destroy - Destroy a SATA port allocated by ata_sas_port_alloc + * @ap: SATA port to destroy + * + */ + +void ata_sas_port_destroy(struct ata_port *ap) +{ + if (ap->ops->port_stop) + ap->ops->port_stop(ap); + kfree(ap); +} +EXPORT_SYMBOL_GPL(ata_sas_port_destroy); + +/** + * ata_sas_slave_configure - Default slave_config routine for libata devices + * @sdev: SCSI device to configure + * @ap: ATA port to which SCSI device is attached + * + * RETURNS: + * Zero. + */ + +int ata_sas_slave_configure(struct scsi_device *sdev, struct ata_port *ap) +{ + ata_scsi_sdev_config(sdev); + ata_scsi_dev_config(sdev, ap->link.device); + return 0; +} +EXPORT_SYMBOL_GPL(ata_sas_slave_configure); + +/** + * ata_sas_queuecmd - Issue SCSI cdb to libata-managed device + * @cmd: SCSI command to be sent + * @ap: ATA port to which the command is being sent + * + * RETURNS: + * Return value from __ata_scsi_queuecmd() if @cmd can be queued, + * 0 otherwise. + */ + +int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap) +{ + int rc = 0; + + ata_scsi_dump_cdb(ap, cmd); + + if (likely(ata_dev_enabled(ap->link.device))) + rc = __ata_scsi_queuecmd(cmd, ap->link.device); + else { + cmd->result = (DID_BAD_TARGET << 16); + cmd->scsi_done(cmd); + } + return rc; +} +EXPORT_SYMBOL_GPL(ata_sas_queuecmd); + +int ata_sas_allocate_tag(struct ata_port *ap) +{ + unsigned int max_queue = ap->host->n_tags; + unsigned int i, tag; + + for (i = 0, tag = ap->sas_last_tag + 1; i < max_queue; i++, tag++) { + tag = tag < max_queue ? tag : 0; + + /* the last tag is reserved for internal command. */ + if (ata_tag_internal(tag)) + continue; + + if (!test_and_set_bit(tag, &ap->sas_tag_allocated)) { + ap->sas_last_tag = tag; + return tag; + } + } + return -1; +} + +void ata_sas_free_tag(unsigned int tag, struct ata_port *ap) +{ + clear_bit(tag, &ap->sas_tag_allocated); +} diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 82c398c93379..50a929adcbd6 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -987,7 +987,7 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc) scsi_set_sense_information(sb, SCSI_SENSE_BUFFERSIZE, block); } -static void ata_scsi_sdev_config(struct scsi_device *sdev) +void ata_scsi_sdev_config(struct scsi_device *sdev) { sdev->use_10_for_rw = 1; sdev->use_10_for_ms = 1; @@ -1027,8 +1027,7 @@ static int atapi_drain_needed(struct request *rq) return atapi_cmd_type(scsi_req(rq)->cmd[0]) == ATAPI_MISC; } -static int ata_scsi_dev_config(struct scsi_device *sdev, - struct ata_device *dev) +int ata_scsi_dev_config(struct scsi_device *sdev, struct ata_device *dev) { struct request_queue *q = sdev->request_queue; @@ -4004,8 +4003,7 @@ static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd) * Prints the contents of a SCSI command via printk(). */ -static inline void ata_scsi_dump_cdb(struct ata_port *ap, - struct scsi_cmnd *cmd) +void ata_scsi_dump_cdb(struct ata_port *ap, struct scsi_cmnd *cmd) { #ifdef ATA_VERBOSE_DEBUG struct scsi_device *scsidev = cmd->device; @@ -4017,8 +4015,7 @@ static inline void ata_scsi_dump_cdb(struct ata_port *ap, #endif } -static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, - struct ata_device *dev) +int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, struct ata_device *dev) { u8 scsi_op = scmd->cmnd[0]; ata_xlat_func_t xlat_func; @@ -4635,214 +4632,3 @@ void ata_scsi_dev_rescan(struct work_struct *work) spin_unlock_irqrestore(ap->lock, flags); mutex_unlock(&ap->scsi_scan_mutex); } - -/** - * ata_sas_port_alloc - Allocate port for a SAS attached SATA device - * @host: ATA host container for all SAS ports - * @port_info: Information from low-level host driver - * @shost: SCSI host that the scsi device is attached to - * - * LOCKING: - * PCI/etc. bus probe sem. - * - * RETURNS: - * ata_port pointer on success / NULL on failure. - */ - -struct ata_port *ata_sas_port_alloc(struct ata_host *host, - struct ata_port_info *port_info, - struct Scsi_Host *shost) -{ - struct ata_port *ap; - - ap = ata_port_alloc(host); - if (!ap) - return NULL; - - ap->port_no = 0; - ap->lock = &host->lock; - ap->pio_mask = port_info->pio_mask; - ap->mwdma_mask = port_info->mwdma_mask; - ap->udma_mask = port_info->udma_mask; - ap->flags |= port_info->flags; - ap->ops = port_info->port_ops; - ap->cbl = ATA_CBL_SATA; - - return ap; -} -EXPORT_SYMBOL_GPL(ata_sas_port_alloc); - -/** - * ata_sas_port_start - Set port up for dma. - * @ap: Port to initialize - * - * Called just after data structures for each port are - * initialized. - * - * May be used as the port_start() entry in ata_port_operations. - * - * LOCKING: - * Inherited from caller. - */ -int ata_sas_port_start(struct ata_port *ap) -{ - /* - * the port is marked as frozen at allocation time, but if we don't - * have new eh, we won't thaw it - */ - if (!ap->ops->error_handler) - ap->pflags &= ~ATA_PFLAG_FROZEN; - return 0; -} -EXPORT_SYMBOL_GPL(ata_sas_port_start); - -/** - * ata_port_stop - Undo ata_sas_port_start() - * @ap: Port to shut down - * - * May be used as the port_stop() entry in ata_port_operations. - * - * LOCKING: - * Inherited from caller. - */ - -void ata_sas_port_stop(struct ata_port *ap) -{ -} -EXPORT_SYMBOL_GPL(ata_sas_port_stop); - -/** - * ata_sas_async_probe - simply schedule probing and return - * @ap: Port to probe - * - * For batch scheduling of probe for sas attached ata devices, assumes - * the port has already been through ata_sas_port_init() - */ -void ata_sas_async_probe(struct ata_port *ap) -{ - __ata_port_probe(ap); -} -EXPORT_SYMBOL_GPL(ata_sas_async_probe); - -int ata_sas_sync_probe(struct ata_port *ap) -{ - return ata_port_probe(ap); -} -EXPORT_SYMBOL_GPL(ata_sas_sync_probe); - - -/** - * ata_sas_port_init - Initialize a SATA device - * @ap: SATA port to initialize - * - * LOCKING: - * PCI/etc. bus probe sem. - * - * RETURNS: - * Zero on success, non-zero on error. - */ - -int ata_sas_port_init(struct ata_port *ap) -{ - int rc = ap->ops->port_start(ap); - - if (rc) - return rc; - ap->print_id = atomic_inc_return(&ata_print_id); - return 0; -} -EXPORT_SYMBOL_GPL(ata_sas_port_init); - -int ata_sas_tport_add(struct device *parent, struct ata_port *ap) -{ - return ata_tport_add(parent, ap); -} -EXPORT_SYMBOL_GPL(ata_sas_tport_add); - -void ata_sas_tport_delete(struct ata_port *ap) -{ - ata_tport_delete(ap); -} -EXPORT_SYMBOL_GPL(ata_sas_tport_delete); - -/** - * ata_sas_port_destroy - Destroy a SATA port allocated by ata_sas_port_alloc - * @ap: SATA port to destroy - * - */ - -void ata_sas_port_destroy(struct ata_port *ap) -{ - if (ap->ops->port_stop) - ap->ops->port_stop(ap); - kfree(ap); -} -EXPORT_SYMBOL_GPL(ata_sas_port_destroy); - -/** - * ata_sas_slave_configure - Default slave_config routine for libata devices - * @sdev: SCSI device to configure - * @ap: ATA port to which SCSI device is attached - * - * RETURNS: - * Zero. - */ - -int ata_sas_slave_configure(struct scsi_device *sdev, struct ata_port *ap) -{ - ata_scsi_sdev_config(sdev); - ata_scsi_dev_config(sdev, ap->link.device); - return 0; -} -EXPORT_SYMBOL_GPL(ata_sas_slave_configure); - -/** - * ata_sas_queuecmd - Issue SCSI cdb to libata-managed device - * @cmd: SCSI command to be sent - * @ap: ATA port to which the command is being sent - * - * RETURNS: - * Return value from __ata_scsi_queuecmd() if @cmd can be queued, - * 0 otherwise. - */ - -int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap) -{ - int rc = 0; - - ata_scsi_dump_cdb(ap, cmd); - - if (likely(ata_dev_enabled(ap->link.device))) - rc = __ata_scsi_queuecmd(cmd, ap->link.device); - else { - cmd->result = (DID_BAD_TARGET << 16); - cmd->scsi_done(cmd); - } - return rc; -} -EXPORT_SYMBOL_GPL(ata_sas_queuecmd); - -int ata_sas_allocate_tag(struct ata_port *ap) -{ - unsigned int max_queue = ap->host->n_tags; - unsigned int i, tag; - - for (i = 0, tag = ap->sas_last_tag + 1; i < max_queue; i++, tag++) { - tag = tag < max_queue ? tag : 0; - - /* the last tag is reserved for internal command. */ - if (ata_tag_internal(tag)) - continue; - - if (!test_and_set_bit(tag, &ap->sas_tag_allocated)) { - ap->sas_last_tag = tag; - return tag; - } - } - return -1; -} - -void ata_sas_free_tag(unsigned int tag, struct ata_port *ap) -{ - clear_bit(tag, &ap->sas_tag_allocated); -} diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 2c479e48c4c9..2bb87a3e7a62 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -171,8 +171,21 @@ extern void ata_scsi_dev_rescan(struct work_struct *work); extern int ata_bus_probe(struct ata_port *ap); extern int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel, unsigned int id, u64 lun); +void ata_scsi_sdev_config(struct scsi_device *sdev); +int ata_scsi_dev_config(struct scsi_device *sdev, struct ata_device *dev); +void ata_scsi_dump_cdb(struct ata_port *ap, struct scsi_cmnd *cmd); +int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, struct ata_device *dev); +/* libata-scsi-sata.c */ +#ifdef CONFIG_SATA_HOST int ata_sas_allocate_tag(struct ata_port *ap); void ata_sas_free_tag(unsigned int tag, struct ata_port *ap); +#else +static inline int ata_sas_allocate_tag(struct ata_port *ap) +{ + return -EOPNOTSUPP; +} +static inline void ata_sas_free_tag(unsigned int tag, struct ata_port *ap) { } +#endif /* libata-eh.c */ diff --git a/include/linux/libata.h b/include/linux/libata.h index 4b6ac3eda0c9..eb2797c27547 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1096,18 +1096,6 @@ extern int ata_scsi_ioctl(struct scsi_device *dev, unsigned int cmd, extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd); extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev, unsigned int cmd, void __user *arg); -extern void ata_sas_port_destroy(struct ata_port *); -extern struct ata_port *ata_sas_port_alloc(struct ata_host *, - struct ata_port_info *, struct Scsi_Host *); -extern void ata_sas_async_probe(struct ata_port *ap); -extern int ata_sas_sync_probe(struct ata_port *ap); -extern int ata_sas_port_init(struct ata_port *); -extern int ata_sas_port_start(struct ata_port *ap); -extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap); -extern void ata_sas_tport_delete(struct ata_port *ap); -extern void ata_sas_port_stop(struct ata_port *ap); -extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *); -extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap); extern bool ata_link_online(struct ata_link *link); extern bool ata_link_offline(struct ata_link *link); #ifdef CONFIG_PM @@ -1196,6 +1184,18 @@ extern int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, unsigned long deadline, bool *online, int (*check_ready)(struct ata_link *)); extern int ata_slave_link_init(struct ata_port *ap); +extern void ata_sas_port_destroy(struct ata_port *); +extern struct ata_port *ata_sas_port_alloc(struct ata_host *, + struct ata_port_info *, struct Scsi_Host *); +extern void ata_sas_async_probe(struct ata_port *ap); +extern int ata_sas_sync_probe(struct ata_port *ap); +extern int ata_sas_port_init(struct ata_port *); +extern int ata_sas_port_start(struct ata_port *ap); +extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap); +extern void ata_sas_tport_delete(struct ata_port *ap); +extern void ata_sas_port_stop(struct ata_port *ap); +extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *); +extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap); extern int sata_scr_valid(struct ata_link *link); extern int sata_scr_read(struct ata_link *link, int reg, u32 *val); extern int sata_scr_write(struct ata_link *link, int reg, u32 val); From patchwork Tue Jan 28 13:33:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230329 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=gN8jXqnR; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SK43WGBz9sRk for ; Wed, 29 Jan 2020 00:34:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726677AbgA1Nee (ORCPT ); Tue, 28 Jan 2020 08:34:34 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58897 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726594AbgA1NeV (ORCPT ); Tue, 28 Jan 2020 08:34:21 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133420euoutp01ef780dc49c6a7277d3351466be2d64e1~uEFExvVmj0325703257euoutp01R for ; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133420euoutp01ef780dc49c6a7277d3351466be2d64e1~uEFExvVmj0325703257euoutp01R DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218460; bh=pKCHxmLFgloCufJUhTXfQk8jti0gj8T4/UNwwnqUITk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gN8jXqnRa6fzxsZEBX/iQaa3vFFiYkrgqTN+eJA+ywGDy44Yx4w97yr+yZbD49OnB wY5sscUaipnV6Z4rPa81b7lih28bryR88blY5ywgFDa/DDNofOfm7lMK1nkamr3C2d upFRJ67LE2UZKd8KMWktxKyk2nwEctQR7BnKOvvQ= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200128133419eucas1p16e9f753f60812e80b51c2e968d6ed319~uEFEnhNF40714007140eucas1p1o; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 68.5A.60679.B58303E5; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133419eucas1p293e7f2e62e74c9208a30fd83650e8615~uEFEUJBW-0474204742eucas1p2Y; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133419eusmtrp2fe02c5a35e93f939d087ea1b00cc047a~uEFETbAcc0330103301eusmtrp2_; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-61-5e30385bfc93 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 15.82.07950.B58303E5; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133419eusmtip29a86a1b37f149255148f57a28935142c~uEFD1s7iJ0724907249eusmtip2B; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 26/28] ata: start separating SATA specific code from libata-eh.c Date: Tue, 28 Jan 2020 14:33:41 +0100 Message-Id: <20200128133343.29905-27-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprOKsWRmVeSWpSXmKPExsWy7djP87rRFgZxBm23rC1W3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBrFZZOS mpNZllqkb5fAlXF8/0TWgrWWFbN3WDcwHtbtYuTkkBAwkTi24hhLFyMXh5DACkaJqY2z2CGc L4wSbR0ToDKfGSXOdexkgmm5eeghI0RiOaPErxvbWeFapr6bDVbFJmAlMbF9FSOILSKgINHz eyUbSBGzwBpGiVWHm8ASwgJBEtunPwSzWQRUJT5tPcMKYvMK2EmsXjGRHWKdvMTWb5+A4hwc nEDxnr3mECWCEidnPmEBsZmBSpq3zmYGmS8h0M4u8ePcD2aIXheJM4e2QJ0tLPHq+BaomTIS /3fOZ4JoWMco8bfjBVT3dkaJ5ZP/sUFUWUvcOfeLDWQzs4CmxPpd+iCmhICjxJ/p4RAmn8SN t4IQN/BJTNo2nRkizCvR0SYEMUNNYsOyDWwwW7t2roQq8ZDYeJhtAqPiLCTPzELyzCyErQsY mVcxiqeWFuempxYb5aWW6xUn5haX5qXrJefnbmIEJpfT/45/2cG460/SIUYBDkYlHt4ZKgZx QqyJZcWVuYcYJTiYlUR4O5mAQrwpiZVVqUX58UWlOanFhxilOViUxHmNF72MFRJITyxJzU5N LUgtgskycXBKNTBu2fLTN1HU33Dz+u3XDZqj9Pj3Nf2c33XBmEvo/KmcszVmnCdiLflyJjhP ebva0bQ9Sifk3aN81WCxy26P6lNvOs+9GHlml2P55ideO9ZocBvOMp8xd+ufpKQTFcmGzIHS aZ6Jv3muz7gwPT1/+4yFD16uaOpl+lj6Kc5uz+pEzbqSmBmqaeeVWIozEg21mIuKEwGxf1hn KgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeLIzCtJLcpLzFFi42I5/e/4Pd1oC4M4g+MblSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl3F8/0TWgrWW FbN3WDcwHtbtYuTkkBAwkbh56CFjFyMXh5DAUkaJd1+PM3UxcgAlZCSOry+DqBGW+HOtiw2i 5hOjxN3LN5hBEmwCVhIT21cxgtgiAgoSPb9XghUxC2xglHh18wsLSEJYIEDiV9tjNhCbRUBV 4tPWM6wgNq+AncTqFRPZITbIS2z99okVZDEnULxnrzlIWEjAVmL9madQ5YISJ2c+ARvJDFTe vHU28wRGgVlIUrOQpBYwMq1iFEktLc5Nzy020itOzC0uzUvXS87P3cQIjIJtx35u2cHY9S74 EKMAB6MSD6+DkkGcEGtiWXFl7iFGCQ5mJRHeTiagEG9KYmVValF+fFFpTmrxIUZToB8mMkuJ JucDIzSvJN7Q1NDcwtLQ3Njc2MxCSZy3Q+BgjJBAemJJanZqakFqEUwfEwenVAOj2BdvMXNh VpsOw68PfyvMan2iqby8nOOjP4vqfhPG8s3vnhaWfExb/O958n69ZC43hpUl93Qq5XxXKTQL F2rVnX66YZaEiKqgYtyLx9M/lG7q9k4+5VNnH8ZXebQo58TcjKTvXdcYmJR5Ih/ty3Wcl8Bm PePfl1PlFytTFpwTN21m0NW+HqHEUpyRaKjFXFScCABvDXkWmAIAAA== X-CMS-MailID: 20200128133419eucas1p293e7f2e62e74c9208a30fd83650e8615 X-Msg-Generator: CA X-RootMTR: 20200128133419eucas1p293e7f2e62e74c9208a30fd83650e8615 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133419eucas1p293e7f2e62e74c9208a30fd83650e8615 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Start separating SATA specific code from libata-eh.c: * move sata_async_notification() to libata-eh-sata.c: * cover sata_async_notification() with CONFIG_SATA_HOST ifdef in * include libata-eh-sata.c in the build when CONFIG_SATA_HOST=y Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 16889 18 0 16907 420b drivers/ata/libata-eh.o after: 16810 18 0 16828 41bc drivers/ata/libata-eh.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/Makefile | 3 +- drivers/ata/libata-eh-sata.c | 85 ++++++++++++++++++++++++++++++++++++ drivers/ata/libata-eh.c | 74 ------------------------------- include/linux/libata.h | 8 +++- 4 files changed, 94 insertions(+), 76 deletions(-) create mode 100644 drivers/ata/libata-eh-sata.c diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index d6fb3d4a2ac5..6bdbbcce8fef 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -123,7 +123,8 @@ obj-$(CONFIG_PATA_LEGACY) += pata_legacy.o libata-y := libata-core.o libata-scsi.o libata-eh.o \ libata-transport.o libata-trace.o -libata-$(CONFIG_SATA_HOST) += libata-core-sata.o libata-scsi-sata.o +libata-$(CONFIG_SATA_HOST) += libata-core-sata.o libata-scsi-sata.o \ + libata-eh-sata.o libata-$(CONFIG_ATA_SFF) += libata-sff.o libata-$(CONFIG_SATA_PMP) += libata-pmp.o libata-$(CONFIG_ATA_ACPI) += libata-acpi.o diff --git a/drivers/ata/libata-eh-sata.c b/drivers/ata/libata-eh-sata.c new file mode 100644 index 000000000000..4b6dc715629a --- /dev/null +++ b/drivers/ata/libata-eh-sata.c @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * libata-eh.c - SATA specific part of libata error handling + * + * Copyright 2006 Tejun Heo + */ + +#include +#include + +#include "libata.h" + +/** + * sata_async_notification - SATA async notification handler + * @ap: ATA port where async notification is received + * + * Handler to be called when async notification via SDB FIS is + * received. This function schedules EH if necessary. + * + * LOCKING: + * spin_lock_irqsave(host lock) + * + * RETURNS: + * 1 if EH is scheduled, 0 otherwise. + */ +int sata_async_notification(struct ata_port *ap) +{ + u32 sntf; + int rc; + + if (!(ap->flags & ATA_FLAG_AN)) + return 0; + + rc = sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf); + if (rc == 0) + sata_scr_write(&ap->link, SCR_NOTIFICATION, sntf); + + if (!sata_pmp_attached(ap) || rc) { + /* PMP is not attached or SNTF is not available */ + if (!sata_pmp_attached(ap)) { + /* PMP is not attached. Check whether ATAPI + * AN is configured. If so, notify media + * change. + */ + struct ata_device *dev = ap->link.device; + + if ((dev->class == ATA_DEV_ATAPI) && + (dev->flags & ATA_DFLAG_AN)) + ata_scsi_media_change_notify(dev); + return 0; + } else { + /* PMP is attached but SNTF is not available. + * ATAPI async media change notification is + * not used. The PMP must be reporting PHY + * status change, schedule EH. + */ + ata_port_schedule_eh(ap); + return 1; + } + } else { + /* PMP is attached and SNTF is available */ + struct ata_link *link; + + /* check and notify ATAPI AN */ + ata_for_each_link(link, ap, EDGE) { + if (!(sntf & (1 << link->pmp))) + continue; + + if ((link->device->class == ATA_DEV_ATAPI) && + (link->device->flags & ATA_DFLAG_AN)) + ata_scsi_media_change_notify(link->device); + } + + /* If PMP is reporting that PHY status of some + * downstream ports has changed, schedule EH. + */ + if (sntf & (1 << SATA_PMP_CTRL_PORT)) { + ata_port_schedule_eh(ap); + return 1; + } + + return 0; + } +} +EXPORT_SYMBOL_GPL(sata_async_notification); diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 04275f4c8d36..201165955b90 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -1092,80 +1092,6 @@ int ata_port_freeze(struct ata_port *ap) } EXPORT_SYMBOL_GPL(ata_port_freeze); -/** - * sata_async_notification - SATA async notification handler - * @ap: ATA port where async notification is received - * - * Handler to be called when async notification via SDB FIS is - * received. This function schedules EH if necessary. - * - * LOCKING: - * spin_lock_irqsave(host lock) - * - * RETURNS: - * 1 if EH is scheduled, 0 otherwise. - */ -int sata_async_notification(struct ata_port *ap) -{ - u32 sntf; - int rc; - - if (!(ap->flags & ATA_FLAG_AN)) - return 0; - - rc = sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf); - if (rc == 0) - sata_scr_write(&ap->link, SCR_NOTIFICATION, sntf); - - if (!sata_pmp_attached(ap) || rc) { - /* PMP is not attached or SNTF is not available */ - if (!sata_pmp_attached(ap)) { - /* PMP is not attached. Check whether ATAPI - * AN is configured. If so, notify media - * change. - */ - struct ata_device *dev = ap->link.device; - - if ((dev->class == ATA_DEV_ATAPI) && - (dev->flags & ATA_DFLAG_AN)) - ata_scsi_media_change_notify(dev); - return 0; - } else { - /* PMP is attached but SNTF is not available. - * ATAPI async media change notification is - * not used. The PMP must be reporting PHY - * status change, schedule EH. - */ - ata_port_schedule_eh(ap); - return 1; - } - } else { - /* PMP is attached and SNTF is available */ - struct ata_link *link; - - /* check and notify ATAPI AN */ - ata_for_each_link(link, ap, EDGE) { - if (!(sntf & (1 << link->pmp))) - continue; - - if ((link->device->class == ATA_DEV_ATAPI) && - (link->device->flags & ATA_DFLAG_AN)) - ata_scsi_media_change_notify(link->device); - } - - /* If PMP is reporting that PHY status of some - * downstream ports has changed, schedule EH. - */ - if (sntf & (1 << SATA_PMP_CTRL_PORT)) { - ata_port_schedule_eh(ap); - return 1; - } - - return 0; - } -} -EXPORT_SYMBOL_GPL(sata_async_notification); - /** * ata_eh_freeze_port - EH helper to freeze port * @ap: ATA port to freeze diff --git a/include/linux/libata.h b/include/linux/libata.h index eb2797c27547..d09997e2290b 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1335,7 +1335,6 @@ extern void ata_port_wait_eh(struct ata_port *ap); extern int ata_link_abort(struct ata_link *link); extern int ata_port_abort(struct ata_port *ap); extern int ata_port_freeze(struct ata_port *ap); -extern int sata_async_notification(struct ata_port *ap); extern void ata_eh_freeze_port(struct ata_port *ap); extern void ata_eh_thaw_port(struct ata_port *ap); @@ -1352,6 +1351,13 @@ extern void ata_std_sched_eh(struct ata_port *ap); extern void ata_std_end_eh(struct ata_port *ap); extern int ata_link_nr_enabled(struct ata_link *link); +/* + * SATA specific part of EH - drivers/ata/libata-eh-sata.c + */ +#ifdef CONFIG_SATA_HOST +extern int sata_async_notification(struct ata_port *ap); +#endif + /* * Base operations to inherit from and initializers for sht * From patchwork Tue Jan 28 13:33:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230325 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=UShVDJAW; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SJc2YyZz9sQp for ; Wed, 29 Jan 2020 00:34:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726641AbgA1NeY (ORCPT ); Tue, 28 Jan 2020 08:34:24 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:58896 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726604AbgA1NeW (ORCPT ); Tue, 28 Jan 2020 08:34:22 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133420euoutp01df87cd266fe67dce0736976a40cde47d~uEFFS2Q8p0284402844euoutp01i for ; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133420euoutp01df87cd266fe67dce0736976a40cde47d~uEFFS2Q8p0284402844euoutp01i DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218460; bh=FnAxc8I0haCRwqAAiq/E3v5iEVuaI9WWSWiKifmrAUw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UShVDJAWLMGKndZqpHpFOykPwH5tZ+8pJkbPsSxWkFzCp78qVTNzMcuiyCmbcWJH/ +6SL/7zq8QjZCCaTaJQ83HlNCbXgEKRGS8ZXTUXHMFG25cmjv1otDsP+SAWiVqwf6n 4UeYbRKd4G/TeKN5cMKNoLtnBZ5okKdpVa3ffJ20= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133420eucas1p2c30153238fe597a56437c6470904b2fb~uEFFFqdhM0683706837eucas1p2P; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id B2.DA.61286.C58303E5; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133420eucas1p294e2d41ec0eb0457ff781c69a5bcc489~uEFEx0XzH2264122641eucas1p2G; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133420eusmtrp2966682352ca9e0cd8fd27a40d7f6f61e~uEFExP5me0330003300eusmtrp2C; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-93-5e30385c5008 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id F5.82.07950.C58303E5; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133419eusmtip2e8cfbf4715c43f70bc8f8bfa9430b2be~uEFEdeK6X0724907249eusmtip2C; Tue, 28 Jan 2020 13:34:19 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 27/28] ata: move ata_eh_analyze_ncq_error() & co. to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:42 +0100 Message-Id: <20200128133343.29905-28-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7djPc7oxFgZxBrN2SVusvtvPZrFxxnpW i2e39jJZHNvxiMni8q45bBZzW6ezO7B57Jx1l93j8tlSj0OHOxg9+rasYvT4vEkugDWKyyYl NSezLLVI3y6BK+PkJ++Clb4V134eYG9g3GvbxcjJISFgIrH98S+mLkYuDiGBFYwSB3dvZoNw vjBKzD79mQXC+cwo0fO6gwWm5czn5VBVyxklVh9fwgTXsnDudDaQKjYBK4mJ7asYQWwRAQWJ nt8rwTqYBdYwSqw63ASWEBaIlPh0ayc7iM0ioCpx8uJKsBW8AnYSW8+eYIdYJy+x9dsn1i5G Dg5OoHjPXnOIEkGJkzOfgJUzA5U0b53NDDJfQqCZXaJ3yW+oXheJlZ+vsELYwhKvjm+BistI /N85nwmiYR2jxN+OF1Dd2xkllk/+xwZRZS1x59wvNpDNzAKaEut36YOYEgKOEiu/eEKYfBI3 3gpC3MAnMWnbdGaIMK9ER5sQxAw1iQ3LNrDBbO3auZIZwvaQ2DXrG9sERsVZSL6ZheSbWQhr FzAyr2IUTy0tzk1PLTbMSy3XK07MLS7NS9dLzs/dxAhML6f/Hf+0g/HrpaRDjAIcjEo8vDNU DOKEWBPLiitzDzFKcDArifB2MgGFeFMSK6tSi/Lji0pzUosPMUpzsCiJ8xovehkrJJCeWJKa nZpakFoEk2Xi4JRqYCyc8ebUpb1PHn7U0m4o3iF/a+UL97w/c5jfzi18tyBC9ME2j/sCe7et /ji1MvVAsO/FLAHrnGvHvGMOC+jU9sYG500t9+6tEdDd0GUyaVo1S+np+tPPbA2lpPXXaKwx mHdppkqczdJLiTvZWg2S780SFFiQILhlVXDpOTnfQ2+sbI2tJp6VnqbEUpyRaKjFXFScCADX BdfWKwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeLIzCtJLcpLzFFi42I5/e/4Pd0YC4M4g1czOSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl3Hyk3fBSt+K az8PsDcw7rXtYuTkkBAwkTjzeTlbFyMXh5DAUkaJnVt2MnUxcgAlZCSOry+DqBGW+HOtC6rm E6PE++ffmUASbAJWEhPbVzGC2CICChI9v1eCFTELbGCUeHXzCwtIQlggXGLL0mNgNouAqsTJ iyvBbF4BO4mtZ0+wQ2yQl9j67RMryGJOoHjPXnOQsJCArcT6M09ZIcoFJU7OfALWygxU3rx1 NvMERoFZSFKzkKQWMDKtYhRJLS3OTc8tNtIrTswtLs1L10vOz93ECIyCbcd+btnB2PUu+BCj AAejEg+vg5JBnBBrYllxZe4hRgkOZiUR3k4moBBvSmJlVWpRfnxRaU5q8SFGU6AfJjJLiSbn AyM0ryTe0NTQ3MLS0NzY3NjMQkmct0PgYIyQQHpiSWp2ampBahFMHxMHp1QD47k9ch/cnZ8/ ETdY0+Qt8iDSfEEr46OskOP7ZL0dAthPZO1UeHKh95vGv0sHO2OKbnccWjf1XI1RzaPlAYvs llW/N+WtyhIWPaomxLzuY5r0Ck/NRRkaxacfPOp3XapvIX9C3Ub630HtjTqTt4nPyDrgkeWz 66yX6kSmbffXrEpY3XfPsvK9jBJLcUaioRZzUXEiAJvWUCGYAgAA X-CMS-MailID: 20200128133420eucas1p294e2d41ec0eb0457ff781c69a5bcc489 X-Msg-Generator: CA X-RootMTR: 20200128133420eucas1p294e2d41ec0eb0457ff781c69a5bcc489 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133420eucas1p294e2d41ec0eb0457ff781c69a5bcc489 References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * move ata_eh_analyze_ncq_error() and ata_eh_read_log_10h() to libata-eh-sata.c * add static inline for ata_eh_analyze_ncq_error() for CONFIG_SATA_HOST=n case (link->sactive is non-zero only if NCQ commands are actually queued so empty function body is sufficient) Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 16810 18 0 16828 41bc drivers/ata/libata-eh.o after: 16092 18 0 16110 3eee drivers/ata/libata-eh.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-eh-sata.c | 131 +++++++++++++++++++++++++++++++++++ drivers/ata/libata-eh.c | 131 ----------------------------------- include/linux/libata.h | 4 +- 3 files changed, 134 insertions(+), 132 deletions(-) diff --git a/drivers/ata/libata-eh-sata.c b/drivers/ata/libata-eh-sata.c index 4b6dc715629a..4b55d89862fb 100644 --- a/drivers/ata/libata-eh-sata.c +++ b/drivers/ata/libata-eh-sata.c @@ -83,3 +83,134 @@ int sata_async_notification(struct ata_port *ap) } } EXPORT_SYMBOL_GPL(sata_async_notification); + +/** + * ata_eh_read_log_10h - Read log page 10h for NCQ error details + * @dev: Device to read log page 10h from + * @tag: Resulting tag of the failed command + * @tf: Resulting taskfile registers of the failed command + * + * Read log page 10h to obtain NCQ error details and clear error + * condition. + * + * LOCKING: + * Kernel thread context (may sleep). + * + * RETURNS: + * 0 on success, -errno otherwise. + */ +static int ata_eh_read_log_10h(struct ata_device *dev, + int *tag, struct ata_taskfile *tf) +{ + u8 *buf = dev->link->ap->sector_buf; + unsigned int err_mask; + u8 csum; + int i; + + err_mask = ata_read_log_page(dev, ATA_LOG_SATA_NCQ, 0, buf, 1); + if (err_mask) + return -EIO; + + csum = 0; + for (i = 0; i < ATA_SECT_SIZE; i++) + csum += buf[i]; + if (csum) + ata_dev_warn(dev, "invalid checksum 0x%x on log page 10h\n", + csum); + + if (buf[0] & 0x80) + return -ENOENT; + + *tag = buf[0] & 0x1f; + + tf->command = buf[2]; + tf->feature = buf[3]; + tf->lbal = buf[4]; + tf->lbam = buf[5]; + tf->lbah = buf[6]; + tf->device = buf[7]; + tf->hob_lbal = buf[8]; + tf->hob_lbam = buf[9]; + tf->hob_lbah = buf[10]; + tf->nsect = buf[12]; + tf->hob_nsect = buf[13]; + if (dev->class == ATA_DEV_ZAC && ata_id_has_ncq_autosense(dev->id)) + tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16]; + + return 0; +} + +/** + * ata_eh_analyze_ncq_error - analyze NCQ error + * @link: ATA link to analyze NCQ error for + * + * Read log page 10h, determine the offending qc and acquire + * error status TF. For NCQ device errors, all LLDDs have to do + * is setting AC_ERR_DEV in ehi->err_mask. This function takes + * care of the rest. + * + * LOCKING: + * Kernel thread context (may sleep). + */ +void ata_eh_analyze_ncq_error(struct ata_link *link) +{ + struct ata_port *ap = link->ap; + struct ata_eh_context *ehc = &link->eh_context; + struct ata_device *dev = link->device; + struct ata_queued_cmd *qc; + struct ata_taskfile tf; + int tag, rc; + + /* if frozen, we can't do much */ + if (ap->pflags & ATA_PFLAG_FROZEN) + return; + + /* is it NCQ device error? */ + if (!link->sactive || !(ehc->i.err_mask & AC_ERR_DEV)) + return; + + /* has LLDD analyzed already? */ + ata_qc_for_each_raw(ap, qc, tag) { + if (!(qc->flags & ATA_QCFLAG_FAILED)) + continue; + + if (qc->err_mask) + return; + } + + /* okay, this error is ours */ + memset(&tf, 0, sizeof(tf)); + rc = ata_eh_read_log_10h(dev, &tag, &tf); + if (rc) { + ata_link_err(link, "failed to read log page 10h (errno=%d)\n", + rc); + return; + } + + if (!(link->sactive & (1 << tag))) { + ata_link_err(link, "log page 10h reported inactive tag %d\n", + tag); + return; + } + + /* we've got the perpetrator, condemn it */ + qc = __ata_qc_from_tag(ap, tag); + memcpy(&qc->result_tf, &tf, sizeof(tf)); + qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48; + qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ; + if (dev->class == ATA_DEV_ZAC && + ((qc->result_tf.command & ATA_SENSE) || qc->result_tf.auxiliary)) { + char sense_key, asc, ascq; + + sense_key = (qc->result_tf.auxiliary >> 16) & 0xff; + asc = (qc->result_tf.auxiliary >> 8) & 0xff; + ascq = qc->result_tf.auxiliary & 0xff; + ata_scsi_set_sense(dev, qc->scsicmd, sense_key, asc, ascq); + ata_scsi_set_sense_information(dev, qc->scsicmd, + &qc->result_tf); + qc->flags |= ATA_QCFLAG_SENSE_VALID; + } + + ehc->i.err_mask &= ~AC_ERR_DEV; +} +EXPORT_SYMBOL_GPL(ata_eh_analyze_ncq_error); diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 201165955b90..b37e93c5013d 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -1351,62 +1351,6 @@ static const char *ata_err_string(unsigned int err_mask) return "unknown error"; } -/** - * ata_eh_read_log_10h - Read log page 10h for NCQ error details - * @dev: Device to read log page 10h from - * @tag: Resulting tag of the failed command - * @tf: Resulting taskfile registers of the failed command - * - * Read log page 10h to obtain NCQ error details and clear error - * condition. - * - * LOCKING: - * Kernel thread context (may sleep). - * - * RETURNS: - * 0 on success, -errno otherwise. - */ -static int ata_eh_read_log_10h(struct ata_device *dev, - int *tag, struct ata_taskfile *tf) -{ - u8 *buf = dev->link->ap->sector_buf; - unsigned int err_mask; - u8 csum; - int i; - - err_mask = ata_read_log_page(dev, ATA_LOG_SATA_NCQ, 0, buf, 1); - if (err_mask) - return -EIO; - - csum = 0; - for (i = 0; i < ATA_SECT_SIZE; i++) - csum += buf[i]; - if (csum) - ata_dev_warn(dev, "invalid checksum 0x%x on log page 10h\n", - csum); - - if (buf[0] & 0x80) - return -ENOENT; - - *tag = buf[0] & 0x1f; - - tf->command = buf[2]; - tf->feature = buf[3]; - tf->lbal = buf[4]; - tf->lbam = buf[5]; - tf->lbah = buf[6]; - tf->device = buf[7]; - tf->hob_lbal = buf[8]; - tf->hob_lbam = buf[9]; - tf->hob_lbah = buf[10]; - tf->nsect = buf[12]; - tf->hob_nsect = buf[13]; - if (dev->class == ATA_DEV_ZAC && ata_id_has_ncq_autosense(dev->id)) - tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16]; - - return 0; -} - /** * atapi_eh_tur - perform ATAPI TEST_UNIT_READY * @dev: target ATAPI device @@ -1590,81 +1534,6 @@ static void ata_eh_analyze_serror(struct ata_link *link) ehc->i.action |= action; } -/** - * ata_eh_analyze_ncq_error - analyze NCQ error - * @link: ATA link to analyze NCQ error for - * - * Read log page 10h, determine the offending qc and acquire - * error status TF. For NCQ device errors, all LLDDs have to do - * is setting AC_ERR_DEV in ehi->err_mask. This function takes - * care of the rest. - * - * LOCKING: - * Kernel thread context (may sleep). - */ -void ata_eh_analyze_ncq_error(struct ata_link *link) -{ - struct ata_port *ap = link->ap; - struct ata_eh_context *ehc = &link->eh_context; - struct ata_device *dev = link->device; - struct ata_queued_cmd *qc; - struct ata_taskfile tf; - int tag, rc; - - /* if frozen, we can't do much */ - if (ap->pflags & ATA_PFLAG_FROZEN) - return; - - /* is it NCQ device error? */ - if (!link->sactive || !(ehc->i.err_mask & AC_ERR_DEV)) - return; - - /* has LLDD analyzed already? */ - ata_qc_for_each_raw(ap, qc, tag) { - if (!(qc->flags & ATA_QCFLAG_FAILED)) - continue; - - if (qc->err_mask) - return; - } - - /* okay, this error is ours */ - memset(&tf, 0, sizeof(tf)); - rc = ata_eh_read_log_10h(dev, &tag, &tf); - if (rc) { - ata_link_err(link, "failed to read log page 10h (errno=%d)\n", - rc); - return; - } - - if (!(link->sactive & (1 << tag))) { - ata_link_err(link, "log page 10h reported inactive tag %d\n", - tag); - return; - } - - /* we've got the perpetrator, condemn it */ - qc = __ata_qc_from_tag(ap, tag); - memcpy(&qc->result_tf, &tf, sizeof(tf)); - qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48; - qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ; - if (dev->class == ATA_DEV_ZAC && - ((qc->result_tf.command & ATA_SENSE) || qc->result_tf.auxiliary)) { - char sense_key, asc, ascq; - - sense_key = (qc->result_tf.auxiliary >> 16) & 0xff; - asc = (qc->result_tf.auxiliary >> 8) & 0xff; - ascq = qc->result_tf.auxiliary & 0xff; - ata_scsi_set_sense(dev, qc->scsicmd, sense_key, asc, ascq); - ata_scsi_set_sense_information(dev, qc->scsicmd, - &qc->result_tf); - qc->flags |= ATA_QCFLAG_SENSE_VALID; - } - - ehc->i.err_mask &= ~AC_ERR_DEV; -} -EXPORT_SYMBOL_GPL(ata_eh_analyze_ncq_error); - /** * ata_eh_analyze_tf - analyze taskfile of a failed qc * @qc: qc to analyze diff --git a/include/linux/libata.h b/include/linux/libata.h index d09997e2290b..aba4bebb25f1 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -1341,7 +1341,6 @@ extern void ata_eh_thaw_port(struct ata_port *ap); extern void ata_eh_qc_complete(struct ata_queued_cmd *qc); extern void ata_eh_qc_retry(struct ata_queued_cmd *qc); -extern void ata_eh_analyze_ncq_error(struct ata_link *link); extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset, ata_reset_fn_t softreset, ata_reset_fn_t hardreset, @@ -1356,6 +1355,9 @@ extern int ata_link_nr_enabled(struct ata_link *link); */ #ifdef CONFIG_SATA_HOST extern int sata_async_notification(struct ata_port *ap); +extern void ata_eh_analyze_ncq_error(struct ata_link *link); +#else +static inline void ata_eh_analyze_ncq_error(struct ata_link *link) { } #endif /* From patchwork Tue Jan 28 13:33:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartlomiej Zolnierkiewicz X-Patchwork-Id: 1230326 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=GD//P2aa; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 486SJg2zP6z9sRW for ; Wed, 29 Jan 2020 00:34:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726646AbgA1NeY (ORCPT ); Tue, 28 Jan 2020 08:34:24 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:59031 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726616AbgA1NeX (ORCPT ); Tue, 28 Jan 2020 08:34:23 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200128133421euoutp013d968f1ef663b3f928e32dbd51ab233d~uEFFz1Tpg0328903289euoutp01N for ; Tue, 28 Jan 2020 13:34:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200128133421euoutp013d968f1ef663b3f928e32dbd51ab233d~uEFFz1Tpg0328903289euoutp01N DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1580218461; bh=f4pGIZF5n68twmRaSlTYAptwbRCwIxi64/HHyKcDMRs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GD//P2aasZ8cxk7SJt0DxoYzk+vWarE2gBBggI9hkUyBQt4+IhOQQzpf1a8PGrTKW mIKV/Y+HhmeMRI1bdx/NJImRN7IGfqfrrpDFOK2PgeSKx5L2S4AM7J5CBAiiR3VseN +31+JYqV8wrlsftJt6OoTs2WtoYxEm+T8fX6alZs= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200128133421eucas1p20f62ac9c228146101fd2558b27b6e450~uEFFk5LEM1871818718eucas1p2S; Tue, 28 Jan 2020 13:34:21 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 49.5A.60679.C58303E5; Tue, 28 Jan 2020 13:34:21 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200128133420eucas1p23e99a72e7735412f93dc015b8cb25d4b~uEFFKrQ9Q0683706837eucas1p2R; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200128133420eusmtrp25db619364d396acfb9065a41acc5c03c~uEFFKGqXl0330003300eusmtrp2D; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-65-5e30385c2808 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id E7.92.08375.C58303E5; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) Received: from AMDC3058.digital.local (unknown [106.120.51.71]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200128133420eusmtip2ecd0ea1077e217ad84af2e9868b97c29~uEFExJU-80724907249eusmtip2D; Tue, 28 Jan 2020 13:34:20 +0000 (GMT) From: Bartlomiej Zolnierkiewicz To: Jens Axboe Cc: Michael Schmitz , Geert Uytterhoeven , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH 28/28] ata: move ata_eh_set_lpm() to libata-core-sata.c Date: Tue, 28 Jan 2020 14:33:43 +0100 Message-Id: <20200128133343.29905-29-b.zolnierkie@samsung.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200128133343.29905-1-b.zolnierkie@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprKKsWRmVeSWpSXmKPExsWy7djP87qxFgZxBpPsLFbf7Wez2DhjPavF s1t7mSyO7XjEZHF51xw2i7mt09kd2Dx2zrrL7nH5bKnHocMdjB59W1YxenzeJBfAGsVlk5Ka k1mWWqRvl8CVcfrZCtaC7f4V278mNzDuteti5OCQEDCROHhQoYuRi0NIYAWjRM/FCewQzhdG iY+3j7JCOJ8ZJdZe/cLcxcgJ1vHl0jwmEFtIYDmjxIf5KXAd0xsPsoAk2ASsJCa2r2IEsUUE FCR6fq9kAyliFljDKLHqcBNYQljAXeLCp/lsIDaLgKrE1cvfwZp5Bewk9lyZxwixTV5i67dP rCC3cgLFe/aaQ5QISpyc+QSsnBmopHnrbKjj2tklmk/GQdguEt83fWaDsIUlXh3fwg5hy0j8 3zmfCeQeCYF1jBJ/O14wQzjbGSWWT/4H1WEtcefcLzaQxcwCmhLrd+lDhB0lHqy5xQYJOz6J G28FIW7gk5i0bTozRJhXoqNNCKJaTWLDsg1sMGu7dq6EOtND4uj+N4wTGBVnIflmFpJvZiHs XcDIvIpRPLW0ODc9tdgoL7Vcrzgxt7g0L10vOT93EyMwsZz+d/zLDsZdf5IOMQpwMCrx8M5Q MYgTYk0sK67MPcQowcGsJMLbyQQU4k1JrKxKLcqPLyrNSS0+xCjNwaIkzmu86GWskEB6Yklq dmpqQWoRTJaJg1OqgTGQR/37FCvhS0xyJ297V+Xx6yvyPmZo82kOitk+1/Z0tqNX1EzV19sN nu9knpeh1/BzqcNbtYIDuseF9l3c2n/fWDvxQ2CeTUBjrFqFRUO+nb/sW1tJ9Z/xW373HO3x C52i++WV+ZdSxXhfM7czOY92/S6sEryb3u7xW+XRHyPpY0GO3bdMlViKMxINtZiLihMBLTqv TigDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeLIzCtJLcpLzFFi42I5/e/4Pd0YC4M4gz3HZSxW3+1ns9g4Yz2r xbNbe5ksju14xGRxedccNou5rdPZHdg8ds66y+5x+Wypx6HDHYwefVtWMXp83iQXwBqlZ1OU X1qSqpCRX1xiqxRtaGGkZ2hpoWdkYqlnaGwea2VkqqRvZ5OSmpNZllqkb5egl3H62QrWgu3+ Fdu/Jjcw7rXrYuTkkBAwkfhyaR5TFyMXh5DAUkaJxuY21i5GDqCEjMTx9WUQNcISf651sUHU fGKUOHd8NitIgk3ASmJi+ypGEFtEQEGi5/dKsCJmgQ2MEq9ufmEBSQgLuEtc+DSfDcRmEVCV uHr5O1icV8BOYs+VeYwQG+Qltn77BLaYEyjes9ccJCwkYCux/sxTVohyQYmTM5+AtTIDlTdv nc08gVFgFpLULCSpBYxMqxhFUkuLc9Nziw31ihNzi0vz0vWS83M3MQKjYNuxn5t3MF7aGHyI UYCDUYmHd4aKQZwQa2JZcWXuIUYJDmYlEd5OJqAQb0piZVVqUX58UWlOavEhRlOgHyYyS4km 5wMjNK8k3tDU0NzC0tDc2NzYzEJJnLdD4GCMkEB6YklqdmpqQWoRTB8TB6dUA+PckvdT4s+9 nrv52va9t229v2zv23Tsx6pHfD7bP22etujklhMWgbMqLK7tvPn3xLxvIvN/sNycU1rQNL8n 3lmw873Nqnitzb3M/g+db99t2F0uVXCjIdVsZdSpRr9j8eK7ZA+KNxbXT2Bd9SG4ye2B8Y6s rDuT2rYVXjQ8zP5zz//FUhP0PjP+UWIpzkg01GIuKk4EABKbaveYAgAA X-CMS-MailID: 20200128133420eucas1p23e99a72e7735412f93dc015b8cb25d4b X-Msg-Generator: CA X-RootMTR: 20200128133420eucas1p23e99a72e7735412f93dc015b8cb25d4b X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200128133420eucas1p23e99a72e7735412f93dc015b8cb25d4b References: <20200128133343.29905-1-b.zolnierkie@samsung.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org * un-static ata_eh_set_lpm() and move it to libata-eh-sata.c * add static inline for ata_eh_set_lpm() for CONFIG_SATA_HOST=n case (for PATA hosts "ap && !ap->ops->set_lpm" condition is always true so it's sufficient for the function to return zero) Code size savings on m68k arch using atari_defconfig: text data bss dec hex filename before: 16092 18 0 16110 3eee drivers/ata/libata-eh.o after: 15346 18 0 15364 3c04 drivers/ata/libata-eh.o Signed-off-by: Bartlomiej Zolnierkiewicz --- drivers/ata/libata-eh-sata.c | 133 +++++++++++++++++++++++++++++++++++ drivers/ata/libata-eh.c | 133 ----------------------------------- drivers/ata/libata.h | 9 +++ 3 files changed, 142 insertions(+), 133 deletions(-) diff --git a/drivers/ata/libata-eh-sata.c b/drivers/ata/libata-eh-sata.c index 4b55d89862fb..cd7b1b434d53 100644 --- a/drivers/ata/libata-eh-sata.c +++ b/drivers/ata/libata-eh-sata.c @@ -214,3 +214,136 @@ void ata_eh_analyze_ncq_error(struct ata_link *link) ehc->i.err_mask &= ~AC_ERR_DEV; } EXPORT_SYMBOL_GPL(ata_eh_analyze_ncq_error); + +/** + * ata_eh_set_lpm - configure SATA interface power management + * @link: link to configure power management + * @policy: the link power management policy + * @r_failed_dev: out parameter for failed device + * + * Enable SATA Interface power management. This will enable + * Device Interface Power Management (DIPM) for min_power and + * medium_power_with_dipm policies, and then call driver specific + * callbacks for enabling Host Initiated Power management. + * + * LOCKING: + * EH context. + * + * RETURNS: + * 0 on success, -errno on failure. + */ +int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy, + struct ata_device **r_failed_dev) +{ + struct ata_port *ap = ata_is_host_link(link) ? link->ap : NULL; + struct ata_eh_context *ehc = &link->eh_context; + struct ata_device *dev, *link_dev = NULL, *lpm_dev = NULL; + enum ata_lpm_policy old_policy = link->lpm_policy; + bool no_dipm = link->ap->flags & ATA_FLAG_NO_DIPM; + unsigned int hints = ATA_LPM_EMPTY | ATA_LPM_HIPM; + unsigned int err_mask; + int rc; + + /* if the link or host doesn't do LPM, noop */ + if ((link->flags & ATA_LFLAG_NO_LPM) || (ap && !ap->ops->set_lpm)) + return 0; + + /* + * DIPM is enabled only for MIN_POWER as some devices + * misbehave when the host NACKs transition to SLUMBER. Order + * device and link configurations such that the host always + * allows DIPM requests. + */ + ata_for_each_dev(dev, link, ENABLED) { + bool hipm = ata_id_has_hipm(dev->id); + bool dipm = ata_id_has_dipm(dev->id) && !no_dipm; + + /* find the first enabled and LPM enabled devices */ + if (!link_dev) + link_dev = dev; + + if (!lpm_dev && (hipm || dipm)) + lpm_dev = dev; + + hints &= ~ATA_LPM_EMPTY; + if (!hipm) + hints &= ~ATA_LPM_HIPM; + + /* disable DIPM before changing link config */ + if (policy < ATA_LPM_MED_POWER_WITH_DIPM && dipm) { + err_mask = ata_dev_set_feature(dev, + SETFEATURES_SATA_DISABLE, SATA_DIPM); + if (err_mask && err_mask != AC_ERR_DEV) { + ata_dev_warn(dev, + "failed to disable DIPM, Emask 0x%x\n", + err_mask); + rc = -EIO; + goto fail; + } + } + } + + if (ap) { + rc = ap->ops->set_lpm(link, policy, hints); + if (!rc && ap->slave_link) + rc = ap->ops->set_lpm(ap->slave_link, policy, hints); + } else + rc = sata_pmp_set_lpm(link, policy, hints); + + /* + * Attribute link config failure to the first (LPM) enabled + * device on the link. + */ + if (rc) { + if (rc == -EOPNOTSUPP) { + link->flags |= ATA_LFLAG_NO_LPM; + return 0; + } + dev = lpm_dev ? lpm_dev : link_dev; + goto fail; + } + + /* + * Low level driver acked the transition. Issue DIPM command + * with the new policy set. + */ + link->lpm_policy = policy; + if (ap && ap->slave_link) + ap->slave_link->lpm_policy = policy; + + /* host config updated, enable DIPM if transitioning to MIN_POWER */ + ata_for_each_dev(dev, link, ENABLED) { + if (policy >= ATA_LPM_MED_POWER_WITH_DIPM && !no_dipm && + ata_id_has_dipm(dev->id)) { + err_mask = ata_dev_set_feature(dev, + SETFEATURES_SATA_ENABLE, SATA_DIPM); + if (err_mask && err_mask != AC_ERR_DEV) { + ata_dev_warn(dev, + "failed to enable DIPM, Emask 0x%x\n", + err_mask); + rc = -EIO; + goto fail; + } + } + } + + link->last_lpm_change = jiffies; + link->flags |= ATA_LFLAG_CHANGED; + + return 0; + +fail: + /* restore the old policy */ + link->lpm_policy = old_policy; + if (ap && ap->slave_link) + ap->slave_link->lpm_policy = old_policy; + + /* if no device or only one more chance is left, disable LPM */ + if (!dev || ehc->tries[dev->devno] <= 2) { + ata_link_warn(link, "disabling LPM on the link\n"); + link->flags |= ATA_LFLAG_NO_LPM; + } + if (r_failed_dev) + *r_failed_dev = dev; + return rc; +} diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index b37e93c5013d..723645cefee9 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -3208,139 +3208,6 @@ static int ata_eh_maybe_retry_flush(struct ata_device *dev) return rc; } -/** - * ata_eh_set_lpm - configure SATA interface power management - * @link: link to configure power management - * @policy: the link power management policy - * @r_failed_dev: out parameter for failed device - * - * Enable SATA Interface power management. This will enable - * Device Interface Power Management (DIPM) for min_power and - * medium_power_with_dipm policies, and then call driver specific - * callbacks for enabling Host Initiated Power management. - * - * LOCKING: - * EH context. - * - * RETURNS: - * 0 on success, -errno on failure. - */ -static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy, - struct ata_device **r_failed_dev) -{ - struct ata_port *ap = ata_is_host_link(link) ? link->ap : NULL; - struct ata_eh_context *ehc = &link->eh_context; - struct ata_device *dev, *link_dev = NULL, *lpm_dev = NULL; - enum ata_lpm_policy old_policy = link->lpm_policy; - bool no_dipm = link->ap->flags & ATA_FLAG_NO_DIPM; - unsigned int hints = ATA_LPM_EMPTY | ATA_LPM_HIPM; - unsigned int err_mask; - int rc; - - /* if the link or host doesn't do LPM, noop */ - if ((link->flags & ATA_LFLAG_NO_LPM) || (ap && !ap->ops->set_lpm)) - return 0; - - /* - * DIPM is enabled only for MIN_POWER as some devices - * misbehave when the host NACKs transition to SLUMBER. Order - * device and link configurations such that the host always - * allows DIPM requests. - */ - ata_for_each_dev(dev, link, ENABLED) { - bool hipm = ata_id_has_hipm(dev->id); - bool dipm = ata_id_has_dipm(dev->id) && !no_dipm; - - /* find the first enabled and LPM enabled devices */ - if (!link_dev) - link_dev = dev; - - if (!lpm_dev && (hipm || dipm)) - lpm_dev = dev; - - hints &= ~ATA_LPM_EMPTY; - if (!hipm) - hints &= ~ATA_LPM_HIPM; - - /* disable DIPM before changing link config */ - if (policy < ATA_LPM_MED_POWER_WITH_DIPM && dipm) { - err_mask = ata_dev_set_feature(dev, - SETFEATURES_SATA_DISABLE, SATA_DIPM); - if (err_mask && err_mask != AC_ERR_DEV) { - ata_dev_warn(dev, - "failed to disable DIPM, Emask 0x%x\n", - err_mask); - rc = -EIO; - goto fail; - } - } - } - - if (ap) { - rc = ap->ops->set_lpm(link, policy, hints); - if (!rc && ap->slave_link) - rc = ap->ops->set_lpm(ap->slave_link, policy, hints); - } else - rc = sata_pmp_set_lpm(link, policy, hints); - - /* - * Attribute link config failure to the first (LPM) enabled - * device on the link. - */ - if (rc) { - if (rc == -EOPNOTSUPP) { - link->flags |= ATA_LFLAG_NO_LPM; - return 0; - } - dev = lpm_dev ? lpm_dev : link_dev; - goto fail; - } - - /* - * Low level driver acked the transition. Issue DIPM command - * with the new policy set. - */ - link->lpm_policy = policy; - if (ap && ap->slave_link) - ap->slave_link->lpm_policy = policy; - - /* host config updated, enable DIPM if transitioning to MIN_POWER */ - ata_for_each_dev(dev, link, ENABLED) { - if (policy >= ATA_LPM_MED_POWER_WITH_DIPM && !no_dipm && - ata_id_has_dipm(dev->id)) { - err_mask = ata_dev_set_feature(dev, - SETFEATURES_SATA_ENABLE, SATA_DIPM); - if (err_mask && err_mask != AC_ERR_DEV) { - ata_dev_warn(dev, - "failed to enable DIPM, Emask 0x%x\n", - err_mask); - rc = -EIO; - goto fail; - } - } - } - - link->last_lpm_change = jiffies; - link->flags |= ATA_LFLAG_CHANGED; - - return 0; - -fail: - /* restore the old policy */ - link->lpm_policy = old_policy; - if (ap && ap->slave_link) - ap->slave_link->lpm_policy = old_policy; - - /* if no device or only one more chance is left, disable LPM */ - if (!dev || ehc->tries[dev->devno] <= 2) { - ata_link_warn(link, "disabling LPM on the link\n"); - link->flags |= ATA_LFLAG_NO_LPM; - } - if (r_failed_dev) - *r_failed_dev = dev; - return rc; -} - int ata_link_nr_enabled(struct ata_link *link) { struct ata_device *dev; diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 2bb87a3e7a62..5860ad5f348e 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h @@ -220,6 +220,15 @@ extern int ata_ering_map(struct ata_ering *ering, extern unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key); extern unsigned int atapi_eh_request_sense(struct ata_device *dev, u8 *sense_buf, u8 dfl_sense_key); +/* libata-eh-sata.c */ +#ifdef CONFIG_SATA_HOST +int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy, + struct ata_device **r_failed_dev); +#else +static inline int ata_eh_set_lpm(struct ata_link *link, + enum ata_lpm_policy policy, + struct ata_device **r_failed_dev) { return 0; } +#endif /* libata-pmp.c */ #ifdef CONFIG_SATA_PMP