From f9b60448ad77032ae3a3f357a28280bbce1004dd Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 4 Jun 2013 13:37:01 -0400 Subject: [PATCH] Fix build issue with PowerPC MSI patches (rhbz 962496) --- kernel.spec | 5 ++++- ...Make-32-bit-MSI-quirk-work-on-system.patch | 22 ++++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/kernel.spec b/kernel.spec index d9a7be5b9..aaceefd1a 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2321,7 +2321,10 @@ fi # and build. %changelog -* Mon Jun 03 2013 Josh Boyer +* Tue Jun 04 2013 Josh Boyer +- Fix build issue with PowerPC MSI patches (rhbz 962496) + +* Mon Jun 03 2013 Josh Boyer - 3.9.4-301 - Fix UEFI anti-bricking code (rhbz 964335) - Add patches to fix PowerPC MSI handling (rhbz 962496) diff --git a/powerpc-pseries-Make-32-bit-MSI-quirk-work-on-system.patch b/powerpc-pseries-Make-32-bit-MSI-quirk-work-on-system.patch index 6edd14b23..8add1a4ed 100644 --- a/powerpc-pseries-Make-32-bit-MSI-quirk-work-on-system.patch +++ b/powerpc-pseries-Make-32-bit-MSI-quirk-work-on-system.patch @@ -1,4 +1,4 @@ -From ad735c038a1c3273b605c398a765fdd525527ef7 Mon Sep 17 00:00:00 2001 +From ffbc2a5d4bb9c758867332d2f4d521a02375e43a Mon Sep 17 00:00:00 2001 From: Brian King Date: Wed, 22 May 2013 11:07:46 +0000 Subject: [PATCH] powerpc/pseries: Make 32-bit MSI quirk work on systems @@ -16,19 +16,20 @@ this to configurations where this hack is needed and tested to work. Signed-off-by: Brian King Signed-off-by: Benjamin Herrenschmidt --- - arch/powerpc/platforms/pseries/msi.c | 40 +++++++++++++++++++++++++++++++++--- - 1 file changed, 37 insertions(+), 3 deletions(-) + arch/powerpc/platforms/pseries/msi.c | 42 +++++++++++++++++++++++++++++++++--- + 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/platforms/pseries/msi.c b/arch/powerpc/platforms/pseries/msi.c -index 420524e..cd7d23d 100644 +index 420524e..5a75b02 100644 --- a/arch/powerpc/platforms/pseries/msi.c +++ b/arch/powerpc/platforms/pseries/msi.c -@@ -394,6 +394,23 @@ static int check_msix_entries(struct pci_dev *pdev) +@@ -394,6 +394,25 @@ static int check_msix_entries(struct pci_dev *pdev) return 0; } +static void rtas_hack_32bit_msi_gen2(struct pci_dev *pdev) +{ ++ int pos; + u32 addr_hi, addr_lo; + + /* @@ -38,16 +39,17 @@ index 420524e..cd7d23d 100644 + */ + dev_info(&pdev->dev, + "rtas_msi: No 32 bit MSI firmware support, forcing 32 bit MSI\n"); -+ pci_read_config_dword(pdev, pdev->msi_cap + PCI_MSI_ADDRESS_HI, &addr_hi); ++ pos = pci_find_capability(pdev, PCI_CAP_ID_MSI); ++ pci_read_config_dword(pdev, pos + PCI_MSI_ADDRESS_HI, &addr_hi); + addr_lo = 0xffff0000 | ((addr_hi >> (48 - 32)) << 4); -+ pci_write_config_dword(pdev, pdev->msi_cap + PCI_MSI_ADDRESS_LO, addr_lo); -+ pci_write_config_dword(pdev, pdev->msi_cap + PCI_MSI_ADDRESS_HI, 0); ++ pci_write_config_dword(pdev, pos + PCI_MSI_ADDRESS_LO, addr_lo); ++ pci_write_config_dword(pdev, pos + PCI_MSI_ADDRESS_HI, 0); +} + static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type) { struct pci_dn *pdn; -@@ -401,6 +418,7 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type) +@@ -401,6 +420,7 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type) struct msi_desc *entry; struct msi_msg msg; int nvec = nvec_in; @@ -55,7 +57,7 @@ index 420524e..cd7d23d 100644 pdn = get_pdn(pdev); if (!pdn) -@@ -428,15 +446,31 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type) +@@ -428,15 +448,31 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type) */ again: if (type == PCI_CAP_ID_MSI) {