>>> 
>>> +phys_size_t fixed_sdram(void)
>>> +{
>>> +   char buf[32];
>>> +   fsl_ddr_cfg_regs_t ddr_cfg_regs;
>>> +   size_t ddr_size;
>>> +   struct cpu_type *cpu;
>>> +   ulong ddr_freq, ddr_freq_mhz;
>>> +
>>> +   cpu = gd->cpu;
>>> +   /* P1020 and it's derivatives support max 32bit DDR width */
>>> +   if (cpu->soc_ver == SVR_P1020 || cpu->soc_ver == SVR_P1020_E ||
>>> +           cpu->soc_ver == SVR_P1011 || cpu->soc_ver == SVR_P1011_E) {
>>> +           ddr_size = (CONFIG_SYS_SDRAM_SIZE * 1024 * 1024 / 2);
>> 
>> These checks don't make sense if you are a P2020 SoC
>> 
> 
> This entire file is identical to board/freescale/p1_p2_rdb/ddr.c. In
> fact, since this board only boots via the On-Chip ROM, the whole file is
> useless: fixed_sdram() should just return the RAM size. We're running
> from RAM when this function executes.
> 
> Is it ok with you if I replace the entire file with the following?
> 
> phys_size_t fixed_sdram(void)
> {
>       return CONFIG_SYS_SDRAM_SIZE << 20;
> }

If the board has SO-DIMMs than I'd expect SPD support.  Sounds like you're 
working on this w/Matt & York.


>>> diff --git a/board/freescale/p2020come/law.c 
>>> b/board/freescale/p2020come/law.c
>>> new file mode 100644
>>> index 0000000..56508db
>>> --- /dev/null
>>> +++ b/board/freescale/p2020come/law.c
>>> @@ -0,0 +1,36 @@
>>> +/*
>>> + * Copyright 2009 Freescale Semiconductor, Inc.
>>> + *
>>> + * 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 <common.h>
>>> +#include <asm/fsl_law.h>
>>> +#include <asm/mmu.h>
>>> +
>>> +struct law_entry law_table[] = {
>>> +   SET_LAW(CONFIG_SYS_PCIE1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCIE_1),
>>> +   SET_LAW(CONFIG_SYS_PCIE1_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_1),
>>> +   SET_LAW(CONFIG_SYS_PCIE2_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCIE_2),
>>> +   SET_LAW(CONFIG_SYS_PCIE2_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_2),
>>> +   SET_LAW(CONFIG_SYS_PCIE3_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCIE_3),
>>> +   SET_LAW(CONFIG_SYS_PCIE3_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_3),
>> 
>> We normally set these up dynamically.
>> 
> 
> This is a modified version of the code from
> board/freescale/p1_p2_rdb/law.c. Can you suggest an in tree example of
> the way you'd like the code to look? I copied what I assume is a good
> example…

If you look at current board/freescale/p1_p2_rdb/law.c it doesn't have PCI LAWs 
anymore.  I think for your example you just need an empty data structure:

        struct law_entry law_table[] = {
        };

this should hopefully make num_law_entries = 0;


> 
>>> +};
>>> +
>>> +int num_law_entries = ARRAY_SIZE(law_table);
>>> diff --git a/board/freescale/p2020come/p2020come.c 
>>> b/board/freescale/p2020come/p2020come.c
>>> new file mode 100644
>>> index 0000000..2e334cf
>>> --- /dev/null
>>> +++ b/board/freescale/p2020come/p2020come.c
>>> @@ -0,0 +1,401 @@
>>> +/*
>>> + * Copyright 2009 Freescale Semiconductor, Inc.
>>> + *
>>> + * 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 <common.h>
>>> +#include <hwconfig.h>
>>> +#include <command.h>
>>> +#include <asm/processor.h>
>>> +#include <asm/mmu.h>
>>> +#include <asm/cache.h>
>>> +#include <asm/immap_85xx.h>
>>> +#include <asm/fsl_serdes.h>
>>> +#include <asm/io.h>
>>> +#include <miiphy.h>
>>> +#include <libfdt.h>
>>> +#include <fdt_support.h>
>>> +#include <fsl_mdio.h>
>>> +#include <tsec.h>
>>> +#include <vsc7385.h>
>>> +#include <netdev.h>
>>> +#include <mmc.h>
>>> +#include <malloc.h>
>>> +#include <i2c.h>
>>> +
>>> +#if defined(CONFIG_PCI)
>>> +#include <asm/fsl_pci.h>
>>> +#include <pci.h>
>>> +#endif
>>> +
>>> +DECLARE_GLOBAL_DATA_PTR;
>>> +
>>> +#if defined(CONFIG_PCI)
>>> +void pci_init_board(void)
>>> +{
>>> +   fsl_pcie_init_board(0);
>>> +}
>>> +
>>> +void ft_pci_board_setup(void *blob)
>>> +{
>>> +   FT_FSL_PCI_SETUP;
>>> +}
>>> +#endif
>>> +
>>> +/*
>>> + * GPIO
>>> + * 0 - 3: CarryBoard Input;
>>> + * 4 - 7: CarryBoard Output;
>>> + * 8 : Mux as SDHC_CD (card detection)
>>> + * 9 : Mux as SDHC_WP
>>> + * 10 : Clear Watchdog timer
>>> + * 11 : LED Input
>>> + * 12 : Output to 1
>>> + * 13 : Open Drain
>>> + * 14 : LED Output
>>> + * 15 : Switch Input
>>> + */
>>> +#define GPIO_DIR           0x0f3a0000
>>> +#define GPIO_ODR           0x00000000
>>> +
>>> +#define BOARD_PERI_RST_SET (VSC7385_RST_SET | SLIC_RST_SET | \
>>> +                            SGMII_PHY_RST_SET | PCIE_RST_SET | \
>>> +                            RGMII_PHY_RST_SET)
>>> +
>>> +#define SYSCLK_MASK        0x00200000
>>> +#define BOARDREV_MASK      0x10100000
>>> +#define BOARDREV_B 0x10100000
>>> +#define BOARDREV_C 0x00100000
>>> +#define BOARDREV_D 0x00000000
>>> +
>>> +#define SYSCLK_66  66666666
>>> +#define SYSCLK_50  50000000
>>> +#define SYSCLK_100 100000000
>>> +
>>> +unsigned long get_board_sys_clk(ulong dummy)
>>> +{
>>> +   ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
>>> +   u32 ddr_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO;
>>> +
>>> +   ddr_ratio >>= MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
>>> +   switch (ddr_ratio) {
>>> +   case 0x0C:
>>> +           return SYSCLK_66;
>>> +   case 0x0A:
>>> +   case 0x08:
>>> +           return SYSCLK_100;
>>> +   default:
>>> +           puts("ERROR: unknown DDR ratio\n");
>>> +           return SYSCLK_100;
>>> +   }
>>> +}
>>> +
>>> +unsigned long get_board_ddr_clk(ulong dummy)
>>> +{
>>> +   ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
>>> +   u32 ddr_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO;
>>> +
>>> +   ddr_ratio >>= MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
>>> +   switch (ddr_ratio) {
>>> +   case 0x0C:
>>> +   case 0x0A:
>>> +           return SYSCLK_66;
>>> +   case 0x08:
>>> +           return SYSCLK_100;
>>> +   default:
>>> +           puts("ERROR: unknown DDR ratio\n");
>>> +           return SYSCLK_100;
>>> +   }
>>> +}
>>> +
>>> +#ifdef CONFIG_MMC
>>> +int board_early_init_f(void)
>>> +{
>>> +   ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
>>> +
>>> +   setbits_be32(&gur->pmuxcr,
>>> +                   (MPC85xx_PMUXCR_SDHC_CD |
>>> +                    MPC85xx_PMUXCR_SDHC_WP));
>>> +
>>> +   /* All the device are enable except for SRIO12 */
>>> +   setbits_be32(&gur->devdisr, 0x80000);
>> 
>> Add a #define instead of magic 0x80000
>> 
>>> +   return 0;
>>> +}
>>> +#endif
>>> +
>>> +int checkboard(void)
>>> +{
>>> +   ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR + 0xC00);
>>> +
>>> +   /*
>>> +    * GPIO
>>> +    * 0 - 3: CarryBoard Input;
>>> +    * 4 - 7: CarryBoard Output;
>>> +    * 8 : Mux as SDHC_CD (card detection)
>>> +    * 9 : Mux as SDHC_WP
>>> +    * 10 : Clear Watchdog timer
>>> +    * 11 : LED Input
>>> +    * 12 : Output to 1
>>> +    * 13 : Open Drain
>>> +    * 14 : LED Output
>>> +    * 15 : Switch Input
>>> +    *
>>> +    * Set GPIOs 11, 12, 14 to 1.
>>> +    */
>>> +   out_be32(&pgpio->gpdir, GPIO_DIR);
>>> +   out_be32(&pgpio->gpodr, GPIO_ODR);
>>> +   out_be32(&pgpio->gpdat, 0x001A0000);
>> 
>> look at using mpc85xx_gpio.h
>> 
> 
> Ok. This was copied from the BSP code. I'll change it to use the
> mpc85xx_gpio code.
> 
> While we're here, perhaps you can get the schematic for this board and
> see what the GPIO's are actually connected to. I can't get the
> schematic, so these comments are copied from the BSP code.

Is the schematic not provided?  Let me see if I can find someone familiar with 
this board.

> 
> The ones labeled "LED" (11 and 14) don't appear to change any LEDs that
> I can see on the board.
> 
>>> +
>>> +   puts("Board: Freescale COM Express P2020\n");
>>> +   return 0;
>>> +}
>>> +
>>> +#define M41ST85W_ERROR(fmt, args...) printf("ERROR: M41ST85W: " fmt, 
>>> ##args)
>>> +
>>> +static void m41st85w_clear_bit(u8 reg, u8 mask, const char *name)
>>> +{
>>> +   u8 data;
>>> +
>>> +   if (i2c_read(0x68, reg, 1, &data, 1)) {
>>> +           M41ST85W_ERROR("unable to read %s bit\n", name);
>>> +           return;
>>> +   }
>>> +
>>> +   if (data & mask) {
>>> +           data &= ~mask;
>>> +           if (i2c_write(0x68, reg, 1, &data, 1)) {
>>> +                   M41ST85W_ERROR("unable to clear %s bit\n", name);
>>> +                   return;
>>> +           }
>>> +   }
>>> +}
>>> +
>>> +/*
>>> + * The P2020COME board has a STMicro M41ST85W RTC/watchdog
>>> + * at i2c bus 1 address 0x68.
>>> + */
>>> +static void start_rtc(void)
>>> +{
>>> +   unsigned int bus = i2c_get_bus_num();
>>> +
>>> +   if (i2c_set_bus_num(1)) {
>>> +           M41ST85W_ERROR("unable to set i2c bus\n");
>>> +           goto out;
>>> +   }
>>> +
>>> +   /* ensure ST (stop) and HT (halt update) bits are cleared */
>>> +   m41st85w_clear_bit(0x1, 0x80, "ST");
>>> +   m41st85w_clear_bit(0xc, 0x40, "HT");
>>> +
>>> +out:
>>> +   /* reset the i2c bus */
>>> +   i2c_set_bus_num(bus);
>>> +}
>>> +
>>> +int board_early_init_r(void)
>>> +{
>>> +   start_rtc();
>>> +   return 0;
>>> +}
>>> +
>>> +void board_reset(void)
>>> +{
>>> +   u8 data = (1 << 2) | 0x82;
>> 
>> some #defines instead of magic #s
>> 
>>> +
>>> +   /* set the hardware watchdog timeout to 1 second, then hang */
>>> +   i2c_set_bus_num(1);
>>> +   i2c_write(0x68, 9, 1, &data, 1);
>>> +
>>> +   while (1)
>>> +           /* hang */;
>>> +}
>>> +
>>> +#ifdef CONFIG_TSEC_ENET
>>> +int board_eth_init(bd_t *bis)
>>> +{
>>> +   struct fsl_pq_mdio_info mdio_info;
>>> +   struct tsec_info_struct tsec_info[4];
>>> +   int num = 0;
>>> +
>>> +#ifdef CONFIG_TSEC1
>>> +   SET_STD_TSEC_INFO(tsec_info[num], 1);
>>> +   num++;
>>> +#endif
>>> +#ifdef CONFIG_TSEC2
>>> +   SET_STD_TSEC_INFO(tsec_info[num], 2);
>>> +   num++;
>>> +#endif
>>> +#ifdef CONFIG_TSEC3
>>> +   SET_STD_TSEC_INFO(tsec_info[num], 3);
>>> +   if (is_serdes_configured(SGMII_TSEC3)) {
>>> +           puts("eTSEC3 is in sgmii mode.");
>>> +           tsec_info[num].flags |= TSEC_SGMII;
>>> +   }
>>> +   num++;
>>> +#endif
>>> +   if (!num) {
>>> +           printf("No TSECs initialized\n");
>>> +           return 0;
>>> +   }
>>> +
>>> +   mdio_info.regs = (struct tsec_mii_mng *)CONFIG_SYS_MDIO_BASE_ADDR;
>>> +   mdio_info.name = DEFAULT_MII_NAME;
>>> +   fsl_pq_mdio_init(bis, &mdio_info);
>>> +
>>> +   tsec_eth_init(bis, tsec_info, num);
>>> +
>>> +   return pci_eth_init(bis);
>>> +}
>>> +#endif
>>> +
>>> +#if defined(CONFIG_OF_BOARD_SETUP)
>>> +void fdt_fixup_add_2nd_usb(void *blob, int agent)
>>> +{
>> 
>> What are you trying to do here?
>> 
> 
> This was copied from the BSP code, I have no idea what the purpose is. I
> just checked: the board works fine with this removed. I'll remove it.
> 
>>> +   const char *soc_compat = "fsl,p2020-immr";
>>> +   const char *lbc_compat = "fsl,p2020-elbc";
>>> +   const u32 *addrcell, *sizecell, *ph;
>>> +   int off, lbcoff, len, err;
>>> +   u32 *regbuf = NULL;
>>> +   u32 *irqbuf = NULL;
>>> +
>>> +   off = fdt_node_offset_by_compatible(blob, -1, soc_compat);
>>> +   if (off < 0) {
>>> +           printf("WARNING: could not find compatible node %s: %s.\n",
>>> +                   soc_compat, fdt_strerror(off));
>>> +           return;
>>> +   }
>>> +
>>> +   lbcoff = fdt_node_offset_by_compatible(blob, -1, lbc_compat);
>>> +   if (lbcoff < 0) {
>>> +           printf("WARNING: could not find compatible node %s: %s.\n",
>>> +                   lbc_compat, fdt_strerror(lbcoff));
>>> +           return;
>>> +   }
>>> +
>>> +   addrcell = fdt_getprop(blob, off, "#address-cells", NULL);
>>> +   sizecell = fdt_getprop(blob, off, "#size-cells", NULL);
>>> +
>>> +   off = fdt_add_subnode(blob, off, "usb@23000");
>>> +   if (off < 0) {
>>> +           printf("WARNING: could not add 2nd usb node %s.\n",
>>> +                           fdt_strerror(off));
>>> +           return;
>>> +   }
>>> +
>>> +   err = fdt_setprop_cell(blob, off, "#address-cells", 1);
>>> +   if (err < 0)
>>> +           printf("WARNING: could not set #address-cell property: %s\n",
>>> +                   fdt_strerror(err));
>>> +
>>> +   err = fdt_setprop_cell(blob, off, "#size-cells", 0);
>>> +   if (err < 0)
>>> +           printf("WARNING: could not set #size-cells property: %s\n",
>>> +                   fdt_strerror(err));
>>> +
>>> +   err = fdt_setprop_string(blob, off, "compatible", "fsl-usb2-dr");
>>> +   if (err < 0)
>>> +           printf("WARNING: could not set compatible property: %s\n",
>>> +                   fdt_strerror(err));
>>> +
>>> +   err = fdt_setprop_string(blob, off, "phy_type", "ulpi");
>>> +   if (err < 0)
>>> +           printf("WARNING: could not set phy_type property: %s\n",
>>> +                   fdt_strerror(err));
>>> +
>>> +   if (agent) {
>>> +           err = fdt_setprop_string(blob, off, "dr_mode", "peripheral");
>>> +           if (err < 0)
>>> +                   printf("WARNING: could not set dr_mode property: %s\n",
>>> +                           fdt_strerror(err));
>>> +   }
>>> +
>>> +   if (addrcell && *addrcell == 2) {
>>> +           regbuf[0] = 0;
>>> +           regbuf[1] = CONFIG_SYS_MPC85xx_USB2_OFFSET;
>>> +           len = 2;
>>> +   } else {
>>> +           regbuf[0] = CONFIG_SYS_MPC85xx_USB2_OFFSET;
>>> +           len = 1;
>>> +   }
>>> +
>>> +   if (sizecell && *sizecell == 2) {
>>> +           regbuf[len] = 0;
>>> +           regbuf[len + 1] = 0x1000;
>>> +           len = 2;
>>> +   } else {
>>> +           regbuf[len] = 0x1000;
>>> +           len++;
>>> +   }
>>> +
>>> +   err = fdt_setprop(blob, off, "reg", regbuf, len * sizeof(u32));
>>> +   if (err < 0)
>>> +           printf("WARNING: could not set <%s> %s\n",
>>> +                                   "reg", fdt_strerror(err));
>>> +
>>> +   irqbuf[0] = 0x2e;
>>> +   irqbuf[1] = 0x2;
>>> +
>>> +   err = fdt_setprop(blob, off, "interrupts", irqbuf, 2 * sizeof(u32));
>>> +   if (err < 0)
>>> +           printf("WARNING: could not set %s %s\n",
>>> +                           "interrupts", fdt_strerror(err));
>>> +
>>> +   ph = fdt_getprop(blob, lbcoff, "interrupt-parent", 0);
>>> +   if (!ph) {
>>> +           printf("WARNING: could not read interrupt-parent property\n");
>>> +           return;
>>> +   }
>>> +
>>> +   err = fdt_setprop(blob, off, "interrupt-parent", ph, sizeof(u32));
>>> +   if (err < 0)
>>> +           printf("WARNING: could not set %s %s\n",
>>> +                           "interrupt-parent", fdt_strerror(err));
>>> +}
>>> +
>>> +void ft_board_setup(void *blob, bd_t *bd)
>>> +{
>>> +   phys_addr_t base;
>>> +   phys_size_t size;
>>> +   int agent;
>>> +
>>> +   ft_cpu_setup(blob, bd);
>>> +
>>> +   base = getenv_bootm_low();
>>> +   size = getenv_bootm_size();
>>> +
>>> +#if defined(CONFIG_PCI)
>>> +   ft_pci_board_setup(blob);
>>> +#endif
>>> +
>>> +   fdt_fixup_memory(blob, (u64)base, (u64)size);
>>> +
>>> +   if (!hwconfig("usb2"))
>>> +           return;
>>> +
>>> +   agent = hwconfig_subarg_cmp("usb2", "dr_mode", "peripheral");
>>> +
>>> +   /*
>>> +    * Add the 2nd usb node and enable it. eLBC will
>>> +    * now be disabled since it is MUXed with USB2
>>> +    */
>>> +
>>> +   fdt_fixup_add_2nd_usb(blob, agent);
>>> +}
>>> +#endif
>>> diff --git a/board/freescale/p2020come/tlb.c 
>>> b/board/freescale/p2020come/tlb.c
>>> new file mode 100644
>>> index 0000000..e1dd056
>>> --- /dev/null
>>> +++ b/board/freescale/p2020come/tlb.c
>>> @@ -0,0 +1,100 @@
>>> +/*
>>> + * Copyright 2011 Freescale Semiconductor, Inc.
>>> + *
>>> + * 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 <common.h>
>>> +#include <asm/mmu.h>
>>> +
>> 
>> For any regions that do NOT have code, we should remove MAS3_SX bit:
>> 
> 
> I assume you mean the CCSR and PCI regions. Maybe the
> CONFIG_SYS_INIT_RAM_ADDR regions too, I don't know what they're used
> for.

take a look at board/freescale/common/p_corenet/tlb.c

> 
> Thanks for the comments. I look forward to your feedback on the couple
> of questions I have.
> 
> Ira
> 
>>> +struct fsl_e_tlb_entry tlb_table[] = {
>>> +   /* TLB 0 - for temp stack in cache */
>>> +   SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR,
>>> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, 0,
>>> +                   0, 0, BOOKE_PAGESZ_4K, 0),
>>> +   SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024 ,
>>> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS + 4 * 1024,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, 0,
>>> +                   0, 0, BOOKE_PAGESZ_4K, 0),
>>> +   SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024 ,
>>> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS + 8 * 1024,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, 0,
>>> +                   0, 0, BOOKE_PAGESZ_4K, 0),
>>> +   SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024 ,
>>> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS + 12 * 1024,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, 0,
>>> +                   0, 0, BOOKE_PAGESZ_4K, 0),
>>> +
>>> +   /* TLB 1 */
>>> +   /* *I*** - Covers boot page */
>>> +   SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 0, BOOKE_PAGESZ_4K, 1),
>>> +
>>> +   /* *I*G* - CCSRBAR */
>>> +   SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 1, BOOKE_PAGESZ_1M, 1),
>>> +
>>> +#if defined(CONFIG_PCI)
>>> +   /* *I*G* - PCI3 - PCI2 0x8000,0000 - 0xbfff,ffff, size = 1G */
>>> +   SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_MEM_VIRT, CONFIG_SYS_PCIE3_MEM_PHYS,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 2, BOOKE_PAGESZ_1G, 1),
>>> +
>>> +   /* *I*G* - PCI1 0xC000,0000 - 0xcfff,ffff, size = 256M */
>>> +   SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT, CONFIG_SYS_PCIE1_MEM_VIRT,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 3, BOOKE_PAGESZ_256M, 1),
>>> +
>>> +
>>> +   /* *I*G* - PCI1  0xD000,0000 - 0xDFFF,FFFF, size = 256M */
>>> +   SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT + 0x10000000,
>>> +                   CONFIG_SYS_PCIE1_MEM_PHYS + 0x10000000,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 4, BOOKE_PAGESZ_256M, 1),
>>> +
>>> +   /*
>>> +    * *I*G* - PCI I/O
>>> +    *
>>> +    * PCI3 => 0xFFC10000
>>> +    * PCI2 => 0xFFC2,0000
>>> +    * PCI1 => 0xFFC3,0000
>>> +    */
>>> +   SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_IO_VIRT, CONFIG_SYS_PCIE3_IO_PHYS,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 5, BOOKE_PAGESZ_256K, 1),
>>> +#endif /* #if defined(CONFIG_PCI) */
>>> +
>>> +#if defined(CONFIG_SYS_RAMBOOT)
>>> +   /* *I*G - DDR3  2G     Part 1: 0 - 0x3fff,ffff , size = 1G */
>>> +   SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 6, BOOKE_PAGESZ_1G, 1),
>>> +
>>> +   /*        DDR3  2G     Part 2: 0x4000,0000 - 0x7fff,ffff , size = 1G */
>>> +   SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,
>>> +                   CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,
>>> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
>>> +                   0, 7, BOOKE_PAGESZ_1G, 1),
>>> +#endif
>>> +};
>>> +
>>> +int num_tlb_entries = ARRAY_SIZE(tlb_table);
>> 
>> 
>>> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to