blob: 17a38607a9727da6b067f70d385225471dafc468 [file] [log] [blame]
/********************************************************************************
* Marvell GPL License Option
*
* If you received this File from Marvell, you may opt to use, redistribute and/or
* modify this File in accordance with the terms and conditions of the General
* Public License Version 2, June 1991 (the "GPL License"), a copy of which is
* available along with the File in the license.txt file or by writing to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
* on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
*
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
* WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
* DISCLAIMED. The GPL License provides additional details about this warranty
* disclaimer.
******************************************************************************/
#include "bootloader_customize.h"
static void do_power_tuning()
{
register unsigned int val;
lgpl_printf("Power tuning\n");
/*
* Turn off PHYs/modules
*/
// Turn on SATA clock to allow configuring PHY
val = readl(0xF7EA0150);
val |= (1<<9); // SATA
writel(val, 0xF7EA0150);
// Power down USB PHY
//writel(0x00001680, 0xF7B74034); // USB0
//writel(0x00001680, 0xF7B78034); // USB1
//writel(0, 0xF7ED0800); // USB0
//writel(0, 0xF7EE0800); // USB1
// Turn off SATA PHY 0
writel(0x00A6, 0xF7E90178);
writel(0x8122, 0xF7E9017C);
writel(0x0081, 0xF7E90178);
writel(0x8901, 0xF7E9017C);
// Turn off SATA PHY 1
writel(0x00A6, 0xF7E901F8);
writel(0x8122, 0xF7E901FC);
writel(0x0081, 0xF7E901F8);
writel(0x8901, 0xF7E901FC);
// Power down ADAC
writel(4, 0xF7D30020);
// Power down LVDS
writel(0x021000FF, 0xF7F70098); // LVDS0
writel(0x021000FF, 0xF7F700A0); // LVDS1
// Power down VDAC
writel(0, 0xF7F7005C); // VDAC_a
writel(0, 0xF7F70064); // VDAC_b
writel(0, 0xF7F7006C); // VDAC_c
writel(0, 0xF7F70074); // VDAC_d
/*
* Turn off clocks
*/
// clkEnable
val = readl(0xF7EA0150);
val &= ~(1<<7); // geth0
val &= ~(1<<9); // SATA
//val &= ~(1<<11); // USB0 core
//val &= ~(1<<12); // USB1 core
val &= ~(1<<22); // audio0clk
val &= ~(1<<23); // audio1clk
val &= ~(1<<24); // audio2clk
val &= ~(1<<25); // audio3clk
val &= ~(1<<28); // video1clk
val &= ~(1<<29); // video2clk
writel(val, 0xF7EA0150);
lgpl_printf("Disable clocks: 0xF7EA0150 - %08X \n", val);
// gc360ClkCtrl: disable clock
val = readl(0xF7EA024C);
val &= ~1;
writel(val, 0xF7EA024C);
lgpl_printf("Disable gc360 clocks: 0xF7EA024C - %08X \n", val);
}
void bootloader_customize_initialize_postprocess(unsigned int boot_state)
{
int port = 0;
#if 0
unsigned int uiWarmDown_2_Linux_Addr = readl((SM_WARMDOWN_2_LINUX_ADDR)) ;
power_on_sdio_slot1();
#endif
SM_GPIO_PortSetInOut(1, 0);
SM_GPIO_PortSetInOut(3, 0);
SM_GPIO_PortSetInOut(5, 0);
for (port=8; port<16; port++) {
SM_GPIO_PortSetInOut(port, 0);
}
for (port=0; port<24; port++) {
GPIO_PortSetInOut(port, 0);
}
for (port=28; port<32; port++) {
GPIO_PortSetInOut(port, 0);
}
#if 0
if ((boot_state != MV_SoC_STATE_WARMDOWN_1) &&
(boot_state != MV_SoC_STATE_WARMDOWN_2) &&
!((boot_state == MV_SoC_STATE_WARMUP_1) && (uiWarmDown_2_Linux_Addr != 0xFFFFFFFF)))
power_on_sdio_slot0();
#endif
do_power_tuning();
}
void bootloader_customize_load_image_preprocess(unsigned int boot_state)
{
}
void bootloader_customize_load_image_postprocess(unsigned int boot_state)
{
}
void bootloader_customize_response_to_sm_preprocess(unsigned int boot_state)
{
}
void bootloader_customize_start_kernel_preprocess(unsigned int boot_state)
{
}