All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: Michael Schmitz <schmitzmic@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Christoph Hellwig <hch@lst.de>,
	linux-ide@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com
Subject: [PATCH v4 18/27] ata: move *sata_set_spd*() to libata-sata.c
Date: Tue, 17 Mar 2020 15:43:24 +0100	[thread overview]
Message-ID: <20200317144333.2904-19-b.zolnierkie@samsung.com> (raw)
In-Reply-To: <20200317144333.2904-1-b.zolnierkie@samsung.com>

* move *sata_set_spd*() to libata-sata.c

* add static inlines for CONFIG_SATA_HOST=n case

Code size savings on m68k arch using (modified) atari_defconfig:

   text    data     bss     dec     hex filename
before:
  32842     572      40   33458    82ae drivers/ata/libata-core.o
after:
  32812     572      40   33428    8290 drivers/ata/libata-core.o

Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
 drivers/ata/libata-core.c | 81 ---------------------------------------
 drivers/ata/libata-sata.c | 81 +++++++++++++++++++++++++++++++++++++++
 drivers/ata/libata.h      |  7 ++++
 include/linux/libata.h    |  3 +-
 4 files changed, 90 insertions(+), 82 deletions(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 099d776289d7..37de14e6224f 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3062,87 +3062,6 @@ 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.
- */
-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-sata.c b/drivers/ata/libata-sata.c
index 1ef4c19864ac..d66afdc33d54 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -271,6 +271,87 @@ int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,
 }
 EXPORT_SYMBOL_GPL(sata_link_scr_lpm);
 
+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);
+
 /**
  *	ata_slave_link_init - initialize slave link
  *	@ap: port to initialize slave link for
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index cd8090ad43e5..53b45ebe3d55 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-sata.c */
+#ifdef CONFIG_SATA_HOST
+int sata_set_spd_needed(struct ata_link *link);
+#else
+static inline int sata_set_spd_needed(struct ata_link *link) { return 1; }
+#endif
+
 /* libata-acpi.c */
 #ifdef CONFIG_ATA_ACPI
 extern unsigned int ata_acpi_gtf_filter;
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 6848e2403d4f..246696cafc4c 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1066,7 +1066,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 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 int sata_set_spd(struct ata_link *link);
 #else
 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)
@@ -1210,6 +1210,7 @@ static inline int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
 {
 	return -EOPNOTSUPP;
 }
+static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; }
 #endif
 extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,
                             bool spm_wakeup);
-- 
2.24.1


  parent reply	other threads:[~2020-03-17 14:44 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20200317144340eucas1p1f6f7a6fbd27cbfeaab2ea97fbccb2836@eucas1p1.samsung.com>
2020-03-17 14:43 ` [PATCH v4 00/27] ata: optimize core code size on PATA only setups Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200317144341eucas1p2f76d3656e5d787e000b25da8f0d3b7c2@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 01/27] ata: remove stale maintainership information from core code Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200317144341eucas1p1b9caa7264b35b23e78fcaeb78d865255@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 02/27] ata: expose ncq_enable_prio sysfs attribute only on NCQ capable hosts Bartlomiej Zolnierkiewicz
2020-03-26  9:45       ` Christoph Hellwig
     [not found]   ` <CGME20200317144342eucas1p2d73deadcdb4cee860dd610f9f8e26bda@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 03/27] ata: make SATA_PMP option selectable only if any SATA host driver is enabled Bartlomiej Zolnierkiewicz
2020-03-17 14:55       ` James Bottomley
2020-03-19 16:15         ` Bartlomiej Zolnierkiewicz
2020-03-26  9:46       ` Christoph Hellwig
     [not found]   ` <CGME20200317144342eucas1p2fd5c2e6ff69f8e10496d0468f01f5601@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 04/27] sata_promise: use ata_cable_sata() Bartlomiej Zolnierkiewicz
2020-03-26  9:46       ` Christoph Hellwig
     [not found]   ` <CGME20200317144343eucas1p2aeb55b3deca6702b7c7128fe7775b708@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 05/27] ata: simplify ata_scsiop_inq_89() Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200317144343eucas1p2eb0fa17c0130d3be0b994110979e6a87@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 06/27] ata: use COMMAND_LINE_SIZE for ata_force_param_buf[] size Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200317144344eucas1p12dbd070e54e16a364b58b1c591216ebd@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 07/27] ata: optimize struct ata_force_param size Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200317144345eucas1p1e67d48caa8629fedb301e776e34dc0c1@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 08/27] ata: optimize ata_scsi_rbuf[] size Bartlomiej Zolnierkiewicz
2020-03-26  9:48       ` Christoph Hellwig
     [not found]   ` <CGME20200317144345eucas1p209f6a96605af02cc451786051ebab395@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 09/27] ata: move EXPORT_SYMBOL_GPL()s close to exported code Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200317144346eucas1p2d1e330410bd3482ce01c98db40d5612b@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 10/27] ata: remove EXPORT_SYMBOL_GPL()s not used by modules Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200317144346eucas1p201a88e2eb094f1a246d0eb541541131f@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 11/27] ata: fix CodingStyle issues in PATA timings code Bartlomiej Zolnierkiewicz
2020-03-26  9:49       ` Christoph Hellwig
     [not found]   ` <CGME20200317144347eucas1p103561521def960afc46a2531076e18df@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 12/27] ata: separate PATA timings code from libata-core.c Bartlomiej Zolnierkiewicz
2020-03-26  9:49       ` Christoph Hellwig
     [not found]   ` <CGME20200317144347eucas1p293ab462ec3d4990f380f9d652195cdb4@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 13/27] ata: add CONFIG_SATA_HOST=n version of ata_ncq_enabled() Bartlomiej Zolnierkiewicz
2020-03-26  9:50       ` Christoph Hellwig
     [not found]   ` <CGME20200317144348eucas1p14ad861316b19edaf885a52f9beb5dd2a@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 14/27] ata: let compiler optimize out ata_dev_config_ncq() on non-SATA hosts Bartlomiej Zolnierkiewicz
2020-03-26  9:50       ` Christoph Hellwig
     [not found]   ` <CGME20200317144348eucas1p2cce1c6e1ce8bafc0e68dec04655f1932@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 15/27] ata: let compiler optimize out ata_eh_set_lpm() " Bartlomiej Zolnierkiewicz
2020-03-26  9:50       ` Christoph Hellwig
     [not found]   ` <CGME20200317144349eucas1p1921dee3dcd097f695ba708c54325f226@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 16/27] ata: start separating SATA specific code from libata-core.c Bartlomiej Zolnierkiewicz
2020-03-26  9:51       ` Christoph Hellwig
     [not found]   ` <CGME20200317144349eucas1p1a2e79758cbdf36c747c8a82cd4ddbd74@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 17/27] ata: move sata_scr_*() to libata-sata.c Bartlomiej Zolnierkiewicz
2020-03-26  9:52       ` Christoph Hellwig
     [not found]   ` <CGME20200317144350eucas1p2caf23e8366434ef2c9954cd4d52f30f1@eucas1p2.samsung.com>
2020-03-17 14:43     ` Bartlomiej Zolnierkiewicz [this message]
2020-03-26  9:52       ` [PATCH v4 18/27] ata: move *sata_set_spd*() " Christoph Hellwig
     [not found]   ` <CGME20200317144350eucas1p2270ca7a1757769b238be42c2811172a1@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 19/27] ata: move sata_link_{debounce,resume}() " Bartlomiej Zolnierkiewicz
2020-03-26  9:55       ` Christoph Hellwig
     [not found]   ` <CGME20200317144350eucas1p157dd88ee3f766ec4fd209172635369aa@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 20/27] ata: move sata_link_hardreset() " Bartlomiej Zolnierkiewicz
2020-03-26  9:57       ` Christoph Hellwig
     [not found]   ` <CGME20200317144351eucas1p1d8d18236e6729d0bf21737a4296f56d7@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 21/27] ata: move ata_qc_complete_multiple() " Bartlomiej Zolnierkiewicz
2020-03-26  9:57       ` Christoph Hellwig
     [not found]   ` <CGME20200317144351eucas1p2020714aa775f0ab3aaea870d25f7fb92@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 22/27] ata: move sata_deb_timing_*() " Bartlomiej Zolnierkiewicz
2020-03-26  9:58       ` Christoph Hellwig
     [not found]   ` <CGME20200317144352eucas1p1ddb279cb52e2ae6f5189878912581162@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 23/27] ata: start separating SATA specific code from libata-scsi.c Bartlomiej Zolnierkiewicz
2020-03-26  9:59       ` Christoph Hellwig
     [not found]   ` <CGME20200317144353eucas1p163ca190ee937e771b4a583408500070a@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 24/27] ata: move ata_sas_*() to libata-sata.c Bartlomiej Zolnierkiewicz
2020-03-26 10:00       ` Christoph Hellwig
     [not found]   ` <CGME20200317144353eucas1p22a8a5d4a9c920db90387720159a26c90@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 25/27] ata: start separating SATA specific code from libata-eh.c Bartlomiej Zolnierkiewicz
2020-03-26 10:00       ` Christoph Hellwig
     [not found]   ` <CGME20200317144353eucas1p120a8f1a0fa5c293ada61b8d06f7aa9ec@eucas1p1.samsung.com>
2020-03-17 14:43     ` [PATCH v4 26/27] ata: move ata_eh_analyze_ncq_error() & co. to libata-sata.c Bartlomiej Zolnierkiewicz
2020-03-26 10:00       ` Christoph Hellwig
     [not found]   ` <CGME20200317144354eucas1p250e3fc557c00a80eda42b3332984f078@eucas1p2.samsung.com>
2020-03-17 14:43     ` [PATCH v4 27/27] ata: make "libata.force" kernel parameter optional Bartlomiej Zolnierkiewicz
2020-03-26 10:01       ` Christoph Hellwig
2020-03-26 15:16   ` [PATCH v4 00/27] ata: optimize core code size on PATA only setups Jens Axboe
2020-03-26 16:17     ` Bartlomiej Zolnierkiewicz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200317144333.2904-19-b.zolnierkie@samsung.com \
    --to=b.zolnierkie@samsung.com \
    --cc=axboe@kernel.dk \
    --cc=geert@linux-m68k.org \
    --cc=hch@lst.de \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=schmitzmic@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.