mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-08 08:31:52 +00:00
g: Move chip pre-init to chip_pre_init()
Currently, chip/g uses jtag_pre_init() to do some chip
pre-initialization that isn't actually related to JTAG. This has been
harmless, but it's currently the only chip which actually does "JTAG"
pre-init, and we'd like to get rid of that. So, move that
functionality to a new optional chip_pre_init() function.
BUG=chromium:747629
BRANCH=cr50
TEST=make buildall
boot cr50
make all dis; confirm chip_pre_init() is called early in <main>
Change-Id: I3cae0747ab0c3cc974fce9f108947207b38e035f
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/629876
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-by: Shawn N <shawnn@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
c859c057e1
commit
1029239bc1
@@ -20,7 +20,7 @@ CPPFLAGS += -I$(CRYPTOCLIB)/include
|
||||
endif
|
||||
|
||||
# Required chip modules
|
||||
chip-y = clock.o gpio.o hwtimer.o jtag.o system.o
|
||||
chip-y = clock.o gpio.o hwtimer.o jtag.o pre_init.o system.o
|
||||
chip-$(CONFIG_BOARD_ID_SUPPORT) += board_id.o
|
||||
ifeq ($(CONFIG_POLLING_UART),y)
|
||||
chip-y += polling_uart.o
|
||||
|
||||
@@ -67,6 +67,9 @@
|
||||
/* We'll have some special commands of our own */
|
||||
#define CONFIG_EXTENSION_COMMAND 0xbaccd00a
|
||||
|
||||
/* Chip needs to do custom pre-init */
|
||||
#define CONFIG_CHIP_PRE_INIT
|
||||
|
||||
/*
|
||||
* The flash memory is implemented in two halves. The SoC bootrom will look for
|
||||
* the first-stage bootloader at the beginning of each of the two halves and
|
||||
|
||||
@@ -3,28 +3,6 @@
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include "registers.h"
|
||||
|
||||
void jtag_pre_init(void)
|
||||
{
|
||||
/*
|
||||
* We don't need to do anything for JTAG, but if we're resuming from
|
||||
* deep sleep we need to undo some stuff as soon as possible and this
|
||||
* is the first init function that's called.
|
||||
*
|
||||
* It doesn't hurt anything if this setup is not needed, but we don't
|
||||
* investigate the reset cause until much later (and doing so is
|
||||
* destructive), so we'll just do the post-deep-sleep setup every time.
|
||||
*/
|
||||
|
||||
/* Disable the deep sleep triggers */
|
||||
GR_PMU_LOW_POWER_DIS = 0;
|
||||
GR_PMU_EXITPD_MASK = 0;
|
||||
|
||||
/* Unfreeze the USB module */
|
||||
GWRITE_FIELD(USB, PCGCCTL, STOPPCLK, 0);
|
||||
GWRITE_FIELD(USB, PCGCCTL, RSTPDWNMODULE, 0);
|
||||
GWRITE_FIELD(USB, PCGCCTL, PWRCLMP, 0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
28
chip/g/pre_init.c
Normal file
28
chip/g/pre_init.c
Normal file
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2017 The Chromium OS Authors. All rights reserved.
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include "board_config.h"
|
||||
#include "registers.h"
|
||||
|
||||
void chip_pre_init(void)
|
||||
{
|
||||
/*
|
||||
* If we're resuming from deep sleep we need to undo some stuff as soon
|
||||
* as possible and this is the first init function that's called.
|
||||
*
|
||||
* It doesn't hurt anything if this setup is not needed, but we don't
|
||||
* investigate the reset cause until much later (and doing so is
|
||||
* destructive), so we'll just do the post-deep-sleep setup every time.
|
||||
*/
|
||||
|
||||
/* Disable the deep sleep triggers */
|
||||
GR_PMU_LOW_POWER_DIS = 0;
|
||||
GR_PMU_EXITPD_MASK = 0;
|
||||
|
||||
/* Unfreeze the USB module */
|
||||
GWRITE_FIELD(USB, PCGCCTL, STOPPCLK, 0);
|
||||
GWRITE_FIELD(USB, PCGCCTL, RSTPDWNMODULE, 0);
|
||||
GWRITE_FIELD(USB, PCGCCTL, PWRCLMP, 0);
|
||||
}
|
||||
@@ -56,6 +56,10 @@ test_mockable __keep int main(void)
|
||||
board_config_pre_init();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CHIP_PRE_INIT
|
||||
chip_pre_init();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MPU
|
||||
mpu_pre_init();
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*
|
||||
* Extra hooks for board and chip initialization/configuration
|
||||
*/
|
||||
|
||||
#ifndef __CROS_EC_BOARD_CONFIG_H
|
||||
@@ -48,4 +50,15 @@ void board_config_post_gpio_init(void);
|
||||
void board_before_rsmrst(int rsmrst);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Configure chip early in main(), just after board_config_pre_init().
|
||||
*
|
||||
* Most chip configuration is not particularly timing critical and can be done
|
||||
* in other chip driver initialization such as system_pre_init() or HOOK_INIT
|
||||
* handlers. Chip pre-init should be reserved for small amounts of critical
|
||||
* functionality that can't wait that long. Think very hard before putting
|
||||
* code here.
|
||||
*/
|
||||
void chip_pre_init(void);
|
||||
|
||||
#endif /* __CROS_EC_BOARD_CONFIG_H */
|
||||
|
||||
@@ -616,6 +616,14 @@
|
||||
/* Enable trickle charging */
|
||||
#undef CONFIG_TRICKLE_CHARGING
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
* Chip needs to do pre-init very early in main(), and provides chip_pre_init()
|
||||
* to do so.
|
||||
*/
|
||||
#undef CONFIG_CHIP_PRE_INIT
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Chipset config */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user