Bill Richardson 700adf4dea Let AP read sensor IDs when DPTF thermal thresholds crossed
The spec does not mandate any way to read back the threshold settings
themselves, but when a threshold is crossed the AP needs a way to determine
which sensor(s) are responsible. Each reading of the EC_ACPI_MEM_TEMP_ID
register clears and returns one sensor ID that has crossed one of its
thresholds (in either direction) since the last read. A value of 0xFF means
"no new thresholds have tripped". Changing or enabling the thresholds for
any sensor will clear the unread event count for that sensor.

BUG=chrome-os-partner:23970
BRANCH=none
TEST=manual

On the host, set a couple of thresholds to low values so they trip
immediately (I'm testing on Link):

  # dptf() {
         [ "$#" -eq "2" ] || return;
         iotools io_write8 0x66 0x81
         iotools io_write8 0x62 $1
         iotools io_write8 0x62 $2
  }
  #

  # dptf 5 0
  # dptf 6 10
  # dptf 7 3

  # dptf 5 2
  # dptf 6 10
  # dptf 7 2

On the EC console, see that two thresholds have triggered, and that there
are two bits set in the AP seen mask:

  [45.755365 DPTF sensor 0, threshold -63 C, index 1, enabled]
  [45.768940 DPTF sensor 2, threshold -63 C, index 0, enabled]
  [46.169490 DPTF over threshold [0][1]
  [46.169820 DPTF over threshold [2][0]
  > dptftemp
  sensor   thresh0   thresh1
    0       ---        210*    I2C-USB C-Die
    1       ---        ---     I2C-USB C-Object
    2       210*       ---     I2C-PCH D-Die
    3       ---        ---     I2C-PCH D-Object
    4       ---        ---     I2C-Hinge C-Die
    5       ---        ---     I2C-Hinge C-Object
    6       ---        ---     I2C-Charger D-Die
    7       ---        ---     I2C-Charger D-Object
    8       ---        ---     ECInternal
    9       ---        ---     PECI
  AP seen mask: 0x00000005
  >

Read the EC_ACPI_MEM_TEMP_ID register from the host, to get the two active
sensor IDs (0 and 2), then 0xff when those are seen.

  # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62
  0x00
  # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62
  0x02
  # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62
  0xff
  # iotools io_write8 0x66 0x80; iotools io_write8 0x62 5; iotools io_read8 0x62
  0xff
  #

Change-Id: I8f047a517357617f18ad59d21fa13409bc81821b
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/180224
Reviewed-by: Randall Spangler <rspangler@chromium.org>
2013-12-16 22:57:54 +00:00
2013-12-16 22:57:34 +00:00
2013-12-16 20:28:32 +00:00
2013-12-05 22:30:58 +00:00
2013-04-29 23:31:28 -07:00
2012-05-11 09:11:52 -07:00
2013-12-13 21:22:19 +00:00
2013-12-13 21:22:19 +00:00
2011-12-08 19:18:06 +00:00

In the most general case, the flash layout looks something like this:

  +---------------------+
  | Reserved for EC use |
  +---------------------+

  +---------------------+
  |     Vblock B        |
  +---------------------+
  |  RW firmware B      |
  +---------------------+

  +---------------------+
  |     Vblock A        |
  +---------------------+
  |  RW firmware A      |
  +---------------------+

  +---------------------+
  |       FMAP          |
  +---------------------+
  |   Public root key   |
  +---------------------+
  |  Read-only firmware |
  +---------------------+


BIOS firmware (and kernel) put the vblock info at the start of each image
where it's easy to find. The Blizzard EC expects the firmware vector table
to come first, so we have to put the vblock at the end. This means we have
to know where to look for it, but that's built into the FMAP and the RO
firmware anyway, so that's not an issue.

The RO firmware doesn't need a vblock of course, but it does need some
reserved space for vboot-related things.

Using SHA256/RSA4096, the vblock is 2468 bytes (0x9a4), while the public
root key is 1064 bytes (0x428) and the current FMAP is 644 bytes (0x284). If
we reserve 4K at the top of each FW image, that should give us plenty of
room for vboot-related stuff.
Description
No description provided
Readme 1.4 GiB
Languages
C 64.7%
Lasso 20.7%
ASL 3.6%
JavaScript 3.2%
C# 2.9%
Other 4.6%