Skip to content

Commit

Permalink
nfp: Use pci_get_dsn()
Browse files Browse the repository at this point in the history
Use the newly added pci_get_dsn() function for obtaining the 64-bit
Device Serial Number in the nfp6000_read_serial and
nfp_6000_get_interface functions.

pci_get_dsn() reports the Device Serial number as a u64 value created by
combining two pci_read_config_dword functions. The lower 16 bits
represent the device interface value, and the next 48 bits represent the
serial value. Use put_unaligned_be32 and put_unaligned_be16 to convert
the serial value portion into a Big Endian formatted serial u8 array.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jacob Keller authored and David S. Miller committed Mar 6, 2020
1 parent f998958 commit 6160011
Showing 1 changed file with 9 additions and 15 deletions.
24 changes: 9 additions & 15 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c
Original file line number Diff line number Diff line change
Expand Up @@ -1247,38 +1247,32 @@ static void nfp6000_free(struct nfp_cpp *cpp)
static int nfp6000_read_serial(struct device *dev, u8 *serial)
{
struct pci_dev *pdev = to_pci_dev(dev);
int pos;
u32 reg;
u64 dsn;

pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DSN);
if (!pos) {
dsn = pci_get_dsn(pdev);
if (!dsn) {
dev_err(dev, "can't find PCIe Serial Number Capability\n");
return -EINVAL;
}

pci_read_config_dword(pdev, pos + 4, &reg);
put_unaligned_be16(reg >> 16, serial + 4);
pci_read_config_dword(pdev, pos + 8, &reg);
put_unaligned_be32(reg, serial);
put_unaligned_be32((u32)(dsn >> 32), serial);
put_unaligned_be16((u16)(dsn >> 16), serial + 4);

return 0;
}

static int nfp6000_get_interface(struct device *dev)
{
struct pci_dev *pdev = to_pci_dev(dev);
int pos;
u32 reg;
u64 dsn;

pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DSN);
if (!pos) {
dsn = pci_get_dsn(pdev);
if (!dsn) {
dev_err(dev, "can't find PCIe Serial Number Capability\n");
return -EINVAL;
}

pci_read_config_dword(pdev, pos + 4, &reg);

return reg & 0xffff;
return dsn & 0xffff;
}

static const struct nfp_cpp_operations nfp6000_pcie_ops = {
Expand Down

0 comments on commit 6160011

Please sign in to comment.