mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 14:45:11 +07:00
nfp: Use pci_get_dsn()
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>
This commit is contained in:
parent
f998958df2
commit
61600112f0
@ -1247,19 +1247,16 @@ 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, ®);
|
||||
put_unaligned_be16(reg >> 16, serial + 4);
|
||||
pci_read_config_dword(pdev, pos + 8, ®);
|
||||
put_unaligned_be32(reg, serial);
|
||||
put_unaligned_be32((u32)(dsn >> 32), serial);
|
||||
put_unaligned_be16((u16)(dsn >> 16), serial + 4);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1267,18 +1264,15 @@ static int nfp6000_read_serial(struct device *dev, u8 *serial)
|
||||
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, ®);
|
||||
|
||||
return reg & 0xffff;
|
||||
return dsn & 0xffff;
|
||||
}
|
||||
|
||||
static const struct nfp_cpp_operations nfp6000_pcie_ops = {
|
||||
|
Loading…
Reference in New Issue
Block a user