Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'powerpc-4.17-6' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc fixes from Michael Ellerman:
"Just three commits.

The two cxl ones are not fixes per se, but they modify code that was
added this cycle so that it will work with a recent firmware change.

And then a fix for a recent commit that added sleeps in the NVRAM
code, which needs to be more careful and not sleep if eg. we're called
in the panic() path.

Thanks to Nicholas Piggin, Philippe Bergheaud, Christophe Lombard"

* tag 'powerpc-4.17-6' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
powerpc/powernv: Fix NVRAM sleep in invalid context when crashing
cxl: Report the tunneled operations status
cxl: Set the PBCQ Tunnel BAR register when enabling capi mode

+43 -2
+8
Documentation/ABI/testing/sysfs-class-cxl
··· 244 244 Returns 1 if the psl timebase register is synchronized 245 245 with the core timebase register, 0 otherwise. 246 246 Users: https://github.com/ibm-capi/libcxl 247 + 248 + What: /sys/class/cxl/<card>/tunneled_ops_supported 249 + Date: May 2018 250 + Contact: linuxppc-dev@lists.ozlabs.org 251 + Description: read only 252 + Returns 1 if tunneled operations are supported in capi mode, 253 + 0 otherwise. 254 + Users: https://github.com/ibm-capi/libcxl
+12 -2
arch/powerpc/platforms/powernv/opal-nvram.c
··· 44 44 return count; 45 45 } 46 46 47 + /* 48 + * This can be called in the panic path with interrupts off, so use 49 + * mdelay in that case. 50 + */ 47 51 static ssize_t opal_nvram_write(char *buf, size_t count, loff_t *index) 48 52 { 49 53 s64 rc = OPAL_BUSY; ··· 62 58 while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) { 63 59 rc = opal_write_nvram(__pa(buf), count, off); 64 60 if (rc == OPAL_BUSY_EVENT) { 65 - msleep(OPAL_BUSY_DELAY_MS); 61 + if (in_interrupt() || irqs_disabled()) 62 + mdelay(OPAL_BUSY_DELAY_MS); 63 + else 64 + msleep(OPAL_BUSY_DELAY_MS); 66 65 opal_poll_events(NULL); 67 66 } else if (rc == OPAL_BUSY) { 68 - msleep(OPAL_BUSY_DELAY_MS); 67 + if (in_interrupt() || irqs_disabled()) 68 + mdelay(OPAL_BUSY_DELAY_MS); 69 + else 70 + msleep(OPAL_BUSY_DELAY_MS); 69 71 } 70 72 } 71 73
+1
drivers/misc/cxl/cxl.h
··· 717 717 bool perst_select_user; 718 718 bool perst_same_image; 719 719 bool psl_timebase_synced; 720 + bool tunneled_ops_supported; 720 721 721 722 /* 722 723 * number of contexts mapped on to this card. Possible values are:
+12
drivers/misc/cxl/pci.c
··· 1742 1742 /* Required for devices using CAPP DMA mode, harmless for others */ 1743 1743 pci_set_master(dev); 1744 1744 1745 + adapter->tunneled_ops_supported = false; 1746 + 1747 + if (cxl_is_power9()) { 1748 + if (pnv_pci_set_tunnel_bar(dev, 0x00020000E0000000ull, 1)) 1749 + dev_info(&dev->dev, "Tunneled operations unsupported\n"); 1750 + else 1751 + adapter->tunneled_ops_supported = true; 1752 + } 1753 + 1745 1754 if ((rc = pnv_phb_to_cxl_mode(dev, adapter->native->sl_ops->capi_mode))) 1746 1755 goto err; 1747 1756 ··· 1776 1767 static void cxl_deconfigure_adapter(struct cxl *adapter) 1777 1768 { 1778 1769 struct pci_dev *pdev = to_pci_dev(adapter->dev.parent); 1770 + 1771 + if (cxl_is_power9()) 1772 + pnv_pci_set_tunnel_bar(pdev, 0x00020000E0000000ull, 0); 1779 1773 1780 1774 cxl_native_release_psl_err_irq(adapter); 1781 1775 cxl_unmap_adapter_regs(adapter);
+10
drivers/misc/cxl/sysfs.c
··· 78 78 return scnprintf(buf, PAGE_SIZE, "%i\n", adapter->psl_timebase_synced); 79 79 } 80 80 81 + static ssize_t tunneled_ops_supported_show(struct device *device, 82 + struct device_attribute *attr, 83 + char *buf) 84 + { 85 + struct cxl *adapter = to_cxl_adapter(device); 86 + 87 + return scnprintf(buf, PAGE_SIZE, "%i\n", adapter->tunneled_ops_supported); 88 + } 89 + 81 90 static ssize_t reset_adapter_store(struct device *device, 82 91 struct device_attribute *attr, 83 92 const char *buf, size_t count) ··· 192 183 __ATTR_RO(base_image), 193 184 __ATTR_RO(image_loaded), 194 185 __ATTR_RO(psl_timebase_synced), 186 + __ATTR_RO(tunneled_ops_supported), 195 187 __ATTR_RW(load_image_on_perst), 196 188 __ATTR_RW(perst_reloads_same_image), 197 189 __ATTR(reset, S_IWUSR, NULL, reset_adapter_store),