1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Intel PCH/PCU SPI flash driver. 4 * 5 * Copyright (C) 2016 - 2022, Intel Corporation 6 * Author: Mika Westerberg <mika.westerberg@linux.intel.com> 7 */ 8 9 #include <linux/iopoll.h> 10 #include <linux/module.h> 11 12 #include <linux/mtd/partitions.h> 13 #include <linux/mtd/spi-nor.h> 14 15 #include <linux/spi/flash.h> 16 #include <linux/spi/spi.h> 17 #include <linux/spi/spi-mem.h> 18 19 #include "spi-intel.h" 20 21 /* Offsets are from @ispi->base */ 22 #define BFPREG 0x00 23 24 #define HSFSTS_CTL 0x04 25 #define HSFSTS_CTL_FSMIE BIT(31) 26 #define HSFSTS_CTL_FDBC_SHIFT 24 27 #define HSFSTS_CTL_FDBC_MASK (0x3f << HSFSTS_CTL_FDBC_SHIFT) 28 29 #define HSFSTS_CTL_FCYCLE_SHIFT 17 30 #define HSFSTS_CTL_FCYCLE_MASK (0x0f << HSFSTS_CTL_FCYCLE_SHIFT) 31 /* HW sequencer opcodes */ 32 #define HSFSTS_CTL_FCYCLE_READ (0x00 << HSFSTS_CTL_FCYCLE_SHIFT) 33 #define HSFSTS_CTL_FCYCLE_WRITE (0x02 << HSFSTS_CTL_FCYCLE_SHIFT) 34 #define HSFSTS_CTL_FCYCLE_ERASE (0x03 << HSFSTS_CTL_FCYCLE_SHIFT) 35 #define HSFSTS_CTL_FCYCLE_ERASE_64K (0x04 << HSFSTS_CTL_FCYCLE_SHIFT) 36 #define HSFSTS_CTL_FCYCLE_RDID (0x06 << HSFSTS_CTL_FCYCLE_SHIFT) 37 #define HSFSTS_CTL_FCYCLE_WRSR (0x07 << HSFSTS_CTL_FCYCLE_SHIFT) 38 #define HSFSTS_CTL_FCYCLE_RDSR (0x08 << HSFSTS_CTL_FCYCLE_SHIFT) 39 40 #define HSFSTS_CTL_FGO BIT(16) 41 #define HSFSTS_CTL_FLOCKDN BIT(15) 42 #define HSFSTS_CTL_FDV BIT(14) 43 #define HSFSTS_CTL_SCIP BIT(5) 44 #define HSFSTS_CTL_AEL BIT(2) 45 #define HSFSTS_CTL_FCERR BIT(1) 46 #define HSFSTS_CTL_FDONE BIT(0) 47 48 #define FADDR 0x08 49 #define DLOCK 0x0c 50 #define FDATA(n) (0x10 + ((n) * 4)) 51 52 #define FRACC 0x50 53 54 #define FREG(n) (0x54 + ((n) * 4)) 55 #define FREG_BASE_MASK GENMASK(14, 0) 56 #define FREG_LIMIT_SHIFT 16 57 #define FREG_LIMIT_MASK GENMASK(30, 16) 58 59 /* Offset is from @ispi->pregs */ 60 #define PR(n) ((n) * 4) 61 #define PR_WPE BIT(31) 62 #define PR_LIMIT_SHIFT 16 63 #define PR_LIMIT_MASK GENMASK(30, 16) 64 #define PR_RPE BIT(15) 65 #define PR_BASE_MASK GENMASK(14, 0) 66 67 /* Offsets are from @ispi->sregs */ 68 #define SSFSTS_CTL 0x00 69 #define SSFSTS_CTL_FSMIE BIT(23) 70 #define SSFSTS_CTL_DS BIT(22) 71 #define SSFSTS_CTL_DBC_SHIFT 16 72 #define SSFSTS_CTL_SPOP BIT(11) 73 #define SSFSTS_CTL_ACS BIT(10) 74 #define SSFSTS_CTL_SCGO BIT(9) 75 #define SSFSTS_CTL_COP_SHIFT 12 76 #define SSFSTS_CTL_FRS BIT(7) 77 #define SSFSTS_CTL_DOFRS BIT(6) 78 #define SSFSTS_CTL_AEL BIT(4) 79 #define SSFSTS_CTL_FCERR BIT(3) 80 #define SSFSTS_CTL_FDONE BIT(2) 81 #define SSFSTS_CTL_SCIP BIT(0) 82 83 #define PREOP_OPTYPE 0x04 84 #define OPMENU0 0x08 85 #define OPMENU1 0x0c 86 87 #define OPTYPE_READ_NO_ADDR 0 88 #define OPTYPE_WRITE_NO_ADDR 1 89 #define OPTYPE_READ_WITH_ADDR 2 90 #define OPTYPE_WRITE_WITH_ADDR 3 91 92 /* CPU specifics */ 93 #define BYT_PR 0x74 94 #define BYT_SSFSTS_CTL 0x90 95 #define BYT_FREG_NUM 5 96 #define BYT_PR_NUM 5 97 98 #define LPT_PR 0x74 99 #define LPT_SSFSTS_CTL 0x90 100 #define LPT_FREG_NUM 5 101 #define LPT_PR_NUM 5 102 103 #define BXT_PR 0x84 104 #define BXT_SSFSTS_CTL 0xa0 105 #define BXT_FREG_NUM 12 106 #define BXT_PR_NUM 6 107 108 #define CNL_PR 0x84 109 #define CNL_FREG_NUM 6 110 #define CNL_PR_NUM 5 111 112 #define LVSCC 0xc4 113 #define UVSCC 0xc8 114 #define ERASE_OPCODE_SHIFT 8 115 #define ERASE_OPCODE_MASK (0xff << ERASE_OPCODE_SHIFT) 116 #define ERASE_64K_OPCODE_SHIFT 16 117 #define ERASE_64K_OPCODE_MASK (0xff << ERASE_64K_OPCODE_SHIFT) 118 119 /* Flash descriptor fields */ 120 #define FLVALSIG_MAGIC 0x0ff0a55a 121 #define FLMAP0_NC_MASK GENMASK(9, 8) 122 #define FLMAP0_NC_SHIFT 8 123 #define FLMAP0_FCBA_MASK GENMASK(7, 0) 124 125 #define FLCOMP_C0DEN_MASK GENMASK(3, 0) 126 #define FLCOMP_C0DEN_512K 0x00 127 #define FLCOMP_C0DEN_1M 0x01 128 #define FLCOMP_C0DEN_2M 0x02 129 #define FLCOMP_C0DEN_4M 0x03 130 #define FLCOMP_C0DEN_8M 0x04 131 #define FLCOMP_C0DEN_16M 0x05 132 #define FLCOMP_C0DEN_32M 0x06 133 #define FLCOMP_C0DEN_64M 0x07 134 135 #define INTEL_SPI_TIMEOUT 5000 /* ms */ 136 #define INTEL_SPI_FIFO_SZ 64 137 138 /** 139 * struct intel_spi - Driver private data 140 * @dev: Device pointer 141 * @info: Pointer to board specific info 142 * @base: Beginning of MMIO space 143 * @pregs: Start of protection registers 144 * @sregs: Start of software sequencer registers 145 * @master: Pointer to the SPI controller structure 146 * @nregions: Maximum number of regions 147 * @pr_num: Maximum number of protected range registers 148 * @chip0_size: Size of the first flash chip in bytes 149 * @locked: Is SPI setting locked 150 * @swseq_reg: Use SW sequencer in register reads/writes 151 * @swseq_erase: Use SW sequencer in erase operation 152 * @atomic_preopcode: Holds preopcode when atomic sequence is requested 153 * @opcodes: Opcodes which are supported. This are programmed by BIOS 154 * before it locks down the controller. 155 * @mem_ops: Pointer to SPI MEM ops supported by the controller 156 */ 157 struct intel_spi { 158 struct device *dev; 159 const struct intel_spi_boardinfo *info; 160 void __iomem *base; 161 void __iomem *pregs; 162 void __iomem *sregs; 163 struct spi_controller *master; 164 size_t nregions; 165 size_t pr_num; 166 size_t chip0_size; 167 bool locked; 168 bool swseq_reg; 169 bool swseq_erase; 170 u8 atomic_preopcode; 171 u8 opcodes[8]; 172 const struct intel_spi_mem_op *mem_ops; 173 }; 174 175 struct intel_spi_mem_op { 176 struct spi_mem_op mem_op; 177 u32 replacement_op; 178 int (*exec_op)(struct intel_spi *ispi, 179 const struct spi_mem *mem, 180 const struct intel_spi_mem_op *iop, 181 const struct spi_mem_op *op); 182 }; 183 184 static bool writeable; 185 module_param(writeable, bool, 0); 186 MODULE_PARM_DESC(writeable, "Enable write access to SPI flash chip (default=0)"); 187 188 static void intel_spi_dump_regs(struct intel_spi *ispi) 189 { 190 u32 value; 191 int i; 192 193 dev_dbg(ispi->dev, "BFPREG=0x%08x\n", readl(ispi->base + BFPREG)); 194 195 value = readl(ispi->base + HSFSTS_CTL); 196 dev_dbg(ispi->dev, "HSFSTS_CTL=0x%08x\n", value); 197 if (value & HSFSTS_CTL_FLOCKDN) 198 dev_dbg(ispi->dev, "-> Locked\n"); 199 200 dev_dbg(ispi->dev, "FADDR=0x%08x\n", readl(ispi->base + FADDR)); 201 dev_dbg(ispi->dev, "DLOCK=0x%08x\n", readl(ispi->base + DLOCK)); 202 203 for (i = 0; i < 16; i++) 204 dev_dbg(ispi->dev, "FDATA(%d)=0x%08x\n", 205 i, readl(ispi->base + FDATA(i))); 206 207 dev_dbg(ispi->dev, "FRACC=0x%08x\n", readl(ispi->base + FRACC)); 208 209 for (i = 0; i < ispi->nregions; i++) 210 dev_dbg(ispi->dev, "FREG(%d)=0x%08x\n", i, 211 readl(ispi->base + FREG(i))); 212 for (i = 0; i < ispi->pr_num; i++) 213 dev_dbg(ispi->dev, "PR(%d)=0x%08x\n", i, 214 readl(ispi->pregs + PR(i))); 215 216 if (ispi->sregs) { 217 value = readl(ispi->sregs + SSFSTS_CTL); 218 dev_dbg(ispi->dev, "SSFSTS_CTL=0x%08x\n", value); 219 dev_dbg(ispi->dev, "PREOP_OPTYPE=0x%08x\n", 220 readl(ispi->sregs + PREOP_OPTYPE)); 221 dev_dbg(ispi->dev, "OPMENU0=0x%08x\n", 222 readl(ispi->sregs + OPMENU0)); 223 dev_dbg(ispi->dev, "OPMENU1=0x%08x\n", 224 readl(ispi->sregs + OPMENU1)); 225 } 226 227 dev_dbg(ispi->dev, "LVSCC=0x%08x\n", readl(ispi->base + LVSCC)); 228 dev_dbg(ispi->dev, "UVSCC=0x%08x\n", readl(ispi->base + UVSCC)); 229 230 dev_dbg(ispi->dev, "Protected regions:\n"); 231 for (i = 0; i < ispi->pr_num; i++) { 232 u32 base, limit; 233 234 value = readl(ispi->pregs + PR(i)); 235 if (!(value & (PR_WPE | PR_RPE))) 236 continue; 237 238 limit = (value & PR_LIMIT_MASK) >> PR_LIMIT_SHIFT; 239 base = value & PR_BASE_MASK; 240 241 dev_dbg(ispi->dev, " %02d base: 0x%08x limit: 0x%08x [%c%c]\n", 242 i, base << 12, (limit << 12) | 0xfff, 243 value & PR_WPE ? 'W' : '.', value & PR_RPE ? 'R' : '.'); 244 } 245 246 dev_dbg(ispi->dev, "Flash regions:\n"); 247 for (i = 0; i < ispi->nregions; i++) { 248 u32 region, base, limit; 249 250 region = readl(ispi->base + FREG(i)); 251 base = region & FREG_BASE_MASK; 252 limit = (region & FREG_LIMIT_MASK) >> FREG_LIMIT_SHIFT; 253 254 if (base >= limit || (i > 0 && limit == 0)) 255 dev_dbg(ispi->dev, " %02d disabled\n", i); 256 else 257 dev_dbg(ispi->dev, " %02d base: 0x%08x limit: 0x%08x\n", 258 i, base << 12, (limit << 12) | 0xfff); 259 } 260 261 dev_dbg(ispi->dev, "Using %cW sequencer for register access\n", 262 ispi->swseq_reg ? 'S' : 'H'); 263 dev_dbg(ispi->dev, "Using %cW sequencer for erase operation\n", 264 ispi->swseq_erase ? 'S' : 'H'); 265 } 266 267 /* Reads max INTEL_SPI_FIFO_SZ bytes from the device fifo */ 268 static int intel_spi_read_block(struct intel_spi *ispi, void *buf, size_t size) 269 { 270 size_t bytes; 271 int i = 0; 272 273 if (size > INTEL_SPI_FIFO_SZ) 274 return -EINVAL; 275 276 while (size > 0) { 277 bytes = min_t(size_t, size, 4); 278 memcpy_fromio(buf, ispi->base + FDATA(i), bytes); 279 size -= bytes; 280 buf += bytes; 281 i++; 282 } 283 284 return 0; 285 } 286 287 /* Writes max INTEL_SPI_FIFO_SZ bytes to the device fifo */ 288 static int intel_spi_write_block(struct intel_spi *ispi, const void *buf, 289 size_t size) 290 { 291 size_t bytes; 292 int i = 0; 293 294 if (size > INTEL_SPI_FIFO_SZ) 295 return -EINVAL; 296 297 while (size > 0) { 298 bytes = min_t(size_t, size, 4); 299 memcpy_toio(ispi->base + FDATA(i), buf, bytes); 300 size -= bytes; 301 buf += bytes; 302 i++; 303 } 304 305 return 0; 306 } 307 308 static int intel_spi_wait_hw_busy(struct intel_spi *ispi) 309 { 310 u32 val; 311 312 return readl_poll_timeout(ispi->base + HSFSTS_CTL, val, 313 !(val & HSFSTS_CTL_SCIP), 0, 314 INTEL_SPI_TIMEOUT * 1000); 315 } 316 317 static int intel_spi_wait_sw_busy(struct intel_spi *ispi) 318 { 319 u32 val; 320 321 return readl_poll_timeout(ispi->sregs + SSFSTS_CTL, val, 322 !(val & SSFSTS_CTL_SCIP), 0, 323 INTEL_SPI_TIMEOUT * 1000); 324 } 325 326 static bool intel_spi_set_writeable(struct intel_spi *ispi) 327 { 328 if (!ispi->info->set_writeable) 329 return false; 330 331 return ispi->info->set_writeable(ispi->base, ispi->info->data); 332 } 333 334 static int intel_spi_opcode_index(struct intel_spi *ispi, u8 opcode, int optype) 335 { 336 int i; 337 int preop; 338 339 if (ispi->locked) { 340 for (i = 0; i < ARRAY_SIZE(ispi->opcodes); i++) 341 if (ispi->opcodes[i] == opcode) 342 return i; 343 344 return -EINVAL; 345 } 346 347 /* The lock is off, so just use index 0 */ 348 writel(opcode, ispi->sregs + OPMENU0); 349 preop = readw(ispi->sregs + PREOP_OPTYPE); 350 writel(optype << 16 | preop, ispi->sregs + PREOP_OPTYPE); 351 352 return 0; 353 } 354 355 static int intel_spi_hw_cycle(struct intel_spi *ispi, u8 opcode, size_t len) 356 { 357 u32 val, status; 358 int ret; 359 360 val = readl(ispi->base + HSFSTS_CTL); 361 val &= ~(HSFSTS_CTL_FCYCLE_MASK | HSFSTS_CTL_FDBC_MASK); 362 363 switch (opcode) { 364 case SPINOR_OP_RDID: 365 val |= HSFSTS_CTL_FCYCLE_RDID; 366 break; 367 case SPINOR_OP_WRSR: 368 val |= HSFSTS_CTL_FCYCLE_WRSR; 369 break; 370 case SPINOR_OP_RDSR: 371 val |= HSFSTS_CTL_FCYCLE_RDSR; 372 break; 373 default: 374 return -EINVAL; 375 } 376 377 if (len > INTEL_SPI_FIFO_SZ) 378 return -EINVAL; 379 380 val |= (len - 1) << HSFSTS_CTL_FDBC_SHIFT; 381 val |= HSFSTS_CTL_FCERR | HSFSTS_CTL_FDONE; 382 val |= HSFSTS_CTL_FGO; 383 writel(val, ispi->base + HSFSTS_CTL); 384 385 ret = intel_spi_wait_hw_busy(ispi); 386 if (ret) 387 return ret; 388 389 status = readl(ispi->base + HSFSTS_CTL); 390 if (status & HSFSTS_CTL_FCERR) 391 return -EIO; 392 else if (status & HSFSTS_CTL_AEL) 393 return -EACCES; 394 395 return 0; 396 } 397 398 static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, size_t len, 399 int optype) 400 { 401 u32 val = 0, status; 402 u8 atomic_preopcode; 403 int ret; 404 405 ret = intel_spi_opcode_index(ispi, opcode, optype); 406 if (ret < 0) 407 return ret; 408 409 if (len > INTEL_SPI_FIFO_SZ) 410 return -EINVAL; 411 412 /* 413 * Always clear it after each SW sequencer operation regardless 414 * of whether it is successful or not. 415 */ 416 atomic_preopcode = ispi->atomic_preopcode; 417 ispi->atomic_preopcode = 0; 418 419 /* Only mark 'Data Cycle' bit when there is data to be transferred */ 420 if (len > 0) 421 val = ((len - 1) << SSFSTS_CTL_DBC_SHIFT) | SSFSTS_CTL_DS; 422 val |= ret << SSFSTS_CTL_COP_SHIFT; 423 val |= SSFSTS_CTL_FCERR | SSFSTS_CTL_FDONE; 424 val |= SSFSTS_CTL_SCGO; 425 if (atomic_preopcode) { 426 u16 preop; 427 428 switch (optype) { 429 case OPTYPE_WRITE_NO_ADDR: 430 case OPTYPE_WRITE_WITH_ADDR: 431 /* Pick matching preopcode for the atomic sequence */ 432 preop = readw(ispi->sregs + PREOP_OPTYPE); 433 if ((preop & 0xff) == atomic_preopcode) 434 ; /* Do nothing */ 435 else if ((preop >> 8) == atomic_preopcode) 436 val |= SSFSTS_CTL_SPOP; 437 else 438 return -EINVAL; 439 440 /* Enable atomic sequence */ 441 val |= SSFSTS_CTL_ACS; 442 break; 443 444 default: 445 return -EINVAL; 446 } 447 } 448 writel(val, ispi->sregs + SSFSTS_CTL); 449 450 ret = intel_spi_wait_sw_busy(ispi); 451 if (ret) 452 return ret; 453 454 status = readl(ispi->sregs + SSFSTS_CTL); 455 if (status & SSFSTS_CTL_FCERR) 456 return -EIO; 457 else if (status & SSFSTS_CTL_AEL) 458 return -EACCES; 459 460 return 0; 461 } 462 463 static u32 intel_spi_chip_addr(const struct intel_spi *ispi, 464 const struct spi_mem *mem) 465 { 466 /* Pick up the correct start address */ 467 if (!mem) 468 return 0; 469 return mem->spi->chip_select == 1 ? ispi->chip0_size : 0; 470 } 471 472 static int intel_spi_read_reg(struct intel_spi *ispi, const struct spi_mem *mem, 473 const struct intel_spi_mem_op *iop, 474 const struct spi_mem_op *op) 475 { 476 size_t nbytes = op->data.nbytes; 477 u8 opcode = op->cmd.opcode; 478 int ret; 479 480 writel(intel_spi_chip_addr(ispi, mem), ispi->base + FADDR); 481 482 if (ispi->swseq_reg) 483 ret = intel_spi_sw_cycle(ispi, opcode, nbytes, 484 OPTYPE_READ_NO_ADDR); 485 else 486 ret = intel_spi_hw_cycle(ispi, opcode, nbytes); 487 488 if (ret) 489 return ret; 490 491 return intel_spi_read_block(ispi, op->data.buf.in, nbytes); 492 } 493 494 static int intel_spi_write_reg(struct intel_spi *ispi, const struct spi_mem *mem, 495 const struct intel_spi_mem_op *iop, 496 const struct spi_mem_op *op) 497 { 498 size_t nbytes = op->data.nbytes; 499 u8 opcode = op->cmd.opcode; 500 int ret; 501 502 /* 503 * This is handled with atomic operation and preop code in Intel 504 * controller so we only verify that it is available. If the 505 * controller is not locked, program the opcode to the PREOP 506 * register for later use. 507 * 508 * When hardware sequencer is used there is no need to program 509 * any opcodes (it handles them automatically as part of a command). 510 */ 511 if (opcode == SPINOR_OP_WREN) { 512 u16 preop; 513 514 if (!ispi->swseq_reg) 515 return 0; 516 517 preop = readw(ispi->sregs + PREOP_OPTYPE); 518 if ((preop & 0xff) != opcode && (preop >> 8) != opcode) { 519 if (ispi->locked) 520 return -EINVAL; 521 writel(opcode, ispi->sregs + PREOP_OPTYPE); 522 } 523 524 /* 525 * This enables atomic sequence on next SW sycle. Will 526 * be cleared after next operation. 527 */ 528 ispi->atomic_preopcode = opcode; 529 return 0; 530 } 531 532 /* 533 * We hope that HW sequencer will do the right thing automatically and 534 * with the SW sequencer we cannot use preopcode anyway, so just ignore 535 * the Write Disable operation and pretend it was completed 536 * successfully. 537 */ 538 if (opcode == SPINOR_OP_WRDI) 539 return 0; 540 541 writel(intel_spi_chip_addr(ispi, mem), ispi->base + FADDR); 542 543 /* Write the value beforehand */ 544 ret = intel_spi_write_block(ispi, op->data.buf.out, nbytes); 545 if (ret) 546 return ret; 547 548 if (ispi->swseq_reg) 549 return intel_spi_sw_cycle(ispi, opcode, nbytes, 550 OPTYPE_WRITE_NO_ADDR); 551 return intel_spi_hw_cycle(ispi, opcode, nbytes); 552 } 553 554 static int intel_spi_read(struct intel_spi *ispi, const struct spi_mem *mem, 555 const struct intel_spi_mem_op *iop, 556 const struct spi_mem_op *op) 557 { 558 u32 addr = intel_spi_chip_addr(ispi, mem) + op->addr.val; 559 size_t block_size, nbytes = op->data.nbytes; 560 void *read_buf = op->data.buf.in; 561 u32 val, status; 562 int ret; 563 564 /* 565 * Atomic sequence is not expected with HW sequencer reads. Make 566 * sure it is cleared regardless. 567 */ 568 if (WARN_ON_ONCE(ispi->atomic_preopcode)) 569 ispi->atomic_preopcode = 0; 570 571 while (nbytes > 0) { 572 block_size = min_t(size_t, nbytes, INTEL_SPI_FIFO_SZ); 573 574 /* Read cannot cross 4K boundary */ 575 block_size = min_t(loff_t, addr + block_size, 576 round_up(addr + 1, SZ_4K)) - addr; 577 578 writel(addr, ispi->base + FADDR); 579 580 val = readl(ispi->base + HSFSTS_CTL); 581 val &= ~(HSFSTS_CTL_FDBC_MASK | HSFSTS_CTL_FCYCLE_MASK); 582 val |= HSFSTS_CTL_AEL | HSFSTS_CTL_FCERR | HSFSTS_CTL_FDONE; 583 val |= (block_size - 1) << HSFSTS_CTL_FDBC_SHIFT; 584 val |= HSFSTS_CTL_FCYCLE_READ; 585 val |= HSFSTS_CTL_FGO; 586 writel(val, ispi->base + HSFSTS_CTL); 587 588 ret = intel_spi_wait_hw_busy(ispi); 589 if (ret) 590 return ret; 591 592 status = readl(ispi->base + HSFSTS_CTL); 593 if (status & HSFSTS_CTL_FCERR) 594 ret = -EIO; 595 else if (status & HSFSTS_CTL_AEL) 596 ret = -EACCES; 597 598 if (ret < 0) { 599 dev_err(ispi->dev, "read error: %x: %#x\n", addr, status); 600 return ret; 601 } 602 603 ret = intel_spi_read_block(ispi, read_buf, block_size); 604 if (ret) 605 return ret; 606 607 nbytes -= block_size; 608 addr += block_size; 609 read_buf += block_size; 610 } 611 612 return 0; 613 } 614 615 static int intel_spi_write(struct intel_spi *ispi, const struct spi_mem *mem, 616 const struct intel_spi_mem_op *iop, 617 const struct spi_mem_op *op) 618 { 619 u32 addr = intel_spi_chip_addr(ispi, mem) + op->addr.val; 620 size_t block_size, nbytes = op->data.nbytes; 621 const void *write_buf = op->data.buf.out; 622 u32 val, status; 623 int ret; 624 625 /* Not needed with HW sequencer write, make sure it is cleared */ 626 ispi->atomic_preopcode = 0; 627 628 while (nbytes > 0) { 629 block_size = min_t(size_t, nbytes, INTEL_SPI_FIFO_SZ); 630 631 /* Write cannot cross 4K boundary */ 632 block_size = min_t(loff_t, addr + block_size, 633 round_up(addr + 1, SZ_4K)) - addr; 634 635 writel(addr, ispi->base + FADDR); 636 637 val = readl(ispi->base + HSFSTS_CTL); 638 val &= ~(HSFSTS_CTL_FDBC_MASK | HSFSTS_CTL_FCYCLE_MASK); 639 val |= HSFSTS_CTL_AEL | HSFSTS_CTL_FCERR | HSFSTS_CTL_FDONE; 640 val |= (block_size - 1) << HSFSTS_CTL_FDBC_SHIFT; 641 val |= HSFSTS_CTL_FCYCLE_WRITE; 642 643 ret = intel_spi_write_block(ispi, write_buf, block_size); 644 if (ret) { 645 dev_err(ispi->dev, "failed to write block\n"); 646 return ret; 647 } 648 649 /* Start the write now */ 650 val |= HSFSTS_CTL_FGO; 651 writel(val, ispi->base + HSFSTS_CTL); 652 653 ret = intel_spi_wait_hw_busy(ispi); 654 if (ret) { 655 dev_err(ispi->dev, "timeout\n"); 656 return ret; 657 } 658 659 status = readl(ispi->base + HSFSTS_CTL); 660 if (status & HSFSTS_CTL_FCERR) 661 ret = -EIO; 662 else if (status & HSFSTS_CTL_AEL) 663 ret = -EACCES; 664 665 if (ret < 0) { 666 dev_err(ispi->dev, "write error: %x: %#x\n", addr, status); 667 return ret; 668 } 669 670 nbytes -= block_size; 671 addr += block_size; 672 write_buf += block_size; 673 } 674 675 return 0; 676 } 677 678 static int intel_spi_erase(struct intel_spi *ispi, const struct spi_mem *mem, 679 const struct intel_spi_mem_op *iop, 680 const struct spi_mem_op *op) 681 { 682 u32 addr = intel_spi_chip_addr(ispi, mem) + op->addr.val; 683 u8 opcode = op->cmd.opcode; 684 u32 val, status; 685 int ret; 686 687 writel(addr, ispi->base + FADDR); 688 689 if (ispi->swseq_erase) 690 return intel_spi_sw_cycle(ispi, opcode, 0, 691 OPTYPE_WRITE_WITH_ADDR); 692 693 /* Not needed with HW sequencer erase, make sure it is cleared */ 694 ispi->atomic_preopcode = 0; 695 696 val = readl(ispi->base + HSFSTS_CTL); 697 val &= ~(HSFSTS_CTL_FDBC_MASK | HSFSTS_CTL_FCYCLE_MASK); 698 val |= HSFSTS_CTL_AEL | HSFSTS_CTL_FCERR | HSFSTS_CTL_FDONE; 699 val |= HSFSTS_CTL_FGO; 700 val |= iop->replacement_op; 701 writel(val, ispi->base + HSFSTS_CTL); 702 703 ret = intel_spi_wait_hw_busy(ispi); 704 if (ret) 705 return ret; 706 707 status = readl(ispi->base + HSFSTS_CTL); 708 if (status & HSFSTS_CTL_FCERR) 709 return -EIO; 710 if (status & HSFSTS_CTL_AEL) 711 return -EACCES; 712 713 return 0; 714 } 715 716 static bool intel_spi_cmp_mem_op(const struct intel_spi_mem_op *iop, 717 const struct spi_mem_op *op) 718 { 719 if (iop->mem_op.cmd.nbytes != op->cmd.nbytes || 720 iop->mem_op.cmd.buswidth != op->cmd.buswidth || 721 iop->mem_op.cmd.dtr != op->cmd.dtr || 722 iop->mem_op.cmd.opcode != op->cmd.opcode) 723 return false; 724 725 if (iop->mem_op.addr.nbytes != op->addr.nbytes || 726 iop->mem_op.addr.dtr != op->addr.dtr) 727 return false; 728 729 if (iop->mem_op.data.dir != op->data.dir || 730 iop->mem_op.data.dtr != op->data.dtr) 731 return false; 732 733 if (iop->mem_op.data.dir != SPI_MEM_NO_DATA) { 734 if (iop->mem_op.data.buswidth != op->data.buswidth) 735 return false; 736 } 737 738 return true; 739 } 740 741 static const struct intel_spi_mem_op * 742 intel_spi_match_mem_op(struct intel_spi *ispi, const struct spi_mem_op *op) 743 { 744 const struct intel_spi_mem_op *iop; 745 746 for (iop = ispi->mem_ops; iop->mem_op.cmd.opcode; iop++) { 747 if (intel_spi_cmp_mem_op(iop, op)) 748 break; 749 } 750 751 return iop->mem_op.cmd.opcode ? iop : NULL; 752 } 753 754 static bool intel_spi_supports_mem_op(struct spi_mem *mem, 755 const struct spi_mem_op *op) 756 { 757 struct intel_spi *ispi = spi_master_get_devdata(mem->spi->master); 758 const struct intel_spi_mem_op *iop; 759 760 iop = intel_spi_match_mem_op(ispi, op); 761 if (!iop) { 762 dev_dbg(ispi->dev, "%#x not supported\n", op->cmd.opcode); 763 return false; 764 } 765 766 /* 767 * For software sequencer check that the opcode is actually 768 * present in the opmenu if it is locked. 769 */ 770 if (ispi->swseq_reg && ispi->locked) { 771 int i; 772 773 /* Check if it is in the locked opcodes list */ 774 for (i = 0; i < ARRAY_SIZE(ispi->opcodes); i++) { 775 if (ispi->opcodes[i] == op->cmd.opcode) 776 return true; 777 } 778 779 dev_dbg(ispi->dev, "%#x not supported\n", op->cmd.opcode); 780 return false; 781 } 782 783 return true; 784 } 785 786 static int intel_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op) 787 { 788 struct intel_spi *ispi = spi_master_get_devdata(mem->spi->master); 789 const struct intel_spi_mem_op *iop; 790 791 iop = intel_spi_match_mem_op(ispi, op); 792 if (!iop) 793 return -EOPNOTSUPP; 794 795 return iop->exec_op(ispi, mem, iop, op); 796 } 797 798 static const char *intel_spi_get_name(struct spi_mem *mem) 799 { 800 const struct intel_spi *ispi = spi_master_get_devdata(mem->spi->master); 801 802 /* 803 * Return name of the flash controller device to be compatible 804 * with the MTD version. 805 */ 806 return dev_name(ispi->dev); 807 } 808 809 static int intel_spi_dirmap_create(struct spi_mem_dirmap_desc *desc) 810 { 811 struct intel_spi *ispi = spi_master_get_devdata(desc->mem->spi->master); 812 const struct intel_spi_mem_op *iop; 813 814 iop = intel_spi_match_mem_op(ispi, &desc->info.op_tmpl); 815 if (!iop) 816 return -EOPNOTSUPP; 817 818 desc->priv = (void *)iop; 819 return 0; 820 } 821 822 static ssize_t intel_spi_dirmap_read(struct spi_mem_dirmap_desc *desc, u64 offs, 823 size_t len, void *buf) 824 { 825 struct intel_spi *ispi = spi_master_get_devdata(desc->mem->spi->master); 826 const struct intel_spi_mem_op *iop = desc->priv; 827 struct spi_mem_op op = desc->info.op_tmpl; 828 int ret; 829 830 /* Fill in the gaps */ 831 op.addr.val = offs; 832 op.data.nbytes = len; 833 op.data.buf.in = buf; 834 835 ret = iop->exec_op(ispi, desc->mem, iop, &op); 836 return ret ? ret : len; 837 } 838 839 static ssize_t intel_spi_dirmap_write(struct spi_mem_dirmap_desc *desc, u64 offs, 840 size_t len, const void *buf) 841 { 842 struct intel_spi *ispi = spi_master_get_devdata(desc->mem->spi->master); 843 const struct intel_spi_mem_op *iop = desc->priv; 844 struct spi_mem_op op = desc->info.op_tmpl; 845 int ret; 846 847 op.addr.val = offs; 848 op.data.nbytes = len; 849 op.data.buf.out = buf; 850 851 ret = iop->exec_op(ispi, desc->mem, iop, &op); 852 return ret ? ret : len; 853 } 854 855 static const struct spi_controller_mem_ops intel_spi_mem_ops = { 856 .supports_op = intel_spi_supports_mem_op, 857 .exec_op = intel_spi_exec_mem_op, 858 .get_name = intel_spi_get_name, 859 .dirmap_create = intel_spi_dirmap_create, 860 .dirmap_read = intel_spi_dirmap_read, 861 .dirmap_write = intel_spi_dirmap_write, 862 }; 863 864 #define INTEL_SPI_OP_ADDR(__nbytes) \ 865 { \ 866 .nbytes = __nbytes, \ 867 } 868 869 #define INTEL_SPI_OP_NO_DATA \ 870 { \ 871 .dir = SPI_MEM_NO_DATA, \ 872 } 873 874 #define INTEL_SPI_OP_DATA_IN(__buswidth) \ 875 { \ 876 .dir = SPI_MEM_DATA_IN, \ 877 .buswidth = __buswidth, \ 878 } 879 880 #define INTEL_SPI_OP_DATA_OUT(__buswidth) \ 881 { \ 882 .dir = SPI_MEM_DATA_OUT, \ 883 .buswidth = __buswidth, \ 884 } 885 886 #define INTEL_SPI_MEM_OP(__cmd, __addr, __data, __exec_op) \ 887 { \ 888 .mem_op = { \ 889 .cmd = __cmd, \ 890 .addr = __addr, \ 891 .data = __data, \ 892 }, \ 893 .exec_op = __exec_op, \ 894 } 895 896 #define INTEL_SPI_MEM_OP_REPL(__cmd, __addr, __data, __exec_op, __repl) \ 897 { \ 898 .mem_op = { \ 899 .cmd = __cmd, \ 900 .addr = __addr, \ 901 .data = __data, \ 902 }, \ 903 .exec_op = __exec_op, \ 904 .replacement_op = __repl, \ 905 } 906 907 /* 908 * The controller handles pretty much everything internally based on the 909 * SFDP data but we want to make sure we only support the operations 910 * actually possible. Only check buswidth and transfer direction, the 911 * core validates data. 912 */ 913 #define INTEL_SPI_GENERIC_OPS \ 914 /* Status register operations */ \ 915 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDID, 1), \ 916 SPI_MEM_OP_NO_ADDR, \ 917 INTEL_SPI_OP_DATA_IN(1), \ 918 intel_spi_read_reg), \ 919 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR, 1), \ 920 SPI_MEM_OP_NO_ADDR, \ 921 INTEL_SPI_OP_DATA_IN(1), \ 922 intel_spi_read_reg), \ 923 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 1), \ 924 SPI_MEM_OP_NO_ADDR, \ 925 INTEL_SPI_OP_DATA_OUT(1), \ 926 intel_spi_write_reg), \ 927 /* Normal read */ \ 928 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ, 1), \ 929 INTEL_SPI_OP_ADDR(3), \ 930 INTEL_SPI_OP_DATA_IN(1), \ 931 intel_spi_read), \ 932 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ, 1), \ 933 INTEL_SPI_OP_ADDR(3), \ 934 INTEL_SPI_OP_DATA_IN(2), \ 935 intel_spi_read), \ 936 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ, 1), \ 937 INTEL_SPI_OP_ADDR(3), \ 938 INTEL_SPI_OP_DATA_IN(4), \ 939 intel_spi_read), \ 940 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ, 1), \ 941 INTEL_SPI_OP_ADDR(4), \ 942 INTEL_SPI_OP_DATA_IN(1), \ 943 intel_spi_read), \ 944 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ, 1), \ 945 INTEL_SPI_OP_ADDR(4), \ 946 INTEL_SPI_OP_DATA_IN(2), \ 947 intel_spi_read), \ 948 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ, 1), \ 949 INTEL_SPI_OP_ADDR(4), \ 950 INTEL_SPI_OP_DATA_IN(4), \ 951 intel_spi_read), \ 952 /* Fast read */ \ 953 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST, 1), \ 954 INTEL_SPI_OP_ADDR(3), \ 955 INTEL_SPI_OP_DATA_IN(1), \ 956 intel_spi_read), \ 957 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST, 1), \ 958 INTEL_SPI_OP_ADDR(3), \ 959 INTEL_SPI_OP_DATA_IN(2), \ 960 intel_spi_read), \ 961 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST, 1), \ 962 INTEL_SPI_OP_ADDR(3), \ 963 INTEL_SPI_OP_DATA_IN(4), \ 964 intel_spi_read), \ 965 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST, 1), \ 966 INTEL_SPI_OP_ADDR(4), \ 967 INTEL_SPI_OP_DATA_IN(1), \ 968 intel_spi_read), \ 969 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST, 1), \ 970 INTEL_SPI_OP_ADDR(4), \ 971 INTEL_SPI_OP_DATA_IN(2), \ 972 intel_spi_read), \ 973 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST, 1), \ 974 INTEL_SPI_OP_ADDR(4), \ 975 INTEL_SPI_OP_DATA_IN(4), \ 976 intel_spi_read), \ 977 /* Read with 4-byte address opcode */ \ 978 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_4B, 1), \ 979 INTEL_SPI_OP_ADDR(4), \ 980 INTEL_SPI_OP_DATA_IN(1), \ 981 intel_spi_read), \ 982 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_4B, 1), \ 983 INTEL_SPI_OP_ADDR(4), \ 984 INTEL_SPI_OP_DATA_IN(2), \ 985 intel_spi_read), \ 986 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_4B, 1), \ 987 INTEL_SPI_OP_ADDR(4), \ 988 INTEL_SPI_OP_DATA_IN(4), \ 989 intel_spi_read), \ 990 /* Fast read with 4-byte address opcode */ \ 991 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST_4B, 1), \ 992 INTEL_SPI_OP_ADDR(4), \ 993 INTEL_SPI_OP_DATA_IN(1), \ 994 intel_spi_read), \ 995 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST_4B, 1), \ 996 INTEL_SPI_OP_ADDR(4), \ 997 INTEL_SPI_OP_DATA_IN(2), \ 998 intel_spi_read), \ 999 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ_FAST_4B, 1), \ 1000 INTEL_SPI_OP_ADDR(4), \ 1001 INTEL_SPI_OP_DATA_IN(4), \ 1002 intel_spi_read), \ 1003 /* Write operations */ \ 1004 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_PP, 1), \ 1005 INTEL_SPI_OP_ADDR(3), \ 1006 INTEL_SPI_OP_DATA_OUT(1), \ 1007 intel_spi_write), \ 1008 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_PP, 1), \ 1009 INTEL_SPI_OP_ADDR(4), \ 1010 INTEL_SPI_OP_DATA_OUT(1), \ 1011 intel_spi_write), \ 1012 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_PP_4B, 1), \ 1013 INTEL_SPI_OP_ADDR(4), \ 1014 INTEL_SPI_OP_DATA_OUT(1), \ 1015 intel_spi_write), \ 1016 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREN, 1), \ 1017 SPI_MEM_OP_NO_ADDR, \ 1018 SPI_MEM_OP_NO_DATA, \ 1019 intel_spi_write_reg), \ 1020 INTEL_SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRDI, 1), \ 1021 SPI_MEM_OP_NO_ADDR, \ 1022 SPI_MEM_OP_NO_DATA, \ 1023 intel_spi_write_reg), \ 1024 /* Erase operations */ \ 1025 INTEL_SPI_MEM_OP_REPL(SPI_MEM_OP_CMD(SPINOR_OP_BE_4K, 1), \ 1026 INTEL_SPI_OP_ADDR(3), \ 1027 SPI_MEM_OP_NO_DATA, \ 1028 intel_spi_erase, \ 1029 HSFSTS_CTL_FCYCLE_ERASE), \ 1030 INTEL_SPI_MEM_OP_REPL(SPI_MEM_OP_CMD(SPINOR_OP_BE_4K, 1), \ 1031 INTEL_SPI_OP_ADDR(4), \ 1032 SPI_MEM_OP_NO_DATA, \ 1033 intel_spi_erase, \ 1034 HSFSTS_CTL_FCYCLE_ERASE), \ 1035 INTEL_SPI_MEM_OP_REPL(SPI_MEM_OP_CMD(SPINOR_OP_BE_4K_4B, 1), \ 1036 INTEL_SPI_OP_ADDR(4), \ 1037 SPI_MEM_OP_NO_DATA, \ 1038 intel_spi_erase, \ 1039 HSFSTS_CTL_FCYCLE_ERASE) \ 1040 1041 static const struct intel_spi_mem_op generic_mem_ops[] = { 1042 INTEL_SPI_GENERIC_OPS, 1043 { }, 1044 }; 1045 1046 static const struct intel_spi_mem_op erase_64k_mem_ops[] = { 1047 INTEL_SPI_GENERIC_OPS, 1048 /* 64k sector erase operations */ 1049 INTEL_SPI_MEM_OP_REPL(SPI_MEM_OP_CMD(SPINOR_OP_SE, 1), 1050 INTEL_SPI_OP_ADDR(3), 1051 SPI_MEM_OP_NO_DATA, 1052 intel_spi_erase, 1053 HSFSTS_CTL_FCYCLE_ERASE_64K), 1054 INTEL_SPI_MEM_OP_REPL(SPI_MEM_OP_CMD(SPINOR_OP_SE, 1), 1055 INTEL_SPI_OP_ADDR(4), 1056 SPI_MEM_OP_NO_DATA, 1057 intel_spi_erase, 1058 HSFSTS_CTL_FCYCLE_ERASE_64K), 1059 INTEL_SPI_MEM_OP_REPL(SPI_MEM_OP_CMD(SPINOR_OP_SE_4B, 1), 1060 INTEL_SPI_OP_ADDR(4), 1061 SPI_MEM_OP_NO_DATA, 1062 intel_spi_erase, 1063 HSFSTS_CTL_FCYCLE_ERASE_64K), 1064 { }, 1065 }; 1066 1067 static int intel_spi_init(struct intel_spi *ispi) 1068 { 1069 u32 opmenu0, opmenu1, lvscc, uvscc, val; 1070 bool erase_64k = false; 1071 int i; 1072 1073 switch (ispi->info->type) { 1074 case INTEL_SPI_BYT: 1075 ispi->sregs = ispi->base + BYT_SSFSTS_CTL; 1076 ispi->pregs = ispi->base + BYT_PR; 1077 ispi->nregions = BYT_FREG_NUM; 1078 ispi->pr_num = BYT_PR_NUM; 1079 ispi->swseq_reg = true; 1080 break; 1081 1082 case INTEL_SPI_LPT: 1083 ispi->sregs = ispi->base + LPT_SSFSTS_CTL; 1084 ispi->pregs = ispi->base + LPT_PR; 1085 ispi->nregions = LPT_FREG_NUM; 1086 ispi->pr_num = LPT_PR_NUM; 1087 ispi->swseq_reg = true; 1088 break; 1089 1090 case INTEL_SPI_BXT: 1091 ispi->sregs = ispi->base + BXT_SSFSTS_CTL; 1092 ispi->pregs = ispi->base + BXT_PR; 1093 ispi->nregions = BXT_FREG_NUM; 1094 ispi->pr_num = BXT_PR_NUM; 1095 erase_64k = true; 1096 break; 1097 1098 case INTEL_SPI_CNL: 1099 ispi->sregs = NULL; 1100 ispi->pregs = ispi->base + CNL_PR; 1101 ispi->nregions = CNL_FREG_NUM; 1102 ispi->pr_num = CNL_PR_NUM; 1103 erase_64k = true; 1104 break; 1105 1106 default: 1107 return -EINVAL; 1108 } 1109 1110 /* Try to disable write protection if user asked to do so */ 1111 if (writeable && !intel_spi_set_writeable(ispi)) { 1112 dev_warn(ispi->dev, "can't disable chip write protection\n"); 1113 writeable = false; 1114 } 1115 1116 /* Disable #SMI generation from HW sequencer */ 1117 val = readl(ispi->base + HSFSTS_CTL); 1118 val &= ~HSFSTS_CTL_FSMIE; 1119 writel(val, ispi->base + HSFSTS_CTL); 1120 1121 /* 1122 * Determine whether erase operation should use HW or SW sequencer. 1123 * 1124 * The HW sequencer has a predefined list of opcodes, with only the 1125 * erase opcode being programmable in LVSCC and UVSCC registers. 1126 * If these registers don't contain a valid erase opcode, erase 1127 * cannot be done using HW sequencer. 1128 */ 1129 lvscc = readl(ispi->base + LVSCC); 1130 uvscc = readl(ispi->base + UVSCC); 1131 if (!(lvscc & ERASE_OPCODE_MASK) || !(uvscc & ERASE_OPCODE_MASK)) 1132 ispi->swseq_erase = true; 1133 /* SPI controller on Intel BXT supports 64K erase opcode */ 1134 if (ispi->info->type == INTEL_SPI_BXT && !ispi->swseq_erase) 1135 if (!(lvscc & ERASE_64K_OPCODE_MASK) || 1136 !(uvscc & ERASE_64K_OPCODE_MASK)) 1137 erase_64k = false; 1138 1139 if (!ispi->sregs && (ispi->swseq_reg || ispi->swseq_erase)) { 1140 dev_err(ispi->dev, "software sequencer not supported, but required\n"); 1141 return -EINVAL; 1142 } 1143 1144 /* 1145 * Some controllers can only do basic operations using hardware 1146 * sequencer. All other operations are supposed to be carried out 1147 * using software sequencer. 1148 */ 1149 if (ispi->swseq_reg) { 1150 /* Disable #SMI generation from SW sequencer */ 1151 val = readl(ispi->sregs + SSFSTS_CTL); 1152 val &= ~SSFSTS_CTL_FSMIE; 1153 writel(val, ispi->sregs + SSFSTS_CTL); 1154 } 1155 1156 /* Check controller's lock status */ 1157 val = readl(ispi->base + HSFSTS_CTL); 1158 ispi->locked = !!(val & HSFSTS_CTL_FLOCKDN); 1159 1160 if (ispi->locked && ispi->sregs) { 1161 /* 1162 * BIOS programs allowed opcodes and then locks down the 1163 * register. So read back what opcodes it decided to support. 1164 * That's the set we are going to support as well. 1165 */ 1166 opmenu0 = readl(ispi->sregs + OPMENU0); 1167 opmenu1 = readl(ispi->sregs + OPMENU1); 1168 1169 if (opmenu0 && opmenu1) { 1170 for (i = 0; i < ARRAY_SIZE(ispi->opcodes) / 2; i++) { 1171 ispi->opcodes[i] = opmenu0 >> i * 8; 1172 ispi->opcodes[i + 4] = opmenu1 >> i * 8; 1173 } 1174 } 1175 } 1176 1177 if (erase_64k) { 1178 dev_dbg(ispi->dev, "Using erase_64k memory operations"); 1179 ispi->mem_ops = erase_64k_mem_ops; 1180 } else { 1181 dev_dbg(ispi->dev, "Using generic memory operations"); 1182 ispi->mem_ops = generic_mem_ops; 1183 } 1184 1185 intel_spi_dump_regs(ispi); 1186 return 0; 1187 } 1188 1189 static bool intel_spi_is_protected(const struct intel_spi *ispi, 1190 unsigned int base, unsigned int limit) 1191 { 1192 int i; 1193 1194 for (i = 0; i < ispi->pr_num; i++) { 1195 u32 pr_base, pr_limit, pr_value; 1196 1197 pr_value = readl(ispi->pregs + PR(i)); 1198 if (!(pr_value & (PR_WPE | PR_RPE))) 1199 continue; 1200 1201 pr_limit = (pr_value & PR_LIMIT_MASK) >> PR_LIMIT_SHIFT; 1202 pr_base = pr_value & PR_BASE_MASK; 1203 1204 if (pr_base >= base && pr_limit <= limit) 1205 return true; 1206 } 1207 1208 return false; 1209 } 1210 1211 /* 1212 * There will be a single partition holding all enabled flash regions. We 1213 * call this "BIOS". 1214 */ 1215 static void intel_spi_fill_partition(struct intel_spi *ispi, 1216 struct mtd_partition *part) 1217 { 1218 u64 end; 1219 int i; 1220 1221 memset(part, 0, sizeof(*part)); 1222 1223 /* Start from the mandatory descriptor region */ 1224 part->size = 4096; 1225 part->name = "BIOS"; 1226 1227 /* 1228 * Now try to find where this partition ends based on the flash 1229 * region registers. 1230 */ 1231 for (i = 1; i < ispi->nregions; i++) { 1232 u32 region, base, limit; 1233 1234 region = readl(ispi->base + FREG(i)); 1235 base = region & FREG_BASE_MASK; 1236 limit = (region & FREG_LIMIT_MASK) >> FREG_LIMIT_SHIFT; 1237 1238 if (base >= limit || limit == 0) 1239 continue; 1240 1241 /* 1242 * If any of the regions have protection bits set, make the 1243 * whole partition read-only to be on the safe side. 1244 * 1245 * Also if the user did not ask the chip to be writeable 1246 * mask the bit too. 1247 */ 1248 if (!writeable || intel_spi_is_protected(ispi, base, limit)) 1249 part->mask_flags |= MTD_WRITEABLE; 1250 1251 end = (limit << 12) + 4096; 1252 if (end > part->size) 1253 part->size = end; 1254 } 1255 } 1256 1257 static int intel_spi_read_desc(struct intel_spi *ispi) 1258 { 1259 struct spi_mem_op op = 1260 SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_READ, 0), 1261 SPI_MEM_OP_ADDR(3, 0, 0), 1262 SPI_MEM_OP_NO_DUMMY, 1263 SPI_MEM_OP_DATA_IN(0, NULL, 0)); 1264 u32 buf[2], nc, fcba, flcomp; 1265 ssize_t ret; 1266 1267 op.addr.val = 0x10; 1268 op.data.buf.in = buf; 1269 op.data.nbytes = sizeof(buf); 1270 1271 ret = intel_spi_read(ispi, NULL, NULL, &op); 1272 if (ret) { 1273 dev_warn(ispi->dev, "failed to read descriptor\n"); 1274 return ret; 1275 } 1276 1277 dev_dbg(ispi->dev, "FLVALSIG=0x%08x\n", buf[0]); 1278 dev_dbg(ispi->dev, "FLMAP0=0x%08x\n", buf[1]); 1279 1280 if (buf[0] != FLVALSIG_MAGIC) { 1281 dev_warn(ispi->dev, "descriptor signature not valid\n"); 1282 return -ENODEV; 1283 } 1284 1285 fcba = (buf[1] & FLMAP0_FCBA_MASK) << 4; 1286 dev_dbg(ispi->dev, "FCBA=%#x\n", fcba); 1287 1288 op.addr.val = fcba; 1289 op.data.buf.in = &flcomp; 1290 op.data.nbytes = sizeof(flcomp); 1291 1292 ret = intel_spi_read(ispi, NULL, NULL, &op); 1293 if (ret) { 1294 dev_warn(ispi->dev, "failed to read FLCOMP\n"); 1295 return -ENODEV; 1296 } 1297 1298 dev_dbg(ispi->dev, "FLCOMP=0x%08x\n", flcomp); 1299 1300 switch (flcomp & FLCOMP_C0DEN_MASK) { 1301 case FLCOMP_C0DEN_512K: 1302 ispi->chip0_size = SZ_512K; 1303 break; 1304 case FLCOMP_C0DEN_1M: 1305 ispi->chip0_size = SZ_1M; 1306 break; 1307 case FLCOMP_C0DEN_2M: 1308 ispi->chip0_size = SZ_2M; 1309 break; 1310 case FLCOMP_C0DEN_4M: 1311 ispi->chip0_size = SZ_4M; 1312 break; 1313 case FLCOMP_C0DEN_8M: 1314 ispi->chip0_size = SZ_8M; 1315 break; 1316 case FLCOMP_C0DEN_16M: 1317 ispi->chip0_size = SZ_16M; 1318 break; 1319 case FLCOMP_C0DEN_32M: 1320 ispi->chip0_size = SZ_32M; 1321 break; 1322 case FLCOMP_C0DEN_64M: 1323 ispi->chip0_size = SZ_64M; 1324 break; 1325 default: 1326 return -EINVAL; 1327 } 1328 1329 dev_dbg(ispi->dev, "chip0 size %zd KB\n", ispi->chip0_size / SZ_1K); 1330 1331 nc = (buf[1] & FLMAP0_NC_MASK) >> FLMAP0_NC_SHIFT; 1332 if (!nc) 1333 ispi->master->num_chipselect = 1; 1334 else if (nc == 1) 1335 ispi->master->num_chipselect = 2; 1336 else 1337 return -EINVAL; 1338 1339 dev_dbg(ispi->dev, "%u flash components found\n", 1340 ispi->master->num_chipselect); 1341 return 0; 1342 } 1343 1344 static int intel_spi_populate_chip(struct intel_spi *ispi) 1345 { 1346 struct flash_platform_data *pdata; 1347 struct spi_board_info chip; 1348 int ret; 1349 1350 pdata = devm_kzalloc(ispi->dev, sizeof(*pdata), GFP_KERNEL); 1351 if (!pdata) 1352 return -ENOMEM; 1353 1354 pdata->nr_parts = 1; 1355 pdata->parts = devm_kcalloc(ispi->dev, pdata->nr_parts, 1356 sizeof(*pdata->parts), GFP_KERNEL); 1357 if (!pdata->parts) 1358 return -ENOMEM; 1359 1360 intel_spi_fill_partition(ispi, pdata->parts); 1361 1362 memset(&chip, 0, sizeof(chip)); 1363 snprintf(chip.modalias, 8, "spi-nor"); 1364 chip.platform_data = pdata; 1365 1366 if (!spi_new_device(ispi->master, &chip)) 1367 return -ENODEV; 1368 1369 /* Add the second chip if present */ 1370 if (ispi->master->num_chipselect < 2) 1371 return 0; 1372 1373 ret = intel_spi_read_desc(ispi); 1374 if (ret) 1375 return ret; 1376 1377 chip.platform_data = NULL; 1378 chip.chip_select = 1; 1379 1380 if (!spi_new_device(ispi->master, &chip)) 1381 return -ENODEV; 1382 return 0; 1383 } 1384 1385 /** 1386 * intel_spi_probe() - Probe the Intel SPI flash controller 1387 * @dev: Pointer to the parent device 1388 * @mem: MMIO resource 1389 * @info: Platform specific information 1390 * 1391 * Probes Intel SPI flash controller and creates the flash chip device. 1392 * Returns %0 on success and negative errno in case of failure. 1393 */ 1394 int intel_spi_probe(struct device *dev, struct resource *mem, 1395 const struct intel_spi_boardinfo *info) 1396 { 1397 struct spi_controller *master; 1398 struct intel_spi *ispi; 1399 int ret; 1400 1401 master = devm_spi_alloc_master(dev, sizeof(*ispi)); 1402 if (!master) 1403 return -ENOMEM; 1404 1405 master->mem_ops = &intel_spi_mem_ops; 1406 1407 ispi = spi_master_get_devdata(master); 1408 1409 ispi->base = devm_ioremap_resource(dev, mem); 1410 if (IS_ERR(ispi->base)) 1411 return PTR_ERR(ispi->base); 1412 1413 ispi->dev = dev; 1414 ispi->master = master; 1415 ispi->info = info; 1416 1417 ret = intel_spi_init(ispi); 1418 if (ret) 1419 return ret; 1420 1421 ret = devm_spi_register_master(dev, master); 1422 if (ret) 1423 return ret; 1424 1425 return intel_spi_populate_chip(ispi); 1426 } 1427 EXPORT_SYMBOL_GPL(intel_spi_probe); 1428 1429 MODULE_DESCRIPTION("Intel PCH/PCU SPI flash core driver"); 1430 MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>"); 1431 MODULE_LICENSE("GPL v2"); 1432