Commit f0c260f1 authored by Basavaraj Natikar's avatar Basavaraj Natikar Committed by Jon Mason
Browse files

ntb_hw_amd: Update amd_ntb_get_link_status to support latest generation secondary topology



In the NTB secondary topology configuration of the latest generation,
the device behaves like an endpoint. Hence, add endpoint support and
update amd_ntb_get_link_status to accommodate endpoint devices.

Co-developed-by: default avatarSanath S <Sanath.S@amd.com>
Signed-off-by: default avatarSanath S <Sanath.S@amd.com>
Signed-off-by: default avatarBasavaraj Natikar <Basavaraj.Natikar@amd.com>
Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
parent 8f5ae30d
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -197,13 +197,22 @@ static int amd_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx,

static int amd_ntb_get_link_status(struct amd_ntb_dev *ndev)
{
	struct pci_dev *pdev = NULL;
	struct pci_dev *pdev = ndev->ntb.pdev;
	struct pci_dev *pci_swds = NULL;
	struct pci_dev *pci_swus = NULL;
	u32 stat;
	int rc;

	if (ndev->ntb.topo == NTB_TOPO_SEC) {
		if (ndev->dev_data->is_endpoint) {
			rc = pcie_capability_read_dword(pdev, PCI_EXP_LNKCTL, &stat);
			if (rc)
				return rc;

			ndev->lnk_sta = stat;
			return 0;
		}

		/* Locate the pointer to Downstream Switch for this device */
		pci_swds = pci_upstream_bridge(ndev->ntb.pdev);
		if (pci_swds) {
@@ -1311,6 +1320,11 @@ static const struct ntb_dev_data dev_data[] = {
		.mw_count = 2,
		.mw_idx = 2,
	},
	{ /* for device 0x17d7 */
		.mw_count = 2,
		.mw_idx = 2,
		.is_endpoint = true,
	},
};

static const struct pci_device_id amd_ntb_pci_tbl[] = {
@@ -1319,6 +1333,8 @@ static const struct pci_device_id amd_ntb_pci_tbl[] = {
	{ PCI_VDEVICE(AMD, 0x14c0), (kernel_ulong_t)&dev_data[1] },
	{ PCI_VDEVICE(AMD, 0x14c3), (kernel_ulong_t)&dev_data[1] },
	{ PCI_VDEVICE(AMD, 0x155a), (kernel_ulong_t)&dev_data[1] },
	{ PCI_VDEVICE(AMD, 0x17d4), (kernel_ulong_t)&dev_data[1] },
	{ PCI_VDEVICE(AMD, 0x17d7), (kernel_ulong_t)&dev_data[2] },
	{ PCI_VDEVICE(HYGON, 0x145b), (kernel_ulong_t)&dev_data[0] },
	{ 0, }
};
+1 −0
Original line number Diff line number Diff line
@@ -168,6 +168,7 @@ enum {
struct ntb_dev_data {
	const unsigned char mw_count;
	const unsigned int mw_idx;
	const bool is_endpoint;
};

struct amd_ntb_dev;