From 7937ed35de6218a955a63d9ce61d992532fdc5e0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Sep 2009 12:27:50 +0200 Subject: [PATCH] x-load: add omap3517-evm support * 1.41 still has the volatile bugs when compiled with non CSL stuff --- conf/machine/omap3517-evm.conf | 1 + .../x-load/files/x-loader-03.00.00.01.tar.gz | Bin 0 -> 166557 bytes recipes/x-load/files/xload-shiva.diff | 2106 +++++++++++++++++ ...c-print-boot-method-mmc-onenand-nand.patch | 52 + ...for-u-boot-on-mmc-on-all-configurati.patch | 95 + .../0015-OMAP3EVM-Build-issue-fixed.patch | 77 + ...fix-infinite-loop-in-mmc_init_stream.patch | 41 + ...rd.c-add-missing-call-to-misc_init_r.patch | 25 + ...3evm-provide-missing-udelay-function.patch | 27 + ...cify-where-u-boot-is-being-loaded-fr.patch | 45 + recipes/x-load/x-load-1.41/streen-fix.diff | 39 + recipes/x-load/x-load_1.41.bb | 18 + recipes/x-load/x-load_git.bb | 6 + 13 files changed, 2532 insertions(+) create mode 100755 recipes/x-load/files/x-loader-03.00.00.01.tar.gz create mode 100644 recipes/x-load/files/xload-shiva.diff create mode 100644 recipes/x-load/x-load-1.41/0013-board.c-print-boot-method-mmc-onenand-nand.patch create mode 100644 recipes/x-load/x-load-1.41/0014-board.c-check-for-u-boot-on-mmc-on-all-configurati.patch create mode 100644 recipes/x-load/x-load-1.41/0015-OMAP3EVM-Build-issue-fixed.patch create mode 100644 recipes/x-load/x-load-1.41/0016-mmc-fix-infinite-loop-in-mmc_init_stream.patch create mode 100644 recipes/x-load/x-load-1.41/0017-lib-board.c-add-missing-call-to-misc_init_r.patch create mode 100644 recipes/x-load/x-load-1.41/0018-omap3evm-provide-missing-udelay-function.patch create mode 100644 recipes/x-load/x-load-1.41/0019-lib-board.c-Specify-where-u-boot-is-being-loaded-fr.patch create mode 100644 recipes/x-load/x-load-1.41/streen-fix.diff create mode 100644 recipes/x-load/x-load_1.41.bb diff --git a/conf/machine/omap3517-evm.conf b/conf/machine/omap3517-evm.conf index a7ef4be0fd..4bbd25c718 100644 --- a/conf/machine/omap3517-evm.conf +++ b/conf/machine/omap3517-evm.conf @@ -27,6 +27,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-omap-psp" UBOOT_ARCH = "arm" UBOOT_MACHINE = "omap3517_evm_config" +XLOAD_MACHINE = "omap3517evm_config" MACHINE_FEATURES = "kernel26 apm usbgadget usbhost vfat ext2 screen touchscreen ethernet" diff --git a/recipes/x-load/files/x-loader-03.00.00.01.tar.gz b/recipes/x-load/files/x-loader-03.00.00.01.tar.gz new file mode 100755 index 0000000000000000000000000000000000000000..60930c68d2ae0f5ab7b7da40cfcf783dec0f5c2b GIT binary patch literal 166557 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 z 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 literal 0 HcmV?d00001 diff --git a/recipes/x-load/files/xload-shiva.diff b/recipes/x-load/files/xload-shiva.diff new file mode 100644 index 0000000000..d1535b682f --- /dev/null +++ b/recipes/x-load/files/xload-shiva.diff @@ -0,0 +1,2106 @@ +diff -Nurd git/Makefile x-load-shiva/Makefile +--- git/Makefile 2009-09-08 16:43:33.000000000 +0200 ++++ x-load-shiva/Makefile 2009-09-08 16:54:21.000000000 +0200 +@@ -156,6 +156,9 @@ + + @./mkconfig $(@:_config=) arm omap3 omap3530beagle + ++omap3517evm_config : unconfig ++ @./mkconfig $(@:_config=) arm omap3 omap3517evm ++ + ######################################################################### + + clean: +diff -Nurd git/board/omap3517evm/Makefile x-load-shiva/board/omap3517evm/Makefile +--- git/board/omap3517evm/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ x-load-shiva/board/omap3517evm/Makefile 2009-09-08 16:54:35.000000000 +0200 +@@ -0,0 +1,47 @@ ++# ++# (C) Copyright 2000, 2001, 2002 ++# Wolfgang Denk, DENX Software Engineering, wd@denx.de. ++# ++# See file CREDITS for list of people who contributed to this ++# 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; either version 2 of ++# the License, or (at your option) any later version. ++# ++# 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., 59 Temple Place, Suite 330, Boston, ++# MA 02111-1307 USA ++# ++ ++include $(TOPDIR)/config.mk ++ ++LIB = lib$(BOARD).a ++ ++OBJS := omap3517evm.o ++SOBJS := platform.o ++ ++$(LIB): $(OBJS) $(SOBJS) ++ $(AR) crv $@ $^ ++ ++clean: ++ rm -f $(SOBJS) $(OBJS) ++ ++distclean: clean ++ rm -f $(LIB) core *.bak .depend ++ ++######################################################################### ++ ++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) ++ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ ++ ++-include .depend ++ ++######################################################################### +diff -Nurd git/board/omap3517evm/config.mk x-load-shiva/board/omap3517evm/config.mk +--- git/board/omap3517evm/config.mk 1970-01-01 01:00:00.000000000 +0100 ++++ x-load-shiva/board/omap3517evm/config.mk 2009-09-08 16:56:20.000000000 +0200 +@@ -0,0 +1,19 @@ ++# (C) Copyright 2009 ++# Texas Instruments, ++# ++# OMAP3517EVM board uses OMAP3517 'shiva' (ARM-CortexA8) cpu ++# see http://www.ti.com/ for more information on Texas Instruments# ++# ++# OMAP3517EVM has 1 bank of 128MB mPOP-SDRAM on CS0 ++# Physical Address: ++# 8000'0000 (bank0) ++ ++# For use if you want X-Loader to relocate from SRAM to DDR ++#TEXT_BASE = 0x80e80000 ++ ++# For XIP in 64K of SRAM or debug (GP device has it all availabe) ++# SRAM 40200000-4020FFFF base ++# initial stack at 0x4020fffc used in s_init (below xloader). ++# The run time stack is (above xloader, 2k below) ++# If any globals exist there needs to be room for them also ++TEXT_BASE = 0x40200800 +diff -Nurd git/board/omap3517evm/omap3517evm.c x-load-shiva/board/omap3517evm/omap3517evm.c +--- git/board/omap3517evm/omap3517evm.c 1970-01-01 01:00:00.000000000 +0100 ++++ x-load-shiva/board/omap3517evm/omap3517evm.c 2009-09-08 18:25:17.000000000 +0200 +@@ -0,0 +1,943 @@ ++/* ++ * (C) Copyright 2009 ++ * Texas Instruments, ++ * Manikandan Pillai ++ * This file is copied from board/omap3evm/omap3evm.c ++ * ++ * See file CREDITS for list of people who contributed to this ++ * 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; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * 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., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* Used to index into DPLL parameter tables */ ++struct dpll_param { ++ unsigned int m; ++ unsigned int n; ++ unsigned int fsel; ++ unsigned int m2; ++}; ++ ++typedef struct dpll_param dpll_param; ++ ++#define MAX_SIL_INDEX 3 ++ ++/* Definitions for EMIF4 configuration values */ ++#define EMIF4_TIM1_T_RP 0x3 ++#define EMIF4_TIM1_T_RCD 0x3 ++#define EMIF4_TIM1_T_WR 0x3 ++#define EMIF4_TIM1_T_RAS 0x8 ++#define EMIF4_TIM1_T_RC 0xA ++#define EMIF4_TIM1_T_RRD 0x2 ++#define EMIF4_TIM1_T_WTR 0x2 ++ ++#define EMIF4_TIM2_T_XP 0x2 ++#define EMIF4_TIM2_T_ODT 0x0 ++#define EMIF4_TIM2_T_XSNR 0x1C ++#define EMIF4_TIM2_T_XSRD 0xC8 ++#define EMIF4_TIM2_T_RTP 0x1 ++#define EMIF4_TIM2_T_CKE 0x2 ++ ++#define EMIF4_TIM3_T_TDQSCKMAX 0x0 ++#define EMIF4_TIM3_T_RFC 0x25 ++#define EMIF4_TIM3_T_RAS_MAX 0x7 ++ ++#define EMIF4_PWR_IDLE 0x2 ++#define EMIF4_PWR_DPD_EN 0x0 ++#define EMIF4_PWR_PM_EN 0x0 ++#define EMIF4_PWR_PM_TIM 0x0 ++ ++#define EMIF4_INITREF_DIS 0x0 ++#define EMIF4_PASR 0x0 ++#define EMIF4_REFRESH_RATE 0x50F ++ ++/* ++ * SDRAM Config register ++ */ ++#define EMIF4_CFG_SDRAM_TYP 0x2 ++#define EMIF4_CFG_IBANK_POS 0x0 ++#define EMIF4_CFG_DDR_TERM 0x0 ++#define EMIF4_CFG_DDR2_DDQS 0x1 ++#define EMIF4_CFG_DYN_ODT 0x0 ++#define EMIF4_CFG_DDR_DIS_DLL 0x0 ++#define EMIF4_CFG_SDR_DRV 0x0 ++#define EMIF4_CFG_CWL 0x0 ++#define EMIF4_CFG_NARROW_MD 0x0 ++#define EMIF4_CFG_CL 0x5 ++#define EMIF4_CFG_ROWSIZE 0x0 ++#define EMIF4_CFG_IBANK 0x3 ++#define EMIF4_CFG_EBANK 0x0 ++#define EMIF4_CFG_PGSIZE 0x2 ++ ++/* ++ * EMIF4 PHY Control 1 register configuration ++ */ ++#define EMIF4_DDR1_RD_LAT 0x6 ++#define EMIF4_DDR1_PWRDN_DIS 0x1 ++#define EMIF4_DDR1_STRBEN_EXT 0x1 ++#define EMIF4_DDR1_DLL_MODE 0x0 ++#define EMIF4_DDR1_VTP_DYN 0x1 ++#define EMIF4_DDR1_LB_CK_SEL 0x0 ++ ++/* ++ * EMIF4 PHY Control 2 register configuration ++ */ ++#define EMIF4_DDR2_TX_DATA_ALIGN 0x0 ++#define EMIF4_DDR2_RX_DLL_BYPASS 0x0 ++ ++/* Following functions are exported from lowlevel_init.S */ ++extern dpll_param *get_mpu_dpll_param(void); ++#if 0 ++extern dpll_param *get_iva_dpll_param(void); ++#endif ++extern dpll_param *get_core_dpll_param(void); ++extern dpll_param *get_per_dpll_param(void); ++ ++extern int mmc_init(int verbose); ++extern block_dev_desc_t *mmc_get_dev(int dev); ++ ++#define __raw_readl(a) (*(volatile unsigned int *)(a)) ++#define __raw_writel(v,a) (*(volatile unsigned int *)(a) = (v)) ++#define __raw_readw(a) (*(volatile unsigned short *)(a)) ++#define __raw_writew(v,a) (*(volatile unsigned short *)(a) = (v)) ++ ++/******************************************************* ++ * Routine: delay ++ * Description: spinning delay to use before udelay works ++ ******************************************************/ ++static inline void delay(unsigned long loops) ++{ ++ __asm__ volatile ("1:\n" "subs %0, %1, #1\n" ++ "bne 1b":"=r" (loops):"0"(loops)); ++} ++ ++void udelay (unsigned long usecs) { ++ delay(usecs); ++} ++ ++/***************************************** ++ * Routine: board_init ++ * Description: Early hardware init. ++ *****************************************/ ++int board_init (void) ++{ ++ return 0; ++} ++ ++/************************************************************* ++ * get_device_type(): tell if GP/HS/EMU/TST ++ *************************************************************/ ++u32 get_device_type(void) ++{ ++ int mode; ++ mode = __raw_readl(CONTROL_STATUS) & (DEVICE_MASK); ++ return(mode >>= 8); ++} ++ ++/************************************************ ++ * get_sysboot_value(void) - return SYS_BOOT[4:0] ++ ************************************************/ ++u32 get_sysboot_value(void) ++{ ++ int mode; ++ mode = __raw_readl(CONTROL_STATUS) & (SYSBOOT_MASK); ++ return mode; ++} ++/************************************************************* ++ * Routine: get_mem_type(void) - returns the kind of memory connected ++ * to GPMC that we are trying to boot form. Uses SYS BOOT settings. ++ *************************************************************/ ++u32 get_mem_type(void) ++{ ++ u32 mem_type = get_sysboot_value(); ++ switch (mem_type){ ++ case 0: ++ case 2: ++ case 4: ++ case 16: ++ case 22: return GPMC_ONENAND; ++ ++ case 1: ++ case 12: ++ case 15: ++ case 21: ++ case 27: return GPMC_NAND; ++ ++ case 3: ++ case 6: return MMC_ONENAND; ++ ++ case 8: ++ case 11: ++ case 14: ++ case 20: ++ case 26: return GPMC_MDOC; ++ ++ case 17: ++ case 18: ++ case 24: return MMC_NAND; ++ ++ case 7: ++ case 10: ++ case 13: ++ case 19: ++ case 25: ++ default: return GPMC_NOR; ++ } ++} ++ ++/****************************************** ++ * get_cpu_rev(void) - extract version info ++ ******************************************/ ++u32 get_cpu_rev(void) ++{ ++ u32 cpuid=0; ++ /* On ES1.0 the IDCODE register is not exposed on L4 ++ * so using CPU ID to differentiate ++ * between ES2.0 and ES1.0. ++ */ ++ __asm__ __volatile__("mrc p15, 0, %0, c0, c0, 0":"=r" (cpuid)); ++ if((cpuid & 0xf) == 0x0) ++ return CPU_3430_ES1; ++ else ++ return CPU_3430_ES2; ++ ++} ++ ++/***************************************************************** ++ * sr32 - clear & set a value in a bit range for a 32 bit address ++ *****************************************************************/ ++void sr32(u32 addr, u32 start_bit, u32 num_bits, u32 value) ++{ ++ u32 tmp, msk = 0; ++ msk = 1 << num_bits; ++ --msk; ++ tmp = __raw_readl(addr) & ~(msk << start_bit); ++ tmp |= value << start_bit; ++ __raw_writel(tmp, addr); ++} ++ ++/********************************************************************* ++ * wait_on_value() - common routine to allow waiting for changes in ++ * volatile regs. ++ *********************************************************************/ ++u32 wait_on_value(u32 read_bit_mask, u32 match_value, u32 read_addr, u32 bound) ++{ ++ u32 i = 0, val; ++ do { ++ ++i; ++ val = __raw_readl(read_addr) & read_bit_mask; ++ if (val == match_value) ++ return (1); ++ if (i == bound) ++ return (0); ++ } while (1); ++} ++ ++/********************************************************************* ++ * config_emif4_ddr() - Init/Configure DDR on OMAP3517 EVM board. ++ *********************************************************************/ ++void config_emif4_ddr(void) ++{ ++ unsigned int regval; ++ ++ /* Set the DDR PHY parameters in PHY ctrl registers */ ++ regval = (EMIF4_DDR1_RD_LAT | (EMIF4_DDR1_PWRDN_DIS << 6) | ++ (EMIF4_DDR1_STRBEN_EXT << 7) | (EMIF4_DDR1_DLL_MODE << 12) | ++ (EMIF4_DDR1_VTP_DYN << 15) | (EMIF4_DDR1_LB_CK_SEL << 23)); ++ __raw_writel(regval, EMIF4_DDR_PHYCTL1); ++ __raw_writel(regval, EMIF4_DDR_PHYCTL1_SHDW); ++ ++ regval = (EMIF4_DDR2_TX_DATA_ALIGN | (EMIF4_DDR2_RX_DLL_BYPASS << 1)); ++ __raw_writel(regval, EMIF4_DDR_PHYCTL2); ++ ++ /* Reset the DDR PHY and wait till completed */ ++ sr32(EMIF4_IODFT_TLGC, 10, 1, 1); ++ /*Wait till that bit clears*/ ++ while ((__raw_readl(EMIF4_IODFT_TLGC) & BIT10) == 0x1); ++ /*Re-verify the DDR PHY status*/ ++ while ((__raw_readl(EMIF4_SDRAM_STS) & BIT2) == 0x0); ++ ++ sr32(EMIF4_IODFT_TLGC, 0, 1, 1); ++ /* Set SDR timing registers */ ++ regval = (EMIF4_TIM1_T_WTR | (EMIF4_TIM1_T_RRD << 3) | ++ (EMIF4_TIM1_T_RC << 6) | (EMIF4_TIM1_T_RAS << 12) | ++ (EMIF4_TIM1_T_WR << 17) | (EMIF4_TIM1_T_RCD << 21) | ++ (EMIF4_TIM1_T_RP << 25)); ++ __raw_writel(regval, EMIF4_SDRAM_TIM1); ++ __raw_writel(regval, EMIF4_SDRAM_TIM1_SHDW); ++ ++ regval = (EMIF4_TIM2_T_CKE | (EMIF4_TIM2_T_RTP << 3) | ++ (EMIF4_TIM2_T_XSRD << 6) | (EMIF4_TIM2_T_XSNR << 16) | ++ (EMIF4_TIM2_T_ODT << 25) | (EMIF4_TIM2_T_XP << 28)); ++ __raw_writel(regval, EMIF4_SDRAM_TIM2); ++ __raw_writel(regval, EMIF4_SDRAM_TIM2_SHDW); ++ ++ regval = (EMIF4_TIM3_T_RAS_MAX | (EMIF4_TIM3_T_RFC << 4) | ++ (EMIF4_TIM3_T_TDQSCKMAX << 13)); ++ __raw_writel(regval, EMIF4_SDRAM_TIM3); ++ __raw_writel(regval, EMIF4_SDRAM_TIM3_SHDW); ++ ++ /* Set the PWR control register */ ++ regval = (EMIF4_PWR_PM_TIM | (EMIF4_PWR_PM_EN << 8) | ++ (EMIF4_PWR_DPD_EN << 10) | (EMIF4_PWR_IDLE << 30)); ++ __raw_writel(regval, EMIF4_PWR_MGT_CTRL); ++ __raw_writel(regval, EMIF4_PWR_MGT_CTRL_SHDW); ++ ++ /* Set the DDR refresh rate control register */ ++ regval = (EMIF4_REFRESH_RATE | (EMIF4_PASR << 24) | ++ (EMIF4_INITREF_DIS << 31)); ++ __raw_writel(regval, EMIF4_SDRAM_RFCR); ++ __raw_writel(regval, EMIF4_SDRAM_RFCR_SHDW); ++ ++ /* set the SDRAM configuration register */ ++ regval = (EMIF4_CFG_PGSIZE | (EMIF4_CFG_EBANK << 3) | ++ (EMIF4_CFG_IBANK << 4) | (EMIF4_CFG_ROWSIZE << 7) | ++ (EMIF4_CFG_CL << 10) | (EMIF4_CFG_NARROW_MD << 14) | ++ (EMIF4_CFG_CWL << 16) | (EMIF4_CFG_SDR_DRV << 18) | ++ (EMIF4_CFG_DDR_DIS_DLL << 20) | (EMIF4_CFG_DYN_ODT << 21) | ++ (EMIF4_CFG_DDR2_DDQS << 23) | (EMIF4_CFG_DDR_TERM << 24) | ++ (EMIF4_CFG_IBANK_POS << 27) | (EMIF4_CFG_SDRAM_TYP << 29)); ++ __raw_writel(regval, EMIF4_SDRAM_CFG); ++} ++ ++/************************************************************* ++ * get_sys_clk_speed - determine reference oscillator speed ++ * based on known 32kHz clock and gptimer. ++ *************************************************************/ ++u32 get_osc_clk_speed(void) ++{ ++ u32 start, cstart, cend, cdiff, val; ++ ++ val = __raw_readl(PRM_CLKSRC_CTRL); ++ /* If SYS_CLK is being divided by 2, remove for now */ ++ val = (val & (~BIT7)) | BIT6; ++ __raw_writel(val, PRM_CLKSRC_CTRL); ++ ++ /* enable timer2 */ ++ val = __raw_readl(CM_CLKSEL_WKUP) | BIT0; ++ __raw_writel(val, CM_CLKSEL_WKUP); /* select sys_clk for GPT1 */ ++ ++ /* Enable I and F Clocks for GPT1 */ ++ val = __raw_readl(CM_ICLKEN_WKUP) | BIT0 | BIT2; ++ __raw_writel(val, CM_ICLKEN_WKUP); ++ val = __raw_readl(CM_FCLKEN_WKUP) | BIT0; ++ __raw_writel(val, CM_FCLKEN_WKUP); ++ ++ __raw_writel(0, OMAP34XX_GPT1 + TLDR); /* start counting at 0 */ ++ __raw_writel(GPT_EN, OMAP34XX_GPT1 + TCLR); /* enable clock */ ++ /* enable 32kHz source *//* enabled out of reset */ ++ /* determine sys_clk via gauging */ ++ ++ start = 20 + __raw_readl(S32K_CR); /* start time in 20 cycles */ ++ while (__raw_readl(S32K_CR) < start); /* dead loop till start time */ ++ cstart = __raw_readl(OMAP34XX_GPT1 + TCRR); /* get start sys_clk count */ ++ while (__raw_readl(S32K_CR) < (start + 20)); /* wait for 40 cycles */ ++ cend = __raw_readl(OMAP34XX_GPT1 + TCRR); /* get end sys_clk count */ ++ cdiff = cend - cstart; /* get elapsed ticks */ ++ ++ /* based on number of ticks assign speed */ ++ if (cdiff > 19000) ++ return (S38_4M); ++ else if (cdiff > 15200) ++ return (S26M); ++ else if (cdiff > 13000) ++ return (S24M); ++ else if (cdiff > 9000) ++ return (S19_2M); ++ else if (cdiff > 7600) ++ return (S13M); ++ else ++ return (S12M); ++} ++ ++/****************************************************************************** ++ * get_sys_clkin_sel() - returns the sys_clkin_sel field value based on ++ * -- input oscillator clock frequency. ++ * ++ *****************************************************************************/ ++void get_sys_clkin_sel(u32 osc_clk, u32 *sys_clkin_sel) ++{ ++ if(osc_clk == S38_4M) ++ *sys_clkin_sel= 4; ++ else if(osc_clk == S26M) ++ *sys_clkin_sel = 3; ++ else if(osc_clk == S19_2M) ++ *sys_clkin_sel = 2; ++ else if(osc_clk == S13M) ++ *sys_clkin_sel = 1; ++ else if(osc_clk == S12M) ++ *sys_clkin_sel = 0; ++} ++ ++/****************************************************************************** ++ * prcm_init() - inits clocks for PRCM as defined in clocks.h ++ * -- called from SRAM, or Flash (using temp SRAM stack). ++ *****************************************************************************/ ++void prcm_init(void) ++{ ++ u32 osc_clk=0, sys_clkin_sel; ++ dpll_param *dpll_param_p; ++ u32 clk_index, sil_index; ++ ++ /* Gauge the input clock speed and find out the sys_clkin_sel ++ * value corresponding to the input clock. ++ */ ++ osc_clk = get_osc_clk_speed(); ++ get_sys_clkin_sel(osc_clk, &sys_clkin_sel); ++ ++ sr32(PRM_CLKSEL, 0, 3, sys_clkin_sel); /* set input crystal speed */ ++ ++ /* If the input clock is greater than 19.2M always divide/2 */ ++ if(sys_clkin_sel > 2) { ++ sr32(PRM_CLKSRC_CTRL, 6, 2, 2);/* input clock divider */ ++ clk_index = sys_clkin_sel/2; ++ } else { ++ sr32(PRM_CLKSRC_CTRL, 6, 2, 1);/* input clock divider */ ++ clk_index = sys_clkin_sel; ++ } ++ ++ /* The DPLL tables are defined according to sysclk value and ++ * silicon revision. The clk_index value will be used to get ++ * the values for that input sysclk from the DPLL param table ++ * and sil_index will get the values for that SysClk for the ++ * appropriate silicon rev. ++ */ ++ sil_index = get_cpu_rev() - 1; ++ ++ /* Unlock MPU DPLL (slows things down, and needed later) */ ++ sr32(CM_CLKEN_PLL_MPU, 0, 3, PLL_LOW_POWER_BYPASS); ++ wait_on_value(BIT0, 0, CM_IDLEST_PLL_MPU, LDELAY); ++ ++ /* Getting the base address of Core DPLL param table*/ ++ dpll_param_p = (dpll_param *)get_core_dpll_param(); ++ /* Moving it to the right sysclk and ES rev base */ ++ dpll_param_p = dpll_param_p + 2*clk_index + sil_index; ++ /* CORE DPLL */ ++ /* sr32(CM_CLKSEL2_EMU) set override to work when asleep */ ++ sr32(CM_CLKEN_PLL, 0, 3, PLL_FAST_RELOCK_BYPASS); ++ wait_on_value(BIT0, 0, CM_IDLEST_CKGEN, LDELAY); ++ sr32(CM_CLKSEL1_EMU, 16, 5, CORE_M3X2); /* m3x2 */ ++ sr32(CM_CLKSEL1_PLL, 27, 2, dpll_param_p->m2); /* Set M2 */ ++ sr32(CM_CLKSEL1_PLL, 16, 11, dpll_param_p->m); /* Set M */ ++ sr32(CM_CLKSEL1_PLL, 8, 7, dpll_param_p->n); /* Set N */ ++ sr32(CM_CLKSEL1_PLL, 6, 1, 0); /* 96M Src */ ++ sr32(CM_CLKSEL_CORE, 2, 2, CORE_L4_DIV); /* l4 */ ++ sr32(CM_CLKSEL_CORE, 0, 2, CORE_L3_DIV); /* l3 */ ++ sr32(CM_CLKSEL_WKUP, 1, 2, WKUP_RSM); /* reset mgr */ ++ sr32(CM_CLKEN_PLL, 4, 4, dpll_param_p->fsel); /* FREQSEL */ ++ sr32(CM_CLKEN_PLL, 0, 3, PLL_LOCK); /* lock mode */ ++ wait_on_value(BIT0, 1, CM_IDLEST_CKGEN, LDELAY); ++ ++ /* Getting the base address to PER DPLL param table*/ ++ dpll_param_p = (dpll_param *)get_per_dpll_param(); ++ /* Moving it to the right sysclk base */ ++ dpll_param_p = dpll_param_p + clk_index; ++ /* PER DPLL */ ++ sr32(CM_CLKEN_PLL, 16, 3, PLL_STOP); ++ wait_on_value(BIT1, 0, CM_IDLEST_CKGEN, LDELAY); ++ sr32(CM_CLKSEL1_EMU, 24, 5, PER_M6X2); /* set M6 */ ++ sr32(CM_CLKSEL_CAM, 0, 5, PER_M5X2); /* set M5 */ ++ sr32(CM_CLKSEL_DSS, 0, 5, PER_M4X2); /* set M4 */ ++ sr32(CM_CLKSEL_DSS, 8, 5, PER_M3X2); /* set M3 */ ++ sr32(CM_CLKSEL3_PLL, 0, 5, dpll_param_p->m2); /* set M2 */ ++ sr32(CM_CLKSEL2_PLL, 8, 11, dpll_param_p->m); /* set m */ ++ sr32(CM_CLKSEL2_PLL, 0, 7, dpll_param_p->n); /* set n */ ++ sr32(CM_CLKEN_PLL, 20, 4, dpll_param_p->fsel);/* FREQSEL */ ++ sr32(CM_CLKEN_PLL, 16, 3, PLL_LOCK); /* lock mode */ ++ wait_on_value(BIT1, 2, CM_IDLEST_CKGEN, LDELAY); ++ ++ /* Getting the base address to MPU DPLL param table*/ ++ dpll_param_p = (dpll_param *)get_mpu_dpll_param(); ++ /* Moving it to the right sysclk and ES rev base */ ++ dpll_param_p = dpll_param_p + 2*clk_index + sil_index; ++ /* MPU DPLL (unlocked already) */ ++ sr32(CM_CLKSEL2_PLL_MPU, 0, 5, dpll_param_p->m2); /* Set M2 */ ++ sr32(CM_CLKSEL1_PLL_MPU, 8, 11, dpll_param_p->m); /* Set M */ ++ sr32(CM_CLKSEL1_PLL_MPU, 0, 7, dpll_param_p->n); /* Set N */ ++ sr32(CM_CLKEN_PLL_MPU, 4, 4, dpll_param_p->fsel); /* FREQSEL */ ++ sr32(CM_CLKEN_PLL_MPU, 0, 3, PLL_LOCK); /* lock mode */ ++ wait_on_value(BIT0, 1, CM_IDLEST_PLL_MPU, LDELAY); ++ ++ /* Set up GPTimers to sys_clk source only */ ++ sr32(CM_CLKSEL_PER, 0, 8, 0xff); ++ sr32(CM_CLKSEL_WKUP, 0, 1, 1); ++ ++ delay(5000); ++} ++ ++/***************************************** ++ * Routine: secure_unlock ++ * Description: Setup security registers for access ++ * (GP Device only) ++ *****************************************/ ++void secure_unlock(void) ++{ ++ /* Permission values for registers -Full fledged permissions to all */ ++ #define UNLOCK_1 0xFFFFFFFF ++ #define UNLOCK_2 0x00000000 ++ #define UNLOCK_3 0x0000FFFF ++ /* Protection Module Register Target APE (PM_RT)*/ ++ __raw_writel(UNLOCK_1, RT_REQ_INFO_PERMISSION_1); ++ __raw_writel(UNLOCK_1, RT_READ_PERMISSION_0); ++ __raw_writel(UNLOCK_1, RT_WRITE_PERMISSION_0); ++ __raw_writel(UNLOCK_2, RT_ADDR_MATCH_1); ++ ++ __raw_writel(UNLOCK_3, GPMC_REQ_INFO_PERMISSION_0); ++ __raw_writel(UNLOCK_3, GPMC_READ_PERMISSION_0); ++ __raw_writel(UNLOCK_3, GPMC_WRITE_PERMISSION_0); ++ ++ __raw_writel(UNLOCK_3, OCM_REQ_INFO_PERMISSION_0); ++ __raw_writel(UNLOCK_3, OCM_READ_PERMISSION_0); ++ __raw_writel(UNLOCK_3, OCM_WRITE_PERMISSION_0); ++ __raw_writel(UNLOCK_2, OCM_ADDR_MATCH_2); ++ ++ __raw_writel(UNLOCK_1, SMS_RG_ATT0); /* SDRC region 0 public */ ++} ++ ++/********************************************************** ++ * Routine: try_unlock_sram() ++ * Description: If chip is GP type, unlock the SRAM for ++ * general use. ++ ***********************************************************/ ++void try_unlock_memory(void) ++{ ++ int mode; ++ ++ /* if GP device unlock device SRAM for general use */ ++ /* secure code breaks for Secure/Emulation device - HS/E/T*/ ++ mode = get_device_type(); ++ if (mode == GP_DEVICE) { ++ secure_unlock(); ++ } ++ return; ++} ++ ++/********************************************************** ++ * Routine: s_init ++ * Description: Does early system init of muxing and clocks. ++ * - Called at time when only stack is available. ++ **********************************************************/ ++ ++void s_init(void) ++{ ++ watchdog_init(); ++#ifdef CONFIG_3430_AS_3410 ++ /* setup the scalability control register for ++ * 3430 to work in 3410 mode ++ */ ++ __raw_writel(0x5ABF,CONTROL_SCALABLE_OMAP_OCP); ++#endif ++ try_unlock_memory(); ++ set_muxconf_regs(); ++ delay(100); ++ prcm_init(); ++ per_clocks_enable(); ++ ++ /* enable the DDRPHY clk */ ++ sr32((OMAP34XX_CTRL_BASE + 0x588), 15, 15, 0x1); ++ /* enable the EMIF4 clk */ ++ sr32((OMAP34XX_CTRL_BASE + 0x588), 14, 14, 0x1); ++ /* Enable the peripheral clocks */ ++ sr32((OMAP34XX_CTRL_BASE + 0x59C), 0, 4, 0xF); ++ sr32((OMAP34XX_CTRL_BASE + 0x59C), 8, 10, 0x7); ++ ++ /* bring cpgmac out of reset */ ++ sr32((OMAP34XX_CTRL_BASE + 0x598), 1, 1, 0x1); ++ ++ /* Configure the EMIF4 for our DDR */ ++ config_emif4_ddr(); ++} ++ ++/******************************************************* ++ * Routine: misc_init_r ++ * Description: Init ethernet (done here so udelay works) ++ ********************************************************/ ++int misc_init_r (void) ++{ ++ return(0); ++} ++ ++/****************************************************** ++ * Routine: wait_for_command_complete ++ * Description: Wait for posting to finish on watchdog ++ ******************************************************/ ++void wait_for_command_complete(unsigned int wd_base) ++{ ++ int pending = 1; ++ do { ++ pending = __raw_readl(wd_base + WWPS); ++ } while (pending); ++} ++ ++/**************************************** ++ * Routine: watchdog_init ++ * Description: Shut down watch dogs ++ *****************************************/ ++void watchdog_init(void) ++{ ++ /* There are 3 watch dogs WD1=Secure, WD2=MPU, WD3=IVA. WD1 is ++ * either taken care of by ROM (HS/EMU) or not accessible (GP). ++ * We need to take care of WD2-MPU or take a PRCM reset. WD3 ++ * should not be running and does not generate a PRCM reset. ++ */ ++ sr32(CM_FCLKEN_WKUP, 5, 1, 1); ++ sr32(CM_ICLKEN_WKUP, 5, 1, 1); ++ wait_on_value(BIT5, 0x20, CM_IDLEST_WKUP, 5); /* some issue here */ ++ ++ __raw_writel(WD_UNLOCK1, WD2_BASE + WSPR); ++ wait_for_command_complete(WD2_BASE); ++ __raw_writel(WD_UNLOCK2, WD2_BASE + WSPR); ++} ++ ++/********************************************** ++ * Routine: dram_init ++ * Description: sets uboots idea of sdram size ++ **********************************************/ ++int dram_init (void) ++{ ++ return 0; ++} ++ ++/***************************************************************** ++ * Routine: peripheral_enable ++ * Description: Enable the clks & power for perifs (GPT2, UART1,...) ++ ******************************************************************/ ++void per_clocks_enable(void) ++{ ++ /* Enable GP2 timer. */ ++ sr32(CM_CLKSEL_PER, 0, 1, 0x1); /* GPT2 = sys clk */ ++ sr32(CM_ICLKEN_PER, 3, 1, 0x1); /* ICKen GPT2 */ ++ sr32(CM_FCLKEN_PER, 3, 1, 0x1); /* FCKen GPT2 */ ++ ++#ifdef CFG_NS16550 ++ /* Enable UART1 clocks */ ++ sr32(CM_FCLKEN1_CORE, 13, 1, 0x1); ++ sr32(CM_ICLKEN1_CORE, 13, 1, 0x1); ++ ++ /* Enable UART2 clocks */ ++ sr32(CM_FCLKEN1_CORE, 14, 1, 0x1); ++ sr32(CM_ICLKEN1_CORE, 14, 1, 0x1); ++ ++ /* Enable UART2 clocks */ ++ sr32(CM_FCLKEN_PER, 11, 1, 0x1); ++ sr32(CM_ICLKEN_PER, 11, 1, 0x1); ++#endif ++ /* Enable MMC1 clocks */ ++ sr32(CM_FCLKEN1_CORE, 24, 1, 0x1); ++ sr32(CM_ICLKEN1_CORE, 24, 1, 0x1); ++ ++ /* Enable MMC2 clocks */ ++ sr32(CM_FCLKEN1_CORE, 25, 1, 0x1); ++ sr32(CM_ICLKEN1_CORE, 25, 1, 0x1); ++ ++ delay(1000); ++} ++ ++/* Set MUX for UART, GPMC, SDRC, GPIO */ ++ ++#define MUX_VAL(OFFSET,VALUE)\ ++ __raw_writew((VALUE), OMAP34XX_CTRL_BASE + (OFFSET)); ++ ++#define CP(x) (CONTROL_PADCONF_##x) ++/* ++ * IEN - Input Enable ++ * IDIS - Input Disable ++ * PTD - Pull type Down ++ * PTU - Pull type Up ++ * DIS - Pull type selection is inactive ++ * EN - Pull type selection is active ++ * M0 - Mode 0 ++ * The commented string gives the final mux configuration for that pin ++ */ ++#define MUX_DEFAULT()\ ++ MUX_VAL(CP(SDRC_D0), (IEN | PTD | DIS | M0)) /*SDRC_D0*/\ ++ MUX_VAL(CP(SDRC_D1), (IEN | PTD | DIS | M0)) /*SDRC_D1*/\ ++ MUX_VAL(CP(SDRC_D2), (IEN | PTD | DIS | M0)) /*SDRC_D2*/\ ++ MUX_VAL(CP(SDRC_D3), (IEN | PTD | DIS | M0)) /*SDRC_D3*/\ ++ MUX_VAL(CP(SDRC_D4), (IEN | PTD | DIS | M0)) /*SDRC_D4*/\ ++ MUX_VAL(CP(SDRC_D5), (IEN | PTD | DIS | M0)) /*SDRC_D5*/\ ++ MUX_VAL(CP(SDRC_D6), (IEN | PTD | DIS | M0)) /*SDRC_D6*/\ ++ MUX_VAL(CP(SDRC_D7), (IEN | PTD | DIS | M0)) /*SDRC_D7*/\ ++ MUX_VAL(CP(SDRC_D8), (IEN | PTD | DIS | M0)) /*SDRC_D8*/\ ++ MUX_VAL(CP(SDRC_D9), (IEN | PTD | DIS | M0)) /*SDRC_D9*/\ ++ MUX_VAL(CP(SDRC_D10), (IEN | PTD | DIS | M0)) /*SDRC_D10*/\ ++ MUX_VAL(CP(SDRC_D11), (IEN | PTD | DIS | M0)) /*SDRC_D11*/\ ++ MUX_VAL(CP(SDRC_D12), (IEN | PTD | DIS | M0)) /*SDRC_D12*/\ ++ MUX_VAL(CP(SDRC_D13), (IEN | PTD | DIS | M0)) /*SDRC_D13*/\ ++ MUX_VAL(CP(SDRC_D14), (IEN | PTD | DIS | M0)) /*SDRC_D14*/\ ++ MUX_VAL(CP(SDRC_D15), (IEN | PTD | DIS | M0)) /*SDRC_D15*/\ ++ MUX_VAL(CP(SDRC_D16), (IEN | PTD | DIS | M0)) /*SDRC_D16*/\ ++ MUX_VAL(CP(SDRC_D17), (IEN | PTD | DIS | M0)) /*SDRC_D17*/\ ++ MUX_VAL(CP(SDRC_D18), (IEN | PTD | DIS | M0)) /*SDRC_D18*/\ ++ MUX_VAL(CP(SDRC_D19), (IEN | PTD | DIS | M0)) /*SDRC_D19*/\ ++ MUX_VAL(CP(SDRC_D20), (IEN | PTD | DIS | M0)) /*SDRC_D20*/\ ++ MUX_VAL(CP(SDRC_D21), (IEN | PTD | DIS | M0)) /*SDRC_D21*/\ ++ MUX_VAL(CP(SDRC_D22), (IEN | PTD | DIS | M0)) /*SDRC_D22*/\ ++ MUX_VAL(CP(SDRC_D23), (IEN | PTD | DIS | M0)) /*SDRC_D23*/\ ++ MUX_VAL(CP(SDRC_D24), (IEN | PTD | DIS | M0)) /*SDRC_D24*/\ ++ MUX_VAL(CP(SDRC_D25), (IEN | PTD | DIS | M0)) /*SDRC_D25*/\ ++ MUX_VAL(CP(SDRC_D26), (IEN | PTD | DIS | M0)) /*SDRC_D26*/\ ++ MUX_VAL(CP(SDRC_D27), (IEN | PTD | DIS | M0)) /*SDRC_D27*/\ ++ MUX_VAL(CP(SDRC_D28), (IEN | PTD | DIS | M0)) /*SDRC_D28*/\ ++ MUX_VAL(CP(SDRC_D29), (IEN | PTD | DIS | M0)) /*SDRC_D29*/\ ++ MUX_VAL(CP(SDRC_D30), (IEN | PTD | DIS | M0)) /*SDRC_D30*/\ ++ MUX_VAL(CP(SDRC_D31), (IEN | PTD | DIS | M0)) /*SDRC_D31*/\ ++ MUX_VAL(CP(SDRC_CLK), (IEN | PTD | DIS | M0)) /*SDRC_CLK*/\ ++ MUX_VAL(CP(SDRC_DQS0), (IEN | PTD | DIS | M0)) /*SDRC_DQS0*/\ ++ MUX_VAL(CP(SDRC_DQS1), (IEN | PTD | DIS | M0)) /*SDRC_DQS1*/\ ++ MUX_VAL(CP(SDRC_DQS2), (IEN | PTD | DIS | M0)) /*SDRC_DQS2*/\ ++ MUX_VAL(CP(SDRC_DQS3), (IEN | PTD | DIS | M0)) /*SDRC_DQS3*/\ ++ MUX_VAL(CP(sdrc_cke0), (M0)) /*SDRC_CKE0*/\ ++ MUX_VAL(CP(sdrc_cke1), (M0)) /*SDRC_CKE1*/\ ++ MUX_VAL(CP(GPMC_A1), (IDIS | PTD | DIS | M0)) /*GPMC_A1*/\ ++ MUX_VAL(CP(GPMC_A2), (IDIS | PTD | DIS | M0)) /*GPMC_A2*/\ ++ MUX_VAL(CP(GPMC_A3), (IDIS | PTD | DIS | M0)) /*GPMC_A3*/\ ++ MUX_VAL(CP(GPMC_A4), (IDIS | PTD | DIS | M0)) /*GPMC_A4*/\ ++ MUX_VAL(CP(GPMC_A5), (IDIS | PTD | DIS | M0)) /*GPMC_A5*/\ ++ MUX_VAL(CP(GPMC_A6), (IDIS | PTD | DIS | M0)) /*GPMC_A6*/\ ++ MUX_VAL(CP(GPMC_A7), (IDIS | PTD | DIS | M0)) /*GPMC_A7*/\ ++ MUX_VAL(CP(GPMC_A8), (IDIS | PTD | DIS | M0)) /*GPMC_A8*/\ ++ MUX_VAL(CP(GPMC_A9), (IDIS | PTD | DIS | M0)) /*GPMC_A9*/\ ++ MUX_VAL(CP(GPMC_A10), (IDIS | PTD | DIS | M0)) /*GPMC_A10*/\ ++ MUX_VAL(CP(GPMC_D0), (IEN | PTD | DIS | M0)) /*GPMC_D0*/\ ++ MUX_VAL(CP(GPMC_D1), (IEN | PTD | DIS | M0)) /*GPMC_D1*/\ ++ MUX_VAL(CP(GPMC_D2), (IEN | PTD | DIS | M0)) /*GPMC_D2*/\ ++ MUX_VAL(CP(GPMC_D3), (IEN | PTD | DIS | M0)) /*GPMC_D3*/\ ++ MUX_VAL(CP(GPMC_D4), (IEN | PTD | DIS | M0)) /*GPMC_D4*/\ ++ MUX_VAL(CP(GPMC_D5), (IEN | PTD | DIS | M0)) /*GPMC_D5*/\ ++ MUX_VAL(CP(GPMC_D6), (IEN | PTD | DIS | M0)) /*GPMC_D6*/\ ++ MUX_VAL(CP(GPMC_D7), (IEN | PTD | DIS | M0)) /*GPMC_D7*/\ ++ MUX_VAL(CP(GPMC_D8), (IEN | PTD | DIS | M0)) /*GPMC_D8*/\ ++ MUX_VAL(CP(GPMC_D9), (IEN | PTD | DIS | M0)) /*GPMC_D9*/\ ++ MUX_VAL(CP(GPMC_D10), (IEN | PTD | DIS | M0)) /*GPMC_D10*/\ ++ MUX_VAL(CP(GPMC_D11), (IEN | PTD | DIS | M0)) /*GPMC_D11*/\ ++ MUX_VAL(CP(GPMC_D12), (IEN | PTD | DIS | M0)) /*GPMC_D12*/\ ++ MUX_VAL(CP(GPMC_D13), (IEN | PTD | DIS | M0)) /*GPMC_D13*/\ ++ MUX_VAL(CP(GPMC_D14), (IEN | PTD | DIS | M0)) /*GPMC_D14*/\ ++ MUX_VAL(CP(GPMC_D15), (IEN | PTD | DIS | M0)) /*GPMC_D15*/\ ++ MUX_VAL(CP(GPMC_nCS0), (IDIS | PTU | EN | M0)) /*GPMC_nCS0*/\ ++ MUX_VAL(CP(GPMC_nCS1), (IDIS | PTU | EN | M0)) /*GPMC_nCS1*/\ ++ MUX_VAL(CP(GPMC_nCS2), (IDIS | PTU | EN | M0)) /*GPMC_nCS2*/\ ++ MUX_VAL(CP(GPMC_nCS3), (IDIS | PTU | EN | M0)) /*GPMC_nCS3*/\ ++ MUX_VAL(CP(GPMC_nCS4), (IDIS | PTU | EN | M0)) /*GPMC_nCS4*/\ ++ MUX_VAL(CP(GPMC_nCS5), (IDIS | PTU | EN | M0)) /*GPMC_nCS5*/\ ++ MUX_VAL(CP(GPMC_nCS6), (IDIS | PTU | EN | M0)) /*GPMC_nCS6*/\ ++ MUX_VAL(CP(GPMC_nCS7), (IDIS | PTU | EN | M0)) /*GPMC_nCS7*/\ ++ MUX_VAL(CP(GPMC_CLK), (IDIS | PTD | DIS | M0)) /*GPMC_CLK*/\ ++ MUX_VAL(CP(GPMC_nADV_ALE), (IDIS | PTD | DIS | M0)) /*GPMC_nADV_ALE*/\ ++ MUX_VAL(CP(GPMC_nOE), (IDIS | PTD | DIS | M0)) /*GPMC_nOE*/\ ++ MUX_VAL(CP(GPMC_nWE), (IDIS | PTD | DIS | M0)) /*GPMC_nWE*/\ ++ MUX_VAL(CP(GPMC_nBE0_CLE), (IDIS | PTD | DIS | M0)) /*GPMC_nBE0_CLE*/\ ++ MUX_VAL(CP(GPMC_nBE1), (IDIS | PTD | DIS | M4)) /*GPIO_61*/\ ++ MUX_VAL(CP(GPMC_nWP), (IEN | PTD | DIS | M0)) /*GPMC_nWP*/\ ++ MUX_VAL(CP(GPMC_WAIT0), (IEN | PTU | EN | M0)) /*GPMC_WAIT0*/\ ++ MUX_VAL(CP(GPMC_WAIT1), (IEN | PTU | EN | M0)) /*GPMC_WAIT1*/\ ++ MUX_VAL(CP(GPMC_WAIT2), (IEN | PTU | EN | M4)) /*GPIO_64*/\ ++ MUX_VAL(CP(GPMC_WAIT3), (IEN | PTU | EN | M4)) /*GPIO_65*/\ ++ MUX_VAL(CP(DSS_DATA18), (IEN | PTD | DIS | M4)) /*GPIO_88*/\ ++ MUX_VAL(CP(DSS_DATA19), (IEN | PTD | DIS | M4)) /*GPIO_89*/\ ++ MUX_VAL(CP(DSS_DATA20), (IEN | PTD | DIS | M4)) /*GPIO_90*/\ ++ MUX_VAL(CP(DSS_DATA21), (IEN | PTD | DIS | M4)) /*GPIO_91*/\ ++ MUX_VAL(CP(CAM_WEN), (IEN | PTD | DIS | M4)) /*GPIO_167*/\ ++ MUX_VAL(CP(UART3_TX_IRTX), (IDIS | PTD | DIS | M0)) /*UART1_TX*/\ ++ MUX_VAL(CP(UART3_RTS_SD), (IDIS | PTD | DIS | M0)) /*UART1_RTS*/\ ++ MUX_VAL(CP(UART3_CTS_RCTX), (IEN | PTU | DIS | M0)) /*UART1_CTS*/\ ++ MUX_VAL(CP(UART3_RX_IRRX), (IEN | PTD | DIS | M0)) /*UART1_RX*/\ ++ /*Expansion card */\ ++ MUX_VAL(CP(MMC1_CLK), (IEN | PTU | EN | M0)) /*MMC1_CLK*/\ ++ MUX_VAL(CP(MMC1_CMD), (IEN | PTU | DIS | M0)) /*MMC1_CMD*/\ ++ MUX_VAL(CP(MMC1_DAT0), (IEN | PTU | DIS | M0)) /*MMC1_DAT0*/\ ++ MUX_VAL(CP(MMC1_DAT1), (IEN | PTU | DIS | M0)) /*MMC1_DAT1*/\ ++ MUX_VAL(CP(MMC1_DAT2), (IEN | PTU | DIS | M0)) /*MMC1_DAT2*/\ ++ MUX_VAL(CP(MMC1_DAT3), (IEN | PTU | DIS | M0)) /*MMC1_DAT3*/\ ++ MUX_VAL(CP(MMC1_DAT4), (IEN | PTU | DIS | M0)) /*MMC1_DAT4*/\ ++ MUX_VAL(CP(MMC1_DAT5), (IEN | PTU | DIS | M0)) /*MMC1_DAT5*/\ ++ MUX_VAL(CP(MMC1_DAT6), (IEN | PTU | DIS | M0)) /*MMC1_DAT6*/\ ++ MUX_VAL(CP(MMC1_DAT7), (IEN | PTU | DIS | M0)) /*MMC1_DAT7*/\ ++ MUX_VAL(CP(McBSP1_DX), (IEN | PTD | DIS | M4)) /*GPIO_158*/\ ++ MUX_VAL(CP(SYS_32K), (IEN | PTD | DIS | M0)) /*SYS_32K*/\ ++ MUX_VAL(CP(SYS_BOOT0), (IEN | PTD | DIS | M4)) /*GPIO_2 */\ ++ MUX_VAL(CP(SYS_BOOT1), (IEN | PTD | DIS | M4)) /*GPIO_3 */\ ++ MUX_VAL(CP(SYS_BOOT2), (IEN | PTD | DIS | M4)) /*GPIO_4 */\ ++ MUX_VAL(CP(SYS_BOOT3), (IEN | PTD | DIS | M4)) /*GPIO_5 */\ ++ MUX_VAL(CP(SYS_BOOT4), (IEN | PTD | DIS | M4)) /*GPIO_6 */\ ++ MUX_VAL(CP(SYS_BOOT5), (IEN | PTD | DIS | M4)) /*GPIO_7 */\ ++ MUX_VAL(CP(SYS_BOOT6), (IEN | PTD | DIS | M4)) /*GPIO_8 */\ ++ MUX_VAL(CP(SYS_CLKOUT2), (IEN | PTU | EN | M4)) /*GPIO_186*/\ ++ MUX_VAL(CP(JTAG_nTRST), (IEN | PTD | DIS | M0)) /*JTAG_nTRST*/\ ++ MUX_VAL(CP(JTAG_TCK), (IEN | PTD | DIS | M0)) /*JTAG_TCK*/\ ++ MUX_VAL(CP(JTAG_TMS), (IEN | PTD | DIS | M0)) /*JTAG_TMS*/\ ++ MUX_VAL(CP(JTAG_TDI), (IEN | PTD | DIS | M0)) /*JTAG_TDI*/\ ++ MUX_VAL(CP(JTAG_EMU0), (IEN | PTD | DIS | M0)) /*JTAG_EMU0*/\ ++ MUX_VAL(CP(JTAG_EMU1), (IEN | PTD | DIS | M0)) /*JTAG_EMU1*/\ ++ MUX_VAL(CP(ETK_CLK), (IEN | PTD | DIS | M4)) /*GPIO_12*/\ ++ MUX_VAL(CP(ETK_CTL), (IEN | PTD | DIS | M4)) /*GPIO_13*/\ ++ MUX_VAL(CP(ETK_D0 ), (IEN | PTD | DIS | M4)) /*GPIO_14*/\ ++ MUX_VAL(CP(ETK_D1 ), (IEN | PTD | DIS | M4)) /*GPIO_15*/\ ++ MUX_VAL(CP(ETK_D2 ), (IEN | PTD | DIS | M4)) /*GPIO_16*/\ ++ MUX_VAL(CP(ETK_D10), (IEN | PTD | DIS | M4)) /*GPIO_24*/\ ++ MUX_VAL(CP(ETK_D11), (IEN | PTD | DIS | M4)) /*GPIO_25*/\ ++ MUX_VAL(CP(ETK_D12), (IEN | PTD | DIS | M4)) /*GPIO_26*/\ ++ MUX_VAL(CP(ETK_D13), (IEN | PTD | DIS | M4)) /*GPIO_27*/\ ++ MUX_VAL(CP(ETK_D14), (IEN | PTD | DIS | M4)) /*GPIO_28*/\ ++ MUX_VAL(CP(ETK_D15), (IEN | PTD | DIS | M4)) /*GPIO_29*/ ++ ++/********************************************************** ++ * Routine: set_muxconf_regs ++ * Description: Setting up the configuration Mux registers ++ * specific to the hardware. Many pins need ++ * to be moved from protect to primary mode. ++ *********************************************************/ ++void set_muxconf_regs(void) ++{ ++ MUX_DEFAULT(); ++} ++ ++/********************************************************** ++ * Routine: nand+_init ++ * Description: Set up nand for nand and jffs2 commands ++ *********************************************************/ ++ ++int nand_init(void) ++{ ++ /* global settings */ ++ __raw_writel(0x10, GPMC_SYSCONFIG); /* smart idle */ ++ __raw_writel(0x0, GPMC_IRQENABLE); /* isr's sources masked */ ++ __raw_writel(0, GPMC_TIMEOUT_CONTROL);/* timeout disable */ ++ ++ /* Set the GPMC Vals . For NAND boot on 3430SDP, NAND is mapped at CS0 ++ * , NOR at CS1 and MPDB at CS3. And oneNAND boot, we map oneNAND at CS0. ++ * We configure only GPMC CS0 with required values. Configiring other devices ++ * at other CS in done in u-boot anyway. So we don't have to bother doing it here. ++ */ ++ __raw_writel(0 , GPMC_CONFIG7 + GPMC_CONFIG_CS0); ++ delay(1000); ++ ++ if ((get_mem_type() == GPMC_NAND) || (get_mem_type() == MMC_NAND)){ ++ __raw_writel( M_NAND_GPMC_CONFIG1, GPMC_CONFIG1 + GPMC_CONFIG_CS0); ++ __raw_writel( M_NAND_GPMC_CONFIG2, GPMC_CONFIG2 + GPMC_CONFIG_CS0); ++ __raw_writel( M_NAND_GPMC_CONFIG3, GPMC_CONFIG3 + GPMC_CONFIG_CS0); ++ __raw_writel( M_NAND_GPMC_CONFIG4, GPMC_CONFIG4 + GPMC_CONFIG_CS0); ++ __raw_writel( M_NAND_GPMC_CONFIG5, GPMC_CONFIG5 + GPMC_CONFIG_CS0); ++ __raw_writel( M_NAND_GPMC_CONFIG6, GPMC_CONFIG6 + GPMC_CONFIG_CS0); ++ ++ /* Enable the GPMC Mapping */ ++ __raw_writel(( ((OMAP34XX_GPMC_CS0_SIZE & 0xF)<<8) | ++ ((NAND_BASE_ADR>>24) & 0x3F) | ++ (1<<6) ), (GPMC_CONFIG7 + GPMC_CONFIG_CS0)); ++ delay(2000); ++ ++ if (nand_chip()){ ++#ifdef CFG_PRINTF ++ printf("Unsupported NAND Chip!\n"); ++#endif ++ return 1; ++ } ++ ++ } ++ ++ if ((get_mem_type() == GPMC_ONENAND) || (get_mem_type() == MMC_ONENAND)){ ++ __raw_writel( ONENAND_GPMC_CONFIG1, GPMC_CONFIG1 + GPMC_CONFIG_CS0); ++ __raw_writel( ONENAND_GPMC_CONFIG2, GPMC_CONFIG2 + GPMC_CONFIG_CS0); ++ __raw_writel( ONENAND_GPMC_CONFIG3, GPMC_CONFIG3 + GPMC_CONFIG_CS0); ++ __raw_writel( ONENAND_GPMC_CONFIG4, GPMC_CONFIG4 + GPMC_CONFIG_CS0); ++ __raw_writel( ONENAND_GPMC_CONFIG5, GPMC_CONFIG5 + GPMC_CONFIG_CS0); ++ __raw_writel( ONENAND_GPMC_CONFIG6, GPMC_CONFIG6 + GPMC_CONFIG_CS0); ++ ++ /* Enable the GPMC Mapping */ ++ __raw_writel(( ((OMAP34XX_GPMC_CS0_SIZE & 0xF)<<8) | ++ ((ONENAND_BASE>>24) & 0x3F) | ++ (1<<6) ), (GPMC_CONFIG7 + GPMC_CONFIG_CS0)); ++ delay(2000); ++ ++ if (onenand_chip()){ ++#ifdef CFG_PRINTF ++ printf("OneNAND Unsupported !\n"); ++#endif ++ return 1; ++ } ++ } ++ return 0; ++} ++ ++ ++typedef int (mmc_boot_addr) (void); ++int mmc_boot(unsigned char *buf) ++{ ++ ++ long size = 0; ++#ifdef CFG_CMD_FAT ++ block_dev_desc_t *dev_desc = NULL; ++ unsigned char ret = 0; ++ ++ printf("Starting X-loader on MMC \n"); ++ ++ ret = mmc_init(1); ++ if(ret == 0){ ++ printf("\n MMC init failed \n"); ++ return 0; ++ } ++ ++ dev_desc = mmc_get_dev(0); ++ fat_register_device(dev_desc, 1); ++ size = file_fat_read("u-boot.bin", buf, 0); ++ if (size == -1) { ++ return 0; ++ } ++ printf("\n%ld Bytes Read from MMC \n", size); ++ ++ printf("Starting OS Bootloader from MMC...\n"); ++#endif ++ return size; ++} ++ ++/* optionally do something like blinking LED */ ++void board_hang (void) ++{ while (0) {};} ++ ++/****************************************************************************** ++ ++ * Dummy function to handle errors for EABI incompatibility ++ ++ *****************************************************************************/ ++ ++void raise(void) ++{ ++} ++ ++ ++/****************************************************************************** ++ ++ * Dummy function to handle errors for EABI incompatibility ++ ++ *****************************************************************************/ ++ ++void abort(void) ++{ ++} ++ ++ +diff -Nurd git/board/omap3517evm/platform.S x-load-shiva/board/omap3517evm/platform.S +--- git/board/omap3517evm/platform.S 1970-01-01 01:00:00.000000000 +0100 ++++ x-load-shiva/board/omap3517evm/platform.S 2009-09-08 16:54:36.000000000 +0200 +@@ -0,0 +1,435 @@ ++/* ++ * Board specific setup info ++ * ++ * (C) Copyright 2004-2006 ++ * Texas Instruments, ++ * Richard Woodruff ++ * ++ * See file CREDITS for list of people who contributed to this ++ * 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; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * 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., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++#include ++#include ++#include ++#include ++ ++_TEXT_BASE: ++ .word TEXT_BASE /* sdram load addr from config.mk */ ++ ++#if !defined(CFG_NAND_BOOT) && !defined(CFG_NAND_BOOT) ++/************************************************************************** ++ * cpy_clk_code: relocates clock code into SRAM where its safer to execute ++ * R1 = SRAM destination address. ++ *************************************************************************/ ++.global cpy_clk_code ++ cpy_clk_code: ++ /* Copy DPLL code into SRAM */ ++ adr r0, go_to_speed /* get addr of clock setting code */ ++ mov r2, #384 /* r2 size to copy (div by 32 bytes) */ ++ mov r1, r1 /* r1 <- dest address (passed in) */ ++ add r2, r2, r0 /* r2 <- source end address */ ++next2: ++ ldmia r0!, {r3-r10} /* copy from source address [r0] */ ++ stmia r1!, {r3-r10} /* copy to target address [r1] */ ++ cmp r0, r2 /* until source end address [r2] */ ++ bne next2 ++ mov pc, lr /* back to caller */ ++ ++/* **************************************************************************** ++ * NOTE: 3430 X-loader currently does not use this code. ++* It could be removed its is kept for compatabily with u-boot. ++ * ++ * go_to_speed: -Moves to bypass, -Commits clock dividers, -puts dpll at speed ++ * -executed from SRAM. ++ * R0 = CM_CLKEN_PLL-bypass value ++ * R1 = CM_CLKSEL1_PLL-m, n, and divider values ++ * R2 = CM_CLKSEL_CORE-divider values ++ * R3 = CM_IDLEST_CKGEN - addr dpll lock wait ++ * ++ * Note: If core unlocks/relocks and SDRAM is running fast already it gets ++ * confused. A reset of the controller gets it back. Taking away its ++ * L3 when its not in self refresh seems bad for it. Normally, this code ++ * runs from flash before SDR is init so that should be ok. ++ ******************************************************************************/ ++.global go_to_speed ++ go_to_speed: ++ stmfd sp!, {r4-r6} ++ ++ /* move into fast relock bypass */ ++ ldr r4, pll_ctl_add ++ str r0, [r4] ++wait1: ++ ldr r5, [r3] /* get status */ ++ and r5, r5, #0x1 /* isolate core status */ ++ cmp r5, #0x1 /* still locked? */ ++ beq wait1 /* if lock, loop */ ++ ++ /* set new dpll dividers _after_ in bypass */ ++ ldr r5, pll_div_add1 ++ str r1, [r5] /* set m, n, m2 */ ++ ldr r5, pll_div_add2 ++ str r2, [r5] /* set l3/l4/.. dividers*/ ++ ldr r5, pll_div_add3 /* wkup */ ++ ldr r2, pll_div_val3 /* rsm val */ ++ str r2, [r5] ++ ldr r5, pll_div_add4 /* gfx */ ++ ldr r2, pll_div_val4 ++ str r2, [r5] ++ ldr r5, pll_div_add5 /* emu */ ++ ldr r2, pll_div_val5 ++ str r2, [r5] ++ ++ /* now prepare GPMC (flash) for new dpll speed */ ++ /* flash needs to be stable when we jump back to it */ ++ ldr r5, flash_cfg3_addr ++ ldr r2, flash_cfg3_val ++ str r2, [r5] ++ ldr r5, flash_cfg4_addr ++ ldr r2, flash_cfg4_val ++ str r2, [r5] ++ ldr r5, flash_cfg5_addr ++ ldr r2, flash_cfg5_val ++ str r2, [r5] ++ ldr r5, flash_cfg1_addr ++ ldr r2, [r5] ++ orr r2, r2, #0x3 /* up gpmc divider */ ++ str r2, [r5] ++ ++ /* lock DPLL3 and wait a bit */ ++ orr r0, r0, #0x7 /* set up for lock mode */ ++ str r0, [r4] /* lock */ ++ nop /* ARM slow at this point working at sys_clk */ ++ nop ++ nop ++ nop ++wait2: ++ ldr r5, [r3] /* get status */ ++ and r5, r5, #0x1 /* isolate core status */ ++ cmp r5, #0x1 /* still locked? */ ++ bne wait2 /* if lock, loop */ ++ nop ++ nop ++ nop ++ nop ++ ldmfd sp!, {r4-r6} ++ mov pc, lr /* back to caller, locked */ ++ ++_go_to_speed: .word go_to_speed ++ ++/* these constants need to be close for PIC code */ ++/* The Nor has to be in the Flash Base CS0 for this condition to happen */ ++flash_cfg1_addr: ++ .word (GPMC_CONFIG_CS0 + GPMC_CONFIG1) ++flash_cfg3_addr: ++ .word (GPMC_CONFIG_CS0 + GPMC_CONFIG3) ++flash_cfg3_val: ++ .word STNOR_GPMC_CONFIG3 ++flash_cfg4_addr: ++ .word (GPMC_CONFIG_CS0 + GPMC_CONFIG4) ++flash_cfg4_val: ++ .word STNOR_GPMC_CONFIG4 ++flash_cfg5_val: ++ .word STNOR_GPMC_CONFIG5 ++flash_cfg5_addr: ++ .word (GPMC_CONFIG_CS0 + GPMC_CONFIG5) ++pll_ctl_add: ++ .word CM_CLKEN_PLL ++pll_div_add1: ++ .word CM_CLKSEL1_PLL ++pll_div_add2: ++ .word CM_CLKSEL_CORE ++pll_div_add3: ++ .word CM_CLKSEL_WKUP ++pll_div_val3: ++ .word (WKUP_RSM << 1) ++pll_div_add4: ++ .word CM_CLKSEL_GFX ++pll_div_val4: ++ .word (GFX_DIV << 0) ++pll_div_add5: ++ .word CM_CLKSEL1_EMU ++pll_div_val5: ++ .word CLSEL1_EMU_VAL ++ ++#endif ++ ++.globl lowlevel_init ++lowlevel_init: ++ ldr sp, SRAM_STACK ++ str ip, [sp] /* stash old link register */ ++ mov ip, lr /* save link reg across call */ ++ bl s_init /* go setup pll,mux,memory */ ++ ldr ip, [sp] /* restore save ip */ ++ mov lr, ip /* restore link reg */ ++ ++ /* back to arch calling code */ ++ mov pc, lr ++ ++ /* the literal pools origin */ ++ .ltorg ++ ++REG_CONTROL_STATUS: ++ .word CONTROL_STATUS ++SRAM_STACK: ++ .word LOW_LEVEL_SRAM_STACK ++ ++ ++/* DPLL(1-4) PARAM TABLES */ ++/* Each of the tables has M, N, FREQSEL, M2 values defined for nominal ++ * OPP (1.2V). The fields are defined according to dpll_param struct(clock.c). ++ * The values are defined for all possible sysclk and for ES1 and ES2. ++ */ ++ ++mpu_dpll_param: ++/* 12MHz */ ++/* ES1 */ ++.word 0x0FE ++.word 0x07 ++.word 0x05 ++.word 0x01 ++/* ES2 */ ++.word 0x0FA ++.word 0x05 ++.word 0x07 ++.word 0x01 ++ ++/* 13MHz */ ++/* ES1 */ ++.word 0x17D ++.word 0x0C ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x1F4 ++.word 0x0C ++.word 0x03 ++.word 0x01 ++ ++/* 19.2MHz */ ++/* ES1 */ ++.word 0x179 ++.word 0x12 ++.word 0x04 ++.word 0x01 ++/* ES2 */ ++.word 0x271 ++.word 0x17 ++.word 0x03 ++.word 0x01 ++ ++/* 26MHz */ ++/* ES1 */ ++.word 0x17D ++.word 0x19 ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x0FA ++.word 0x0C ++.word 0x07 ++.word 0x01 ++ ++/* 38.4MHz */ ++/* ES1 */ ++.word 0x1FA ++.word 0x32 ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x271 ++.word 0x2F ++.word 0x03 ++.word 0x01 ++ ++ ++.globl get_mpu_dpll_param ++get_mpu_dpll_param: ++ adr r0, mpu_dpll_param ++ mov pc, lr ++ ++iva_dpll_param: ++/* 12MHz */ ++/* ES1 */ ++.word 0x07D ++.word 0x05 ++.word 0x07 ++.word 0x01 ++/* ES2 */ ++.word 0x0B4 ++.word 0x05 ++.word 0x07 ++.word 0x01 ++ ++/* 13MHz */ ++/* ES1 */ ++.word 0x0FA ++.word 0x0C ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x168 ++.word 0x0C ++.word 0x03 ++.word 0x01 ++ ++/* 19.2MHz */ ++/* ES1 */ ++.word 0x082 ++.word 0x09 ++.word 0x07 ++.word 0x01 ++/* ES2 */ ++.word 0x0E1 ++.word 0x0B ++.word 0x06 ++.word 0x01 ++ ++/* 26MHz */ ++/* ES1 */ ++.word 0x07D ++.word 0x0C ++.word 0x07 ++.word 0x01 ++/* ES2 */ ++.word 0x0B4 ++.word 0x0C ++.word 0x07 ++.word 0x01 ++ ++/* 38.4MHz */ ++/* ES1 */ ++.word 0x13F ++.word 0x30 ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x0E1 ++.word 0x17 ++.word 0x06 ++.word 0x01 ++ ++ ++.globl get_iva_dpll_param ++get_iva_dpll_param: ++ adr r0, iva_dpll_param ++ mov pc, lr ++ ++core_dpll_param: ++/* 12MHz */ ++/* ES1 */ ++.word 0x19F ++.word 0x0E ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x0A6 ++.word 0x05 ++.word 0x07 ++.word 0x01 ++ ++/* 13MHz */ ++/* ES1 */ ++.word 0x1B2 ++.word 0x10 ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x14C ++.word 0x0C ++.word 0x03 ++.word 0x01 ++ ++/* 19.2MHz */ ++/* ES1 */ ++.word 0x19F ++.word 0x17 ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x19F ++.word 0x17 ++.word 0x03 ++.word 0x01 ++ ++/* 26MHz */ ++/* ES1 */ ++.word 0x1B2 ++.word 0x21 ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x0A6 ++.word 0x0C ++.word 0x07 ++.word 0x01 ++ ++/* 38.4MHz */ ++/* ES1 */ ++.word 0x19F ++.word 0x2F ++.word 0x03 ++.word 0x01 ++/* ES2 */ ++.word 0x19F ++.word 0x2F ++.word 0x03 ++.word 0x01 ++ ++.globl get_core_dpll_param ++get_core_dpll_param: ++ adr r0, core_dpll_param ++ mov pc, lr ++ ++/* PER DPLL values are same for both ES1 and ES2 */ ++per_dpll_param: ++/* 12MHz */ ++.word 0xD8 ++.word 0x05 ++.word 0x07 ++.word 0x09 ++ ++/* 13MHz */ ++.word 0x1B0 ++.word 0x0C ++.word 0x03 ++.word 0x09 ++ ++/* 19.2MHz */ ++.word 0xE1 ++.word 0x09 ++.word 0x07 ++.word 0x09 ++ ++/* 26MHz */ ++.word 0xD8 ++.word 0x0C ++.word 0x07 ++.word 0x09 ++ ++/* 38.4MHz */ ++.word 0xE1 ++.word 0x13 ++.word 0x07 ++.word 0x09 ++ ++.globl get_per_dpll_param ++get_per_dpll_param: ++ adr r0, per_dpll_param ++ mov pc, lr ++ +diff -Nurd git/board/omap3517evm/x-load.lds x-load-shiva/board/omap3517evm/x-load.lds +--- git/board/omap3517evm/x-load.lds 1970-01-01 01:00:00.000000000 +0100 ++++ x-load-shiva/board/omap3517evm/x-load.lds 2009-09-08 16:55:24.000000000 +0200 +@@ -0,0 +1,54 @@ ++/* ++ * November 2006 - Changed to support 3430sdp device ++ * Copyright (c) 2004-2006 Texas Instruments ++ * ++ * (C) Copyright 2002 ++ * Gary Jennejohn, DENX Software Engineering, ++ * ++ * See file CREDITS for list of people who contributed to this ++ * 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; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * 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., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") ++OUTPUT_ARCH(arm) ++ENTRY(_start) ++SECTIONS ++{ ++ . = 0x00000000; ++ ++ . = ALIGN(4); ++ .text : ++ { ++ cpu/omap3/start.o (.text) ++ *(.text) ++ } ++ ++ . = ALIGN(4); ++ .rodata : { *(.rodata) } ++ ++ . = ALIGN(4); ++ .data : { *(.data) } ++ ++ . = ALIGN(4); ++ .got : { *(.got) } ++ ++ . = ALIGN(4); ++ __bss_start = .; ++ .bss : { *(.bss) } ++ _end = .; ++} +diff -Nurd git/drivers/Makefile x-load-shiva/drivers/Makefile +--- git/drivers/Makefile 2009-09-08 16:43:33.000000000 +0200 ++++ x-load-shiva/drivers/Makefile 2009-09-08 18:20:59.000000000 +0200 +@@ -48,6 +48,10 @@ + OBJS += k9f1g08r0a.o + endif + ++ifeq ($(BOARD), omap3517evm) ++OBJS += k9f1g08r0a.o ++endif ++ + ifeq ($(BOARD), omap2420h4) + OBJS += k9k1216.o + endif +diff -Nurd git/drivers/k9f1g08r0a.c x-load-shiva/drivers/k9f1g08r0a.c +--- git/drivers/k9f1g08r0a.c 2009-09-08 16:43:33.000000000 +0200 ++++ x-load-shiva/drivers/k9f1g08r0a.c 2009-09-09 15:46:22.000000000 +0200 +@@ -182,7 +182,11 @@ + NAND_DISABLE_CE(); + + if (get_cpu_rev() == CPU_3430_ES2) +- return (mfr != MT29F1G_MFR || !(id == MT29F1G_ID || id == MT29F2G_ID)); ++#if defined (CONFIG_OMAP34XX) || defined (CONFIG_OMAP3EVM) ++ return (mfr != MT29F1G_MFR || !(id == MT29F1G_ID || id == MT29F2G_ID)); ++#elif defined (CONFIG_OMAP3517EVM) || defined (CONFIG_OMAP3517TEB) ++ return (mfr != MT29F1G_MFR && !(id == MT29F1G_ID || id == MT29F2G_ID)); ++#endif + else + return (mfr != K9F1G08R0A_MFR || id != K9F1G08R0A_ID); + } +diff -Nurd git/include/asm/arch-omap3/cpu.h x-load-shiva/include/asm/arch-omap3/cpu.h +--- git/include/asm/arch-omap3/cpu.h 2009-09-08 16:43:33.000000000 +0200 ++++ x-load-shiva/include/asm/arch-omap3/cpu.h 2009-09-08 17:26:54.000000000 +0200 +@@ -24,7 +24,11 @@ + + #ifndef _OMAP34XX_CPU_H + #define _OMAP34XX_CPU_H ++#if defined (CONFIG_OMAP3517EVM) || defined (CONFIG_OMAP3517TEB) ++#include ++#elif defined (CONFIG_OMAP3430) + #include ++#endif + + /* Register offsets of common modules */ + /* Control */ +@@ -59,7 +63,12 @@ + #define GPMC_CONFIG (OMAP34XX_GPMC_BASE+0x50) + #define GPMC_STATUS (OMAP34XX_GPMC_BASE+0x54) + ++#if defined (CONFIG_OMAP34XX) || defined (CONFIG_OMAP3517EVM) + #define GPMC_CONFIG_CS0 (OMAP34XX_GPMC_BASE+0x60) ++#elif defined (CONFIG_OMAP3517TEB) ++#define GPMC_CONFIG_CS0 (OMAP34XX_GPMC_BASE+0xC0) ++#endif ++ + #define GPMC_CONFIG_WIDTH (0x30) + + #define GPMC_CONFIG1 (0x00) +@@ -142,6 +151,27 @@ + #define SMART_IDLE (0x2 << 3) + #define REF_ON_IDLE (0x1 << 6) + ++/* EMIF4 register */ ++#define EMIF4_BASE OMAP34XX_SDRC_BASE ++#define EMIF4_MOD_ID (EMIF4_BASE + 0x00) ++#define EMIF4_SDRAM_STS (EMIF4_BASE + 0x04) ++#define EMIF4_SDRAM_CFG (EMIF4_BASE + 0x08) ++#define EMIF4_SDRAM_RFCR (EMIF4_BASE + 0x10) ++#define EMIF4_SDRAM_RFCR_SHDW (EMIF4_BASE + 0x14) ++#define EMIF4_SDRAM_TIM1 (EMIF4_BASE + 0x18) ++#define EMIF4_SDRAM_TIM1_SHDW (EMIF4_BASE + 0x1C) ++#define EMIF4_SDRAM_TIM2 (EMIF4_BASE + 0x20) ++#define EMIF4_SDRAM_TIM2_SHDW (EMIF4_BASE + 0x24) ++#define EMIF4_SDRAM_TIM3 (EMIF4_BASE + 0x28) ++#define EMIF4_SDRAM_TIM3_SHDW (EMIF4_BASE + 0x2c) ++#define EMIF4_PWR_MGT_CTRL (EMIF4_BASE + 0x38) ++#define EMIF4_PWR_MGT_CTRL_SHDW (EMIF4_BASE + 0x3C) ++#define EMIF4_IODFT_TLGC (EMIF4_BASE + 0x60) ++#define EMIF4_DDR_PHYCTL1 (EMIF4_BASE + 0xE4) ++#define EMIF4_DDR_PHYCTL1_SHDW (EMIF4_BASE + 0xE8) ++#define EMIF4_DDR_PHYCTL2 (EMIF4_BASE + 0xEC) ++ ++ + /* timer regs offsets (32 bit regs) */ + #define TIDR 0x0 /* r */ + #define TIOCP_CFG 0x10 /* rw */ +diff -Nurd git/include/asm/arch-omap3/mem.h x-load-shiva/include/asm/arch-omap3/mem.h +--- git/include/asm/arch-omap3/mem.h 2009-09-08 16:43:33.000000000 +0200 ++++ x-load-shiva/include/asm/arch-omap3/mem.h 2009-09-08 17:26:54.000000000 +0200 +@@ -324,12 +324,31 @@ + # define SMNAND_GPMC_CONFIG5 0x010C1414 + # define SMNAND_GPMC_CONFIG6 0x00000A80 + ++#if defined (CONFIG_OMAP34xx) ++ + # define M_NAND_GPMC_CONFIG1 0x00001800 + # define M_NAND_GPMC_CONFIG2 SMNAND_GPMC_CONFIG2 + # define M_NAND_GPMC_CONFIG3 SMNAND_GPMC_CONFIG3 + # define M_NAND_GPMC_CONFIG4 SMNAND_GPMC_CONFIG4 + # define M_NAND_GPMC_CONFIG5 SMNAND_GPMC_CONFIG5 + # define M_NAND_GPMC_CONFIG6 SMNAND_GPMC_CONFIG6 ++ ++#elif defined (CONFIG_OMAP3517EVM) || defined (CONFIG_OMAP3517TEB) ++ ++#ifdef NAND_16BIT ++# define M_NAND_GPMC_CONFIG1 0x00001800 ++#else ++# define M_NAND_GPMC_CONFIG1 0x00000800 ++#endif ++# define M_NAND_GPMC_CONFIG2 0x00080800 ++# define M_NAND_GPMC_CONFIG3 0x00080800 ++# define M_NAND_GPMC_CONFIG4 0x06000600 ++# define M_NAND_GPMC_CONFIG5 0x00070808 ++# define M_NAND_GPMC_CONFIG6 0x000003cf ++# define M_NAND_GPMC_CONFIG7 0x00000848 ++ ++#endif ++ + # define STNOR_GPMC_CONFIG1 0x3 + # define STNOR_GPMC_CONFIG2 0x000f0f01 + # define STNOR_GPMC_CONFIG3 0x00050502 +@@ -353,6 +372,8 @@ + # define SMNAND_GPMC_CONFIG6 0x00000A80 + # define SMNAND_GPMC_CONFIG7 0x00000C44 + ++#if defined (CONFIG_OMAP34xx) ++ + # define M_NAND_GPMC_CONFIG1 0x00001800 + # define M_NAND_GPMC_CONFIG2 SMNAND_GPMC_CONFIG2 + # define M_NAND_GPMC_CONFIG3 SMNAND_GPMC_CONFIG3 +@@ -361,6 +382,23 @@ + # define M_NAND_GPMC_CONFIG6 SMNAND_GPMC_CONFIG6 + # define M_NAND_GPMC_CONFIG7 SMNAND_GPMC_CONFIG7 + ++#elif defined (CONFIG_OMAP3517EVM) || defined (CONFIG_OMAP3517TEB) ++ ++#ifdef NAND_16BIT ++# define M_NAND_GPMC_CONFIG1 0x00001800 ++#else ++# define M_NAND_GPMC_CONFIG1 0x00000800 ++#endif ++# define M_NAND_GPMC_CONFIG2 0x00080800 ++# define M_NAND_GPMC_CONFIG3 0x00080800 ++# define M_NAND_GPMC_CONFIG4 0x06000600 ++# define M_NAND_GPMC_CONFIG5 0x00070808 ++# define M_NAND_GPMC_CONFIG6 0x000003cf ++# define M_NAND_GPMC_CONFIG7 0x00000848 ++ ++#endif ++ ++ + # define STNOR_GPMC_CONFIG1 0x1203 + # define STNOR_GPMC_CONFIG2 0x00151501 + # define STNOR_GPMC_CONFIG3 0x00060602 +@@ -407,6 +445,8 @@ + # define SMNAND_GPMC_CONFIG6 0x1F0F0A80 + # define SMNAND_GPMC_CONFIG7 0x00000C44 + ++#if defined (CONFIG_OMAP34xx) ++ + # define M_NAND_GPMC_CONFIG1 0x00001800 + # define M_NAND_GPMC_CONFIG2 SMNAND_GPMC_CONFIG2 + # define M_NAND_GPMC_CONFIG3 SMNAND_GPMC_CONFIG3 +@@ -415,6 +455,23 @@ + # define M_NAND_GPMC_CONFIG6 SMNAND_GPMC_CONFIG6 + # define M_NAND_GPMC_CONFIG7 SMNAND_GPMC_CONFIG7 + ++#elif defined (CONFIG_OMAP3517EVM) || defined (CONFIG_OMAP3517TEB) ++ ++#ifdef NAND_16BIT ++# define M_NAND_GPMC_CONFIG1 0x00001800 ++#else ++# define M_NAND_GPMC_CONFIG1 0x00000800 ++#endif ++# define M_NAND_GPMC_CONFIG2 0x00080800 ++# define M_NAND_GPMC_CONFIG3 0x00080800 ++# define M_NAND_GPMC_CONFIG4 0x06000600 ++# define M_NAND_GPMC_CONFIG5 0x00070808 ++# define M_NAND_GPMC_CONFIG6 0x000003cf ++# define M_NAND_GPMC_CONFIG7 0x00000848 ++ ++#endif ++ ++ + # define STNOR_GPMC_CONFIG1 0x3 + # define STNOR_GPMC_CONFIG2 0x00151501 + # define STNOR_GPMC_CONFIG3 0x00060602 +diff -Nurd git/include/asm/arch-omap3/omap3.h x-load-shiva/include/asm/arch-omap3/omap3.h +--- git/include/asm/arch-omap3/omap3.h 1970-01-01 01:00:00.000000000 +0100 ++++ x-load-shiva/include/asm/arch-omap3/omap3.h 2009-09-08 17:26:54.000000000 +0200 +@@ -0,0 +1,134 @@ ++/* ++ * (C) Copyright 2006 ++ * Texas Instruments, ++ * Richard Woodruff ++ * Syed Mohammed Khasim ++ * ++ * See file CREDITS for list of people who contributed to this ++ * 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; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * 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., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++#ifndef _OMAP3_SYS_H_ ++#define _OMAP3_SYS_H_ ++ ++#include ++ ++/* ++ * OMAP3 specific Section ++ */ ++ ++/* Stuff on L3 Interconnect */ ++#define SMX_APE_BASE 0x68000000 ++ ++/* L3 Firewall */ ++#define A_REQINFOPERM0 (SMX_APE_BASE + 0x05048) ++#define A_READPERM0 (SMX_APE_BASE + 0x05050) ++#define A_WRITEPERM0 (SMX_APE_BASE + 0x05058) ++ ++/* GPMC */ ++#define OMAP34XX_GPMC_BASE (0x6E000000) ++ ++/* SMS */ ++#define OMAP34XX_SMS_BASE 0x6C000000 ++ ++/* SDRC */ ++#define OMAP34XX_SDRC_BASE 0x6D000000 ++ ++/* ++ * L4 Peripherals - L4 Wakeup and L4 Core now ++ */ ++#define OMAP34XX_CORE_L4_IO_BASE 0x48000000 ++ ++#define OMAP34XX_WAKEUP_L4_IO_BASE 0x48300000 ++ ++#define OMAP34XX_L4_PER 0x49000000 ++ ++#define OMAP34XX_L4_IO_BASE OMAP34XX_CORE_L4_IO_BASE ++ ++/* CONTROL */ ++#define OMAP34XX_CTRL_BASE (OMAP34XX_L4_IO_BASE+0x2000) ++ ++/* TAP information dont know for 3430*/ ++#define OMAP34XX_TAP_BASE (0x49000000) /*giving some junk for virtio */ ++ ++/* UART */ ++#define OMAP34XX_UART1 (OMAP34XX_L4_IO_BASE+0x6a000) ++#define OMAP34XX_UART2 (OMAP34XX_L4_IO_BASE+0x6c000) ++#define OMAP34XX_UART3 (OMAP34XX_L4_PER+0x20000) ++ ++/* General Purpose Timers */ ++#define OMAP34XX_GPT1 0x48318000 ++#define OMAP34XX_GPT2 0x49032000 ++#define OMAP34XX_GPT3 0x49034000 ++#define OMAP34XX_GPT4 0x49036000 ++#define OMAP34XX_GPT5 0x49038000 ++#define OMAP34XX_GPT6 0x4903A000 ++#define OMAP34XX_GPT7 0x4903C000 ++#define OMAP34XX_GPT8 0x4903E000 ++#define OMAP34XX_GPT9 0x49040000 ++#define OMAP34XX_GPT10 0x48086000 ++#define OMAP34XX_GPT11 0x48088000 ++#define OMAP34XX_GPT12 0x48304000 ++ ++/* WatchDog Timers (1 secure, 3 GP) */ ++#define WD1_BASE (0x4830C000) ++#define WD2_BASE (0x48314000) ++#define WD3_BASE (0x49030000) ++ ++/* 32KTIMER */ ++#define SYNC_32KTIMER_BASE (0x48320000) ++#define S32K_CR (SYNC_32KTIMER_BASE+0x10) ++ ++/* ++ * SDP3430 specific Section ++ */ ++ ++/* ++ * The 343x's chip selects are programmable. The mask ROM ++ * does configure CS0 to 0x08000000 before dispatch. So, if ++ * you want your code to live below that address, you have to ++ * be prepared to jump though hoops, to reset the base address. ++ * Same as in SDP3430 ++ */ ++/* base address for indirect vectors (internal boot mode) */ ++#define SRAM_OFFSET0 0x40000000 ++#define SRAM_OFFSET1 0x00200000 ++#define SRAM_OFFSET2 0x0000F800 ++#define SRAM_VECT_CODE (SRAM_OFFSET0|SRAM_OFFSET1|SRAM_OFFSET2) ++ ++#define LOW_LEVEL_SRAM_STACK 0x4020FFFC ++ ++/* ++ * TODO: Are they required for OMAP3517? ++ */ ++#if defined(CONFIG_3430SDP) || defined(CONFIG_OMAP3EVM) ++/* FPGA on Debug board.*/ ++#define ETH_CONTROL_REG (DEBUG_BASE+0x30b) ++#define LAN_RESET_REGISTER (DEBUG_BASE+0x1c) ++ ++#define DIP_SWITCH_INPUT_REG2 (DEBUG_BASE+0x60) ++#define LED_REGISTER (DEBUG_BASE+0x40) ++#define FPGA_REV_REGISTER (DEBUG_BASE+0x10) ++#define EEPROM_MAIN_BRD (DEBUG_BASE+0x10000+0x1800) ++#define EEPROM_CONN_BRD (DEBUG_BASE+0x10000+0x1900) ++#define EEPROM_UI_BRD (DEBUG_BASE+0x10000+0x1A00) ++#define EEPROM_MCAM_BRD (DEBUG_BASE+0x10000+0x1B00) ++#define ENHANCED_UI_EE_NAME "750-2075" ++#endif ++ ++#endif /* _OMAP3430_SYS_H_ */ +diff -Nurd git/include/asm/arch-omap3/omap3430.h x-load-shiva/include/asm/arch-omap3/omap3430.h +--- git/include/asm/arch-omap3/omap3430.h 2009-09-08 16:43:33.000000000 +0200 ++++ x-load-shiva/include/asm/arch-omap3/omap3430.h 2009-09-08 17:26:54.000000000 +0200 +@@ -138,4 +138,42 @@ + #define ENHANCED_UI_EE_NAME "750-2075" + #endif + ++#if defined (CONFIG_OMAP3517EVM) || defined (CONFIG_OMAP3517TEB) ++/* EMIF 4 replaces SDRC in OMAP3517 for DDR */ ++#define EMIF4_MOD_ID 0x00 ++#define EMIF4_STATUS 0x04 ++#define EMIF4_SDR_CONFIG 0x08 ++#define EMIF4_LPDDR2_CONFIF 0x0C ++#define EMIF4_SDR_REF_CTRL 0x10 ++#define EMIF4_SDR_REF_CTRL_SHDW 0x14 ++#define EMIF4_SDR_TIM1 0x18 ++#define EMIF4_SDR_TIM1_SHDW 0x1C ++#define EMIF4_SDR_TIM2 0x20 ++#define EMIF4_SDR_TIM2_SHDW 0x24 ++#define EMIF4_SDR_TIM3 0x28 ++#define EMIF4_SDR_TIM3_SHDW 0x2C ++#define EMIF4_LPDDR2_NVM_TIM 0x30 ++#define EMIF4_LPDDR2_NVM_TIM_SHDW 0x34 ++#define EMIF4_PWR_MGMT_CTRL 0x38 ++#define EMIF4_PWR_MGMT_CTRL_SHDW 0x3C ++#define EMIF4_LPDDR2_REG_DATA 0x40 ++#define EMIF4_LPDDR2_REG_CFG 0x50 ++#define EMIF4_OCP_CONFIG 0x54 ++#define EMIF4_OCP_CFG_VAL1 0x58 ++#define EMIF4_OCP_CFG_VAL2 0x5C ++#define EMIF4_PERF_CNT1 0x80 ++#define EMIF4_PERF_CNT2 0x84 ++#define EMIF4_PERF_CNT_CFG 0x88 ++#define EMIF4_PERF_CNT_SEL 0x8C ++#define EMIF4_PERF_CNT_TIM 0x90 ++#define EMIF4_IRQ_EOI 0xA0 ++#define EMIF4_IRQSTS_RAW 0xA4 ++#define EMIF4_IRQSTS 0xAC ++#define EMIF4_IRQEN_SET 0xB4 ++#define EMIF4_IRQEN_CLR 0xBC ++#define EMIF4_DDR_PHY_CTRL1 0xE4 ++#define EMIF4_DDR_PHY_CTRL1_SHDW 0xE8 ++#define EMIF4_DDR_PHY_CTRL2 0xEC ++#endif ++ + #endif /* _OMAP3430_SYS_H_ */ +diff -Nurd git/include/configs/omap3517evm.h x-load-shiva/include/configs/omap3517evm.h +--- git/include/configs/omap3517evm.h 1970-01-01 01:00:00.000000000 +0100 ++++ x-load-shiva/include/configs/omap3517evm.h 2009-09-08 18:29:29.000000000 +0200 +@@ -0,0 +1,200 @@ ++/* ++ * (C) Copyright 2009 ++ * Texas Instruments, ++ * Manikandan Pillai ++ * X-Loader Configuation settings for the OMAP3517EVM board. ++ * ++ * Derived from /include/configs/omap3evm.h ++ * ++ * See file CREDITS for list of people who contributed to this ++ * 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; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * 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., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++#ifndef __CONFIG_H ++#define __CONFIG_H ++ ++/* serial printf facility takes about 3.5K */ ++#define CFG_PRINTF ++ ++/* ++ * High Level Configuration Options ++ */ ++#define CONFIG_ARMCORTEXA8 1 /* This is an ARM V7 CPU core */ ++#define CONFIG_OMAP 1 /* in a TI OMAP core */ ++ ++#define CONFIG_OMAP3517EVM 1 /* working with OMAP3517 EVM */ ++//#define CONFIG_OMAP3517TEB 1 /* working with OMAP3517 TEB */ ++ ++/* Enable the below macro if MMC boot support is required */ ++#define CONFIG_MMC 1 ++#if defined(CONFIG_MMC) ++ #define CFG_CMD_MMC 1 ++ #define CFG_CMD_FAT 1 ++ #define CFG_I2C_SPEED 100000 ++ #define CFG_I2C_SLAVE 1 ++ #define CFG_I2C_BUS 0 ++ #define CFG_I2C_BUS_SELECT 1 ++ #define CONFIG_DRIVER_OMAP34XX_I2C 1 ++#endif ++ ++#include /* get chip and board defs */ ++ ++/* uncomment it if you need timer based udelay(). it takes about 250 bytes */ ++//#define CFG_UDELAY ++ ++/* Clock Defines */ ++#define V_OSCK 26000000 /* Clock output from T2 */ ++ ++#if (V_OSCK > 19200000) ++#define V_SCLK (V_OSCK >> 1) ++#else ++#define V_SCLK V_OSCK ++#endif ++ ++//#define PRCM_CLK_CFG2_266MHZ 1 /* VDD2=1.15v - 133MHz DDR */ ++#define PRCM_CLK_CFG2_332MHZ 1 /* VDD2=1.15v - 166MHz DDR */ ++#define PRCM_PCLK_OPP2 1 /* ARM=381MHz - VDD1=1.20v */ ++ ++# define NAND_BASE_ADR NAND_BASE /* NAND flash */ ++# define ONENAND_BASE ONENAND_MAP /* OneNand flash */ ++ ++#define OMAP34XX_GPMC_CS0_SIZE GPMC_SIZE_128M ++#define ONENAND_ADDR ONENAND_BASE /* physical address of OneNAND at CS0*/ ++ ++#ifdef CFG_PRINTF ++ ++#define CFG_NS16550 ++#define CFG_NS16550_SERIAL ++#define CFG_NS16550_REG_SIZE (-4) ++#define CFG_NS16550_CLK (48000000) ++#define CFG_NS16550_COM3 OMAP34XX_UART3 ++ ++/* ++ * select serial console configuration ++ */ ++#define CONFIG_SERIAL3 3 /* UART1 on OMAP3EVM */ ++#define CONFIG_CONS_INDEX 3 ++ ++#define CONFIG_BAUDRATE 115200 ++#define CFG_PBSIZE 256 ++ ++#endif /* CFG_PRINTF */ ++ ++/* ++ * Miscellaneous configurable options ++ */ ++#define CFG_LOADADDR 0x80008000 ++ ++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */ ++ ++/*----------------------------------------------------------------------- ++ * Stack sizes ++ * ++ * The stack sizes are set up in start.S using the settings below ++ */ ++#define CONFIG_STACKSIZE (128*1024) /* regular stack */ ++ ++/*----------------------------------------------------------------------- ++ * Board NAND Info. ++ */ ++ ++#define CFG_NAND_K9F1G08R0A /* Samsung 8-bit 128MB chip large page NAND chip*/ ++#define NAND_16BIT ++ ++/* NAND is partitioned: ++ * 0x00000000 - 0x0007FFFF Booting Image ++ * 0x00080000 - 0x0023FFFF U-Boot Image ++ * 0x00240000 - 0x0027FFFF U-Boot Env Data (X-loader doesn't care) ++ * 0x00280000 - 0x0077FFFF Kernel Image ++ * 0x00780000 - 0x08000000 depends on application ++ */ ++#define NAND_UBOOT_START 0x0080000 /* Leaving first 4 blocks for x-load */ ++#define NAND_UBOOT_END 0x0240000 /* Giving a space of 2 blocks = 256KB */ ++#define NAND_BLOCK_SIZE 0x20000 ++ ++#define GPMC_CONFIG (OMAP34XX_GPMC_BASE+0x50) ++ ++#if defined (CONFIG_OMAP3517EVM) ++#define GPMC_NAND_COMMAND_0 (OMAP34XX_GPMC_BASE+0x7C) ++#define GPMC_NAND_ADDRESS_0 (OMAP34XX_GPMC_BASE+0x80) ++#define GPMC_NAND_DATA_0 (OMAP34XX_GPMC_BASE+0x84) ++#elif defined (CONFIG_OMAP3517TEB) ++#define GPMC_NAND_COMMAND_0 (OMAP34XX_GPMC_BASE+0xDC) ++#define GPMC_NAND_ADDRESS_0 (OMAP34XX_GPMC_BASE+0xE0) ++#define GPMC_NAND_DATA_0 (OMAP34XX_GPMC_BASE+0xE4) ++#endif ++ ++#ifdef NAND_16BIT ++#define WRITE_NAND_COMMAND(d, adr) \ ++ do {*(volatile u16 *)GPMC_NAND_COMMAND_0 = d;} while(0) ++#define WRITE_NAND_ADDRESS(d, adr) \ ++ do {*(volatile u16 *)GPMC_NAND_ADDRESS_0 = d;} while(0) ++#define WRITE_NAND(d, adr) \ ++ do {*(volatile u16 *)GPMC_NAND_DATA_0 = d;} while(0) ++#define READ_NAND(adr) \ ++ (*(volatile u16 *)GPMC_NAND_DATA_0) ++#define NAND_WAIT_READY() ++#define NAND_WP_OFF() \ ++ do {*(volatile u32 *)(GPMC_CONFIG) |= 0x00000010;} while(0) ++#define NAND_WP_ON() \ ++ do {*(volatile u32 *)(GPMC_CONFIG) &= ~0x00000010;} while(0) ++ ++#else /* to support 8-bit NAND devices */ ++#define WRITE_NAND_COMMAND(d, adr) \ ++ do {*(volatile u8 *)GPMC_NAND_COMMAND_0 = d;} while(0) ++#define WRITE_NAND_ADDRESS(d, adr) \ ++ do {*(volatile u8 *)GPMC_NAND_ADDRESS_0 = d;} while(0) ++#define WRITE_NAND(d, adr) \ ++ do {*(volatile u8 *)GPMC_NAND_DATA_0 = d;} while(0) ++#define READ_NAND(adr) \ ++ (*(volatile u8 *)GPMC_NAND_DATA_0); ++#define NAND_WAIT_READY() ++#define NAND_WP_OFF() \ ++ do {*(volatile u32 *)(GPMC_CONFIG) |= 0x00000010;} while(0) ++#define NAND_WP_ON() \ ++ do {*(volatile u32 *)(GPMC_CONFIG) &= ~0x00000010;} while(0) ++ ++#endif ++ ++#define NAND_CTL_CLRALE(adr) ++#define NAND_CTL_SETALE(adr) ++#define NAND_CTL_CLRCLE(adr) ++#define NAND_CTL_SETCLE(adr) ++#define NAND_DISABLE_CE() ++#define NAND_ENABLE_CE() ++ ++/*----------------------------------------------------------------------- ++ * Board oneNAND Info. ++ */ ++#define CFG_SYNC_BURST_READ 1 ++ ++/* OneNAND is partitioned: ++ * 0x0000000 - 0x0080000 X-Loader ++ * 0x0080000 - 0x0240000 U-boot Image ++ * 0x0240000 - 0x0280000 U-Boot Env Data (X-loader doesn't care) ++ * 0x0280000 - 0x0780000 Kernel Image ++ * 0x0780000 - 0x8000000 depends on application ++ */ ++ ++#define ONENAND_START_BLOCK 4 ++#define ONENAND_END_BLOCK 18 ++#define ONENAND_PAGE_SIZE 2048 /* 2KB */ ++#define ONENAND_BLOCK_SIZE 0x20000 /* 128KB */ ++ ++#endif /* __CONFIG_H */ ++ diff --git a/recipes/x-load/x-load-1.41/0013-board.c-print-boot-method-mmc-onenand-nand.patch b/recipes/x-load/x-load-1.41/0013-board.c-print-boot-method-mmc-onenand-nand.patch new file mode 100644 index 0000000000..8223cb9dcf --- /dev/null +++ b/recipes/x-load/x-load-1.41/0013-board.c-print-boot-method-mmc-onenand-nand.patch @@ -0,0 +1,52 @@ +From 8433611ac9fe90093f57e2a3e5968d9c61de5e28 Mon Sep 17 00:00:00 2001 +From: Vaibhav Hiremath +Date: Mon, 20 Jul 2009 17:54:48 +0530 +Subject: [PATCH] board.c: print boot method (mmc, onenand, nand) + +Pulled from 4e1a4e8d4d670ab7a4c281317a8b440f4ee4581a commit +of sakoman's tree +--- + lib/board.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/lib/board.c b/lib/board.c +index bc7d3d1..9dcc31a 100644 +--- a/lib/board.c ++++ b/lib/board.c +@@ -70,10 +70,12 @@ void start_armboot (void) + + #if defined (CONFIG_OMAP34XX) + if ((get_mem_type() == MMC_ONENAND) || (get_mem_type() == MMC_NAND)){ ++ printf("Booting from mmc . . .\n"); + buf += mmc_boot(buf); + } + + if (get_mem_type() == GPMC_ONENAND){ ++ printf("Booting from onenand . . .\n"); + for (i = ONENAND_START_BLOCK; i < ONENAND_END_BLOCK; i++){ + if (!onenand_read_block(buf, i)) + buf += ONENAND_BLOCK_SIZE; +@@ -81,6 +83,7 @@ void start_armboot (void) + } + + if (get_mem_type() == GPMC_NAND){ ++ printf("Booting from nand . . .\n"); + for (i = NAND_UBOOT_START; i < NAND_UBOOT_END; i+= NAND_BLOCK_SIZE){ + if (!nand_read_block(buf, i)) + buf += NAND_BLOCK_SIZE; /* advance buf ptr */ +@@ -88,10 +91,12 @@ void start_armboot (void) + } + #elif defined (CONFIG_OMAP3517EVM) + if (get_mem_type() == GPMC_NAND){ ++ printf("Booting from mmc . . .\n"); + buf += mmc_boot(buf); + } + + if (buf == (uchar *)CFG_LOADADDR){ ++ printf("Booting from nand . . .\n"); + for (i = NAND_UBOOT_START; i < NAND_UBOOT_END; i+= NAND_BLOCK_SIZE){ + if (!nand_read_block(buf, i)) + buf += NAND_BLOCK_SIZE; /* advance buf ptr */ +-- +1.5.4.3 + diff --git a/recipes/x-load/x-load-1.41/0014-board.c-check-for-u-boot-on-mmc-on-all-configurati.patch b/recipes/x-load/x-load-1.41/0014-board.c-check-for-u-boot-on-mmc-on-all-configurati.patch new file mode 100644 index 0000000000..c195a03349 --- /dev/null +++ b/recipes/x-load/x-load-1.41/0014-board.c-check-for-u-boot-on-mmc-on-all-configurati.patch @@ -0,0 +1,95 @@ +From fc8eccdf0b7b131fb0c51892dfc19fc977f77276 Mon Sep 17 00:00:00 2001 +From: Vaibhav Hiremath +Date: Mon, 20 Jul 2009 22:14:59 +0530 +Subject: [PATCH] board.c: check for u-boot on mmc on all configurations, not just those with managed nand + +Pulled from 9fc86b52c5770575b9b02c0049446fa8e266e714 commit +of sakoman's tree +--- + lib/board.c | 60 +++++++++++++++++++++++++--------------------------------- + 1 files changed, 26 insertions(+), 34 deletions(-) + +diff --git a/lib/board.c b/lib/board.c +index 9dcc31a..11e87da 100644 +--- a/lib/board.c ++++ b/lib/board.c +@@ -50,7 +50,7 @@ init_fnc_t *init_sequence[] = { + serial_init, /* serial communications setup */ + print_info, + #endif +- nand_init, /* board specific nand init */ ++ nand_init, /* board specific nand init */ + NULL, + }; + +@@ -68,42 +68,34 @@ void start_armboot (void) + + buf = (uchar*) CFG_LOADADDR; + +-#if defined (CONFIG_OMAP34XX) +- if ((get_mem_type() == MMC_ONENAND) || (get_mem_type() == MMC_NAND)){ +- printf("Booting from mmc . . .\n"); +- buf += mmc_boot(buf); +- } +- +- if (get_mem_type() == GPMC_ONENAND){ +- printf("Booting from onenand . . .\n"); +- for (i = ONENAND_START_BLOCK; i < ONENAND_END_BLOCK; i++){ +- if (!onenand_read_block(buf, i)) +- buf += ONENAND_BLOCK_SIZE; +- } +- } +- +- if (get_mem_type() == GPMC_NAND){ +- printf("Booting from nand . . .\n"); +- for (i = NAND_UBOOT_START; i < NAND_UBOOT_END; i+= NAND_BLOCK_SIZE){ +- if (!nand_read_block(buf, i)) +- buf += NAND_BLOCK_SIZE; /* advance buf ptr */ +- } +- } +-#elif defined (CONFIG_OMAP3517EVM) +- if (get_mem_type() == GPMC_NAND){ +- printf("Booting from mmc . . .\n"); +- buf += mmc_boot(buf); +- } ++#ifdef CONFIG_MMC ++ /* first try mmc */ ++ buf += mmc_boot(buf); ++#endif + +- if (buf == (uchar *)CFG_LOADADDR){ +- printf("Booting from nand . . .\n"); +- for (i = NAND_UBOOT_START; i < NAND_UBOOT_END; i+= NAND_BLOCK_SIZE){ +- if (!nand_read_block(buf, i)) +- buf += NAND_BLOCK_SIZE; /* advance buf ptr */ ++ if (buf == (uchar *)CFG_LOADADDR) { ++ /* if no u-boot on mmc, try onenand and nand */ ++#if !defined (CONFIG_OMAP3517EVM) ++ if (get_mem_type() == GPMC_ONENAND){ ++#ifdef CFG_PRINTF ++ printf("Booting from onenand . . .\n"); ++#endif ++ for (i = ONENAND_START_BLOCK; i < ONENAND_END_BLOCK; i++){ ++ if (!onenand_read_block(buf, i)) ++ buf += ONENAND_BLOCK_SIZE; ++ } + } +- } + #endif +- ++ if (get_mem_type() == GPMC_NAND){ ++#ifdef CFG_PRINTF ++ printf("Booting from nand . . .\n"); ++#endif ++ for (i = NAND_UBOOT_START; i < NAND_UBOOT_END; i+= NAND_BLOCK_SIZE){ ++ if (!nand_read_block(buf, i)) ++ buf += NAND_BLOCK_SIZE; /* advance buf ptr */ ++ } ++ } ++ } + + if (buf == (uchar *)CFG_LOADADDR) + hang(); +-- +1.5.4.3 + diff --git a/recipes/x-load/x-load-1.41/0015-OMAP3EVM-Build-issue-fixed.patch b/recipes/x-load/x-load-1.41/0015-OMAP3EVM-Build-issue-fixed.patch new file mode 100644 index 0000000000..46afd51752 --- /dev/null +++ b/recipes/x-load/x-load-1.41/0015-OMAP3EVM-Build-issue-fixed.patch @@ -0,0 +1,77 @@ +From c44aac2e3e45f9a3a36ba80704104082e5a71100 Mon Sep 17 00:00:00 2001 +From: Vaibhav Hiremath +Date: Mon, 20 Jul 2009 22:17:52 +0530 +Subject: [PATCH] OMAP3EVM: Build issue fixed. + +The x-loader changes was broken for OMAP3EVM, fixed - + + - GPMC macros were not under proper board macro + - Warning fixed from mmc.c +--- + cpu/omap3/mmc.c | 3 ++- + include/asm/arch-omap3/mem.h | 6 +++--- + include/configs/omap3517evm.h | 2 +- + 3 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/cpu/omap3/mmc.c b/cpu/omap3/mmc.c +index b9dd5d0..2453477 100755 +--- a/cpu/omap3/mmc.c ++++ b/cpu/omap3/mmc.c +@@ -46,8 +46,9 @@ block_dev_desc_t *mmc_get_dev(int dev) + + unsigned char mmc_board_init(void) + { +- unsigned int value = 0; + #if defined (CONFIG_OMAP34XX) ++ unsigned int value = 0; ++ + value = CONTROL_PBIAS_LITE; + CONTROL_PBIAS_LITE = value | (1 << 2) | (1 << 1) | (1 << 9); + +diff --git a/include/asm/arch-omap3/mem.h b/include/asm/arch-omap3/mem.h +index 8a92484..ae73a9f 100644 +--- a/include/asm/arch-omap3/mem.h ++++ b/include/asm/arch-omap3/mem.h +@@ -324,7 +324,7 @@ typedef enum { + # define SMNAND_GPMC_CONFIG5 0x010C1414 + # define SMNAND_GPMC_CONFIG6 0x00000A80 + +-#if defined (CONFIG_OMAP34xx) ++#if defined (CONFIG_OMAP34XX) + + # define M_NAND_GPMC_CONFIG1 0x00001800 + # define M_NAND_GPMC_CONFIG2 SMNAND_GPMC_CONFIG2 +@@ -372,7 +372,7 @@ typedef enum { + # define SMNAND_GPMC_CONFIG6 0x00000A80 + # define SMNAND_GPMC_CONFIG7 0x00000C44 + +-#if defined (CONFIG_OMAP34xx) ++#if defined (CONFIG_OMAP34XX) + + # define M_NAND_GPMC_CONFIG1 0x00001800 + # define M_NAND_GPMC_CONFIG2 SMNAND_GPMC_CONFIG2 +@@ -445,7 +445,7 @@ typedef enum { + # define SMNAND_GPMC_CONFIG6 0x1F0F0A80 + # define SMNAND_GPMC_CONFIG7 0x00000C44 + +-#if defined (CONFIG_OMAP34xx) ++#if defined (CONFIG_OMAP34XX) + + # define M_NAND_GPMC_CONFIG1 0x00001800 + # define M_NAND_GPMC_CONFIG2 SMNAND_GPMC_CONFIG2 +diff --git a/include/configs/omap3517evm.h b/include/configs/omap3517evm.h +index 95deacb..16dc8d8 100644 +--- a/include/configs/omap3517evm.h ++++ b/include/configs/omap3517evm.h +@@ -124,7 +124,7 @@ + + #define GPMC_CONFIG (OMAP34XX_GPMC_BASE+0x50) + +-#if defined (CONFIG_OMAP34xx) || (CONFIG_OMAP3517EVM) ++#if defined (CONFIG_OMAP3517EVM) + #define GPMC_NAND_COMMAND_0 (OMAP34XX_GPMC_BASE+0x7C) + #define GPMC_NAND_ADDRESS_0 (OMAP34XX_GPMC_BASE+0x80) + #define GPMC_NAND_DATA_0 (OMAP34XX_GPMC_BASE+0x84) +-- +1.5.4.3 + diff --git a/recipes/x-load/x-load-1.41/0016-mmc-fix-infinite-loop-in-mmc_init_stream.patch b/recipes/x-load/x-load-1.41/0016-mmc-fix-infinite-loop-in-mmc_init_stream.patch new file mode 100644 index 0000000000..1f9b069f66 --- /dev/null +++ b/recipes/x-load/x-load-1.41/0016-mmc-fix-infinite-loop-in-mmc_init_stream.patch @@ -0,0 +1,41 @@ +From 47f5d8f6f659848e164b6151c1dac36fdd4eb7a1 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +Date: Fri, 1 Aug 2008 12:55:44 -0700 +Subject: [PATCH] mmc: fix infinite loop in mmc_init_stream + +--- + cpu/omap3/mmc.c | 11 ++++++++--- + 1 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/cpu/omap3/mmc.c b/cpu/omap3/mmc.c +index 2453477..279e2a2 100755 +--- a/cpu/omap3/mmc.c ++++ b/cpu/omap3/mmc.c +@@ -60,16 +60,21 @@ unsigned char mmc_board_init(void) + + void mmc_init_stream(void) + { ++ volatile unsigned int mmc_stat; ++ + OMAP_HSMMC_CON |= INIT_INITSTREAM; + + OMAP_HSMMC_CMD = MMC_CMD0; +- while (!(OMAP_HSMMC_STAT & CC_MASK)); ++ do { ++ mmc_stat = OMAP_HSMMC_STAT; ++ } while (!(mmc_stat & CC_MASK)); + + OMAP_HSMMC_STAT = CC_MASK; + + OMAP_HSMMC_CMD = MMC_CMD0; +- while (!(OMAP_HSMMC_STAT & CC_MASK)); +- ++ do { ++ mmc_stat = OMAP_HSMMC_STAT; ++ } while (!(mmc_stat & CC_MASK)); + + OMAP_HSMMC_STAT = OMAP_HSMMC_STAT; + OMAP_HSMMC_CON &= ~INIT_INITSTREAM; +-- +1.5.4.3 + diff --git a/recipes/x-load/x-load-1.41/0017-lib-board.c-add-missing-call-to-misc_init_r.patch b/recipes/x-load/x-load-1.41/0017-lib-board.c-add-missing-call-to-misc_init_r.patch new file mode 100644 index 0000000000..a923724d4c --- /dev/null +++ b/recipes/x-load/x-load-1.41/0017-lib-board.c-add-missing-call-to-misc_init_r.patch @@ -0,0 +1,25 @@ +From 47756aa64c39111942cad5774862fc5f6def362d Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +Date: Thu, 7 Aug 2008 17:38:42 -0700 +Subject: [PATCH] lib/board.c: add missing call to misc_init_r + +--- + lib/board.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/lib/board.c b/lib/board.c +index 11e87da..5ef7102 100644 +--- a/lib/board.c ++++ b/lib/board.c +@@ -66,6 +66,8 @@ void start_armboot (void) + } + } + ++ misc_init_r(); ++ + buf = (uchar*) CFG_LOADADDR; + + #ifdef CONFIG_MMC +-- +1.5.4.3 + diff --git a/recipes/x-load/x-load-1.41/0018-omap3evm-provide-missing-udelay-function.patch b/recipes/x-load/x-load-1.41/0018-omap3evm-provide-missing-udelay-function.patch new file mode 100644 index 0000000000..54681cbedc --- /dev/null +++ b/recipes/x-load/x-load-1.41/0018-omap3evm-provide-missing-udelay-function.patch @@ -0,0 +1,27 @@ +From 60455ac7f09e4d1c1472eb206e66185d9fd89ef9 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +Date: Mon, 18 Aug 2008 11:11:57 -0700 +Subject: [PATCH] omap3evm: provide missing udelay function + +--- + board/omap3evm/omap3evm.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/board/omap3evm/omap3evm.c b/board/omap3evm/omap3evm.c +index 857516b..d4ef29b 100755 +--- a/board/omap3evm/omap3evm.c ++++ b/board/omap3evm/omap3evm.c +@@ -70,6 +70,10 @@ static inline void delay(unsigned long loops) + "bne 1b":"=r" (loops):"0"(loops)); + } + ++void udelay (unsigned long usecs) { ++ delay(usecs); ++} ++ + /***************************************** + * Routine: board_init + * Description: Early hardware init. +-- +1.5.4.3 + diff --git a/recipes/x-load/x-load-1.41/0019-lib-board.c-Specify-where-u-boot-is-being-loaded-fr.patch b/recipes/x-load/x-load-1.41/0019-lib-board.c-Specify-where-u-boot-is-being-loaded-fr.patch new file mode 100644 index 0000000000..d55a53a4ca --- /dev/null +++ b/recipes/x-load/x-load-1.41/0019-lib-board.c-Specify-where-u-boot-is-being-loaded-fr.patch @@ -0,0 +1,45 @@ +From 989f677e807fdfbae2a13ab1444743bfdf2d63f3 Mon Sep 17 00:00:00 2001 +From: Vaibhav Hiremath +Date: Mon, 20 Jul 2009 22:35:36 +0530 +Subject: [PATCH] lib/board.c: Specify where u-boot is being loaded from + +Pulled from 65ed00323f3807197a83abc75d62ed2a8d3f60de commit +from Sakoman's tree +--- + lib/board.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/lib/board.c b/lib/board.c +index 5ef7102..e573c66 100644 +--- a/lib/board.c ++++ b/lib/board.c +@@ -73,6 +73,8 @@ void start_armboot (void) + #ifdef CONFIG_MMC + /* first try mmc */ + buf += mmc_boot(buf); ++ if (buf != (uchar *)CFG_LOADADDR) ++ printf("Loading u-boot.bin from mmc\n"); + #endif + + if (buf == (uchar *)CFG_LOADADDR) { +@@ -80,7 +82,7 @@ void start_armboot (void) + #if !defined (CONFIG_OMAP3517EVM) + if (get_mem_type() == GPMC_ONENAND){ + #ifdef CFG_PRINTF +- printf("Booting from onenand . . .\n"); ++ printf("Loading u-boot.bin from onenand\n"); + #endif + for (i = ONENAND_START_BLOCK; i < ONENAND_END_BLOCK; i++){ + if (!onenand_read_block(buf, i)) +@@ -90,7 +92,7 @@ void start_armboot (void) + #endif + if (get_mem_type() == GPMC_NAND){ + #ifdef CFG_PRINTF +- printf("Booting from nand . . .\n"); ++ printf("Loading u-boot.bin from nand\n"); + #endif + for (i = NAND_UBOOT_START; i < NAND_UBOOT_END; i+= NAND_BLOCK_SIZE){ + if (!nand_read_block(buf, i)) +-- +1.5.4.3 + diff --git a/recipes/x-load/x-load-1.41/streen-fix.diff b/recipes/x-load/x-load-1.41/streen-fix.diff new file mode 100644 index 0000000000..e52c9444cf --- /dev/null +++ b/recipes/x-load/x-load-1.41/streen-fix.diff @@ -0,0 +1,39 @@ +diff -Nurd git/board/omap3517evm/omap3517evm.c /OE/angstrom-dev/xload/x-load/board/omap3517evm/omap3517evm.c +--- git/board/omap3517evm/omap3517evm.c 2009-07-02 04:26:52.000000000 +0200 ++++ /OE/angstrom-dev/xload/x-load/board/omap3517evm/omap3517evm.c 2009-09-04 13:08:54.000000000 +0200 +@@ -98,7 +98,7 @@ + */ + #define EMIF4_DDR1_RD_LAT 0x6 + #define EMIF4_DDR1_PWRDN_DIS 0x1 +-#define EMIF4_DDR1_STRBEN_EXT 0x1 ++#define EMIF4_DDR1_STRBEN_EXT 0x0 + #define EMIF4_DDR1_DLL_MODE 0x0 + #define EMIF4_DDR1_VTP_DYN 0x1 + #define EMIF4_DDR1_LB_CK_SEL 0x0 +diff -Nurd git/board/omap3evm/omap3evm.c /OE/angstrom-dev/xload/x-load/board/omap3evm/omap3evm.c +--- git/board/omap3evm/omap3evm.c 2009-07-02 04:26:52.000000000 +0200 ++++ /OE/angstrom-dev/xload/x-load/board/omap3evm/omap3evm.c 2009-09-09 16:36:07.000000000 +0200 +@@ -70,6 +70,10 @@ + "bne 1b":"=r" (loops):"0"(loops)); + } + ++void udelay (unsigned long usecs) { ++ delay(usecs); ++} ++ + /***************************************** + * Routine: board_init + * Description: Early hardware init. +@@ -681,6 +685,12 @@ + sr32(CM_FCLKEN1_CORE, 13, 1, 0x1); + sr32(CM_ICLKEN1_CORE, 13, 1, 0x1); + #endif ++ ++#ifdef CONFIG_MMC ++ /* Enable MMC1 clocks */ ++ sr32(CM_FCLKEN1_CORE, 24, 1, 0x1); ++ sr32(CM_ICLKEN1_CORE, 24, 1, 0x1); ++#endif + delay(1000); + } + diff --git a/recipes/x-load/x-load_1.41.bb b/recipes/x-load/x-load_1.41.bb new file mode 100644 index 0000000000..0a38f5ba0f --- /dev/null +++ b/recipes/x-load/x-load_1.41.bb @@ -0,0 +1,18 @@ +require x-load.inc + +COMPATIBLE_MACHINE = "omap3517-evm" + +SRC_URI = "file://x-loader-03.00.00.01.tar.gz \ +file://0013-board.c-print-boot-method-mmc-onenand-nand.patch;patch=1 \ +file://0014-board.c-check-for-u-boot-on-mmc-on-all-configurati.patch;patch=1 \ +file://0015-OMAP3EVM-Build-issue-fixed.patch;patch=1 \ +file://0016-mmc-fix-infinite-loop-in-mmc_init_stream.patch;patch=1 \ +file://0017-lib-board.c-add-missing-call-to-misc_init_r.patch;patch=1 \ +file://0018-omap3evm-provide-missing-udelay-function.patch;patch=1 \ +file://0019-lib-board.c-Specify-where-u-boot-is-being-loaded-fr.patch;patch=1 \ +file://streen-fix.diff;patch=1 \ +" + +S = "${WORKDIR}/xloader-03.00.00.01" + +PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/recipes/x-load/x-load_git.bb b/recipes/x-load/x-load_git.bb index d7ffd20d69..0fa8cdfc62 100644 --- a/recipes/x-load/x-load_git.bb +++ b/recipes/x-load/x-load_git.bb @@ -1,5 +1,7 @@ require x-load.inc +DEFAULT_PREFERENCE_omap3517-evm = "-1" + FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/x-load-git/${MACHINE}" SRCREV = "319b26586fafb86f919f514bcd175838aaab96b3" @@ -14,6 +16,10 @@ SRC_URI_append_beagleboard = " \ file://name.patch;patch=1 \ " +SRC_URI_append_omap3517-evm = " \ + file://xload-shiva.diff;patch=1 \ +" + S = "${WORKDIR}/git" PACKAGE_ARCH = "${MACHINE_ARCH}" -- 2.39.5