mb/lenovo/{t60,r60}: Add ThinkPad R60 support as variant board

- This port should be Reclaim Your Freedom compliant
  (not certified yet).
- Untested on boards with external Radeon graphics adapter.
- Some columns on the left-most side of display are completely
  black on 1400x1050 IPS display[1]. Display works fine on Linux.
  I don't know why it appears like that. So far it has been observed
  only with native graphics initialization.
- Only GRUB2 and SeaBIOS payloads tested for now.
- 2504 docking station USB doesn't work under Linux.
  Can detect pendrive in GRUB2 payload.
- Sometimes it takes 20s of "pretending it's powered off" to run
  coreboot code. Issue is payload agnostic.
  Probably caused by missing one capacitor on my unit.

[1] https://imgur.com/a/0wpMGsm

Change-Id: Ibd9208a5eafd228f8eedbc8fb4f4eb9ed1932a14
Signed-off-by: Maciej Matuszczyk <maccraft123mc@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/35864
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
Maccraft 2019-10-07 20:28:51 +02:00 committed by Patrick Georgi
parent 9be81b8d4b
commit 0cd098e4e4
8 changed files with 81 additions and 17 deletions

View File

@ -65,6 +65,7 @@ The boards in this section are not real mainboards, but emulators.
- [Mainboard codenames](lenovo/codenames.md) - [Mainboard codenames](lenovo/codenames.md)
- [Hardware Maintenance Manual of ThinkPads](lenovo/thinkpad_hmm.md) - [Hardware Maintenance Manual of ThinkPads](lenovo/thinkpad_hmm.md)
- [R60](lenovo/r60.md)
- [T4xx common](lenovo/t4xx_series.md) - [T4xx common](lenovo/t4xx_series.md)
- [X2xx common](lenovo/x2xx_series.md) - [X2xx common](lenovo/x2xx_series.md)

View File

@ -0,0 +1,44 @@
# Lenovo Thinkpad R60
Untested on boards with external Radeon graphics adapter. If you have such
board, proceed at your own risk and document if it does work.
## Flashing instructions
### External flashing
The flash IC is located at the bottom center of the mainboard. Access to
the flash chip is blocked by the magnesium frame, so you need to disassemble
the entire laptop and remove the mainboard. The flash chip is referenced as U49 in
the schematics and in the boardview.
![](r60_chip.jpg)
To disassemble the laptop, follow the [Hardware Maintenance Manual](https://thinkpads.com/support/hmm/hmm_pdf/42x3749_02.pdf).
### Internal flashing on Vendor BIOS
This [method](https://gist.github.com/ArthurHeymans/c5ef494ada01af372735f237f6c6adbe) describes a way to install coreboot with vendor firmware still
installed on the Lenovo Thinkpad X60. It is reported to also work in Thinkpad
R60, with the only difference being the board target you build coreboot for.
### Flashing on coreboot
Default configuration of coreboot doesn't feature any flash restrictions
like the vendor firmware, therefore flashrom is able to flash any rom without problems.
## Things tested and working in Linux 5.3:
- Intel WiFi card
- Suspend and resume
- Native graphics initialization. Both legacy VGA and linear framebuffer work
- GRUB2 2.04 and SeaBIOS 1.12.1 payloads
- Reflashing with flashrom (use flashrom-git as of 17.09.2019)
- 2G+1G memory configuration working
- 2504 dock USB ports if not hotplugged
## Things tested and not working:
- 2504 dock hotplugging
- Black bar at the left side of the screen. Doesn't appear in Linux. See picture at top
- Sometimes it takes several second to run coreboot. Just wait for it

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1,4 +1,4 @@
if BOARD_LENOVO_T60 || BOARD_LENOVO_Z61T if BOARD_LENOVO_T60 || BOARD_LENOVO_Z61T || BOARD_LENOVO_R60
config BOARD_SPECIFIC_OPTIONS config BOARD_SPECIFIC_OPTIONS
def_bool y def_bool y
@ -30,7 +30,7 @@ config MAINBOARD_DIR
config VARIANT_DIR config VARIANT_DIR
string string
default "t60" if BOARD_LENOVO_T60 default "t60" if BOARD_LENOVO_T60 || BOARD_LENOVO_R60
default "z61t" if BOARD_LENOVO_Z61T default "z61t" if BOARD_LENOVO_Z61T
config OVERRIDE_DEVICETREE config OVERRIDE_DEVICETREE
@ -41,9 +41,10 @@ config MAINBOARD_PART_NUMBER
string string
default "ThinkPad T60" if BOARD_LENOVO_T60 default "ThinkPad T60" if BOARD_LENOVO_T60
default "ThinkPad Z61t" if BOARD_LENOVO_Z61T default "ThinkPad Z61t" if BOARD_LENOVO_Z61T
default "ThinkPad R60" if BOARD_LENOVO_R60
config MAX_CPUS config MAX_CPUS
int int
default 2 default 2
endif # BOARD_LENOVO_T60 || BOARD_LENOVO_Z61T endif # BOARD_LENOVO_T60 || BOARD_LENOVO_Z61T || BOARD_LENOVO_R60

View File

@ -3,3 +3,6 @@ config BOARD_LENOVO_T60
config BOARD_LENOVO_Z61T config BOARD_LENOVO_Z61T
bool "ThinkPad Z61t" bool "ThinkPad Z61t"
config BOARD_LENOVO_R60
bool "ThinkPad R60"

View File

@ -1,5 +1,5 @@
Vendor name: Lenovo Vendor name: Lenovo
Board name: ThinkPad T60/T60p/Z61t baseboard Board name: ThinkPad R60/T60/T60p/Z61t baseboard
Category: laptop Category: laptop
ROM package: SOIC-8 ROM package: SOIC-8
ROM protocol: SPI ROM protocol: SPI

View File

@ -2,6 +2,7 @@
* This file is part of the coreboot project. * This file is part of the coreboot project.
* *
* Copyright (C) 2016 Arthur Heymans <arthur@aheymans.xyz> * Copyright (C) 2016 Arthur Heymans <arthur@aheymans.xyz>
* Copyright (C) 2019 Maciej Matuszczyk
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -16,21 +17,24 @@
#include <southbridge/intel/common/gpio.h> #include <southbridge/intel/common/gpio.h>
static const struct pch_gpio_set1 pch_gpio_set1_mode = { static const struct pch_gpio_set1 pch_gpio_set1_mode = {
.gpio1 = GPIO_MODE_GPIO, .gpio1 = GPIO_MODE_GPIO, /* DASP_BAY# */
.gpio6 = GPIO_MODE_GPIO, /* LEGACYIO# */ .gpio6 = GPIO_MODE_GPIO, /* LEGACYIO# */
.gpio7 = GPIO_MODE_GPIO, /* BDC_PRESENCE# */ .gpio7 = GPIO_MODE_GPIO, /* BDC_PRESENCE# */
.gpio8 = GPIO_MODE_GPIO, /* H8_WAKE# */ .gpio8 = GPIO_MODE_GPIO, /* H8_WAKE# */
.gpio9 = GPIO_MODE_GPIO, .gpio9 = GPIO_MODE_GPIO, /* Pulled Up */
.gpio10 = GPIO_MODE_GPIO, /* MDI_DETECT */ .gpio10 = GPIO_MODE_GPIO, /* MDI_DETECT */
.gpio12 = GPIO_MODE_GPIO, /* H8SCI# */ .gpio12 = GPIO_MODE_GPIO, /* H8SCI# */
.gpio13 = GPIO_MODE_GPIO, .gpio13 = GPIO_MODE_GPIO, /* Pulled Up */
.gpio14 = GPIO_MODE_GPIO, /* CPUSB# */ .gpio14 = GPIO_MODE_GPIO, /* CPUSB# */
.gpio15 = GPIO_MODE_GPIO, /* CPPE# */ .gpio15 = GPIO_MODE_GPIO, /* CPPE# */
.gpio19 = GPIO_MODE_GPIO, .gpio19 = GPIO_MODE_GPIO, /* GBE_RS# */
.gpio22 = GPIO_MODE_GPIO, #if CONFIG(BOARD_LENOVO_R60)
.gpio24 = GPIO_MODE_GPIO, .gpio21 = GPIO_MODE_GPIO, /* LCD_PRESENCE# */
#endif
.gpio22 = GPIO_MODE_GPIO, /* FWH_WP# */
.gpio24 = GPIO_MODE_GPIO, /* Pulled Down */
.gpio25 = GPIO_MODE_GPIO, /* MDC_KILL# */ .gpio25 = GPIO_MODE_GPIO, /* MDC_KILL# */
.gpio26 = GPIO_MODE_GPIO, .gpio26 = GPIO_MODE_GPIO, /* Pulled Down */
.gpio27 = GPIO_MODE_GPIO, /* EXC_PWR_CTRL */ .gpio27 = GPIO_MODE_GPIO, /* EXC_PWR_CTRL */
.gpio28 = GPIO_MODE_GPIO, /* EXC_AUX_CTRL */ .gpio28 = GPIO_MODE_GPIO, /* EXC_AUX_CTRL */
}; };
@ -47,7 +51,12 @@ static const struct pch_gpio_set1 pch_gpio_set1_direction = {
.gpio14 = GPIO_DIR_INPUT, .gpio14 = GPIO_DIR_INPUT,
.gpio15 = GPIO_DIR_INPUT, .gpio15 = GPIO_DIR_INPUT,
.gpio19 = GPIO_DIR_OUTPUT, .gpio19 = GPIO_DIR_OUTPUT,
#if CONFIG(BOARD_LENOVO_R60)
.gpio21 = GPIO_DIR_INPUT,
.gpio22 = GPIO_DIR_OUTPUT,
#else
.gpio22 = GPIO_DIR_INPUT, .gpio22 = GPIO_DIR_INPUT,
#endif
.gpio24 = GPIO_DIR_OUTPUT, .gpio24 = GPIO_DIR_OUTPUT,
.gpio25 = GPIO_DIR_OUTPUT, .gpio25 = GPIO_DIR_OUTPUT,
.gpio26 = GPIO_DIR_OUTPUT, .gpio26 = GPIO_DIR_OUTPUT,
@ -77,14 +86,20 @@ static const struct pch_gpio_set1 pch_gpio_set1_blink = {
}; };
static const struct pch_gpio_set2 pch_gpio_set2_mode = { static const struct pch_gpio_set2 pch_gpio_set2_mode = {
.gpio36 = GPIO_MODE_GPIO, /*PLANARID0 */ #if CONFIG(BOARD_LENOVO_R60)
.gpio37 = GPIO_MODE_GPIO, /*PLANARID1 */ .gpio34 = GPIO_MODE_GPIO, /* SMB_3B_EN */
.gpio38 = GPIO_MODE_GPIO, /*PLANARID2 */ #endif
.gpio39 = GPIO_MODE_GPIO, /*PLANARID3 */ .gpio36 = GPIO_MODE_GPIO, /* PLANARID0 */
.gpio48 = GPIO_MODE_GPIO, .gpio37 = GPIO_MODE_GPIO, /* PLANARID1 */
.gpio38 = GPIO_MODE_GPIO, /* PLANARID2 */
.gpio39 = GPIO_MODE_GPIO, /* PLANARID3 */
.gpio48 = GPIO_MODE_GPIO, /* FWH_TBL# */
}; };
static const struct pch_gpio_set2 pch_gpio_set2_direction = { static const struct pch_gpio_set2 pch_gpio_set2_direction = {
#if CONFIG(BOARD_LENOVO_R60)
.gpio34 = GPIO_DIR_INPUT,
#endif
.gpio36 = GPIO_DIR_INPUT, .gpio36 = GPIO_DIR_INPUT,
.gpio37 = GPIO_DIR_INPUT, .gpio37 = GPIO_DIR_INPUT,
.gpio38 = GPIO_DIR_INPUT, .gpio38 = GPIO_DIR_INPUT,

View File

@ -1,5 +1,5 @@
Vendor name: Lenovo Vendor name: Lenovo
Board name: ThinkPad T60/T60p Board name: ThinkPad R60/T60/T60p
Category: laptop Category: laptop
ROM package: SOIC-8 ROM package: SOIC-8
ROM protocol: SPI ROM protocol: SPI