diff options
author | Sergey Shtylyov <s.shtylyov@omp.ru> | 2022-05-15 22:41:25 +0200 |
---|---|---|
committer | Damien Le Moal <damien.lemoal@opensource.wdc.com> | 2022-06-13 04:42:58 +0200 |
commit | 75b4d58cb5bd7401d537f149e2fa268beaa2c375 (patch) | |
tree | bf8809f0c7bc7e6c666ccedb07abd36e62693e1c | |
parent | ata: pata_hpt37x: factor out hpt37x_pci_clock() (diff) | |
download | linux-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.c | 34 |
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); } |