Commit Graph

349 Commits

Author SHA1 Message Date
Randall Spangler
26b4a9e1a0 Assorted keyboard module cleanup
Const- and static-ifying data and pointers.

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

BUG=none
TEST=kblog on, then boot system, then kblog; should print log

Change-Id: I2e1da8e3d614b66dad8749b18c43bd77dc75928d
Reviewed-on: https://gerrit.chromium.org/gerrit/24233
Commit-Ready: Randall Spangler <rspangler@chromium.org>
Tested-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2012-05-31 15:03:17 -07:00
Vic Yang
53e8d3201c Fix a typo in thermal engine temperature setting
Signed-off-by: Vic Yang <victoryang@chromium.org>

BUG=none
TEST=none

Change-Id: I369522c00724c959d1eac18ca9c3ce57bd55aeff
2012-05-31 21:35:13 +08:00
Rong Chang
29b9a28c9d PMU tps65090 driver
This is an initial commit of tps65090 pmu driver. An empty charging
task added.

Signed-off-by: Rong Chang <rongchang@chromium.org>
BUG=chrome-os-partner:9756
TEST=manual
  When connected to a battery, the EC uart console will display
  battery status on value change.
  Check pmu register with 'i2c r 0x90 4'. Output should be '0x03'.

Change-Id: I99e243d203c438751af0c3647556cbf9a94e928f
2012-05-31 18:56:47 +08:00
Rong Chang
ee495ac6a6 Add stm32 I2C master driver
A polling mode I2C master driver. Interfaces for read/write byte
and word are implemented. i2c_read_string() is currently an empty
function.

CONFIG_SMART_BATTERY added to daisy board for testing.

Move smart_battery.o back to CONFIG_SMART_BATTERY since it is not
depended on charging state machine.

Signed-off-by: Rong Chang <rongchang@chromium.org>
BUG=chrome-os-partner:9724
TEST=manual/host commands
  > battery
    Temp:      0x0bad = 298.9 K (25.8 C)
    Manuf:
    Device:
    Chem:
    Serial:    0x0001
    V:         0x1cb7 = 7351 mV
    V-desired: 0x20d0 = 8400 mV
    V-design:  0x1c20 = 7200 mV
    I:         0x0000 = 0 mA
    I-desired: 0x0bb8 = 3000 mA
    Mode:      0x6001
    Charge:    49 %
      Abs:     47 %
    Remaining: 2705 mAh
    Cap-full:  5575 mAh
      Design:  5800 mAh
    Time-full: 0h:0
      Empty:   0h:0

Change-Id: I9f4e9e8819955ad1b107fb3b70ac2559d9b02b55
2012-05-31 18:00:17 +08:00
Vincent Palatin
1545262c9b Detect recovery key combination
Check if ESC+Power+Refresh is pressed at startup, if the recovery
combination is detected, record it to allow U-Boot to go into recovery.

The status of the keyboard recovery can be read from the response of the
EC_CMD_MKBP_INFO command.

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

BUG=chrome-os-partner:9916
TEST=On Snow, do a recovery reset by pressing ESC+Refresh+Power and see
the trace, try other resets and don't see it.

Change-Id: I0e1a8214781a6e74bd90bf8313887a9dcf4df56d
2012-05-31 00:42:02 +00:00
Gerrit
7c229f92fb Merge "stm32: assert/de-assert GPIO_PMIC_PWRON_L with keyboard power event" 2012-05-30 17:01:21 -07:00
Randall Spangler
858d87cfaa Add basic SPI support to link
This adds SPI transaction support, and a debug command to read a few
values from the SPI EEPROM.

Note that the SPI controller is normally *disabled* with all its I/Os
high-Z, so this will not interfere with main processor or Servo on the
SPI bus.  The bus is only enabled during the SPIROM command itself.

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

1) Reboot system
2) on EC console, 'spirom'.  Should print

Man/Dev ID  : 0xef 0x16
JEDEC ID    : 0xef 0x40 0x17
Unique ID   : 0xd1 0x61 0x44 0xb0 0x63 0x5d 0x40 0x32
Status reg 1: 0x00
Status reg 2: 0x00

Note that unique ID is, well, unique, so it won't match my value.  But
it should still be something not all 0xff's.

3) Power on the system.  x86 should still boot normally, indicating
that the EC isn't interfering with the SPI bus.

Change-Id: I53bf5fdbbe7a37949375d0463e30e408cc6fb6a8
2012-05-30 13:12:34 -07:00
Gerrit
8bb9091f2e Merge "Add host command to simulate key press" 2012-05-29 18:19:17 -07:00
David Hendricks
b8eefd91c1 stm32: assert/de-assert GPIO_PMIC_PWRON_L with keyboard power event
This sets the PMIC_PWRON_L signal to correspond with the keyboard
power button state.

BUG=chrome-os-partner:9821
TEST=Tested on Lucas (see notes below)

Signed-off-by: David Hendricks <dhendrix@chromium.org>

1. AC power plugged in, AP off, EC booted
> gpioget PMIC_PWRON_L
  1* PMIC_PWRON_L

2. AP running, press and release power button (should see screen zoom
   out and then back in, but I don't have a monitor...)

2a. AP running, power button not pressed
> gpioget PMIC_PWRON_L
  1  PMIC_PWRON_L

2b. Press power button
> Waiting for long power press 280507864
> gpioget PMIC_PWRON_L
  0* PMIC_PWRON_L

2c. release power button before 8s
> Cancel power off
> gpioget PMIC_PWRON_L
  1* PMIC_PWRON_L

3. From AP off state, press and hold keyboard power button
> gpioget PMIC_PWRON_L
  0* PMIC_PWRON_L

After 8s, we see:
Timeout waiting for GPIO 0/KB_PWR_ON_L
Power button was not released in time
Shutdown complete.

4. AP on, press and hold keyboard power button
> gpioget PMIC_PWRON_L
  1  PMIC_PWRON_L
> Waiting for long power press 654024769
> gpioget PMIC_PWRON_L
  0* PMIC_PWRON_L
> Power off after long press now=654025073, 0
ending loop 2
Shutdown complete. <-- Note: This message comes from power_off() which
                       also de-asserts PMIC_PWRON_L
> gpioget PMIC_PWRON_L
  1* PMIC_PWRON_L

Change-Id: I6955771707ecea2926570be0e8bd77ebddbca4d4
2012-05-29 13:17:42 -07:00
Gerrit
cbd18dbe5b Merge "Add a way to set indiviual sensitivity factor for each TMP006 sensor" 2012-05-29 09:16:04 -07:00
Vic Yang
abce21c6cf Add host command to simulate key press
In order to enable automatic keyboard testing, let's add key press
simulating command to ectool.

BUG=chrome-os-partner:9188
TEST='ectool kbpress 4 6 1' and see 'j' pressed.
     'ectool kbpress 4 6 0' and see 'j' released.

Change-Id: I5a445e13aad2bd09aa6e9a1d62995cf34b782aeb
2012-05-29 17:11:23 +08:00
Rong Chang
f267899861 Fix temperature comparison issue in discharging state
When discharging, EC checks if battery temperature is in working
range. The battery pack module should provide the working range
in deci-Kelvin, not Celcius.

Signed-off-by: Rong Chang <rongchang@chromium.org>
BUG=chrome-os-partner:9485
TEST=manual
  Unplug AC adapter, and check
    /sys/class/power_supply/BAT0/charge_now

Change-Id: Ib6a312941cb1f3622c6f18d2c58bc50a06feafaf
2012-05-28 18:07:07 +08:00
Vic Yang
86cfeb5232 Add a way to set indiviual sensitivity factor for each TMP006 sensor
Each TMP006 temperature sensor has different sensitivity factor. Let's
add a field to set different sensitivity factor for each sensor. Also
update the factors to get more reasonable temperature readings, but
still need more precise calibration.

BUG=chrome-os-partner:9599
TEST=Build and read tempearture succeeded.

Change-Id: Ib4feea3b78b71f6d37c9a02668ffa7bd9e63d390
2012-05-28 16:42:17 +08:00
Vic Yang
b85a7ce9d6 Make ectool correctly report when keyboard backlight is off
When keyboard backlight is disabled, make 'ectool pwmgetkblight' reports
'disabled'.

BUG=chrome-os-partner:9966
TEST='ectool pwmgetkblight' shows 'Keyboard backlight disabled' when
lid closed.

Change-Id: Ica690159e30431ccb530275fcc2311fb8f54a9aa
2012-05-26 20:29:54 +08:00
Randall Spangler
7ecd1d6d3c Add system_is_locked() to prevent sysjump on consumer systems
This returns true when both HW and SW write protect are enabled.

Once WP is enabled, sysjump will be locked out.

system_is_locked() can be used to gate other dangerous-ish commands too.

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

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

sysinfo -> unlocked, copy A
sysjump B -> works
flashwp lock
reboot
(make sure flashinfo shows WP asserted and flash locked; note there is a
 HW bug on proto1 which makes this flaky)
sysinfo -> locked, copy A
sysjump B -> fails
(remove WP screw)
reboot hard
flashwp unlock

Change-Id: I849b573675c2c1cb4c44b9a05d6973e38247ca23
2012-05-25 15:03:47 -07:00
Randall Spangler
e704c712ad Better help for console commands
Additional help messages and usage are gated by
CONFIG_CONSOLE_CMDHELP, so we can turn it on if there's space (adds
about 3KB to image size) and turn it off when there isn't.

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

BUG=none
TEST=manual

1) help
2) help list
3) help gpioset
4) gpioset -> wrong number of params
5) gpioset fred 0 -> param1 bad
6) gpioset cpu_prochot fred -> param2 bad

Change-Id: Ibe99f37212020f763ebe65a068e6aa83a809a370
2012-05-25 13:34:06 -07:00
Randall Spangler
4f34d3f9ef Cleanup - includes go in include dir
Signed-off-by: Randall Spangler <rspangler@chromium.org>

BUG=none
TEST=if it builds, it works

Change-Id: I2064f3eed4790051312a5a53ef742dcf79c4ee9d
2012-05-25 09:59:58 -07:00
Gerrit
0a77eea2e4 Merge "Keyboard scan must stop driving columns when power button is pressed." 2012-05-23 23:07:09 -07:00
Louis Yung-Chieh Lo
29d25d807c Keyboard scan must stop driving columns when power button is pressed.
Tristage all columns as soon as possible right after the power button is
pressed. This can avoid the silego chip to reset the EC.

Resume the interrupt mode after power button is released so that the
deasserted columns doesn't trigger EC reset.

Also change some function names for export.

BUG=chrome-os-partner:7486
TEST=
press g first, then power button. repeat many times. system is not rebooted.
press power button first, then g. repeat many times. system is not rebooted.
ESC+power is still reseting system.
The long press power button still shutdowns system.

Change-Id: Ie5dec20ec3d3c4ffbd4acf5a4dd7f63eec38af56
2012-05-24 13:32:35 +08:00
Gerrit
e5333535f4 Merge "Handle multiple pending lightbar events." 2012-05-23 11:48:56 -07:00
Bill Richardson
967e942084 Handle multiple pending lightbar events.
Since the events are requests for new patterns, we only want to do the
latest one. This does that.

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

No test: multiple events are rare. I had to fake them to see the problem.

Change-Id: I7e7de94655576e16c442a97097a7303e422a551a
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
2012-05-22 17:36:07 -07:00
Vadim Bendebury
d80c362969 Add EC command to report board version
The main CPU might need to know the particular hardware version the
system is running on. This information is available to the EC, this
change adds a mechanism for the main CPU to request this information.

The board version is defined as a flat 16 bit number.

BUG=chrome-os-partner:8722
TEST=manual
  . this change was tested in concert with the appropriate coreboot
    modification, the proto1 board returns board version of 0. The
    code was modified manually to return a one off version - and the
    coreboot indeed observed board version of 1

Change-Id: If434d33f43783b18cb202ea15819bd5804694b8e
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
2012-05-22 15:10:54 -07:00
Bill Richardson
a7d62b4fd4 Add LPC command to handle vboot stuff.
This adds "ectool vboot", which works like so:

  # ./ectool vboot
  0x06 image=A fake_dev=1

  # ./ectool vboot 0
  # ./ectool vboot
  0x02 image=A fake_dev=0

  # ./ectool vboot ff
  # ./ectool vboot
  0x06 image=A fake_dev=1

You can set or unset the fake dev-switch, and see which firmware image the
EC is running from.

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

Boot the host, use crossystem to see the devsw_boot state. Change it with
the ectool command, reboot, see that it's changed.

Change-Id: Iaac40267338c6a07bc47b80e925e829bf1e1ae0c
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
2012-05-22 14:22:13 -07:00
Gerrit
43e26da794 Merge "do not advertise RW-B in FMAP if it doesn't exist" 2012-05-22 14:05:04 -07:00
Gerrit
5177cf3714 Merge "Notify lightbar task when CPU enters/leaves S5" 2012-05-22 14:05:04 -07:00
Bill Richardson
b0847a726a Notify lightbar task when CPU enters/leaves S5
BUG=none
TEST=none

Change-Id: I07e3751c8fece18cf34d9b7c628fb3c6ab63d6b3
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
2012-05-22 12:58:16 -07:00
Vincent Palatin
5e1f87ce56 do not advertise RW-B in FMAP if it doesn't exist
The Snow board has currently the second RW partition de-activated due to
flash space constraints, we don't want to send false information to the
tools.

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

BUG=chrome-os-partner:8865
TEST=on Snow, flashrom -p internal:bus=lpc -i EC_RW -w ec.bin

Change-Id: I6da60028aa69aeb476d5c2d98df5a03ece961891
2012-05-22 19:48:30 +00:00
Randall Spangler
9b44097d23 Add support for printing fixed-point numbers
This makes timestamps much easier to read.

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

BUG=chrome-os-partner:9866
TEST=timerinfo, taskinfo, battery commands have fixed-point numbers,
and timestamps printed in the log look right.

Change-Id: If91c83f725984c8e04bfb7cdcff316d9c3bfe24c
2012-05-22 10:37:56 -07:00
Vincent Palatin
15854fa680 Add FMAP even if VBOOT is not activated
This simplifies the re-flashing for stm32 based platforms.

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

BUG=chrome-os-partner:8865
TEST=On Daisy, flashrom -p internal:bus=lpc -w ec.bin

Change-Id: I66860383c34110b1edf852929c244a2b682bc105
2012-05-22 15:04:13 +00:00
Vincent Palatin
16d8f6c8bc Fix regression on linking address
On platform where the flash base address is non null (e.g. stm32), we need to
take it into account.

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

BUG=None
TEST=On Daisy, type "sysjump A" and "version" into the EC console
and observe that the commands succeed.

Change-Id: I95596d45f6970259d19d7063f6794fae0c400ab7
2012-05-22 15:04:13 +00:00
Gerrit
33b7a5c512 Merge "Disable touchscreen when lid is closed and in S3" 2012-05-22 07:41:46 -07:00
Randall Spangler
990c8b39e1 Disable touchscreen when lid is closed and in S3
(Touchscreen was already disabled in S5)

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

BUG=chrome-os-partner:9736
TEST=from console, 'gpioget touchscreen_resetn' in these cases:

1) system is off -> 0
2) system is on with lid open -> 1
3) system is on with lid closed -> 1
4) system is suspended with lid open -> 1
5) system is suspended with lid closed -> 1
6) system is shut back down -> 0
7) suspend system with lid open, THEN close lid -> 0

Change-Id: I5fc80b72ea9dcfbf11f5280d79ae805c2ef1b6df
2012-05-21 16:30:12 -07:00
Bill Richardson
40bb0ad88c Turn on light bar subtly for factory
BUG=chrome-os-partner:9850
TEST=manual

Open the lid. The lightbar should turn on.

Change-Id: I14d1316e6b0cac7a7e2f5b08b7d14b6bbdfa5830
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
2012-05-21 16:28:55 -07:00
Gerrit
790d3d8721 Merge "Even more debug command cleanup to save space" 2012-05-21 15:24:32 -07:00
Randall Spangler
b2c4ee6cf8 Even more debug command cleanup to save space
BUG=none
TEST=(run the commands)

Change-Id: Ibc414ffd594e06dbdce64c51859b6f247bb10d36
Signed-off-by: Randall Spangler <rspangler@chromium.org>
2012-05-21 14:57:08 -07:00
Bill Richardson
add419009f Clean up linker scripts; detect out-of-flash problem.
The VMA of the .data segment is in RAM, but we actually put it into FLASH.
The linker doesn't notice if it runs out of flash, so it creates an invalid
image.

This adds an explicit check to be sure it all fits. It also refactors the
region declarations to be more explicit. For vboot-enabled configurations,

  CONFIG_SECTION_*      - describes the extent of flash for one entire image
  CONFIG_FW_*           - the region within the SECTION for the firmware only
  CONFIG_VBLOCK_*       - the region within the RW SECTIONs for the vblocks
  CONFIG_VBOOT_ROOTKEY  - the region within the RO SECTION for the root key

Look at chip/lm4/config.h for the best example.

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

Build it, run it.

Change-Id: I3c652e82d58a5328115cc750c80ecba6a3fd99a3
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
2012-05-21 14:20:02 -07:00
Gerrit
b5ce7f5a20 Merge "More debug command cleanup to save space" 2012-05-21 11:16:06 -07:00
Randall Spangler
eac46a9194 More debug command cleanup to save space
(saves another 1.5KB)

BUG=none
TEST=(run the commands)

Change-Id: Id3ca58528fa68a4cec606edf2b98b9af38ac228f
Signed-off-by: Randall Spangler <rspangler@chromium.org>
2012-05-21 10:21:10 -07:00
Vic Yang
f618a74f7f Add host command to read temperature sensor info
In order to perform testing across all future boards and enable easier
debugging, we need a host command to read temperature sensor name and
sensor type.

BUG=chrome-os-patner:9836
TEST='ectool tempsinfo 0' shows sensor name and its type.

Change-Id: I06d9c6b045902394179c35e2ee8bc8dc551e8e98
2012-05-22 01:00:41 +08:00
Randall Spangler
01e94792e7 Clean up debug commands to use less space
BUG=none
TEST=(run the commands)

Change-Id: I6ed4aee169311825190bcc386b86cdc32ba0866a
Signed-off-by: Randall Spangler <rspangler@chromium.org>
2012-05-21 09:17:51 -07:00
Randall Spangler
b1bb8314bd Add LM4 support for hard reset
(And add STM32 support for disabling interrupts before reset, which
got missed before.)

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

BUG=chrome-os-partner:7470
TEST=from console, "reboot", then "reboot hard"

Change-Id: Ib98792abc0c91a01e2230b419fc876052380655a
2012-05-21 09:17:43 -07:00
Gerrit
8407b93f6d Merge "Fix a bug that 'ectool thermalget' silently fails" 2012-05-21 09:11:01 -07:00
Gerrit
9e2c9b332d Merge "Use common host command processing for Daisy I2C" 2012-05-21 09:10:59 -07:00
Vic Yang
bc021ce9c7 Fix a bug that 'ectool thermalget' silently fails
'ectool thermalget' should return error if sensor ID or threshold ID is
out of range. This CL fixes a bug that error codes mismatch.

BUG=chrome-os-partner:9840
TEST='ectool thermalget 0 10' gives error.

Change-Id: I74d0c66044cd31743c4fac0a8dc0431db6259e71
2012-05-21 16:46:59 +08:00
Vincent Palatin
36107b54d4 Fix flash base in full image ELF
When the flash base address is non null (e.g. stm32), it's nice to have
the full ELF image (including the 3 copies) at the right address.

This doesn't change anything to the final .bin image but allow to load
directly the .obj with tools which handle ELF format.

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

BUG=None
TEST=Flash ec.obj on a Snow board using the ST-Link JTAG over GDB.

Change-Id: I51a6d9c00b359c6204bd51b30ee7a4fec362d88e
2012-05-19 00:19:51 +00:00
Vincent Palatin
a043accacd stm32: keep power across sysjump
Ensure we can jump between EC images without powering down the GAIA AP :
- preserve GPIO state
- go back to "power-on" state if needed in GAIA state machine.

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

BUG=chrome-os-partner:8865
TEST=On Daisy, boot Linux, then type "sysjump B" and observed we can
still interact with Linux without any AP reboot.

Change-Id: Ia2bd0f65ea348813b120bcc3a3f3bdfa96a9877a
2012-05-18 20:02:19 +00:00
Vincent Palatin
1b104fb7d9 Fix partition address when flash base is not zero
On chips where CONFIG_FLASH_BASE is not 0 (e.g. stm32), the reset vector
address check in system_run_image_copy would fail because we are
comparing an absolute address against a flash offset.

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

BUG=chrome-os-partner:8865
TEST=on Daisy, type "sysjump B" in EC console.

Change-Id: Ib79677fb926a37fcf32f4aac013dc36b086f4464
2012-05-18 18:56:52 +00:00
Vincent Palatin
4c5f1365b5 Use common host command processing for Daisy I2C
This also updates the communication protocol between the EC and the AP in a
non backward compatible way.

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

BUG=chrome-os-partner:9614
TEST=on Daisy with updated kernel driver, use the keyboard in ChromeOS

Change-Id: I5a50e9a74b9891153a37ea79318c8a66a1b0c5ca
2012-05-18 17:57:51 +00:00
Gerrit
86a36e5bcc Merge "Preserve USB port state when jumping" 2012-05-17 21:43:56 -07:00
Randall Spangler
103e055dda Disable unused BDS functionality
This was used on the hybrid Badger-Lumpy systems for one-off testing.
It wouldn't necessarily work on a bare Badger board, and maintaining
it resulted in frequent build breaks.

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

BUG=none
TEST=build link, bds, daisy; boot link and bds

Change-Id: Ib64ccad9f38d76832ab57f7254dbf32f3d5e4a5e
2012-05-17 10:50:54 -07:00