|
@@ -23,7 +23,7 @@
|
|
|
#include "response_manager.h"
|
|
|
#include "octeon_device.h"
|
|
|
|
|
|
-#define MEMOPS_IDX MAX_BAR1_MAP_INDEX
|
|
|
+#define MEMOPS_IDX BAR1_INDEX_DYNAMIC_MAP
|
|
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
static inline void
|
|
@@ -96,6 +96,25 @@ __octeon_pci_rw_core_mem(struct octeon_device *oct, u64 addr,
|
|
|
u32 copy_len = 0, index_reg_val = 0;
|
|
|
unsigned long flags;
|
|
|
u8 __iomem *mapped_addr;
|
|
|
+ u64 static_mapping_base;
|
|
|
+
|
|
|
+ static_mapping_base = oct->console_nb_info.dram_region_base;
|
|
|
+
|
|
|
+ if (static_mapping_base &&
|
|
|
+ static_mapping_base == (addr & ~(OCTEON_BAR1_ENTRY_SIZE - 1ULL))) {
|
|
|
+ int bar1_index = oct->console_nb_info.bar1_index;
|
|
|
+
|
|
|
+ mapped_addr = oct->mmio[1].hw_addr
|
|
|
+ + (bar1_index << ilog2(OCTEON_BAR1_ENTRY_SIZE))
|
|
|
+ + (addr & (OCTEON_BAR1_ENTRY_SIZE - 1ULL));
|
|
|
+
|
|
|
+ if (op)
|
|
|
+ octeon_pci_fastread(oct, mapped_addr, hostbuf, len);
|
|
|
+ else
|
|
|
+ octeon_pci_fastwrite(oct, mapped_addr, hostbuf, len);
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
spin_lock_irqsave(&oct->mem_access_lock, flags);
|
|
|
|