X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=board%2Fxilinx%2Fmicroblaze-generic%2Fmicroblaze-generic.c;h=7e784d10781ebc2c8c18e2e2653ffa76f689d9f1;hb=44fb0d6c9f5147a41c710032869e5e01b3c9e310;hp=be7154ea147cfa13407a64802d33c84d713d9be3;hpb=1a4596601fd395f3afb8f82f3f840c5e00bdd57a;p=platform%2Fkernel%2Fu-boot.git diff --git a/board/xilinx/microblaze-generic/microblaze-generic.c b/board/xilinx/microblaze-generic/microblaze-generic.c index be7154e..7e784d1 100644 --- a/board/xilinx/microblaze-generic/microblaze-generic.c +++ b/board/xilinx/microblaze-generic/microblaze-generic.c @@ -1,115 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0+ /* - * (C) Copyright 2007 Michal Simek + * (C) Copyright 2007-2018 Michal Simek * - * Michal SIMEK - * - * SPDX-License-Identifier: GPL-2.0+ + * Michal SIMEK */ -/* This is a board specific file. It's OK to include board specific - * header files */ +/* + * This is a board specific file. It's OK to include board specific + * header files + */ #include #include -#include -#include -#include -#include -#include +#include +#include +#include -#ifdef CONFIG_XILINX_GPIO -static int reset_pin = -1; -#endif +DECLARE_GLOBAL_DATA_PTR; -int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +int dram_init_banksize(void) { -#ifdef CONFIG_XILINX_GPIO - if (reset_pin != -1) - gpio_direction_output(reset_pin, 1); -#endif - -#ifdef CONFIG_XILINX_TB_WATCHDOG - hw_watchdog_disable(); -#endif - - puts ("Reseting board\n"); - __asm__ __volatile__ (" mts rmsr, r0;" \ - "bra r0"); - - return 0; + return fdtdec_setup_memory_banksize(); } -int gpio_init (void) +int dram_init(void) { -#ifdef CONFIG_XILINX_GPIO - reset_pin = gpio_alloc(CONFIG_SYS_GPIO_0_ADDR, "reset", 1); - if (reset_pin != -1) - gpio_request(reset_pin, "reset_pin"); -#endif + if (fdtdec_setup_mem_size_base() != 0) + return -EINVAL; + return 0; -} +}; -void board_init(void) +int board_late_init(void) { - gpio_init(); -} + ulong max_size, lowmem_size; -int board_eth_init(bd_t *bis) -{ - int ret = 0; +#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_SYSRESET_MICROBLAZE) + int ret; -#ifdef CONFIG_XILINX_AXIEMAC - ret |= xilinx_axiemac_initialize(bis, XILINX_AXIEMAC_BASEADDR, - XILINX_AXIDMA_BASEADDR); + ret = device_bind_driver(gd->dm_root, "mb_soft_reset", + "reset_soft", NULL); + if (ret) + printf("Warning: No reset driver: ret=%d\n", ret); #endif -#ifdef CONFIG_XILINX_EMACLITE - u32 txpp = 0; - u32 rxpp = 0; -# ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG - txpp = 1; -# endif -# ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG - rxpp = 1; -# endif - ret |= xilinx_emaclite_initialize(bis, XILINX_EMACLITE_BASEADDR, - txpp, rxpp); -#endif + if (!(gd->flags & GD_FLG_ENV_DEFAULT)) { + debug("Saved variables - Skipping\n"); + return 0; + } -#ifdef CONFIG_XILINX_LL_TEMAC -# ifdef XILINX_LLTEMAC_BASEADDR -# ifdef XILINX_LLTEMAC_FIFO_BASEADDR - ret |= xilinx_ll_temac_eth_init(bis, XILINX_LLTEMAC_BASEADDR, - XILINX_LL_TEMAC_M_FIFO, XILINX_LLTEMAC_FIFO_BASEADDR); -# elif XILINX_LLTEMAC_SDMA_CTRL_BASEADDR -# if XILINX_LLTEMAC_SDMA_USE_DCR == 1 - ret |= xilinx_ll_temac_eth_init(bis, XILINX_LLTEMAC_BASEADDR, - XILINX_LL_TEMAC_M_SDMA_DCR, - XILINX_LLTEMAC_SDMA_CTRL_BASEADDR); -# else - ret |= xilinx_ll_temac_eth_init(bis, XILINX_LLTEMAC_BASEADDR, - XILINX_LL_TEMAC_M_SDMA_PLB, - XILINX_LLTEMAC_SDMA_CTRL_BASEADDR); -# endif -# endif -# endif -# ifdef XILINX_LLTEMAC_BASEADDR1 -# ifdef XILINX_LLTEMAC_FIFO_BASEADDR1 - ret |= xilinx_ll_temac_eth_init(bis, XILINX_LLTEMAC_BASEADDR1, - XILINX_LL_TEMAC_M_FIFO, XILINX_LLTEMAC_FIFO_BASEADDR1); -# elif XILINX_LLTEMAC_SDMA_CTRL_BASEADDR1 -# if XILINX_LLTEMAC_SDMA_USE_DCR == 1 - ret |= xilinx_ll_temac_eth_init(bis, XILINX_LLTEMAC_BASEADDR1, - XILINX_LL_TEMAC_M_SDMA_DCR, - XILINX_LLTEMAC_SDMA_CTRL_BASEADDR1); -# else - ret |= xilinx_ll_temac_eth_init(bis, XILINX_LLTEMAC_BASEADDR1, - XILINX_LL_TEMAC_M_SDMA_PLB, - XILINX_LLTEMAC_SDMA_CTRL_BASEADDR1); -# endif -# endif -# endif -#endif + max_size = gd->start_addr_sp - CONFIG_STACK_SIZE; + max_size = round_down(max_size, SZ_16M); + + /* Linux default LOWMEM_SIZE is 0x30000000 = 768MB */ + lowmem_size = gd->ram_base + 768 * 1024 * 1024; - return ret; + env_set_addr("initrd_high", (void *)min_t(ulong, max_size, + lowmem_size)); + env_set_addr("fdt_high", (void *)min_t(ulong, max_size, lowmem_size)); + + return 0; }