mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
ntb: intel: split out the gen3 code
Move the Intel hw gen3 code to its own source file. The ntb_hw_intel.c was getting too large and makes it hard to maintain with future hardware changes. Signed-off-by: Dave Jiang <dave.jiang@intel.com> Signed-off-by: Jon Mason <jdmason@kudzu.us>
This commit is contained in:
@@ -1 +1,2 @@
|
||||
obj-$(CONFIG_NTB_INTEL) += ntb_hw_intel.o
|
||||
ntb_hw_intel-y := ntb_hw_gen1.o ntb_hw_gen3.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -44,6 +44,8 @@
|
||||
#ifndef _NTB_INTEL_GEN1_H_
|
||||
#define _NTB_INTEL_GEN1_H_
|
||||
|
||||
#include "ntb_hw_intel.h"
|
||||
|
||||
/* Intel Gen1 Xeon hardware */
|
||||
#define XEON_PBAR23LMT_OFFSET 0x0000
|
||||
#define XEON_PBAR45LMT_OFFSET 0x0008
|
||||
@@ -139,4 +141,42 @@
|
||||
#define NTB_HWERR_B2BDOORBELL_BIT14 BIT_ULL(2)
|
||||
#define NTB_HWERR_MSIX_VECTOR32_BAD BIT_ULL(3)
|
||||
|
||||
extern struct intel_b2b_addr xeon_b2b_usd_addr;
|
||||
extern struct intel_b2b_addr xeon_b2b_dsd_addr;
|
||||
|
||||
int ndev_init_isr(struct intel_ntb_dev *ndev, int msix_min, int msix_max,
|
||||
int msix_shift, int total_shift);
|
||||
enum ntb_topo xeon_ppd_topo(struct intel_ntb_dev *ndev, u8 ppd);
|
||||
u64 ndev_db_read(struct intel_ntb_dev *ndev, void __iomem *mmio);
|
||||
int ndev_db_write(struct intel_ntb_dev *ndev, u64 db_bits,
|
||||
void __iomem *mmio);
|
||||
int ndev_mw_to_bar(struct intel_ntb_dev *ndev, int idx);
|
||||
int intel_ntb_mw_count(struct ntb_dev *ntb, int pidx);
|
||||
int intel_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int idx,
|
||||
resource_size_t *addr_align, resource_size_t *size_align,
|
||||
resource_size_t *size_max);
|
||||
int intel_ntb_peer_mw_count(struct ntb_dev *ntb);
|
||||
int intel_ntb_peer_mw_get_addr(struct ntb_dev *ntb, int idx,
|
||||
phys_addr_t *base, resource_size_t *size);
|
||||
u64 intel_ntb_link_is_up(struct ntb_dev *ntb, enum ntb_speed *speed,
|
||||
enum ntb_width *width);
|
||||
int intel_ntb_link_disable(struct ntb_dev *ntb);
|
||||
u64 intel_ntb_db_valid_mask(struct ntb_dev *ntb);
|
||||
int intel_ntb_db_vector_count(struct ntb_dev *ntb);
|
||||
u64 intel_ntb_db_vector_mask(struct ntb_dev *ntb, int db_vector);
|
||||
int intel_ntb_db_set_mask(struct ntb_dev *ntb, u64 db_bits);
|
||||
int intel_ntb_db_clear_mask(struct ntb_dev *ntb, u64 db_bits);
|
||||
int intel_ntb_peer_db_addr(struct ntb_dev *ntb, phys_addr_t *db_addr,
|
||||
resource_size_t *db_size);
|
||||
int intel_ntb_spad_is_unsafe(struct ntb_dev *ntb);
|
||||
int intel_ntb_spad_count(struct ntb_dev *ntb);
|
||||
u32 intel_ntb_spad_read(struct ntb_dev *ntb, int idx);
|
||||
int intel_ntb_spad_write(struct ntb_dev *ntb, int idx, u32 val);
|
||||
u32 intel_ntb_peer_spad_read(struct ntb_dev *ntb, int pidx, int sidx);
|
||||
int intel_ntb_peer_spad_write(struct ntb_dev *ntb, int pidx, int sidx,
|
||||
u32 val);
|
||||
int intel_ntb_peer_spad_addr(struct ntb_dev *ntb, int pidx, int sidx,
|
||||
phys_addr_t *spad_addr);
|
||||
int xeon_link_is_up(struct intel_ntb_dev *ndev);
|
||||
|
||||
#endif
|
||||
|
||||
597
drivers/ntb/hw/intel/ntb_hw_gen3.c
Normal file
597
drivers/ntb/hw/intel/ntb_hw_gen3.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -44,6 +44,8 @@
|
||||
#ifndef _NTB_INTEL_GEN3_H_
|
||||
#define _NTB_INTEL_GEN3_H_
|
||||
|
||||
#include "ntb_hw_intel.h"
|
||||
|
||||
/* Intel Skylake Xeon hardware */
|
||||
#define SKX_IMBAR1SZ_OFFSET 0x00d0
|
||||
#define SKX_IMBAR2SZ_OFFSET 0x00d1
|
||||
@@ -89,4 +91,21 @@
|
||||
#define SKX_DB_TOTAL_SHIFT 33
|
||||
#define SKX_SPAD_COUNT 16
|
||||
|
||||
static inline u64 skx_db_ioread(void __iomem *mmio)
|
||||
{
|
||||
return ioread64(mmio);
|
||||
}
|
||||
|
||||
static inline void skx_db_iowrite(u64 bits, void __iomem *mmio)
|
||||
{
|
||||
iowrite64(bits, mmio);
|
||||
}
|
||||
|
||||
ssize_t ndev_ntb3_debugfs_read(struct file *filp, char __user *ubuf,
|
||||
size_t count, loff_t *offp);
|
||||
int skx_init_dev(struct intel_ntb_dev *ndev);
|
||||
int skx_poll_link(struct intel_ntb_dev *ndev);
|
||||
|
||||
extern const struct ntb_dev_ops intel_ntb3_ops;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -187,4 +187,64 @@ struct intel_ntb_dev {
|
||||
#define hb_ndev(__work) container_of(__work, struct intel_ntb_dev, \
|
||||
hb_timer.work)
|
||||
|
||||
static inline int pdev_is_xeon(struct pci_dev *pdev)
|
||||
{
|
||||
switch (pdev->device) {
|
||||
case PCI_DEVICE_ID_INTEL_NTB_SS_JSF:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_SS_SNB:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_SS_IVT:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_SS_HSX:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_SS_BDX:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_PS_JSF:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_PS_SNB:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_PS_IVT:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_PS_HSX:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_PS_BDX:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_B2B_JSF:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_B2B_SNB:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_B2B_IVT:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_B2B_HSX:
|
||||
case PCI_DEVICE_ID_INTEL_NTB_B2B_BDX:
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pdev_is_skx_xeon(struct pci_dev *pdev)
|
||||
{
|
||||
if (pdev->device == PCI_DEVICE_ID_INTEL_NTB_B2B_SKX)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef ioread64
|
||||
#ifdef readq
|
||||
#define ioread64 readq
|
||||
#else
|
||||
#define ioread64 _ioread64
|
||||
static inline u64 _ioread64(void __iomem *mmio)
|
||||
{
|
||||
u64 low, high;
|
||||
|
||||
low = ioread32(mmio);
|
||||
high = ioread32(mmio + sizeof(u32));
|
||||
return low | (high << 32);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef iowrite64
|
||||
#ifdef writeq
|
||||
#define iowrite64 writeq
|
||||
#else
|
||||
#define iowrite64 _iowrite64
|
||||
static inline void _iowrite64(u64 val, void __iomem *mmio)
|
||||
{
|
||||
iowrite32(val, mmio);
|
||||
iowrite32(val >> 32, mmio + sizeof(u32));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user