* [PATCH] ntb: remove Intel Atom NTB driver support
@ 2017-11-10 23:23 Dave Jiang
2017-11-13 14:06 ` Allen Hubbe
0 siblings, 1 reply; 6+ messages in thread
From: Dave Jiang @ 2017-11-10 23:23 UTC (permalink / raw)
To: allen.hubbe, jdmason; +Cc: linux-ntb
Removing dead code since this is not being used.
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
---
drivers/ntb/hw/intel/ntb_hw_intel.c | 309 -----------------------------------
drivers/ntb/hw/intel/ntb_hw_intel.h | 58 -------
2 files changed, 4 insertions(+), 363 deletions(-)
diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c b/drivers/ntb/hw/intel/ntb_hw_intel.c
index c1d2f85..94c0737 100644
--- a/drivers/ntb/hw/intel/ntb_hw_intel.c
+++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
@@ -74,12 +74,6 @@ MODULE_AUTHOR("Intel Corporation");
#define bar0_off(base, bar) ((base) + ((bar) << 2))
#define bar2_off(base, bar) bar0_off(base, (bar) - 2)
-static const struct intel_ntb_reg atom_reg;
-static const struct intel_ntb_alt_reg atom_pri_reg;
-static const struct intel_ntb_alt_reg atom_sec_reg;
-static const struct intel_ntb_alt_reg atom_b2b_reg;
-static const struct intel_ntb_xlat_reg atom_pri_xlat;
-static const struct intel_ntb_xlat_reg atom_sec_xlat;
static const struct intel_ntb_reg xeon_reg;
static const struct intel_ntb_alt_reg xeon_pri_reg;
static const struct intel_ntb_alt_reg xeon_sec_reg;
@@ -184,15 +178,6 @@ static inline void _iowrite64(u64 val, void __iomem *mmio)
#endif
#endif
-static inline int pdev_is_atom(struct pci_dev *pdev)
-{
- switch (pdev->device) {
- case PCI_DEVICE_ID_INTEL_NTB_B2B_BWD:
- return 1;
- }
- return 0;
-}
-
static inline int pdev_is_xeon(struct pci_dev *pdev)
{
switch (pdev->device) {
@@ -1015,8 +1000,7 @@ static ssize_t ndev_debugfs_read(struct file *filp, char __user *ubuf,
{
struct intel_ntb_dev *ndev = filp->private_data;
- if (pdev_is_xeon(ndev->ntb.pdev) ||
- pdev_is_atom(ndev->ntb.pdev))
+ if (pdev_is_xeon(ndev->ntb.pdev))
return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
else if (pdev_is_xeon_ntb3(ndev->ntb.pdev))
return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
@@ -1448,242 +1432,6 @@ static int intel_ntb_peer_spad_write(struct ntb_dev *ntb, int pidx,
ndev->peer_reg->spad);
}
-/* ATOM */
-
-static u64 atom_db_ioread(void __iomem *mmio)
-{
- return ioread64(mmio);
-}
-
-static void atom_db_iowrite(u64 bits, void __iomem *mmio)
-{
- iowrite64(bits, mmio);
-}
-
-static int atom_poll_link(struct intel_ntb_dev *ndev)
-{
- u32 ntb_ctl;
-
- ntb_ctl = ioread32(ndev->self_mmio + ATOM_NTBCNTL_OFFSET);
-
- if (ntb_ctl == ndev->ntb_ctl)
- return 0;
-
- ndev->ntb_ctl = ntb_ctl;
-
- ndev->lnk_sta = ioread32(ndev->self_mmio + ATOM_LINK_STATUS_OFFSET);
-
- return 1;
-}
-
-static int atom_link_is_up(struct intel_ntb_dev *ndev)
-{
- return ATOM_NTB_CTL_ACTIVE(ndev->ntb_ctl);
-}
-
-static int atom_link_is_err(struct intel_ntb_dev *ndev)
-{
- if (ioread32(ndev->self_mmio + ATOM_LTSSMSTATEJMP_OFFSET)
- & ATOM_LTSSMSTATEJMP_FORCEDETECT)
- return 1;
-
- if (ioread32(ndev->self_mmio + ATOM_IBSTERRRCRVSTS0_OFFSET)
- & ATOM_IBIST_ERR_OFLOW)
- return 1;
-
- return 0;
-}
-
-static inline enum ntb_topo atom_ppd_topo(struct intel_ntb_dev *ndev, u32 ppd)
-{
- struct device *dev = &ndev->ntb.pdev->dev;
-
- switch (ppd & ATOM_PPD_TOPO_MASK) {
- case ATOM_PPD_TOPO_B2B_USD:
- dev_dbg(dev, "PPD %d B2B USD\n", ppd);
- return NTB_TOPO_B2B_USD;
-
- case ATOM_PPD_TOPO_B2B_DSD:
- dev_dbg(dev, "PPD %d B2B DSD\n", ppd);
- return NTB_TOPO_B2B_DSD;
-
- case ATOM_PPD_TOPO_PRI_USD:
- case ATOM_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
- case ATOM_PPD_TOPO_SEC_USD:
- case ATOM_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
- dev_dbg(dev, "PPD %d non B2B disabled\n", ppd);
- return NTB_TOPO_NONE;
- }
-
- dev_dbg(dev, "PPD %d invalid\n", ppd);
- return NTB_TOPO_NONE;
-}
-
-static void atom_link_hb(struct work_struct *work)
-{
- struct intel_ntb_dev *ndev = hb_ndev(work);
- struct device *dev = &ndev->ntb.pdev->dev;
- unsigned long poll_ts;
- void __iomem *mmio;
- u32 status32;
-
- poll_ts = ndev->last_ts + ATOM_LINK_HB_TIMEOUT;
-
- /* Delay polling the link status if an interrupt was received,
- * unless the cached link status says the link is down.
- */
- if (time_after(poll_ts, jiffies) && atom_link_is_up(ndev)) {
- schedule_delayed_work(&ndev->hb_timer, poll_ts - jiffies);
- return;
- }
-
- if (atom_poll_link(ndev))
- ntb_link_event(&ndev->ntb);
-
- if (atom_link_is_up(ndev) || !atom_link_is_err(ndev)) {
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
- return;
- }
-
- /* Link is down with error: recover the link! */
-
- mmio = ndev->self_mmio;
-
- /* Driver resets the NTB ModPhy lanes - magic! */
- iowrite8(0xe0, mmio + ATOM_MODPHY_PCSREG6);
- iowrite8(0x40, mmio + ATOM_MODPHY_PCSREG4);
- iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG4);
- iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG6);
-
- /* Driver waits 100ms to allow the NTB ModPhy to settle */
- msleep(100);
-
- /* Clear AER Errors, write to clear */
- status32 = ioread32(mmio + ATOM_ERRCORSTS_OFFSET);
- dev_dbg(dev, "ERRCORSTS = %x\n", status32);
- status32 &= PCI_ERR_COR_REP_ROLL;
- iowrite32(status32, mmio + ATOM_ERRCORSTS_OFFSET);
-
- /* Clear unexpected electrical idle event in LTSSM, write to clear */
- status32 = ioread32(mmio + ATOM_LTSSMERRSTS0_OFFSET);
- dev_dbg(dev, "LTSSMERRSTS0 = %x\n", status32);
- status32 |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
- iowrite32(status32, mmio + ATOM_LTSSMERRSTS0_OFFSET);
-
- /* Clear DeSkew Buffer error, write to clear */
- status32 = ioread32(mmio + ATOM_DESKEWSTS_OFFSET);
- dev_dbg(dev, "DESKEWSTS = %x\n", status32);
- status32 |= ATOM_DESKEWSTS_DBERR;
- iowrite32(status32, mmio + ATOM_DESKEWSTS_OFFSET);
-
- status32 = ioread32(mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
- dev_dbg(dev, "IBSTERRRCRVSTS0 = %x\n", status32);
- status32 &= ATOM_IBIST_ERR_OFLOW;
- iowrite32(status32, mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
-
- /* Releases the NTB state machine to allow the link to retrain */
- status32 = ioread32(mmio + ATOM_LTSSMSTATEJMP_OFFSET);
- dev_dbg(dev, "LTSSMSTATEJMP = %x\n", status32);
- status32 &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
- iowrite32(status32, mmio + ATOM_LTSSMSTATEJMP_OFFSET);
-
- /* There is a potential race between the 2 NTB devices recovering at the
- * same time. If the times are the same, the link will not recover and
- * the driver will be stuck in this loop forever. Add a random interval
- * to the recovery time to prevent this race.
- */
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_RECOVERY_TIME
- + prandom_u32() % ATOM_LINK_RECOVERY_TIME);
-}
-
-static int atom_init_isr(struct intel_ntb_dev *ndev)
-{
- int rc;
-
- rc = ndev_init_isr(ndev, 1, ATOM_DB_MSIX_VECTOR_COUNT,
- ATOM_DB_MSIX_VECTOR_SHIFT, ATOM_DB_TOTAL_SHIFT);
- if (rc)
- return rc;
-
- /* ATOM doesn't have link status interrupt, poll on that platform */
- ndev->last_ts = jiffies;
- INIT_DELAYED_WORK(&ndev->hb_timer, atom_link_hb);
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
-
- return 0;
-}
-
-static void atom_deinit_isr(struct intel_ntb_dev *ndev)
-{
- cancel_delayed_work_sync(&ndev->hb_timer);
- ndev_deinit_isr(ndev);
-}
-
-static int atom_init_ntb(struct intel_ntb_dev *ndev)
-{
- ndev->mw_count = ATOM_MW_COUNT;
- ndev->spad_count = ATOM_SPAD_COUNT;
- ndev->db_count = ATOM_DB_COUNT;
-
- switch (ndev->ntb.topo) {
- case NTB_TOPO_B2B_USD:
- case NTB_TOPO_B2B_DSD:
- ndev->self_reg = &atom_pri_reg;
- ndev->peer_reg = &atom_b2b_reg;
- ndev->xlat_reg = &atom_sec_xlat;
-
- /* Enable Bus Master and Memory Space on the secondary side */
- iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
- ndev->self_mmio + ATOM_SPCICMD_OFFSET);
-
- break;
-
- default:
- return -EINVAL;
- }
-
- ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
-
- return 0;
-}
-
-static int atom_init_dev(struct intel_ntb_dev *ndev)
-{
- u32 ppd;
- int rc;
-
- rc = pci_read_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET, &ppd);
- if (rc)
- return -EIO;
-
- ndev->ntb.topo = atom_ppd_topo(ndev, ppd);
- if (ndev->ntb.topo == NTB_TOPO_NONE)
- return -EINVAL;
-
- rc = atom_init_ntb(ndev);
- if (rc)
- return rc;
-
- rc = atom_init_isr(ndev);
- if (rc)
- return rc;
-
- if (ndev->ntb.topo != NTB_TOPO_SEC) {
- /* Initiate PCI-E link training */
- rc = pci_write_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET,
- ppd | ATOM_PPD_INIT_LINK);
- if (rc)
- return rc;
- }
-
- return 0;
-}
-
-static void atom_deinit_dev(struct intel_ntb_dev *ndev)
-{
- atom_deinit_isr(ndev);
-}
-
/* Skylake Xeon NTB */
static int skx_poll_link(struct intel_ntb_dev *ndev)
@@ -2738,24 +2486,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
node = dev_to_node(&pdev->dev);
- if (pdev_is_atom(pdev)) {
- ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
- if (!ndev) {
- rc = -ENOMEM;
- goto err_ndev;
- }
-
- ndev_init_struct(ndev, pdev);
-
- rc = intel_ntb_init_pci(ndev, pdev);
- if (rc)
- goto err_init_pci;
-
- rc = atom_init_dev(ndev);
- if (rc)
- goto err_init_dev;
-
- } else if (pdev_is_xeon(pdev)) {
+ if (pdev_is_xeon(pdev)) {
ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
if (!ndev) {
rc = -ENOMEM;
@@ -2811,9 +2542,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
err_register:
ndev_deinit_debugfs(ndev);
- if (pdev_is_atom(pdev))
- atom_deinit_dev(ndev);
- else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
+ if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
xeon_deinit_dev(ndev);
err_init_dev:
intel_ntb_deinit_pci(ndev);
@@ -2829,41 +2558,12 @@ static void intel_ntb_pci_remove(struct pci_dev *pdev)
ntb_unregister_device(&ndev->ntb);
ndev_deinit_debugfs(ndev);
- if (pdev_is_atom(pdev))
- atom_deinit_dev(ndev);
- else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
+ if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
xeon_deinit_dev(ndev);
intel_ntb_deinit_pci(ndev);
kfree(ndev);
}
-static const struct intel_ntb_reg atom_reg = {
- .poll_link = atom_poll_link,
- .link_is_up = atom_link_is_up,
- .db_ioread = atom_db_ioread,
- .db_iowrite = atom_db_iowrite,
- .db_size = sizeof(u64),
- .ntb_ctl = ATOM_NTBCNTL_OFFSET,
- .mw_bar = {2, 4},
-};
-
-static const struct intel_ntb_alt_reg atom_pri_reg = {
- .db_bell = ATOM_PDOORBELL_OFFSET,
- .db_mask = ATOM_PDBMSK_OFFSET,
- .spad = ATOM_SPAD_OFFSET,
-};
-
-static const struct intel_ntb_alt_reg atom_b2b_reg = {
- .db_bell = ATOM_B2B_DOORBELL_OFFSET,
- .spad = ATOM_B2B_SPAD_OFFSET,
-};
-
-static const struct intel_ntb_xlat_reg atom_sec_xlat = {
- /* FIXME : .bar0_base = ATOM_SBAR0BASE_OFFSET, */
- /* FIXME : .bar2_limit = ATOM_SBAR2LMT_OFFSET, */
- .bar2_xlat = ATOM_SBAR2XLAT_OFFSET,
-};
-
static const struct intel_ntb_reg xeon_reg = {
.poll_link = xeon_poll_link,
.link_is_up = xeon_link_is_up,
@@ -3020,7 +2720,6 @@ static const struct file_operations intel_ntb_debugfs_info = {
};
static const struct pci_device_id intel_ntb_pci_tbl[] = {
- {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BWD)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.h b/drivers/ntb/hw/intel/ntb_hw_intel.h
index a8b17f3..9d2c6b6 100644
--- a/drivers/ntb/hw/intel/ntb_hw_intel.h
+++ b/drivers/ntb/hw/intel/ntb_hw_intel.h
@@ -66,7 +66,6 @@
#define PCI_DEVICE_ID_INTEL_NTB_B2B_HSX 0x2F0D
#define PCI_DEVICE_ID_INTEL_NTB_PS_HSX 0x2F0E
#define PCI_DEVICE_ID_INTEL_NTB_SS_HSX 0x2F0F
-#define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD 0x0C4E
#define PCI_DEVICE_ID_INTEL_NTB_B2B_BDX 0x6F0D
#define PCI_DEVICE_ID_INTEL_NTB_PS_BDX 0x6F0E
#define PCI_DEVICE_ID_INTEL_NTB_SS_BDX 0x6F0F
@@ -197,63 +196,6 @@
#define SKX_DB_TOTAL_SHIFT 33
#define SKX_SPAD_COUNT 16
-/* Intel Atom hardware */
-
-#define ATOM_SBAR2XLAT_OFFSET 0x0008
-#define ATOM_PDOORBELL_OFFSET 0x0020
-#define ATOM_PDBMSK_OFFSET 0x0028
-#define ATOM_NTBCNTL_OFFSET 0x0060
-#define ATOM_SPAD_OFFSET 0x0080
-#define ATOM_PPD_OFFSET 0x00d4
-#define ATOM_PBAR2XLAT_OFFSET 0x8008
-#define ATOM_B2B_DOORBELL_OFFSET 0x8020
-#define ATOM_B2B_SPAD_OFFSET 0x8080
-#define ATOM_SPCICMD_OFFSET 0xb004
-#define ATOM_LINK_STATUS_OFFSET 0xb052
-#define ATOM_ERRCORSTS_OFFSET 0xb110
-#define ATOM_IP_BASE 0xc000
-#define ATOM_DESKEWSTS_OFFSET (ATOM_IP_BASE + 0x3024)
-#define ATOM_LTSSMERRSTS0_OFFSET (ATOM_IP_BASE + 0x3180)
-#define ATOM_LTSSMSTATEJMP_OFFSET (ATOM_IP_BASE + 0x3040)
-#define ATOM_IBSTERRRCRVSTS0_OFFSET (ATOM_IP_BASE + 0x3324)
-#define ATOM_MODPHY_PCSREG4 0x1c004
-#define ATOM_MODPHY_PCSREG6 0x1c006
-
-#define ATOM_PPD_INIT_LINK 0x0008
-#define ATOM_PPD_CONN_MASK 0x0300
-#define ATOM_PPD_CONN_TRANSPARENT 0x0000
-#define ATOM_PPD_CONN_B2B 0x0100
-#define ATOM_PPD_CONN_RP 0x0200
-#define ATOM_PPD_DEV_MASK 0x1000
-#define ATOM_PPD_DEV_USD 0x0000
-#define ATOM_PPD_DEV_DSD 0x1000
-#define ATOM_PPD_TOPO_MASK (ATOM_PPD_CONN_MASK | ATOM_PPD_DEV_MASK)
-#define ATOM_PPD_TOPO_PRI_USD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_PRI_DSD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_DSD)
-#define ATOM_PPD_TOPO_SEC_USD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_SEC_DSD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_DSD)
-#define ATOM_PPD_TOPO_B2B_USD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_B2B_DSD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_DSD)
-
-#define ATOM_MW_COUNT 2
-#define ATOM_DB_COUNT 34
-#define ATOM_DB_VALID_MASK (BIT_ULL(ATOM_DB_COUNT) - 1)
-#define ATOM_DB_MSIX_VECTOR_COUNT 34
-#define ATOM_DB_MSIX_VECTOR_SHIFT 1
-#define ATOM_DB_TOTAL_SHIFT 34
-#define ATOM_SPAD_COUNT 16
-
-#define ATOM_NTB_CTL_DOWN_BIT BIT(16)
-#define ATOM_NTB_CTL_ACTIVE(x) !(x & ATOM_NTB_CTL_DOWN_BIT)
-
-#define ATOM_DESKEWSTS_DBERR BIT(15)
-#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI BIT(20)
-#define ATOM_LTSSMSTATEJMP_FORCEDETECT BIT(2)
-#define ATOM_IBIST_ERR_OFLOW 0x7FFF7FFF
-
-#define ATOM_LINK_HB_TIMEOUT msecs_to_jiffies(1000)
-#define ATOM_LINK_RECOVERY_TIME msecs_to_jiffies(500)
-
/* Ntb control and link status */
#define NTB_CTL_CFG_LOCK BIT(0)
^ permalink raw reply related [flat|nested] 6+ messages in thread
* RE: [PATCH] ntb: remove Intel Atom NTB driver support
2017-11-10 23:23 [PATCH] ntb: remove Intel Atom NTB driver support Dave Jiang
@ 2017-11-13 14:06 ` Allen Hubbe
2017-11-19 1:55 ` Jon Mason
0 siblings, 1 reply; 6+ messages in thread
From: Allen Hubbe @ 2017-11-13 14:06 UTC (permalink / raw)
To: 'Dave Jiang', jdmason; +Cc: linux-ntb
From: Dave Jiang
> Removing dead code since this is not being used.
>
> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Acked-by: Allen Hubbe <Allen.Hubbe@dell.com>
> ---
> drivers/ntb/hw/intel/ntb_hw_intel.c | 309 -----------------------------------
> drivers/ntb/hw/intel/ntb_hw_intel.h | 58 -------
> 2 files changed, 4 insertions(+), 363 deletions(-)
>
> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c b/drivers/ntb/hw/intel/ntb_hw_intel.c
> index c1d2f85..94c0737 100644
> --- a/drivers/ntb/hw/intel/ntb_hw_intel.c
> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
> @@ -74,12 +74,6 @@ MODULE_AUTHOR("Intel Corporation");
> #define bar0_off(base, bar) ((base) + ((bar) << 2))
> #define bar2_off(base, bar) bar0_off(base, (bar) - 2)
>
> -static const struct intel_ntb_reg atom_reg;
> -static const struct intel_ntb_alt_reg atom_pri_reg;
> -static const struct intel_ntb_alt_reg atom_sec_reg;
> -static const struct intel_ntb_alt_reg atom_b2b_reg;
> -static const struct intel_ntb_xlat_reg atom_pri_xlat;
> -static const struct intel_ntb_xlat_reg atom_sec_xlat;
> static const struct intel_ntb_reg xeon_reg;
> static const struct intel_ntb_alt_reg xeon_pri_reg;
> static const struct intel_ntb_alt_reg xeon_sec_reg;
> @@ -184,15 +178,6 @@ static inline void _iowrite64(u64 val, void __iomem *mmio)
> #endif
> #endif
>
> -static inline int pdev_is_atom(struct pci_dev *pdev)
> -{
> - switch (pdev->device) {
> - case PCI_DEVICE_ID_INTEL_NTB_B2B_BWD:
> - return 1;
> - }
> - return 0;
> -}
> -
> static inline int pdev_is_xeon(struct pci_dev *pdev)
> {
> switch (pdev->device) {
> @@ -1015,8 +1000,7 @@ static ssize_t ndev_debugfs_read(struct file *filp, char __user *ubuf,
> {
> struct intel_ntb_dev *ndev = filp->private_data;
>
> - if (pdev_is_xeon(ndev->ntb.pdev) ||
> - pdev_is_atom(ndev->ntb.pdev))
> + if (pdev_is_xeon(ndev->ntb.pdev))
> return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
> else if (pdev_is_xeon_ntb3(ndev->ntb.pdev))
> return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
> @@ -1448,242 +1432,6 @@ static int intel_ntb_peer_spad_write(struct ntb_dev *ntb, int pidx,
> ndev->peer_reg->spad);
> }
>
> -/* ATOM */
> -
> -static u64 atom_db_ioread(void __iomem *mmio)
> -{
> - return ioread64(mmio);
> -}
> -
> -static void atom_db_iowrite(u64 bits, void __iomem *mmio)
> -{
> - iowrite64(bits, mmio);
> -}
> -
> -static int atom_poll_link(struct intel_ntb_dev *ndev)
> -{
> - u32 ntb_ctl;
> -
> - ntb_ctl = ioread32(ndev->self_mmio + ATOM_NTBCNTL_OFFSET);
> -
> - if (ntb_ctl == ndev->ntb_ctl)
> - return 0;
> -
> - ndev->ntb_ctl = ntb_ctl;
> -
> - ndev->lnk_sta = ioread32(ndev->self_mmio + ATOM_LINK_STATUS_OFFSET);
> -
> - return 1;
> -}
> -
> -static int atom_link_is_up(struct intel_ntb_dev *ndev)
> -{
> - return ATOM_NTB_CTL_ACTIVE(ndev->ntb_ctl);
> -}
> -
> -static int atom_link_is_err(struct intel_ntb_dev *ndev)
> -{
> - if (ioread32(ndev->self_mmio + ATOM_LTSSMSTATEJMP_OFFSET)
> - & ATOM_LTSSMSTATEJMP_FORCEDETECT)
> - return 1;
> -
> - if (ioread32(ndev->self_mmio + ATOM_IBSTERRRCRVSTS0_OFFSET)
> - & ATOM_IBIST_ERR_OFLOW)
> - return 1;
> -
> - return 0;
> -}
> -
> -static inline enum ntb_topo atom_ppd_topo(struct intel_ntb_dev *ndev, u32 ppd)
> -{
> - struct device *dev = &ndev->ntb.pdev->dev;
> -
> - switch (ppd & ATOM_PPD_TOPO_MASK) {
> - case ATOM_PPD_TOPO_B2B_USD:
> - dev_dbg(dev, "PPD %d B2B USD\n", ppd);
> - return NTB_TOPO_B2B_USD;
> -
> - case ATOM_PPD_TOPO_B2B_DSD:
> - dev_dbg(dev, "PPD %d B2B DSD\n", ppd);
> - return NTB_TOPO_B2B_DSD;
> -
> - case ATOM_PPD_TOPO_PRI_USD:
> - case ATOM_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
> - case ATOM_PPD_TOPO_SEC_USD:
> - case ATOM_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
> - dev_dbg(dev, "PPD %d non B2B disabled\n", ppd);
> - return NTB_TOPO_NONE;
> - }
> -
> - dev_dbg(dev, "PPD %d invalid\n", ppd);
> - return NTB_TOPO_NONE;
> -}
> -
> -static void atom_link_hb(struct work_struct *work)
> -{
> - struct intel_ntb_dev *ndev = hb_ndev(work);
> - struct device *dev = &ndev->ntb.pdev->dev;
> - unsigned long poll_ts;
> - void __iomem *mmio;
> - u32 status32;
> -
> - poll_ts = ndev->last_ts + ATOM_LINK_HB_TIMEOUT;
> -
> - /* Delay polling the link status if an interrupt was received,
> - * unless the cached link status says the link is down.
> - */
> - if (time_after(poll_ts, jiffies) && atom_link_is_up(ndev)) {
> - schedule_delayed_work(&ndev->hb_timer, poll_ts - jiffies);
> - return;
> - }
> -
> - if (atom_poll_link(ndev))
> - ntb_link_event(&ndev->ntb);
> -
> - if (atom_link_is_up(ndev) || !atom_link_is_err(ndev)) {
> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
> - return;
> - }
> -
> - /* Link is down with error: recover the link! */
> -
> - mmio = ndev->self_mmio;
> -
> - /* Driver resets the NTB ModPhy lanes - magic! */
> - iowrite8(0xe0, mmio + ATOM_MODPHY_PCSREG6);
> - iowrite8(0x40, mmio + ATOM_MODPHY_PCSREG4);
> - iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG4);
> - iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG6);
> -
> - /* Driver waits 100ms to allow the NTB ModPhy to settle */
> - msleep(100);
> -
> - /* Clear AER Errors, write to clear */
> - status32 = ioread32(mmio + ATOM_ERRCORSTS_OFFSET);
> - dev_dbg(dev, "ERRCORSTS = %x\n", status32);
> - status32 &= PCI_ERR_COR_REP_ROLL;
> - iowrite32(status32, mmio + ATOM_ERRCORSTS_OFFSET);
> -
> - /* Clear unexpected electrical idle event in LTSSM, write to clear */
> - status32 = ioread32(mmio + ATOM_LTSSMERRSTS0_OFFSET);
> - dev_dbg(dev, "LTSSMERRSTS0 = %x\n", status32);
> - status32 |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
> - iowrite32(status32, mmio + ATOM_LTSSMERRSTS0_OFFSET);
> -
> - /* Clear DeSkew Buffer error, write to clear */
> - status32 = ioread32(mmio + ATOM_DESKEWSTS_OFFSET);
> - dev_dbg(dev, "DESKEWSTS = %x\n", status32);
> - status32 |= ATOM_DESKEWSTS_DBERR;
> - iowrite32(status32, mmio + ATOM_DESKEWSTS_OFFSET);
> -
> - status32 = ioread32(mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
> - dev_dbg(dev, "IBSTERRRCRVSTS0 = %x\n", status32);
> - status32 &= ATOM_IBIST_ERR_OFLOW;
> - iowrite32(status32, mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
> -
> - /* Releases the NTB state machine to allow the link to retrain */
> - status32 = ioread32(mmio + ATOM_LTSSMSTATEJMP_OFFSET);
> - dev_dbg(dev, "LTSSMSTATEJMP = %x\n", status32);
> - status32 &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
> - iowrite32(status32, mmio + ATOM_LTSSMSTATEJMP_OFFSET);
> -
> - /* There is a potential race between the 2 NTB devices recovering at the
> - * same time. If the times are the same, the link will not recover and
> - * the driver will be stuck in this loop forever. Add a random interval
> - * to the recovery time to prevent this race.
> - */
> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_RECOVERY_TIME
> - + prandom_u32() % ATOM_LINK_RECOVERY_TIME);
> -}
> -
> -static int atom_init_isr(struct intel_ntb_dev *ndev)
> -{
> - int rc;
> -
> - rc = ndev_init_isr(ndev, 1, ATOM_DB_MSIX_VECTOR_COUNT,
> - ATOM_DB_MSIX_VECTOR_SHIFT, ATOM_DB_TOTAL_SHIFT);
> - if (rc)
> - return rc;
> -
> - /* ATOM doesn't have link status interrupt, poll on that platform */
> - ndev->last_ts = jiffies;
> - INIT_DELAYED_WORK(&ndev->hb_timer, atom_link_hb);
> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
> -
> - return 0;
> -}
> -
> -static void atom_deinit_isr(struct intel_ntb_dev *ndev)
> -{
> - cancel_delayed_work_sync(&ndev->hb_timer);
> - ndev_deinit_isr(ndev);
> -}
> -
> -static int atom_init_ntb(struct intel_ntb_dev *ndev)
> -{
> - ndev->mw_count = ATOM_MW_COUNT;
> - ndev->spad_count = ATOM_SPAD_COUNT;
> - ndev->db_count = ATOM_DB_COUNT;
> -
> - switch (ndev->ntb.topo) {
> - case NTB_TOPO_B2B_USD:
> - case NTB_TOPO_B2B_DSD:
> - ndev->self_reg = &atom_pri_reg;
> - ndev->peer_reg = &atom_b2b_reg;
> - ndev->xlat_reg = &atom_sec_xlat;
> -
> - /* Enable Bus Master and Memory Space on the secondary side */
> - iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
> - ndev->self_mmio + ATOM_SPCICMD_OFFSET);
> -
> - break;
> -
> - default:
> - return -EINVAL;
> - }
> -
> - ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
> -
> - return 0;
> -}
> -
> -static int atom_init_dev(struct intel_ntb_dev *ndev)
> -{
> - u32 ppd;
> - int rc;
> -
> - rc = pci_read_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET, &ppd);
> - if (rc)
> - return -EIO;
> -
> - ndev->ntb.topo = atom_ppd_topo(ndev, ppd);
> - if (ndev->ntb.topo == NTB_TOPO_NONE)
> - return -EINVAL;
> -
> - rc = atom_init_ntb(ndev);
> - if (rc)
> - return rc;
> -
> - rc = atom_init_isr(ndev);
> - if (rc)
> - return rc;
> -
> - if (ndev->ntb.topo != NTB_TOPO_SEC) {
> - /* Initiate PCI-E link training */
> - rc = pci_write_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET,
> - ppd | ATOM_PPD_INIT_LINK);
> - if (rc)
> - return rc;
> - }
> -
> - return 0;
> -}
> -
> -static void atom_deinit_dev(struct intel_ntb_dev *ndev)
> -{
> - atom_deinit_isr(ndev);
> -}
> -
> /* Skylake Xeon NTB */
>
> static int skx_poll_link(struct intel_ntb_dev *ndev)
> @@ -2738,24 +2486,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
>
> node = dev_to_node(&pdev->dev);
>
> - if (pdev_is_atom(pdev)) {
> - ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
> - if (!ndev) {
> - rc = -ENOMEM;
> - goto err_ndev;
> - }
> -
> - ndev_init_struct(ndev, pdev);
> -
> - rc = intel_ntb_init_pci(ndev, pdev);
> - if (rc)
> - goto err_init_pci;
> -
> - rc = atom_init_dev(ndev);
> - if (rc)
> - goto err_init_dev;
> -
> - } else if (pdev_is_xeon(pdev)) {
> + if (pdev_is_xeon(pdev)) {
> ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
> if (!ndev) {
> rc = -ENOMEM;
> @@ -2811,9 +2542,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
>
> err_register:
> ndev_deinit_debugfs(ndev);
> - if (pdev_is_atom(pdev))
> - atom_deinit_dev(ndev);
> - else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
> + if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
> xeon_deinit_dev(ndev);
> err_init_dev:
> intel_ntb_deinit_pci(ndev);
> @@ -2829,41 +2558,12 @@ static void intel_ntb_pci_remove(struct pci_dev *pdev)
>
> ntb_unregister_device(&ndev->ntb);
> ndev_deinit_debugfs(ndev);
> - if (pdev_is_atom(pdev))
> - atom_deinit_dev(ndev);
> - else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
> + if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
> xeon_deinit_dev(ndev);
> intel_ntb_deinit_pci(ndev);
> kfree(ndev);
> }
>
> -static const struct intel_ntb_reg atom_reg = {
> - .poll_link = atom_poll_link,
> - .link_is_up = atom_link_is_up,
> - .db_ioread = atom_db_ioread,
> - .db_iowrite = atom_db_iowrite,
> - .db_size = sizeof(u64),
> - .ntb_ctl = ATOM_NTBCNTL_OFFSET,
> - .mw_bar = {2, 4},
> -};
> -
> -static const struct intel_ntb_alt_reg atom_pri_reg = {
> - .db_bell = ATOM_PDOORBELL_OFFSET,
> - .db_mask = ATOM_PDBMSK_OFFSET,
> - .spad = ATOM_SPAD_OFFSET,
> -};
> -
> -static const struct intel_ntb_alt_reg atom_b2b_reg = {
> - .db_bell = ATOM_B2B_DOORBELL_OFFSET,
> - .spad = ATOM_B2B_SPAD_OFFSET,
> -};
> -
> -static const struct intel_ntb_xlat_reg atom_sec_xlat = {
> - /* FIXME : .bar0_base = ATOM_SBAR0BASE_OFFSET, */
> - /* FIXME : .bar2_limit = ATOM_SBAR2LMT_OFFSET, */
> - .bar2_xlat = ATOM_SBAR2XLAT_OFFSET,
> -};
> -
> static const struct intel_ntb_reg xeon_reg = {
> .poll_link = xeon_poll_link,
> .link_is_up = xeon_link_is_up,
> @@ -3020,7 +2720,6 @@ static const struct file_operations intel_ntb_debugfs_info = {
> };
>
> static const struct pci_device_id intel_ntb_pci_tbl[] = {
> - {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BWD)},
> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.h b/drivers/ntb/hw/intel/ntb_hw_intel.h
> index a8b17f3..9d2c6b6 100644
> --- a/drivers/ntb/hw/intel/ntb_hw_intel.h
> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.h
> @@ -66,7 +66,6 @@
> #define PCI_DEVICE_ID_INTEL_NTB_B2B_HSX 0x2F0D
> #define PCI_DEVICE_ID_INTEL_NTB_PS_HSX 0x2F0E
> #define PCI_DEVICE_ID_INTEL_NTB_SS_HSX 0x2F0F
> -#define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD 0x0C4E
> #define PCI_DEVICE_ID_INTEL_NTB_B2B_BDX 0x6F0D
> #define PCI_DEVICE_ID_INTEL_NTB_PS_BDX 0x6F0E
> #define PCI_DEVICE_ID_INTEL_NTB_SS_BDX 0x6F0F
> @@ -197,63 +196,6 @@
> #define SKX_DB_TOTAL_SHIFT 33
> #define SKX_SPAD_COUNT 16
>
> -/* Intel Atom hardware */
> -
> -#define ATOM_SBAR2XLAT_OFFSET 0x0008
> -#define ATOM_PDOORBELL_OFFSET 0x0020
> -#define ATOM_PDBMSK_OFFSET 0x0028
> -#define ATOM_NTBCNTL_OFFSET 0x0060
> -#define ATOM_SPAD_OFFSET 0x0080
> -#define ATOM_PPD_OFFSET 0x00d4
> -#define ATOM_PBAR2XLAT_OFFSET 0x8008
> -#define ATOM_B2B_DOORBELL_OFFSET 0x8020
> -#define ATOM_B2B_SPAD_OFFSET 0x8080
> -#define ATOM_SPCICMD_OFFSET 0xb004
> -#define ATOM_LINK_STATUS_OFFSET 0xb052
> -#define ATOM_ERRCORSTS_OFFSET 0xb110
> -#define ATOM_IP_BASE 0xc000
> -#define ATOM_DESKEWSTS_OFFSET (ATOM_IP_BASE + 0x3024)
> -#define ATOM_LTSSMERRSTS0_OFFSET (ATOM_IP_BASE + 0x3180)
> -#define ATOM_LTSSMSTATEJMP_OFFSET (ATOM_IP_BASE + 0x3040)
> -#define ATOM_IBSTERRRCRVSTS0_OFFSET (ATOM_IP_BASE + 0x3324)
> -#define ATOM_MODPHY_PCSREG4 0x1c004
> -#define ATOM_MODPHY_PCSREG6 0x1c006
> -
> -#define ATOM_PPD_INIT_LINK 0x0008
> -#define ATOM_PPD_CONN_MASK 0x0300
> -#define ATOM_PPD_CONN_TRANSPARENT 0x0000
> -#define ATOM_PPD_CONN_B2B 0x0100
> -#define ATOM_PPD_CONN_RP 0x0200
> -#define ATOM_PPD_DEV_MASK 0x1000
> -#define ATOM_PPD_DEV_USD 0x0000
> -#define ATOM_PPD_DEV_DSD 0x1000
> -#define ATOM_PPD_TOPO_MASK (ATOM_PPD_CONN_MASK | ATOM_PPD_DEV_MASK)
> -#define ATOM_PPD_TOPO_PRI_USD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_USD)
> -#define ATOM_PPD_TOPO_PRI_DSD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_DSD)
> -#define ATOM_PPD_TOPO_SEC_USD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_USD)
> -#define ATOM_PPD_TOPO_SEC_DSD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_DSD)
> -#define ATOM_PPD_TOPO_B2B_USD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_USD)
> -#define ATOM_PPD_TOPO_B2B_DSD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_DSD)
> -
> -#define ATOM_MW_COUNT 2
> -#define ATOM_DB_COUNT 34
> -#define ATOM_DB_VALID_MASK (BIT_ULL(ATOM_DB_COUNT) - 1)
> -#define ATOM_DB_MSIX_VECTOR_COUNT 34
> -#define ATOM_DB_MSIX_VECTOR_SHIFT 1
> -#define ATOM_DB_TOTAL_SHIFT 34
> -#define ATOM_SPAD_COUNT 16
> -
> -#define ATOM_NTB_CTL_DOWN_BIT BIT(16)
> -#define ATOM_NTB_CTL_ACTIVE(x) !(x & ATOM_NTB_CTL_DOWN_BIT)
> -
> -#define ATOM_DESKEWSTS_DBERR BIT(15)
> -#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI BIT(20)
> -#define ATOM_LTSSMSTATEJMP_FORCEDETECT BIT(2)
> -#define ATOM_IBIST_ERR_OFLOW 0x7FFF7FFF
> -
> -#define ATOM_LINK_HB_TIMEOUT msecs_to_jiffies(1000)
> -#define ATOM_LINK_RECOVERY_TIME msecs_to_jiffies(500)
> -
> /* Ntb control and link status */
>
> #define NTB_CTL_CFG_LOCK BIT(0)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] ntb: remove Intel Atom NTB driver support
2017-11-13 14:06 ` Allen Hubbe
@ 2017-11-19 1:55 ` Jon Mason
2017-11-19 2:02 ` Jiang, Dave
0 siblings, 1 reply; 6+ messages in thread
From: Jon Mason @ 2017-11-19 1:55 UTC (permalink / raw)
To: Allen Hubbe; +Cc: Dave Jiang, linux-ntb
This patch didn't apply. Can you rebase and resend?
Thanks,
Jon
On Mon, Nov 13, 2017 at 9:06 AM, Allen Hubbe <Allen.Hubbe@dell.com> wrote:
> From: Dave Jiang
>> Removing dead code since this is not being used.
>>
>> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
>
> Acked-by: Allen Hubbe <Allen.Hubbe@dell.com>
>
>> ---
>> drivers/ntb/hw/intel/ntb_hw_intel.c | 309 -----------------------------------
>> drivers/ntb/hw/intel/ntb_hw_intel.h | 58 -------
>> 2 files changed, 4 insertions(+), 363 deletions(-)
>>
>> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c b/drivers/ntb/hw/intel/ntb_hw_intel.c
>> index c1d2f85..94c0737 100644
>> --- a/drivers/ntb/hw/intel/ntb_hw_intel.c
>> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
>> @@ -74,12 +74,6 @@ MODULE_AUTHOR("Intel Corporation");
>> #define bar0_off(base, bar) ((base) + ((bar) << 2))
>> #define bar2_off(base, bar) bar0_off(base, (bar) - 2)
>>
>> -static const struct intel_ntb_reg atom_reg;
>> -static const struct intel_ntb_alt_reg atom_pri_reg;
>> -static const struct intel_ntb_alt_reg atom_sec_reg;
>> -static const struct intel_ntb_alt_reg atom_b2b_reg;
>> -static const struct intel_ntb_xlat_reg atom_pri_xlat;
>> -static const struct intel_ntb_xlat_reg atom_sec_xlat;
>> static const struct intel_ntb_reg xeon_reg;
>> static const struct intel_ntb_alt_reg xeon_pri_reg;
>> static const struct intel_ntb_alt_reg xeon_sec_reg;
>> @@ -184,15 +178,6 @@ static inline void _iowrite64(u64 val, void __iomem *mmio)
>> #endif
>> #endif
>>
>> -static inline int pdev_is_atom(struct pci_dev *pdev)
>> -{
>> - switch (pdev->device) {
>> - case PCI_DEVICE_ID_INTEL_NTB_B2B_BWD:
>> - return 1;
>> - }
>> - return 0;
>> -}
>> -
>> static inline int pdev_is_xeon(struct pci_dev *pdev)
>> {
>> switch (pdev->device) {
>> @@ -1015,8 +1000,7 @@ static ssize_t ndev_debugfs_read(struct file *filp, char __user *ubuf,
>> {
>> struct intel_ntb_dev *ndev = filp->private_data;
>>
>> - if (pdev_is_xeon(ndev->ntb.pdev) ||
>> - pdev_is_atom(ndev->ntb.pdev))
>> + if (pdev_is_xeon(ndev->ntb.pdev))
>> return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
>> else if (pdev_is_xeon_ntb3(ndev->ntb.pdev))
>> return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
>> @@ -1448,242 +1432,6 @@ static int intel_ntb_peer_spad_write(struct ntb_dev *ntb, int pidx,
>> ndev->peer_reg->spad);
>> }
>>
>> -/* ATOM */
>> -
>> -static u64 atom_db_ioread(void __iomem *mmio)
>> -{
>> - return ioread64(mmio);
>> -}
>> -
>> -static void atom_db_iowrite(u64 bits, void __iomem *mmio)
>> -{
>> - iowrite64(bits, mmio);
>> -}
>> -
>> -static int atom_poll_link(struct intel_ntb_dev *ndev)
>> -{
>> - u32 ntb_ctl;
>> -
>> - ntb_ctl = ioread32(ndev->self_mmio + ATOM_NTBCNTL_OFFSET);
>> -
>> - if (ntb_ctl == ndev->ntb_ctl)
>> - return 0;
>> -
>> - ndev->ntb_ctl = ntb_ctl;
>> -
>> - ndev->lnk_sta = ioread32(ndev->self_mmio + ATOM_LINK_STATUS_OFFSET);
>> -
>> - return 1;
>> -}
>> -
>> -static int atom_link_is_up(struct intel_ntb_dev *ndev)
>> -{
>> - return ATOM_NTB_CTL_ACTIVE(ndev->ntb_ctl);
>> -}
>> -
>> -static int atom_link_is_err(struct intel_ntb_dev *ndev)
>> -{
>> - if (ioread32(ndev->self_mmio + ATOM_LTSSMSTATEJMP_OFFSET)
>> - & ATOM_LTSSMSTATEJMP_FORCEDETECT)
>> - return 1;
>> -
>> - if (ioread32(ndev->self_mmio + ATOM_IBSTERRRCRVSTS0_OFFSET)
>> - & ATOM_IBIST_ERR_OFLOW)
>> - return 1;
>> -
>> - return 0;
>> -}
>> -
>> -static inline enum ntb_topo atom_ppd_topo(struct intel_ntb_dev *ndev, u32 ppd)
>> -{
>> - struct device *dev = &ndev->ntb.pdev->dev;
>> -
>> - switch (ppd & ATOM_PPD_TOPO_MASK) {
>> - case ATOM_PPD_TOPO_B2B_USD:
>> - dev_dbg(dev, "PPD %d B2B USD\n", ppd);
>> - return NTB_TOPO_B2B_USD;
>> -
>> - case ATOM_PPD_TOPO_B2B_DSD:
>> - dev_dbg(dev, "PPD %d B2B DSD\n", ppd);
>> - return NTB_TOPO_B2B_DSD;
>> -
>> - case ATOM_PPD_TOPO_PRI_USD:
>> - case ATOM_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
>> - case ATOM_PPD_TOPO_SEC_USD:
>> - case ATOM_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
>> - dev_dbg(dev, "PPD %d non B2B disabled\n", ppd);
>> - return NTB_TOPO_NONE;
>> - }
>> -
>> - dev_dbg(dev, "PPD %d invalid\n", ppd);
>> - return NTB_TOPO_NONE;
>> -}
>> -
>> -static void atom_link_hb(struct work_struct *work)
>> -{
>> - struct intel_ntb_dev *ndev = hb_ndev(work);
>> - struct device *dev = &ndev->ntb.pdev->dev;
>> - unsigned long poll_ts;
>> - void __iomem *mmio;
>> - u32 status32;
>> -
>> - poll_ts = ndev->last_ts + ATOM_LINK_HB_TIMEOUT;
>> -
>> - /* Delay polling the link status if an interrupt was received,
>> - * unless the cached link status says the link is down.
>> - */
>> - if (time_after(poll_ts, jiffies) && atom_link_is_up(ndev)) {
>> - schedule_delayed_work(&ndev->hb_timer, poll_ts - jiffies);
>> - return;
>> - }
>> -
>> - if (atom_poll_link(ndev))
>> - ntb_link_event(&ndev->ntb);
>> -
>> - if (atom_link_is_up(ndev) || !atom_link_is_err(ndev)) {
>> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
>> - return;
>> - }
>> -
>> - /* Link is down with error: recover the link! */
>> -
>> - mmio = ndev->self_mmio;
>> -
>> - /* Driver resets the NTB ModPhy lanes - magic! */
>> - iowrite8(0xe0, mmio + ATOM_MODPHY_PCSREG6);
>> - iowrite8(0x40, mmio + ATOM_MODPHY_PCSREG4);
>> - iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG4);
>> - iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG6);
>> -
>> - /* Driver waits 100ms to allow the NTB ModPhy to settle */
>> - msleep(100);
>> -
>> - /* Clear AER Errors, write to clear */
>> - status32 = ioread32(mmio + ATOM_ERRCORSTS_OFFSET);
>> - dev_dbg(dev, "ERRCORSTS = %x\n", status32);
>> - status32 &= PCI_ERR_COR_REP_ROLL;
>> - iowrite32(status32, mmio + ATOM_ERRCORSTS_OFFSET);
>> -
>> - /* Clear unexpected electrical idle event in LTSSM, write to clear */
>> - status32 = ioread32(mmio + ATOM_LTSSMERRSTS0_OFFSET);
>> - dev_dbg(dev, "LTSSMERRSTS0 = %x\n", status32);
>> - status32 |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
>> - iowrite32(status32, mmio + ATOM_LTSSMERRSTS0_OFFSET);
>> -
>> - /* Clear DeSkew Buffer error, write to clear */
>> - status32 = ioread32(mmio + ATOM_DESKEWSTS_OFFSET);
>> - dev_dbg(dev, "DESKEWSTS = %x\n", status32);
>> - status32 |= ATOM_DESKEWSTS_DBERR;
>> - iowrite32(status32, mmio + ATOM_DESKEWSTS_OFFSET);
>> -
>> - status32 = ioread32(mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
>> - dev_dbg(dev, "IBSTERRRCRVSTS0 = %x\n", status32);
>> - status32 &= ATOM_IBIST_ERR_OFLOW;
>> - iowrite32(status32, mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
>> -
>> - /* Releases the NTB state machine to allow the link to retrain */
>> - status32 = ioread32(mmio + ATOM_LTSSMSTATEJMP_OFFSET);
>> - dev_dbg(dev, "LTSSMSTATEJMP = %x\n", status32);
>> - status32 &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
>> - iowrite32(status32, mmio + ATOM_LTSSMSTATEJMP_OFFSET);
>> -
>> - /* There is a potential race between the 2 NTB devices recovering at the
>> - * same time. If the times are the same, the link will not recover and
>> - * the driver will be stuck in this loop forever. Add a random interval
>> - * to the recovery time to prevent this race.
>> - */
>> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_RECOVERY_TIME
>> - + prandom_u32() % ATOM_LINK_RECOVERY_TIME);
>> -}
>> -
>> -static int atom_init_isr(struct intel_ntb_dev *ndev)
>> -{
>> - int rc;
>> -
>> - rc = ndev_init_isr(ndev, 1, ATOM_DB_MSIX_VECTOR_COUNT,
>> - ATOM_DB_MSIX_VECTOR_SHIFT, ATOM_DB_TOTAL_SHIFT);
>> - if (rc)
>> - return rc;
>> -
>> - /* ATOM doesn't have link status interrupt, poll on that platform */
>> - ndev->last_ts = jiffies;
>> - INIT_DELAYED_WORK(&ndev->hb_timer, atom_link_hb);
>> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
>> -
>> - return 0;
>> -}
>> -
>> -static void atom_deinit_isr(struct intel_ntb_dev *ndev)
>> -{
>> - cancel_delayed_work_sync(&ndev->hb_timer);
>> - ndev_deinit_isr(ndev);
>> -}
>> -
>> -static int atom_init_ntb(struct intel_ntb_dev *ndev)
>> -{
>> - ndev->mw_count = ATOM_MW_COUNT;
>> - ndev->spad_count = ATOM_SPAD_COUNT;
>> - ndev->db_count = ATOM_DB_COUNT;
>> -
>> - switch (ndev->ntb.topo) {
>> - case NTB_TOPO_B2B_USD:
>> - case NTB_TOPO_B2B_DSD:
>> - ndev->self_reg = &atom_pri_reg;
>> - ndev->peer_reg = &atom_b2b_reg;
>> - ndev->xlat_reg = &atom_sec_xlat;
>> -
>> - /* Enable Bus Master and Memory Space on the secondary side */
>> - iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
>> - ndev->self_mmio + ATOM_SPCICMD_OFFSET);
>> -
>> - break;
>> -
>> - default:
>> - return -EINVAL;
>> - }
>> -
>> - ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
>> -
>> - return 0;
>> -}
>> -
>> -static int atom_init_dev(struct intel_ntb_dev *ndev)
>> -{
>> - u32 ppd;
>> - int rc;
>> -
>> - rc = pci_read_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET, &ppd);
>> - if (rc)
>> - return -EIO;
>> -
>> - ndev->ntb.topo = atom_ppd_topo(ndev, ppd);
>> - if (ndev->ntb.topo == NTB_TOPO_NONE)
>> - return -EINVAL;
>> -
>> - rc = atom_init_ntb(ndev);
>> - if (rc)
>> - return rc;
>> -
>> - rc = atom_init_isr(ndev);
>> - if (rc)
>> - return rc;
>> -
>> - if (ndev->ntb.topo != NTB_TOPO_SEC) {
>> - /* Initiate PCI-E link training */
>> - rc = pci_write_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET,
>> - ppd | ATOM_PPD_INIT_LINK);
>> - if (rc)
>> - return rc;
>> - }
>> -
>> - return 0;
>> -}
>> -
>> -static void atom_deinit_dev(struct intel_ntb_dev *ndev)
>> -{
>> - atom_deinit_isr(ndev);
>> -}
>> -
>> /* Skylake Xeon NTB */
>>
>> static int skx_poll_link(struct intel_ntb_dev *ndev)
>> @@ -2738,24 +2486,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
>>
>> node = dev_to_node(&pdev->dev);
>>
>> - if (pdev_is_atom(pdev)) {
>> - ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
>> - if (!ndev) {
>> - rc = -ENOMEM;
>> - goto err_ndev;
>> - }
>> -
>> - ndev_init_struct(ndev, pdev);
>> -
>> - rc = intel_ntb_init_pci(ndev, pdev);
>> - if (rc)
>> - goto err_init_pci;
>> -
>> - rc = atom_init_dev(ndev);
>> - if (rc)
>> - goto err_init_dev;
>> -
>> - } else if (pdev_is_xeon(pdev)) {
>> + if (pdev_is_xeon(pdev)) {
>> ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
>> if (!ndev) {
>> rc = -ENOMEM;
>> @@ -2811,9 +2542,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
>>
>> err_register:
>> ndev_deinit_debugfs(ndev);
>> - if (pdev_is_atom(pdev))
>> - atom_deinit_dev(ndev);
>> - else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>> + if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>> xeon_deinit_dev(ndev);
>> err_init_dev:
>> intel_ntb_deinit_pci(ndev);
>> @@ -2829,41 +2558,12 @@ static void intel_ntb_pci_remove(struct pci_dev *pdev)
>>
>> ntb_unregister_device(&ndev->ntb);
>> ndev_deinit_debugfs(ndev);
>> - if (pdev_is_atom(pdev))
>> - atom_deinit_dev(ndev);
>> - else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>> + if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>> xeon_deinit_dev(ndev);
>> intel_ntb_deinit_pci(ndev);
>> kfree(ndev);
>> }
>>
>> -static const struct intel_ntb_reg atom_reg = {
>> - .poll_link = atom_poll_link,
>> - .link_is_up = atom_link_is_up,
>> - .db_ioread = atom_db_ioread,
>> - .db_iowrite = atom_db_iowrite,
>> - .db_size = sizeof(u64),
>> - .ntb_ctl = ATOM_NTBCNTL_OFFSET,
>> - .mw_bar = {2, 4},
>> -};
>> -
>> -static const struct intel_ntb_alt_reg atom_pri_reg = {
>> - .db_bell = ATOM_PDOORBELL_OFFSET,
>> - .db_mask = ATOM_PDBMSK_OFFSET,
>> - .spad = ATOM_SPAD_OFFSET,
>> -};
>> -
>> -static const struct intel_ntb_alt_reg atom_b2b_reg = {
>> - .db_bell = ATOM_B2B_DOORBELL_OFFSET,
>> - .spad = ATOM_B2B_SPAD_OFFSET,
>> -};
>> -
>> -static const struct intel_ntb_xlat_reg atom_sec_xlat = {
>> - /* FIXME : .bar0_base = ATOM_SBAR0BASE_OFFSET, */
>> - /* FIXME : .bar2_limit = ATOM_SBAR2LMT_OFFSET, */
>> - .bar2_xlat = ATOM_SBAR2XLAT_OFFSET,
>> -};
>> -
>> static const struct intel_ntb_reg xeon_reg = {
>> .poll_link = xeon_poll_link,
>> .link_is_up = xeon_link_is_up,
>> @@ -3020,7 +2720,6 @@ static const struct file_operations intel_ntb_debugfs_info = {
>> };
>>
>> static const struct pci_device_id intel_ntb_pci_tbl[] = {
>> - {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BWD)},
>> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
>> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
>> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
>> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.h b/drivers/ntb/hw/intel/ntb_hw_intel.h
>> index a8b17f3..9d2c6b6 100644
>> --- a/drivers/ntb/hw/intel/ntb_hw_intel.h
>> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.h
>> @@ -66,7 +66,6 @@
>> #define PCI_DEVICE_ID_INTEL_NTB_B2B_HSX 0x2F0D
>> #define PCI_DEVICE_ID_INTEL_NTB_PS_HSX 0x2F0E
>> #define PCI_DEVICE_ID_INTEL_NTB_SS_HSX 0x2F0F
>> -#define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD 0x0C4E
>> #define PCI_DEVICE_ID_INTEL_NTB_B2B_BDX 0x6F0D
>> #define PCI_DEVICE_ID_INTEL_NTB_PS_BDX 0x6F0E
>> #define PCI_DEVICE_ID_INTEL_NTB_SS_BDX 0x6F0F
>> @@ -197,63 +196,6 @@
>> #define SKX_DB_TOTAL_SHIFT 33
>> #define SKX_SPAD_COUNT 16
>>
>> -/* Intel Atom hardware */
>> -
>> -#define ATOM_SBAR2XLAT_OFFSET 0x0008
>> -#define ATOM_PDOORBELL_OFFSET 0x0020
>> -#define ATOM_PDBMSK_OFFSET 0x0028
>> -#define ATOM_NTBCNTL_OFFSET 0x0060
>> -#define ATOM_SPAD_OFFSET 0x0080
>> -#define ATOM_PPD_OFFSET 0x00d4
>> -#define ATOM_PBAR2XLAT_OFFSET 0x8008
>> -#define ATOM_B2B_DOORBELL_OFFSET 0x8020
>> -#define ATOM_B2B_SPAD_OFFSET 0x8080
>> -#define ATOM_SPCICMD_OFFSET 0xb004
>> -#define ATOM_LINK_STATUS_OFFSET 0xb052
>> -#define ATOM_ERRCORSTS_OFFSET 0xb110
>> -#define ATOM_IP_BASE 0xc000
>> -#define ATOM_DESKEWSTS_OFFSET (ATOM_IP_BASE + 0x3024)
>> -#define ATOM_LTSSMERRSTS0_OFFSET (ATOM_IP_BASE + 0x3180)
>> -#define ATOM_LTSSMSTATEJMP_OFFSET (ATOM_IP_BASE + 0x3040)
>> -#define ATOM_IBSTERRRCRVSTS0_OFFSET (ATOM_IP_BASE + 0x3324)
>> -#define ATOM_MODPHY_PCSREG4 0x1c004
>> -#define ATOM_MODPHY_PCSREG6 0x1c006
>> -
>> -#define ATOM_PPD_INIT_LINK 0x0008
>> -#define ATOM_PPD_CONN_MASK 0x0300
>> -#define ATOM_PPD_CONN_TRANSPARENT 0x0000
>> -#define ATOM_PPD_CONN_B2B 0x0100
>> -#define ATOM_PPD_CONN_RP 0x0200
>> -#define ATOM_PPD_DEV_MASK 0x1000
>> -#define ATOM_PPD_DEV_USD 0x0000
>> -#define ATOM_PPD_DEV_DSD 0x1000
>> -#define ATOM_PPD_TOPO_MASK (ATOM_PPD_CONN_MASK | ATOM_PPD_DEV_MASK)
>> -#define ATOM_PPD_TOPO_PRI_USD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_USD)
>> -#define ATOM_PPD_TOPO_PRI_DSD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_DSD)
>> -#define ATOM_PPD_TOPO_SEC_USD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_USD)
>> -#define ATOM_PPD_TOPO_SEC_DSD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_DSD)
>> -#define ATOM_PPD_TOPO_B2B_USD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_USD)
>> -#define ATOM_PPD_TOPO_B2B_DSD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_DSD)
>> -
>> -#define ATOM_MW_COUNT 2
>> -#define ATOM_DB_COUNT 34
>> -#define ATOM_DB_VALID_MASK (BIT_ULL(ATOM_DB_COUNT) - 1)
>> -#define ATOM_DB_MSIX_VECTOR_COUNT 34
>> -#define ATOM_DB_MSIX_VECTOR_SHIFT 1
>> -#define ATOM_DB_TOTAL_SHIFT 34
>> -#define ATOM_SPAD_COUNT 16
>> -
>> -#define ATOM_NTB_CTL_DOWN_BIT BIT(16)
>> -#define ATOM_NTB_CTL_ACTIVE(x) !(x & ATOM_NTB_CTL_DOWN_BIT)
>> -
>> -#define ATOM_DESKEWSTS_DBERR BIT(15)
>> -#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI BIT(20)
>> -#define ATOM_LTSSMSTATEJMP_FORCEDETECT BIT(2)
>> -#define ATOM_IBIST_ERR_OFLOW 0x7FFF7FFF
>> -
>> -#define ATOM_LINK_HB_TIMEOUT msecs_to_jiffies(1000)
>> -#define ATOM_LINK_RECOVERY_TIME msecs_to_jiffies(500)
>> -
>> /* Ntb control and link status */
>>
>> #define NTB_CTL_CFG_LOCK BIT(0)
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] ntb: remove Intel Atom NTB driver support
2017-11-19 1:55 ` Jon Mason
@ 2017-11-19 2:02 ` Jiang, Dave
2017-11-19 4:51 ` Jon Mason
0 siblings, 1 reply; 6+ messages in thread
From: Jiang, Dave @ 2017-11-19 2:02 UTC (permalink / raw)
To: Jon Mason; +Cc: Allen Hubbe, linux-ntb
[-- Attachment #1: Type: text/plain, Size: 17523 bytes --]
I think you need the other patch first maybe?
On Nov 18, 2017, at 6:56 PM, Jon Mason <jdmason@kudzu.us<mailto:jdmason@kudzu.us>> wrote:
This patch didn't apply. Can you rebase and resend?
Thanks,
Jon
On Mon, Nov 13, 2017 at 9:06 AM, Allen Hubbe <Allen.Hubbe@dell.com<mailto:Allen.Hubbe@dell.com>> wrote:
From: Dave Jiang
Removing dead code since this is not being used.
Signed-off-by: Dave Jiang <dave.jiang@intel.com<mailto:dave.jiang@intel.com>>
Acked-by: Allen Hubbe <Allen.Hubbe@dell.com<mailto:Allen.Hubbe@dell.com>>
---
drivers/ntb/hw/intel/ntb_hw_intel.c | 309 -----------------------------------
drivers/ntb/hw/intel/ntb_hw_intel.h | 58 -------
2 files changed, 4 insertions(+), 363 deletions(-)
diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c b/drivers/ntb/hw/intel/ntb_hw_intel.c
index c1d2f85..94c0737 100644
--- a/drivers/ntb/hw/intel/ntb_hw_intel.c
+++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
@@ -74,12 +74,6 @@ MODULE_AUTHOR("Intel Corporation");
#define bar0_off(base, bar) ((base) + ((bar) << 2))
#define bar2_off(base, bar) bar0_off(base, (bar) - 2)
-static const struct intel_ntb_reg atom_reg;
-static const struct intel_ntb_alt_reg atom_pri_reg;
-static const struct intel_ntb_alt_reg atom_sec_reg;
-static const struct intel_ntb_alt_reg atom_b2b_reg;
-static const struct intel_ntb_xlat_reg atom_pri_xlat;
-static const struct intel_ntb_xlat_reg atom_sec_xlat;
static const struct intel_ntb_reg xeon_reg;
static const struct intel_ntb_alt_reg xeon_pri_reg;
static const struct intel_ntb_alt_reg xeon_sec_reg;
@@ -184,15 +178,6 @@ static inline void _iowrite64(u64 val, void __iomem *mmio)
#endif
#endif
-static inline int pdev_is_atom(struct pci_dev *pdev)
-{
- switch (pdev->device) {
- case PCI_DEVICE_ID_INTEL_NTB_B2B_BWD:
- return 1;
- }
- return 0;
-}
-
static inline int pdev_is_xeon(struct pci_dev *pdev)
{
switch (pdev->device) {
@@ -1015,8 +1000,7 @@ static ssize_t ndev_debugfs_read(struct file *filp, char __user *ubuf,
{
struct intel_ntb_dev *ndev = filp->private_data;
- if (pdev_is_xeon(ndev->ntb.pdev) ||
- pdev_is_atom(ndev->ntb.pdev))
+ if (pdev_is_xeon(ndev->ntb.pdev))
return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
else if (pdev_is_xeon_ntb3(ndev->ntb.pdev))
return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
@@ -1448,242 +1432,6 @@ static int intel_ntb_peer_spad_write(struct ntb_dev *ntb, int pidx,
ndev->peer_reg->spad);
}
-/* ATOM */
-
-static u64 atom_db_ioread(void __iomem *mmio)
-{
- return ioread64(mmio);
-}
-
-static void atom_db_iowrite(u64 bits, void __iomem *mmio)
-{
- iowrite64(bits, mmio);
-}
-
-static int atom_poll_link(struct intel_ntb_dev *ndev)
-{
- u32 ntb_ctl;
-
- ntb_ctl = ioread32(ndev->self_mmio + ATOM_NTBCNTL_OFFSET);
-
- if (ntb_ctl == ndev->ntb_ctl)
- return 0;
-
- ndev->ntb_ctl = ntb_ctl;
-
- ndev->lnk_sta = ioread32(ndev->self_mmio + ATOM_LINK_STATUS_OFFSET);
-
- return 1;
-}
-
-static int atom_link_is_up(struct intel_ntb_dev *ndev)
-{
- return ATOM_NTB_CTL_ACTIVE(ndev->ntb_ctl);
-}
-
-static int atom_link_is_err(struct intel_ntb_dev *ndev)
-{
- if (ioread32(ndev->self_mmio + ATOM_LTSSMSTATEJMP_OFFSET)
- & ATOM_LTSSMSTATEJMP_FORCEDETECT)
- return 1;
-
- if (ioread32(ndev->self_mmio + ATOM_IBSTERRRCRVSTS0_OFFSET)
- & ATOM_IBIST_ERR_OFLOW)
- return 1;
-
- return 0;
-}
-
-static inline enum ntb_topo atom_ppd_topo(struct intel_ntb_dev *ndev, u32 ppd)
-{
- struct device *dev = &ndev->ntb.pdev->dev;
-
- switch (ppd & ATOM_PPD_TOPO_MASK) {
- case ATOM_PPD_TOPO_B2B_USD:
- dev_dbg(dev, "PPD %d B2B USD\n", ppd);
- return NTB_TOPO_B2B_USD;
-
- case ATOM_PPD_TOPO_B2B_DSD:
- dev_dbg(dev, "PPD %d B2B DSD\n", ppd);
- return NTB_TOPO_B2B_DSD;
-
- case ATOM_PPD_TOPO_PRI_USD:
- case ATOM_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
- case ATOM_PPD_TOPO_SEC_USD:
- case ATOM_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
- dev_dbg(dev, "PPD %d non B2B disabled\n", ppd);
- return NTB_TOPO_NONE;
- }
-
- dev_dbg(dev, "PPD %d invalid\n", ppd);
- return NTB_TOPO_NONE;
-}
-
-static void atom_link_hb(struct work_struct *work)
-{
- struct intel_ntb_dev *ndev = hb_ndev(work);
- struct device *dev = &ndev->ntb.pdev->dev;
- unsigned long poll_ts;
- void __iomem *mmio;
- u32 status32;
-
- poll_ts = ndev->last_ts + ATOM_LINK_HB_TIMEOUT;
-
- /* Delay polling the link status if an interrupt was received,
- * unless the cached link status says the link is down.
- */
- if (time_after(poll_ts, jiffies) && atom_link_is_up(ndev)) {
- schedule_delayed_work(&ndev->hb_timer, poll_ts - jiffies);
- return;
- }
-
- if (atom_poll_link(ndev))
- ntb_link_event(&ndev->ntb);
-
- if (atom_link_is_up(ndev) || !atom_link_is_err(ndev)) {
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
- return;
- }
-
- /* Link is down with error: recover the link! */
-
- mmio = ndev->self_mmio;
-
- /* Driver resets the NTB ModPhy lanes - magic! */
- iowrite8(0xe0, mmio + ATOM_MODPHY_PCSREG6);
- iowrite8(0x40, mmio + ATOM_MODPHY_PCSREG4);
- iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG4);
- iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG6);
-
- /* Driver waits 100ms to allow the NTB ModPhy to settle */
- msleep(100);
-
- /* Clear AER Errors, write to clear */
- status32 = ioread32(mmio + ATOM_ERRCORSTS_OFFSET);
- dev_dbg(dev, "ERRCORSTS = %x\n", status32);
- status32 &= PCI_ERR_COR_REP_ROLL;
- iowrite32(status32, mmio + ATOM_ERRCORSTS_OFFSET);
-
- /* Clear unexpected electrical idle event in LTSSM, write to clear */
- status32 = ioread32(mmio + ATOM_LTSSMERRSTS0_OFFSET);
- dev_dbg(dev, "LTSSMERRSTS0 = %x\n", status32);
- status32 |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
- iowrite32(status32, mmio + ATOM_LTSSMERRSTS0_OFFSET);
-
- /* Clear DeSkew Buffer error, write to clear */
- status32 = ioread32(mmio + ATOM_DESKEWSTS_OFFSET);
- dev_dbg(dev, "DESKEWSTS = %x\n", status32);
- status32 |= ATOM_DESKEWSTS_DBERR;
- iowrite32(status32, mmio + ATOM_DESKEWSTS_OFFSET);
-
- status32 = ioread32(mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
- dev_dbg(dev, "IBSTERRRCRVSTS0 = %x\n", status32);
- status32 &= ATOM_IBIST_ERR_OFLOW;
- iowrite32(status32, mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
-
- /* Releases the NTB state machine to allow the link to retrain */
- status32 = ioread32(mmio + ATOM_LTSSMSTATEJMP_OFFSET);
- dev_dbg(dev, "LTSSMSTATEJMP = %x\n", status32);
- status32 &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
- iowrite32(status32, mmio + ATOM_LTSSMSTATEJMP_OFFSET);
-
- /* There is a potential race between the 2 NTB devices recovering at the
- * same time. If the times are the same, the link will not recover and
- * the driver will be stuck in this loop forever. Add a random interval
- * to the recovery time to prevent this race.
- */
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_RECOVERY_TIME
- + prandom_u32() % ATOM_LINK_RECOVERY_TIME);
-}
-
-static int atom_init_isr(struct intel_ntb_dev *ndev)
-{
- int rc;
-
- rc = ndev_init_isr(ndev, 1, ATOM_DB_MSIX_VECTOR_COUNT,
- ATOM_DB_MSIX_VECTOR_SHIFT, ATOM_DB_TOTAL_SHIFT);
- if (rc)
- return rc;
-
- /* ATOM doesn't have link status interrupt, poll on that platform */
- ndev->last_ts = jiffies;
- INIT_DELAYED_WORK(&ndev->hb_timer, atom_link_hb);
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
-
- return 0;
-}
-
-static void atom_deinit_isr(struct intel_ntb_dev *ndev)
-{
- cancel_delayed_work_sync(&ndev->hb_timer);
- ndev_deinit_isr(ndev);
-}
-
-static int atom_init_ntb(struct intel_ntb_dev *ndev)
-{
- ndev->mw_count = ATOM_MW_COUNT;
- ndev->spad_count = ATOM_SPAD_COUNT;
- ndev->db_count = ATOM_DB_COUNT;
-
- switch (ndev->ntb.topo) {
- case NTB_TOPO_B2B_USD:
- case NTB_TOPO_B2B_DSD:
- ndev->self_reg = &atom_pri_reg;
- ndev->peer_reg = &atom_b2b_reg;
- ndev->xlat_reg = &atom_sec_xlat;
-
- /* Enable Bus Master and Memory Space on the secondary side */
- iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
- ndev->self_mmio + ATOM_SPCICMD_OFFSET);
-
- break;
-
- default:
- return -EINVAL;
- }
-
- ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
-
- return 0;
-}
-
-static int atom_init_dev(struct intel_ntb_dev *ndev)
-{
- u32 ppd;
- int rc;
-
- rc = pci_read_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET, &ppd);
- if (rc)
- return -EIO;
-
- ndev->ntb.topo = atom_ppd_topo(ndev, ppd);
- if (ndev->ntb.topo == NTB_TOPO_NONE)
- return -EINVAL;
-
- rc = atom_init_ntb(ndev);
- if (rc)
- return rc;
-
- rc = atom_init_isr(ndev);
- if (rc)
- return rc;
-
- if (ndev->ntb.topo != NTB_TOPO_SEC) {
- /* Initiate PCI-E link training */
- rc = pci_write_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET,
- ppd | ATOM_PPD_INIT_LINK);
- if (rc)
- return rc;
- }
-
- return 0;
-}
-
-static void atom_deinit_dev(struct intel_ntb_dev *ndev)
-{
- atom_deinit_isr(ndev);
-}
-
/* Skylake Xeon NTB */
static int skx_poll_link(struct intel_ntb_dev *ndev)
@@ -2738,24 +2486,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
node = dev_to_node(&pdev->dev);
- if (pdev_is_atom(pdev)) {
- ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
- if (!ndev) {
- rc = -ENOMEM;
- goto err_ndev;
- }
-
- ndev_init_struct(ndev, pdev);
-
- rc = intel_ntb_init_pci(ndev, pdev);
- if (rc)
- goto err_init_pci;
-
- rc = atom_init_dev(ndev);
- if (rc)
- goto err_init_dev;
-
- } else if (pdev_is_xeon(pdev)) {
+ if (pdev_is_xeon(pdev)) {
ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
if (!ndev) {
rc = -ENOMEM;
@@ -2811,9 +2542,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
err_register:
ndev_deinit_debugfs(ndev);
- if (pdev_is_atom(pdev))
- atom_deinit_dev(ndev);
- else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
+ if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
xeon_deinit_dev(ndev);
err_init_dev:
intel_ntb_deinit_pci(ndev);
@@ -2829,41 +2558,12 @@ static void intel_ntb_pci_remove(struct pci_dev *pdev)
ntb_unregister_device(&ndev->ntb);
ndev_deinit_debugfs(ndev);
- if (pdev_is_atom(pdev))
- atom_deinit_dev(ndev);
- else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
+ if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
xeon_deinit_dev(ndev);
intel_ntb_deinit_pci(ndev);
kfree(ndev);
}
-static const struct intel_ntb_reg atom_reg = {
- .poll_link = atom_poll_link,
- .link_is_up = atom_link_is_up,
- .db_ioread = atom_db_ioread,
- .db_iowrite = atom_db_iowrite,
- .db_size = sizeof(u64),
- .ntb_ctl = ATOM_NTBCNTL_OFFSET,
- .mw_bar = {2, 4},
-};
-
-static const struct intel_ntb_alt_reg atom_pri_reg = {
- .db_bell = ATOM_PDOORBELL_OFFSET,
- .db_mask = ATOM_PDBMSK_OFFSET,
- .spad = ATOM_SPAD_OFFSET,
-};
-
-static const struct intel_ntb_alt_reg atom_b2b_reg = {
- .db_bell = ATOM_B2B_DOORBELL_OFFSET,
- .spad = ATOM_B2B_SPAD_OFFSET,
-};
-
-static const struct intel_ntb_xlat_reg atom_sec_xlat = {
- /* FIXME : .bar0_base = ATOM_SBAR0BASE_OFFSET, */
- /* FIXME : .bar2_limit = ATOM_SBAR2LMT_OFFSET, */
- .bar2_xlat = ATOM_SBAR2XLAT_OFFSET,
-};
-
static const struct intel_ntb_reg xeon_reg = {
.poll_link = xeon_poll_link,
.link_is_up = xeon_link_is_up,
@@ -3020,7 +2720,6 @@ static const struct file_operations intel_ntb_debugfs_info = {
};
static const struct pci_device_id intel_ntb_pci_tbl[] = {
- {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BWD)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.h b/drivers/ntb/hw/intel/ntb_hw_intel.h
index a8b17f3..9d2c6b6 100644
--- a/drivers/ntb/hw/intel/ntb_hw_intel.h
+++ b/drivers/ntb/hw/intel/ntb_hw_intel.h
@@ -66,7 +66,6 @@
#define PCI_DEVICE_ID_INTEL_NTB_B2B_HSX 0x2F0D
#define PCI_DEVICE_ID_INTEL_NTB_PS_HSX 0x2F0E
#define PCI_DEVICE_ID_INTEL_NTB_SS_HSX 0x2F0F
-#define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD 0x0C4E
#define PCI_DEVICE_ID_INTEL_NTB_B2B_BDX 0x6F0D
#define PCI_DEVICE_ID_INTEL_NTB_PS_BDX 0x6F0E
#define PCI_DEVICE_ID_INTEL_NTB_SS_BDX 0x6F0F
@@ -197,63 +196,6 @@
#define SKX_DB_TOTAL_SHIFT 33
#define SKX_SPAD_COUNT 16
-/* Intel Atom hardware */
-
-#define ATOM_SBAR2XLAT_OFFSET 0x0008
-#define ATOM_PDOORBELL_OFFSET 0x0020
-#define ATOM_PDBMSK_OFFSET 0x0028
-#define ATOM_NTBCNTL_OFFSET 0x0060
-#define ATOM_SPAD_OFFSET 0x0080
-#define ATOM_PPD_OFFSET 0x00d4
-#define ATOM_PBAR2XLAT_OFFSET 0x8008
-#define ATOM_B2B_DOORBELL_OFFSET 0x8020
-#define ATOM_B2B_SPAD_OFFSET 0x8080
-#define ATOM_SPCICMD_OFFSET 0xb004
-#define ATOM_LINK_STATUS_OFFSET 0xb052
-#define ATOM_ERRCORSTS_OFFSET 0xb110
-#define ATOM_IP_BASE 0xc000
-#define ATOM_DESKEWSTS_OFFSET (ATOM_IP_BASE + 0x3024)
-#define ATOM_LTSSMERRSTS0_OFFSET (ATOM_IP_BASE + 0x3180)
-#define ATOM_LTSSMSTATEJMP_OFFSET (ATOM_IP_BASE + 0x3040)
-#define ATOM_IBSTERRRCRVSTS0_OFFSET (ATOM_IP_BASE + 0x3324)
-#define ATOM_MODPHY_PCSREG4 0x1c004
-#define ATOM_MODPHY_PCSREG6 0x1c006
-
-#define ATOM_PPD_INIT_LINK 0x0008
-#define ATOM_PPD_CONN_MASK 0x0300
-#define ATOM_PPD_CONN_TRANSPARENT 0x0000
-#define ATOM_PPD_CONN_B2B 0x0100
-#define ATOM_PPD_CONN_RP 0x0200
-#define ATOM_PPD_DEV_MASK 0x1000
-#define ATOM_PPD_DEV_USD 0x0000
-#define ATOM_PPD_DEV_DSD 0x1000
-#define ATOM_PPD_TOPO_MASK (ATOM_PPD_CONN_MASK | ATOM_PPD_DEV_MASK)
-#define ATOM_PPD_TOPO_PRI_USD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_PRI_DSD (ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_DSD)
-#define ATOM_PPD_TOPO_SEC_USD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_SEC_DSD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_DSD)
-#define ATOM_PPD_TOPO_B2B_USD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_B2B_DSD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_DSD)
-
-#define ATOM_MW_COUNT 2
-#define ATOM_DB_COUNT 34
-#define ATOM_DB_VALID_MASK (BIT_ULL(ATOM_DB_COUNT) - 1)
-#define ATOM_DB_MSIX_VECTOR_COUNT 34
-#define ATOM_DB_MSIX_VECTOR_SHIFT 1
-#define ATOM_DB_TOTAL_SHIFT 34
-#define ATOM_SPAD_COUNT 16
-
-#define ATOM_NTB_CTL_DOWN_BIT BIT(16)
-#define ATOM_NTB_CTL_ACTIVE(x) !(x & ATOM_NTB_CTL_DOWN_BIT)
-
-#define ATOM_DESKEWSTS_DBERR BIT(15)
-#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI BIT(20)
-#define ATOM_LTSSMSTATEJMP_FORCEDETECT BIT(2)
-#define ATOM_IBIST_ERR_OFLOW 0x7FFF7FFF
-
-#define ATOM_LINK_HB_TIMEOUT msecs_to_jiffies(1000)
-#define ATOM_LINK_RECOVERY_TIME msecs_to_jiffies(500)
-
/* Ntb control and link status */
#define NTB_CTL_CFG_LOCK BIT(0)
--
You received this message because you are subscribed to the Google Groups "linux-ntb" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-ntb+unsubscribe@googlegroups.com<mailto:linux-ntb+unsubscribe@googlegroups.com>.
To post to this group, send email to linux-ntb@googlegroups.com<mailto:linux-ntb@googlegroups.com>.
To view this discussion on the web visit https://groups.google.com/d/msgid/linux-ntb/CAPoiz9wn3f5x-aCJTMx7S6xS%3DuiG2ZYOJHxiAk2Unrqc58EbiQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
[-- Attachment #2: Type: text/html, Size: 75281 bytes --]
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] ntb: remove Intel Atom NTB driver support
2017-11-19 2:02 ` Jiang, Dave
@ 2017-11-19 4:51 ` Jon Mason
2017-11-19 5:01 ` Jiang, Dave
0 siblings, 1 reply; 6+ messages in thread
From: Jon Mason @ 2017-11-19 4:51 UTC (permalink / raw)
To: Jiang, Dave; +Cc: Allen Hubbe, linux-ntb
The second one applied. The Atom remove one failed. I applied the
second one and it'll be in my pull request tomorrow.
On Sat, Nov 18, 2017 at 9:02 PM, Jiang, Dave <dave.jiang@intel.com> wrote:
> I think you need the other patch first maybe?
>
> On Nov 18, 2017, at 6:56 PM, Jon Mason <jdmason@kudzu.us> wrote:
>
> This patch didn't apply. Can you rebase and resend?
>
> Thanks,
> Jon
>
> On Mon, Nov 13, 2017 at 9:06 AM, Allen Hubbe <Allen.Hubbe@dell.com> wrote:
>
> From: Dave Jiang
>
> Removing dead code since this is not being used.
>
>
> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
>
>
> Acked-by: Allen Hubbe <Allen.Hubbe@dell.com>
>
>
> ---
>
> drivers/ntb/hw/intel/ntb_hw_intel.c | 309
> -----------------------------------
>
> drivers/ntb/hw/intel/ntb_hw_intel.h | 58 -------
>
> 2 files changed, 4 insertions(+), 363 deletions(-)
>
>
> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c
> b/drivers/ntb/hw/intel/ntb_hw_intel.c
>
> index c1d2f85..94c0737 100644
>
> --- a/drivers/ntb/hw/intel/ntb_hw_intel.c
>
> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
>
> @@ -74,12 +74,6 @@ MODULE_AUTHOR("Intel Corporation");
>
> #define bar0_off(base, bar) ((base) + ((bar) << 2))
>
> #define bar2_off(base, bar) bar0_off(base, (bar) - 2)
>
>
> -static const struct intel_ntb_reg atom_reg;
>
> -static const struct intel_ntb_alt_reg atom_pri_reg;
>
> -static const struct intel_ntb_alt_reg atom_sec_reg;
>
> -static const struct intel_ntb_alt_reg atom_b2b_reg;
>
> -static const struct intel_ntb_xlat_reg atom_pri_xlat;
>
> -static const struct intel_ntb_xlat_reg atom_sec_xlat;
>
> static const struct intel_ntb_reg xeon_reg;
>
> static const struct intel_ntb_alt_reg xeon_pri_reg;
>
> static const struct intel_ntb_alt_reg xeon_sec_reg;
>
> @@ -184,15 +178,6 @@ static inline void _iowrite64(u64 val, void __iomem
> *mmio)
>
> #endif
>
> #endif
>
>
> -static inline int pdev_is_atom(struct pci_dev *pdev)
>
> -{
>
> - switch (pdev->device) {
>
> - case PCI_DEVICE_ID_INTEL_NTB_B2B_BWD:
>
> - return 1;
>
> - }
>
> - return 0;
>
> -}
>
> -
>
> static inline int pdev_is_xeon(struct pci_dev *pdev)
>
> {
>
> switch (pdev->device) {
>
> @@ -1015,8 +1000,7 @@ static ssize_t ndev_debugfs_read(struct file *filp,
> char __user *ubuf,
>
> {
>
> struct intel_ntb_dev *ndev = filp->private_data;
>
>
> - if (pdev_is_xeon(ndev->ntb.pdev) ||
>
> - pdev_is_atom(ndev->ntb.pdev))
>
> + if (pdev_is_xeon(ndev->ntb.pdev))
>
> return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
>
> else if (pdev_is_xeon_ntb3(ndev->ntb.pdev))
>
> return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
>
> @@ -1448,242 +1432,6 @@ static int intel_ntb_peer_spad_write(struct ntb_dev
> *ntb, int pidx,
>
> ndev->peer_reg->spad);
>
> }
>
>
> -/* ATOM */
>
> -
>
> -static u64 atom_db_ioread(void __iomem *mmio)
>
> -{
>
> - return ioread64(mmio);
>
> -}
>
> -
>
> -static void atom_db_iowrite(u64 bits, void __iomem *mmio)
>
> -{
>
> - iowrite64(bits, mmio);
>
> -}
>
> -
>
> -static int atom_poll_link(struct intel_ntb_dev *ndev)
>
> -{
>
> - u32 ntb_ctl;
>
> -
>
> - ntb_ctl = ioread32(ndev->self_mmio + ATOM_NTBCNTL_OFFSET);
>
> -
>
> - if (ntb_ctl == ndev->ntb_ctl)
>
> - return 0;
>
> -
>
> - ndev->ntb_ctl = ntb_ctl;
>
> -
>
> - ndev->lnk_sta = ioread32(ndev->self_mmio + ATOM_LINK_STATUS_OFFSET);
>
> -
>
> - return 1;
>
> -}
>
> -
>
> -static int atom_link_is_up(struct intel_ntb_dev *ndev)
>
> -{
>
> - return ATOM_NTB_CTL_ACTIVE(ndev->ntb_ctl);
>
> -}
>
> -
>
> -static int atom_link_is_err(struct intel_ntb_dev *ndev)
>
> -{
>
> - if (ioread32(ndev->self_mmio + ATOM_LTSSMSTATEJMP_OFFSET)
>
> - & ATOM_LTSSMSTATEJMP_FORCEDETECT)
>
> - return 1;
>
> -
>
> - if (ioread32(ndev->self_mmio + ATOM_IBSTERRRCRVSTS0_OFFSET)
>
> - & ATOM_IBIST_ERR_OFLOW)
>
> - return 1;
>
> -
>
> - return 0;
>
> -}
>
> -
>
> -static inline enum ntb_topo atom_ppd_topo(struct intel_ntb_dev *ndev, u32
> ppd)
>
> -{
>
> - struct device *dev = &ndev->ntb.pdev->dev;
>
> -
>
> - switch (ppd & ATOM_PPD_TOPO_MASK) {
>
> - case ATOM_PPD_TOPO_B2B_USD:
>
> - dev_dbg(dev, "PPD %d B2B USD\n", ppd);
>
> - return NTB_TOPO_B2B_USD;
>
> -
>
> - case ATOM_PPD_TOPO_B2B_DSD:
>
> - dev_dbg(dev, "PPD %d B2B DSD\n", ppd);
>
> - return NTB_TOPO_B2B_DSD;
>
> -
>
> - case ATOM_PPD_TOPO_PRI_USD:
>
> - case ATOM_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
>
> - case ATOM_PPD_TOPO_SEC_USD:
>
> - case ATOM_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
>
> - dev_dbg(dev, "PPD %d non B2B disabled\n", ppd);
>
> - return NTB_TOPO_NONE;
>
> - }
>
> -
>
> - dev_dbg(dev, "PPD %d invalid\n", ppd);
>
> - return NTB_TOPO_NONE;
>
> -}
>
> -
>
> -static void atom_link_hb(struct work_struct *work)
>
> -{
>
> - struct intel_ntb_dev *ndev = hb_ndev(work);
>
> - struct device *dev = &ndev->ntb.pdev->dev;
>
> - unsigned long poll_ts;
>
> - void __iomem *mmio;
>
> - u32 status32;
>
> -
>
> - poll_ts = ndev->last_ts + ATOM_LINK_HB_TIMEOUT;
>
> -
>
> - /* Delay polling the link status if an interrupt was received,
>
> - * unless the cached link status says the link is down.
>
> - */
>
> - if (time_after(poll_ts, jiffies) && atom_link_is_up(ndev)) {
>
> - schedule_delayed_work(&ndev->hb_timer, poll_ts - jiffies);
>
> - return;
>
> - }
>
> -
>
> - if (atom_poll_link(ndev))
>
> - ntb_link_event(&ndev->ntb);
>
> -
>
> - if (atom_link_is_up(ndev) || !atom_link_is_err(ndev)) {
>
> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
>
> - return;
>
> - }
>
> -
>
> - /* Link is down with error: recover the link! */
>
> -
>
> - mmio = ndev->self_mmio;
>
> -
>
> - /* Driver resets the NTB ModPhy lanes - magic! */
>
> - iowrite8(0xe0, mmio + ATOM_MODPHY_PCSREG6);
>
> - iowrite8(0x40, mmio + ATOM_MODPHY_PCSREG4);
>
> - iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG4);
>
> - iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG6);
>
> -
>
> - /* Driver waits 100ms to allow the NTB ModPhy to settle */
>
> - msleep(100);
>
> -
>
> - /* Clear AER Errors, write to clear */
>
> - status32 = ioread32(mmio + ATOM_ERRCORSTS_OFFSET);
>
> - dev_dbg(dev, "ERRCORSTS = %x\n", status32);
>
> - status32 &= PCI_ERR_COR_REP_ROLL;
>
> - iowrite32(status32, mmio + ATOM_ERRCORSTS_OFFSET);
>
> -
>
> - /* Clear unexpected electrical idle event in LTSSM, write to clear */
>
> - status32 = ioread32(mmio + ATOM_LTSSMERRSTS0_OFFSET);
>
> - dev_dbg(dev, "LTSSMERRSTS0 = %x\n", status32);
>
> - status32 |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
>
> - iowrite32(status32, mmio + ATOM_LTSSMERRSTS0_OFFSET);
>
> -
>
> - /* Clear DeSkew Buffer error, write to clear */
>
> - status32 = ioread32(mmio + ATOM_DESKEWSTS_OFFSET);
>
> - dev_dbg(dev, "DESKEWSTS = %x\n", status32);
>
> - status32 |= ATOM_DESKEWSTS_DBERR;
>
> - iowrite32(status32, mmio + ATOM_DESKEWSTS_OFFSET);
>
> -
>
> - status32 = ioread32(mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
>
> - dev_dbg(dev, "IBSTERRRCRVSTS0 = %x\n", status32);
>
> - status32 &= ATOM_IBIST_ERR_OFLOW;
>
> - iowrite32(status32, mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
>
> -
>
> - /* Releases the NTB state machine to allow the link to retrain */
>
> - status32 = ioread32(mmio + ATOM_LTSSMSTATEJMP_OFFSET);
>
> - dev_dbg(dev, "LTSSMSTATEJMP = %x\n", status32);
>
> - status32 &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
>
> - iowrite32(status32, mmio + ATOM_LTSSMSTATEJMP_OFFSET);
>
> -
>
> - /* There is a potential race between the 2 NTB devices recovering at
> the
>
> - * same time. If the times are the same, the link will not recover
> and
>
> - * the driver will be stuck in this loop forever. Add a random
> interval
>
> - * to the recovery time to prevent this race.
>
> - */
>
> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_RECOVERY_TIME
>
> - + prandom_u32() % ATOM_LINK_RECOVERY_TIME);
>
> -}
>
> -
>
> -static int atom_init_isr(struct intel_ntb_dev *ndev)
>
> -{
>
> - int rc;
>
> -
>
> - rc = ndev_init_isr(ndev, 1, ATOM_DB_MSIX_VECTOR_COUNT,
>
> - ATOM_DB_MSIX_VECTOR_SHIFT, ATOM_DB_TOTAL_SHIFT);
>
> - if (rc)
>
> - return rc;
>
> -
>
> - /* ATOM doesn't have link status interrupt, poll on that platform */
>
> - ndev->last_ts = jiffies;
>
> - INIT_DELAYED_WORK(&ndev->hb_timer, atom_link_hb);
>
> - schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
>
> -
>
> - return 0;
>
> -}
>
> -
>
> -static void atom_deinit_isr(struct intel_ntb_dev *ndev)
>
> -{
>
> - cancel_delayed_work_sync(&ndev->hb_timer);
>
> - ndev_deinit_isr(ndev);
>
> -}
>
> -
>
> -static int atom_init_ntb(struct intel_ntb_dev *ndev)
>
> -{
>
> - ndev->mw_count = ATOM_MW_COUNT;
>
> - ndev->spad_count = ATOM_SPAD_COUNT;
>
> - ndev->db_count = ATOM_DB_COUNT;
>
> -
>
> - switch (ndev->ntb.topo) {
>
> - case NTB_TOPO_B2B_USD:
>
> - case NTB_TOPO_B2B_DSD:
>
> - ndev->self_reg = &atom_pri_reg;
>
> - ndev->peer_reg = &atom_b2b_reg;
>
> - ndev->xlat_reg = &atom_sec_xlat;
>
> -
>
> - /* Enable Bus Master and Memory Space on the secondary side */
>
> - iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
>
> - ndev->self_mmio + ATOM_SPCICMD_OFFSET);
>
> -
>
> - break;
>
> -
>
> - default:
>
> - return -EINVAL;
>
> - }
>
> -
>
> - ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
>
> -
>
> - return 0;
>
> -}
>
> -
>
> -static int atom_init_dev(struct intel_ntb_dev *ndev)
>
> -{
>
> - u32 ppd;
>
> - int rc;
>
> -
>
> - rc = pci_read_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET, &ppd);
>
> - if (rc)
>
> - return -EIO;
>
> -
>
> - ndev->ntb.topo = atom_ppd_topo(ndev, ppd);
>
> - if (ndev->ntb.topo == NTB_TOPO_NONE)
>
> - return -EINVAL;
>
> -
>
> - rc = atom_init_ntb(ndev);
>
> - if (rc)
>
> - return rc;
>
> -
>
> - rc = atom_init_isr(ndev);
>
> - if (rc)
>
> - return rc;
>
> -
>
> - if (ndev->ntb.topo != NTB_TOPO_SEC) {
>
> - /* Initiate PCI-E link training */
>
> - rc = pci_write_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET,
>
> - ppd | ATOM_PPD_INIT_LINK);
>
> - if (rc)
>
> - return rc;
>
> - }
>
> -
>
> - return 0;
>
> -}
>
> -
>
> -static void atom_deinit_dev(struct intel_ntb_dev *ndev)
>
> -{
>
> - atom_deinit_isr(ndev);
>
> -}
>
> -
>
> /* Skylake Xeon NTB */
>
>
> static int skx_poll_link(struct intel_ntb_dev *ndev)
>
> @@ -2738,24 +2486,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
>
>
> node = dev_to_node(&pdev->dev);
>
>
> - if (pdev_is_atom(pdev)) {
>
> - ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
>
> - if (!ndev) {
>
> - rc = -ENOMEM;
>
> - goto err_ndev;
>
> - }
>
> -
>
> - ndev_init_struct(ndev, pdev);
>
> -
>
> - rc = intel_ntb_init_pci(ndev, pdev);
>
> - if (rc)
>
> - goto err_init_pci;
>
> -
>
> - rc = atom_init_dev(ndev);
>
> - if (rc)
>
> - goto err_init_dev;
>
> -
>
> - } else if (pdev_is_xeon(pdev)) {
>
> + if (pdev_is_xeon(pdev)) {
>
> ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
>
> if (!ndev) {
>
> rc = -ENOMEM;
>
> @@ -2811,9 +2542,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
>
>
> err_register:
>
> ndev_deinit_debugfs(ndev);
>
> - if (pdev_is_atom(pdev))
>
> - atom_deinit_dev(ndev);
>
> - else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>
> + if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>
> xeon_deinit_dev(ndev);
>
> err_init_dev:
>
> intel_ntb_deinit_pci(ndev);
>
> @@ -2829,41 +2558,12 @@ static void intel_ntb_pci_remove(struct pci_dev
> *pdev)
>
>
> ntb_unregister_device(&ndev->ntb);
>
> ndev_deinit_debugfs(ndev);
>
> - if (pdev_is_atom(pdev))
>
> - atom_deinit_dev(ndev);
>
> - else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>
> + if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>
> xeon_deinit_dev(ndev);
>
> intel_ntb_deinit_pci(ndev);
>
> kfree(ndev);
>
> }
>
>
> -static const struct intel_ntb_reg atom_reg = {
>
> - .poll_link = atom_poll_link,
>
> - .link_is_up = atom_link_is_up,
>
> - .db_ioread = atom_db_ioread,
>
> - .db_iowrite = atom_db_iowrite,
>
> - .db_size = sizeof(u64),
>
> - .ntb_ctl = ATOM_NTBCNTL_OFFSET,
>
> - .mw_bar = {2, 4},
>
> -};
>
> -
>
> -static const struct intel_ntb_alt_reg atom_pri_reg = {
>
> - .db_bell = ATOM_PDOORBELL_OFFSET,
>
> - .db_mask = ATOM_PDBMSK_OFFSET,
>
> - .spad = ATOM_SPAD_OFFSET,
>
> -};
>
> -
>
> -static const struct intel_ntb_alt_reg atom_b2b_reg = {
>
> - .db_bell = ATOM_B2B_DOORBELL_OFFSET,
>
> - .spad = ATOM_B2B_SPAD_OFFSET,
>
> -};
>
> -
>
> -static const struct intel_ntb_xlat_reg atom_sec_xlat = {
>
> - /* FIXME : .bar0_base = ATOM_SBAR0BASE_OFFSET, */
>
> - /* FIXME : .bar2_limit = ATOM_SBAR2LMT_OFFSET, */
>
> - .bar2_xlat = ATOM_SBAR2XLAT_OFFSET,
>
> -};
>
> -
>
> static const struct intel_ntb_reg xeon_reg = {
>
> .poll_link = xeon_poll_link,
>
> .link_is_up = xeon_link_is_up,
>
> @@ -3020,7 +2720,6 @@ static const struct file_operations
> intel_ntb_debugfs_info = {
>
> };
>
>
> static const struct pci_device_id intel_ntb_pci_tbl[] = {
>
> - {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BWD)},
>
> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
>
> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
>
> {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
>
> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.h
> b/drivers/ntb/hw/intel/ntb_hw_intel.h
>
> index a8b17f3..9d2c6b6 100644
>
> --- a/drivers/ntb/hw/intel/ntb_hw_intel.h
>
> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.h
>
> @@ -66,7 +66,6 @@
>
> #define PCI_DEVICE_ID_INTEL_NTB_B2B_HSX 0x2F0D
>
> #define PCI_DEVICE_ID_INTEL_NTB_PS_HSX 0x2F0E
>
> #define PCI_DEVICE_ID_INTEL_NTB_SS_HSX 0x2F0F
>
> -#define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD 0x0C4E
>
> #define PCI_DEVICE_ID_INTEL_NTB_B2B_BDX 0x6F0D
>
> #define PCI_DEVICE_ID_INTEL_NTB_PS_BDX 0x6F0E
>
> #define PCI_DEVICE_ID_INTEL_NTB_SS_BDX 0x6F0F
>
> @@ -197,63 +196,6 @@
>
> #define SKX_DB_TOTAL_SHIFT 33
>
> #define SKX_SPAD_COUNT 16
>
>
> -/* Intel Atom hardware */
>
> -
>
> -#define ATOM_SBAR2XLAT_OFFSET 0x0008
>
> -#define ATOM_PDOORBELL_OFFSET 0x0020
>
> -#define ATOM_PDBMSK_OFFSET 0x0028
>
> -#define ATOM_NTBCNTL_OFFSET 0x0060
>
> -#define ATOM_SPAD_OFFSET 0x0080
>
> -#define ATOM_PPD_OFFSET 0x00d4
>
> -#define ATOM_PBAR2XLAT_OFFSET 0x8008
>
> -#define ATOM_B2B_DOORBELL_OFFSET 0x8020
>
> -#define ATOM_B2B_SPAD_OFFSET 0x8080
>
> -#define ATOM_SPCICMD_OFFSET 0xb004
>
> -#define ATOM_LINK_STATUS_OFFSET 0xb052
>
> -#define ATOM_ERRCORSTS_OFFSET 0xb110
>
> -#define ATOM_IP_BASE 0xc000
>
> -#define ATOM_DESKEWSTS_OFFSET (ATOM_IP_BASE + 0x3024)
>
> -#define ATOM_LTSSMERRSTS0_OFFSET (ATOM_IP_BASE + 0x3180)
>
> -#define ATOM_LTSSMSTATEJMP_OFFSET (ATOM_IP_BASE + 0x3040)
>
> -#define ATOM_IBSTERRRCRVSTS0_OFFSET (ATOM_IP_BASE + 0x3324)
>
> -#define ATOM_MODPHY_PCSREG4 0x1c004
>
> -#define ATOM_MODPHY_PCSREG6 0x1c006
>
> -
>
> -#define ATOM_PPD_INIT_LINK 0x0008
>
> -#define ATOM_PPD_CONN_MASK 0x0300
>
> -#define ATOM_PPD_CONN_TRANSPARENT 0x0000
>
> -#define ATOM_PPD_CONN_B2B 0x0100
>
> -#define ATOM_PPD_CONN_RP 0x0200
>
> -#define ATOM_PPD_DEV_MASK 0x1000
>
> -#define ATOM_PPD_DEV_USD 0x0000
>
> -#define ATOM_PPD_DEV_DSD 0x1000
>
> -#define ATOM_PPD_TOPO_MASK (ATOM_PPD_CONN_MASK | ATOM_PPD_DEV_MASK)
>
> -#define ATOM_PPD_TOPO_PRI_USD (ATOM_PPD_CONN_TRANSPARENT |
> ATOM_PPD_DEV_USD)
>
> -#define ATOM_PPD_TOPO_PRI_DSD (ATOM_PPD_CONN_TRANSPARENT |
> ATOM_PPD_DEV_DSD)
>
> -#define ATOM_PPD_TOPO_SEC_USD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_USD)
>
> -#define ATOM_PPD_TOPO_SEC_DSD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_DSD)
>
> -#define ATOM_PPD_TOPO_B2B_USD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_USD)
>
> -#define ATOM_PPD_TOPO_B2B_DSD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_DSD)
>
> -
>
> -#define ATOM_MW_COUNT 2
>
> -#define ATOM_DB_COUNT 34
>
> -#define ATOM_DB_VALID_MASK (BIT_ULL(ATOM_DB_COUNT) - 1)
>
> -#define ATOM_DB_MSIX_VECTOR_COUNT 34
>
> -#define ATOM_DB_MSIX_VECTOR_SHIFT 1
>
> -#define ATOM_DB_TOTAL_SHIFT 34
>
> -#define ATOM_SPAD_COUNT 16
>
> -
>
> -#define ATOM_NTB_CTL_DOWN_BIT BIT(16)
>
> -#define ATOM_NTB_CTL_ACTIVE(x) !(x & ATOM_NTB_CTL_DOWN_BIT)
>
> -
>
> -#define ATOM_DESKEWSTS_DBERR BIT(15)
>
> -#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI BIT(20)
>
> -#define ATOM_LTSSMSTATEJMP_FORCEDETECT BIT(2)
>
> -#define ATOM_IBIST_ERR_OFLOW 0x7FFF7FFF
>
> -
>
> -#define ATOM_LINK_HB_TIMEOUT msecs_to_jiffies(1000)
>
> -#define ATOM_LINK_RECOVERY_TIME msecs_to_jiffies(500)
>
> -
>
> /* Ntb control and link status */
>
>
> #define NTB_CTL_CFG_LOCK BIT(0)
>
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "linux-ntb" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to linux-ntb+unsubscribe@googlegroups.com.
> To post to this group, send email to linux-ntb@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/linux-ntb/CAPoiz9wn3f5x-aCJTMx7S6xS%3DuiG2ZYOJHxiAk2Unrqc58EbiQ%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] ntb: remove Intel Atom NTB driver support
2017-11-19 4:51 ` Jon Mason
@ 2017-11-19 5:01 ` Jiang, Dave
0 siblings, 0 replies; 6+ messages in thread
From: Jiang, Dave @ 2017-11-19 5:01 UTC (permalink / raw)
To: Jon Mason; +Cc: Allen Hubbe, linux-ntb
[-- Attachment #1: Type: text/plain, Size: 19384 bytes --]
Ok thanks. I’m not terribly worried. I’ll look on Monday.
On Nov 18, 2017, at 9:51 PM, Jon Mason <jdmason@kudzu.us<mailto:jdmason@kudzu.us>> wrote:
The second one applied. The Atom remove one failed. I applied the
second one and it'll be in my pull request tomorrow.
On Sat, Nov 18, 2017 at 9:02 PM, Jiang, Dave <dave.jiang@intel.com<mailto:dave.jiang@intel.com>> wrote:
I think you need the other patch first maybe?
On Nov 18, 2017, at 6:56 PM, Jon Mason <jdmason@kudzu.us<mailto:jdmason@kudzu.us>> wrote:
This patch didn't apply. Can you rebase and resend?
Thanks,
Jon
On Mon, Nov 13, 2017 at 9:06 AM, Allen Hubbe <Allen.Hubbe@dell.com<mailto:Allen.Hubbe@dell.com>> wrote:
From: Dave Jiang
Removing dead code since this is not being used.
Signed-off-by: Dave Jiang <dave.jiang@intel.com<mailto:dave.jiang@intel.com>>
Acked-by: Allen Hubbe <Allen.Hubbe@dell.com<mailto:Allen.Hubbe@dell.com>>
---
drivers/ntb/hw/intel/ntb_hw_intel.c | 309
-----------------------------------
drivers/ntb/hw/intel/ntb_hw_intel.h | 58 -------
2 files changed, 4 insertions(+), 363 deletions(-)
diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c
b/drivers/ntb/hw/intel/ntb_hw_intel.c
index c1d2f85..94c0737 100644
--- a/drivers/ntb/hw/intel/ntb_hw_intel.c
+++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
@@ -74,12 +74,6 @@ MODULE_AUTHOR("Intel Corporation");
#define bar0_off(base, bar) ((base) + ((bar) << 2))
#define bar2_off(base, bar) bar0_off(base, (bar) - 2)
-static const struct intel_ntb_reg atom_reg;
-static const struct intel_ntb_alt_reg atom_pri_reg;
-static const struct intel_ntb_alt_reg atom_sec_reg;
-static const struct intel_ntb_alt_reg atom_b2b_reg;
-static const struct intel_ntb_xlat_reg atom_pri_xlat;
-static const struct intel_ntb_xlat_reg atom_sec_xlat;
static const struct intel_ntb_reg xeon_reg;
static const struct intel_ntb_alt_reg xeon_pri_reg;
static const struct intel_ntb_alt_reg xeon_sec_reg;
@@ -184,15 +178,6 @@ static inline void _iowrite64(u64 val, void __iomem
*mmio)
#endif
#endif
-static inline int pdev_is_atom(struct pci_dev *pdev)
-{
- switch (pdev->device) {
- case PCI_DEVICE_ID_INTEL_NTB_B2B_BWD:
- return 1;
- }
- return 0;
-}
-
static inline int pdev_is_xeon(struct pci_dev *pdev)
{
switch (pdev->device) {
@@ -1015,8 +1000,7 @@ static ssize_t ndev_debugfs_read(struct file *filp,
char __user *ubuf,
{
struct intel_ntb_dev *ndev = filp->private_data;
- if (pdev_is_xeon(ndev->ntb.pdev) ||
- pdev_is_atom(ndev->ntb.pdev))
+ if (pdev_is_xeon(ndev->ntb.pdev))
return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
else if (pdev_is_xeon_ntb3(ndev->ntb.pdev))
return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
@@ -1448,242 +1432,6 @@ static int intel_ntb_peer_spad_write(struct ntb_dev
*ntb, int pidx,
ndev->peer_reg->spad);
}
-/* ATOM */
-
-static u64 atom_db_ioread(void __iomem *mmio)
-{
- return ioread64(mmio);
-}
-
-static void atom_db_iowrite(u64 bits, void __iomem *mmio)
-{
- iowrite64(bits, mmio);
-}
-
-static int atom_poll_link(struct intel_ntb_dev *ndev)
-{
- u32 ntb_ctl;
-
- ntb_ctl = ioread32(ndev->self_mmio + ATOM_NTBCNTL_OFFSET);
-
- if (ntb_ctl == ndev->ntb_ctl)
- return 0;
-
- ndev->ntb_ctl = ntb_ctl;
-
- ndev->lnk_sta = ioread32(ndev->self_mmio + ATOM_LINK_STATUS_OFFSET);
-
- return 1;
-}
-
-static int atom_link_is_up(struct intel_ntb_dev *ndev)
-{
- return ATOM_NTB_CTL_ACTIVE(ndev->ntb_ctl);
-}
-
-static int atom_link_is_err(struct intel_ntb_dev *ndev)
-{
- if (ioread32(ndev->self_mmio + ATOM_LTSSMSTATEJMP_OFFSET)
- & ATOM_LTSSMSTATEJMP_FORCEDETECT)
- return 1;
-
- if (ioread32(ndev->self_mmio + ATOM_IBSTERRRCRVSTS0_OFFSET)
- & ATOM_IBIST_ERR_OFLOW)
- return 1;
-
- return 0;
-}
-
-static inline enum ntb_topo atom_ppd_topo(struct intel_ntb_dev *ndev, u32
ppd)
-{
- struct device *dev = &ndev->ntb.pdev->dev;
-
- switch (ppd & ATOM_PPD_TOPO_MASK) {
- case ATOM_PPD_TOPO_B2B_USD:
- dev_dbg(dev, "PPD %d B2B USD\n", ppd);
- return NTB_TOPO_B2B_USD;
-
- case ATOM_PPD_TOPO_B2B_DSD:
- dev_dbg(dev, "PPD %d B2B DSD\n", ppd);
- return NTB_TOPO_B2B_DSD;
-
- case ATOM_PPD_TOPO_PRI_USD:
- case ATOM_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
- case ATOM_PPD_TOPO_SEC_USD:
- case ATOM_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
- dev_dbg(dev, "PPD %d non B2B disabled\n", ppd);
- return NTB_TOPO_NONE;
- }
-
- dev_dbg(dev, "PPD %d invalid\n", ppd);
- return NTB_TOPO_NONE;
-}
-
-static void atom_link_hb(struct work_struct *work)
-{
- struct intel_ntb_dev *ndev = hb_ndev(work);
- struct device *dev = &ndev->ntb.pdev->dev;
- unsigned long poll_ts;
- void __iomem *mmio;
- u32 status32;
-
- poll_ts = ndev->last_ts + ATOM_LINK_HB_TIMEOUT;
-
- /* Delay polling the link status if an interrupt was received,
- * unless the cached link status says the link is down.
- */
- if (time_after(poll_ts, jiffies) && atom_link_is_up(ndev)) {
- schedule_delayed_work(&ndev->hb_timer, poll_ts - jiffies);
- return;
- }
-
- if (atom_poll_link(ndev))
- ntb_link_event(&ndev->ntb);
-
- if (atom_link_is_up(ndev) || !atom_link_is_err(ndev)) {
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
- return;
- }
-
- /* Link is down with error: recover the link! */
-
- mmio = ndev->self_mmio;
-
- /* Driver resets the NTB ModPhy lanes - magic! */
- iowrite8(0xe0, mmio + ATOM_MODPHY_PCSREG6);
- iowrite8(0x40, mmio + ATOM_MODPHY_PCSREG4);
- iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG4);
- iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG6);
-
- /* Driver waits 100ms to allow the NTB ModPhy to settle */
- msleep(100);
-
- /* Clear AER Errors, write to clear */
- status32 = ioread32(mmio + ATOM_ERRCORSTS_OFFSET);
- dev_dbg(dev, "ERRCORSTS = %x\n", status32);
- status32 &= PCI_ERR_COR_REP_ROLL;
- iowrite32(status32, mmio + ATOM_ERRCORSTS_OFFSET);
-
- /* Clear unexpected electrical idle event in LTSSM, write to clear */
- status32 = ioread32(mmio + ATOM_LTSSMERRSTS0_OFFSET);
- dev_dbg(dev, "LTSSMERRSTS0 = %x\n", status32);
- status32 |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
- iowrite32(status32, mmio + ATOM_LTSSMERRSTS0_OFFSET);
-
- /* Clear DeSkew Buffer error, write to clear */
- status32 = ioread32(mmio + ATOM_DESKEWSTS_OFFSET);
- dev_dbg(dev, "DESKEWSTS = %x\n", status32);
- status32 |= ATOM_DESKEWSTS_DBERR;
- iowrite32(status32, mmio + ATOM_DESKEWSTS_OFFSET);
-
- status32 = ioread32(mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
- dev_dbg(dev, "IBSTERRRCRVSTS0 = %x\n", status32);
- status32 &= ATOM_IBIST_ERR_OFLOW;
- iowrite32(status32, mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
-
- /* Releases the NTB state machine to allow the link to retrain */
- status32 = ioread32(mmio + ATOM_LTSSMSTATEJMP_OFFSET);
- dev_dbg(dev, "LTSSMSTATEJMP = %x\n", status32);
- status32 &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
- iowrite32(status32, mmio + ATOM_LTSSMSTATEJMP_OFFSET);
-
- /* There is a potential race between the 2 NTB devices recovering at
the
- * same time. If the times are the same, the link will not recover
and
- * the driver will be stuck in this loop forever. Add a random
interval
- * to the recovery time to prevent this race.
- */
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_RECOVERY_TIME
- + prandom_u32() % ATOM_LINK_RECOVERY_TIME);
-}
-
-static int atom_init_isr(struct intel_ntb_dev *ndev)
-{
- int rc;
-
- rc = ndev_init_isr(ndev, 1, ATOM_DB_MSIX_VECTOR_COUNT,
- ATOM_DB_MSIX_VECTOR_SHIFT, ATOM_DB_TOTAL_SHIFT);
- if (rc)
- return rc;
-
- /* ATOM doesn't have link status interrupt, poll on that platform */
- ndev->last_ts = jiffies;
- INIT_DELAYED_WORK(&ndev->hb_timer, atom_link_hb);
- schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
-
- return 0;
-}
-
-static void atom_deinit_isr(struct intel_ntb_dev *ndev)
-{
- cancel_delayed_work_sync(&ndev->hb_timer);
- ndev_deinit_isr(ndev);
-}
-
-static int atom_init_ntb(struct intel_ntb_dev *ndev)
-{
- ndev->mw_count = ATOM_MW_COUNT;
- ndev->spad_count = ATOM_SPAD_COUNT;
- ndev->db_count = ATOM_DB_COUNT;
-
- switch (ndev->ntb.topo) {
- case NTB_TOPO_B2B_USD:
- case NTB_TOPO_B2B_DSD:
- ndev->self_reg = &atom_pri_reg;
- ndev->peer_reg = &atom_b2b_reg;
- ndev->xlat_reg = &atom_sec_xlat;
-
- /* Enable Bus Master and Memory Space on the secondary side */
- iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
- ndev->self_mmio + ATOM_SPCICMD_OFFSET);
-
- break;
-
- default:
- return -EINVAL;
- }
-
- ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
-
- return 0;
-}
-
-static int atom_init_dev(struct intel_ntb_dev *ndev)
-{
- u32 ppd;
- int rc;
-
- rc = pci_read_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET, &ppd);
- if (rc)
- return -EIO;
-
- ndev->ntb.topo = atom_ppd_topo(ndev, ppd);
- if (ndev->ntb.topo == NTB_TOPO_NONE)
- return -EINVAL;
-
- rc = atom_init_ntb(ndev);
- if (rc)
- return rc;
-
- rc = atom_init_isr(ndev);
- if (rc)
- return rc;
-
- if (ndev->ntb.topo != NTB_TOPO_SEC) {
- /* Initiate PCI-E link training */
- rc = pci_write_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET,
- ppd | ATOM_PPD_INIT_LINK);
- if (rc)
- return rc;
- }
-
- return 0;
-}
-
-static void atom_deinit_dev(struct intel_ntb_dev *ndev)
-{
- atom_deinit_isr(ndev);
-}
-
/* Skylake Xeon NTB */
static int skx_poll_link(struct intel_ntb_dev *ndev)
@@ -2738,24 +2486,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
node = dev_to_node(&pdev->dev);
- if (pdev_is_atom(pdev)) {
- ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
- if (!ndev) {
- rc = -ENOMEM;
- goto err_ndev;
- }
-
- ndev_init_struct(ndev, pdev);
-
- rc = intel_ntb_init_pci(ndev, pdev);
- if (rc)
- goto err_init_pci;
-
- rc = atom_init_dev(ndev);
- if (rc)
- goto err_init_dev;
-
- } else if (pdev_is_xeon(pdev)) {
+ if (pdev_is_xeon(pdev)) {
ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
if (!ndev) {
rc = -ENOMEM;
@@ -2811,9 +2542,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
err_register:
ndev_deinit_debugfs(ndev);
- if (pdev_is_atom(pdev))
- atom_deinit_dev(ndev);
- else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
+ if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
xeon_deinit_dev(ndev);
err_init_dev:
intel_ntb_deinit_pci(ndev);
@@ -2829,41 +2558,12 @@ static void intel_ntb_pci_remove(struct pci_dev
*pdev)
ntb_unregister_device(&ndev->ntb);
ndev_deinit_debugfs(ndev);
- if (pdev_is_atom(pdev))
- atom_deinit_dev(ndev);
- else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
+ if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
xeon_deinit_dev(ndev);
intel_ntb_deinit_pci(ndev);
kfree(ndev);
}
-static const struct intel_ntb_reg atom_reg = {
- .poll_link = atom_poll_link,
- .link_is_up = atom_link_is_up,
- .db_ioread = atom_db_ioread,
- .db_iowrite = atom_db_iowrite,
- .db_size = sizeof(u64),
- .ntb_ctl = ATOM_NTBCNTL_OFFSET,
- .mw_bar = {2, 4},
-};
-
-static const struct intel_ntb_alt_reg atom_pri_reg = {
- .db_bell = ATOM_PDOORBELL_OFFSET,
- .db_mask = ATOM_PDBMSK_OFFSET,
- .spad = ATOM_SPAD_OFFSET,
-};
-
-static const struct intel_ntb_alt_reg atom_b2b_reg = {
- .db_bell = ATOM_B2B_DOORBELL_OFFSET,
- .spad = ATOM_B2B_SPAD_OFFSET,
-};
-
-static const struct intel_ntb_xlat_reg atom_sec_xlat = {
- /* FIXME : .bar0_base = ATOM_SBAR0BASE_OFFSET, */
- /* FIXME : .bar2_limit = ATOM_SBAR2LMT_OFFSET, */
- .bar2_xlat = ATOM_SBAR2XLAT_OFFSET,
-};
-
static const struct intel_ntb_reg xeon_reg = {
.poll_link = xeon_poll_link,
.link_is_up = xeon_link_is_up,
@@ -3020,7 +2720,6 @@ static const struct file_operations
intel_ntb_debugfs_info = {
};
static const struct pci_device_id intel_ntb_pci_tbl[] = {
- {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BWD)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.h
b/drivers/ntb/hw/intel/ntb_hw_intel.h
index a8b17f3..9d2c6b6 100644
--- a/drivers/ntb/hw/intel/ntb_hw_intel.h
+++ b/drivers/ntb/hw/intel/ntb_hw_intel.h
@@ -66,7 +66,6 @@
#define PCI_DEVICE_ID_INTEL_NTB_B2B_HSX 0x2F0D
#define PCI_DEVICE_ID_INTEL_NTB_PS_HSX 0x2F0E
#define PCI_DEVICE_ID_INTEL_NTB_SS_HSX 0x2F0F
-#define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD 0x0C4E
#define PCI_DEVICE_ID_INTEL_NTB_B2B_BDX 0x6F0D
#define PCI_DEVICE_ID_INTEL_NTB_PS_BDX 0x6F0E
#define PCI_DEVICE_ID_INTEL_NTB_SS_BDX 0x6F0F
@@ -197,63 +196,6 @@
#define SKX_DB_TOTAL_SHIFT 33
#define SKX_SPAD_COUNT 16
-/* Intel Atom hardware */
-
-#define ATOM_SBAR2XLAT_OFFSET 0x0008
-#define ATOM_PDOORBELL_OFFSET 0x0020
-#define ATOM_PDBMSK_OFFSET 0x0028
-#define ATOM_NTBCNTL_OFFSET 0x0060
-#define ATOM_SPAD_OFFSET 0x0080
-#define ATOM_PPD_OFFSET 0x00d4
-#define ATOM_PBAR2XLAT_OFFSET 0x8008
-#define ATOM_B2B_DOORBELL_OFFSET 0x8020
-#define ATOM_B2B_SPAD_OFFSET 0x8080
-#define ATOM_SPCICMD_OFFSET 0xb004
-#define ATOM_LINK_STATUS_OFFSET 0xb052
-#define ATOM_ERRCORSTS_OFFSET 0xb110
-#define ATOM_IP_BASE 0xc000
-#define ATOM_DESKEWSTS_OFFSET (ATOM_IP_BASE + 0x3024)
-#define ATOM_LTSSMERRSTS0_OFFSET (ATOM_IP_BASE + 0x3180)
-#define ATOM_LTSSMSTATEJMP_OFFSET (ATOM_IP_BASE + 0x3040)
-#define ATOM_IBSTERRRCRVSTS0_OFFSET (ATOM_IP_BASE + 0x3324)
-#define ATOM_MODPHY_PCSREG4 0x1c004
-#define ATOM_MODPHY_PCSREG6 0x1c006
-
-#define ATOM_PPD_INIT_LINK 0x0008
-#define ATOM_PPD_CONN_MASK 0x0300
-#define ATOM_PPD_CONN_TRANSPARENT 0x0000
-#define ATOM_PPD_CONN_B2B 0x0100
-#define ATOM_PPD_CONN_RP 0x0200
-#define ATOM_PPD_DEV_MASK 0x1000
-#define ATOM_PPD_DEV_USD 0x0000
-#define ATOM_PPD_DEV_DSD 0x1000
-#define ATOM_PPD_TOPO_MASK (ATOM_PPD_CONN_MASK | ATOM_PPD_DEV_MASK)
-#define ATOM_PPD_TOPO_PRI_USD (ATOM_PPD_CONN_TRANSPARENT |
ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_PRI_DSD (ATOM_PPD_CONN_TRANSPARENT |
ATOM_PPD_DEV_DSD)
-#define ATOM_PPD_TOPO_SEC_USD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_SEC_DSD (ATOM_PPD_CONN_RP | ATOM_PPD_DEV_DSD)
-#define ATOM_PPD_TOPO_B2B_USD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_USD)
-#define ATOM_PPD_TOPO_B2B_DSD (ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_DSD)
-
-#define ATOM_MW_COUNT 2
-#define ATOM_DB_COUNT 34
-#define ATOM_DB_VALID_MASK (BIT_ULL(ATOM_DB_COUNT) - 1)
-#define ATOM_DB_MSIX_VECTOR_COUNT 34
-#define ATOM_DB_MSIX_VECTOR_SHIFT 1
-#define ATOM_DB_TOTAL_SHIFT 34
-#define ATOM_SPAD_COUNT 16
-
-#define ATOM_NTB_CTL_DOWN_BIT BIT(16)
-#define ATOM_NTB_CTL_ACTIVE(x) !(x & ATOM_NTB_CTL_DOWN_BIT)
-
-#define ATOM_DESKEWSTS_DBERR BIT(15)
-#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI BIT(20)
-#define ATOM_LTSSMSTATEJMP_FORCEDETECT BIT(2)
-#define ATOM_IBIST_ERR_OFLOW 0x7FFF7FFF
-
-#define ATOM_LINK_HB_TIMEOUT msecs_to_jiffies(1000)
-#define ATOM_LINK_RECOVERY_TIME msecs_to_jiffies(500)
-
/* Ntb control and link status */
#define NTB_CTL_CFG_LOCK BIT(0)
--
You received this message because you are subscribed to the Google Groups
"linux-ntb" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to linux-ntb+unsubscribe@googlegroups.com<mailto:linux-ntb+unsubscribe@googlegroups.com>.
To post to this group, send email to linux-ntb@googlegroups.com<mailto:linux-ntb@googlegroups.com>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/linux-ntb/CAPoiz9wn3f5x-aCJTMx7S6xS%3DuiG2ZYOJHxiAk2Unrqc58EbiQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "linux-ntb" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-ntb+unsubscribe@googlegroups.com<mailto:linux-ntb+unsubscribe@googlegroups.com>.
To post to this group, send email to linux-ntb@googlegroups.com<mailto:linux-ntb@googlegroups.com>.
To view this discussion on the web visit https://groups.google.com/d/msgid/linux-ntb/CAPoiz9wzzVoft0-UE5efsZr_FkFxNfxLJp4AbYgR%3DtRpssuBgQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
[-- Attachment #2: Type: text/html, Size: 85381 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-11-19 5:01 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-10 23:23 [PATCH] ntb: remove Intel Atom NTB driver support Dave Jiang
2017-11-13 14:06 ` Allen Hubbe
2017-11-19 1:55 ` Jon Mason
2017-11-19 2:02 ` Jiang, Dave
2017-11-19 4:51 ` Jon Mason
2017-11-19 5:01 ` Jiang, Dave
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.