1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2003-2020, Intel Corporation. All rights reserved. 4 * Intel Management Engine Interface (Intel MEI) Linux driver 5 */ 6 7 #include <linux/pci.h> 8 9 #include <linux/kthread.h> 10 #include <linux/interrupt.h> 11 #include <linux/pm_runtime.h> 12 #include <linux/sizes.h> 13 14 #include "mei_dev.h" 15 #include "hbm.h" 16 17 #include "hw-me.h" 18 #include "hw-me-regs.h" 19 20 #include "mei-trace.h" 21 22 /** 23 * mei_me_reg_read - Reads 32bit data from the mei device 24 * 25 * @hw: the me hardware structure 26 * @offset: offset from which to read the data 27 * 28 * Return: register value (u32) 29 */ 30 static inline u32 mei_me_reg_read(const struct mei_me_hw *hw, 31 unsigned long offset) 32 { 33 return ioread32(hw->mem_addr + offset); 34 } 35 36 37 /** 38 * mei_me_reg_write - Writes 32bit data to the mei device 39 * 40 * @hw: the me hardware structure 41 * @offset: offset from which to write the data 42 * @value: register value to write (u32) 43 */ 44 static inline void mei_me_reg_write(const struct mei_me_hw *hw, 45 unsigned long offset, u32 value) 46 { 47 iowrite32(value, hw->mem_addr + offset); 48 } 49 50 /** 51 * mei_me_mecbrw_read - Reads 32bit data from ME circular buffer 52 * read window register 53 * 54 * @dev: the device structure 55 * 56 * Return: ME_CB_RW register value (u32) 57 */ 58 static inline u32 mei_me_mecbrw_read(const struct mei_device *dev) 59 { 60 return mei_me_reg_read(to_me_hw(dev), ME_CB_RW); 61 } 62 63 /** 64 * mei_me_hcbww_write - write 32bit data to the host circular buffer 65 * 66 * @dev: the device structure 67 * @data: 32bit data to be written to the host circular buffer 68 */ 69 static inline void mei_me_hcbww_write(struct mei_device *dev, u32 data) 70 { 71 mei_me_reg_write(to_me_hw(dev), H_CB_WW, data); 72 } 73 74 /** 75 * mei_me_mecsr_read - Reads 32bit data from the ME CSR 76 * 77 * @dev: the device structure 78 * 79 * Return: ME_CSR_HA register value (u32) 80 */ 81 static inline u32 mei_me_mecsr_read(const struct mei_device *dev) 82 { 83 u32 reg; 84 85 reg = mei_me_reg_read(to_me_hw(dev), ME_CSR_HA); 86 trace_mei_reg_read(dev->dev, "ME_CSR_HA", ME_CSR_HA, reg); 87 88 return reg; 89 } 90 91 /** 92 * mei_hcsr_read - Reads 32bit data from the host CSR 93 * 94 * @dev: the device structure 95 * 96 * Return: H_CSR register value (u32) 97 */ 98 static inline u32 mei_hcsr_read(const struct mei_device *dev) 99 { 100 u32 reg; 101 102 reg = mei_me_reg_read(to_me_hw(dev), H_CSR); 103 trace_mei_reg_read(dev->dev, "H_CSR", H_CSR, reg); 104 105 return reg; 106 } 107 108 /** 109 * mei_hcsr_write - writes H_CSR register to the mei device 110 * 111 * @dev: the device structure 112 * @reg: new register value 113 */ 114 static inline void mei_hcsr_write(struct mei_device *dev, u32 reg) 115 { 116 trace_mei_reg_write(dev->dev, "H_CSR", H_CSR, reg); 117 mei_me_reg_write(to_me_hw(dev), H_CSR, reg); 118 } 119 120 /** 121 * mei_hcsr_set - writes H_CSR register to the mei device, 122 * and ignores the H_IS bit for it is write-one-to-zero. 123 * 124 * @dev: the device structure 125 * @reg: new register value 126 */ 127 static inline void mei_hcsr_set(struct mei_device *dev, u32 reg) 128 { 129 reg &= ~H_CSR_IS_MASK; 130 mei_hcsr_write(dev, reg); 131 } 132 133 /** 134 * mei_hcsr_set_hig - set host interrupt (set H_IG) 135 * 136 * @dev: the device structure 137 */ 138 static inline void mei_hcsr_set_hig(struct mei_device *dev) 139 { 140 u32 hcsr; 141 142 hcsr = mei_hcsr_read(dev) | H_IG; 143 mei_hcsr_set(dev, hcsr); 144 } 145 146 /** 147 * mei_me_d0i3c_read - Reads 32bit data from the D0I3C register 148 * 149 * @dev: the device structure 150 * 151 * Return: H_D0I3C register value (u32) 152 */ 153 static inline u32 mei_me_d0i3c_read(const struct mei_device *dev) 154 { 155 u32 reg; 156 157 reg = mei_me_reg_read(to_me_hw(dev), H_D0I3C); 158 trace_mei_reg_read(dev->dev, "H_D0I3C", H_D0I3C, reg); 159 160 return reg; 161 } 162 163 /** 164 * mei_me_d0i3c_write - writes H_D0I3C register to device 165 * 166 * @dev: the device structure 167 * @reg: new register value 168 */ 169 static inline void mei_me_d0i3c_write(struct mei_device *dev, u32 reg) 170 { 171 trace_mei_reg_write(dev->dev, "H_D0I3C", H_D0I3C, reg); 172 mei_me_reg_write(to_me_hw(dev), H_D0I3C, reg); 173 } 174 175 /** 176 * mei_me_trc_status - read trc status register 177 * 178 * @dev: mei device 179 * @trc: trc status register value 180 * 181 * Return: 0 on success, error otherwise 182 */ 183 static int mei_me_trc_status(struct mei_device *dev, u32 *trc) 184 { 185 struct mei_me_hw *hw = to_me_hw(dev); 186 187 if (!hw->cfg->hw_trc_supported) 188 return -EOPNOTSUPP; 189 190 *trc = mei_me_reg_read(hw, ME_TRC); 191 trace_mei_reg_read(dev->dev, "ME_TRC", ME_TRC, *trc); 192 193 return 0; 194 } 195 196 /** 197 * mei_me_fw_status - read fw status register from pci config space 198 * 199 * @dev: mei device 200 * @fw_status: fw status register values 201 * 202 * Return: 0 on success, error otherwise 203 */ 204 static int mei_me_fw_status(struct mei_device *dev, 205 struct mei_fw_status *fw_status) 206 { 207 struct mei_me_hw *hw = to_me_hw(dev); 208 const struct mei_fw_status *fw_src = &hw->cfg->fw_status; 209 int ret; 210 int i; 211 212 if (!fw_status || !hw->read_fws) 213 return -EINVAL; 214 215 fw_status->count = fw_src->count; 216 for (i = 0; i < fw_src->count && i < MEI_FW_STATUS_MAX; i++) { 217 ret = hw->read_fws(dev, fw_src->status[i], 218 &fw_status->status[i]); 219 trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HFS_X", 220 fw_src->status[i], 221 fw_status->status[i]); 222 if (ret) 223 return ret; 224 } 225 226 return 0; 227 } 228 229 /** 230 * mei_me_hw_config - configure hw dependent settings 231 * 232 * @dev: mei device 233 * 234 * Return: 235 * * -EINVAL when read_fws is not set 236 * * 0 on success 237 * 238 */ 239 static int mei_me_hw_config(struct mei_device *dev) 240 { 241 struct mei_me_hw *hw = to_me_hw(dev); 242 u32 hcsr, reg; 243 244 if (WARN_ON(!hw->read_fws)) 245 return -EINVAL; 246 247 /* Doesn't change in runtime */ 248 hcsr = mei_hcsr_read(dev); 249 hw->hbuf_depth = (hcsr & H_CBD) >> 24; 250 251 reg = 0; 252 hw->read_fws(dev, PCI_CFG_HFS_1, ®); 253 trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HFS_1", PCI_CFG_HFS_1, reg); 254 hw->d0i3_supported = 255 ((reg & PCI_CFG_HFS_1_D0I3_MSK) == PCI_CFG_HFS_1_D0I3_MSK); 256 257 hw->pg_state = MEI_PG_OFF; 258 if (hw->d0i3_supported) { 259 reg = mei_me_d0i3c_read(dev); 260 if (reg & H_D0I3C_I3) 261 hw->pg_state = MEI_PG_ON; 262 } 263 264 return 0; 265 } 266 267 /** 268 * mei_me_pg_state - translate internal pg state 269 * to the mei power gating state 270 * 271 * @dev: mei device 272 * 273 * Return: MEI_PG_OFF if aliveness is on and MEI_PG_ON otherwise 274 */ 275 static inline enum mei_pg_state mei_me_pg_state(struct mei_device *dev) 276 { 277 struct mei_me_hw *hw = to_me_hw(dev); 278 279 return hw->pg_state; 280 } 281 282 static inline u32 me_intr_src(u32 hcsr) 283 { 284 return hcsr & H_CSR_IS_MASK; 285 } 286 287 /** 288 * me_intr_disable - disables mei device interrupts 289 * using supplied hcsr register value. 290 * 291 * @dev: the device structure 292 * @hcsr: supplied hcsr register value 293 */ 294 static inline void me_intr_disable(struct mei_device *dev, u32 hcsr) 295 { 296 hcsr &= ~H_CSR_IE_MASK; 297 mei_hcsr_set(dev, hcsr); 298 } 299 300 /** 301 * me_intr_clear - clear and stop interrupts 302 * 303 * @dev: the device structure 304 * @hcsr: supplied hcsr register value 305 */ 306 static inline void me_intr_clear(struct mei_device *dev, u32 hcsr) 307 { 308 if (me_intr_src(hcsr)) 309 mei_hcsr_write(dev, hcsr); 310 } 311 312 /** 313 * mei_me_intr_clear - clear and stop interrupts 314 * 315 * @dev: the device structure 316 */ 317 static void mei_me_intr_clear(struct mei_device *dev) 318 { 319 u32 hcsr = mei_hcsr_read(dev); 320 321 me_intr_clear(dev, hcsr); 322 } 323 /** 324 * mei_me_intr_enable - enables mei device interrupts 325 * 326 * @dev: the device structure 327 */ 328 static void mei_me_intr_enable(struct mei_device *dev) 329 { 330 u32 hcsr = mei_hcsr_read(dev); 331 332 hcsr |= H_CSR_IE_MASK; 333 mei_hcsr_set(dev, hcsr); 334 } 335 336 /** 337 * mei_me_intr_disable - disables mei device interrupts 338 * 339 * @dev: the device structure 340 */ 341 static void mei_me_intr_disable(struct mei_device *dev) 342 { 343 u32 hcsr = mei_hcsr_read(dev); 344 345 me_intr_disable(dev, hcsr); 346 } 347 348 /** 349 * mei_me_synchronize_irq - wait for pending IRQ handlers 350 * 351 * @dev: the device structure 352 */ 353 static void mei_me_synchronize_irq(struct mei_device *dev) 354 { 355 struct mei_me_hw *hw = to_me_hw(dev); 356 357 synchronize_irq(hw->irq); 358 } 359 360 /** 361 * mei_me_hw_reset_release - release device from the reset 362 * 363 * @dev: the device structure 364 */ 365 static void mei_me_hw_reset_release(struct mei_device *dev) 366 { 367 u32 hcsr = mei_hcsr_read(dev); 368 369 hcsr |= H_IG; 370 hcsr &= ~H_RST; 371 mei_hcsr_set(dev, hcsr); 372 } 373 374 /** 375 * mei_me_host_set_ready - enable device 376 * 377 * @dev: mei device 378 */ 379 static void mei_me_host_set_ready(struct mei_device *dev) 380 { 381 u32 hcsr = mei_hcsr_read(dev); 382 383 hcsr |= H_CSR_IE_MASK | H_IG | H_RDY; 384 mei_hcsr_set(dev, hcsr); 385 } 386 387 /** 388 * mei_me_host_is_ready - check whether the host has turned ready 389 * 390 * @dev: mei device 391 * Return: bool 392 */ 393 static bool mei_me_host_is_ready(struct mei_device *dev) 394 { 395 u32 hcsr = mei_hcsr_read(dev); 396 397 return (hcsr & H_RDY) == H_RDY; 398 } 399 400 /** 401 * mei_me_hw_is_ready - check whether the me(hw) has turned ready 402 * 403 * @dev: mei device 404 * Return: bool 405 */ 406 static bool mei_me_hw_is_ready(struct mei_device *dev) 407 { 408 u32 mecsr = mei_me_mecsr_read(dev); 409 410 return (mecsr & ME_RDY_HRA) == ME_RDY_HRA; 411 } 412 413 /** 414 * mei_me_hw_is_resetting - check whether the me(hw) is in reset 415 * 416 * @dev: mei device 417 * Return: bool 418 */ 419 static bool mei_me_hw_is_resetting(struct mei_device *dev) 420 { 421 u32 mecsr = mei_me_mecsr_read(dev); 422 423 return (mecsr & ME_RST_HRA) == ME_RST_HRA; 424 } 425 426 /** 427 * mei_me_hw_ready_wait - wait until the me(hw) has turned ready 428 * or timeout is reached 429 * 430 * @dev: mei device 431 * Return: 0 on success, error otherwise 432 */ 433 static int mei_me_hw_ready_wait(struct mei_device *dev) 434 { 435 mutex_unlock(&dev->device_lock); 436 wait_event_timeout(dev->wait_hw_ready, 437 dev->recvd_hw_ready, 438 mei_secs_to_jiffies(MEI_HW_READY_TIMEOUT)); 439 mutex_lock(&dev->device_lock); 440 if (!dev->recvd_hw_ready) { 441 dev_err(dev->dev, "wait hw ready failed\n"); 442 return -ETIME; 443 } 444 445 mei_me_hw_reset_release(dev); 446 dev->recvd_hw_ready = false; 447 return 0; 448 } 449 450 /** 451 * mei_me_hw_start - hw start routine 452 * 453 * @dev: mei device 454 * Return: 0 on success, error otherwise 455 */ 456 static int mei_me_hw_start(struct mei_device *dev) 457 { 458 int ret = mei_me_hw_ready_wait(dev); 459 460 if (ret) 461 return ret; 462 dev_dbg(dev->dev, "hw is ready\n"); 463 464 mei_me_host_set_ready(dev); 465 return ret; 466 } 467 468 469 /** 470 * mei_hbuf_filled_slots - gets number of device filled buffer slots 471 * 472 * @dev: the device structure 473 * 474 * Return: number of filled slots 475 */ 476 static unsigned char mei_hbuf_filled_slots(struct mei_device *dev) 477 { 478 u32 hcsr; 479 char read_ptr, write_ptr; 480 481 hcsr = mei_hcsr_read(dev); 482 483 read_ptr = (char) ((hcsr & H_CBRP) >> 8); 484 write_ptr = (char) ((hcsr & H_CBWP) >> 16); 485 486 return (unsigned char) (write_ptr - read_ptr); 487 } 488 489 /** 490 * mei_me_hbuf_is_empty - checks if host buffer is empty. 491 * 492 * @dev: the device structure 493 * 494 * Return: true if empty, false - otherwise. 495 */ 496 static bool mei_me_hbuf_is_empty(struct mei_device *dev) 497 { 498 return mei_hbuf_filled_slots(dev) == 0; 499 } 500 501 /** 502 * mei_me_hbuf_empty_slots - counts write empty slots. 503 * 504 * @dev: the device structure 505 * 506 * Return: -EOVERFLOW if overflow, otherwise empty slots count 507 */ 508 static int mei_me_hbuf_empty_slots(struct mei_device *dev) 509 { 510 struct mei_me_hw *hw = to_me_hw(dev); 511 unsigned char filled_slots, empty_slots; 512 513 filled_slots = mei_hbuf_filled_slots(dev); 514 empty_slots = hw->hbuf_depth - filled_slots; 515 516 /* check for overflow */ 517 if (filled_slots > hw->hbuf_depth) 518 return -EOVERFLOW; 519 520 return empty_slots; 521 } 522 523 /** 524 * mei_me_hbuf_depth - returns depth of the hw buffer. 525 * 526 * @dev: the device structure 527 * 528 * Return: size of hw buffer in slots 529 */ 530 static u32 mei_me_hbuf_depth(const struct mei_device *dev) 531 { 532 struct mei_me_hw *hw = to_me_hw(dev); 533 534 return hw->hbuf_depth; 535 } 536 537 /** 538 * mei_me_hbuf_write - writes a message to host hw buffer. 539 * 540 * @dev: the device structure 541 * @hdr: header of message 542 * @hdr_len: header length in bytes: must be multiplication of a slot (4bytes) 543 * @data: payload 544 * @data_len: payload length in bytes 545 * 546 * Return: 0 if success, < 0 - otherwise. 547 */ 548 static int mei_me_hbuf_write(struct mei_device *dev, 549 const void *hdr, size_t hdr_len, 550 const void *data, size_t data_len) 551 { 552 unsigned long rem; 553 unsigned long i; 554 const u32 *reg_buf; 555 u32 dw_cnt; 556 int empty_slots; 557 558 if (WARN_ON(!hdr || !data || hdr_len & 0x3)) 559 return -EINVAL; 560 561 dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM((struct mei_msg_hdr *)hdr)); 562 563 empty_slots = mei_hbuf_empty_slots(dev); 564 dev_dbg(dev->dev, "empty slots = %hu.\n", empty_slots); 565 566 if (empty_slots < 0) 567 return -EOVERFLOW; 568 569 dw_cnt = mei_data2slots(hdr_len + data_len); 570 if (dw_cnt > (u32)empty_slots) 571 return -EMSGSIZE; 572 573 reg_buf = hdr; 574 for (i = 0; i < hdr_len / MEI_SLOT_SIZE; i++) 575 mei_me_hcbww_write(dev, reg_buf[i]); 576 577 reg_buf = data; 578 for (i = 0; i < data_len / MEI_SLOT_SIZE; i++) 579 mei_me_hcbww_write(dev, reg_buf[i]); 580 581 rem = data_len & 0x3; 582 if (rem > 0) { 583 u32 reg = 0; 584 585 memcpy(®, (const u8 *)data + data_len - rem, rem); 586 mei_me_hcbww_write(dev, reg); 587 } 588 589 mei_hcsr_set_hig(dev); 590 if (!mei_me_hw_is_ready(dev)) 591 return -EIO; 592 593 return 0; 594 } 595 596 /** 597 * mei_me_count_full_read_slots - counts read full slots. 598 * 599 * @dev: the device structure 600 * 601 * Return: -EOVERFLOW if overflow, otherwise filled slots count 602 */ 603 static int mei_me_count_full_read_slots(struct mei_device *dev) 604 { 605 u32 me_csr; 606 char read_ptr, write_ptr; 607 unsigned char buffer_depth, filled_slots; 608 609 me_csr = mei_me_mecsr_read(dev); 610 buffer_depth = (unsigned char)((me_csr & ME_CBD_HRA) >> 24); 611 read_ptr = (char) ((me_csr & ME_CBRP_HRA) >> 8); 612 write_ptr = (char) ((me_csr & ME_CBWP_HRA) >> 16); 613 filled_slots = (unsigned char) (write_ptr - read_ptr); 614 615 /* check for overflow */ 616 if (filled_slots > buffer_depth) 617 return -EOVERFLOW; 618 619 dev_dbg(dev->dev, "filled_slots =%08x\n", filled_slots); 620 return (int)filled_slots; 621 } 622 623 /** 624 * mei_me_read_slots - reads a message from mei device. 625 * 626 * @dev: the device structure 627 * @buffer: message buffer will be written 628 * @buffer_length: message size will be read 629 * 630 * Return: always 0 631 */ 632 static int mei_me_read_slots(struct mei_device *dev, unsigned char *buffer, 633 unsigned long buffer_length) 634 { 635 u32 *reg_buf = (u32 *)buffer; 636 637 for (; buffer_length >= MEI_SLOT_SIZE; buffer_length -= MEI_SLOT_SIZE) 638 *reg_buf++ = mei_me_mecbrw_read(dev); 639 640 if (buffer_length > 0) { 641 u32 reg = mei_me_mecbrw_read(dev); 642 643 memcpy(reg_buf, ®, buffer_length); 644 } 645 646 mei_hcsr_set_hig(dev); 647 return 0; 648 } 649 650 /** 651 * mei_me_pg_set - write pg enter register 652 * 653 * @dev: the device structure 654 */ 655 static void mei_me_pg_set(struct mei_device *dev) 656 { 657 struct mei_me_hw *hw = to_me_hw(dev); 658 u32 reg; 659 660 reg = mei_me_reg_read(hw, H_HPG_CSR); 661 trace_mei_reg_read(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); 662 663 reg |= H_HPG_CSR_PGI; 664 665 trace_mei_reg_write(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); 666 mei_me_reg_write(hw, H_HPG_CSR, reg); 667 } 668 669 /** 670 * mei_me_pg_unset - write pg exit register 671 * 672 * @dev: the device structure 673 */ 674 static void mei_me_pg_unset(struct mei_device *dev) 675 { 676 struct mei_me_hw *hw = to_me_hw(dev); 677 u32 reg; 678 679 reg = mei_me_reg_read(hw, H_HPG_CSR); 680 trace_mei_reg_read(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); 681 682 WARN(!(reg & H_HPG_CSR_PGI), "PGI is not set\n"); 683 684 reg |= H_HPG_CSR_PGIHEXR; 685 686 trace_mei_reg_write(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); 687 mei_me_reg_write(hw, H_HPG_CSR, reg); 688 } 689 690 /** 691 * mei_me_pg_legacy_enter_sync - perform legacy pg entry procedure 692 * 693 * @dev: the device structure 694 * 695 * Return: 0 on success an error code otherwise 696 */ 697 static int mei_me_pg_legacy_enter_sync(struct mei_device *dev) 698 { 699 struct mei_me_hw *hw = to_me_hw(dev); 700 unsigned long timeout = mei_secs_to_jiffies(MEI_PGI_TIMEOUT); 701 int ret; 702 703 dev->pg_event = MEI_PG_EVENT_WAIT; 704 705 ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_ENTRY_REQ_CMD); 706 if (ret) 707 return ret; 708 709 mutex_unlock(&dev->device_lock); 710 wait_event_timeout(dev->wait_pg, 711 dev->pg_event == MEI_PG_EVENT_RECEIVED, timeout); 712 mutex_lock(&dev->device_lock); 713 714 if (dev->pg_event == MEI_PG_EVENT_RECEIVED) { 715 mei_me_pg_set(dev); 716 ret = 0; 717 } else { 718 ret = -ETIME; 719 } 720 721 dev->pg_event = MEI_PG_EVENT_IDLE; 722 hw->pg_state = MEI_PG_ON; 723 724 return ret; 725 } 726 727 /** 728 * mei_me_pg_legacy_exit_sync - perform legacy pg exit procedure 729 * 730 * @dev: the device structure 731 * 732 * Return: 0 on success an error code otherwise 733 */ 734 static int mei_me_pg_legacy_exit_sync(struct mei_device *dev) 735 { 736 struct mei_me_hw *hw = to_me_hw(dev); 737 unsigned long timeout = mei_secs_to_jiffies(MEI_PGI_TIMEOUT); 738 int ret; 739 740 if (dev->pg_event == MEI_PG_EVENT_RECEIVED) 741 goto reply; 742 743 dev->pg_event = MEI_PG_EVENT_WAIT; 744 745 mei_me_pg_unset(dev); 746 747 mutex_unlock(&dev->device_lock); 748 wait_event_timeout(dev->wait_pg, 749 dev->pg_event == MEI_PG_EVENT_RECEIVED, timeout); 750 mutex_lock(&dev->device_lock); 751 752 reply: 753 if (dev->pg_event != MEI_PG_EVENT_RECEIVED) { 754 ret = -ETIME; 755 goto out; 756 } 757 758 dev->pg_event = MEI_PG_EVENT_INTR_WAIT; 759 ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_EXIT_RES_CMD); 760 if (ret) 761 return ret; 762 763 mutex_unlock(&dev->device_lock); 764 wait_event_timeout(dev->wait_pg, 765 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED, timeout); 766 mutex_lock(&dev->device_lock); 767 768 if (dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED) 769 ret = 0; 770 else 771 ret = -ETIME; 772 773 out: 774 dev->pg_event = MEI_PG_EVENT_IDLE; 775 hw->pg_state = MEI_PG_OFF; 776 777 return ret; 778 } 779 780 /** 781 * mei_me_pg_in_transition - is device now in pg transition 782 * 783 * @dev: the device structure 784 * 785 * Return: true if in pg transition, false otherwise 786 */ 787 static bool mei_me_pg_in_transition(struct mei_device *dev) 788 { 789 return dev->pg_event >= MEI_PG_EVENT_WAIT && 790 dev->pg_event <= MEI_PG_EVENT_INTR_WAIT; 791 } 792 793 /** 794 * mei_me_pg_is_enabled - detect if PG is supported by HW 795 * 796 * @dev: the device structure 797 * 798 * Return: true is pg supported, false otherwise 799 */ 800 static bool mei_me_pg_is_enabled(struct mei_device *dev) 801 { 802 struct mei_me_hw *hw = to_me_hw(dev); 803 u32 reg = mei_me_mecsr_read(dev); 804 805 if (hw->d0i3_supported) 806 return true; 807 808 if ((reg & ME_PGIC_HRA) == 0) 809 goto notsupported; 810 811 if (!dev->hbm_f_pg_supported) 812 goto notsupported; 813 814 return true; 815 816 notsupported: 817 dev_dbg(dev->dev, "pg: not supported: d0i3 = %d HGP = %d hbm version %d.%d ?= %d.%d\n", 818 hw->d0i3_supported, 819 !!(reg & ME_PGIC_HRA), 820 dev->version.major_version, 821 dev->version.minor_version, 822 HBM_MAJOR_VERSION_PGI, 823 HBM_MINOR_VERSION_PGI); 824 825 return false; 826 } 827 828 /** 829 * mei_me_d0i3_set - write d0i3 register bit on mei device. 830 * 831 * @dev: the device structure 832 * @intr: ask for interrupt 833 * 834 * Return: D0I3C register value 835 */ 836 static u32 mei_me_d0i3_set(struct mei_device *dev, bool intr) 837 { 838 u32 reg = mei_me_d0i3c_read(dev); 839 840 reg |= H_D0I3C_I3; 841 if (intr) 842 reg |= H_D0I3C_IR; 843 else 844 reg &= ~H_D0I3C_IR; 845 mei_me_d0i3c_write(dev, reg); 846 /* read it to ensure HW consistency */ 847 reg = mei_me_d0i3c_read(dev); 848 return reg; 849 } 850 851 /** 852 * mei_me_d0i3_unset - clean d0i3 register bit on mei device. 853 * 854 * @dev: the device structure 855 * 856 * Return: D0I3C register value 857 */ 858 static u32 mei_me_d0i3_unset(struct mei_device *dev) 859 { 860 u32 reg = mei_me_d0i3c_read(dev); 861 862 reg &= ~H_D0I3C_I3; 863 reg |= H_D0I3C_IR; 864 mei_me_d0i3c_write(dev, reg); 865 /* read it to ensure HW consistency */ 866 reg = mei_me_d0i3c_read(dev); 867 return reg; 868 } 869 870 /** 871 * mei_me_d0i3_enter_sync - perform d0i3 entry procedure 872 * 873 * @dev: the device structure 874 * 875 * Return: 0 on success an error code otherwise 876 */ 877 static int mei_me_d0i3_enter_sync(struct mei_device *dev) 878 { 879 struct mei_me_hw *hw = to_me_hw(dev); 880 unsigned long d0i3_timeout = mei_secs_to_jiffies(MEI_D0I3_TIMEOUT); 881 unsigned long pgi_timeout = mei_secs_to_jiffies(MEI_PGI_TIMEOUT); 882 int ret; 883 u32 reg; 884 885 reg = mei_me_d0i3c_read(dev); 886 if (reg & H_D0I3C_I3) { 887 /* we are in d0i3, nothing to do */ 888 dev_dbg(dev->dev, "d0i3 set not needed\n"); 889 ret = 0; 890 goto on; 891 } 892 893 /* PGI entry procedure */ 894 dev->pg_event = MEI_PG_EVENT_WAIT; 895 896 ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_ENTRY_REQ_CMD); 897 if (ret) 898 /* FIXME: should we reset here? */ 899 goto out; 900 901 mutex_unlock(&dev->device_lock); 902 wait_event_timeout(dev->wait_pg, 903 dev->pg_event == MEI_PG_EVENT_RECEIVED, pgi_timeout); 904 mutex_lock(&dev->device_lock); 905 906 if (dev->pg_event != MEI_PG_EVENT_RECEIVED) { 907 ret = -ETIME; 908 goto out; 909 } 910 /* end PGI entry procedure */ 911 912 dev->pg_event = MEI_PG_EVENT_INTR_WAIT; 913 914 reg = mei_me_d0i3_set(dev, true); 915 if (!(reg & H_D0I3C_CIP)) { 916 dev_dbg(dev->dev, "d0i3 enter wait not needed\n"); 917 ret = 0; 918 goto on; 919 } 920 921 mutex_unlock(&dev->device_lock); 922 wait_event_timeout(dev->wait_pg, 923 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED, d0i3_timeout); 924 mutex_lock(&dev->device_lock); 925 926 if (dev->pg_event != MEI_PG_EVENT_INTR_RECEIVED) { 927 reg = mei_me_d0i3c_read(dev); 928 if (!(reg & H_D0I3C_I3)) { 929 ret = -ETIME; 930 goto out; 931 } 932 } 933 934 ret = 0; 935 on: 936 hw->pg_state = MEI_PG_ON; 937 out: 938 dev->pg_event = MEI_PG_EVENT_IDLE; 939 dev_dbg(dev->dev, "d0i3 enter ret = %d\n", ret); 940 return ret; 941 } 942 943 /** 944 * mei_me_d0i3_enter - perform d0i3 entry procedure 945 * no hbm PG handshake 946 * no waiting for confirmation; runs with interrupts 947 * disabled 948 * 949 * @dev: the device structure 950 * 951 * Return: 0 on success an error code otherwise 952 */ 953 static int mei_me_d0i3_enter(struct mei_device *dev) 954 { 955 struct mei_me_hw *hw = to_me_hw(dev); 956 u32 reg; 957 958 reg = mei_me_d0i3c_read(dev); 959 if (reg & H_D0I3C_I3) { 960 /* we are in d0i3, nothing to do */ 961 dev_dbg(dev->dev, "already d0i3 : set not needed\n"); 962 goto on; 963 } 964 965 mei_me_d0i3_set(dev, false); 966 on: 967 hw->pg_state = MEI_PG_ON; 968 dev->pg_event = MEI_PG_EVENT_IDLE; 969 dev_dbg(dev->dev, "d0i3 enter\n"); 970 return 0; 971 } 972 973 /** 974 * mei_me_d0i3_exit_sync - perform d0i3 exit procedure 975 * 976 * @dev: the device structure 977 * 978 * Return: 0 on success an error code otherwise 979 */ 980 static int mei_me_d0i3_exit_sync(struct mei_device *dev) 981 { 982 struct mei_me_hw *hw = to_me_hw(dev); 983 unsigned long timeout = mei_secs_to_jiffies(MEI_D0I3_TIMEOUT); 984 int ret; 985 u32 reg; 986 987 dev->pg_event = MEI_PG_EVENT_INTR_WAIT; 988 989 reg = mei_me_d0i3c_read(dev); 990 if (!(reg & H_D0I3C_I3)) { 991 /* we are not in d0i3, nothing to do */ 992 dev_dbg(dev->dev, "d0i3 exit not needed\n"); 993 ret = 0; 994 goto off; 995 } 996 997 reg = mei_me_d0i3_unset(dev); 998 if (!(reg & H_D0I3C_CIP)) { 999 dev_dbg(dev->dev, "d0i3 exit wait not needed\n"); 1000 ret = 0; 1001 goto off; 1002 } 1003 1004 mutex_unlock(&dev->device_lock); 1005 wait_event_timeout(dev->wait_pg, 1006 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED, timeout); 1007 mutex_lock(&dev->device_lock); 1008 1009 if (dev->pg_event != MEI_PG_EVENT_INTR_RECEIVED) { 1010 reg = mei_me_d0i3c_read(dev); 1011 if (reg & H_D0I3C_I3) { 1012 ret = -ETIME; 1013 goto out; 1014 } 1015 } 1016 1017 ret = 0; 1018 off: 1019 hw->pg_state = MEI_PG_OFF; 1020 out: 1021 dev->pg_event = MEI_PG_EVENT_IDLE; 1022 1023 dev_dbg(dev->dev, "d0i3 exit ret = %d\n", ret); 1024 return ret; 1025 } 1026 1027 /** 1028 * mei_me_pg_legacy_intr - perform legacy pg processing 1029 * in interrupt thread handler 1030 * 1031 * @dev: the device structure 1032 */ 1033 static void mei_me_pg_legacy_intr(struct mei_device *dev) 1034 { 1035 struct mei_me_hw *hw = to_me_hw(dev); 1036 1037 if (dev->pg_event != MEI_PG_EVENT_INTR_WAIT) 1038 return; 1039 1040 dev->pg_event = MEI_PG_EVENT_INTR_RECEIVED; 1041 hw->pg_state = MEI_PG_OFF; 1042 if (waitqueue_active(&dev->wait_pg)) 1043 wake_up(&dev->wait_pg); 1044 } 1045 1046 /** 1047 * mei_me_d0i3_intr - perform d0i3 processing in interrupt thread handler 1048 * 1049 * @dev: the device structure 1050 * @intr_source: interrupt source 1051 */ 1052 static void mei_me_d0i3_intr(struct mei_device *dev, u32 intr_source) 1053 { 1054 struct mei_me_hw *hw = to_me_hw(dev); 1055 1056 if (dev->pg_event == MEI_PG_EVENT_INTR_WAIT && 1057 (intr_source & H_D0I3C_IS)) { 1058 dev->pg_event = MEI_PG_EVENT_INTR_RECEIVED; 1059 if (hw->pg_state == MEI_PG_ON) { 1060 hw->pg_state = MEI_PG_OFF; 1061 if (dev->hbm_state != MEI_HBM_IDLE) { 1062 /* 1063 * force H_RDY because it could be 1064 * wiped off during PG 1065 */ 1066 dev_dbg(dev->dev, "d0i3 set host ready\n"); 1067 mei_me_host_set_ready(dev); 1068 } 1069 } else { 1070 hw->pg_state = MEI_PG_ON; 1071 } 1072 1073 wake_up(&dev->wait_pg); 1074 } 1075 1076 if (hw->pg_state == MEI_PG_ON && (intr_source & H_IS)) { 1077 /* 1078 * HW sent some data and we are in D0i3, so 1079 * we got here because of HW initiated exit from D0i3. 1080 * Start runtime pm resume sequence to exit low power state. 1081 */ 1082 dev_dbg(dev->dev, "d0i3 want resume\n"); 1083 mei_hbm_pg_resume(dev); 1084 } 1085 } 1086 1087 /** 1088 * mei_me_pg_intr - perform pg processing in interrupt thread handler 1089 * 1090 * @dev: the device structure 1091 * @intr_source: interrupt source 1092 */ 1093 static void mei_me_pg_intr(struct mei_device *dev, u32 intr_source) 1094 { 1095 struct mei_me_hw *hw = to_me_hw(dev); 1096 1097 if (hw->d0i3_supported) 1098 mei_me_d0i3_intr(dev, intr_source); 1099 else 1100 mei_me_pg_legacy_intr(dev); 1101 } 1102 1103 /** 1104 * mei_me_pg_enter_sync - perform runtime pm entry procedure 1105 * 1106 * @dev: the device structure 1107 * 1108 * Return: 0 on success an error code otherwise 1109 */ 1110 int mei_me_pg_enter_sync(struct mei_device *dev) 1111 { 1112 struct mei_me_hw *hw = to_me_hw(dev); 1113 1114 if (hw->d0i3_supported) 1115 return mei_me_d0i3_enter_sync(dev); 1116 else 1117 return mei_me_pg_legacy_enter_sync(dev); 1118 } 1119 1120 /** 1121 * mei_me_pg_exit_sync - perform runtime pm exit procedure 1122 * 1123 * @dev: the device structure 1124 * 1125 * Return: 0 on success an error code otherwise 1126 */ 1127 int mei_me_pg_exit_sync(struct mei_device *dev) 1128 { 1129 struct mei_me_hw *hw = to_me_hw(dev); 1130 1131 if (hw->d0i3_supported) 1132 return mei_me_d0i3_exit_sync(dev); 1133 else 1134 return mei_me_pg_legacy_exit_sync(dev); 1135 } 1136 1137 /** 1138 * mei_me_hw_reset - resets fw via mei csr register. 1139 * 1140 * @dev: the device structure 1141 * @intr_enable: if interrupt should be enabled after reset. 1142 * 1143 * Return: 0 on success an error code otherwise 1144 */ 1145 static int mei_me_hw_reset(struct mei_device *dev, bool intr_enable) 1146 { 1147 struct mei_me_hw *hw = to_me_hw(dev); 1148 int ret; 1149 u32 hcsr; 1150 1151 if (intr_enable) { 1152 mei_me_intr_enable(dev); 1153 if (hw->d0i3_supported) { 1154 ret = mei_me_d0i3_exit_sync(dev); 1155 if (ret) 1156 return ret; 1157 } 1158 } 1159 1160 pm_runtime_set_active(dev->dev); 1161 1162 hcsr = mei_hcsr_read(dev); 1163 /* H_RST may be found lit before reset is started, 1164 * for example if preceding reset flow hasn't completed. 1165 * In that case asserting H_RST will be ignored, therefore 1166 * we need to clean H_RST bit to start a successful reset sequence. 1167 */ 1168 if ((hcsr & H_RST) == H_RST) { 1169 dev_warn(dev->dev, "H_RST is set = 0x%08X", hcsr); 1170 hcsr &= ~H_RST; 1171 mei_hcsr_set(dev, hcsr); 1172 hcsr = mei_hcsr_read(dev); 1173 } 1174 1175 hcsr |= H_RST | H_IG | H_CSR_IS_MASK; 1176 1177 if (!intr_enable) 1178 hcsr &= ~H_CSR_IE_MASK; 1179 1180 dev->recvd_hw_ready = false; 1181 mei_hcsr_write(dev, hcsr); 1182 1183 /* 1184 * Host reads the H_CSR once to ensure that the 1185 * posted write to H_CSR completes. 1186 */ 1187 hcsr = mei_hcsr_read(dev); 1188 1189 if ((hcsr & H_RST) == 0) 1190 dev_warn(dev->dev, "H_RST is not set = 0x%08X", hcsr); 1191 1192 if ((hcsr & H_RDY) == H_RDY) 1193 dev_warn(dev->dev, "H_RDY is not cleared 0x%08X", hcsr); 1194 1195 if (!intr_enable) { 1196 mei_me_hw_reset_release(dev); 1197 if (hw->d0i3_supported) { 1198 ret = mei_me_d0i3_enter(dev); 1199 if (ret) 1200 return ret; 1201 } 1202 } 1203 return 0; 1204 } 1205 1206 /** 1207 * mei_me_irq_quick_handler - The ISR of the MEI device 1208 * 1209 * @irq: The irq number 1210 * @dev_id: pointer to the device structure 1211 * 1212 * Return: irqreturn_t 1213 */ 1214 irqreturn_t mei_me_irq_quick_handler(int irq, void *dev_id) 1215 { 1216 struct mei_device *dev = (struct mei_device *)dev_id; 1217 u32 hcsr; 1218 1219 hcsr = mei_hcsr_read(dev); 1220 if (!me_intr_src(hcsr)) 1221 return IRQ_NONE; 1222 1223 dev_dbg(dev->dev, "interrupt source 0x%08X\n", me_intr_src(hcsr)); 1224 1225 /* disable interrupts on device */ 1226 me_intr_disable(dev, hcsr); 1227 return IRQ_WAKE_THREAD; 1228 } 1229 EXPORT_SYMBOL_GPL(mei_me_irq_quick_handler); 1230 1231 /** 1232 * mei_me_irq_thread_handler - function called after ISR to handle the interrupt 1233 * processing. 1234 * 1235 * @irq: The irq number 1236 * @dev_id: pointer to the device structure 1237 * 1238 * Return: irqreturn_t 1239 * 1240 */ 1241 irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id) 1242 { 1243 struct mei_device *dev = (struct mei_device *) dev_id; 1244 struct list_head cmpl_list; 1245 s32 slots; 1246 u32 hcsr; 1247 int rets = 0; 1248 1249 dev_dbg(dev->dev, "function called after ISR to handle the interrupt processing.\n"); 1250 /* initialize our complete list */ 1251 mutex_lock(&dev->device_lock); 1252 1253 hcsr = mei_hcsr_read(dev); 1254 me_intr_clear(dev, hcsr); 1255 1256 INIT_LIST_HEAD(&cmpl_list); 1257 1258 /* check if ME wants a reset */ 1259 if (!mei_hw_is_ready(dev) && dev->dev_state != MEI_DEV_RESETTING) { 1260 dev_warn(dev->dev, "FW not ready: resetting.\n"); 1261 if (dev->dev_state == MEI_DEV_POWERING_DOWN || 1262 dev->dev_state == MEI_DEV_POWER_DOWN) 1263 mei_cl_all_disconnect(dev); 1264 else if (dev->dev_state != MEI_DEV_DISABLED) 1265 schedule_work(&dev->reset_work); 1266 goto end; 1267 } 1268 1269 if (mei_me_hw_is_resetting(dev)) 1270 mei_hcsr_set_hig(dev); 1271 1272 mei_me_pg_intr(dev, me_intr_src(hcsr)); 1273 1274 /* check if we need to start the dev */ 1275 if (!mei_host_is_ready(dev)) { 1276 if (mei_hw_is_ready(dev)) { 1277 dev_dbg(dev->dev, "we need to start the dev.\n"); 1278 dev->recvd_hw_ready = true; 1279 wake_up(&dev->wait_hw_ready); 1280 } else { 1281 dev_dbg(dev->dev, "Spurious Interrupt\n"); 1282 } 1283 goto end; 1284 } 1285 /* check slots available for reading */ 1286 slots = mei_count_full_read_slots(dev); 1287 while (slots > 0) { 1288 dev_dbg(dev->dev, "slots to read = %08x\n", slots); 1289 rets = mei_irq_read_handler(dev, &cmpl_list, &slots); 1290 /* There is a race between ME write and interrupt delivery: 1291 * Not all data is always available immediately after the 1292 * interrupt, so try to read again on the next interrupt. 1293 */ 1294 if (rets == -ENODATA) 1295 break; 1296 1297 if (rets) { 1298 dev_err(dev->dev, "mei_irq_read_handler ret = %d, state = %d.\n", 1299 rets, dev->dev_state); 1300 if (dev->dev_state != MEI_DEV_RESETTING && 1301 dev->dev_state != MEI_DEV_DISABLED && 1302 dev->dev_state != MEI_DEV_POWERING_DOWN && 1303 dev->dev_state != MEI_DEV_POWER_DOWN) 1304 schedule_work(&dev->reset_work); 1305 goto end; 1306 } 1307 } 1308 1309 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); 1310 1311 /* 1312 * During PG handshake only allowed write is the replay to the 1313 * PG exit message, so block calling write function 1314 * if the pg event is in PG handshake 1315 */ 1316 if (dev->pg_event != MEI_PG_EVENT_WAIT && 1317 dev->pg_event != MEI_PG_EVENT_RECEIVED) { 1318 rets = mei_irq_write_handler(dev, &cmpl_list); 1319 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); 1320 } 1321 1322 mei_irq_compl_handler(dev, &cmpl_list); 1323 1324 end: 1325 dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets); 1326 mei_me_intr_enable(dev); 1327 mutex_unlock(&dev->device_lock); 1328 return IRQ_HANDLED; 1329 } 1330 EXPORT_SYMBOL_GPL(mei_me_irq_thread_handler); 1331 1332 static const struct mei_hw_ops mei_me_hw_ops = { 1333 1334 .trc_status = mei_me_trc_status, 1335 .fw_status = mei_me_fw_status, 1336 .pg_state = mei_me_pg_state, 1337 1338 .host_is_ready = mei_me_host_is_ready, 1339 1340 .hw_is_ready = mei_me_hw_is_ready, 1341 .hw_reset = mei_me_hw_reset, 1342 .hw_config = mei_me_hw_config, 1343 .hw_start = mei_me_hw_start, 1344 1345 .pg_in_transition = mei_me_pg_in_transition, 1346 .pg_is_enabled = mei_me_pg_is_enabled, 1347 1348 .intr_clear = mei_me_intr_clear, 1349 .intr_enable = mei_me_intr_enable, 1350 .intr_disable = mei_me_intr_disable, 1351 .synchronize_irq = mei_me_synchronize_irq, 1352 1353 .hbuf_free_slots = mei_me_hbuf_empty_slots, 1354 .hbuf_is_ready = mei_me_hbuf_is_empty, 1355 .hbuf_depth = mei_me_hbuf_depth, 1356 1357 .write = mei_me_hbuf_write, 1358 1359 .rdbuf_full_slots = mei_me_count_full_read_slots, 1360 .read_hdr = mei_me_mecbrw_read, 1361 .read = mei_me_read_slots 1362 }; 1363 1364 /** 1365 * mei_me_fw_type_nm() - check for nm sku 1366 * 1367 * Read ME FW Status register to check for the Node Manager (NM) Firmware. 1368 * The NM FW is only signaled in PCI function 0. 1369 * __Note__: Deprecated by PCH8 and newer. 1370 * 1371 * @pdev: pci device 1372 * 1373 * Return: true in case of NM firmware 1374 */ 1375 static bool mei_me_fw_type_nm(const struct pci_dev *pdev) 1376 { 1377 u32 reg; 1378 unsigned int devfn; 1379 1380 devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0); 1381 pci_bus_read_config_dword(pdev->bus, devfn, PCI_CFG_HFS_2, ®); 1382 trace_mei_pci_cfg_read(&pdev->dev, "PCI_CFG_HFS_2", PCI_CFG_HFS_2, reg); 1383 /* make sure that bit 9 (NM) is up and bit 10 (DM) is down */ 1384 return (reg & 0x600) == 0x200; 1385 } 1386 1387 #define MEI_CFG_FW_NM \ 1388 .quirk_probe = mei_me_fw_type_nm 1389 1390 /** 1391 * mei_me_fw_type_sps_4() - check for sps 4.0 sku 1392 * 1393 * Read ME FW Status register to check for SPS Firmware. 1394 * The SPS FW is only signaled in the PCI function 0. 1395 * __Note__: Deprecated by SPS 5.0 and newer. 1396 * 1397 * @pdev: pci device 1398 * 1399 * Return: true in case of SPS firmware 1400 */ 1401 static bool mei_me_fw_type_sps_4(const struct pci_dev *pdev) 1402 { 1403 u32 reg; 1404 unsigned int devfn; 1405 1406 devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0); 1407 pci_bus_read_config_dword(pdev->bus, devfn, PCI_CFG_HFS_1, ®); 1408 trace_mei_pci_cfg_read(&pdev->dev, "PCI_CFG_HFS_1", PCI_CFG_HFS_1, reg); 1409 return (reg & PCI_CFG_HFS_1_OPMODE_MSK) == PCI_CFG_HFS_1_OPMODE_SPS; 1410 } 1411 1412 #define MEI_CFG_FW_SPS_4 \ 1413 .quirk_probe = mei_me_fw_type_sps_4 1414 1415 /** 1416 * mei_me_fw_type_sps_ign() - check for sps or ign sku 1417 * 1418 * Read ME FW Status register to check for SPS or IGN Firmware. 1419 * The SPS/IGN FW is only signaled in pci function 0 1420 * 1421 * @pdev: pci device 1422 * 1423 * Return: true in case of SPS/IGN firmware 1424 */ 1425 static bool mei_me_fw_type_sps_ign(const struct pci_dev *pdev) 1426 { 1427 u32 reg; 1428 u32 fw_type; 1429 unsigned int devfn; 1430 1431 devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0); 1432 pci_bus_read_config_dword(pdev->bus, devfn, PCI_CFG_HFS_3, ®); 1433 trace_mei_pci_cfg_read(&pdev->dev, "PCI_CFG_HFS_3", PCI_CFG_HFS_3, reg); 1434 fw_type = (reg & PCI_CFG_HFS_3_FW_SKU_MSK); 1435 1436 dev_dbg(&pdev->dev, "fw type is %d\n", fw_type); 1437 1438 return fw_type == PCI_CFG_HFS_3_FW_SKU_IGN || 1439 fw_type == PCI_CFG_HFS_3_FW_SKU_SPS; 1440 } 1441 1442 #define MEI_CFG_KIND_ITOUCH \ 1443 .kind = "itouch" 1444 1445 #define MEI_CFG_TYPE_GSC \ 1446 .kind = "gsc" 1447 1448 #define MEI_CFG_TYPE_GSCFI \ 1449 .kind = "gscfi" 1450 1451 #define MEI_CFG_FW_SPS_IGN \ 1452 .quirk_probe = mei_me_fw_type_sps_ign 1453 1454 #define MEI_CFG_FW_VER_SUPP \ 1455 .fw_ver_supported = 1 1456 1457 #define MEI_CFG_ICH_HFS \ 1458 .fw_status.count = 0 1459 1460 #define MEI_CFG_ICH10_HFS \ 1461 .fw_status.count = 1, \ 1462 .fw_status.status[0] = PCI_CFG_HFS_1 1463 1464 #define MEI_CFG_PCH_HFS \ 1465 .fw_status.count = 2, \ 1466 .fw_status.status[0] = PCI_CFG_HFS_1, \ 1467 .fw_status.status[1] = PCI_CFG_HFS_2 1468 1469 #define MEI_CFG_PCH8_HFS \ 1470 .fw_status.count = 6, \ 1471 .fw_status.status[0] = PCI_CFG_HFS_1, \ 1472 .fw_status.status[1] = PCI_CFG_HFS_2, \ 1473 .fw_status.status[2] = PCI_CFG_HFS_3, \ 1474 .fw_status.status[3] = PCI_CFG_HFS_4, \ 1475 .fw_status.status[4] = PCI_CFG_HFS_5, \ 1476 .fw_status.status[5] = PCI_CFG_HFS_6 1477 1478 #define MEI_CFG_DMA_128 \ 1479 .dma_size[DMA_DSCR_HOST] = SZ_128K, \ 1480 .dma_size[DMA_DSCR_DEVICE] = SZ_128K, \ 1481 .dma_size[DMA_DSCR_CTRL] = PAGE_SIZE 1482 1483 #define MEI_CFG_TRC \ 1484 .hw_trc_supported = 1 1485 1486 /* ICH Legacy devices */ 1487 static const struct mei_cfg mei_me_ich_cfg = { 1488 MEI_CFG_ICH_HFS, 1489 }; 1490 1491 /* ICH devices */ 1492 static const struct mei_cfg mei_me_ich10_cfg = { 1493 MEI_CFG_ICH10_HFS, 1494 }; 1495 1496 /* PCH6 devices */ 1497 static const struct mei_cfg mei_me_pch6_cfg = { 1498 MEI_CFG_PCH_HFS, 1499 }; 1500 1501 /* PCH7 devices */ 1502 static const struct mei_cfg mei_me_pch7_cfg = { 1503 MEI_CFG_PCH_HFS, 1504 MEI_CFG_FW_VER_SUPP, 1505 }; 1506 1507 /* PCH Cougar Point and Patsburg with quirk for Node Manager exclusion */ 1508 static const struct mei_cfg mei_me_pch_cpt_pbg_cfg = { 1509 MEI_CFG_PCH_HFS, 1510 MEI_CFG_FW_VER_SUPP, 1511 MEI_CFG_FW_NM, 1512 }; 1513 1514 /* PCH8 Lynx Point and newer devices */ 1515 static const struct mei_cfg mei_me_pch8_cfg = { 1516 MEI_CFG_PCH8_HFS, 1517 MEI_CFG_FW_VER_SUPP, 1518 }; 1519 1520 /* PCH8 Lynx Point and newer devices - iTouch */ 1521 static const struct mei_cfg mei_me_pch8_itouch_cfg = { 1522 MEI_CFG_KIND_ITOUCH, 1523 MEI_CFG_PCH8_HFS, 1524 MEI_CFG_FW_VER_SUPP, 1525 }; 1526 1527 /* PCH8 Lynx Point with quirk for SPS Firmware exclusion */ 1528 static const struct mei_cfg mei_me_pch8_sps_4_cfg = { 1529 MEI_CFG_PCH8_HFS, 1530 MEI_CFG_FW_VER_SUPP, 1531 MEI_CFG_FW_SPS_4, 1532 }; 1533 1534 /* LBG with quirk for SPS (4.0) Firmware exclusion */ 1535 static const struct mei_cfg mei_me_pch12_sps_4_cfg = { 1536 MEI_CFG_PCH8_HFS, 1537 MEI_CFG_FW_VER_SUPP, 1538 MEI_CFG_FW_SPS_4, 1539 }; 1540 1541 /* Cannon Lake and newer devices */ 1542 static const struct mei_cfg mei_me_pch12_cfg = { 1543 MEI_CFG_PCH8_HFS, 1544 MEI_CFG_FW_VER_SUPP, 1545 MEI_CFG_DMA_128, 1546 }; 1547 1548 /* Cannon Lake with quirk for SPS 5.0 and newer Firmware exclusion */ 1549 static const struct mei_cfg mei_me_pch12_sps_cfg = { 1550 MEI_CFG_PCH8_HFS, 1551 MEI_CFG_FW_VER_SUPP, 1552 MEI_CFG_DMA_128, 1553 MEI_CFG_FW_SPS_IGN, 1554 }; 1555 1556 /* Cannon Lake itouch with quirk for SPS 5.0 and newer Firmware exclusion 1557 * w/o DMA support. 1558 */ 1559 static const struct mei_cfg mei_me_pch12_itouch_sps_cfg = { 1560 MEI_CFG_KIND_ITOUCH, 1561 MEI_CFG_PCH8_HFS, 1562 MEI_CFG_FW_VER_SUPP, 1563 MEI_CFG_FW_SPS_IGN, 1564 }; 1565 1566 /* Tiger Lake and newer devices */ 1567 static const struct mei_cfg mei_me_pch15_cfg = { 1568 MEI_CFG_PCH8_HFS, 1569 MEI_CFG_FW_VER_SUPP, 1570 MEI_CFG_DMA_128, 1571 MEI_CFG_TRC, 1572 }; 1573 1574 /* Tiger Lake with quirk for SPS 5.0 and newer Firmware exclusion */ 1575 static const struct mei_cfg mei_me_pch15_sps_cfg = { 1576 MEI_CFG_PCH8_HFS, 1577 MEI_CFG_FW_VER_SUPP, 1578 MEI_CFG_DMA_128, 1579 MEI_CFG_TRC, 1580 MEI_CFG_FW_SPS_IGN, 1581 }; 1582 1583 /* Graphics System Controller */ 1584 static const struct mei_cfg mei_me_gsc_cfg = { 1585 MEI_CFG_TYPE_GSC, 1586 MEI_CFG_PCH8_HFS, 1587 MEI_CFG_FW_VER_SUPP, 1588 }; 1589 1590 /* Graphics System Controller Firmware Interface */ 1591 static const struct mei_cfg mei_me_gscfi_cfg = { 1592 MEI_CFG_TYPE_GSCFI, 1593 MEI_CFG_PCH8_HFS, 1594 MEI_CFG_FW_VER_SUPP, 1595 }; 1596 1597 /* 1598 * mei_cfg_list - A list of platform platform specific configurations. 1599 * Note: has to be synchronized with enum mei_cfg_idx. 1600 */ 1601 static const struct mei_cfg *const mei_cfg_list[] = { 1602 [MEI_ME_UNDEF_CFG] = NULL, 1603 [MEI_ME_ICH_CFG] = &mei_me_ich_cfg, 1604 [MEI_ME_ICH10_CFG] = &mei_me_ich10_cfg, 1605 [MEI_ME_PCH6_CFG] = &mei_me_pch6_cfg, 1606 [MEI_ME_PCH7_CFG] = &mei_me_pch7_cfg, 1607 [MEI_ME_PCH_CPT_PBG_CFG] = &mei_me_pch_cpt_pbg_cfg, 1608 [MEI_ME_PCH8_CFG] = &mei_me_pch8_cfg, 1609 [MEI_ME_PCH8_ITOUCH_CFG] = &mei_me_pch8_itouch_cfg, 1610 [MEI_ME_PCH8_SPS_4_CFG] = &mei_me_pch8_sps_4_cfg, 1611 [MEI_ME_PCH12_CFG] = &mei_me_pch12_cfg, 1612 [MEI_ME_PCH12_SPS_4_CFG] = &mei_me_pch12_sps_4_cfg, 1613 [MEI_ME_PCH12_SPS_CFG] = &mei_me_pch12_sps_cfg, 1614 [MEI_ME_PCH12_SPS_ITOUCH_CFG] = &mei_me_pch12_itouch_sps_cfg, 1615 [MEI_ME_PCH15_CFG] = &mei_me_pch15_cfg, 1616 [MEI_ME_PCH15_SPS_CFG] = &mei_me_pch15_sps_cfg, 1617 [MEI_ME_GSC_CFG] = &mei_me_gsc_cfg, 1618 [MEI_ME_GSCFI_CFG] = &mei_me_gscfi_cfg, 1619 }; 1620 1621 const struct mei_cfg *mei_me_get_cfg(kernel_ulong_t idx) 1622 { 1623 BUILD_BUG_ON(ARRAY_SIZE(mei_cfg_list) != MEI_ME_NUM_CFG); 1624 1625 if (idx >= MEI_ME_NUM_CFG) 1626 return NULL; 1627 1628 return mei_cfg_list[idx]; 1629 } 1630 EXPORT_SYMBOL_GPL(mei_me_get_cfg); 1631 1632 /** 1633 * mei_me_dev_init - allocates and initializes the mei device structure 1634 * 1635 * @parent: device associated with physical device (pci/platform) 1636 * @cfg: per device generation config 1637 * 1638 * Return: The mei_device pointer on success, NULL on failure. 1639 */ 1640 struct mei_device *mei_me_dev_init(struct device *parent, 1641 const struct mei_cfg *cfg) 1642 { 1643 struct mei_device *dev; 1644 struct mei_me_hw *hw; 1645 int i; 1646 1647 dev = devm_kzalloc(parent, sizeof(*dev) + sizeof(*hw), GFP_KERNEL); 1648 if (!dev) 1649 return NULL; 1650 1651 hw = to_me_hw(dev); 1652 1653 for (i = 0; i < DMA_DSCR_NUM; i++) 1654 dev->dr_dscr[i].size = cfg->dma_size[i]; 1655 1656 mei_device_init(dev, parent, &mei_me_hw_ops); 1657 hw->cfg = cfg; 1658 1659 dev->fw_f_fw_ver_supported = cfg->fw_ver_supported; 1660 1661 dev->kind = cfg->kind; 1662 1663 return dev; 1664 } 1665 EXPORT_SYMBOL_GPL(mei_me_dev_init); 1666