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

Merge tag 'spi-nor/for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux into mtd/next

SPI NOR core changes:
- Print all JEDEC ID bytes on error
- Fix comment of spi_nor_find_best_erase_type()
- Add region locking flags for s25fl512s

SPI NOR controller drivers changes:
- intel-spi:
* Avoid crossing 4K address boundary on read/write
* Add support for Intel Comet Lake SPI serial flash

+15 -4
+1
drivers/mtd/spi-nor/intel-spi-pci.c
··· 63 63 } 64 64 65 65 static const struct pci_device_id intel_spi_pci_ids[] = { 66 + { PCI_VDEVICE(INTEL, 0x02a4), (unsigned long)&bxt_info }, 66 67 { PCI_VDEVICE(INTEL, 0x18e0), (unsigned long)&bxt_info }, 67 68 { PCI_VDEVICE(INTEL, 0x19e0), (unsigned long)&bxt_info }, 68 69 { PCI_VDEVICE(INTEL, 0x34a4), (unsigned long)&bxt_info },
+8
drivers/mtd/spi-nor/intel-spi.c
··· 632 632 while (len > 0) { 633 633 block_size = min_t(size_t, len, INTEL_SPI_FIFO_SZ); 634 634 635 + /* Read cannot cross 4K boundary */ 636 + block_size = min_t(loff_t, from + block_size, 637 + round_up(from + 1, SZ_4K)) - from; 638 + 635 639 writel(from, ispi->base + FADDR); 636 640 637 641 val = readl(ispi->base + HSFSTS_CTL); ··· 688 684 689 685 while (len > 0) { 690 686 block_size = min_t(size_t, len, INTEL_SPI_FIFO_SZ); 687 + 688 + /* Write cannot cross 4K boundary */ 689 + block_size = min_t(loff_t, to + block_size, 690 + round_up(to + 1, SZ_4K)) - to; 691 691 692 692 writel(to, ispi->base + FADDR); 693 693
+6 -4
drivers/mtd/spi-nor/spi-nor.c
··· 744 744 u8 erase_mask = region->offset & SNOR_ERASE_TYPE_MASK; 745 745 746 746 /* 747 - * Erase types are ordered by size, with the biggest erase type at 747 + * Erase types are ordered by size, with the smallest erase type at 748 748 * index 0. 749 749 */ 750 750 for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) { ··· 1905 1905 SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, 1906 1906 { "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, USE_CLSR) }, 1907 1907 { "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, 1908 - { "s25fl512s", INFO6(0x010220, 0x4d0080, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, 1908 + { "s25fl512s", INFO6(0x010220, 0x4d0080, 256 * 1024, 256, 1909 + SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | 1910 + SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | USE_CLSR) }, 1909 1911 { "s25fs512s", INFO6(0x010220, 0x4d0081, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) }, 1910 1912 { "s70fl01gs", INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) }, 1911 1913 { "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024, 64, 0) }, ··· 2073 2071 return &spi_nor_ids[tmp]; 2074 2072 } 2075 2073 } 2076 - dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n", 2077 - id[0], id[1], id[2]); 2074 + dev_err(nor->dev, "unrecognized JEDEC id bytes: %*ph\n", 2075 + SPI_NOR_MAX_ID_LEN, id); 2078 2076 return ERR_PTR(-ENODEV); 2079 2077 } 2080 2078