parisc: Avoid ioremap() for same addresss in iosapic_register()
authorHelge Deller <deller@gmx.de>
Mon, 21 Aug 2023 15:29:18 +0000 (17:29 +0200)
committerHelge Deller <deller@gmx.de>
Tue, 22 Aug 2023 08:24:47 +0000 (10:24 +0200)
The LBA has already called ioremap() to get it's virtual address,
which can be used for the IOSAPIC as well.
Avoid calling ioremap() again and just reuse the correct
iomem address for the IOSAPIC.

Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/include/asm/ropes.h
drivers/parisc/iosapic.c
drivers/parisc/lba_pci.c

index 8e51c775c80a6f9a8cfd55b12575956082bc9470..fd96706c7234a3e344fa11cf284f8c7e564efbf1 100644 (file)
@@ -252,7 +252,7 @@ static inline int agp_mode_mercury(void __iomem *hpa) {
 ** fixup_irq is to initialize PCI IRQ line support and
 ** virtualize pcidev->irq value. To be called by pci_fixup_bus().
 */
-extern void *iosapic_register(unsigned long hpa);
+extern void *iosapic_register(unsigned long hpa, void __iomem *vaddr);
 extern int iosapic_fixup_irq(void *obj, struct pci_dev *pcidev);
 
 #define LBA_FUNC_ID    0x0000  /* function id */
index bcc1dae0078033f605c7ba7f042a599487889260..27478e9f4e8457bea2f2c8a5c0c87b8b2c5e22b4 100644 (file)
@@ -890,7 +890,7 @@ iosapic_rd_version(struct iosapic_info *isi)
 **     o allocate and initialize isi_vector[]
 **     o allocate irq region
 */
-void *iosapic_register(unsigned long hpa)
+void *iosapic_register(unsigned long hpa, void __iomem *vaddr)
 {
        struct iosapic_info *isi = NULL;
        struct irt_entry *irte = irt_cell;
@@ -919,7 +919,7 @@ void *iosapic_register(unsigned long hpa)
                return NULL;
        }
 
-       isi->addr = ioremap(hpa, 4096);
+       isi->addr = vaddr;
        isi->isi_hpa = hpa;
        isi->isi_version = iosapic_rd_version(isi);
        isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1;
index 702bfd64e6e1264f9f83ce47abd51f61e8b96c71..9e22b117fb3a493b18b90b1624abb0fa34bcb542 100644 (file)
@@ -1535,7 +1535,8 @@ lba_driver_probe(struct parisc_device *dev)
        }
 
        /* Tell I/O SAPIC driver we have a IRQ handler/region. */
-       tmp_obj = iosapic_register(dev->hpa.start + LBA_IOSAPIC_BASE);
+       tmp_obj = iosapic_register(dev->hpa.start + LBA_IOSAPIC_BASE,
+                                               addr + LBA_IOSAPIC_BASE);
 
        /* NOTE: PCI devices (e.g. 103c:1005 graphics card) which don't
        **      have an IRT entry will get NULL back from iosapic code.