veyron: Unify identical mainboards
This patch removes a lot of code duplication between the virtually identical Veyron Chromebook variants by merging the code into a single directory and handling the different names solely within Kconfig. This also allows us to easily add all the other Chromebook variants that have only been kept in Google's firmware branch to avoid cluttering coreboot too much, making it possible to build these boards with upstream coreboot out of the box. The only effective change this will have on the affected boards is removing quirks for early board revisions (since revision numbers differ between variants). Since all those quirks concerned early pre-MP revisions, I doubt this will bother anyone (and the old code is still available through the Google firmware branch if anyone needs it). It will also expand a recent fix in Jerry that increased an LCD power-on delay to make it compatible with another kind of panel to all boards, which is probably not a bad idea anyway. Leaving all non-Chromebook boards as they are for now since they often contain more extensive differences. BRANCH=None BUG=None TEST=Booted Jerry. Change-Id: I4bd590429b9539a91f837459a804888904cd6f2d Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: 10049a59a34ef45ca1458c1549f708b5f83e2ef9 Original-Change-Id: I6a8c813e58fe60d83a0b783141ffed520e197b3c Original-Signed-off-by: Julius Werner <jwerner@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/296053 Original-Reviewed-by: David Hendricks <dhendrix@chromium.org> Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/11555 Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
736a4a2a17
commit
dd07ef2acd
|
@ -17,7 +17,10 @@
|
|||
## Foundation, Inc.
|
||||
##
|
||||
|
||||
if BOARD_GOOGLE_VEYRON_JERRY
|
||||
config BOARD_GOOGLE_VEYRON # dummy option to be selected by variant boards
|
||||
def_bool n
|
||||
|
||||
if BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_SPECIFIC_OPTIONS # dummy
|
||||
def_bool y
|
||||
|
@ -43,11 +46,11 @@ config CHROMEOS
|
|||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
default google/veyron_jerry
|
||||
default google/veyron
|
||||
|
||||
config MAINBOARD_PART_NUMBER
|
||||
string
|
||||
default "Veyron_Jerry"
|
||||
default "Veyron"
|
||||
|
||||
config MAINBOARD_VENDOR
|
||||
string
|
||||
|
@ -82,4 +85,4 @@ config PMIC_BUS
|
|||
int
|
||||
default 0
|
||||
|
||||
endif # BOARD_GOOGLE_VEYRON_JERRY
|
||||
endif # BOARD_GOOGLE_VEYRON
|
|
@ -0,0 +1,39 @@
|
|||
config BOARD_GOOGLE_VEYRON_GUS
|
||||
bool "Veyron_Gus"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_JAQ
|
||||
bool "Veyron_Jaq"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_JERRY
|
||||
bool "Veyron_Jerry"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_MIGHTY
|
||||
bool "Veyron_Mighty"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_MINNIE
|
||||
bool "Veyron_Minnie"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_NICKY
|
||||
bool "Veyron_Nicky"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_PINKY
|
||||
bool "Veyron_Pinky"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_SHARK
|
||||
bool "Veyron_Shark"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_SPEEDY
|
||||
bool "Veyron_Speedy"
|
||||
select BOARD_GOOGLE_VEYRON
|
||||
|
||||
config BOARD_GOOGLE_VEYRON_THEA
|
||||
bool "Veyron_Thea"
|
||||
select BOARD_GOOGLE_VEYRON
|
|
@ -17,8 +17,8 @@
|
|||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __MAINBOARD_GOOGLE_VEYRON_JERRY_BOARD_H
|
||||
#define __MAINBOARD_GOOGLE_VEYRON_JERRY_BOARD_H
|
||||
#ifndef __MAINBOARD_GOOGLE_VEYRON_BOARD_H
|
||||
#define __MAINBOARD_GOOGLE_VEYRON_BOARD_H
|
||||
|
||||
#include <boardid.h>
|
||||
#include <gpio.h>
|
||||
|
@ -28,4 +28,4 @@
|
|||
|
||||
void setup_chromeos_gpios(void);
|
||||
|
||||
#endif /* __MAINBOARD_GOOGLE_VEYRON_JERRY_BOARD_H */
|
||||
#endif /* __MAINBOARD_GOOGLE_VEYRON_BOARD_H */
|
|
@ -141,7 +141,7 @@ void lb_board(struct lb_header *header)
|
|||
void mainboard_power_on_backlight(void)
|
||||
{
|
||||
gpio_output(GPIO(2, B, 4), 1); /* BL_PWR_EN */
|
||||
mdelay(20);
|
||||
mdelay(120);
|
||||
gpio_output(GPIO(7, A, 0), 1); /* LCD_BL */
|
||||
mdelay(10);
|
||||
gpio_output(GPIO_BACKLIGHT, 1); /* BL_EN */
|
|
@ -1,2 +0,0 @@
|
|||
config BOARD_GOOGLE_VEYRON_JERRY
|
||||
bool "Veyron_Jerry"
|
|
@ -1,167 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/cache.h>
|
||||
#include <arch/io.h>
|
||||
#include <boot/coreboot_tables.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <device/device.h>
|
||||
#include <device/i2c.h>
|
||||
#include <edid.h>
|
||||
#include <elog.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/display.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/soc.h>
|
||||
#include <soc/pmu.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/spi.h>
|
||||
#include <soc/i2c.h>
|
||||
#include <symbols.h>
|
||||
#include <vbe.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
static void configure_usb(void)
|
||||
{
|
||||
gpio_output(GPIO(0, B, 3), 1); /* HOST1_PWR_EN */
|
||||
gpio_output(GPIO(0, B, 4), 1); /* USBOTG_PWREN_H */
|
||||
gpio_output(GPIO(7, C, 5), 1); /* 5V_DRV */
|
||||
}
|
||||
|
||||
static void configure_sdmmc(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_sdmmc0, IOMUX_SDMMC0);
|
||||
|
||||
/* use sdmmc0 io, disable JTAG function */
|
||||
write32(&rk3288_grf->soc_con0, RK_CLRBITS(1 << 12));
|
||||
|
||||
/* Note: these power rail definitions are copied in romstage.c */
|
||||
rk808_configure_ldo(4, 3300); /* VCCIO_SD */
|
||||
rk808_configure_ldo(5, 3300); /* VCC33_SD */
|
||||
|
||||
gpio_input(GPIO(7, A, 5)); /* SD_DET */
|
||||
}
|
||||
|
||||
static void configure_emmc(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_emmcdata, IOMUX_EMMCDATA);
|
||||
write32(&rk3288_grf->iomux_emmcpwren, IOMUX_EMMCPWREN);
|
||||
write32(&rk3288_grf->iomux_emmccmd, IOMUX_EMMCCMD);
|
||||
|
||||
gpio_output(GPIO(2, B, 1), 1); /* EMMC_RST_L */
|
||||
}
|
||||
|
||||
static void configure_codec(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_i2c2, IOMUX_I2C2); /* CODEC I2C */
|
||||
i2c_init(2, 400*KHz); /* CODEC I2C */
|
||||
|
||||
write32(&rk3288_grf->iomux_i2s, IOMUX_I2S);
|
||||
write32(&rk3288_grf->iomux_i2sclk, IOMUX_I2SCLK);
|
||||
|
||||
rk808_configure_ldo(6, 1800); /* VCC18_CODEC */
|
||||
|
||||
/* AUDIO IO domain 1.8V voltage selection */
|
||||
write32(&rk3288_grf->io_vsel, RK_SETBITS(1 << 6));
|
||||
rkclk_configure_i2s(12288000);
|
||||
}
|
||||
|
||||
static void configure_vop(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_lcdc, IOMUX_LCDC);
|
||||
|
||||
/* lcdc(vop) iodomain select 1.8V */
|
||||
write32(&rk3288_grf->io_vsel, RK_SETBITS(1 << 0));
|
||||
|
||||
switch (board_id()) {
|
||||
case 2:
|
||||
rk808_configure_switch(2, 1); /* VCC18_LCD */
|
||||
rk808_configure_ldo(7, 2500); /* VCC10_LCD_PWREN_H */
|
||||
rk808_configure_switch(1, 1); /* VCC33_LCD */
|
||||
break;
|
||||
default:
|
||||
gpio_output(GPIO(2, B, 5), 1); /* AVDD_1V8_DISP_EN */
|
||||
rk808_configure_ldo(7, 2500); /* VCC10_LCD_PWREN_H */
|
||||
gpio_output(GPIO(7, B, 6), 1); /* LCD_EN */
|
||||
rk808_configure_switch(1, 1); /* VCC33_LCD */
|
||||
|
||||
/* enable edp HPD */
|
||||
gpio_input_pulldown(GPIO(7, B, 3));
|
||||
write32(&rk3288_grf->iomux_edp_hotplug, IOMUX_EDP_HOTPLUG);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void mainboard_init(device_t dev)
|
||||
{
|
||||
gpio_output(GPIO_RESET, 0);
|
||||
|
||||
configure_usb();
|
||||
configure_sdmmc();
|
||||
configure_emmc();
|
||||
configure_codec();
|
||||
configure_vop();
|
||||
|
||||
elog_init();
|
||||
elog_add_watchdog_reset();
|
||||
elog_add_boot_reason();
|
||||
}
|
||||
|
||||
static void mainboard_enable(device_t dev)
|
||||
{
|
||||
dev->ops->init = &mainboard_init;
|
||||
}
|
||||
|
||||
struct chip_operations mainboard_ops = {
|
||||
.enable_dev = mainboard_enable,
|
||||
};
|
||||
|
||||
void lb_board(struct lb_header *header)
|
||||
{
|
||||
struct lb_range *dma;
|
||||
|
||||
dma = (struct lb_range *)lb_new_record(header);
|
||||
dma->tag = LB_TAB_DMA;
|
||||
dma->size = sizeof(*dma);
|
||||
dma->range_start = (uintptr_t)_dma_coherent;
|
||||
dma->range_size = _dma_coherent_size;
|
||||
}
|
||||
|
||||
void mainboard_power_on_backlight(void)
|
||||
{
|
||||
switch (board_id()) {
|
||||
case 2:
|
||||
gpio_output(GPIO(7, A, 0), 0); /* BL_EN */
|
||||
gpio_output(GPIO(7, A, 2), 1); /* LCD_BL */
|
||||
mdelay(10);
|
||||
gpio_output(GPIO(7, A, 0), 1); /* BL_EN */
|
||||
break;
|
||||
default:
|
||||
gpio_output(GPIO(2, B, 4), 1); /* BL_PWR_EN */
|
||||
mdelay(120);
|
||||
gpio_output(GPIO(7, A, 0), 1); /* LCD_BL */
|
||||
mdelay(10);
|
||||
gpio_output(GPIO_BACKLIGHT, 1); /* BL_EN */
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -1,85 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
|
||||
if BOARD_GOOGLE_VEYRON_MIGHTY
|
||||
|
||||
config BOARD_SPECIFIC_OPTIONS # dummy
|
||||
def_bool y
|
||||
select BOARD_ID_AUTO
|
||||
select COMMON_CBFS_SPI_WRAPPER
|
||||
select EC_GOOGLE_CHROMEEC
|
||||
select EC_GOOGLE_CHROMEEC_SPI
|
||||
select RAM_CODE_SUPPORT
|
||||
select SOC_ROCKCHIP_RK3288
|
||||
select MAINBOARD_HAS_NATIVE_VGA_INIT
|
||||
select MAINBOARD_DO_NATIVE_VGA_INIT
|
||||
select MAINBOARD_HAS_CHROMEOS
|
||||
select BOARD_ROMSIZE_KB_4096
|
||||
select HAVE_HARD_RESET
|
||||
select SPI_FLASH
|
||||
select SPI_FLASH_GIGADEVICE
|
||||
select SPI_FLASH_WINBOND
|
||||
|
||||
config CHROMEOS
|
||||
select CHROMEOS_VBNV_EC
|
||||
select EC_SOFTWARE_SYNC
|
||||
select VIRTUAL_DEV_SWITCH
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
default google/veyron_mighty
|
||||
|
||||
config MAINBOARD_PART_NUMBER
|
||||
string
|
||||
default "Veyron_Mighty"
|
||||
|
||||
config MAINBOARD_VENDOR
|
||||
string
|
||||
default "Google"
|
||||
|
||||
config EC_GOOGLE_CHROMEEC_SPI_BUS
|
||||
hex
|
||||
default 0
|
||||
|
||||
config EC_GOOGLE_CHROMEEC_SPI_WAKEUP_DELAY_US
|
||||
int
|
||||
default 100
|
||||
|
||||
config BOOT_MEDIA_SPI_BUS
|
||||
int
|
||||
default 2
|
||||
|
||||
config DRIVER_TPM_I2C_BUS
|
||||
hex
|
||||
default 0x1
|
||||
|
||||
config DRIVER_TPM_I2C_ADDR
|
||||
hex
|
||||
default 0x20
|
||||
|
||||
config CONSOLE_SERIAL_UART_ADDRESS
|
||||
hex
|
||||
depends on DRIVERS_UART
|
||||
default 0xFF690000
|
||||
|
||||
config PMIC_BUS
|
||||
int
|
||||
default 0
|
||||
|
||||
endif # BOARD_GOOGLE_VEYRON_MIGHTY
|
|
@ -1,2 +0,0 @@
|
|||
config BOARD_GOOGLE_VEYRON_MIGHTY
|
||||
bool "Veyron_Mighty"
|
|
@ -1,42 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
bootblock-y += bootblock.c
|
||||
bootblock-y += boardid.c
|
||||
bootblock-y += chromeos.c
|
||||
bootblock-y += reset.c
|
||||
|
||||
verstage-y += boardid.c
|
||||
verstage-y += chromeos.c
|
||||
verstage-y += reset.c
|
||||
|
||||
romstage-y += boardid.c
|
||||
romstage-y += chromeos.c
|
||||
romstage-y += romstage.c
|
||||
romstage-y += sdram_configs.c
|
||||
romstage-y += reset.c
|
||||
|
||||
ramstage-y += boardid.c
|
||||
ramstage-y += chromeos.c
|
||||
ramstage-y += mainboard.c
|
||||
ramstage-y += reset.c
|
||||
|
||||
bootblock-y += memlayout.ld
|
||||
verstage-y += memlayout.ld
|
||||
romstage-y += memlayout.ld
|
||||
ramstage-y += memlayout.ld
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __MAINBOARD_GOOGLE_VEYRON_MIGHTY_BOARD_H
|
||||
#define __MAINBOARD_GOOGLE_VEYRON_MIGHTY_BOARD_H
|
||||
|
||||
#include <boardid.h>
|
||||
#include <gpio.h>
|
||||
|
||||
#define GPIO_BACKLIGHT GPIO(7, A, 2)
|
||||
#define GPIO_RESET GPIO(0, B, 5)
|
||||
|
||||
void setup_chromeos_gpios(void);
|
||||
|
||||
#endif /* __MAINBOARD_GOOGLE_VEYRON_MIGHTY_BOARD_H */
|
|
@ -1,49 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <boardid.h>
|
||||
#include <console/console.h>
|
||||
#include <gpio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
uint8_t board_id(void)
|
||||
{
|
||||
static int id = -1;
|
||||
static gpio_t pins[] = {[3] = GPIO(2, A, 7), [2] = GPIO(2, A, 2),
|
||||
[1] = GPIO(2, A, 1), [0] = GPIO(2, A, 0)}; /* GPIO2_A0 is LSB */
|
||||
|
||||
if (id < 0) {
|
||||
id = gpio_base2_value(pins, ARRAY_SIZE(pins));
|
||||
printk(BIOS_SPEW, "Board ID: %d.\n", id);
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
uint32_t ram_code(void)
|
||||
{
|
||||
uint32_t code;
|
||||
static gpio_t pins[] = {[3] = GPIO(8, A, 3), [2] = GPIO(8, A, 2),
|
||||
[1] = GPIO(8, A, 1), [0] = GPIO(8, A, 0)}; /* GPIO8_A0 is LSB */
|
||||
|
||||
code = gpio_base2_value(pins, ARRAY_SIZE(pins));
|
||||
printk(BIOS_SPEW, "RAM Config: %u.\n", code);
|
||||
|
||||
return code;
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <assert.h>
|
||||
#include <bootblock_common.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <reset.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/i2c.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/pmu.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/spi.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
void bootblock_mainboard_early_init()
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DRIVERS_UART)) {
|
||||
assert(CONFIG_CONSOLE_SERIAL_UART_ADDRESS == UART2_BASE);
|
||||
write32(&rk3288_grf->iomux_uart2, IOMUX_UART2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void bootblock_mainboard_init(void)
|
||||
{
|
||||
if (rkclk_was_watchdog_reset())
|
||||
reboot_from_watchdog();
|
||||
|
||||
/* Up VDD_CPU (BUCK1) to 1.4V to support max CPU frequency (1.8GHz). */
|
||||
setbits_le32(&rk3288_pmu->iomux_i2c0scl, IOMUX_I2C0SCL);
|
||||
setbits_le32(&rk3288_pmu->iomux_i2c0sda, IOMUX_I2C0SDA);
|
||||
assert(CONFIG_PMIC_BUS == 0); /* must correspond with IOMUX */
|
||||
i2c_init(CONFIG_PMIC_BUS, 400*KHz);
|
||||
|
||||
/* Slowly raise to max CPU voltage to prevent overshoot */
|
||||
rk808_configure_buck(1, 1200);
|
||||
udelay(175);/* Must wait for voltage to stabilize,2mV/us */
|
||||
rk808_configure_buck(1, 1400);
|
||||
udelay(100);/* Must wait for voltage to stabilize,2mV/us */
|
||||
rkclk_configure_cpu();
|
||||
|
||||
/* i2c1 for tpm */
|
||||
write32(&rk3288_grf->iomux_i2c1, IOMUX_I2C1);
|
||||
i2c_init(1, 400*KHz);
|
||||
|
||||
/* spi2 for firmware ROM */
|
||||
write32(&rk3288_grf->iomux_spi2csclk, IOMUX_SPI2_CSCLK);
|
||||
write32(&rk3288_grf->iomux_spi2txrx, IOMUX_SPI2_TXRX);
|
||||
rockchip_spi_init(CONFIG_BOOT_MEDIA_SPI_BUS, 24750*KHz);
|
||||
|
||||
/* spi0 for chrome ec */
|
||||
write32(&rk3288_grf->iomux_spi0, IOMUX_SPI0);
|
||||
rockchip_spi_init(CONFIG_EC_GOOGLE_CHROMEEC_SPI_BUS, 8250*KHz);
|
||||
|
||||
setup_chromeos_gpios();
|
||||
}
|
|
@ -1,148 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <boot/coreboot_tables.h>
|
||||
#include <console/console.h>
|
||||
#include <ec/google/chromeec/ec.h>
|
||||
#include <ec/google/chromeec/ec_commands.h>
|
||||
#include <gpio.h>
|
||||
#include <string.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
#define GPIO_WP GPIO(7, A, 6)
|
||||
#define GPIO_LID GPIO(0, A, 6)
|
||||
#define GPIO_POWER GPIO(0, A, 5)
|
||||
#define GPIO_RECOVERY GPIO(0, B, 1)
|
||||
#define GPIO_ECINRW GPIO(0, A, 7)
|
||||
#define GPIO_ECIRQ GPIO(7, A, 7)
|
||||
|
||||
void setup_chromeos_gpios(void)
|
||||
{
|
||||
gpio_input(GPIO_WP);
|
||||
gpio_input_pullup(GPIO_LID);
|
||||
gpio_input(GPIO_POWER);
|
||||
gpio_input_pullup(GPIO_RECOVERY);
|
||||
gpio_input(GPIO_ECIRQ);
|
||||
}
|
||||
|
||||
void fill_lb_gpios(struct lb_gpios *gpios)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
/* Write Protect: active low */
|
||||
gpios->gpios[count].port = GPIO_WP.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = gpio_get(GPIO_WP);
|
||||
strncpy((char *)gpios->gpios[count].name, "write protect",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Recovery: active low */
|
||||
gpios->gpios[count].port = GPIO_RECOVERY.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = get_recovery_mode_switch();
|
||||
strncpy((char *)gpios->gpios[count].name, "recovery",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Lid: active high */
|
||||
gpios->gpios[count].port = GPIO_LID.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "lid", GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Power:GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_POWER.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "power",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Developer: GPIO active high */
|
||||
gpios->gpios[count].port = -1;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = get_developer_mode_switch();
|
||||
strncpy((char *)gpios->gpios[count].name, "developer",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* EC in RW: GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_ECINRW.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "EC in RW",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* EC interrupt: GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_ECIRQ.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "EC interrupt",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Reset: GPIO active high (output) */
|
||||
gpios->gpios[count].port = GPIO_RESET.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "reset",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Backlight: GPIO active high (output) */
|
||||
gpios->gpios[count].port = GPIO_BACKLIGHT.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "backlight",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
gpios->size = sizeof(*gpios) + (count * sizeof(struct lb_gpio));
|
||||
gpios->count = count;
|
||||
|
||||
printk(BIOS_ERR, "Added %d GPIOS size %d\n", count, gpios->size);
|
||||
}
|
||||
|
||||
int get_developer_mode_switch(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_recovery_mode_switch(void)
|
||||
{
|
||||
uint32_t ec_events;
|
||||
|
||||
/* The GPIO is active low. */
|
||||
if (!gpio_get(GPIO_RECOVERY))
|
||||
return 1;
|
||||
|
||||
ec_events = google_chromeec_get_events_b();
|
||||
return !!(ec_events &
|
||||
EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY));
|
||||
}
|
||||
|
||||
int get_write_protect_state(void)
|
||||
{
|
||||
return !gpio_get(GPIO_WP);
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
|
||||
# TODO fill with Versatile Express board data in QEMU.
|
||||
chip soc/rockchip/rk3288
|
||||
device cpu_cluster 0 on end
|
||||
register "vop_id" = "1"
|
||||
register "vop_mode" = "VOP_MODE_EDP"
|
||||
register "framebuffer_bits_per_pixel" = "16"
|
||||
end
|
|
@ -1,167 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/cache.h>
|
||||
#include <arch/io.h>
|
||||
#include <boot/coreboot_tables.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <device/device.h>
|
||||
#include <device/i2c.h>
|
||||
#include <edid.h>
|
||||
#include <elog.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/display.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/soc.h>
|
||||
#include <soc/pmu.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/spi.h>
|
||||
#include <soc/i2c.h>
|
||||
#include <symbols.h>
|
||||
#include <vbe.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
static void configure_usb(void)
|
||||
{
|
||||
gpio_output(GPIO(0, B, 3), 1); /* HOST1_PWR_EN */
|
||||
gpio_output(GPIO(0, B, 4), 1); /* USBOTG_PWREN_H */
|
||||
gpio_output(GPIO(7, C, 5), 1); /* 5V_DRV */
|
||||
}
|
||||
|
||||
static void configure_sdmmc(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_sdmmc0, IOMUX_SDMMC0);
|
||||
|
||||
/* use sdmmc0 io, disable JTAG function */
|
||||
write32(&rk3288_grf->soc_con0, RK_CLRBITS(1 << 12));
|
||||
|
||||
/* Note: these power rail definitions are copied in romstage.c */
|
||||
rk808_configure_ldo(4, 3300); /* VCCIO_SD */
|
||||
rk808_configure_ldo(5, 3300); /* VCC33_SD */
|
||||
|
||||
gpio_input(GPIO(7, A, 5)); /* SD_DET */
|
||||
}
|
||||
|
||||
static void configure_emmc(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_emmcdata, IOMUX_EMMCDATA);
|
||||
write32(&rk3288_grf->iomux_emmcpwren, IOMUX_EMMCPWREN);
|
||||
write32(&rk3288_grf->iomux_emmccmd, IOMUX_EMMCCMD);
|
||||
|
||||
gpio_output(GPIO(2, B, 1), 1); /* EMMC_RST_L */
|
||||
}
|
||||
|
||||
static void configure_codec(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_i2c2, IOMUX_I2C2); /* CODEC I2C */
|
||||
i2c_init(2, 400*KHz); /* CODEC I2C */
|
||||
|
||||
write32(&rk3288_grf->iomux_i2s, IOMUX_I2S);
|
||||
write32(&rk3288_grf->iomux_i2sclk, IOMUX_I2SCLK);
|
||||
|
||||
rk808_configure_ldo(6, 1800); /* VCC18_CODEC */
|
||||
|
||||
/* AUDIO IO domain 1.8V voltage selection */
|
||||
write32(&rk3288_grf->io_vsel, RK_SETBITS(1 << 6));
|
||||
rkclk_configure_i2s(12288000);
|
||||
}
|
||||
|
||||
static void configure_vop(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_lcdc, IOMUX_LCDC);
|
||||
|
||||
/* lcdc(vop) iodomain select 1.8V */
|
||||
write32(&rk3288_grf->io_vsel, RK_SETBITS(1 << 0));
|
||||
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
rk808_configure_switch(2, 1); /* VCC18_LCD */
|
||||
rk808_configure_ldo(7, 2500); /* VCC10_LCD_PWREN_H */
|
||||
rk808_configure_switch(1, 1); /* VCC33_LCD */
|
||||
break;
|
||||
default:
|
||||
gpio_output(GPIO(2, B, 5), 1); /* AVDD_1V8_DISP_EN */
|
||||
rk808_configure_ldo(7, 2500); /* VCC10_LCD_PWREN_H */
|
||||
gpio_output(GPIO(7, B, 6), 1); /* LCD_EN */
|
||||
rk808_configure_switch(1, 1); /* VCC33_LCD */
|
||||
|
||||
/* enable edp HPD */
|
||||
gpio_input_pulldown(GPIO(7, B, 3));
|
||||
write32(&rk3288_grf->iomux_edp_hotplug, IOMUX_EDP_HOTPLUG);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void mainboard_init(device_t dev)
|
||||
{
|
||||
gpio_output(GPIO_RESET, 0);
|
||||
|
||||
configure_usb();
|
||||
configure_sdmmc();
|
||||
configure_emmc();
|
||||
configure_codec();
|
||||
configure_vop();
|
||||
|
||||
elog_init();
|
||||
elog_add_watchdog_reset();
|
||||
elog_add_boot_reason();
|
||||
}
|
||||
|
||||
static void mainboard_enable(device_t dev)
|
||||
{
|
||||
dev->ops->init = &mainboard_init;
|
||||
}
|
||||
|
||||
struct chip_operations mainboard_ops = {
|
||||
.enable_dev = mainboard_enable,
|
||||
};
|
||||
|
||||
void lb_board(struct lb_header *header)
|
||||
{
|
||||
struct lb_range *dma;
|
||||
|
||||
dma = (struct lb_range *)lb_new_record(header);
|
||||
dma->tag = LB_TAB_DMA;
|
||||
dma->size = sizeof(*dma);
|
||||
dma->range_start = (uintptr_t)_dma_coherent;
|
||||
dma->range_size = _dma_coherent_size;
|
||||
}
|
||||
|
||||
void mainboard_power_on_backlight(void)
|
||||
{
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
gpio_output(GPIO(7, A, 0), 0); /* BL_EN */
|
||||
gpio_output(GPIO(7, A, 2), 1); /* LCD_BL */
|
||||
mdelay(10);
|
||||
gpio_output(GPIO(7, A, 0), 1); /* BL_EN */
|
||||
break;
|
||||
default:
|
||||
gpio_output(GPIO(2, B, 4), 1); /* BL_PWR_EN */
|
||||
mdelay(20);
|
||||
gpio_output(GPIO(7, A, 0), 1); /* LCD_BL */
|
||||
mdelay(10);
|
||||
gpio_output(GPIO_BACKLIGHT, 1); /* BL_EN */
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
#include <soc/memlayout.ld>
|
|
@ -1,30 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <gpio.h>
|
||||
#include <reset.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
void hard_reset(void)
|
||||
{
|
||||
gpio_output(GPIO_RESET, 1);
|
||||
while (1);
|
||||
}
|
|
@ -1,117 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/cache.h>
|
||||
#include <arch/exception.h>
|
||||
#include <arch/stages.h>
|
||||
#include <armv7.h>
|
||||
#include <assert.h>
|
||||
#include <cbfs.h>
|
||||
#include <cbmem.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <program_loading.h>
|
||||
#include <soc/sdram.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/pwm.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/tsadc.h>
|
||||
#include <stdlib.h>
|
||||
#include <symbols.h>
|
||||
#include <timestamp.h>
|
||||
#include <types.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
static void regulate_vdd_log(unsigned int mv)
|
||||
{
|
||||
unsigned int duty_ns;
|
||||
const u32 period_ns = 2000; /* pwm period: 2000ns */
|
||||
const u32 max_regulator_mv = 1350; /* 1.35V */
|
||||
const u32 min_regulator_mv = 870; /* 0.87V */
|
||||
|
||||
write32(&rk3288_grf->iomux_pwm1, IOMUX_PWM1);
|
||||
|
||||
assert((mv >= min_regulator_mv) && (mv <= max_regulator_mv));
|
||||
|
||||
duty_ns = (max_regulator_mv - mv) * period_ns /
|
||||
(max_regulator_mv - min_regulator_mv);
|
||||
|
||||
pwm_init(1, period_ns, duty_ns);
|
||||
}
|
||||
|
||||
static void configure_l2ctlr(void)
|
||||
{
|
||||
uint32_t l2ctlr;
|
||||
|
||||
l2ctlr = read_l2ctlr();
|
||||
l2ctlr &= 0xfffc0000; /* clear bit0~bit17 */
|
||||
|
||||
/*
|
||||
* Data RAM write latency: 2 cycles
|
||||
* Data RAM read latency: 2 cycles
|
||||
* Data RAM setup latency: 1 cycle
|
||||
* Tag RAM write latency: 1 cycle
|
||||
* Tag RAM read latency: 1 cycle
|
||||
* Tag RAM setup latency: 1 cycle
|
||||
*/
|
||||
l2ctlr |= (1 << 3 | 1 << 0);
|
||||
write_l2ctlr(l2ctlr);
|
||||
}
|
||||
|
||||
static void sdmmc_power_off(void)
|
||||
{
|
||||
rk808_configure_ldo(4, 0); /* VCCIO_SD */
|
||||
rk808_configure_ldo(5, 0); /* VCC33_SD */
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
timestamp_add_now(TS_START_ROMSTAGE);
|
||||
|
||||
console_init();
|
||||
configure_l2ctlr();
|
||||
tsadc_init();
|
||||
|
||||
/* Need to power cycle SD card to ensure it is properly reset. */
|
||||
sdmmc_power_off();
|
||||
|
||||
/* vdd_log 1200mv is enough for ddr run 666Mhz */
|
||||
regulate_vdd_log(1200);
|
||||
|
||||
timestamp_add_now(TS_BEFORE_INITRAM);
|
||||
|
||||
sdram_init(get_sdram_config());
|
||||
|
||||
timestamp_add_now(TS_AFTER_INITRAM);
|
||||
|
||||
/* Now that DRAM is up, add mappings for it and DMA coherency buffer. */
|
||||
mmu_config_range((uintptr_t)_dram/MiB,
|
||||
sdram_size_mb(), DCACHE_WRITEBACK);
|
||||
mmu_config_range((uintptr_t)_dma_coherent/MiB,
|
||||
_dma_coherent_size/MiB, DCACHE_OFF);
|
||||
|
||||
cbmem_initialize_empty();
|
||||
|
||||
timestamp_add_now(TS_END_ROMSTAGE);
|
||||
|
||||
run_ramstage();
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
#include <arch/io.h>
|
||||
#include <boardid.h>
|
||||
#include <console/console.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/sdram.h>
|
||||
#include <string.h>
|
||||
#include <types.h>
|
||||
|
||||
static struct rk3288_sdram_params sdram_configs[] = {
|
||||
#include "sdram_inf/sdram-lpddr3-samsung-2GB.inc" /* ram_code = 0000 */
|
||||
#include "sdram_inf/sdram-lpddr3-hynix-2GB.inc" /* ram_code = 0001 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 0010 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 0011 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-2GB.inc" /* ram_code = 0100 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-2GB.inc" /* ram_code = 0101 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-2GB.inc" /* ram_code = 0110 */
|
||||
#include "sdram_inf/sdram-lpddr3-elpida-2GB.inc" /* ram_code = 0111 */
|
||||
#include "sdram_inf/sdram-lpddr3-samsung-4GB.inc" /* ram_code = 1000 */
|
||||
#include "sdram_inf/sdram-lpddr3-hynix-4GB.inc" /* ram_code = 1001 */
|
||||
#include "sdram_inf/sdram-ddr3-nanya-2GB.inc" /* ram_code = 1010 */
|
||||
#include "sdram_inf/sdram-lpddr3-elpida-4GB.inc" /* ram_code = 1011 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 1100 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-2GB.inc" /* ram_code = 1101 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-4GB.inc" /* ram_code = 1110 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-4GB.inc" /* ram_code = 1111 */
|
||||
};
|
||||
|
||||
const struct rk3288_sdram_params *get_sdram_config()
|
||||
{
|
||||
u32 ramcode = ram_code();
|
||||
|
||||
if (ramcode >= ARRAY_SIZE(sdram_configs)
|
||||
|| sdram_configs[ramcode].dramtype == UNUSED)
|
||||
die("Invalid RAMCODE.");
|
||||
return &sdram_configs[ramcode];
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Hynic H5TC4G63CFR(0101b) or H5TC4G63AFR(1101b) chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Hynix H5TC8G63xxx chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Nanya NT5CC256M16DP chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two Samsung K4B4G1646D-BYK0 chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Samsung K4B8G1646Q chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two ELPIDA F8132A3MA-GD-F chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 2,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two ELPIDA FA232A2MA-GC-F chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 6,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 2 Hynix H9CCNNN8GTMLAR chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 14,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,77 +0,0 @@
|
|||
{
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two Samsung K4E8E304ED-EGCE000 chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 2,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,77 +0,0 @@
|
|||
{
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 6,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
.dramtype= UNUSED
|
||||
},
|
|
@ -1,85 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
|
||||
if BOARD_GOOGLE_VEYRON_MINNIE
|
||||
|
||||
config BOARD_SPECIFIC_OPTIONS # dummy
|
||||
def_bool y
|
||||
select BOARD_ID_AUTO
|
||||
select BOARD_ROMSIZE_KB_4096
|
||||
select COMMON_CBFS_SPI_WRAPPER
|
||||
select EC_GOOGLE_CHROMEEC
|
||||
select EC_GOOGLE_CHROMEEC_SPI
|
||||
select RAM_CODE_SUPPORT
|
||||
select SOC_ROCKCHIP_RK3288
|
||||
select MAINBOARD_HAS_NATIVE_VGA_INIT
|
||||
select MAINBOARD_DO_NATIVE_VGA_INIT
|
||||
select MAINBOARD_HAS_CHROMEOS
|
||||
select HAVE_HARD_RESET
|
||||
select SPI_FLASH
|
||||
select SPI_FLASH_GIGADEVICE
|
||||
select SPI_FLASH_WINBOND
|
||||
|
||||
config CHROMEOS
|
||||
select CHROMEOS_VBNV_EC
|
||||
select EC_SOFTWARE_SYNC
|
||||
select VIRTUAL_DEV_SWITCH
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
default google/veyron_minnie
|
||||
|
||||
config MAINBOARD_PART_NUMBER
|
||||
string
|
||||
default "Veyron_Minnie"
|
||||
|
||||
config MAINBOARD_VENDOR
|
||||
string
|
||||
default "Google"
|
||||
|
||||
config EC_GOOGLE_CHROMEEC_SPI_BUS
|
||||
hex
|
||||
default 0
|
||||
|
||||
config EC_GOOGLE_CHROMEEC_SPI_WAKEUP_DELAY_US
|
||||
int
|
||||
default 100
|
||||
|
||||
config BOOT_MEDIA_SPI_BUS
|
||||
int
|
||||
default 2
|
||||
|
||||
config DRIVER_TPM_I2C_BUS
|
||||
hex
|
||||
default 0x1
|
||||
|
||||
config DRIVER_TPM_I2C_ADDR
|
||||
hex
|
||||
default 0x20
|
||||
|
||||
config CONSOLE_SERIAL_UART_ADDRESS
|
||||
hex
|
||||
depends on DRIVERS_UART
|
||||
default 0xFF690000
|
||||
|
||||
config PMIC_BUS
|
||||
int
|
||||
default 0
|
||||
|
||||
endif # BOARD_GOOGLE_VEYRON_MINNIE
|
|
@ -1,2 +0,0 @@
|
|||
config BOARD_GOOGLE_VEYRON_MINNIE
|
||||
bool "Veyron_Minnie"
|
|
@ -1,42 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
bootblock-y += bootblock.c
|
||||
bootblock-y += boardid.c
|
||||
bootblock-y += chromeos.c
|
||||
bootblock-y += reset.c
|
||||
|
||||
verstage-y += boardid.c
|
||||
verstage-y += chromeos.c
|
||||
verstage-y += reset.c
|
||||
|
||||
romstage-y += boardid.c
|
||||
romstage-y += chromeos.c
|
||||
romstage-y += romstage.c
|
||||
romstage-y += sdram_configs.c
|
||||
romstage-y += reset.c
|
||||
|
||||
ramstage-y += boardid.c
|
||||
ramstage-y += chromeos.c
|
||||
ramstage-y += mainboard.c
|
||||
ramstage-y += reset.c
|
||||
|
||||
bootblock-y += memlayout.ld
|
||||
verstage-y += memlayout.ld
|
||||
romstage-y += memlayout.ld
|
||||
ramstage-y += memlayout.ld
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __MAINBOARD_GOOGLE_VEYRON_MINNIE_BOARD_H
|
||||
#define __MAINBOARD_GOOGLE_VEYRON_MINNIE_BOARD_H
|
||||
|
||||
#include <boardid.h>
|
||||
#include <gpio.h>
|
||||
|
||||
#define GPIO_BACKLIGHT GPIO(7, A, 2)
|
||||
#define GPIO_RESET GPIO(0, B, 5)
|
||||
|
||||
void setup_chromeos_gpios(void);
|
||||
|
||||
#endif /* __MAINBOARD_GOOGLE_VEYRON_MINNIE_BOARD_H */
|
|
@ -1 +0,0 @@
|
|||
Category: laptop
|
|
@ -1,49 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <boardid.h>
|
||||
#include <console/console.h>
|
||||
#include <gpio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
uint8_t board_id(void)
|
||||
{
|
||||
static int id = -1;
|
||||
static gpio_t pins[] = {[3] = GPIO(2, A, 7), [2] = GPIO(2, A, 2),
|
||||
[1] = GPIO(2, A, 1), [0] = GPIO(2, A, 0)}; /* GPIO2_A0 is LSB */
|
||||
|
||||
if (id < 0) {
|
||||
id = gpio_base2_value(pins, ARRAY_SIZE(pins));
|
||||
printk(BIOS_SPEW, "Board ID: %d.\n", id);
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
uint32_t ram_code(void)
|
||||
{
|
||||
uint32_t code;
|
||||
static gpio_t pins[] = {[3] = GPIO(8, A, 3), [2] = GPIO(8, A, 2),
|
||||
[1] = GPIO(8, A, 1), [0] = GPIO(8, A, 0)}; /* GPIO8_A0 is LSB */
|
||||
|
||||
code = gpio_base2_value(pins, ARRAY_SIZE(pins));
|
||||
printk(BIOS_SPEW, "RAM Config: %u.\n", code);
|
||||
|
||||
return code;
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <assert.h>
|
||||
#include <bootblock_common.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <reset.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/i2c.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/pmu.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/spi.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
void bootblock_mainboard_early_init()
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DRIVERS_UART)) {
|
||||
assert(CONFIG_CONSOLE_SERIAL_UART_ADDRESS == UART2_BASE);
|
||||
write32(&rk3288_grf->iomux_uart2, IOMUX_UART2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void bootblock_mainboard_init(void)
|
||||
{
|
||||
if (rkclk_was_watchdog_reset())
|
||||
reboot_from_watchdog();
|
||||
|
||||
/* Up VDD_CPU (BUCK1) to 1.4V to support max CPU frequency (1.8GHz). */
|
||||
setbits_le32(&rk3288_pmu->iomux_i2c0scl, IOMUX_I2C0SCL);
|
||||
setbits_le32(&rk3288_pmu->iomux_i2c0sda, IOMUX_I2C0SDA);
|
||||
assert(CONFIG_PMIC_BUS == 0); /* must correspond with IOMUX */
|
||||
i2c_init(CONFIG_PMIC_BUS, 400*KHz);
|
||||
|
||||
/* Slowly raise to max CPU voltage to prevent overshoot */
|
||||
rk808_configure_buck(1, 1200);
|
||||
udelay(175);/* Must wait for voltage to stabilize,2mV/us */
|
||||
rk808_configure_buck(1, 1400);
|
||||
udelay(100);/* Must wait for voltage to stabilize,2mV/us */
|
||||
rkclk_configure_cpu();
|
||||
|
||||
/* i2c1 for tpm */
|
||||
write32(&rk3288_grf->iomux_i2c1, IOMUX_I2C1);
|
||||
i2c_init(1, 400*KHz);
|
||||
|
||||
/* spi2 for firmware ROM */
|
||||
write32(&rk3288_grf->iomux_spi2csclk, IOMUX_SPI2_CSCLK);
|
||||
write32(&rk3288_grf->iomux_spi2txrx, IOMUX_SPI2_TXRX);
|
||||
rockchip_spi_init(CONFIG_BOOT_MEDIA_SPI_BUS, 24750*KHz);
|
||||
|
||||
/* spi0 for chrome ec */
|
||||
write32(&rk3288_grf->iomux_spi0, IOMUX_SPI0);
|
||||
rockchip_spi_init(CONFIG_EC_GOOGLE_CHROMEEC_SPI_BUS, 8250*KHz);
|
||||
|
||||
setup_chromeos_gpios();
|
||||
}
|
|
@ -1,148 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <boot/coreboot_tables.h>
|
||||
#include <console/console.h>
|
||||
#include <ec/google/chromeec/ec.h>
|
||||
#include <ec/google/chromeec/ec_commands.h>
|
||||
#include <gpio.h>
|
||||
#include <string.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
#define GPIO_WP GPIO(7, A, 6)
|
||||
#define GPIO_LID GPIO(0, A, 6)
|
||||
#define GPIO_POWER GPIO(0, A, 5)
|
||||
#define GPIO_RECOVERY GPIO(0, B, 1)
|
||||
#define GPIO_ECINRW GPIO(0, A, 7)
|
||||
#define GPIO_ECIRQ GPIO(7, A, 7)
|
||||
|
||||
void setup_chromeos_gpios(void)
|
||||
{
|
||||
gpio_input(GPIO_WP);
|
||||
gpio_input_pullup(GPIO_LID);
|
||||
gpio_input(GPIO_POWER);
|
||||
gpio_input_pullup(GPIO_RECOVERY);
|
||||
gpio_input(GPIO_ECIRQ);
|
||||
}
|
||||
|
||||
void fill_lb_gpios(struct lb_gpios *gpios)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
/* Write Protect: active low */
|
||||
gpios->gpios[count].port = GPIO_WP.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = gpio_get(GPIO_WP);
|
||||
strncpy((char *)gpios->gpios[count].name, "write protect",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Recovery: active low */
|
||||
gpios->gpios[count].port = GPIO_RECOVERY.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = get_recovery_mode_switch();
|
||||
strncpy((char *)gpios->gpios[count].name, "recovery",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Lid: active high */
|
||||
gpios->gpios[count].port = GPIO_LID.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "lid", GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Power:GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_POWER.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "power",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Developer: GPIO active high */
|
||||
gpios->gpios[count].port = -1;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = get_developer_mode_switch();
|
||||
strncpy((char *)gpios->gpios[count].name, "developer",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* EC in RW: GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_ECINRW.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "EC in RW",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* EC interrupt: GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_ECIRQ.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "EC interrupt",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Reset: GPIO active high (output) */
|
||||
gpios->gpios[count].port = GPIO_RESET.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "reset",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Backlight: GPIO active high (output) */
|
||||
gpios->gpios[count].port = GPIO_BACKLIGHT.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "backlight",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
gpios->size = sizeof(*gpios) + (count * sizeof(struct lb_gpio));
|
||||
gpios->count = count;
|
||||
|
||||
printk(BIOS_ERR, "Added %d GPIOS size %d\n", count, gpios->size);
|
||||
}
|
||||
|
||||
int get_developer_mode_switch(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_recovery_mode_switch(void)
|
||||
{
|
||||
uint32_t ec_events;
|
||||
|
||||
/* The GPIO is active low. */
|
||||
if (!gpio_get(GPIO_RECOVERY))
|
||||
return 1;
|
||||
|
||||
ec_events = google_chromeec_get_events_b();
|
||||
return !!(ec_events &
|
||||
EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY));
|
||||
}
|
||||
|
||||
int get_write_protect_state(void)
|
||||
{
|
||||
return !gpio_get(GPIO_WP);
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
|
||||
# TODO fill with Versatile Express board data in QEMU.
|
||||
chip soc/rockchip/rk3288
|
||||
device cpu_cluster 0 on end
|
||||
register "vop_id" = "1"
|
||||
register "vop_mode" = "VOP_MODE_EDP"
|
||||
register "framebuffer_bits_per_pixel" = "16"
|
||||
end
|
|
@ -1 +0,0 @@
|
|||
#include <soc/memlayout.ld>
|
|
@ -1,30 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <gpio.h>
|
||||
#include <reset.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
void hard_reset(void)
|
||||
{
|
||||
gpio_output(GPIO_RESET, 1);
|
||||
while (1);
|
||||
}
|
|
@ -1,118 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/cache.h>
|
||||
#include <arch/exception.h>
|
||||
#include <arch/io.h>
|
||||
#include <arch/stages.h>
|
||||
#include <armv7.h>
|
||||
#include <assert.h>
|
||||
#include <cbfs.h>
|
||||
#include <cbmem.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <program_loading.h>
|
||||
#include <soc/sdram.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/pwm.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/tsadc.h>
|
||||
#include <stdlib.h>
|
||||
#include <symbols.h>
|
||||
#include <timestamp.h>
|
||||
#include <types.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
static void regulate_vdd_log(unsigned int mv)
|
||||
{
|
||||
unsigned int duty_ns;
|
||||
const u32 period_ns = 2000; /* pwm period: 2000ns */
|
||||
const u32 max_regulator_mv = 1350; /* 1.35V */
|
||||
const u32 min_regulator_mv = 870; /* 0.87V */
|
||||
|
||||
write32(&rk3288_grf->iomux_pwm1, IOMUX_PWM1);
|
||||
|
||||
assert((mv >= min_regulator_mv) && (mv <= max_regulator_mv));
|
||||
|
||||
duty_ns = (max_regulator_mv - mv) * period_ns /
|
||||
(max_regulator_mv - min_regulator_mv);
|
||||
|
||||
pwm_init(1, period_ns, duty_ns);
|
||||
}
|
||||
|
||||
static void configure_l2ctlr(void)
|
||||
{
|
||||
uint32_t l2ctlr;
|
||||
|
||||
l2ctlr = read_l2ctlr();
|
||||
l2ctlr &= 0xfffc0000; /* clear bit0~bit17 */
|
||||
|
||||
/*
|
||||
* Data RAM write latency: 2 cycles
|
||||
* Data RAM read latency: 2 cycles
|
||||
* Data RAM setup latency: 1 cycle
|
||||
* Tag RAM write latency: 1 cycle
|
||||
* Tag RAM read latency: 1 cycle
|
||||
* Tag RAM setup latency: 1 cycle
|
||||
*/
|
||||
l2ctlr |= (1 << 3 | 1 << 0);
|
||||
write_l2ctlr(l2ctlr);
|
||||
}
|
||||
|
||||
static void sdmmc_power_off(void)
|
||||
{
|
||||
rk808_configure_ldo(4, 0); /* VCCIO_SD */
|
||||
rk808_configure_ldo(5, 0); /* VCC33_SD */
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
timestamp_add_now(TS_START_ROMSTAGE);
|
||||
|
||||
console_init();
|
||||
configure_l2ctlr();
|
||||
tsadc_init();
|
||||
|
||||
/* Need to power cycle SD card to ensure it is properly reset. */
|
||||
sdmmc_power_off();
|
||||
|
||||
/* vdd_log 1200mv is enough for ddr run 666Mhz */
|
||||
regulate_vdd_log(1200);
|
||||
|
||||
timestamp_add_now(TS_BEFORE_INITRAM);
|
||||
|
||||
sdram_init(get_sdram_config());
|
||||
|
||||
timestamp_add_now(TS_AFTER_INITRAM);
|
||||
|
||||
/* Now that DRAM is up, add mappings for it and DMA coherency buffer. */
|
||||
mmu_config_range((uintptr_t)_dram/MiB,
|
||||
sdram_size_mb(), DCACHE_WRITEBACK);
|
||||
mmu_config_range((uintptr_t)_dma_coherent/MiB,
|
||||
_dma_coherent_size/MiB, DCACHE_OFF);
|
||||
|
||||
cbmem_initialize_empty();
|
||||
|
||||
timestamp_add_now(TS_END_ROMSTAGE);
|
||||
|
||||
run_ramstage();
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
#include <arch/io.h>
|
||||
#include <boardid.h>
|
||||
#include <console/console.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/sdram.h>
|
||||
#include <string.h>
|
||||
#include <types.h>
|
||||
|
||||
static struct rk3288_sdram_params sdram_configs[] = {
|
||||
#include "sdram_inf/sdram-lpddr3-samsung-2GB.inc" /* ram_code = 0000 */
|
||||
#include "sdram_inf/sdram-lpddr3-hynix-2GB.inc" /* ram_code = 0001 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 0010 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 0011 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-2GB.inc" /* ram_code = 0100 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-2GB.inc" /* ram_code = 0101 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-2GB.inc" /* ram_code = 0110 */
|
||||
#include "sdram_inf/sdram-lpddr3-elpida-2GB.inc" /* ram_code = 0111 */
|
||||
#include "sdram_inf/sdram-lpddr3-samsung-4GB.inc" /* ram_code = 1000 */
|
||||
#include "sdram_inf/sdram-lpddr3-hynix-4GB.inc" /* ram_code = 1001 */
|
||||
#include "sdram_inf/sdram-ddr3-nanya-2GB.inc" /* ram_code = 1010 */
|
||||
#include "sdram_inf/sdram-lpddr3-elpida-4GB.inc" /* ram_code = 1011 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 1100 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-2GB.inc" /* ram_code = 1101 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-4GB.inc" /* ram_code = 1110 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-4GB.inc" /* ram_code = 1111 */
|
||||
};
|
||||
|
||||
const struct rk3288_sdram_params *get_sdram_config()
|
||||
{
|
||||
u32 ramcode = ram_code();
|
||||
|
||||
if (ramcode >= ARRAY_SIZE(sdram_configs)
|
||||
|| sdram_configs[ramcode].dramtype == UNUSED)
|
||||
die("Invalid RAMCODE.");
|
||||
return &sdram_configs[ramcode];
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Hynic H5TC4G63CFR(0101b) or H5TC4G63AFR(1101b) chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Hynix H5TC8G63xxx chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Nanya NT5CC256M16DP chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two Samsung K4B4G1646D-BYK0 chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Samsung K4B8G1646Q chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two ELPIDA F8132A3MA-GD-F chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 2,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two ELPIDA FA232A2MA-GC-F chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 6,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 2 Hynix H9CCNNN8GTMLAR chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 14,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,77 +0,0 @@
|
|||
{
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two Samsung K4E8E304ED-EGCE000 chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 2,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,77 +0,0 @@
|
|||
{
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 6,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
.dramtype= UNUSED
|
||||
},
|
|
@ -1,85 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
|
||||
if BOARD_GOOGLE_VEYRON_PINKY
|
||||
|
||||
config BOARD_SPECIFIC_OPTIONS # dummy
|
||||
def_bool y
|
||||
select BOARD_ID_AUTO
|
||||
select COMMON_CBFS_SPI_WRAPPER
|
||||
select EC_GOOGLE_CHROMEEC
|
||||
select EC_GOOGLE_CHROMEEC_SPI
|
||||
select RAM_CODE_SUPPORT
|
||||
select SOC_ROCKCHIP_RK3288
|
||||
select MAINBOARD_HAS_NATIVE_VGA_INIT
|
||||
select MAINBOARD_DO_NATIVE_VGA_INIT
|
||||
select MAINBOARD_HAS_CHROMEOS
|
||||
select BOARD_ROMSIZE_KB_4096
|
||||
select HAVE_HARD_RESET
|
||||
select SPI_FLASH
|
||||
select SPI_FLASH_GIGADEVICE
|
||||
select SPI_FLASH_WINBOND
|
||||
|
||||
config CHROMEOS
|
||||
select CHROMEOS_VBNV_EC
|
||||
select EC_SOFTWARE_SYNC
|
||||
select VIRTUAL_DEV_SWITCH
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
default google/veyron_pinky
|
||||
|
||||
config MAINBOARD_PART_NUMBER
|
||||
string
|
||||
default "Veyron_Pinky"
|
||||
|
||||
config MAINBOARD_VENDOR
|
||||
string
|
||||
default "Google"
|
||||
|
||||
config EC_GOOGLE_CHROMEEC_SPI_BUS
|
||||
hex
|
||||
default 0
|
||||
|
||||
config EC_GOOGLE_CHROMEEC_SPI_WAKEUP_DELAY_US
|
||||
int
|
||||
default 100
|
||||
|
||||
config BOOT_MEDIA_SPI_BUS
|
||||
int
|
||||
default 2
|
||||
|
||||
config DRIVER_TPM_I2C_BUS
|
||||
hex
|
||||
default 0x1
|
||||
|
||||
config DRIVER_TPM_I2C_ADDR
|
||||
hex
|
||||
default 0x20
|
||||
|
||||
config CONSOLE_SERIAL_UART_ADDRESS
|
||||
hex
|
||||
depends on DRIVERS_UART
|
||||
default 0xFF690000
|
||||
|
||||
config PMIC_BUS
|
||||
int
|
||||
default 0
|
||||
|
||||
endif # BOARD_GOOGLE_VEYRON_PINKY
|
|
@ -1,2 +0,0 @@
|
|||
config BOARD_GOOGLE_VEYRON_PINKY
|
||||
bool "Veyron_Pinky"
|
|
@ -1,42 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
bootblock-y += bootblock.c
|
||||
bootblock-y += boardid.c
|
||||
bootblock-y += chromeos.c
|
||||
bootblock-y += reset.c
|
||||
|
||||
verstage-y += boardid.c
|
||||
verstage-y += chromeos.c
|
||||
verstage-y += reset.c
|
||||
|
||||
romstage-y += boardid.c
|
||||
romstage-y += romstage.c
|
||||
romstage-y += chromeos.c
|
||||
romstage-y += sdram_configs.c
|
||||
romstage-y += reset.c
|
||||
|
||||
ramstage-y += boardid.c
|
||||
ramstage-y += chromeos.c
|
||||
ramstage-y += mainboard.c
|
||||
ramstage-y += reset.c
|
||||
|
||||
bootblock-y += memlayout.ld
|
||||
verstage-y += memlayout.ld
|
||||
romstage-y += memlayout.ld
|
||||
ramstage-y += memlayout.ld
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __MAINBOARD_GOOGLE_VEYRON_PINKY_BOARD_H
|
||||
#define __MAINBOARD_GOOGLE_VEYRON_PINKY_BOARD_H
|
||||
|
||||
#include <boardid.h>
|
||||
#include <gpio.h>
|
||||
|
||||
#define GPIO_BACKLIGHT GPIO(7, A, 2)
|
||||
#define GPIO_RESET (board_id() > 0 ? GPIO(0, B, 5) : GPIO(0, B, 2))
|
||||
|
||||
void setup_chromeos_gpios(void);
|
||||
|
||||
#endif /* __MAINBOARD_GOOGLE_VEYRON_PINKY_BOARD_H */
|
|
@ -1,49 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <boardid.h>
|
||||
#include <console/console.h>
|
||||
#include <gpio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
uint8_t board_id(void)
|
||||
{
|
||||
static int id = -1;
|
||||
static gpio_t pins[] = {[3] = GPIO(2, A, 7), [2] = GPIO(2, A, 2),
|
||||
[1] = GPIO(2, A, 1), [0] = GPIO(2, A, 0)}; /* GPIO2_A0 is LSB */
|
||||
|
||||
if (id < 0) {
|
||||
id = gpio_base2_value(pins, ARRAY_SIZE(pins));
|
||||
printk(BIOS_SPEW, "Board ID: %d.\n", id);
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
uint32_t ram_code(void)
|
||||
{
|
||||
uint32_t code;
|
||||
static gpio_t pins[] = {[3] = GPIO(8, A, 3), [2] = GPIO(8, A, 2),
|
||||
[1] = GPIO(8, A, 1), [0] = GPIO(8, A, 0)}; /* GPIO8_A0 is LSB */
|
||||
|
||||
code = gpio_base2_value(pins, ARRAY_SIZE(pins));
|
||||
printk(BIOS_SPEW, "RAM Config: %u.\n", code);
|
||||
|
||||
return code;
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <assert.h>
|
||||
#include <bootblock_common.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <reset.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/i2c.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/pmu.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/spi.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
void bootblock_mainboard_early_init()
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DRIVERS_UART)) {
|
||||
assert(CONFIG_CONSOLE_SERIAL_UART_ADDRESS == UART2_BASE);
|
||||
write32(&rk3288_grf->iomux_uart2, IOMUX_UART2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void bootblock_mainboard_init(void)
|
||||
{
|
||||
if (rkclk_was_watchdog_reset())
|
||||
reboot_from_watchdog();
|
||||
|
||||
/* Up VDD_CPU (BUCK1) to 1.4V to support max CPU frequency (1.8GHz). */
|
||||
setbits_le32(&rk3288_pmu->iomux_i2c0scl, IOMUX_I2C0SCL);
|
||||
setbits_le32(&rk3288_pmu->iomux_i2c0sda, IOMUX_I2C0SDA);
|
||||
assert(CONFIG_PMIC_BUS == 0); /* must correspond with IOMUX */
|
||||
i2c_init(CONFIG_PMIC_BUS, 400*KHz);
|
||||
|
||||
/* Slowly raise to max CPU voltage to prevent overshoot */
|
||||
rk808_configure_buck(1, 1200);
|
||||
udelay(175);/* Must wait for voltage to stabilize,2mV/us */
|
||||
rk808_configure_buck(1, 1400);
|
||||
udelay(100);/* Must wait for voltage to stabilize,2mV/us */
|
||||
rkclk_configure_cpu();
|
||||
|
||||
/* i2c1 for tpm */
|
||||
write32(&rk3288_grf->iomux_i2c1, IOMUX_I2C1);
|
||||
i2c_init(1, 400*KHz);
|
||||
|
||||
/* spi2 for firmware ROM */
|
||||
write32(&rk3288_grf->iomux_spi2csclk, IOMUX_SPI2_CSCLK);
|
||||
write32(&rk3288_grf->iomux_spi2txrx, IOMUX_SPI2_TXRX);
|
||||
rockchip_spi_init(CONFIG_BOOT_MEDIA_SPI_BUS, 24750*KHz);
|
||||
|
||||
/* spi0 for chrome ec */
|
||||
write32(&rk3288_grf->iomux_spi0, IOMUX_SPI0);
|
||||
rockchip_spi_init(CONFIG_EC_GOOGLE_CHROMEEC_SPI_BUS, 8250*KHz);
|
||||
|
||||
setup_chromeos_gpios();
|
||||
}
|
|
@ -1,149 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <boot/coreboot_tables.h>
|
||||
#include <console/console.h>
|
||||
#include <ec/google/chromeec/ec.h>
|
||||
#include <ec/google/chromeec/ec_commands.h>
|
||||
#include <gpio.h>
|
||||
#include <string.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
#define GPIO_WP GPIO(7, A, 6)
|
||||
#define GPIO_LID (board_id() > 0 ? GPIO(0, A, 6) : GPIO(7, B, 5))
|
||||
#define GPIO_POWER GPIO(0, A, 5)
|
||||
#define GPIO_RECOVERY GPIO(0, B, 1)
|
||||
#define GPIO_ECINRW GPIO(0, A, 7)
|
||||
#define GPIO_ECIRQ GPIO(7, A, 7)
|
||||
|
||||
void setup_chromeos_gpios(void)
|
||||
{
|
||||
gpio_input(GPIO_WP);
|
||||
gpio_input_pullup(GPIO_LID);
|
||||
gpio_input(GPIO_POWER);
|
||||
gpio_input_pullup(GPIO_RECOVERY);
|
||||
gpio_input(GPIO_ECIRQ);
|
||||
}
|
||||
|
||||
void fill_lb_gpios(struct lb_gpios *gpios)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
/* Write Protect: active low */
|
||||
gpios->gpios[count].port = GPIO_WP.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = gpio_get(GPIO_WP);
|
||||
strncpy((char *)gpios->gpios[count].name, "write protect",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Recovery: active low */
|
||||
gpios->gpios[count].port = GPIO_RECOVERY.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = get_recovery_mode_switch();
|
||||
strncpy((char *)gpios->gpios[count].name, "recovery",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Lid: active high */
|
||||
gpios->gpios[count].port = GPIO_LID.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "lid", GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Power:GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_POWER.raw;
|
||||
gpios->gpios[count].polarity = board_id() > 1 ? ACTIVE_LOW :
|
||||
ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "power",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Developer: GPIO active high */
|
||||
gpios->gpios[count].port = -1;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = get_developer_mode_switch();
|
||||
strncpy((char *)gpios->gpios[count].name, "developer",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* EC in RW: GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_ECINRW.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "EC in RW",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* EC interrupt: GPIO active high */
|
||||
gpios->gpios[count].port = GPIO_ECIRQ.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_LOW;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "EC interrupt",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Reset: GPIO active high (output) */
|
||||
gpios->gpios[count].port = GPIO_RESET.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "reset",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
/* Backlight: GPIO active high (output) */
|
||||
gpios->gpios[count].port = GPIO_BACKLIGHT.raw;
|
||||
gpios->gpios[count].polarity = ACTIVE_HIGH;
|
||||
gpios->gpios[count].value = -1;
|
||||
strncpy((char *)gpios->gpios[count].name, "backlight",
|
||||
GPIO_MAX_NAME_LENGTH);
|
||||
count++;
|
||||
|
||||
gpios->size = sizeof(*gpios) + (count * sizeof(struct lb_gpio));
|
||||
gpios->count = count;
|
||||
|
||||
printk(BIOS_ERR, "Added %d GPIOS size %d\n", count, gpios->size);
|
||||
}
|
||||
|
||||
int get_developer_mode_switch(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_recovery_mode_switch(void)
|
||||
{
|
||||
uint32_t ec_events;
|
||||
|
||||
/* The GPIO is active low. */
|
||||
if (!gpio_get(GPIO_RECOVERY))
|
||||
return 1;
|
||||
|
||||
ec_events = google_chromeec_get_events_b();
|
||||
return !!(ec_events &
|
||||
EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY));
|
||||
}
|
||||
|
||||
int get_write_protect_state(void)
|
||||
{
|
||||
return !gpio_get(GPIO_WP);
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright 2014 Rockchip Inc.
|
||||
##
|
||||
## 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
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc.
|
||||
##
|
||||
|
||||
# TODO fill with Versatile Express board data in QEMU.
|
||||
chip soc/rockchip/rk3288
|
||||
device cpu_cluster 0 on end
|
||||
register "vop_id" = "1"
|
||||
register "vop_mode" = "VOP_MODE_EDP"
|
||||
register "framebuffer_bits_per_pixel" = "16"
|
||||
end
|
|
@ -1,213 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/cache.h>
|
||||
#include <arch/io.h>
|
||||
#include <boot/coreboot_tables.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <device/device.h>
|
||||
#include <device/i2c.h>
|
||||
#include <edid.h>
|
||||
#include <elog.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/display.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/soc.h>
|
||||
#include <soc/pmu.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/spi.h>
|
||||
#include <soc/i2c.h>
|
||||
#include <symbols.h>
|
||||
#include <vbe.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
static void configure_usb(void)
|
||||
{
|
||||
gpio_output(GPIO(0, B, 3), 1); /* HOST1_PWR_EN */
|
||||
gpio_output(GPIO(0, B, 4), 1); /* USBOTG_PWREN_H */
|
||||
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
gpio_output(GPIO(7, B, 3), 1); /* 5V_DRV */
|
||||
break;
|
||||
case 1:
|
||||
break; /* 5V_DRV moved to EC in rev2 */
|
||||
default:
|
||||
gpio_output(GPIO(7, C, 5), 1); /* 5V_DRV, again */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void configure_sdmmc(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_sdmmc0, IOMUX_SDMMC0);
|
||||
|
||||
/* use sdmmc0 io, disable JTAG function */
|
||||
write32(&rk3288_grf->soc_con0, RK_CLRBITS(1 << 12));
|
||||
|
||||
/* Note: these power rail definitions are copied in romstage.c */
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
rk808_configure_ldo(8, 3300); /* VCCIO_SD */
|
||||
gpio_output(GPIO(7, C, 5), 1); /* SD_EN */
|
||||
break;
|
||||
default:
|
||||
rk808_configure_ldo(4, 3300); /* VCCIO_SD */
|
||||
rk808_configure_ldo(5, 3300); /* VCC33_SD */
|
||||
break;
|
||||
}
|
||||
|
||||
gpio_input(GPIO(7, A, 5)); /* SD_DET */
|
||||
}
|
||||
|
||||
static void configure_emmc(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_emmcdata, IOMUX_EMMCDATA);
|
||||
write32(&rk3288_grf->iomux_emmcpwren, IOMUX_EMMCPWREN);
|
||||
write32(&rk3288_grf->iomux_emmccmd, IOMUX_EMMCCMD);
|
||||
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
case 1:
|
||||
/*
|
||||
* Use a pullup instead of a drive since the output is 3.3V and
|
||||
* really should be 1.8V (oops). The external pulldown will help
|
||||
* bring the voltage down if we only drive with a pullup here.
|
||||
*/
|
||||
gpio_input_pullup(GPIO(7, B, 4)); /* EMMC_RST_L */
|
||||
break;
|
||||
default:
|
||||
gpio_output(GPIO(2, B, 1), 1); /* EMMC_RST_L */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void configure_codec(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_i2c2, IOMUX_I2C2); /* CODEC I2C */
|
||||
i2c_init(2, 400*KHz); /* CODEC I2C */
|
||||
|
||||
write32(&rk3288_grf->iomux_i2s, IOMUX_I2S);
|
||||
write32(&rk3288_grf->iomux_i2sclk, IOMUX_I2SCLK);
|
||||
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
rk808_configure_ldo(5, 1800); /* VCC18_CODEC */
|
||||
break;
|
||||
default:
|
||||
rk808_configure_ldo(6, 1800); /* VCC18_CODEC */
|
||||
break;
|
||||
}
|
||||
|
||||
/* AUDIO IO domain 1.8V voltage selection */
|
||||
write32(&rk3288_grf->io_vsel, RK_SETBITS(1 << 6));
|
||||
rkclk_configure_i2s(12288000);
|
||||
}
|
||||
|
||||
static void configure_vop(void)
|
||||
{
|
||||
write32(&rk3288_grf->iomux_lcdc, IOMUX_LCDC);
|
||||
|
||||
/* lcdc(vop) iodomain select 1.8V */
|
||||
write32(&rk3288_grf->io_vsel, RK_SETBITS(1 << 0));
|
||||
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
rk808_configure_ldo(4, 1800); /* VCC18_LCD */
|
||||
rk808_configure_ldo(6, 1000); /* VCC10_LCD */
|
||||
gpio_output(GPIO(7, B, 7), 1); /* LCD_EN */
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
rk808_configure_switch(2, 1); /* VCC18_LCD */
|
||||
rk808_configure_ldo(7, 2500); /* VCC10_LCD_PWREN_H */
|
||||
rk808_configure_switch(1, 1); /* VCC33_LCD */
|
||||
break;
|
||||
default:
|
||||
gpio_output(GPIO(2, B, 5), 1); /* AVDD_1V8_DISP_EN */
|
||||
rk808_configure_ldo(7, 2500); /* VCC10_LCD_PWREN_H */
|
||||
rk808_configure_switch(1, 1); /* VCC33_LCD */
|
||||
gpio_output(GPIO(7, B, 6), 1); /* LCD_EN */
|
||||
|
||||
/* enable edp HPD */
|
||||
gpio_input_pulldown(GPIO(7, B, 3));
|
||||
write32(&rk3288_grf->iomux_edp_hotplug, IOMUX_EDP_HOTPLUG);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void mainboard_init(device_t dev)
|
||||
{
|
||||
gpio_output(GPIO_RESET, 0);
|
||||
|
||||
configure_usb();
|
||||
configure_sdmmc();
|
||||
configure_emmc();
|
||||
configure_codec();
|
||||
configure_vop();
|
||||
|
||||
elog_init();
|
||||
elog_add_watchdog_reset();
|
||||
elog_add_boot_reason();
|
||||
}
|
||||
|
||||
static void mainboard_enable(device_t dev)
|
||||
{
|
||||
dev->ops->init = &mainboard_init;
|
||||
}
|
||||
|
||||
struct chip_operations mainboard_ops = {
|
||||
.enable_dev = mainboard_enable,
|
||||
};
|
||||
|
||||
void lb_board(struct lb_header *header)
|
||||
{
|
||||
struct lb_range *dma;
|
||||
|
||||
dma = (struct lb_range *)lb_new_record(header);
|
||||
dma->tag = LB_TAB_DMA;
|
||||
dma->size = sizeof(*dma);
|
||||
dma->range_start = (uintptr_t)_dma_coherent;
|
||||
dma->range_size = _dma_coherent_size;
|
||||
}
|
||||
|
||||
void mainboard_power_on_backlight(void)
|
||||
{
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
gpio_output(GPIO(7, A, 0), 0); /* BL_EN */
|
||||
gpio_output(GPIO(7, A, 2), 1); /* LCD_BL */
|
||||
mdelay(10);
|
||||
gpio_output(GPIO(7, A, 0), 1); /* BL_EN */
|
||||
break;
|
||||
default:
|
||||
gpio_output(GPIO(2, B, 4), 1); /* BL_PWR_EN */
|
||||
mdelay(20);
|
||||
gpio_output(GPIO(7, A, 0), 1); /* LCD_BL */
|
||||
mdelay(10);
|
||||
gpio_output(GPIO_BACKLIGHT, 1); /* BL_EN */
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
#include <soc/memlayout.ld>
|
|
@ -1,30 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <gpio.h>
|
||||
#include <reset.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
void hard_reset(void)
|
||||
{
|
||||
gpio_output(GPIO_RESET, 1);
|
||||
while (1);
|
||||
}
|
|
@ -1,125 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Rockchip Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include <arch/cache.h>
|
||||
#include <arch/exception.h>
|
||||
#include <arch/stages.h>
|
||||
#include <armv7.h>
|
||||
#include <assert.h>
|
||||
#include <cbfs.h>
|
||||
#include <cbmem.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <program_loading.h>
|
||||
#include <soc/sdram.h>
|
||||
#include <soc/clock.h>
|
||||
#include <soc/pwm.h>
|
||||
#include <soc/grf.h>
|
||||
#include <soc/rk808.h>
|
||||
#include <soc/tsadc.h>
|
||||
#include <stdlib.h>
|
||||
#include <symbols.h>
|
||||
#include <timestamp.h>
|
||||
#include <types.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
static void regulate_vdd_log(unsigned int mv)
|
||||
{
|
||||
unsigned int duty_ns;
|
||||
const u32 period_ns = 2000; /* pwm period: 2000ns */
|
||||
const u32 max_regulator_mv = 1350; /* 1.35V */
|
||||
const u32 min_regulator_mv = 870; /* 0.87V */
|
||||
|
||||
write32(&rk3288_grf->iomux_pwm1, IOMUX_PWM1);
|
||||
|
||||
assert((mv >= min_regulator_mv) && (mv <= max_regulator_mv));
|
||||
|
||||
duty_ns = (max_regulator_mv - mv) * period_ns /
|
||||
(max_regulator_mv - min_regulator_mv);
|
||||
|
||||
pwm_init(1, period_ns, duty_ns);
|
||||
}
|
||||
|
||||
static void configure_l2ctlr(void)
|
||||
{
|
||||
uint32_t l2ctlr;
|
||||
|
||||
l2ctlr = read_l2ctlr();
|
||||
l2ctlr &= 0xfffc0000; /* clear bit0~bit17 */
|
||||
|
||||
/*
|
||||
* Data RAM write latency: 2 cycles
|
||||
* Data RAM read latency: 2 cycles
|
||||
* Data RAM setup latency: 1 cycle
|
||||
* Tag RAM write latency: 1 cycle
|
||||
* Tag RAM read latency: 1 cycle
|
||||
* Tag RAM setup latency: 1 cycle
|
||||
*/
|
||||
l2ctlr |= (1 << 3 | 1 << 0);
|
||||
write_l2ctlr(l2ctlr);
|
||||
}
|
||||
|
||||
static void sdmmc_power_off(void)
|
||||
{
|
||||
switch (board_id()) {
|
||||
case 0:
|
||||
rk808_configure_ldo(8, 0); /* VCCIO_SD */
|
||||
gpio_output(GPIO(7, C, 5), 0); /* SD_EN */
|
||||
break;
|
||||
default:
|
||||
rk808_configure_ldo(4, 0); /* VCCIO_SD */
|
||||
rk808_configure_ldo(5, 0); /* VCC33_SD */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
timestamp_add_now(TS_START_ROMSTAGE);
|
||||
|
||||
console_init();
|
||||
configure_l2ctlr();
|
||||
tsadc_init();
|
||||
|
||||
/* Need to power cycle SD card to ensure it is properly reset. */
|
||||
sdmmc_power_off();
|
||||
|
||||
/* vdd_log 1200mv is enough for ddr run 666Mhz */
|
||||
regulate_vdd_log(1200);
|
||||
|
||||
timestamp_add_now(TS_BEFORE_INITRAM);
|
||||
|
||||
sdram_init(get_sdram_config());
|
||||
|
||||
timestamp_add_now(TS_AFTER_INITRAM);
|
||||
|
||||
/* Now that DRAM is up, add mappings for it and DMA coherency buffer. */
|
||||
mmu_config_range((uintptr_t)_dram/MiB,
|
||||
sdram_size_mb(), DCACHE_WRITEBACK);
|
||||
mmu_config_range((uintptr_t)_dma_coherent/MiB,
|
||||
_dma_coherent_size/MiB, DCACHE_OFF);
|
||||
|
||||
cbmem_initialize_empty();
|
||||
|
||||
timestamp_add_now(TS_END_ROMSTAGE);
|
||||
|
||||
run_ramstage();
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
#include <arch/io.h>
|
||||
#include <boardid.h>
|
||||
#include <console/console.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/sdram.h>
|
||||
#include <string.h>
|
||||
#include <types.h>
|
||||
|
||||
static struct rk3288_sdram_params sdram_configs[] = {
|
||||
#include "sdram_inf/sdram-lpddr3-samsung-2GB.inc" /* ram_code = 0000 */
|
||||
#include "sdram_inf/sdram-lpddr3-hynix-2GB.inc" /* ram_code = 0001 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 0010 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 0011 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-2GB.inc" /* ram_code = 0100 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-2GB.inc" /* ram_code = 0101 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-2GB.inc" /* ram_code = 0110 */
|
||||
#include "sdram_inf/sdram-lpddr3-elpida-2GB.inc" /* ram_code = 0111 */
|
||||
#include "sdram_inf/sdram-lpddr3-samsung-4GB.inc" /* ram_code = 1000 */
|
||||
#include "sdram_inf/sdram-lpddr3-hynix-4GB.inc" /* ram_code = 1001 */
|
||||
#include "sdram_inf/sdram-ddr3-nanya-2GB.inc" /* ram_code = 1010 */
|
||||
#include "sdram_inf/sdram-lpddr3-elpida-4GB.inc" /* ram_code = 1011 */
|
||||
#include "sdram_inf/sdram-unused.inc" /* ram_code = 1100 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-2GB.inc" /* ram_code = 1101 */
|
||||
#include "sdram_inf/sdram-ddr3-samsung-4GB.inc" /* ram_code = 1110 */
|
||||
#include "sdram_inf/sdram-ddr3-hynix-4GB.inc" /* ram_code = 1111 */
|
||||
};
|
||||
|
||||
const struct rk3288_sdram_params *get_sdram_config()
|
||||
{
|
||||
u32 ramcode = ram_code();
|
||||
|
||||
if (ramcode >= ARRAY_SIZE(sdram_configs)
|
||||
|| sdram_configs[ramcode].dramtype == UNUSED)
|
||||
die("Invalid RAMCODE.");
|
||||
return &sdram_configs[ramcode];
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Hynic H5TC4G63CFR(0101b) or H5TC4G63AFR(1101b) chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Hynix H5TC8G63xxx chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Nanya NT5CC256M16DP chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two Samsung K4B4G1646D-BYK0 chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 4 Samsung K4B8G1646Q chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x1,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x29A,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x1F4,
|
||||
.togcnt100n = 0x42,
|
||||
.trefi = 0x4E,
|
||||
.tmrd = 0x4,
|
||||
.trfc = 0xEA,
|
||||
.trp = 0xA,
|
||||
.trtw = 0x5,
|
||||
.tal = 0x0,
|
||||
.tcl = 0xA,
|
||||
.tcwl = 0x7,
|
||||
.tras = 0x19,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xA,
|
||||
.trrd = 0x7,
|
||||
.trtp = 0x5,
|
||||
.twr = 0xA,
|
||||
.twtr = 0x5,
|
||||
.texsr = 0x200,
|
||||
.txp = 0x5,
|
||||
.txpdll = 0x10,
|
||||
.tzqcs = 0x40,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x7,
|
||||
.tcksrx = 0x7,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0xC,
|
||||
.trstl = 0x43,
|
||||
.tzqcl = 0x100,
|
||||
.tmrr = 0x0,
|
||||
.tckesr = 0x5,
|
||||
.tdpd = 0x0
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48F9AAB4,
|
||||
.dtpr1 = 0xEA0910,
|
||||
.dtpr2 = 0x1002C200,
|
||||
.mr[0] = 0xA60,
|
||||
.mr[1] = 0x40,
|
||||
.mr[2] = 0x10,
|
||||
.mr[3] = 0x0
|
||||
},
|
||||
.noc_timing = 0x30B25564,
|
||||
.noc_activate = 0x627,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 666*MHz,
|
||||
.dramtype = DDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 1
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two ELPIDA F8132A3MA-GD-F chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 2,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two ELPIDA FA232A2MA-GC-F chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xB,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 6,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* 2 Hynix H9CCNNN8GTMLAR chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x1,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 14,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,77 +0,0 @@
|
|||
{
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xF,
|
||||
.cs1_row = 0xF
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 3,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 13,
|
||||
.odt = 0,
|
||||
},
|
|
@ -1,78 +0,0 @@
|
|||
{
|
||||
/* two Samsung K4E8E304ED-EGCE000 chips */
|
||||
{
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
},
|
||||
{
|
||||
.rank = 0x2,
|
||||
.col = 0xA,
|
||||
.bk = 0x3,
|
||||
.bw = 0x2,
|
||||
.dbw = 0x2,
|
||||
.row_3_4 = 0x0,
|
||||
.cs0_row = 0xE,
|
||||
.cs1_row = 0xE
|
||||
}
|
||||
},
|
||||
{
|
||||
.togcnt1u = 0x215,
|
||||
.tinit = 0xC8,
|
||||
.trsth = 0x0,
|
||||
.togcnt100n = 0x35,
|
||||
.trefi = 0x26,
|
||||
.tmrd = 0x2,
|
||||
.trfc = 0x70,
|
||||
.trp = 0x2000D,
|
||||
.trtw = 0x6,
|
||||
.tal = 0x0,
|
||||
.tcl = 0x8,
|
||||
.tcwl = 0x4,
|
||||
.tras = 0x17,
|
||||
.trc = 0x24,
|
||||
.trcd = 0xD,
|
||||
.trrd = 0x6,
|
||||
.trtp = 0x4,
|
||||
.twr = 0x8,
|
||||
.twtr = 0x4,
|
||||
.texsr = 0x76,
|
||||
.txp = 0x4,
|
||||
.txpdll = 0x0,
|
||||
.tzqcs = 0x30,
|
||||
.tzqcsi = 0x0,
|
||||
.tdqs = 0x1,
|
||||
.tcksre = 0x2,
|
||||
.tcksrx = 0x2,
|
||||
.tcke = 0x4,
|
||||
.tmod = 0x0,
|
||||
.trstl = 0x0,
|
||||
.tzqcl = 0xC0,
|
||||
.tmrr = 0x4,
|
||||
.tckesr = 0x8,
|
||||
.tdpd = 0x1F4
|
||||
},
|
||||
{
|
||||
.dtpr0 = 0x48D7DD93,
|
||||
.dtpr1 = 0x187008D8,
|
||||
.dtpr2 = 0x121076,
|
||||
.mr[0] = 0x0,
|
||||
.mr[1] = 0xC3,
|
||||
.mr[2] = 0x6,
|
||||
.mr[3] = 0x1
|
||||
},
|
||||
.noc_timing = 0x20D266A4,
|
||||
.noc_activate = 0x5B6,
|
||||
.ddrconfig = 2,
|
||||
.ddr_freq = 533*MHz,
|
||||
.dramtype = LPDDR3,
|
||||
.num_channels = 2,
|
||||
.stride = 9,
|
||||
.odt = 0,
|
||||
},
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue