summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Shtylyov <s.shtylyov@omp.ru>2022-05-15 22:41:25 +0200
committerDamien Le Moal <damien.lemoal@opensource.wdc.com>2022-06-13 04:42:58 +0200
commit75b4d58cb5bd7401d537f149e2fa268beaa2c375 (patch)
treebf8809f0c7bc7e6c666ccedb07abd36e62693e1c
parentata: pata_hpt37x: factor out hpt37x_pci_clock() (diff)
downloadlinux-75b4d58cb5bd7401d537f149e2fa268beaa2c375.tar.xz
linux-75b4d58cb5bd7401d537f149e2fa268beaa2c375.zip
ata: pata_hpt37x: merge hpt374_read_freq() to hpt37x_pci_clock()
With hpt374_read_freq() implemented as a separate function, there's some code duplication going on, not to mention that this function is named incorrectly: it returns the f_CNT register value saved by BIOS, not the PCI clock frequency. Folding hpt374_read_freq() into hpt37x_pci_clock() saves 20 bytes of object code with x86_64 gcc 10.3.1... Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
-rw-r--r--drivers/ata/pata_hpt37x.c34
1 files changed, 10 insertions, 24 deletions
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c
index 38fc7f3d593c..d1a3d99d5d0a 100644
--- a/drivers/ata/pata_hpt37x.c
+++ b/drivers/ata/pata_hpt37x.c
@@ -23,7 +23,7 @@
#include <linux/libata.h>
#define DRV_NAME "pata_hpt37x"
-#define DRV_VERSION "0.6.29"
+#define DRV_VERSION "0.6.30"
struct hpt_clock {
u8 xfer_speed;
@@ -644,26 +644,6 @@ static int hpt37x_calibrate_dpll(struct pci_dev *dev)
return 0;
}
-static u32 hpt374_read_freq(struct pci_dev *pdev)
-{
- u32 freq;
- unsigned long io_base = pci_resource_start(pdev, 4);
-
- if (PCI_FUNC(pdev->devfn) & 1) {
- struct pci_dev *pdev_0;
-
- pdev_0 = pci_get_slot(pdev->bus, pdev->devfn - 1);
- /* Someone hot plugged the controller on us ? */
- if (pdev_0 == NULL)
- return 0;
- io_base = pci_resource_start(pdev_0, 4);
- freq = inl(io_base + 0x90);
- pci_dev_put(pdev_0);
- } else
- freq = inl(io_base + 0x90);
- return freq;
-}
-
static int hpt37x_pci_clock(struct pci_dev *pdev, unsigned int base)
{
unsigned int freq;
@@ -674,10 +654,16 @@ static int hpt37x_pci_clock(struct pci_dev *pdev, unsigned int base)
* according to the old driver. In addition we must use the value
* from FN 0 on the HPT374.
*/
- if (pdev->device == PCI_DEVICE_ID_TTI_HPT374) {
- fcnt = hpt374_read_freq(pdev);
- if (!fcnt)
+ if (pdev->device == PCI_DEVICE_ID_TTI_HPT374 &&
+ (PCI_FUNC(pdev->devfn) & 1)) {
+ struct pci_dev *pdev_fn0;
+
+ pdev_fn0 = pci_get_slot(pdev->bus, pdev->devfn - 1);
+ /* Someone hot plugged the controller on us? */
+ if (!pdev_fn0)
return 0;
+ fcnt = inl(pci_resource_start(pdev_fn0, 4) + 0x90);
+ pci_dev_put(pdev_fn0);
} else {
fcnt = inl(pci_resource_start(pdev, 4) + 0x90);
}