Skip to content

Commit 8d99129

Browse files
Shyam Sundar S Kjwrdegoede
authored andcommitted
platform/x86/amd: pmc: Move out of BIOS SMN pair for STB init
The current SMN index used for the driver probe seems to be meant for the BIOS pair and there are potential concurrency problems that can occur with an inopportune SMI. It is been advised to use SMN_INDEX_0 instead of SMN_INDEX_6, which is what amd_nb.c provides and this function has protections to ensure that only one caller can use it at a time. Fixes: 426c0ff ("platform/x86: amd-pmc: Add support for AMD Smart Trace Buffer") Co-developed-by: Sanket Goswami <Sanket.Goswami@amd.com> Signed-off-by: Sanket Goswami <Sanket.Goswami@amd.com> Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com> Link: https://lore.kernel.org/r/20230409185348.556161-7-Shyam-sundar.S-k@amd.com Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
1 parent 310e782 commit 8d99129

1 file changed

Lines changed: 4 additions & 22 deletions

File tree

  • drivers/platform/x86/amd

drivers/platform/x86/amd/pmc.c

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@
3838
#define AMD_PMC_SCRATCH_REG_YC 0xD14
3939

4040
/* STB Registers */
41-
#define AMD_PMC_STB_INDEX_ADDRESS 0xF8
42-
#define AMD_PMC_STB_INDEX_DATA 0xFC
4341
#define AMD_PMC_STB_PMI_0 0x03E30600
4442
#define AMD_PMC_STB_S2IDLE_PREPARE 0xC6000001
4543
#define AMD_PMC_STB_S2IDLE_RESTORE 0xC6000002
@@ -923,17 +921,9 @@ static int amd_pmc_write_stb(struct amd_pmc_dev *dev, u32 data)
923921
{
924922
int err;
925923

926-
err = pci_write_config_dword(dev->rdev, AMD_PMC_STB_INDEX_ADDRESS, AMD_PMC_STB_PMI_0);
924+
err = amd_smn_write(0, AMD_PMC_STB_PMI_0, data);
927925
if (err) {
928-
dev_err(dev->dev, "failed to write addr in stb: 0x%X\n",
929-
AMD_PMC_STB_INDEX_ADDRESS);
930-
return pcibios_err_to_errno(err);
931-
}
932-
933-
err = pci_write_config_dword(dev->rdev, AMD_PMC_STB_INDEX_DATA, data);
934-
if (err) {
935-
dev_err(dev->dev, "failed to write data in stb: 0x%X\n",
936-
AMD_PMC_STB_INDEX_DATA);
926+
dev_err(dev->dev, "failed to write data in stb: 0x%X\n", AMD_PMC_STB_PMI_0);
937927
return pcibios_err_to_errno(err);
938928
}
939929

@@ -944,18 +934,10 @@ static int amd_pmc_read_stb(struct amd_pmc_dev *dev, u32 *buf)
944934
{
945935
int i, err;
946936

947-
err = pci_write_config_dword(dev->rdev, AMD_PMC_STB_INDEX_ADDRESS, AMD_PMC_STB_PMI_0);
948-
if (err) {
949-
dev_err(dev->dev, "error writing addr to stb: 0x%X\n",
950-
AMD_PMC_STB_INDEX_ADDRESS);
951-
return pcibios_err_to_errno(err);
952-
}
953-
954937
for (i = 0; i < FIFO_SIZE; i++) {
955-
err = pci_read_config_dword(dev->rdev, AMD_PMC_STB_INDEX_DATA, buf++);
938+
err = amd_smn_read(0, AMD_PMC_STB_PMI_0, buf++);
956939
if (err) {
957-
dev_err(dev->dev, "error reading data from stb: 0x%X\n",
958-
AMD_PMC_STB_INDEX_DATA);
940+
dev_err(dev->dev, "error reading data from stb: 0x%X\n", AMD_PMC_STB_PMI_0);
959941
return pcibios_err_to_errno(err);
960942
}
961943
}

0 commit comments

Comments
 (0)