Commit Graph

171 Commits

Author SHA1 Message Date
Louis Yung-Chieh Lo
0ece3ef0dc Fix the SETREP and EX_SETLED state machine (keyboard module).
Original code doesn't handle those 2 commands well. SETREP needs a new
state for incoming data byte. EX_SETLED expects 2-byte parameter instead
of 1-byte.

Also enclose all asynchronous debug output in [] for servo-based testing.

BUG=chrome-os-partner:8674
TEST=on the target board. No "Unsupported data 0x00" message is seen.

Change-Id: Icb8e592fe54620677878ee15ef8a781c8906063e
2012-04-03 11:26:06 +08:00
Randall Spangler
b70183a9bd Implement persistent flash write protect settings
This uses the last bank of flash to hold persistent settings, and
looks at the write protect GPIO to decide whether to protect the chip
at boot (chrome-os-partner:7453).

For ease of debugging, I've temporarily hacked this so flash uses the
RECOVERYn signal (dut-control goog_rec_mode:on) to enable WP instead
of the write protect signal; this works around chrome-os-partner:8580.

Also note that if you write protect any blocks even temporarily,
you'll need to do a power-on reset to clear them before you can
reprogram the flash.  See chrome-os-partner:8632.  At the EC console,
"hibernate 1" will do that, or you can just yank the power.

This also fixes a bug in the flash write and erase commands, where
they weren't properly detecting failure if you attempted to modify a
protected block (missed an interrupt reason...)

New "flashwp" console commands work.  LPC commands need reworking.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8448
TEST=manual

Change-Id: I49c38cc25c793094ae3331a4586fda0761b4bac6
2012-04-02 10:57:03 -07:00
Louis Yung-Chieh Lo
8d6725baf3 Remove the un-necessary TODO comments in i8042 module.
See issue tracker for more information.

BUG=chrome-os-partner:8493
TEST=compile okay

Change-Id: I910aebec7d2a505a02b1bbd5d985a540b94be5c2
2012-03-28 16:51:40 +08:00
Louis Yung-Chieh Lo
b71837716d flash write and erase commands protect the active image.
Comapre the range to be write (erase) with the range of active image.
If overlap, return error to indicate the access denied.

Note that we actually protect only runtime code and ro data.
FMAP is intentional unprotected so that flashrom can update to new map
before jumping. Since the vector table and init code are in the same
erase page, they are unprotected as well.

BUG=chrome-os-partner:7478
TEST=

Change-Id: Icb5cc89836432a11cef80e18eb66bb39a6c9b1d9
2012-03-27 14:36:45 +08:00
Randall Spangler
43686b0588 Fix sysjump to RO
Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8613
TEST=sysjump A, then sysjump RO

Change-Id: Id9b3c867fa01893542812373f4469534b4be9918
2012-03-23 09:13:40 -07:00
Bill Richardson
e4e7f5bdf7 Rename led.c to lightbar.c, improve command interface.
BUG=chrome-os-partner:7839
TEST=none

Signed-off-by: Bill Richardson <wfrichar@google.com>

Only tested on BDS at the moment, because that's all I have.

Change-Id: I30c7202856a272953bf7170c6786999378984329
2012-03-20 15:55:58 -07:00
Randall Spangler
41e3b58258 Remove old scratchpad-based reboot-to-image interface
Now that we can jump directly to other images, we don't need this.

We jump to image A by default, unless the recovery button or signal is asserted.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8562
TEST=manual

Reboot -> runs image A
Reboot with reload (F3) held down -> runs RO
Reboot with 'dut-control goog_rec_mode:on' -> runs RO

Change-Id: I8259fe0d738ce0ca897d2f4427d8cf61858b8901
2012-03-20 09:43:46 -07:00
Gerrit
61748b4f04 Merge "Keyboard wakeup." 2012-03-20 09:26:18 -07:00
Gerrit
dfa34083c5 Merge "Support warm reboot from one EC image to another." 2012-03-20 09:26:16 -07:00
Gerrit
7cf6983eb5 Merge "Set power adapter LED based on charge state" 2012-03-20 01:11:50 -07:00
Rong Chang
13ad11292e Set power adapter LED based on charge state
Power adapter LED:
  GREEN = charge done
  YELLOW = charging
  RED = error

Signed-off-by: Rong Chang <rongchang@chromium.org>

BUG=chrome-os-partner:8536
TEST=manual

Change-Id: I5580763a4136e1de7f5eae4e3dda8e169309d902
2012-03-20 14:33:09 +08:00
Louis Yung-Chieh Lo
f8f802cbb8 Keyboard wakeup.
The final piece links the keyboard press and x86_power module.

BUG=chrome-os-partner:8523
TEST=on the link board.
wait for 15 minutes to make host suspend. touch any key to wake up host.

Change-Id: Ie6ae840ae546731daea48ab457fdc056feb5a685
2012-03-20 11:07:19 +08:00
Randall Spangler
b2ac77b37b Support warm reboot from one EC image to another.
This is necessary at init-time for verified boot to jump from RO to
one of the RW images.

It's also used by factory EC update to update one image and then jump
to the updated image to finish the update.  In this case, the x86 does
NOT reboot.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8449
TEST=manual

1) power on x86 and log in
2) sysjump a  --> system is in a; x86 has not rebooted
3) sysjump ro --> system is back in RO; x86 has not rebooted
4) reboot -> system is in RO; x86 HAS rebooted

Change-Id: I9dbadcf9775e146a0718abfd4ee0758b65350a87
2012-03-19 15:41:14 -07:00
Randall Spangler
9ff6f390b9 Remove code for skipping duplicate port 80 writes
The kernel no longer uses port 80 as a delay mechanism, so we don't
need to detect the no-longer-present spammy writes.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:7972
TEST=port80 scroll, then boot the system.  see a few repeated bytes,
but not piles of 00 and ff's.

Change-Id: Id14dc43ab4e1b15c6bab99a17c062f295a59e7e6
2012-03-19 09:05:07 -07:00
Randall Spangler
2a9f80d2d9 More cleanup of board/chip configs and initialization
More modules can be disabled individually through CONFIG_ defines.

Reordered early module pre-init and init, and added comments to
explain why things are ordered in main() the way they are.

Fixed a few assorted init-related bugs along the way, like st32m
keyboard scan double-initializing.

BUG=none
TEST=build link, bds, daisy

Signed-off-by: Randall Spangler <rspangler@chromium.org>

Change-Id: I04a7fa51d743adfab4be4bdddaeef68943b96dec
2012-03-19 09:04:56 -07:00
Gerrit
eb3920ec7a Merge "Add battery SMI events and refactor charging state" 2012-03-19 01:54:54 -07:00
Rong Chang
e8afc9946a Add battery SMI events and refactor charging state
This CL adds battery SMI events. And refactors the charging state
machine by adding share state context for all handlers.

Power events are moved to common handler. Minor clean up on console
output messages.

Signed-off-by: Rong Chang <rongchang@chromium.org>

BUG=chrome-os-partner:7526,7937,8450
TEST=manual:
  Watch console message when connecting/disconnecting AC adapter and
  battery. Check the state transition.

Change-Id: I42eec4f87a9d49bd193cb9dde9080e3dfccbb77c
2012-03-19 16:08:40 +08:00
Randall Spangler
e68844824b Clean up chip/board configs for LM4
Board-specific features like lightbar should be config'd at the board
level, not at the chip level.

BUG=none
TEST=build link, bds, daisy

Change-Id: If1df2ca0422f7b8bdc172d0df7bd9f6a1af6a9d2
Signed-off-by: Randall Spangler <rspangler@chromium.org>
2012-03-16 14:02:59 -07:00
Randall Spangler
a9f4794edb Add support for 1-wire protocol and power adapter LEDs
BUG=chrome-os-partner:7498
TEST=powerled {off, red, yellow, green}

Signed-off-by: Randall Spangler <rspangler@chromium.org>

Change-Id: I48beaad94d75c0ec30a969ea4b0e35f54e052085
2012-03-16 11:03:13 -07:00
Gerrit
2743514996 Merge "Fix test build" 2012-03-15 20:43:56 -07:00
Vic Yang
9f8e8dc6a3 Temperature sensor grouping.
Group temperature sensors into different types so we only have to set
temperature threshold for each type instead of each sensor.

Signed-off-by: Vic Yang <victoryang@google.com>

BUG=chrome-os-partner:8466
TEST=Fan control still works.

Change-Id: I7acc714c32f282cec490b9e02d402ab91a53becf
2012-03-16 10:40:52 +08:00
Gerrit
7d1884ee06 Merge "Prevent fan from keep turning on and off." 2012-03-15 17:59:33 -07:00
Vic Yang
826e811493 Prevent fan from keep turning on and off.
Modify thermal engine to treat temperature threshold as a 3-degree range
instead of a certain value. This way the fan do not keep turning on and
off, while the temperature floating around the threshold value.

Signed-off-by: Vic Yang <victoryang@google.com>

BUG=chrome-os-partner:8466
TEST=Set threshold to current temperature. The fan turns on and does not
immediately turns off.

Change-Id: Iad1de05a409dbbc573a8ffd0ece0dc7961b20806
2012-03-16 07:25:37 +08:00
Vincent Palatin
e456584ce1 Fix test build
Allow to build without the power button task.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BUG=None
TEST=make qemu-tests

Change-Id: Ibc757a6641f195f0d10e6a673792b996694f8cec
2012-03-15 21:25:48 +00:00
Randall Spangler
c72f66c050 Add wake signal to PCH
This works similar to SCI/SMI events, but triggers a separate
level-sensitive signal to the PCH instead.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8514
TEST=manual

From EC console:
gpioget PCH_WAKEn --> should be 1
hostevent wake 0x1
close lid switch (with magnet)
hostevent -> should show wake mask 0x1, raw events 0x1
gpioget PCH_WAKEn --> should be 0
hostevent clear 0x1
hostevent -> should show raw events 0
gpioget PCH_WAKEn --> should be 1

Change-Id: I29832c1dc30239a98987578f07dfeb25791dde11
2012-03-15 12:42:11 -07:00
Randall Spangler
38d1b2e8ba Add ability to trigger both warm and cold resets.
Keyboard reset now triggers a cold reset.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8397
TEST=power system on, then do 'x86reset cold' for a cold reset or
'x86reset warm' for a warm reset.  Check x86 debug console to see that
coreboot detects the warm (soft) reset.

Change-Id: I00930d9f5df98365277cd5c7f2eb8f135c4e4398
2012-03-15 09:27:45 -07:00
Gerrit
5f83ab456c Merge "Add back LPC temperature read command as workaround." 2012-03-14 07:06:07 -07:00
Vic Yang
dfe22b2b1e Add back LPC temperature read command as workaround.
Until we solve the I2C hanging issue, we need a reliable way to read
temperature. Add back LPC temperature read command that actually trigger
a I2C read.

Signed-off-by: Vic Yang <victoryang@google.com>

BUG=chrome-os-partner:8452,chrome-os-partner:8495
TEST=none

Change-Id: Icddd1fe3c1f09889bca633af19041a8aca582de9
2012-03-14 20:53:42 +08:00
Gerrit
6f0512752f Merge "Debug command to simulate keystroke" 2012-03-14 01:41:56 -07:00
Vic Yang
7c874a582a Thermal Engine: set lowest fan speed to 4000rpm
Currently temperature polling task sometimes hangs. Until we solve this
problem, fan should not be turned off according to temperature readings.

Signed-off-by: Vic Yang <victoryang@google.com>

BUG=chrome-os-partner:8479
TEST=none

Change-Id: I3892c55dd18d3533515d5537b1a877e4fc36d631
2012-03-14 15:36:20 +08:00
Vic Yang
dcb111f1e6 Debug command to simulate keystroke
Add debug command 'kbpress' to simulate keystroke.

Signed-off-by: Vic Yang <victoryang@google.com>

BUG=chrome-os-partner:8025
TEST='kbpress 3 7 1' pressed 'r' key.

Change-Id: I80eef1e03f0f383e5472b4a7cc53c43ce6c15041
2012-03-14 15:35:19 +08:00
Gerrit
a7b90e65b4 Merge "Temp sensor report 0xfd on sensor unpowered." 2012-03-14 00:34:03 -07:00
Vic Yang
d2fbdfbc67 Temp sensor report 0xfd on sensor unpowered.
Make temp sensor report 0xfd when sensor is unpowered.
Also refactor power specification of temp sensors from thermal.c to
temp_sensor.c.

Signed-off-by: Vic Yang <victoryang@google.com>

BUG=chrome-os-partner:8279
TEST=none

Change-Id: Ib13813bdbac2f048fbc3b98fae5bbf104ebf37d7
2012-03-14 13:32:02 +08:00
Louis Yung-Chieh Lo
20fcd29d42 Add keyboard controller reset command.
To handle outp(0x64, 0xfe) instruction from host.

BUG=chrome-os-partner:8464,chrome-os-partner:8397
TEST= build on bds and l*. tested on proto 0.5.

Change-Id: I8cb3a870b2a5c7a711dc911ba44e154813e9f123
2012-03-14 12:24:46 +08:00
Gerrit
386f4618f3 Merge "Thermal Engine SMI" 2012-03-13 20:04:09 -07:00
Gerrit
f69b2ffc90 Merge "Tidy output of temps command" 2012-03-13 14:43:02 -07:00
Gerrit
221c5b8f43 Merge "Add vboot_init() function in correct place, make it do the switching." 2012-03-13 14:16:44 -07:00
Randall Spangler
8a0cc7756f Tidy output of temps command
Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=none
TEST=temps - see, prettier!

Change-Id: Ia11937e8b1be384f7b8386c97aea0eb3e2eef897
2012-03-13 13:43:31 -07:00
Bill Richardson
a4f5e0c29c Add vboot_init() function in correct place, make it do the switching.
Jumping (currently rebooting, see crosbug.com/p/8100) to the RW image should
be done by vboot_init(), not vboot_pre_init().

As currently written, vboot_init() has to come AFTER these function calls:

  task_init();             // sets up interrupts so that uart will work
  watchdog_init(1100);     // in case we fall over somewhere
  uart_init();             // we'd REALLY like to see some debugging output
  system_init();           // may go away with crosbug.com/p/8100
  keyboard_scan_init();    // check for F3 to go to recovery mode
  flash_init();            // maybe set RO regions (this should come earlier!)
  eeprom_init();           // this is where the try_b flags are kept

BUG=chrome-os-partner:7459
TEST=none

Signed-off-by: Bill Richardson <wfrichar@chromium.org>

Change-Id: I0ec3f6bcc26a308bb1005a944990963853b88b60
2012-03-13 10:17:50 -07:00
Vic Yang
2a0c6a31ea Thermal Engine SMI
Make thermal engine trigger SMI on overheating and sensor failure.

Signed-off-by: Vic Yang <victoryang@google.com>

BUG=chrome-os-partner:8249
TEST=none

Change-Id: I1f8c1d05ae69fae4736c4cc92b060b1813007249
2012-03-13 12:00:03 +08:00
Randall Spangler
dcb1d1f929 Add x86 reset support
(new method, and x86reset command to call it)

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8460
TEST=manual: powerbtn, wait for system to boot, x86reset

Change-Id: Iad3f5c268b334e8d0ec1adfa2878f9e9d5927b9f
2012-03-12 18:25:37 -07:00
Randall Spangler
b3798eaacd GPIO changes for link proto1
Note that this moves the charger to a different I2C port.  If you're
working on battery charging, you'll need to hack board.h in your local
repo to move it back.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8458
TEST=manual

Change-Id: Id94ee2ce1ef6c973c1786037e07d0c64a89a9940
2012-03-12 17:57:25 -07:00
Louis Yung-Chieh Lo
9e3e87f802 Support reboot_ec command in ectool (temporarily).
Note that this is a big security hole and should be removed after we
complete the EC autoupdate mechanism and vboot code.

To full update EC firmware on proto 1.0, we need a manual way to switch
EC running on RO/RW. This CL implements the LPC command.

BUG=chrome-os-partner:8415
TEST=on proto 0.5.
ectool reboot_ec RW_A  # EC boots to RW A
ectool reboot_ec RO    # EC boots to RO

Change-Id: Ibf050328bc4e3d2c6d72bfc478d6334f11f0eb46
2012-03-09 21:10:13 +08:00
Rong Chang
35a90d9ce5 Add battery lpc commands
This CL adds LPC commands to provide the following information:
- Design Capacity (dword)
- Last Full Charge Capacity (dword)
- Design Voltage (dword)
- Design Capacity of Warning (dword)
- Design Capacity of Low (dword)
- Battery Type (ascii)
- Model Number (ascii)
- Serial Number (ascii)
- OEM (usually Vendor) (ascii)
- Battery charge cycle count (dword)

Signed-off-by: Rong Chang <rongchang@chromium.org>

BUG=chrome-os-partner:8181
TEST=none
CQ-DEPEND:Iad4d63c996272568b5a661a6716790ef151b29c5

Change-Id: Iabaf7d9862e15c5b21cf5170cf43450e472b7836
2012-03-07 13:51:07 +08:00
Randall Spangler
7e508c0d34 Clean up debug console output
Also prints the current timer value when inits are done, and when the
watchdog task first gets to run (after all higher priority tasks sleep
at least once).

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=none
TEST=none

Change-Id: I342f86ad087fd18ab064a10a5bcdd0b69ee373d0
2012-03-06 09:28:47 -08:00
Rong Chang
526db244e4 Add smart battery functions read ascii info
Signed-off-by: Rong Chang <rongchang@chromium.org>

BUG=chrome-os-partner:8321
TEST=manual:
   type 'battery' in EC serial console, check following fields:
     Manufacturer
     Device name
     Device chemistry
CQ-DEPEND:I0ad3ad45b796d9ec03d8fbc1d643aa6a92d6343f

Change-Id: Iad4d63c996272568b5a661a6716790ef151b29c5
2012-03-06 16:15:30 +08:00
Randall Spangler
e85cb93715 Add LPC command to get EC build info
Useful when debugging to determine if a user has an official build or
not, particularly early in the devel process where we're handing
builds to everyone.  Particularly useful for proto1, since not all
those systems will be case-open servo-attached.

Also move get-version LPC command into system.c, where it's closer to
the system functions it calls (matches what we do for other host
commands).

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=none
TEST=none

Change-Id: Idb0f6edf31ca00e32f083be0b0d3f23ab79c5fba
2012-03-05 11:05:15 -08:00
Randall Spangler
0106129061 Only send power button pulse on lid-open when main chipset is off
Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=chrome-os-partner:8324
TEST=manual

1. When system is off, open lid.  Debug console should show PB PCH pwrbtn activity.
2. Wait for system to boot.
3. Quickly close and open lid.  Debug console should not show pwrbtn activity.

Change-Id: Ia018ff06a31ac2a68f20021d17e47ddb06096eb8
2012-03-05 10:14:24 -08:00
Randall Spangler
42bfa2f5d4 Add platform-neutral chipset interface
...since x86_power_in_S0() is a terrible function to have implemented
for gaia chipsets, and I need to add more detectable states for lid
switch handling anyway.

Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=none
TEST=none

Change-Id: I0c90c6875b27d1bf23f093e88e34eabf2a8c86e4
2012-03-05 10:00:25 -08:00
Randall Spangler
2464e96469 Add SMI/SCI support
BUG=chrome-os-partner:8277
TEST=manual

On EC console:
   hostevent set 0x1e
From root shell:
   ectool eventget --> should return 0x1e
   ectool eventclear 0x02
   ectool eventget --> should return 0x1c
   ectool queryec  --> should return event 3
   ectool queryec  --> should return event 4
   ectool queryec  --> should return event 5
   ectool queryec  --> should return no event pending
   ectool eventsetsmimask 0x1200
   ectool eventsetscimask 0x0034
   ectool eventgetsmimask --> should return 0x1200
   ectool eventgetscimask --> should return 0x0034
On EC console:
   hostevent --> should show raw=0 SMI mask = 0x1200 SCI mask = 0x34

Change-Id: I33042fa80c0b148cd63209a94a184af493e25ed3
2012-03-05 09:23:51 -08:00