google/gale: Initial commit for Gale board support
Copy 'storm' files as a template BUG=chrome-os-partner:49249 TEST=None. Initial code. Not sure if it will even compile BRANCH=none Original-Commit-Id: 4bfabf22cb33ac2aacff0ebeed54655664505148 Original-Change-Id: I94e361911b89c5159b99f3d00efbcda94f763e71 Original-Signed-off-by: Varadarajan Narayanan <varada@codeaurora.org> Original-Signed-off-by: Kan Yan <kyan@google.com> Original-Reviewed-on: https://chromium-review.googlesource.com/333177 Original-Commit-Ready: David Hendricks <dhendrix@chromium.org> Original-Tested-by: David Hendricks <dhendrix@chromium.org> Original-Reviewed-by: David Hendricks <dhendrix@chromium.org> squashed: google/gale: Remove unwanted config option 2016.02 doesn't seem to like CONSOLE_CBMEM_DUMP_TO_UART BUG=chrome-os-partner:49249 TEST=None. Initial code not sure if it will even compile BRANCH=none Original-Commit-Id: 44b91a8f83515936156206f9f273e0e5c62c3f17 Original-Change-Id: I9294ff602a05e4c9573fee3b9b51f9cc5305e192 Original-Signed-off-by: Varadarajan Narayanan <varada@codeaurora.org> Original-Reviewed-on: https://chromium-review.googlesource.com/333302 Original-Commit-Ready: David Hendricks <dhendrix@chromium.org> Original-Tested-by: David Hendricks <dhendrix@chromium.org> Original-Reviewed-by: David Hendricks <dhendrix@chromium.org> google/gale: Update ipq806x/storm references Since the files were taken from ipq806x/storm as template. Update those references to reflect ipq40xx/gale. BUG=chrome-os-partner:49249 TEST=None. Initial code not sure if it will even compile BRANCH=none Original-Commit-Id: fa5962b757dbb6cc9e1e6d1e33e1e09ec6cb4cd2 Original-Change-Id: Ia330367a0547ac4306ef2514dc1305e2d65f80e4 Original-Signed-off-by: Varadarajan Narayanan <varada@codeaurora.org> Original-Reviewed-on: https://chromium-review.googlesource.com/333292 Original-Commit-Ready: David Hendricks <dhendrix@chromium.org> Original-Tested-by: David Hendricks <dhendrix@chromium.org> Original-Reviewed-by: David Hendricks <dhendrix@chromium.org> google/gale: Update fill_lb_gpios for new scheme This updates fill_lb_gpios to follow the new scheme introduced in CL:337176. BUG=none BRANCH=none TEST=chromeos.c compiles successfully for gale Original-Commit-Id: 635d7fd71d91552bd7470faeb5637ba1a727f940 Original-Change-Id: I6f98325918b350645b9c19b71125bc12a54953ab Original-Signed-off-by: David Hendricks <dhendrix@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/338651 google/gale: Add '.fmd' file BUG=chrome-os-partner:49249 TEST=None. Initial code. Not sure if it will even compile BRANCH=none Original-Commit-Id: 474de31f7ed0adbe54251ca363e685019091b4e7 Original-Change-Id: I4019b110af676090e8751b315dadc5b601a56178 Original-Signed-off-by: Varadarajan Narayanan <varada@codeaurora.org> Original-Reviewed-on: https://chromium-review.googlesource.com/333291 Original-Commit-Ready: David Hendricks <dhendrix@chromium.org> Original-Tested-by: David Hendricks <dhendrix@chromium.org> Original-Reviewed-by: David Hendricks <dhendrix@chromium.org> Change-Id: Iad8e010371f3b9b92ab26eee4ba35c4f16d3732c Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Reviewed-on: https://review.coreboot.org/14642 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
parent
dc17d2de34
commit
3bbd90173a
17 changed files with 891 additions and 0 deletions
63
src/mainboard/google/gale/Kconfig
Normal file
63
src/mainboard/google/gale/Kconfig
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
##
|
||||||
|
## 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.
|
||||||
|
##
|
||||||
|
|
||||||
|
if BOARD_GOOGLE_GALE
|
||||||
|
|
||||||
|
config BOARD_SPECIFIC_OPTIONS
|
||||||
|
def_bool y
|
||||||
|
select SOC_QC_IPQ40XX
|
||||||
|
select BOARD_ID_AUTO
|
||||||
|
select BOARD_ROMSIZE_KB_8192
|
||||||
|
select COMMON_CBFS_SPI_WRAPPER
|
||||||
|
select DRIVERS_I2C_WW_RING
|
||||||
|
select HAVE_HARD_RESET
|
||||||
|
select MAINBOARD_HAS_CHROMEOS
|
||||||
|
select SPI_FLASH
|
||||||
|
select SPI_FLASH_SPANSION
|
||||||
|
select SPI_FLASH_STMICRO
|
||||||
|
select DRIVERS_UART
|
||||||
|
|
||||||
|
config CHROMEOS
|
||||||
|
select VBOOT_DISABLE_DEV_ON_RECOVERY
|
||||||
|
select VIRTUAL_DEV_SWITCH
|
||||||
|
select WIPEOUT_SUPPORTED
|
||||||
|
|
||||||
|
config BOARD_VARIANT_DK01
|
||||||
|
bool "pick this to build an image for DK01"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config MAINBOARD_DIR
|
||||||
|
string
|
||||||
|
default google/gale
|
||||||
|
|
||||||
|
config MAINBOARD_PART_NUMBER
|
||||||
|
string
|
||||||
|
default "DK01" if BOARD_VARIANT_DK01
|
||||||
|
default "Gale"
|
||||||
|
|
||||||
|
config DRAM_SIZE_MB
|
||||||
|
int
|
||||||
|
default 512 if BOARD_VARIANT_DK01
|
||||||
|
default 512
|
||||||
|
|
||||||
|
config DRIVER_TPM_I2C_BUS
|
||||||
|
hex
|
||||||
|
default 0x1
|
||||||
|
|
||||||
|
config DRIVER_TPM_I2C_ADDR
|
||||||
|
hex
|
||||||
|
default 0x20
|
||||||
|
|
||||||
|
endif # BOARD_GOOGLE_GALE
|
2
src/mainboard/google/gale/Kconfig.name
Normal file
2
src/mainboard/google/gale/Kconfig.name
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
config BOARD_GOOGLE_GALE
|
||||||
|
bool "Gale"
|
43
src/mainboard/google/gale/Makefile.inc
Normal file
43
src/mainboard/google/gale/Makefile.inc
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
##
|
||||||
|
## 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.
|
||||||
|
##
|
||||||
|
|
||||||
|
bootblock-y += bootblock.c
|
||||||
|
bootblock-y += cdp.c
|
||||||
|
bootblock-y += mmu.c
|
||||||
|
bootblock-y += reset.c
|
||||||
|
|
||||||
|
verstage-y += boardid.c
|
||||||
|
verstage-y += cdp.c
|
||||||
|
verstage-y += chromeos.c
|
||||||
|
verstage-y += gsbi.c
|
||||||
|
verstage-y += memlayout.ld
|
||||||
|
verstage-y += reset.c
|
||||||
|
|
||||||
|
romstage-y += romstage.c
|
||||||
|
romstage-y += cdp.c
|
||||||
|
romstage-y += chromeos.c
|
||||||
|
romstage-y += mmu.c
|
||||||
|
romstage-y += reset.c
|
||||||
|
|
||||||
|
ramstage-y += boardid.c
|
||||||
|
ramstage-y += cdp.c
|
||||||
|
ramstage-y += chromeos.c
|
||||||
|
ramstage-y += mainboard.c
|
||||||
|
ramstage-y += mmu.c
|
||||||
|
ramstage-y += reset.c
|
||||||
|
|
||||||
|
bootblock-y += memlayout.ld
|
||||||
|
romstage-y += memlayout.ld
|
||||||
|
ramstage-y += memlayout.ld
|
6
src/mainboard/google/gale/board_info.txt
Normal file
6
src/mainboard/google/gale/board_info.txt
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
Vendor name: Google
|
||||||
|
Board name: Gale
|
||||||
|
Category: eval
|
||||||
|
ROM protocol: SPI
|
||||||
|
ROM socketed: n
|
||||||
|
Flashrom support: y
|
57
src/mainboard/google/gale/boardid.c
Normal file
57
src/mainboard/google/gale/boardid.c
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <boardid.h>
|
||||||
|
#include <gpio.h>
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Storm boards dedicate to the board ID three GPIOs in tertiary mode: 29, 30
|
||||||
|
* and 68. On proto0 GPIO68 is used and tied low, so it reads as 'zero' by
|
||||||
|
* gpio_base3_value(), whereas the other two pins are not connected
|
||||||
|
* and read as 'two'. This results in gpio_base3_value() returning
|
||||||
|
* 8 on proto0.
|
||||||
|
*
|
||||||
|
* Three tertitiary signals could represent 27 different values. To make
|
||||||
|
* calculated board ID value continuous and starting at zero, offset the
|
||||||
|
* calculated value by 19 (i.e. 27 - 8) and return modulo 27 of the offset
|
||||||
|
* number. This results in proto0 returning zero as the board ID, the future
|
||||||
|
* revisions will have the inputs configured to match the actual board
|
||||||
|
* revision.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int board_id_value = -1;
|
||||||
|
|
||||||
|
static uint8_t get_board_id(void)
|
||||||
|
{
|
||||||
|
uint8_t bid;
|
||||||
|
gpio_t hw_rev_gpios[] = {[2] = 68, [1] = 30, [0] = 29}; /* 29 is LSB */
|
||||||
|
int offset = 19;
|
||||||
|
|
||||||
|
bid = gpio_base3_value(hw_rev_gpios, ARRAY_SIZE(hw_rev_gpios));
|
||||||
|
bid = (bid + offset) % 27;
|
||||||
|
printk(BIOS_INFO, "Board ID %d\n", bid);
|
||||||
|
|
||||||
|
return bid;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t board_id(void)
|
||||||
|
{
|
||||||
|
if (board_id_value < 0)
|
||||||
|
board_id_value = get_board_id();
|
||||||
|
|
||||||
|
return board_id_value;
|
||||||
|
}
|
61
src/mainboard/google/gale/bootblock.c
Normal file
61
src/mainboard/google/gale/bootblock.c
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
* only version 2 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bootblock_common.h>
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <symbols.h>
|
||||||
|
|
||||||
|
#include "mmu.h"
|
||||||
|
#include <soc/usbl_if.h>
|
||||||
|
|
||||||
|
static void dump_usbl_report(int section, sbl_ro_info *info)
|
||||||
|
{
|
||||||
|
int i, num_log_entries;
|
||||||
|
|
||||||
|
num_log_entries = info->num_log_entries;
|
||||||
|
if (!num_log_entries)
|
||||||
|
return;
|
||||||
|
|
||||||
|
printk(BIOS_INFO, " Section %d log:\n", section);
|
||||||
|
for (i = 0; i < num_log_entries; i++)
|
||||||
|
printk(BIOS_INFO, " %-5d:%2.2x:%.*s\n",
|
||||||
|
info->log[i].time_stamp,
|
||||||
|
info->log[i].type,
|
||||||
|
sizeof(info->log[i].msg),
|
||||||
|
info->log[i].msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bootblock_mainboard_init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
setup_mmu(DRAM_NOT_INITIALIZED);
|
||||||
|
|
||||||
|
if (((uintptr_t)maskrom_param < (uintptr_t)&_sram) ||
|
||||||
|
((uintptr_t)maskrom_param > (uintptr_t)&_esram)) {
|
||||||
|
printk(BIOS_INFO, "No uber-sbl parameter detected\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Is maskrom parameter address set to a sensible value? */
|
||||||
|
if ((maskrom_param->start_magic != UBER_SBL_SHARED_INFO_START_MAGIC) ||
|
||||||
|
(maskrom_param->end_magic != UBER_SBL_SHARED_INFO_END_MAGIC)) {
|
||||||
|
|
||||||
|
printk(BIOS_INFO, "Uber-sbl: invalid magic!\n");
|
||||||
|
} else {
|
||||||
|
printk(BIOS_INFO, "Uber-sbl version: %s\n",
|
||||||
|
maskrom_param->version);
|
||||||
|
|
||||||
|
for (i = 0; i < maskrom_param->num; i++)
|
||||||
|
dump_usbl_report(i, &maskrom_param->info[i]);
|
||||||
|
}
|
||||||
|
}
|
72
src/mainboard/google/gale/cdp.c
Normal file
72
src/mainboard/google/gale/cdp.c
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 - 2013 The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gpio.h>
|
||||||
|
#include <soc/cdp.h>
|
||||||
|
#include <soc/ebi2.h>
|
||||||
|
#include <soc/clock.h>
|
||||||
|
#include <types.h>
|
||||||
|
#include <boardid.h>
|
||||||
|
|
||||||
|
void ipq_configure_gpio(const gpio_func_data_t *gpio, unsigned count)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
gpio_tlmm_config(gpio->gpio, gpio->func, gpio->dir,
|
||||||
|
gpio->pull, gpio->drvstr, gpio->enable);
|
||||||
|
gpio++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void configure_nand_gpio(void)
|
||||||
|
{
|
||||||
|
/* EBI2 CS, CLE, ALE, WE, OE */
|
||||||
|
gpio_tlmm_config(34, 1, 0, GPIO_NO_PULL, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(35, 1, 0, GPIO_NO_PULL, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(36, 1, 0, GPIO_NO_PULL, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(37, 1, 0, GPIO_NO_PULL, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(38, 1, 0, GPIO_NO_PULL, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
|
||||||
|
/* EBI2 BUSY */
|
||||||
|
gpio_tlmm_config(39, 1, 0, GPIO_PULL_UP, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
|
||||||
|
/* EBI2 D7 - D0 */
|
||||||
|
gpio_tlmm_config(40, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(41, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(42, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(43, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(44, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(45, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(46, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
gpio_tlmm_config(47, 1, 0, GPIO_KEEPER, GPIO_10MA, GPIO_DISABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_nand_init(void)
|
||||||
|
{
|
||||||
|
struct ebi2cr_regs *ebi2_regs;
|
||||||
|
|
||||||
|
if (board_id() != BOARD_ID_PROTO_0_2_NAND)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ebi2_regs = (struct ebi2cr_regs *) EBI2CR_BASE;
|
||||||
|
|
||||||
|
nand_clock_config();
|
||||||
|
configure_nand_gpio();
|
||||||
|
|
||||||
|
/* NAND Flash is connected to CS0 */
|
||||||
|
clrsetbits_le32(&ebi2_regs->chip_select_cfg0, CS0_CFG_MASK,
|
||||||
|
CS0_CFG_SERIAL_FLASH_DEVICE);
|
||||||
|
}
|
154
src/mainboard/google/gale/chromeos.c
Normal file
154
src/mainboard/google/gale/chromeos.c
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <boardid.h>
|
||||||
|
#include <boot/coreboot_tables.h>
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <delay.h>
|
||||||
|
#include <drivers/i2c/ww_ring/ww_ring.h>
|
||||||
|
#include <gpio.h>
|
||||||
|
#include <soc/cdp.h>
|
||||||
|
#include <soc/gsbi.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <timer.h>
|
||||||
|
#include <vendorcode/google/chromeos/chromeos.h>
|
||||||
|
|
||||||
|
#define DEV_SW 15
|
||||||
|
#define DEV_POL ACTIVE_LOW
|
||||||
|
#define REC_SW 16
|
||||||
|
#define REC_POL ACTIVE_LOW
|
||||||
|
#define WP_SW 17
|
||||||
|
#define WP_POL ACTIVE_LOW
|
||||||
|
|
||||||
|
static int read_gpio(gpio_t gpio_num)
|
||||||
|
{
|
||||||
|
gpio_tlmm_config_set(gpio_num, GPIO_FUNC_DISABLE,
|
||||||
|
GPIO_NO_PULL, GPIO_2MA, GPIO_DISABLE);
|
||||||
|
udelay(10); /* Should be enough to settle. */
|
||||||
|
return gpio_get(gpio_num);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_lb_gpios(struct lb_gpios *gpios)
|
||||||
|
{
|
||||||
|
struct lb_gpio chromeos_gpios[] = {
|
||||||
|
{DEV_SW, ACTIVE_LOW, read_gpio(DEV_SW), "developer"},
|
||||||
|
{REC_SW, ACTIVE_LOW, read_gpio(REC_SW), "recovery"},
|
||||||
|
{WP_SW, ACTIVE_LOW, read_gpio(WP_SW), "write protect"},
|
||||||
|
{-1, ACTIVE_LOW, 1, "power"},
|
||||||
|
{-1, ACTIVE_LOW, 0, "lid"},
|
||||||
|
};
|
||||||
|
lb_add_gpios(gpios, chromeos_gpios, ARRAY_SIZE(chromeos_gpios));
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_developer_mode_switch(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The recovery switch on storm is overloaded: it needs to be pressed for a
|
||||||
|
* certain duration at startup to signal different requests:
|
||||||
|
*
|
||||||
|
* - keeping it pressed for 8 to 16 seconds after startup signals the need for
|
||||||
|
* factory reset (wipeout);
|
||||||
|
* - keeping it pressed for longer than 16 seconds signals the need for Chrome
|
||||||
|
* OS recovery.
|
||||||
|
*
|
||||||
|
* The state is read once and cached for following inquiries. The below enum
|
||||||
|
* lists possible states.
|
||||||
|
*/
|
||||||
|
enum switch_state {
|
||||||
|
not_probed = -1,
|
||||||
|
no_req,
|
||||||
|
recovery_req,
|
||||||
|
wipeout_req
|
||||||
|
};
|
||||||
|
|
||||||
|
static void display_pattern(int pattern)
|
||||||
|
{
|
||||||
|
if (board_id() == BOARD_ID_WHIRLWIND_SP5)
|
||||||
|
ww_ring_display_pattern(GSBI_ID_7, pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define WIPEOUT_MODE_DELAY_MS (8 * 1000)
|
||||||
|
#define RECOVERY_MODE_EXTRA_DELAY_MS (8 * 1000)
|
||||||
|
|
||||||
|
static enum switch_state get_switch_state(void)
|
||||||
|
{
|
||||||
|
struct stopwatch sw;
|
||||||
|
int sampled_value;
|
||||||
|
static enum switch_state saved_state = not_probed;
|
||||||
|
|
||||||
|
if (saved_state != not_probed)
|
||||||
|
return saved_state;
|
||||||
|
|
||||||
|
sampled_value = read_gpio(REC_SW) ^ !REC_POL;
|
||||||
|
|
||||||
|
if (!sampled_value) {
|
||||||
|
saved_state = no_req;
|
||||||
|
display_pattern(WWR_NORMAL_BOOT);
|
||||||
|
return saved_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
display_pattern(WWR_RECOVERY_PUSHED);
|
||||||
|
printk(BIOS_INFO, "recovery button pressed\n");
|
||||||
|
|
||||||
|
stopwatch_init_msecs_expire(&sw, WIPEOUT_MODE_DELAY_MS);
|
||||||
|
|
||||||
|
do {
|
||||||
|
sampled_value = read_gpio(REC_SW) ^ !REC_POL;
|
||||||
|
if (!sampled_value)
|
||||||
|
break;
|
||||||
|
} while (!stopwatch_expired(&sw));
|
||||||
|
|
||||||
|
if (sampled_value) {
|
||||||
|
display_pattern(WWR_WIPEOUT_REQUEST);
|
||||||
|
printk(BIOS_INFO, "wipeout requested, checking recovery\n");
|
||||||
|
stopwatch_init_msecs_expire(&sw, RECOVERY_MODE_EXTRA_DELAY_MS);
|
||||||
|
do {
|
||||||
|
sampled_value = read_gpio(REC_SW) ^ !REC_POL;
|
||||||
|
if (!sampled_value)
|
||||||
|
break;
|
||||||
|
} while (!stopwatch_expired(&sw));
|
||||||
|
|
||||||
|
if (sampled_value) {
|
||||||
|
saved_state = recovery_req;
|
||||||
|
display_pattern(WWR_RECOVERY_REQUEST);
|
||||||
|
printk(BIOS_INFO, "recovery requested\n");
|
||||||
|
} else {
|
||||||
|
saved_state = wipeout_req;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
saved_state = no_req;
|
||||||
|
display_pattern(WWR_NORMAL_BOOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return saved_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_recovery_mode_switch(void)
|
||||||
|
{
|
||||||
|
return get_switch_state() == recovery_req;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_wipeout_mode_switch(void)
|
||||||
|
{
|
||||||
|
return get_switch_state() == wipeout_req;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_write_protect_state(void)
|
||||||
|
{
|
||||||
|
return read_gpio(WP_SW) ^ !WP_POL;
|
||||||
|
}
|
33
src/mainboard/google/gale/chromeos.fmd
Normal file
33
src/mainboard/google/gale/chromeos.fmd
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
FLASH@0x0 0x800000 {
|
||||||
|
WP_RO@0x0 0x400000 {
|
||||||
|
RO_SECTION@0x0 0x3e0000 {
|
||||||
|
BOOTBLOCK@0 128K
|
||||||
|
COREBOOT(CBFS)@0x20000 0x2e0000
|
||||||
|
FMAP@0x300000 0x1000
|
||||||
|
GBB@0x301000 0xdef00
|
||||||
|
RO_FRID@0x3dff00 0x100
|
||||||
|
}
|
||||||
|
RO_VPD@0x3e0000 0x20000
|
||||||
|
}
|
||||||
|
RW_SECTION_A@0x400000 0x160000 {
|
||||||
|
VBLOCK_A@0x0 0x2000
|
||||||
|
FW_MAIN_A(CBFS)@0x2000 0x14df00
|
||||||
|
RW_FWID_A@0x14ff00 0x100
|
||||||
|
RW_SHARED@0x150000 0x10000 {
|
||||||
|
SHARED_DATA@0x0 0x10000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RW_GPT@0x560000 0x20000 {
|
||||||
|
RW_GPT_PRIMARY@0x0 0x10000
|
||||||
|
RW_GPT_SECONDARY@0x10000 0x10000
|
||||||
|
}
|
||||||
|
RW_SECTION_B@0x580000 0x160000 {
|
||||||
|
VBLOCK_B@0x0 0x2000
|
||||||
|
FW_MAIN_B(CBFS)@0x2000 0x14df00
|
||||||
|
RW_FWID_B@0x14ff00 0x100
|
||||||
|
}
|
||||||
|
RW_VPD@0x6e0000 0x8000
|
||||||
|
RW_ELOG@0x6e8000 0x8000
|
||||||
|
RW_NVRAM@0x6f0000 0x10000
|
||||||
|
RW_LEGACY@0x700000 0x100000
|
||||||
|
}
|
18
src/mainboard/google/gale/devicetree.cb
Normal file
18
src/mainboard/google/gale/devicetree.cb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
##
|
||||||
|
## 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.
|
||||||
|
##
|
||||||
|
|
||||||
|
chip soc/qualcomm/ipq40xx
|
||||||
|
device cpu_cluster 0 on end
|
||||||
|
end
|
64
src/mainboard/google/gale/gsbi.c
Normal file
64
src/mainboard/google/gale/gsbi.c
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the depthcharge project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 - 2015 The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. The name of the author may not be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <soc/gpio.h>
|
||||||
|
#include <soc/gsbi.h>
|
||||||
|
#include <soc/qup.h>
|
||||||
|
|
||||||
|
#define GPIO_FUNC_I2C 0x1
|
||||||
|
|
||||||
|
int gsbi_init_board(gsbi_id_t gsbi_id)
|
||||||
|
{
|
||||||
|
switch (gsbi_id) {
|
||||||
|
case GSBI_ID_7:
|
||||||
|
gpio_tlmm_config_set(8, GPIO_FUNC_I2C,
|
||||||
|
GPIO_NO_PULL, GPIO_2MA, 1);
|
||||||
|
gpio_tlmm_config_set(9, GPIO_FUNC_I2C,
|
||||||
|
GPIO_NO_PULL, GPIO_2MA, 1);
|
||||||
|
break;
|
||||||
|
case GSBI_ID_4:
|
||||||
|
/* Configure GPIOs 13 - SCL, 12 - SDA, 2mA gpio_en */
|
||||||
|
gpio_tlmm_config_set(12, GPIO_FUNC_I2C,
|
||||||
|
GPIO_NO_PULL, GPIO_2MA, 1);
|
||||||
|
gpio_tlmm_config_set(13, GPIO_FUNC_I2C,
|
||||||
|
GPIO_NO_PULL, GPIO_2MA, 1);
|
||||||
|
break;
|
||||||
|
case GSBI_ID_1:
|
||||||
|
/* Configure GPIOs 54 - SCL, 53 - SDA, 2mA gpio_en */
|
||||||
|
gpio_tlmm_config_set(54, GPIO_FUNC_I2C,
|
||||||
|
GPIO_NO_PULL, GPIO_2MA, 1);
|
||||||
|
gpio_tlmm_config_set(53, GPIO_FUNC_I2C,
|
||||||
|
GPIO_NO_PULL, GPIO_2MA, 1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
131
src/mainboard/google/gale/mainboard.c
Normal file
131
src/mainboard/google/gale/mainboard.c
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <boardid.h>
|
||||||
|
#include <boot/coreboot_tables.h>
|
||||||
|
#include <delay.h>
|
||||||
|
#include <device/device.h>
|
||||||
|
#include <gpio.h>
|
||||||
|
#include <soc/clock.h>
|
||||||
|
#include <soc/soc_services.h>
|
||||||
|
#include <soc/usb.h>
|
||||||
|
#include <symbols.h>
|
||||||
|
|
||||||
|
#include <vendorcode/google/chromeos/chromeos.h>
|
||||||
|
#include "mmu.h"
|
||||||
|
|
||||||
|
#define USB_ENABLE_GPIO 51
|
||||||
|
|
||||||
|
static void setup_usb(void)
|
||||||
|
{
|
||||||
|
#if !CONFIG_BOARD_VARIANT_AP148
|
||||||
|
gpio_tlmm_config_set(USB_ENABLE_GPIO, FUNC_SEL_GPIO,
|
||||||
|
GPIO_PULL_UP, GPIO_10MA, GPIO_ENABLE);
|
||||||
|
gpio_set(USB_ENABLE_GPIO, 1);
|
||||||
|
#endif
|
||||||
|
usb_clock_config();
|
||||||
|
|
||||||
|
setup_usb_host1();
|
||||||
|
}
|
||||||
|
|
||||||
|
#define TPM_RESET_GPIO 22
|
||||||
|
static void setup_tpm(void)
|
||||||
|
{
|
||||||
|
if (board_id() != BOARD_ID_PROTO_0)
|
||||||
|
return; /* Only proto0 have TPM reset connected to GPIO22 */
|
||||||
|
|
||||||
|
gpio_tlmm_config_set(TPM_RESET_GPIO, FUNC_SEL_GPIO, GPIO_PULL_UP,
|
||||||
|
GPIO_4MA, GPIO_ENABLE);
|
||||||
|
/*
|
||||||
|
* Generate a reset pulse. The spec calls for 80 us minimum, let's
|
||||||
|
* make it twice as long. If the output was driven low originally, the
|
||||||
|
* reset pulse will be even longer.
|
||||||
|
*/
|
||||||
|
gpio_set(TPM_RESET_GPIO, 0);
|
||||||
|
udelay(160);
|
||||||
|
gpio_set(TPM_RESET_GPIO, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SW_RESET_GPIO 26
|
||||||
|
static void assert_sw_reset(void)
|
||||||
|
{
|
||||||
|
if (board_id() == BOARD_ID_PROTO_0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* only proto0.2 and later care about this. We want to keep the
|
||||||
|
* ethernet switch in reset, otherwise it comes up in default
|
||||||
|
* (bridging) mode.
|
||||||
|
*/
|
||||||
|
gpio_tlmm_config_set(SW_RESET_GPIO, FUNC_SEL_GPIO,
|
||||||
|
GPIO_PULL_UP, GPIO_4MA, GPIO_ENABLE);
|
||||||
|
|
||||||
|
gpio_set(SW_RESET_GPIO, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mainboard_init(device_t dev)
|
||||||
|
{
|
||||||
|
/* disable mmu and d-cache before setting up secure world.*/
|
||||||
|
dcache_mmu_disable();
|
||||||
|
start_tzbsp();
|
||||||
|
/* Setup mmu and d-cache again as non secure entries. */
|
||||||
|
setup_mmu(DRAM_INITIALIZED);
|
||||||
|
start_rpm();
|
||||||
|
setup_usb();
|
||||||
|
assert_sw_reset();
|
||||||
|
setup_tpm();
|
||||||
|
/* Functionally a 0-cost no-op if NAND is not present */
|
||||||
|
board_nand_init();
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_CHROMEOS)
|
||||||
|
/* Copy WIFI calibration data into CBMEM. */
|
||||||
|
cbmem_add_vpd_calibration_data();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure bootloader can issue sounds The frequency is calculated
|
||||||
|
* as "<frame_rate> * <bit_width> * <channels> * 4", i.e.
|
||||||
|
*
|
||||||
|
* 48000 * 2 * 16 * 4 = 6144000
|
||||||
|
*/
|
||||||
|
audio_clock_config(6144000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mainboard_enable(device_t dev)
|
||||||
|
{
|
||||||
|
dev->ops->init = &mainboard_init;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct chip_operations mainboard_ops = {
|
||||||
|
.name = "gale",
|
||||||
|
.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;
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_CHROMEOS)
|
||||||
|
/* Retrieve the switch interface MAC addressses. */
|
||||||
|
lb_table_add_macs_from_vpd(header);
|
||||||
|
#endif
|
||||||
|
}
|
14
src/mainboard/google/gale/memlayout.ld
Normal file
14
src/mainboard/google/gale/memlayout.ld
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <soc/memlayout.ld>
|
68
src/mainboard/google/gale/mmu.c
Normal file
68
src/mainboard/google/gale/mmu.c
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
* only version 2 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <arch/cache.h>
|
||||||
|
#include <symbols.h>
|
||||||
|
#include "mmu.h"
|
||||||
|
|
||||||
|
/* convenient shorthand (in MB) */
|
||||||
|
#define RPM_START ((uintptr_t)_rpm / KiB)
|
||||||
|
#define RPM_END ((uintptr_t)_erpm / KiB)
|
||||||
|
#define RPM_SIZE (RPM_END - RPM_START)
|
||||||
|
#define SRAM_START ((uintptr_t)_sram / KiB)
|
||||||
|
#define SRAM_END ((uintptr_t)_esram / KiB)
|
||||||
|
#define DRAM_START ((uintptr_t)_dram / MiB)
|
||||||
|
#define DRAM_SIZE (CONFIG_DRAM_SIZE_MB)
|
||||||
|
#define DRAM_END (DRAM_START + DRAM_SIZE)
|
||||||
|
|
||||||
|
/* DMA memory for drivers */
|
||||||
|
#define DMA_START ((uintptr_t)_dma_coherent / MiB)
|
||||||
|
#define DMA_SIZE (_dma_coherent_size / MiB)
|
||||||
|
|
||||||
|
void setup_dram_mappings(enum dram_state dram)
|
||||||
|
{
|
||||||
|
if (dram == DRAM_INITIALIZED) {
|
||||||
|
mmu_config_range(DRAM_START, DRAM_SIZE, DCACHE_WRITEBACK);
|
||||||
|
/* Map DMA memory */
|
||||||
|
mmu_config_range(DMA_START, DMA_SIZE, DCACHE_OFF);
|
||||||
|
} else {
|
||||||
|
mmu_disable_range(DRAM_START, DRAM_SIZE);
|
||||||
|
/* Map DMA memory */
|
||||||
|
mmu_disable_range(DMA_START, DMA_SIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup_mmu(enum dram_state dram)
|
||||||
|
{
|
||||||
|
dcache_mmu_disable();
|
||||||
|
|
||||||
|
/* start with mapping everything as strongly ordered. */
|
||||||
|
mmu_config_range(0, 4096, DCACHE_OFF);
|
||||||
|
|
||||||
|
/* Map Device memory. */
|
||||||
|
mmu_config_range_kb(RPM_START, RPM_SIZE, DCACHE_OFF);
|
||||||
|
|
||||||
|
mmu_config_range_kb(SRAM_START, SRAM_END - SRAM_START,
|
||||||
|
DCACHE_WRITEBACK);
|
||||||
|
|
||||||
|
/* Map DRAM memory */
|
||||||
|
setup_dram_mappings(dram);
|
||||||
|
|
||||||
|
mmu_disable_range(DRAM_END, 4096 - DRAM_END);
|
||||||
|
|
||||||
|
/* disable Page 0 for trapping NULL pointer references. */
|
||||||
|
mmu_disable_range_kb(0, 1);
|
||||||
|
|
||||||
|
mmu_init();
|
||||||
|
|
||||||
|
dcache_mmu_enable();
|
||||||
|
}
|
24
src/mainboard/google/gale/mmu.h
Normal file
24
src/mainboard/google/gale/mmu.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
* only version 2 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
extern u8 _rpm[];
|
||||||
|
extern u8 _erpm[];
|
||||||
|
|
||||||
|
enum dram_state {
|
||||||
|
DRAM_INITIALIZED = 0,
|
||||||
|
DRAM_NOT_INITIALIZED = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
void setup_dram_mappings(enum dram_state dram);
|
||||||
|
void setup_mmu(enum dram_state);
|
48
src/mainboard/google/gale/reset.c
Normal file
48
src/mainboard/google/gale/reset.c
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <soc/iomap.h>
|
||||||
|
#include <reset.h>
|
||||||
|
|
||||||
|
/* Watchdog bite time set to default reset value */
|
||||||
|
#define RESET_WDT_BITE_TIME 0x31F3
|
||||||
|
|
||||||
|
/* Watchdog bark time value is kept larger than the watchdog timeout
|
||||||
|
* of 0x31F3, effectively disabling the watchdog bark interrupt
|
||||||
|
*/
|
||||||
|
#define RESET_WDT_BARK_TIME (5 * RESET_WDT_BITE_TIME)
|
||||||
|
|
||||||
|
static void wdog_reset(void)
|
||||||
|
{
|
||||||
|
printk(BIOS_DEBUG, "\nResetting with watchdog!\n");
|
||||||
|
|
||||||
|
write32(APCS_WDT0_EN, 0);
|
||||||
|
write32(APCS_WDT0_RST, 1);
|
||||||
|
write32(APCS_WDT0_BARK_TIME, RESET_WDT_BARK_TIME);
|
||||||
|
write32(APCS_WDT0_BITE_TIME, RESET_WDT_BITE_TIME);
|
||||||
|
write32(APCS_WDT0_EN, 1);
|
||||||
|
write32(APCS_WDT0_CPU0_WDOG_EXPIRED_ENABLE, 1);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hard_reset(void)
|
||||||
|
{
|
||||||
|
wdog_reset();
|
||||||
|
}
|
33
src/mainboard/google/gale/romstage.c
Normal file
33
src/mainboard/google/gale/romstage.c
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cbmem.h>
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <program_loading.h>
|
||||||
|
#include <soc/soc_services.h>
|
||||||
|
#include "mmu.h"
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
console_init();
|
||||||
|
initialize_dram();
|
||||||
|
|
||||||
|
/* Add dram mappings to mmu tables. */
|
||||||
|
setup_dram_mappings(DRAM_INITIALIZED);
|
||||||
|
|
||||||
|
cbmem_initialize_empty();
|
||||||
|
run_ramstage();
|
||||||
|
}
|
Loading…
Reference in a new issue