]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
Merge branch 'master' of git://www.denx.de/git/u-boot-microblaze
authorTom Rini <trini@konsulko.com>
Wed, 27 Jan 2016 20:05:12 +0000 (15:05 -0500)
committerTom Rini <trini@konsulko.com>
Wed, 27 Jan 2016 20:05:12 +0000 (15:05 -0500)
108 files changed:
.mailmap
arch/arm/Kconfig
arch/arm/cpu/armv8/zynqmp/Kconfig
arch/arm/cpu/armv8/zynqmp/clk.c
arch/arm/cpu/armv8/zynqmp/cpu.c
arch/arm/dts/zynq-7000.dtsi
arch/arm/dts/zynq-zc770-xm010.dts
arch/arm/dts/zynq-zc770-xm011.dts
arch/arm/dts/zynq-zc770-xm012.dts
arch/arm/dts/zynq-zc770-xm013.dts
arch/arm/dts/zynqmp-ep108.dts
arch/arm/dts/zynqmp.dtsi
arch/arm/include/asm/arch-zynqmp/clk.h
arch/arm/include/asm/arch-zynqmp/hardware.h
arch/arm/mach-zynq/ddrc.c
arch/microblaze/Kconfig
arch/microblaze/cpu/Makefile
arch/microblaze/cpu/cpu.c [deleted file]
arch/microblaze/cpu/start.S
arch/powerpc/cpu/ppc4xx/Kconfig
arch/powerpc/cpu/ppc4xx/interrupts.c
arch/powerpc/cpu/ppc4xx/uic.c
arch/powerpc/cpu/ppc4xx/xilinx_irq.c
arch/powerpc/dts/Makefile
arch/powerpc/dts/xilinx-ppc405-generic.dts [new file with mode: 0644]
arch/powerpc/dts/xilinx-ppc440-generic.dts [new file with mode: 0644]
arch/powerpc/include/asm/interrupt.h
arch/powerpc/include/asm/xilinx_irq.h
board/avnet/fx12mm/Kconfig [deleted file]
board/avnet/fx12mm/MAINTAINERS [deleted file]
board/avnet/fx12mm/Makefile [deleted file]
board/avnet/fx12mm/fx12mm.c [deleted file]
board/avnet/fx12mm/xparameters.h [deleted file]
board/avnet/v5fx30teval/Kconfig [deleted file]
board/avnet/v5fx30teval/MAINTAINERS [deleted file]
board/avnet/v5fx30teval/Makefile [deleted file]
board/avnet/v5fx30teval/v5fx30teval.c [deleted file]
board/avnet/v5fx30teval/xparameters.h [deleted file]
board/xilinx/microblaze-generic/microblaze-generic.c
board/xilinx/microblaze-generic/xparameters.h
board/xilinx/ml507/Kconfig [deleted file]
board/xilinx/ml507/MAINTAINERS [deleted file]
board/xilinx/ml507/Makefile [deleted file]
board/xilinx/ml507/ml507.c [deleted file]
board/xilinx/ml507/xparameters.h [deleted file]
board/xilinx/ppc405-generic/MAINTAINERS
board/xilinx/ppc405-generic/Makefile
board/xilinx/ppc405-generic/xilinx_ppc405_generic.c
board/xilinx/ppc405-generic/xparameters.h
board/xilinx/ppc440-generic/MAINTAINERS
board/xilinx/ppc440-generic/Makefile
board/xilinx/ppc440-generic/init.S
board/xilinx/ppc440-generic/xilinx_ppc440_generic.c
board/xilinx/ppc440-generic/xparameters.h
board/xilinx/zynq/board.c
board/xilinx/zynqmp/zynqmp.c
cmd/bdinfo.c
cmd/fpga.c
configs/fx12mm_defconfig [deleted file]
configs/fx12mm_flash_defconfig [deleted file]
configs/microblaze-generic_defconfig
configs/ml507_defconfig [deleted file]
configs/ml507_flash_defconfig [deleted file]
configs/v5fx30teval_defconfig [deleted file]
configs/v5fx30teval_flash_defconfig [deleted file]
configs/xilinx-ppc405-generic_defconfig
configs/xilinx-ppc405-generic_flash_defconfig [deleted file]
configs/xilinx-ppc440-generic_defconfig
configs/xilinx-ppc440-generic_flash_defconfig [deleted file]
configs/zynq_microzed_defconfig
configs/zynq_picozed_defconfig
configs/zynq_zc702_defconfig
configs/zynq_zc706_defconfig
configs/zynq_zc770_xm010_defconfig
configs/zynq_zc770_xm011_defconfig
configs/zynq_zc770_xm012_defconfig
configs/zynq_zc770_xm013_defconfig
configs/zynq_zed_defconfig
configs/zynq_zybo_defconfig
doc/device-tree-bindings/serial/xilinx_uartlite.txt [new file with mode: 0644]
doc/driver-model/serial-howto.txt
drivers/fpga/xilinx.c
drivers/hwmon/adt7460.c
drivers/mmc/sdhci.c
drivers/mmc/zynq_sdhci.c
drivers/net/Kconfig
drivers/net/phy/ti.c
drivers/net/xilinx_axi_emac.c
drivers/net/xilinx_emaclite.c
drivers/net/xilinx_ll_temac.c
drivers/net/zynq_gem.c
drivers/serial/Kconfig
drivers/serial/serial_xuartlite.c
drivers/serial/serial_zynq.c
include/configs/fx12mm.h [deleted file]
include/configs/microblaze-generic.h
include/configs/ml507.h [deleted file]
include/configs/v5fx30teval.h [deleted file]
include/configs/xilinx-ppc.h
include/configs/xilinx-ppc405-generic.h
include/configs/xilinx-ppc405.h [deleted file]
include/configs/xilinx-ppc440-generic.h
include/configs/xilinx-ppc440.h [deleted file]
include/configs/xilinx_zynqmp.h
include/configs/xilinx_zynqmp_ep.h
include/configs/zynq-common.h
include/fpga.h
include/netdev.h

index 02dccfc1aee7ff5fd29007bf9daad769da5ea5e4..f72fef1748252774d5bbb640468b025539b9a26e 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -21,6 +21,9 @@ Jagan Teki <jagannadha.sutradharudu-teki@xilinx.com>
 Markus Klotzbuecher <mk@denx.de>
 Prabhakar Kushwaha <prabhakar@freescale.com>
 Rajeshwari Shinde <rajeshwari.s@samsung.com>
+Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
+Ricardo Ribalda <ricardo.ribalda@uam.es>
+Ricardo Ribalda <ricardo.ribalda@gmail.com>
 Sandeep Paulraj <s-paulraj@ti.com>
 Shaohui Xie <Shaohui.Xie@freescale.com>
 Stefan Roese <stroese>
index 876a620cf197b343ad2fdc27a9864a0bc6ee71ab..d2dbb1a5c27f2db05ed2b5727dbfdcbee80adbfa 100644 (file)
@@ -558,15 +558,15 @@ config ARCH_ZYNQ
        select CPU_V7
        select SUPPORT_SPL
        select OF_CONTROL
-       select SPL_OF_CONTROL
+       select SPL_OF_CONTROL if SPL
        select DM
        select DM_ETH
-       select SPL_DM
+       select SPL_DM if SPL
        select DM_MMC
        select DM_SPI
        select DM_SERIAL
        select DM_SPI_FLASH
-       select SPL_SEPARATE_BSS
+       select SPL_SEPARATE_BSS if SPL
 
 config ARCH_ZYNQMP
        bool "Support Xilinx ZynqMP Platform"
index e5a4fdd0fda0924f74075b4f4d5dc199601ac457..9a19dfa77f797490af946863d29970404ce509a8 100644 (file)
@@ -20,10 +20,6 @@ config SYS_SOC
 config SYS_CONFIG_NAME
        default "xilinx_zynqmp_ep" if TARGET_ZYNQMP_EP
 
-config SECURE_IOU
-       bool "Configure ZynqMP secure IOU"
-       default n
-
 config ZYNQMP_USB
        bool "Configure ZynqMP USB"
 
index 9218586e94a3bf0a26c92af13900856a32144f00..690c72dd66836190a5c709900d1d694d8d5fd02d 100644 (file)
@@ -21,9 +21,27 @@ unsigned long get_uart_clk(int dev_id)
                return 48000;
        case ZYNQMP_CSU_VERSION_EP108:
                return 25000000;
+       case ZYNQMP_CSU_VERSION_QEMU:
+               return 133000000;
        }
 
-       return 133000000;
+       return 100000000;
+}
+
+unsigned long zynqmp_get_system_timer_freq(void)
+{
+       u32 ver = zynqmp_get_silicon_version();
+
+       switch (ver) {
+       case ZYNQMP_CSU_VERSION_VELOCE:
+               return 10000;
+       case ZYNQMP_CSU_VERSION_EP108:
+               return 4000000;
+       case ZYNQMP_CSU_VERSION_QEMU:
+               return 50000000;
+       }
+
+       return 100000000;
 }
 
 #ifdef CONFIG_CLOCKS
index f90cca36aa72ab0f30d30af16a87bbc6f37bb8d4..c71f29152deed40d1d55683c57ad8db36a940ed7 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+static unsigned int zynqmp_get_silicon_version_secure(void)
+{
+       u32 ver;
+
+       ver = readl(&csu_base->version);
+       ver &= ZYNQMP_SILICON_VER_MASK;
+       ver >>= ZYNQMP_SILICON_VER_SHIFT;
+
+       return ver;
+}
+
 unsigned int zynqmp_get_silicon_version(void)
 {
+       if (current_el() == 3)
+               return zynqmp_get_silicon_version_secure();
+
        gd->cpu_clk = get_tbclk();
 
        switch (gd->cpu_clk) {
@@ -24,9 +38,11 @@ unsigned int zynqmp_get_silicon_version(void)
                return ZYNQMP_CSU_VERSION_VELOCE;
        case 50000000:
                return ZYNQMP_CSU_VERSION_QEMU;
+       case 4000000:
+               return ZYNQMP_CSU_VERSION_EP108;
        }
 
-       return ZYNQMP_CSU_VERSION_EP108;
+       return ZYNQMP_CSU_VERSION_SILICON;
 }
 
 #ifndef CONFIG_SYS_DCACHE_OFF
index 83be51ae9df65ee8c35d406d58d6dffaf25240b3..2d786f0fd15d0845a9ebd1dbff35208bc53a60dd 100644 (file)
                        interrupt-parent = <&intc>;
                        interrupts = <0 24 4>;
                        reg = <0xe0100000 0x1000>;
-               } ;
+               };
 
                sdhci1: sdhci@e0101000 {
                        compatible = "arasan,sdhci-8.9a";
                        interrupt-parent = <&intc>;
                        interrupts = <0 47 4>;
                        reg = <0xe0101000 0x1000>;
-               } ;
+               };
 
                slcr: slcr@f8000000 {
                        #address-cells = <1>;
 
                scutimer: timer@f8f00600 {
                        interrupt-parent = <&intc>;
-                       interrupts = < 1 13 0x301 >;
+                       interrupts = <1 13 0x301>;
                        compatible = "arm,cortex-a9-twd-timer";
-                       reg = < 0xf8f00600 0x20 >;
+                       reg = <0xf8f00600 0x20>;
                        clocks = <&clkc 4>;
-               } ;
+               };
 
                usb0: usb@e0002000 {
                        compatible = "xlnx,zynq-usb-2.20a", "chipidea,usb2";
index 07e2b7a7387de602fd383d7ab4f0325d9943cdb7..b6982c0c45dae9f3e03f527606476001a594c427 100644 (file)
@@ -21,9 +21,8 @@
        };
 
        chosen {
-               bootargs = "console=ttyPS0,115200 root=/dev/ram rw earlyprintk";
-               linux,stdout-path = &uart1;
-               stdout-path = &uart1;
+               bootargs = "root=/dev/ram rw earlyprintk";
+               stdout-path = "serial0:115200n8";
        };
 
        memory {
index 77e3bb0e631050aeaeae2cfc07d1a312a983e6fb..4fed2215365cf2d0585cc5d3cb4b5e2e4b9a80c9 100644 (file)
@@ -18,9 +18,8 @@
        };
 
        chosen {
-               bootargs = "console=ttyPS0,115200 root=/dev/ram rw earlyprintk";
-               linux,stdout-path = &uart1;
-               stdout-path = &uart1;
+               bootargs = "root=/dev/ram rw earlyprintk";
+               stdout-path = "serial0:115200n8";
        };
 
        memory {
        };
 };
 
-&spi0 {
-       status = "okay";
-       num-cs = <4>;
-       is-decoded-cs = <0>;
-};
-
 &can0 {
        status = "okay";
 };
        };
 };
 
+&spi0 {
+       status = "okay";
+       num-cs = <4>;
+       is-decoded-cs = <0>;
+};
+
 &uart1 {
        u-boot,dm-pre-reloc;
        status = "okay";
index 3e1769acb51f994c20a85f9353efc450563560aa..8d69f0e0f5ef4ecaaa1e459b0c8c75b5c9427160 100644 (file)
@@ -20,9 +20,8 @@
        };
 
        chosen {
-               bootargs = "console=ttyPS0,115200 root=/dev/ram rw earlyprintk";
-               linux,stdout-path = &uart1;
-               stdout-path = &uart1;
+               bootargs = "root=/dev/ram rw earlyprintk";
+               stdout-path = "serial0:115200n8";
        };
 
        memory {
        };
 };
 
-&spi1 {
-       status = "okay";
-       num-cs = <4>;
-       is-decoded-cs = <0>;
-};
-
 &can1 {
        status = "okay";
 };
        };
 };
 
+&spi1 {
+       status = "okay";
+       num-cs = <4>;
+       is-decoded-cs = <0>;
+};
+
 &uart1 {
        u-boot,dm-pre-reloc;
        status = "okay";
index 288e248374795238464c53f15f2ca10f2ebd3d06..77fdfcc00947f1172898be96213aafa683fecee6 100644 (file)
@@ -20,9 +20,8 @@
        };
 
        chosen {
-               bootargs = "console=ttyPS0,115200 root=/dev/ram rw earlyprintk";
-               linux,stdout-path = &uart0;
-               stdout-path = &uart0;
+               bootargs = "root=/dev/ram rw earlyprintk";
+               stdout-path = "serial0:115200n8";
        };
 
        memory {
        };
 };
 
-&spi0 {
-       status = "okay";
-       num-cs = <4>;
-       is-decoded-cs = <0>;
-       eeprom: at25@0 {
-               at25,byte-len = <8192>;
-               at25,addr-mode = <2>;
-               at25,page-size = <32>;
-
-               compatible = "atmel,at25";
-               reg = <2>;
-               spi-max-frequency = <1000000>;
-       };
-};
-
 &can1 {
        status = "okay";
 };
        };
 };
 
+&spi0 {
+       status = "okay";
+       num-cs = <4>;
+       is-decoded-cs = <0>;
+       eeprom: at25@0 {
+               at25,byte-len = <8192>;
+               at25,addr-mode = <2>;
+               at25,page-size = <32>;
+
+               compatible = "atmel,at25";
+               reg = <2>;
+               spi-max-frequency = <1000000>;
+       };
+};
+
 &uart0 {
        u-boot,dm-pre-reloc;
        status = "okay";
index 4481bd07c9e8debc552499dfc470875297832682..754604ea72519da1a8678183aceba55a0284a128 100644 (file)
@@ -41,7 +41,7 @@
        status = "okay";
        phy-handle = <&phy0>;
        phy-mode = "rgmii-id";
-       phy0: phy@0{
+       phy0: phy@0 {
                reg = <0>;
                max-speed = <100>;
        };
index 24a34e6d85d2e5c8ecf1e38a62f89608835a9154..8733604a57384eea27be29c8fac54c3b87a074c0 100644 (file)
                };
 
                uart0: serial@ff000000 {
-                       compatible = "cdns,uart-r1p8";
+                       compatible = "cdns,uart-r1p12";
                        status = "disabled";
                        interrupt-parent = <&gic>;
                        interrupts = <0 21 4>;
                };
 
                uart1: serial@ff010000 {
-                       compatible = "cdns,uart-r1p8";
+                       compatible = "cdns,uart-r1p12";
                        status = "disabled";
                        interrupt-parent = <&gic>;
                        interrupts = <0 22 4>;
                        compatible = "cdns,wdt-r1p2";
                        status = "disabled";
                        interrupt-parent = <&gic>;
-                       interrupts = <0 52 1>;
+                       interrupts = <0 113 1>;
                        reg = <0x0 0xfd4d0000 0x1000>;
                        timeout-sec = <10>;
                };
index d55bc31c43993cb7ebbb3fb983e3faecb715b7c7..b18333d1ca25fd29bb13100d58646fe01adb8316 100644 (file)
@@ -9,5 +9,6 @@
 #define _ASM_ARCH_CLK_H_
 
 unsigned long get_uart_clk(int dev_id);
+unsigned long zynqmp_get_system_timer_freq(void);
 
 #endif /* _ASM_ARCH_CLK_H_ */
index bbf89d9dd7460cc013d42e3de764eae2a96590c8..587938249e8f7e3cd501463a6bd1c54cf57dc94f 100644 (file)
@@ -41,11 +41,8 @@ struct crlapb_regs {
 
 #define crlapb_base ((struct crlapb_regs *)ZYNQMP_CRL_APB_BASEADDR)
 
-#if defined(CONFIG_SECURE_IOU)
-#define ZYNQMP_IOU_SCNTR       0xFF260000
-#else
+#define ZYNQMP_IOU_SCNTR_SECURE        0xFF260000
 #define ZYNQMP_IOU_SCNTR       0xFF250000
-#endif
 #define ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_EN   0x1
 #define ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_HDBG 0x2
 
@@ -57,9 +54,21 @@ struct iou_scntr {
 
 #define iou_scntr ((struct iou_scntr *)ZYNQMP_IOU_SCNTR)
 
+struct iou_scntr_secure {
+       u32 counter_control_register;
+       u32 reserved0[7];
+       u32 base_frequency_id_register;
+};
+
+#define iou_scntr_secure ((struct iou_scntr_secure *)ZYNQMP_IOU_SCNTR_SECURE)
+
 /* Bootmode setting values */
 #define BOOT_MODES_MASK        0x0000000F
-#define SD_MODE                0x00000003
+#define QSPI_MODE_24BIT        0x00000001
+#define QSPI_MODE_32BIT        0x00000002
+#define SD_MODE                0x00000003 /* sd 0 */
+#define SD_MODE1       0x00000005 /* sd 1 */
+#define NAND_MODE      0x00000004
 #define EMMC_MODE      0x00000006
 #define JTAG_MODE      0x00000000
 
@@ -106,9 +115,20 @@ struct apu_regs {
 #define apu_base ((struct apu_regs *)ZYNQMP_APU_BASEADDR)
 
 /* Board version value */
+#define ZYNQMP_CSU_BASEADDR            0xFFCA0000
 #define ZYNQMP_CSU_VERSION_SILICON     0x0
 #define ZYNQMP_CSU_VERSION_EP108       0x1
 #define ZYNQMP_CSU_VERSION_VELOCE      0x2
 #define ZYNQMP_CSU_VERSION_QEMU                0x3
 
+#define ZYNQMP_SILICON_VER_MASK                0xF000
+#define ZYNQMP_SILICON_VER_SHIFT       12
+
+struct csu_regs {
+       u32 reserved0[17];
+       u32 version;
+};
+
+#define csu_base ((struct csu_regs *)ZYNQMP_CSU_BASEADDR)
+
 #endif /* _ASM_ARCH_HARDWARE_H */
index 5b20accbcb172d7e0e40dc7c92933f5123e1485a..d74f8dbbc45dfb9f6440ea38fa44552404f436ef 100644 (file)
@@ -42,8 +42,6 @@ void zynq_ddrc_init(void)
                 */
                /* cppcheck-suppress nullPointer */
                memset((void *)0, 0, 1 * 1024 * 1024);
-
-               gd->ram_size /= 2;
        } else {
                puts("ECC disabled ");
        }
index 604f6815af5b460a775557ecf4be19d5753fb4cf..30ea484f48aafe00d536634722d0b31bddc50c26 100644 (file)
@@ -13,6 +13,7 @@ config TARGET_MICROBLAZE_GENERIC
        select SUPPORT_SPL
        select OF_CONTROL
        select DM
+       select DM_SERIAL
 
 endchoice
 
index 4955e812360bdd9d9c1bf94024f3b21485db1d48..069721033f081a08b13b459d4c1c69b8070426cf 100644 (file)
@@ -7,5 +7,5 @@
 
 extra-y        = start.o
 obj-y  = irq.o
-obj-y  += cpu.o interrupts.o cache.o exception.o timer.o
+obj-y  += interrupts.o cache.o exception.o timer.o
 obj-$(CONFIG_SPL_BUILD)        += spl.o
diff --git a/arch/microblaze/cpu/cpu.c b/arch/microblaze/cpu/cpu.c
deleted file mode 100644 (file)
index 8e459d8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * (C) Copyright 2004 Atmark Techno, Inc.
- *
- * Yasushi SHOJI <yashi@atmark-techno.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-/* EMPTY FILE */
index 206be3e3ee588ed1192d3d4e5fc9e93b3645c602..e9923b65ef3237bd1e2a60d3db34e0c5ee537146 100644 (file)
@@ -155,6 +155,10 @@ clear_bss:
        cmp     r6, r5, r4 /* check if we have reach the end */
        bnei    r6, 2b
 3:     /* jumping to board_init */
+#ifdef CONFIG_DEBUG_UART
+       bralid  r15, debug_uart_init
+       nop
+#endif
 #ifndef CONFIG_SPL_BUILD
        or      r5, r0, r0      /* flags - empty */
        addi    r31, r0, _gd
index efd316573ce6e9f8cf42acfc21af16c3c491ac11..36af1b9419b09f43d815b732fe8b36deb10e76c5 100644 (file)
@@ -55,12 +55,6 @@ config TARGET_YOSEMITE
 config TARGET_YUCCA
        bool "Support yucca"
 
-config TARGET_FX12MM
-       bool "Support fx12mm"
-
-config TARGET_V5FX30TEVAL
-       bool "Support v5fx30teval"
-
 config TARGET_CPCI2DP
        bool "Support CPCI2DP"
 
@@ -115,14 +109,19 @@ config TARGET_PIP405
 config TARGET_XPEDITE1000
        bool "Support xpedite1000"
 
-config TARGET_ML507
-       bool "Support ml507"
-
 config TARGET_XILINX_PPC405_GENERIC
        bool "Support xilinx-ppc405-generic"
+       select SUPPORT_SPL
+       select OF_CONTROL
+       select DM
+       select DM_SERIAL
 
 config TARGET_XILINX_PPC440_GENERIC
        bool "Support xilinx-ppc440-generic"
+       select SUPPORT_SPL
+       select OF_CONTROL
+       select DM
+       select DM_SERIAL
 
 endchoice
 
@@ -139,8 +138,6 @@ source "board/amcc/sequoia/Kconfig"
 source "board/amcc/walnut/Kconfig"
 source "board/amcc/yosemite/Kconfig"
 source "board/amcc/yucca/Kconfig"
-source "board/avnet/fx12mm/Kconfig"
-source "board/avnet/v5fx30teval/Kconfig"
 source "board/esd/cpci2dp/Kconfig"
 source "board/esd/cpci405/Kconfig"
 source "board/esd/plu405/Kconfig"
@@ -158,7 +155,6 @@ source "board/mpl/mip405/Kconfig"
 source "board/mpl/pip405/Kconfig"
 source "board/t3corp/Kconfig"
 source "board/xes/xpedite1000/Kconfig"
-source "board/xilinx/ml507/Kconfig"
 source "board/xilinx/ppc405-generic/Kconfig"
 source "board/xilinx/ppc440-generic/Kconfig"
 
index d9b565468b609869bbd10c38fd09c1cd3b84f183..45997d6eae0640dee7e36cffdcf1460afd336379 100644 (file)
@@ -9,7 +9,7 @@
  * Travis B. Sawyer, Sandburst Corporation, tsawyer@sandburst.com
  *
  * (C) Copyright 2008 (PPC440X05 port for Virtex 5 FX)
- * Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * Work supported by Qtechnology (htpp://qtec.com)
  *
  * SPDX-License-Identifier:    GPL-2.0+
index bd955ed83ff0b14f90485aa5c9b9443cfec4b6bc..fb453b1adfb51bdf09cb3fe229bd6652cde35a63 100644 (file)
@@ -9,7 +9,7 @@
  * Travis B. Sawyer, Sandburst Corporation, tsawyer@sandburst.com
  *
  * (C) Copyright 2008 (PPC440X05 port for Virtex 5 FX)
- * Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * Work supported by Qtechnology (htpp://qtec.com)
  *
  * SPDX-License-Identifier:    GPL-2.0+
index 71e1be02a6784a246d89ad28c62f69ec63f82b72..1a2e917eb23b032f83fc5c3cd6e00c9659c8ebab 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de
  * SPDX-License-Identifier:    GPL-2.0+
index 5d9f5c2822b26b0a40707eb781913ff3923e59d0..80b4c0c4e374f27cb0545845508ce51919df4e1f 100644 (file)
@@ -3,6 +3,8 @@
 #
 
 dtb-$(CONFIG_TARGET_CANYONLANDS) += arches.dtb canyonlands.dtb glacier.dtb
+dtb-$(CONFIG_TARGET_XILINX_PPC440_GENERIC) += xilinx-ppc440-generic.dtb
+dtb-$(CONFIG_TARGET_XILINX_PPC405_GENERIC) += xilinx-ppc405-generic.dtb
 
 targets += $(dtb-y)
 
diff --git a/arch/powerpc/dts/xilinx-ppc405-generic.dts b/arch/powerpc/dts/xilinx-ppc405-generic.dts
new file mode 100644 (file)
index 0000000..6498321
--- /dev/null
@@ -0,0 +1,15 @@
+/dts-v1/;
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       aliases {
+               console = &uart0;
+       };
+
+       uart0: serial@84000000 {
+               compatible = "xlnx,xps-uartlite-1.00.a";
+               interrupts = <0 0>;
+               reg = <0x84000000 0x10000>;
+       };
+} ;
diff --git a/arch/powerpc/dts/xilinx-ppc440-generic.dts b/arch/powerpc/dts/xilinx-ppc440-generic.dts
new file mode 100644 (file)
index 0000000..c83523a
--- /dev/null
@@ -0,0 +1,15 @@
+/dts-v1/;
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       aliases {
+               console = &uart0;
+       };
+
+       uart0: serial@8b000000 {
+               compatible = "xlnx,xps-uartlite-1.00.a";
+               interrupts = <0 0>;
+               reg = <0x8b000000 0x10000>;
+       };
+} ;
index 1a6a93384e76f696af3ac958ee4cd9245dddaf7b..9f370dd83c9d1d0f8f50bf4d7a53e107f694bc16 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de
  *
index 333a0372b7888efdb1ffe15fa6e5fbf49cadd86d..5766bde366cee8b4bb55de63f55eb8517c500fa4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de
  * SPDX-License-Identifier:    GPL-2.0+
diff --git a/board/avnet/fx12mm/Kconfig b/board/avnet/fx12mm/Kconfig
deleted file mode 100644 (file)
index 0b67ebd..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-if TARGET_FX12MM
-
-config SYS_BOARD
-       default "fx12mm"
-
-config SYS_VENDOR
-       default "avnet"
-
-config SYS_CONFIG_NAME
-       default "fx12mm"
-
-endif
diff --git a/board/avnet/fx12mm/MAINTAINERS b/board/avnet/fx12mm/MAINTAINERS
deleted file mode 100644 (file)
index c92e258..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-FX12MM BOARD
-M:     Georg Schardt <schardt@team-ctech.de>
-S:     Maintained
-F:     board/avnet/fx12mm/
-F:     include/configs/fx12mm.h
-F:     configs/fx12mm_defconfig
-F:     configs/fx12mm_flash_defconfig
diff --git a/board/avnet/fx12mm/Makefile b/board/avnet/fx12mm/Makefile
deleted file mode 100644 (file)
index 618b42f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# (C) Copyright 2008
-# Ricardo Ribalda,Universidad Autonoma de Madrid, ricardo.ribalda@uam.es
-# This work has been supported by: Qtechnology http://qtec.com/
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-
-obj-y  += fx12mm.o
-
-include $(srctree)/board/xilinx/ppc405-generic/Makefile
diff --git a/board/avnet/fx12mm/fx12mm.c b/board/avnet/fx12mm/fx12mm.c
deleted file mode 100644 (file)
index 92e1cfb..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * (C) Copyright 2008
- *
- * Author: Xilinx Inc.
- *
- * Modified by:
- *  Georg Schardt <schardt@team-ctech.de>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <config.h>
-#include <common.h>
-#include <asm/processor.h>
-
-int checkboard(void)
-{
-       char buf[64];
-       int i;
-       int l = getenv_f("serial#", buf, sizeof(buf));
-
-       if (l < 0) {
-               printf("Avnet Virtex4 FX12 with no serial #");
-       } else {
-               printf("Avnet Virtex4 FX12 Minimodul # ");
-               for (i = 0; i < l; ++i) {
-                       if (buf[i] == ' ')
-                               break;
-                       putc(buf[i]);
-               }
-       }
-       putc('\n');
-       return 0;
-}
diff --git a/board/avnet/fx12mm/xparameters.h b/board/avnet/fx12mm/xparameters.h
deleted file mode 100644 (file)
index 94f682f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * (C) Copyright 2008
- *
- * Georg Schardt <schardt@team-ctech.de>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- *
- * CAUTION: This file is based on the xparameters.h automatically
- * generated by libgen. Version: Xilinx EDK 10.1.02 Build EDK_K_SP2.5
- */
-
-#ifndef __XPARAMETER_H__
-#define __XPARAMETER_H__
-
-/* RS232 */
-#define XPAR_UARTNS550_0_CLOCK_FREQ_HZ 100000000
-#define XPAR_UARTNS550_0_BASEADDR 0x83E00000
-
-
-/* INT_C */
-#define XPAR_XPS_INTC_0_DEVICE_ID 0
-#define XPAR_XPS_INTC_0_BASEADDR 0x81800000
-#define XPAR_INTC_MAX_NUM_INTR_INPUTS 2
-
-/* CPU core clock */
-#define XPAR_CORE_CLOCK_FREQ_HZ 300000000
-#define XPAR_PLB_CLOCK_FREQ_HZ  100000000
-
-/* RAM */
-#define XPAR_DDR2_SDRAM_MEM_BASEADDR 0x00000000
-
-/* FLASH */
-#define XPAR_FLASH_MEM0_BASEADDR 0xFFC00000
-
-#endif
diff --git a/board/avnet/v5fx30teval/Kconfig b/board/avnet/v5fx30teval/Kconfig
deleted file mode 100644 (file)
index 079387b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-if TARGET_V5FX30TEVAL
-
-config SYS_BOARD
-       default "v5fx30teval"
-
-config SYS_VENDOR
-       default "avnet"
-
-config SYS_CONFIG_NAME
-       default "v5fx30teval"
-
-endif
diff --git a/board/avnet/v5fx30teval/MAINTAINERS b/board/avnet/v5fx30teval/MAINTAINERS
deleted file mode 100644 (file)
index 91dde7a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-V5FX30TEVAL BOARD
-M:     Ricardo Ribalda <ricardo.ribalda@uam.es>
-S:     Maintained
-F:     board/avnet/v5fx30teval/
-F:     include/configs/v5fx30teval.h
-F:     configs/v5fx30teval_defconfig
-F:     configs/v5fx30teval_flash_defconfig
diff --git a/board/avnet/v5fx30teval/Makefile b/board/avnet/v5fx30teval/Makefile
deleted file mode 100644 (file)
index 8c41af0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# (C) Copyright 2008
-# Ricardo Ribalda,Universidad Autonoma de Madrid, ricardo.ribalda@uam.es
-# This work has been supported by: Qtechnology http://qtec.com/
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-
-obj-y  += v5fx30teval.o
-
-include $(srctree)/board/xilinx/ppc440-generic/Makefile
diff --git a/board/avnet/v5fx30teval/v5fx30teval.c b/board/avnet/v5fx30teval/v5fx30teval.c
deleted file mode 100644 (file)
index 68b0eb9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- * This work has been supported by: QTechnology  http://qtec.com/
- * SPDX-License-Identifier:    GPL-2.0+
-*/
-
-#include <config.h>
-#include <common.h>
-#include <asm/processor.h>
-
-
-int checkboard(void)
-{
-       puts("Avnet Virtex 5 FX30 Evaluation Board\n");
-       return 0;
-}
diff --git a/board/avnet/v5fx30teval/xparameters.h b/board/avnet/v5fx30teval/xparameters.h
deleted file mode 100644 (file)
index 95b8c28..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- * This work has been supported by: QTechnology  http://qtec.com/
- * based on xparameters.h by Xilinx
- *
- * SPDX-License-Identifier:    GPL-2.0+
-*/
-
-#ifndef XPARAMETER_H
-#define XPARAMETER_H
-
-#define XPAR_DDR2_SDRAM_MEM_BASEADDR   0x00000000
-#define XPAR_INTC_0_BASEADDR           0x81800000
-#define XPAR_UARTLITE_0_BASEADDR       0x84000000
-#define XPAR_FLASH_MEM0_BASEADDR       0xFF000000
-#define XPAR_PLB_CLOCK_FREQ_HZ         100000000
-#define XPAR_CORE_CLOCK_FREQ_HZ                400000000
-#define XPAR_INTC_MAX_NUM_INTR_INPUTS  13
-#define XPAR_UARTLITE_0_BAUDRATE       9600
-
-#endif
index dfa6293222236ad2f01ff3a81e80dc85ad03ce24..ccd4ec955b5b74f6d55ec95c50d2828e1b55c589 100644 (file)
@@ -12,7 +12,6 @@
 #include <common.h>
 #include <config.h>
 #include <fdtdec.h>
-#include <netdev.h>
 #include <asm/processor.h>
 #include <asm/microblaze_intc.h>
 #include <asm/asm.h>
@@ -24,7 +23,6 @@ DECLARE_GLOBAL_DATA_PTR;
 static int reset_pin = -1;
 #endif
 
-#if CONFIG_IS_ENABLED(OF_CONTROL)
 ulong ram_base;
 
 void dram_init_banksize(void)
@@ -58,14 +56,6 @@ int dram_init(void)
 
        return 0;
 };
-#else
-int dram_init(void)
-{
-       gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
-
-       return 0;
-}
-#endif
 
 int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
@@ -86,7 +76,7 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return 0;
 }
 
-int gpio_init (void)
+static int gpio_init(void)
 {
 #ifdef CONFIG_XILINX_GPIO
        reset_pin = gpio_alloc(CONFIG_SYS_GPIO_0_ADDR, "reset", 1);
@@ -96,32 +86,9 @@ int gpio_init (void)
        return 0;
 }
 
-void board_init(void)
+int board_late_init(void)
 {
        gpio_init();
-}
 
-int board_eth_init(bd_t *bis)
-{
-       int ret = 0;
-
-#ifdef CONFIG_XILINX_AXIEMAC
-       ret |= xilinx_axiemac_initialize(bis, XILINX_AXIEMAC_BASEADDR,
-                                               XILINX_AXIDMA_BASEADDR);
-#endif
-
-#if defined(CONFIG_XILINX_EMACLITE) && defined(XILINX_EMACLITE_BASEADDR)
-       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
-
-       return ret;
+       return 0;
 }
index 8ba146cb88db7833f8b296b73390b20a63bb8827..ccb528ed9266646b5d4786efe30680925f9a6639 100644 (file)
 #define XILINX_TIMER_BASEADDR  0x41c00000
 #define XILINX_TIMER_IRQ       0
 
-/* Uart pheriphery is RS232_Uart */
-#define XILINX_UARTLITE_BASEADDR       0x40600000
-#define XILINX_UARTLITE_BAUDRATE       115200
-
-/* IIC pheriphery is IIC_EEPROM */
-#define XILINX_IIC_0_BASEADDR  0x40800000
-#define XILINX_IIC_0_FREQ      100000
-#define XILINX_IIC_0_BIT       0
-
 /* GPIO is LEDs_4Bit*/
 #define XILINX_GPIO_BASEADDR   0x40000000
 
 #define XILINX_FLASH_START     0x2c000000
 #define XILINX_FLASH_SIZE      0x00800000
 
-/* Main Memory is DDR_SDRAM_64Mx32 */
-#define XILINX_RAM_START       0x28000000
-#define XILINX_RAM_SIZE        0x04000000
-
-/* Sysace Controller is SysACE_CompactFlash */
-#define XILINX_SYSACE_BASEADDR 0x41800000
-#define XILINX_SYSACE_HIGHADDR 0x4180ffff
-#define XILINX_SYSACE_MEM_WIDTH        16
-
-/* Ethernet controller is Ethernet_MAC */
-#define XILINX_EMACLITE_BASEADDR       0x40C00000
-
 /* Watchdog IP is wxi_timebase_wdt_0 */
 #define XILINX_WATCHDOG_BASEADDR       0x50000000
 #define XILINX_WATCHDOG_IRQ            1
diff --git a/board/xilinx/ml507/Kconfig b/board/xilinx/ml507/Kconfig
deleted file mode 100644 (file)
index d580a7b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-if TARGET_ML507
-
-config SYS_BOARD
-       default "ml507"
-
-config SYS_VENDOR
-       default "xilinx"
-
-config SYS_CONFIG_NAME
-       default "ml507"
-
-endif
diff --git a/board/xilinx/ml507/MAINTAINERS b/board/xilinx/ml507/MAINTAINERS
deleted file mode 100644 (file)
index 8b40f44..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-ML507 BOARD
-M:     Ricardo Ribalda <ricardo.ribalda@uam.es>
-S:     Maintained
-F:     board/xilinx/ml507/
-F:     include/configs/ml507.h
-F:     configs/ml507_defconfig
-F:     configs/ml507_flash_defconfig
diff --git a/board/xilinx/ml507/Makefile b/board/xilinx/ml507/Makefile
deleted file mode 100644 (file)
index 9a3809f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# (C) Copyright 2008
-# Ricardo Ribalda,Universidad Autonoma de Madrid, ricardo.ribalda@uam.es
-# This work has been supported by: Qtechnology http://qtec.com/
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-
-obj-y  += ml507.o
-
-include $(srctree)/board/xilinx/ppc440-generic/Makefile
diff --git a/board/xilinx/ml507/ml507.c b/board/xilinx/ml507/ml507.c
deleted file mode 100644 (file)
index 83b764b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- * This work has been supported by: QTechnology  http://qtec.com/
- * SPDX-License-Identifier:    GPL-2.0+
-*/
-
-#include <config.h>
-#include <common.h>
-#include <asm/processor.h>
-
-
-int checkboard(void)
-{
-       puts("Xilinx ML507 Board\n");
-       return 0;
-}
diff --git a/board/xilinx/ml507/xparameters.h b/board/xilinx/ml507/xparameters.h
deleted file mode 100644 (file)
index e30e592..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- * This work has been supported by: QTechnology  http://qtec.com/
- * based on xparameters-ml507.h by Xilinx
- *
- * SPDX-License-Identifier:    GPL-2.0+
-*/
-
-#ifndef XPARAMETER_H
-#define XPARAMETER_H
-
-#define XPAR_DDR2_SDRAM_MEM_BASEADDR   0x00000000
-#define XPAR_IIC_EEPROM_BASEADDR       0x81600000
-#define XPAR_INTC_0_BASEADDR           0x81800000
-#define XPAR_UARTLITE_0_BASEADDR       0x84000000
-#define XPAR_FLASH_MEM0_BASEADDR       0xFE000000
-#define XPAR_PLB_CLOCK_FREQ_HZ         100000000
-#define XPAR_CORE_CLOCK_FREQ_HZ                400000000
-#define XPAR_INTC_MAX_NUM_INTR_INPUTS  13
-#define XPAR_UARTLITE_0_BAUDRATE       9600
-
-#endif
index 2b0c98dc8b7346d1430531de24a931f43a1b9e80..ba48f50c29bf9c38d6c40bdbf0e3a431f9bae0ec 100644 (file)
@@ -1,5 +1,5 @@
 PPC405-GENERIC BOARD
-M:     Ricardo Ribalda <ricardo.ribalda@uam.es>
+M:     Ricardo Ribalda <ricardo.ribalda@gmail.com>
 S:     Maintained
 F:     board/xilinx/ppc405-generic/
 F:     include/configs/xilinx-ppc405-generic.h
index c9da870657477df299f1708d593d2b704c037285..2800f68626408d2897aaefd6ba49c93c0282a7d5 100644 (file)
@@ -3,10 +3,10 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+# Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
 # Work supported by Qtechnology http://www.qtec.com
 #
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y  += ../../xilinx/ppc405-generic/xilinx_ppc405_generic.o
+obj-y  += xilinx_ppc405_generic.o
index e3dd468f1eb36df3c221e740d9beda797cb1fd96..3729f07624a3420b2fc733e30363a5f3fe58f410 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  *
  * SPDX-License-Identifier:    GPL-2.0+
 #include <common.h>
 #include <asm/processor.h>
 
-ulong __get_PCI_freq(void)
+ulong get_PCI_freq(void)
 {
        return 0;
 }
 
-ulong get_PCI_freq(void) __attribute__((weak, alias("__get_PCI_freq")));
-
-int __board_pre_init(void)
-{
-       return 0;
-}
-int board_pre_init(void) __attribute__((weak, alias("__board_pre_init")));
-
-int __checkboard(void)
+int checkboard(void)
 {
        puts("Xilinx PPC405 Generic Board\n");
        return 0;
 }
-int checkboard(void) __attribute__((weak, alias("__checkboard")));
 
-phys_size_t __initdram(int board_type)
+phys_size_t initdram(int board_type)
 {
        return get_ram_size(XPAR_DDR2_SDRAM_MEM_BASEADDR,
                            CONFIG_SYS_SDRAM_SIZE_MB * 1024 * 1024);
 }
-phys_size_t initdram(int) __attribute__((weak, alias("__initdram")));
 
-void __get_sys_info(sys_info_t *sysInfo)
+void get_sys_info(sys_info_t *sys_info)
 {
-       sysInfo->freqProcessor = XPAR_CORE_CLOCK_FREQ_HZ;
-       sysInfo->freqPLB = XPAR_PLB_CLOCK_FREQ_HZ;
-       sysInfo->freqPCI = 0;
+       sys_info->freqProcessor = XPAR_CORE_CLOCK_FREQ_HZ;
+       sys_info->freqPLB = XPAR_PLB_CLOCK_FREQ_HZ;
+       sys_info->freqPCI = 0;
 
        return;
 }
-void get_sys_info(sys_info_t *) __attribute__((weak, alias("__get_sys_info")));
+
+int get_serial_clock(void){
+       return XPAR_UARTNS550_0_CLOCK_FREQ_HZ;
+}
index f0ff78fca565a53af36f82b46df4091be9b2c9ed..c3df9e51091f26977d56e4a070b9c7b3b17c3a15 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  * based on xparameters-ml507.h by Xilinx
  *
 #define XPAR_IIC_EEPROM_BASEADDR       0x81600000
 #define XPAR_INTC_0_BASEADDR           0x81800000
 #define XPAR_SPI_0_BASEADDR             0x83400000
-#define XPAR_UARTLITE_0_BASEADDR       0x84000000
 #define XPAR_FLASH_MEM0_BASEADDR       0xFE000000
 #define XPAR_PLB_CLOCK_FREQ_HZ         100000000
 #define XPAR_CORE_CLOCK_FREQ_HZ                400000000
-#define XPAR_INTC_MAX_NUM_INTR_INPUTS  13
-#define XPAR_UARTLITE_0_BAUDRATE       9600
+#define XPAR_INTC_MAX_NUM_INTR_INPUTS  32
 #define XPAR_SPI_0_NUM_TRANSFER_BITS   8
+#define XPAR_UARTNS550_0_CLOCK_FREQ_HZ 100000000
 
 #endif
index 2d0b11af914bfdf002193747f220ae08c226159d..0258c8204ae143116ada7800faa1db5cb7d597d3 100644 (file)
@@ -1,5 +1,5 @@
 PPC440-GENERIC BOARD
-M:     Ricardo Ribalda <ricardo.ribalda@uam.es>
+M:     Ricardo Ribalda <ricardo.ribalda@gmail.com>
 S:     Maintained
 F:     board/xilinx/ppc440-generic/
 F:     include/configs/xilinx-ppc440-generic.h
index 0acd95d6e4e2b01a54883f56837d67c6ee4b49c3..4d5f41029ac684a17ace942f0dd093c50a91f9c3 100644 (file)
@@ -3,11 +3,11 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+# Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
 # Work supported by Qtechnology http://www.qtec.com
 #
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y  += ../../xilinx/ppc440-generic/xilinx_ppc440_generic.o
-extra-y        += ../../xilinx/ppc440-generic/init.o
+obj-y  += xilinx_ppc440_generic.o
+extra-y += init.o
index 4598a376843a4ecaee9dc631cee9cf91fead0e9d..f9ff35f51b7a1449d5eccce685aa93f4a60a574b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  (C) Copyright 2008
- *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  *  This work has been supported by: QTechnology  http://qtec.com/
  *
  * SPDX-License-Identifier:    GPL-2.0+
index 74df2f4ff785fb0d44cbf00f0cce4ce2ca3a03f4..d8233529304d018b1d720d31b67e299a1244135a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  *
  * SPDX-License-Identifier:    GPL-2.0+
@@ -8,34 +8,51 @@
 
 #include <config.h>
 #include <common.h>
+#include <netdev.h>
 #include <asm/processor.h>
 
-int __board_pre_init(void)
-{
-       return 0;
-}
-int board_pre_init(void) __attribute__((weak, alias("__board_pre_init")));
-
-int __checkboard(void)
+int checkboard(void)
 {
        puts("Xilinx PPC440 Generic Board\n");
        return 0;
 }
-int checkboard(void) __attribute__((weak, alias("__checkboard")));
 
-phys_size_t __initdram(int board_type)
+phys_size_t initdram(int board_type)
 {
        return get_ram_size(XPAR_DDR2_SDRAM_MEM_BASEADDR,
                            CONFIG_SYS_SDRAM_SIZE_MB * 1024 * 1024);
 }
-phys_size_t initdram(int) __attribute__((weak, alias("__initdram")));
 
-void __get_sys_info(sys_info_t *sysInfo)
+void get_sys_info(sys_info_t *sys_info)
 {
-       sysInfo->freqProcessor = XPAR_CORE_CLOCK_FREQ_HZ;
-       sysInfo->freqPLB = XPAR_PLB_CLOCK_FREQ_HZ;
-       sysInfo->freqPCI = 0;
+       sys_info->freqProcessor = XPAR_CORE_CLOCK_FREQ_HZ;
+       sys_info->freqPLB = XPAR_PLB_CLOCK_FREQ_HZ;
+       sys_info->freqPCI = 0;
 
        return;
 }
-void get_sys_info(sys_info_t *) __attribute__((weak, alias("__get_sys_info")));
+
+int get_serial_clock(void){
+       return XPAR_UARTNS550_0_CLOCK_FREQ_HZ;
+}
+
+int board_eth_init(bd_t *bis)
+{
+       int ret = 0;
+
+       puts("Init xilinx temac\n");
+#ifdef XPAR_LLTEMAC_0_BASEADDR
+       ret |= xilinx_ll_temac_eth_init(bis, XPAR_LLTEMAC_0_BASEADDR,
+                       XILINX_LL_TEMAC_M_SDMA_DCR | XILINX_LL_TEMAC_M_SDMA_PLB,
+                       XPAR_LLTEMAC_0_LLINK_CONNECTED_BASEADDR);
+
+#endif
+
+#ifdef XPAR_LLTEMAC_1_BASEADDR
+       ret |= xilinx_ll_temac_eth_init(bis, XPAR_LLTEMAC_1_BASEADDR,
+                       XILINX_LL_TEMAC_M_SDMA_DCR | XILINX_LL_TEMAC_M_SDMA_PLB,
+                       XPAR_LLTEMAC_1_LLINK_CONNECTED_BASEADDR);
+#endif
+
+       return ret;
+}
index e30e592bbe1257a3b964cbf866e61243f4c1bd68..b45a6a1d7668176e2c595992740d325618dd43e2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  * based on xparameters-ml507.h by Xilinx
  *
 
 #define XPAR_DDR2_SDRAM_MEM_BASEADDR   0x00000000
 #define XPAR_IIC_EEPROM_BASEADDR       0x81600000
-#define XPAR_INTC_0_BASEADDR           0x81800000
-#define XPAR_UARTLITE_0_BASEADDR       0x84000000
-#define XPAR_FLASH_MEM0_BASEADDR       0xFE000000
+#define XPAR_INTC_0_BASEADDR           0x87000000
+#define XPAR_FLASH_MEM0_BASEADDR       0xF0000000
 #define XPAR_PLB_CLOCK_FREQ_HZ         100000000
 #define XPAR_CORE_CLOCK_FREQ_HZ                400000000
-#define XPAR_INTC_MAX_NUM_INTR_INPUTS  13
-#define XPAR_UARTLITE_0_BAUDRATE       9600
+#define XPAR_INTC_MAX_NUM_INTR_INPUTS  32
+#define XPAR_UARTNS550_0_CLOCK_FREQ_HZ 100000000
+#define XPAR_LLTEMAC_0_LLINK_CONNECTED_BASEADDR 0x80
+#define XPAR_LLTEMAC_1_LLINK_CONNECTED_BASEADDR 0x98
+#define XPAR_LLTEMAC_0_BASEADDR                0x83000000
+#define XPAR_LLTEMAC_1_BASEADDR                0x83000040
 
 #endif
index 414f5302a0662fb860b5a3410d67b3e80df349b1..01bae5d67e3f9ee686013a4db934a7ff9cac9144 100644 (file)
@@ -8,7 +8,6 @@
 #include <fdtdec.h>
 #include <fpga.h>
 #include <mmc.h>
-#include <netdev.h>
 #include <zynqpl.h>
 #include <asm/arch/hardware.h>
 #include <asm/arch/sys_proto.h>
@@ -94,34 +93,11 @@ int board_late_init(void)
 #ifdef CONFIG_DISPLAY_BOARDINFO
 int checkboard(void)
 {
-       puts("Board:\tXilinx Zynq\n");
+       puts("Board: Xilinx Zynq\n");
        return 0;
 }
 #endif
 
-int board_eth_init(bd_t *bis)
-{
-       u32 ret = 0;
-
-#ifdef CONFIG_XILINX_AXIEMAC
-       ret |= xilinx_axiemac_initialize(bis, XILINX_AXIEMAC_BASEADDR,
-                                               XILINX_AXIDMA_BASEADDR);
-#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
-       return ret;
-}
-
 int dram_init(void)
 {
 #if CONFIG_IS_ENABLED(OF_CONTROL)
index 2cf47125d433c1f99c23aa803cf1d9d6c622963b..44d347ed3bf0e857244ebb2971bf7990db73432e 100644 (file)
@@ -9,6 +9,7 @@
 #include <netdev.h>
 #include <ahci.h>
 #include <scsi.h>
+#include <asm/arch/clk.h>
 #include <asm/arch/hardware.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/io.h>
@@ -28,10 +29,18 @@ int board_early_init_r(void)
 {
        u32 val;
 
-       val = readl(&crlapb_base->timestamp_ref_ctrl);
-       val |= ZYNQMP_CRL_APB_TIMESTAMP_REF_CTRL_CLKACT;
-       writel(val, &crlapb_base->timestamp_ref_ctrl);
-
+       if (current_el() == 3) {
+               val = readl(&crlapb_base->timestamp_ref_ctrl);
+               val |= ZYNQMP_CRL_APB_TIMESTAMP_REF_CTRL_CLKACT;
+               writel(val, &crlapb_base->timestamp_ref_ctrl);
+
+               /* Program freq register in System counter */
+               writel(zynqmp_get_system_timer_freq(),
+                      &iou_scntr_secure->base_frequency_id_register);
+               /* And enable system counter */
+               writel(ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_EN,
+                      &iou_scntr_secure->counter_control_register);
+       }
        /* Program freq register in System counter and enable system counter */
        writel(gd->cpu_clk, &iou_scntr->base_frequency_id_register);
        writel(ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_HDBG |
@@ -48,11 +57,6 @@ int dram_init(void)
        return 0;
 }
 
-int timer_init(void)
-{
-       return 0;
-}
-
 void reset_cpu(ulong addr)
 {
 }
@@ -73,11 +77,36 @@ int board_late_init(void)
        reg = readl(&crlapb_base->boot_mode);
        bootmode = reg & BOOT_MODES_MASK;
 
+       puts("Bootmode: ");
        switch (bootmode) {
-       case SD_MODE:
+       case JTAG_MODE:
+               puts("JTAG_MODE\n");
+               setenv("modeboot", "jtagboot");
+               break;
+       case QSPI_MODE_24BIT:
+       case QSPI_MODE_32BIT:
+               setenv("modeboot", "qspiboot");
+               puts("QSPI_MODE\n");
+               break;
        case EMMC_MODE:
+               puts("EMMC_MODE\n");
+               setenv("modeboot", "sdboot");
+               break;
+       case SD_MODE:
+               puts("SD_MODE\n");
                setenv("modeboot", "sdboot");
                break;
+       case SD_MODE1:
+               puts("SD_MODE1\n");
+#if defined(CONFIG_ZYNQ_SDHCI0) && defined(CONFIG_ZYNQ_SDHCI1)
+               setenv("sdbootdev", "1");
+#endif
+               setenv("modeboot", "sdboot");
+               break;
+       case NAND_MODE:
+               puts("NAND_MODE\n");
+               setenv("modeboot", "nandboot");
+               break;
        default:
                printf("Invalid Boot Mode:0x%x\n", bootmode);
                break;
@@ -88,7 +117,7 @@ int board_late_init(void)
 
 int checkboard(void)
 {
-       puts("Board:\tXilinx ZynqMP\n");
+       puts("Board: Xilinx ZynqMP\n");
        return 0;
 }
 
index deed6d825558e561f90a62d0859cc8fefd21aa31..8eda68b4f9972e1be0bb46f1c69f76be893402d6 100644 (file)
@@ -205,7 +205,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        print_num("sram start     ",    (ulong)bd->bi_sramstart);
        print_num("sram size      ",    (ulong)bd->bi_sramsize);
 #endif
-#if defined(CONFIG_CMD_NET)
+#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
        print_eths();
 #endif
        printf("baudrate    = %u bps\n", gd->baudrate);
index 7f99aabf8a5c69454a19fced5a71c596b043dddc..8956eb1b654adf4caef2681b8f8a6b93e1245583 100644 (file)
@@ -86,7 +86,7 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                        debug("*  fpga: cmdline image address = 0x%08lx\n",
                              (ulong)fpga_data);
                }
-               debug("%s: fpga_data = 0x%x\n", __func__, (uint)fpga_data);
+               debug("%s: fpga_data = 0x%lx\n", __func__, (ulong)fpga_data);
 
        case 3:         /* fpga <op> <dev | data addr> */
                dev = (int)simple_strtoul(argv[2], NULL, 16);
@@ -107,13 +107,13 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                        } else
 #endif
                        {
-                               fpga_data = (void *)dev;
+                               fpga_data = (void *)(uintptr_t)dev;
                                debug("*  fpga: cmdline image addr = 0x%08lx\n",
                                      (ulong)fpga_data);
                        }
 
-                       debug("%s: fpga_data = 0x%x\n",
-                             __func__, (uint)fpga_data);
+                       debug("%s: fpga_data = 0x%lx\n",
+                             __func__, (ulong)fpga_data);
                        dev = FPGA_INVALID_DEVICE;      /* reset device num */
                }
 
diff --git a/configs/fx12mm_defconfig b/configs/fx12mm_defconfig
deleted file mode 100644 (file)
index c714d0d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_FX12MM=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,INIT_TLB=board/xilinx/ppc405-generic/init.o"
-CONFIG_SYS_PROMPT="FX12MM:/# "
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
-CONFIG_SYS_NS16550=y
diff --git a/configs/fx12mm_flash_defconfig b/configs/fx12mm_flash_defconfig
deleted file mode 100644 (file)
index ac38412..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_FX12MM=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC,INIT_TLB=board/xilinx/ppc405-generic/init.o"
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
-CONFIG_SYS_NS16550=y
index ed336e6bc4412dd7bf9c4063c6d057139fdfa977..39c2ad2813dcd4ec72e7b77afbcdb3c2575e2a1c 100644 (file)
@@ -1,10 +1,24 @@
 CONFIG_MICROBLAZE=y
 CONFIG_SPL_SYS_MALLOC_SIMPLE=y
+CONFIG_SPL_DM=y
 CONFIG_TARGET_MICROBLAZE_GENERIC=y
 CONFIG_SYS_TEXT_BASE=0x29000000
 CONFIG_DEFAULT_DEVICE_TREE="microblaze-generic"
 CONFIG_SPL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_HUSH_PARSER=y
 CONFIG_SYS_PROMPT="U-Boot-mONStR> "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_TFTPPUT=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_PING=y
+CONFIG_SPL_OF_CONTROL=y
 CONFIG_OF_EMBED=y
+CONFIG_NETCONSOLE=y
+CONFIG_DM_ETH=y
+CONFIG_XILINX_AXIEMAC=y
+CONFIG_XILINX_EMACLITE=y
+CONFIG_SYS_NS16550=y
+CONFIG_XILINX_UARTLITE=y
diff --git a/configs/ml507_defconfig b/configs/ml507_defconfig
deleted file mode 100644 (file)
index d1e4e30..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_ML507=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,BOOT_FROM_XMD=1,INIT_TLB=board/xilinx/ppc440-generic/init.o"
-CONFIG_SYS_PROMPT="ml507:/# "
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
diff --git a/configs/ml507_flash_defconfig b/configs/ml507_flash_defconfig
deleted file mode 100644 (file)
index 442e0ce..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_ML507=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC,INIT_TLB=board/xilinx/ppc440-generic/init.o"
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
diff --git a/configs/v5fx30teval_defconfig b/configs/v5fx30teval_defconfig
deleted file mode 100644 (file)
index 3e2ce7d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_V5FX30TEVAL=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,BOOT_FROM_XMD=1,INIT_TLB=board/xilinx/ppc440-generic/init.o"
-CONFIG_SYS_PROMPT="v5fx30t:/# "
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
diff --git a/configs/v5fx30teval_flash_defconfig b/configs/v5fx30teval_flash_defconfig
deleted file mode 100644 (file)
index b9b05e8..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_V5FX30TEVAL=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC,INIT_TLB=board/xilinx/ppc440-generic/init.o"
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
index 53fafc324e68f20923b8d65473bdefdcf12d703e..e7132cd611522403a01205cf683f601868d84705 100644 (file)
@@ -7,3 +7,11 @@ CONFIG_SYS_PROMPT="xlx-ppc405:/# "
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NET is not set
 # CONFIG_CMD_NFS is not set
+CONFIG_SYS_MALLOC_SIMPLE=y
+CONFIG_XILINX_UARTLITE=y
+CONFIG_SYS_NS16550=y
+CONFIG_OF_EMBED=y
+CONFIG_OF_CONTROL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_DEFAULT_DEVICE_TREE="xilinx-ppc440-generic"
diff --git a/configs/xilinx-ppc405-generic_flash_defconfig b/configs/xilinx-ppc405-generic_flash_defconfig
deleted file mode 100644 (file)
index 37084fb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_XILINX_PPC405_GENERIC=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC"
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
index 79be48a9955e3fb6193534c70bd750633c66fb51..3bf2c4f8b88467f724dbc92f826f155aaddfc1be 100644 (file)
@@ -3,7 +3,15 @@ CONFIG_4xx=y
 CONFIG_TARGET_XILINX_PPC440_GENERIC=y
 CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,BOOT_FROM_XMD=1"
 CONFIG_SYS_PROMPT="board:/# "
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
+CONFIG_SYS_MALLOC_SIMPLE=y
+CONFIG_XILINX_UARTLITE=y
+CONFIG_SYS_NS16550=y
+CONFIG_OF_EMBED=y
+CONFIG_OF_CONTROL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_DEFAULT_DEVICE_TREE="xilinx-ppc440-generic"
+CONFIG_CMD_TFTPPUT=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_PING=y
+CONFIG_NETCONSOLE=y
diff --git a/configs/xilinx-ppc440-generic_flash_defconfig b/configs/xilinx-ppc440-generic_flash_defconfig
deleted file mode 100644 (file)
index 6299033..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG_PPC=y
-CONFIG_4xx=y
-CONFIG_TARGET_XILINX_PPC440_GENERIC=y
-CONFIG_SYS_EXTRA_OPTIONS="SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC"
-# CONFIG_CMD_IMLS is not set
-# CONFIG_CMD_SETEXPR is not set
-# CONFIG_CMD_NET is not set
-# CONFIG_CMD_NFS is not set
index 30995babd4b63ae9f21d176f7e232b710ec671fa..a3a66ec41a377e2e4cb32681d57f17fe80cc31fb 100644 (file)
@@ -6,6 +6,7 @@ CONFIG_SPL=y
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
index 339e399889be8f122c99cda99e4ea7c5db0d3d73..fbc603fd95cddcb668ef97170dd6ebbc54bdd404 100644 (file)
@@ -3,6 +3,7 @@ CONFIG_ARCH_ZYNQ=y
 CONFIG_TARGET_ZYNQ_PICOZED=y
 CONFIG_DEFAULT_DEVICE_TREE="zynq-picozed"
 CONFIG_SPL=y
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
index 065f8551945f0bd9642f2349c19a499b98e3d6ff..3540653e2270c0659c32092e475cd46a229af51d 100644 (file)
@@ -5,6 +5,7 @@ CONFIG_SPL=y
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
@@ -12,6 +13,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
index 1059689aad45f20e10fde22af98159271e036224..f333b7a2bfedaada5294c1027bb838112f509e2b 100644 (file)
@@ -6,6 +6,7 @@ CONFIG_SPL=y
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
@@ -13,6 +14,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
index a9dbda5eaa0b84aaedc2627dbfc3d0c98ea08a16..ebfdeb098b5bedf22f36e661105601360f616699 100644 (file)
@@ -7,6 +7,7 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
 CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM010"
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
@@ -14,6 +15,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
index 6ff00c64b4276df7b8700c77904008af97afc6b6..2bc88b8dd2f8c1fb6ca1dddffd4c853f4ee78a77 100644 (file)
@@ -7,6 +7,7 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
 CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM011"
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
index 75d6c5531c92e3a3f09304f027931315c6109084..b0fa6610648d68e31ca0e1512cdcc7ea86a4b93b 100644 (file)
@@ -7,6 +7,7 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
 CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM012"
+CONFIG_SYS_PROMPT="Zynq> "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
index dd65929958e782c3785a2a01af0dd41b6369052f..9672940e91f2fe1285c89e42b2706903ed335d9e 100644 (file)
@@ -7,10 +7,13 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
 CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM013"
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPL_DM_SEQ_ALIAS=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
 CONFIG_ZYNQ_GEM=y
index 73b17e20b27c80c0b0096a05ccd7962ba85cf1f5..58680127aa5d22d6b3037e1ca93346fe1b0b9d68 100644 (file)
@@ -6,6 +6,7 @@ CONFIG_SPL=y
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
@@ -13,6 +14,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
index 577c5a958e11f223638ba02a51f8469bce48c1fc..ebaae49da1d4e8611f0bd63c72e8569fd4a0738a 100644 (file)
@@ -6,17 +6,18 @@ CONFIG_SPL=y
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
+CONFIG_SYS_PROMPT="Zynq> "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPL_DM_SEQ_ALIAS=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_ZYNQ_GEM=y
 CONFIG_DEBUG_UART=y
 CONFIG_DEBUG_UART_ZYNQ=y
 CONFIG_DEBUG_UART_BASE=0xe0001000
 CONFIG_DEBUG_UART_CLOCK=50000000
-CONFIG_SPI_FLASH=y
-CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_ZYNQ_QSPI=y
diff --git a/doc/device-tree-bindings/serial/xilinx_uartlite.txt b/doc/device-tree-bindings/serial/xilinx_uartlite.txt
new file mode 100644 (file)
index 0000000..d15753c
--- /dev/null
@@ -0,0 +1,13 @@
+Binding for Xilinx Uartlite Controller
+
+Required properties:
+- compatible : should be "xlnx,xps-uartlite-1.00.a", or "xlnx,opb-uartlite-1.00.b"
+- reg: Should contain UART controller registers location and length.
+- interrupts: Should contain UART controller interrupts.
+
+Example:
+       serial@40600000 {
+               compatible = "xlnx,xps-uartlite-1.00.a";
+               interrupts = <1 0>;
+               reg = <0x40600000 0x10000>;
+       };
index c933b9081be1aba9079dee8f916a2696d219286b..e5e482e30bc297ad6f5b957b6ed65cf068009a76 100644 (file)
@@ -15,7 +15,6 @@ is time for maintainers to start converting over the remaining serial drivers:
    serial_pxa.c
    serial_s3c24x0.c
    serial_sa1100.c
-   serial_xuartlite.c
    usbtty.c
 
 You should complete this by the end of January 2016.
index c765a74a25e0f17895b8010cfcbb646f735a5093..d459a2f7a572180954bdc34a82fcf39c32be868e 100644 (file)
@@ -75,8 +75,8 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size,
                buffer[i] = *dataptr++;
 
        if (xdesc->name) {
-               i = strncmp(buffer, xdesc->name, strlen(xdesc->name));
-               if (i) {
+               i = (ulong)strstr(buffer, xdesc->name);
+               if (!i) {
                        printf("%s: Wrong bitstream ID for this device\n",
                               __func__);
                        printf("%s: Bitstream ID %s, current device ID %d/%s\n",
index fd05c177948215ec5fd36ddc34b310ef9a0b48e9..9b2c5b69ce5503837560329ba5c42a3c0a4fc4e8 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid, ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid, ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology  http://qtec.com/
  * SPDX-License-Identifier:    GPL-2.0+
  */
index 02d71b934409f56e2ede04c31e40f611fc914987..ff770b16e27a6e25c50fa6a23226832865f2e324 100644 (file)
@@ -530,6 +530,10 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)
                if (caps & SDHCI_CAN_DO_8BIT)
                        host->cfg.host_caps |= MMC_MODE_8BIT;
        }
+
+       if (host->quirks & SDHCI_QUIRK_NO_HISPD_BIT)
+               host->cfg.host_caps &= ~(MMC_MODE_HS | MMC_MODE_HS_52MHz);
+
        if (host->host_caps)
                host->cfg.host_caps |= host->host_caps;
 
index 4fe3da93b206d0df8706efd371df44f653f4f60e..039ec16e91fe4b94775773a8d705fdb82de159e4 100644 (file)
 #include <malloc.h>
 #include <sdhci.h>
 
+#ifndef CONFIG_ZYNQ_SDHCI_MIN_FREQ
+# define CONFIG_ZYNQ_SDHCI_MIN_FREQ    0
+#endif
+
 static int arasan_sdhci_probe(struct udevice *dev)
 {
        struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
@@ -20,9 +24,15 @@ static int arasan_sdhci_probe(struct udevice *dev)
 
        host->quirks = SDHCI_QUIRK_WAIT_SEND_CMD |
                       SDHCI_QUIRK_BROKEN_R1B;
+
+#ifdef CONFIG_ZYNQ_HISPD_BROKEN
+       host->quirks |= SDHCI_QUIRK_NO_HISPD_BIT;
+#endif
+
        host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
 
-       add_sdhci(host, CONFIG_ZYNQ_SDHCI_MAX_FREQ, 0);
+       add_sdhci(host, CONFIG_ZYNQ_SDHCI_MAX_FREQ,
+                 CONFIG_ZYNQ_SDHCI_MIN_FREQ);
 
        upriv->mmc = host->mmc;
 
index de54ca8014c76ee80d74ef293120dba36fedf6c5..218e1fee22c3919d14ef6eda4aecf80b5a6a9b70 100644 (file)
@@ -102,6 +102,22 @@ config PCH_GBE
          This MAC is present in Intel Platform Controller Hub EG20T. It
          supports 10/100/1000 Mbps operation.
 
+config XILINX_AXIEMAC
+       depends on DM_ETH && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP)
+       select PHYLIB
+       select MII
+       bool "Xilinx AXI Ethernet"
+       help
+         This MAC is present in Xilinx Microblaze, Zynq and ZynqMP SoCs.
+
+config XILINX_EMACLITE
+       depends on DM_ETH && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP)
+       select PHYLIB
+       select MII
+       bool "Xilinx Ethernetlite"
+       help
+         This MAC is present in Xilinx Microblaze, Zynq and ZynqMP SoCs.
+
 config ZYNQ_GEM
        depends on DM_ETH && (ARCH_ZYNQ || ARCH_ZYNQMP)
        select PHYLIB
index 541a57f98028937965cfa8337d334aed83f5ec73..c3912d52f320d36a6bca7ac99efe32bcde1060c8 100644 (file)
@@ -41,6 +41,8 @@
 
 /* PHY CTRL bits */
 #define DP83867_PHYCR_FIFO_DEPTH_SHIFT         14
+#define DP83867_MDI_CROSSOVER          5
+#define DP83867_MDI_CROSSOVER_AUTO     2
 
 /* RGMIIDCTL bits */
 #define DP83867_RGMII_TX_CLK_DELAY_SHIFT       4
@@ -149,6 +151,7 @@ static int dp83867_config(struct phy_device *phydev)
 
        if (phy_interface_is_rgmii(phydev)) {
                ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_DP83867_PHYCTRL,
+                       (DP83867_MDI_CROSSOVER_AUTO << DP83867_MDI_CROSSOVER) |
                        (FIFO_DEPTH << DP83867_PHYCR_FIFO_DEPTH_SHIFT));
                if (ret)
                        return ret;
index df053feee8c8b2de3df918d91ee1def1e2fa6403..81274ee13bca869567ecc3986f4f90fe8c071f7d 100644 (file)
@@ -8,15 +8,14 @@
 
 #include <config.h>
 #include <common.h>
+#include <dm.h>
 #include <net.h>
 #include <malloc.h>
 #include <asm/io.h>
 #include <phy.h>
 #include <miiphy.h>
 
-#if !defined(CONFIG_PHYLIB)
-# error AXI_ETHERNET requires PHYLIB
-#endif
+DECLARE_GLOBAL_DATA_PTR;
 
 /* Link setup */
 #define XAE_EMMC_LINKSPEED_MASK        0xC0000000 /* Link speed */
@@ -86,7 +85,8 @@ struct axidma_priv {
        struct axidma_reg *dmatx;
        struct axidma_reg *dmarx;
        int phyaddr;
-
+       struct axi_regs *iobase;
+       phy_interface_t interface;
        struct phy_device *phydev;
        struct mii_dev *bus;
 };
@@ -147,9 +147,8 @@ struct axi_regs {
  */
 #define PHY_DETECT_MASK 0x1808
 
-static inline int mdio_wait(struct eth_device *dev)
+static inline int mdio_wait(struct axi_regs *regs)
 {
-       struct axi_regs *regs = (struct axi_regs *)dev->iobase;
        u32 timeout = 200;
 
        /* Wait till MDIO interface is ready to accept a new transaction. */
@@ -165,13 +164,13 @@ static inline int mdio_wait(struct eth_device *dev)
        return 0;
 }
 
-static u32 phyread(struct eth_device *dev, u32 phyaddress, u32 registernum,
-                                                               u16 *val)
+static u32 phyread(struct axidma_priv *priv, u32 phyaddress, u32 registernum,
+                  u16 *val)
 {
-       struct axi_regs *regs = (struct axi_regs *)dev->iobase;
+       struct axi_regs *regs = priv->iobase;
        u32 mdioctrlreg = 0;
 
-       if (mdio_wait(dev))
+       if (mdio_wait(regs))
                return 1;
 
        mdioctrlreg = ((phyaddress << XAE_MDIO_MCR_PHYAD_SHIFT) &
@@ -183,7 +182,7 @@ static u32 phyread(struct eth_device *dev, u32 phyaddress, u32 registernum,
 
        out_be32(&regs->mdio_mcr, mdioctrlreg);
 
-       if (mdio_wait(dev))
+       if (mdio_wait(regs))
                return 1;
 
        /* Read data */
@@ -191,13 +190,13 @@ static u32 phyread(struct eth_device *dev, u32 phyaddress, u32 registernum,
        return 0;
 }
 
-static u32 phywrite(struct eth_device *dev, u32 phyaddress, u32 registernum,
-                                                               u32 data)
+static u32 phywrite(struct axidma_priv *priv, u32 phyaddress, u32 registernum,
+                   u32 data)
 {
-       struct axi_regs *regs = (struct axi_regs *)dev->iobase;
+       struct axi_regs *regs = priv->iobase;
        u32 mdioctrlreg = 0;
 
-       if (mdio_wait(dev))
+       if (mdio_wait(regs))
                return 1;
 
        mdioctrlreg = ((phyaddress << XAE_MDIO_MCR_PHYAD_SHIFT) &
@@ -212,19 +211,18 @@ static u32 phywrite(struct eth_device *dev, u32 phyaddress, u32 registernum,
 
        out_be32(&regs->mdio_mcr, mdioctrlreg);
 
-       if (mdio_wait(dev))
+       if (mdio_wait(regs))
                return 1;
 
        return 0;
 }
 
-/* Setting axi emac and phy to proper setting */
-static int setup_phy(struct eth_device *dev)
+static int axiemac_phy_init(struct udevice *dev)
 {
        u16 phyreg;
-       u32 i, speed, emmc_reg, ret;
-       struct axidma_priv *priv = dev->priv;
-       struct axi_regs *regs = (struct axi_regs *)dev->iobase;
+       u32 i, ret;
+       struct axidma_priv *priv = dev_get_priv(dev);
+       struct axi_regs *regs = priv->iobase;
        struct phy_device *phydev;
 
        u32 supported = SUPPORTED_10baseT_Half |
@@ -234,16 +232,19 @@ static int setup_phy(struct eth_device *dev)
                        SUPPORTED_1000baseT_Half |
                        SUPPORTED_1000baseT_Full;
 
+       /* Set default MDIO divisor */
+       out_be32(&regs->mdio_mc, XAE_MDIO_DIV_DFT | XAE_MDIO_MC_MDIOEN_MASK);
+
        if (priv->phyaddr == -1) {
                /* Detect the PHY address */
                for (i = 31; i >= 0; i--) {
-                       ret = phyread(dev, i, PHY_DETECT_REG, &phyreg);
+                       ret = phyread(priv, i, PHY_DETECT_REG, &phyreg);
                        if (!ret && (phyreg != 0xFFFF) &&
                        ((phyreg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {
                                /* Found a valid PHY address */
                                priv->phyaddr = i;
                                debug("axiemac: Found valid phy address, %x\n",
-                                                                       phyreg);
+                                     i);
                                break;
                        }
                }
@@ -256,6 +257,18 @@ static int setup_phy(struct eth_device *dev)
        phydev->advertising = phydev->supported;
        priv->phydev = phydev;
        phy_config(phydev);
+
+       return 0;
+}
+
+/* Setting axi emac and phy to proper setting */
+static int setup_phy(struct udevice *dev)
+{
+       u32 speed, emmc_reg;
+       struct axidma_priv *priv = dev_get_priv(dev);
+       struct axi_regs *regs = priv->iobase;
+       struct phy_device *phydev = priv->phydev;
+
        if (phy_startup(phydev)) {
                printf("axiemac: could not initialize PHY %s\n",
                       phydev->dev->name);
@@ -299,9 +312,9 @@ static int setup_phy(struct eth_device *dev)
 }
 
 /* STOP DMA transfers */
-static void axiemac_halt(struct eth_device *dev)
+static void axiemac_stop(struct udevice *dev)
 {
-       struct axidma_priv *priv = dev->priv;
+       struct axidma_priv *priv = dev_get_priv(dev);
        u32 temp;
 
        /* Stop the hardware */
@@ -316,9 +329,9 @@ static void axiemac_halt(struct eth_device *dev)
        debug("axiemac: Halted\n");
 }
 
-static int axi_ethernet_init(struct eth_device *dev)
+static int axi_ethernet_init(struct axidma_priv *priv)
 {
-       struct axi_regs *regs = (struct axi_regs *)dev->iobase;
+       struct axi_regs *regs = priv->iobase;
        u32 timeout = 200;
 
        /*
@@ -359,25 +372,26 @@ static int axi_ethernet_init(struct eth_device *dev)
        return 0;
 }
 
-static int axiemac_setup_mac(struct eth_device *dev)
+static int axiemac_write_hwaddr(struct udevice *dev)
 {
-       struct axi_regs *regs = (struct axi_regs *)dev->iobase;
+       struct eth_pdata *pdata = dev_get_platdata(dev);
+       struct axidma_priv *priv = dev_get_priv(dev);
+       struct axi_regs *regs = priv->iobase;
 
        /* Set the MAC address */
-       int val = ((dev->enetaddr[3] << 24) | (dev->enetaddr[2] << 16) |
-               (dev->enetaddr[1] << 8) | (dev->enetaddr[0]));
+       int val = ((pdata->enetaddr[3] << 24) | (pdata->enetaddr[2] << 16) |
+               (pdata->enetaddr[1] << 8) | (pdata->enetaddr[0]));
        out_be32(&regs->uaw0, val);
 
-       val = (dev->enetaddr[5] << 8) | dev->enetaddr[4] ;
+       val = (pdata->enetaddr[5] << 8) | pdata->enetaddr[4];
        val |= in_be32(&regs->uaw1) & ~XAE_UAW1_UNICASTADDR_MASK;
        out_be32(&regs->uaw1, val);
        return 0;
 }
 
 /* Reset DMA engine */
-static void axi_dma_init(struct eth_device *dev)
+static void axi_dma_init(struct axidma_priv *priv)
 {
-       struct axidma_priv *priv = dev->priv;
        u32 timeout = 500;
 
        /* Reset the engine so the hardware starts from a known state */
@@ -388,9 +402,9 @@ static void axi_dma_init(struct eth_device *dev)
        while (timeout--) {
                /* Check transmit/receive channel */
                /* Reset is done when the reset bit is low */
-               if (!(in_be32(&priv->dmatx->control) |
+               if (!((in_be32(&priv->dmatx->control) |
                                in_be32(&priv->dmarx->control))
-                                               & XAXIDMA_CR_RESET_MASK) {
+                                               & XAXIDMA_CR_RESET_MASK)) {
                        break;
                }
        }
@@ -398,10 +412,10 @@ static void axi_dma_init(struct eth_device *dev)
                printf("%s: Timeout\n", __func__);
 }
 
-static int axiemac_init(struct eth_device *dev, bd_t * bis)
+static int axiemac_start(struct udevice *dev)
 {
-       struct axidma_priv *priv = dev->priv;
-       struct axi_regs *regs = (struct axi_regs *)dev->iobase;
+       struct axidma_priv *priv = dev_get_priv(dev);
+       struct axi_regs *regs = priv->iobase;
        u32 temp;
 
        debug("axiemac: Init started\n");
@@ -411,10 +425,10 @@ static int axiemac_init(struct eth_device *dev, bd_t * bis)
         * reset, and since AXIDMA reset line is connected to AxiEthernet, this
         * would ensure a reset of AxiEthernet.
         */
-       axi_dma_init(dev);
+       axi_dma_init(priv);
 
        /* Initialize AxiEthernet hardware. */
-       if (axi_ethernet_init(dev))
+       if (axi_ethernet_init(priv))
                return -1;
 
        /* Disable all RX interrupts before RxBD space setup */
@@ -452,7 +466,7 @@ static int axiemac_init(struct eth_device *dev, bd_t * bis)
 
        /* PHY setup */
        if (!setup_phy(dev)) {
-               axiemac_halt(dev);
+               axiemac_stop(dev);
                return -1;
        }
 
@@ -460,9 +474,9 @@ static int axiemac_init(struct eth_device *dev, bd_t * bis)
        return 0;
 }
 
-static int axiemac_send(struct eth_device *dev, void *ptr, int len)
+static int axiemac_send(struct udevice *dev, void *ptr, int len)
 {
-       struct axidma_priv *priv = dev->priv;
+       struct axidma_priv *priv = dev_get_priv(dev);
        u32 timeout;
 
        if (len > PKTSIZE_ALIGN)
@@ -498,8 +512,8 @@ static int axiemac_send(struct eth_device *dev, void *ptr, int len)
        /* Wait for transmission to complete */
        debug("axiemac: Waiting for tx to be done\n");
        timeout = 200;
-       while (timeout && (!in_be32(&priv->dmatx->status) &
-                       (XAXIDMA_IRQ_DELAY_MASK | XAXIDMA_IRQ_IOC_MASK))) {
+       while (timeout && (!(in_be32(&priv->dmatx->status) &
+                       (XAXIDMA_IRQ_DELAY_MASK | XAXIDMA_IRQ_IOC_MASK)))) {
                timeout--;
                udelay(1);
        }
@@ -512,10 +526,9 @@ static int axiemac_send(struct eth_device *dev, void *ptr, int len)
        return 0;
 }
 
-static int isrxready(struct eth_device *dev)
+static int isrxready(struct axidma_priv *priv)
 {
        u32 status;
-       struct axidma_priv *priv = dev->priv;
 
        /* Read pending interrupts */
        status = in_be32(&priv->dmarx->status);
@@ -533,15 +546,15 @@ static int isrxready(struct eth_device *dev)
        return 0;
 }
 
-static int axiemac_recv(struct eth_device *dev)
+static int axiemac_recv(struct udevice *dev, int flags, uchar **packetp)
 {
        u32 length;
-       struct axidma_priv *priv = dev->priv;
+       struct axidma_priv *priv = dev_get_priv(dev);
        u32 temp;
 
        /* Wait for an incoming packet */
-       if (!isrxready(dev))
-               return 0;
+       if (!isrxready(priv))
+               return -1;
 
        debug("axiemac: RX data ready\n");
 
@@ -554,9 +567,14 @@ static int axiemac_recv(struct eth_device *dev)
 #ifdef DEBUG
        print_buffer(&rxframe, &rxframe[0], 1, length, 16);
 #endif
-       /* Pass the received frame up for processing */
-       if (length)
-               net_process_received_packet(rxframe, length);
+
+       *packetp = rxframe;
+       return length;
+}
+
+static int axiemac_free_pkt(struct udevice *dev, uchar *packet, int length)
+{
+       struct axidma_priv *priv = dev_get_priv(dev);
 
 #ifdef DEBUG
        /* It is useful to clear buffer to be sure that it is consistent */
@@ -581,76 +599,128 @@ static int axiemac_recv(struct eth_device *dev)
 
        debug("axiemac: RX completed, framelength = %d\n", length);
 
-       return length;
+       return 0;
 }
 
-static int axiemac_miiphy_read(const char *devname, uchar addr,
-                                                       uchar reg, ushort *val)
+static int axiemac_miiphy_read(struct mii_dev *bus, int addr,
+                              int devad, int reg)
 {
-       struct eth_device *dev = eth_get_dev();
-       u32 ret;
+       int ret;
+       u16 value;
 
-       ret = phyread(dev, addr, reg, val);
-       debug("axiemac: Read MII 0x%x, 0x%x, 0x%x\n", addr, reg, *val);
-       return ret;
+       ret = phyread(bus->priv, addr, reg, &value);
+       debug("axiemac: Read MII 0x%x, 0x%x, 0x%x, %d\n", addr, reg,
+             value, ret);
+       return value;
 }
 
-static int axiemac_miiphy_write(const char *devname, uchar addr,
-                                                       uchar reg, ushort val)
+static int axiemac_miiphy_write(struct mii_dev *bus, int addr, int devad,
+                               int reg, u16 value)
 {
-       struct eth_device *dev = eth_get_dev();
-
-       debug("axiemac: Write MII 0x%x, 0x%x, 0x%x\n", addr, reg, val);
-       return phywrite(dev, addr, reg, val);
+       debug("axiemac: Write MII 0x%x, 0x%x, 0x%x\n", addr, reg, value);
+       return phywrite(bus->priv, addr, reg, value);
 }
 
-static int axiemac_bus_reset(struct mii_dev *bus)
+static int axi_emac_probe(struct udevice *dev)
 {
-       debug("axiemac: Bus reset\n");
+       struct axidma_priv *priv = dev_get_priv(dev);
+       int ret;
+
+       priv->bus = mdio_alloc();
+       priv->bus->read = axiemac_miiphy_read;
+       priv->bus->write = axiemac_miiphy_write;
+       priv->bus->priv = priv;
+       strcpy(priv->bus->name, "axi_emac");
+
+       ret = mdio_register(priv->bus);
+       if (ret)
+               return ret;
+
+       axiemac_phy_init(dev);
+
        return 0;
 }
 
-int xilinx_axiemac_initialize(bd_t *bis, unsigned long base_addr,
-                                                       unsigned long dma_addr)
+static int axi_emac_remove(struct udevice *dev)
 {
-       struct eth_device *dev;
-       struct axidma_priv *priv;
+       struct axidma_priv *priv = dev_get_priv(dev);
 
-       dev = calloc(1, sizeof(struct eth_device));
-       if (dev == NULL)
-               return -1;
+       free(priv->phydev);
+       mdio_unregister(priv->bus);
+       mdio_free(priv->bus);
 
-       dev->priv = calloc(1, sizeof(struct axidma_priv));
-       if (dev->priv == NULL) {
-               free(dev);
-               return -1;
-       }
-       priv = dev->priv;
+       return 0;
+}
 
-       sprintf(dev->name, "aximac.%lx", base_addr);
+static const struct eth_ops axi_emac_ops = {
+       .start                  = axiemac_start,
+       .send                   = axiemac_send,
+       .recv                   = axiemac_recv,
+       .free_pkt               = axiemac_free_pkt,
+       .stop                   = axiemac_stop,
+       .write_hwaddr           = axiemac_write_hwaddr,
+};
 
-       dev->iobase = base_addr;
-       priv->dmatx = (struct axidma_reg *)dma_addr;
+static int axi_emac_ofdata_to_platdata(struct udevice *dev)
+{
+       struct eth_pdata *pdata = dev_get_platdata(dev);
+       struct axidma_priv *priv = dev_get_priv(dev);
+       int offset = 0;
+       const char *phy_mode;
+
+       pdata->iobase = (phys_addr_t)dev_get_addr(dev);
+       priv->iobase = (struct axi_regs *)pdata->iobase;
+
+       offset = fdtdec_lookup_phandle(gd->fdt_blob, dev->of_offset,
+                                      "axistream-connected");
+       if (offset <= 0) {
+               printf("%s: axistream is not found\n", __func__);
+               return -EINVAL;
+       }
+       priv->dmatx = (struct axidma_reg *)fdtdec_get_int(gd->fdt_blob,
+                                                         offset, "reg", 0);
+       if (!priv->dmatx) {
+               printf("%s: axi_dma register space not found\n", __func__);
+               return -EINVAL;
+       }
        /* RX channel offset is 0x30 */
-       priv->dmarx = (struct axidma_reg *)(dma_addr + 0x30);
-       dev->init = axiemac_init;
-       dev->halt = axiemac_halt;
-       dev->send = axiemac_send;
-       dev->recv = axiemac_recv;
-       dev->write_hwaddr = axiemac_setup_mac;
-
-#ifdef CONFIG_PHY_ADDR
-       priv->phyaddr = CONFIG_PHY_ADDR;
-#else
+       priv->dmarx = (struct axidma_reg *)((u32)priv->dmatx + 0x30);
+
        priv->phyaddr = -1;
-#endif
 
-       eth_register(dev);
+       offset = fdtdec_lookup_phandle(gd->fdt_blob, dev->of_offset,
+                                      "phy-handle");
+       if (offset > 0)
+               priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1);
+
+       phy_mode = fdt_getprop(gd->fdt_blob, dev->of_offset, "phy-mode", NULL);
+       if (phy_mode)
+               pdata->phy_interface = phy_get_interface_by_name(phy_mode);
+       if (pdata->phy_interface == -1) {
+               debug("%s: Invalid PHY interface '%s'\n", __func__, phy_mode);
+               return -EINVAL;
+       }
+       priv->interface = pdata->phy_interface;
+
+       printf("AXI EMAC: %lx, phyaddr %d, interface %s\n", (ulong)priv->iobase,
+              priv->phyaddr, phy_string_for_interface(priv->interface));
 
-#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB)
-       miiphy_register(dev->name, axiemac_miiphy_read, axiemac_miiphy_write);
-       priv->bus = miiphy_get_dev_by_name(dev->name);
-       priv->bus->reset = axiemac_bus_reset;
-#endif
-       return 1;
+       return 0;
 }
+
+static const struct udevice_id axi_emac_ids[] = {
+       { .compatible = "xlnx,axi-ethernet-1.00.a" },
+       { }
+};
+
+U_BOOT_DRIVER(axi_emac) = {
+       .name   = "axi_emac",
+       .id     = UCLASS_ETH,
+       .of_match = axi_emac_ids,
+       .ofdata_to_platdata = axi_emac_ofdata_to_platdata,
+       .probe  = axi_emac_probe,
+       .remove = axi_emac_remove,
+       .ops    = &axi_emac_ops,
+       .priv_auto_alloc_size = sizeof(struct axidma_priv),
+       .platdata_auto_alloc_size = sizeof(struct eth_pdata),
+};
index 564205df83d39532f378bd0d5f32ad4e2c632b04..5862bf0a7e2d4d34d40ac4dbafab10c636b0d15c 100644 (file)
 #include <common.h>
 #include <net.h>
 #include <config.h>
+#include <dm.h>
+#include <console.h>
 #include <malloc.h>
 #include <asm/io.h>
+#include <phy.h>
+#include <miiphy.h>
 #include <fdtdec.h>
+#include <asm-generic/errno.h>
+#include <linux/kernel.h>
 
-#undef DEBUG
+DECLARE_GLOBAL_DATA_PTR;
 
 #define ENET_ADDR_LENGTH       6
-
-/* EmacLite constants */
-#define XEL_BUFFER_OFFSET      0x0800  /* Next buffer's offset */
-#define XEL_TPLR_OFFSET                0x07F4  /* Tx packet length */
-#define XEL_TSR_OFFSET         0x07FC  /* Tx status */
-#define XEL_RSR_OFFSET         0x17FC  /* Rx status */
-#define XEL_RXBUFF_OFFSET      0x1000  /* Receive Buffer */
+#define ETH_FCS_LEN            4 /* Octets in the FCS */
 
 /* Xmit complete */
 #define XEL_TSR_XMIT_BUSY_MASK         0x00000001UL
 /* Xmit interrupt enable bit */
 #define XEL_TSR_XMIT_IE_MASK           0x00000008UL
-/* Buffer is active, SW bit only */
-#define XEL_TSR_XMIT_ACTIVE_MASK       0x80000000UL
 /* Program the MAC address */
 #define XEL_TSR_PROGRAM_MASK           0x00000002UL
 /* define for programming the MAC address into the EMAC Lite */
 /* Recv interrupt enable bit */
 #define XEL_RSR_RECV_IE_MASK           0x00000008UL
 
+/* MDIO Address Register Bit Masks */
+#define XEL_MDIOADDR_REGADR_MASK  0x0000001F   /* Register Address */
+#define XEL_MDIOADDR_PHYADR_MASK  0x000003E0   /* PHY Address */
+#define XEL_MDIOADDR_PHYADR_SHIFT 5
+#define XEL_MDIOADDR_OP_MASK     0x00000400    /* RD/WR Operation */
+
+/* MDIO Write Data Register Bit Masks */
+#define XEL_MDIOWR_WRDATA_MASK   0x0000FFFF    /* Data to be Written */
+
+/* MDIO Read Data Register Bit Masks */
+#define XEL_MDIORD_RDDATA_MASK   0x0000FFFF    /* Data to be Read */
+
+/* MDIO Control Register Bit Masks */
+#define XEL_MDIOCTRL_MDIOSTS_MASK 0x00000001   /* MDIO Status Mask */
+#define XEL_MDIOCTRL_MDIOEN_MASK  0x00000008   /* MDIO Enable */
+
+struct emaclite_regs {
+       u32 tx_ping; /* 0x0 - TX Ping buffer */
+       u32 reserved1[504];
+       u32 mdioaddr; /* 0x7e4 - MDIO Address Register */
+       u32 mdiowr; /* 0x7e8 - MDIO Write Data Register */
+       u32 mdiord;/* 0x7ec - MDIO Read Data Register */
+       u32 mdioctrl; /* 0x7f0 - MDIO Control Register */
+       u32 tx_ping_tplr; /* 0x7f4 - Tx packet length */
+       u32 global_interrupt; /* 0x7f8 - Global interrupt enable */
+       u32 tx_ping_tsr; /* 0x7fc - Tx status */
+       u32 tx_pong; /* 0x800 - TX Pong buffer */
+       u32 reserved2[508];
+       u32 tx_pong_tplr; /* 0xff4 - Tx packet length */
+       u32 reserved3; /* 0xff8 */
+       u32 tx_pong_tsr; /* 0xffc - Tx status */
+       u32 rx_ping; /* 0x1000 - Receive Buffer */
+       u32 reserved4[510];
+       u32 rx_ping_rsr; /* 0x17fc - Rx status */
+       u32 rx_pong; /* 0x1800 - Receive Buffer */
+       u32 reserved5[510];
+       u32 rx_pong_rsr; /* 0x1ffc - Rx status */
+};
+
 struct xemaclite {
-       u32 nexttxbuffertouse;  /* Next TX buffer to write to */
-       u32 nextrxbuffertouse;  /* Next RX buffer to read from */
+       bool use_rx_pong_buffer_next;   /* Next RX buffer to read from */
        u32 txpp;               /* TX ping pong buffer */
        u32 rxpp;               /* RX ping pong buffer */
+       int phyaddr;
+       struct emaclite_regs *regs;
+       struct phy_device *phydev;
+       struct mii_dev *bus;
 };
 
-static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */
+static uchar etherrxbuff[PKTSIZE_ALIGN]; /* Receive buffer */
 
 static void xemaclite_alignedread(u32 *srcptr, void *destptr, u32 bytecount)
 {
@@ -81,7 +121,7 @@ static void xemaclite_alignedread(u32 *srcptr, void *destptr, u32 bytecount)
                *to8ptr++ = *from8ptr++;
 }
 
-static void xemaclite_alignedwrite(void *srcptr, u32 destptr, u32 bytecount)
+static void xemaclite_alignedwrite(void *srcptr, u32 *destptr, u32 bytecount)
 {
        u32 i;
        u32 alignbuffer;
@@ -107,42 +147,206 @@ static void xemaclite_alignedwrite(void *srcptr, u32 destptr, u32 bytecount)
        *to32ptr++ = alignbuffer;
 }
 
-static void emaclite_halt(struct eth_device *dev)
+static int wait_for_bit(const char *func, u32 *reg, const u32 mask,
+                       bool set, unsigned int timeout)
+{
+       u32 val;
+       unsigned long start = get_timer(0);
+
+       while (1) {
+               val = readl(reg);
+
+               if (!set)
+                       val = ~val;
+
+               if ((val & mask) == mask)
+                       return 0;
+
+               if (get_timer(start) > timeout)
+                       break;
+
+               if (ctrlc()) {
+                       puts("Abort\n");
+                       return -EINTR;
+               }
+
+               udelay(1);
+       }
+
+       debug("%s: Timeout (reg=%p mask=%08x wait_set=%i)\n",
+             func, reg, mask, set);
+
+       return -ETIMEDOUT;
+}
+
+static int mdio_wait(struct emaclite_regs *regs)
 {
-       debug("eth_halt\n");
+       return wait_for_bit(__func__, &regs->mdioctrl,
+                           XEL_MDIOCTRL_MDIOSTS_MASK, false, 2000);
 }
 
-static int emaclite_init(struct eth_device *dev, bd_t *bis)
+static u32 phyread(struct xemaclite *emaclite, u32 phyaddress, u32 registernum,
+                  u16 *data)
 {
-       struct xemaclite *emaclite = dev->priv;
+       struct emaclite_regs *regs = emaclite->regs;
+
+       if (mdio_wait(regs))
+               return 1;
+
+       u32 ctrl_reg = in_be32(&regs->mdioctrl);
+       out_be32(&regs->mdioaddr, XEL_MDIOADDR_OP_MASK |
+                ((phyaddress << XEL_MDIOADDR_PHYADR_SHIFT) | registernum));
+       out_be32(&regs->mdioctrl, ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK);
+
+       if (mdio_wait(regs))
+               return 1;
+
+       /* Read data */
+       *data = in_be32(&regs->mdiord);
+       return 0;
+}
+
+static u32 phywrite(struct xemaclite *emaclite, u32 phyaddress, u32 registernum,
+                   u16 data)
+{
+       struct emaclite_regs *regs = emaclite->regs;
+
+       if (mdio_wait(regs))
+               return 1;
+
+       /*
+        * Write the PHY address, register number and clear the OP bit in the
+        * MDIO Address register and then write the value into the MDIO Write
+        * Data register. Finally, set the Status bit in the MDIO Control
+        * register to start a MDIO write transaction.
+        */
+       u32 ctrl_reg = in_be32(&regs->mdioctrl);
+       out_be32(&regs->mdioaddr, ~XEL_MDIOADDR_OP_MASK &
+                ((phyaddress << XEL_MDIOADDR_PHYADR_SHIFT) | registernum));
+       out_be32(&regs->mdiowr, data);
+       out_be32(&regs->mdioctrl, ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK);
+
+       if (mdio_wait(regs))
+               return 1;
+
+       return 0;
+}
+
+static void emaclite_stop(struct udevice *dev)
+{
+       debug("eth_stop\n");
+}
+
+/* Use MII register 1 (MII status register) to detect PHY */
+#define PHY_DETECT_REG  1
+
+/* Mask used to verify certain PHY features (or register contents)
+ * in the register above:
+ *  0x1000: 10Mbps full duplex support
+ *  0x0800: 10Mbps half duplex support
+ *  0x0008: Auto-negotiation support
+ */
+#define PHY_DETECT_MASK 0x1808
+
+static int setup_phy(struct udevice *dev)
+{
+       int i;
+       u16 phyreg;
+       struct xemaclite *emaclite = dev_get_priv(dev);
+       struct phy_device *phydev;
+
+       u32 supported = SUPPORTED_10baseT_Half |
+                       SUPPORTED_10baseT_Full |
+                       SUPPORTED_100baseT_Half |
+                       SUPPORTED_100baseT_Full;
+
+       if (emaclite->phyaddr != -1) {
+               phyread(emaclite, emaclite->phyaddr, PHY_DETECT_REG, &phyreg);
+               if ((phyreg != 0xFFFF) &&
+                   ((phyreg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {
+                       /* Found a valid PHY address */
+                       debug("Default phy address %d is valid\n",
+                             emaclite->phyaddr);
+               } else {
+                       debug("PHY address is not setup correctly %d\n",
+                             emaclite->phyaddr);
+                       emaclite->phyaddr = -1;
+               }
+       }
+
+       if (emaclite->phyaddr == -1) {
+               /* detect the PHY address */
+               for (i = 31; i >= 0; i--) {
+                       phyread(emaclite, i, PHY_DETECT_REG, &phyreg);
+                       if ((phyreg != 0xFFFF) &&
+                           ((phyreg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {
+                               /* Found a valid PHY address */
+                               emaclite->phyaddr = i;
+                               debug("emaclite: Found valid phy address, %d\n",
+                                     i);
+                               break;
+                       }
+               }
+       }
+
+       /* interface - look at tsec */
+       phydev = phy_connect(emaclite->bus, emaclite->phyaddr, dev,
+                            PHY_INTERFACE_MODE_MII);
+       /*
+        * Phy can support 1000baseT but device NOT that's why phydev->supported
+        * must be setup for 1000baseT. phydev->advertising setups what speeds
+        * will be used for autonegotiation where 1000baseT must be disabled.
+        */
+       phydev->supported = supported | SUPPORTED_1000baseT_Half |
+                                               SUPPORTED_1000baseT_Full;
+       phydev->advertising = supported;
+       emaclite->phydev = phydev;
+       phy_config(phydev);
+       phy_startup(phydev);
+
+       if (!phydev->link) {
+               printf("%s: No link.\n", phydev->dev->name);
+               return 0;
+       }
+
+       /* Do not setup anything */
+       return 1;
+}
+
+static int emaclite_start(struct udevice *dev)
+{
+       struct xemaclite *emaclite = dev_get_priv(dev);
+       struct eth_pdata *pdata = dev_get_platdata(dev);
+       struct emaclite_regs *regs = emaclite->regs;
+
        debug("EmacLite Initialization Started\n");
 
 /*
  * TX - TX_PING & TX_PONG initialization
  */
        /* Restart PING TX */
-       out_be32 (dev->iobase + XEL_TSR_OFFSET, 0);
+       out_be32(&regs->tx_ping_tsr, 0);
        /* Copy MAC address */
-       xemaclite_alignedwrite(dev->enetaddr, dev->iobase, ENET_ADDR_LENGTH);
+       xemaclite_alignedwrite(pdata->enetaddr, &regs->tx_ping,
+                              ENET_ADDR_LENGTH);
        /* Set the length */
-       out_be32 (dev->iobase + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
+       out_be32(&regs->tx_ping_tplr, ENET_ADDR_LENGTH);
        /* Update the MAC address in the EMAC Lite */
-       out_be32 (dev->iobase + XEL_TSR_OFFSET, XEL_TSR_PROG_MAC_ADDR);
+       out_be32(&regs->tx_ping_tsr, XEL_TSR_PROG_MAC_ADDR);
        /* Wait for EMAC Lite to finish with the MAC address update */
-       while ((in_be32 (dev->iobase + XEL_TSR_OFFSET) &
+       while ((in_be32 (&regs->tx_ping_tsr) &
                XEL_TSR_PROG_MAC_ADDR) != 0)
                ;
 
        if (emaclite->txpp) {
                /* The same operation with PONG TX */
-               out_be32 (dev->iobase + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
-               xemaclite_alignedwrite(dev->enetaddr, dev->iobase +
-                       XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);
-               out_be32 (dev->iobase + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
-               out_be32 (dev->iobase + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET,
-                       XEL_TSR_PROG_MAC_ADDR);
-               while ((in_be32 (dev->iobase + XEL_TSR_OFFSET +
-                       XEL_BUFFER_OFFSET) & XEL_TSR_PROG_MAC_ADDR) != 0)
+               out_be32(&regs->tx_pong_tsr, 0);
+               xemaclite_alignedwrite(pdata->enetaddr, &regs->tx_pong,
+                                      ENET_ADDR_LENGTH);
+               out_be32(&regs->tx_pong_tplr, ENET_ADDR_LENGTH);
+               out_be32(&regs->tx_pong_tsr, XEL_TSR_PROG_MAC_ADDR);
+               while ((in_be32(&regs->tx_pong_tsr) &
+                      XEL_TSR_PROG_MAC_ADDR) != 0)
                        ;
        }
 
@@ -150,52 +354,48 @@ static int emaclite_init(struct eth_device *dev, bd_t *bis)
  * RX - RX_PING & RX_PONG initialization
  */
        /* Write out the value to flush the RX buffer */
-       out_be32 (dev->iobase + XEL_RSR_OFFSET, XEL_RSR_RECV_IE_MASK);
+       out_be32(&regs->rx_ping_rsr, XEL_RSR_RECV_IE_MASK);
 
        if (emaclite->rxpp)
-               out_be32 (dev->iobase + XEL_RSR_OFFSET + XEL_BUFFER_OFFSET,
-                       XEL_RSR_RECV_IE_MASK);
+               out_be32(&regs->rx_pong_rsr, XEL_RSR_RECV_IE_MASK);
+
+       out_be32(&regs->mdioctrl, XEL_MDIOCTRL_MDIOEN_MASK);
+       if (in_be32(&regs->mdioctrl) & XEL_MDIOCTRL_MDIOEN_MASK)
+               if (!setup_phy(dev))
+                       return -1;
 
        debug("EmacLite Initialization complete\n");
        return 0;
 }
 
-static int xemaclite_txbufferavailable(struct eth_device *dev)
+static int xemaclite_txbufferavailable(struct xemaclite *emaclite)
 {
-       u32 reg;
-       u32 txpingbusy;
-       u32 txpongbusy;
-       struct xemaclite *emaclite = dev->priv;
+       u32 tmp;
+       struct emaclite_regs *regs = emaclite->regs;
 
        /*
         * Read the other buffer register
         * and determine if the other buffer is available
         */
-       reg = in_be32 (dev->iobase +
-                       emaclite->nexttxbuffertouse + 0);
-       txpingbusy = ((reg & XEL_TSR_XMIT_BUSY_MASK) ==
-                       XEL_TSR_XMIT_BUSY_MASK);
-
-       reg = in_be32 (dev->iobase +
-                       (emaclite->nexttxbuffertouse ^ XEL_TSR_OFFSET) + 0);
-       txpongbusy = ((reg & XEL_TSR_XMIT_BUSY_MASK) ==
-                       XEL_TSR_XMIT_BUSY_MASK);
+       tmp = ~in_be32(&regs->tx_ping_tsr);
+       if (emaclite->txpp)
+               tmp |= ~in_be32(&regs->tx_pong_tsr);
 
-       return !(txpingbusy && txpongbusy);
+       return !(tmp & XEL_TSR_XMIT_BUSY_MASK);
 }
 
-static int emaclite_send(struct eth_device *dev, void *ptr, int len)
+static int emaclite_send(struct udevice *dev, void *ptr, int len)
 {
        u32 reg;
-       u32 baseaddress;
-       struct xemaclite *emaclite = dev->priv;
+       struct xemaclite *emaclite = dev_get_priv(dev);
+       struct emaclite_regs *regs = emaclite->regs;
 
        u32 maxtry = 1000;
 
        if (len > PKTSIZE)
                len = PKTSIZE;
 
-       while (!xemaclite_txbufferavailable(dev) && maxtry) {
+       while (xemaclite_txbufferavailable(emaclite) && maxtry) {
                udelay(10);
                maxtry--;
        }
@@ -203,58 +403,40 @@ static int emaclite_send(struct eth_device *dev, void *ptr, int len)
        if (!maxtry) {
                printf("Error: Timeout waiting for ethernet TX buffer\n");
                /* Restart PING TX */
-               out_be32 (dev->iobase + XEL_TSR_OFFSET, 0);
+               out_be32(&regs->tx_ping_tsr, 0);
                if (emaclite->txpp) {
-                       out_be32 (dev->iobase + XEL_TSR_OFFSET +
-                               XEL_BUFFER_OFFSET, 0);
+                       out_be32(&regs->tx_pong_tsr, 0);
                }
                return -1;
        }
 
-       /* Determine the expected TX buffer address */
-       baseaddress = (dev->iobase + emaclite->nexttxbuffertouse);
-
        /* Determine if the expected buffer address is empty */
-       reg = in_be32 (baseaddress + XEL_TSR_OFFSET);
-       if (((reg & XEL_TSR_XMIT_BUSY_MASK) == 0)
-               && ((in_be32 ((baseaddress) + XEL_TSR_OFFSET)
-                       & XEL_TSR_XMIT_ACTIVE_MASK) == 0)) {
-
-               if (emaclite->txpp)
-                       emaclite->nexttxbuffertouse ^= XEL_BUFFER_OFFSET;
-
-               debug("Send packet from 0x%x\n", baseaddress);
+       reg = in_be32(&regs->tx_ping_tsr);
+       if ((reg & XEL_TSR_XMIT_BUSY_MASK) == 0) {
+               debug("Send packet from tx_ping buffer\n");
                /* Write the frame to the buffer */
-               xemaclite_alignedwrite(ptr, baseaddress, len);
-               out_be32 (baseaddress + XEL_TPLR_OFFSET,(len &
-                       (XEL_TPLR_LENGTH_MASK_HI | XEL_TPLR_LENGTH_MASK_LO)));
-               reg = in_be32 (baseaddress + XEL_TSR_OFFSET);
+               xemaclite_alignedwrite(ptr, &regs->tx_ping, len);
+               out_be32(&regs->tx_ping_tplr, len &
+                       (XEL_TPLR_LENGTH_MASK_HI | XEL_TPLR_LENGTH_MASK_LO));
+               reg = in_be32(&regs->tx_ping_tsr);
                reg |= XEL_TSR_XMIT_BUSY_MASK;
-               if ((reg & XEL_TSR_XMIT_IE_MASK) != 0)
-                       reg |= XEL_TSR_XMIT_ACTIVE_MASK;
-               out_be32 (baseaddress + XEL_TSR_OFFSET, reg);
+               out_be32(&regs->tx_ping_tsr, reg);
                return 0;
        }
 
        if (emaclite->txpp) {
-               /* Switch to second buffer */
-               baseaddress ^= XEL_BUFFER_OFFSET;
                /* Determine if the expected buffer address is empty */
-               reg = in_be32 (baseaddress + XEL_TSR_OFFSET);
-               if (((reg & XEL_TSR_XMIT_BUSY_MASK) == 0)
-                       && ((in_be32 ((baseaddress) + XEL_TSR_OFFSET)
-                               & XEL_TSR_XMIT_ACTIVE_MASK) == 0)) {
-                       debug("Send packet from 0x%x\n", baseaddress);
+               reg = in_be32(&regs->tx_pong_tsr);
+               if ((reg & XEL_TSR_XMIT_BUSY_MASK) == 0) {
+                       debug("Send packet from tx_pong buffer\n");
                        /* Write the frame to the buffer */
-                       xemaclite_alignedwrite(ptr, baseaddress, len);
-                       out_be32 (baseaddress + XEL_TPLR_OFFSET, (len &
-                               (XEL_TPLR_LENGTH_MASK_HI |
-                                       XEL_TPLR_LENGTH_MASK_LO)));
-                       reg = in_be32 (baseaddress + XEL_TSR_OFFSET);
+                       xemaclite_alignedwrite(ptr, &regs->tx_pong, len);
+                       out_be32(&regs->tx_pong_tplr, len &
+                                (XEL_TPLR_LENGTH_MASK_HI |
+                                 XEL_TPLR_LENGTH_MASK_LO));
+                       reg = in_be32(&regs->tx_pong_tsr);
                        reg |= XEL_TSR_XMIT_BUSY_MASK;
-                       if ((reg & XEL_TSR_XMIT_IE_MASK) != 0)
-                               reg |= XEL_TSR_XMIT_ACTIVE_MASK;
-                       out_be32 (baseaddress + XEL_TSR_OFFSET, reg);
+                       out_be32(&regs->tx_pong_tsr, reg);
                        return 0;
                }
        }
@@ -263,130 +445,188 @@ static int emaclite_send(struct eth_device *dev, void *ptr, int len)
        return -1;
 }
 
-static int emaclite_recv(struct eth_device *dev)
+static int emaclite_recv(struct udevice *dev, int flags, uchar **packetp)
 {
-       u32 length;
-       u32 reg;
-       u32 baseaddress;
+       u32 length, first_read, reg, attempt = 0;
+       void *addr, *ack;
        struct xemaclite *emaclite = dev->priv;
+       struct emaclite_regs *regs = emaclite->regs;
+       struct ethernet_hdr *eth;
+       struct ip_udp_hdr *ip;
+
+try_again:
+       if (!emaclite->use_rx_pong_buffer_next) {
+               reg = in_be32(&regs->rx_ping_rsr);
+               debug("Testing data at rx_ping\n");
+               if ((reg & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) {
+                       debug("Data found in rx_ping buffer\n");
+                       addr = &regs->rx_ping;
+                       ack = &regs->rx_ping_rsr;
+               } else {
+                       debug("Data not found in rx_ping buffer\n");
+                       /* Pong buffer is not available - return immediately */
+                       if (!emaclite->rxpp)
+                               return -1;
 
-       baseaddress = dev->iobase + emaclite->nextrxbuffertouse;
-       reg = in_be32 (baseaddress + XEL_RSR_OFFSET);
-       debug("Testing data at address 0x%x\n", baseaddress);
-       if ((reg & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) {
-               if (emaclite->rxpp)
-                       emaclite->nextrxbuffertouse ^= XEL_BUFFER_OFFSET;
+                       /* Try pong buffer if this is first attempt */
+                       if (attempt++)
+                               return -1;
+                       emaclite->use_rx_pong_buffer_next =
+                                       !emaclite->use_rx_pong_buffer_next;
+                       goto try_again;
+               }
        } else {
-
-               if (!emaclite->rxpp) {
-                       debug("No data was available - address 0x%x\n",
-                                                               baseaddress);
-                       return 0;
+               reg = in_be32(&regs->rx_pong_rsr);
+               debug("Testing data at rx_pong\n");
+               if ((reg & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) {
+                       debug("Data found in rx_pong buffer\n");
+                       addr = &regs->rx_pong;
+                       ack = &regs->rx_pong_rsr;
                } else {
-                       baseaddress ^= XEL_BUFFER_OFFSET;
-                       reg = in_be32 (baseaddress + XEL_RSR_OFFSET);
-                       if ((reg & XEL_RSR_RECV_DONE_MASK) !=
-                                               XEL_RSR_RECV_DONE_MASK) {
-                               debug("No data was available - address 0x%x\n",
-                                               baseaddress);
-                               return 0;
-                       }
+                       debug("Data not found in rx_pong buffer\n");
+                       /* Try ping buffer if this is first attempt */
+                       if (attempt++)
+                               return -1;
+                       emaclite->use_rx_pong_buffer_next =
+                                       !emaclite->use_rx_pong_buffer_next;
+                       goto try_again;
                }
        }
-       /* Get the length of the frame that arrived */
-       switch(((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC))) &
-                       0xFFFF0000 ) >> 16) {
-               case 0x806:
-                       length = 42 + 20; /* FIXME size of ARP */
-                       debug("ARP Packet\n");
-                       break;
-               case 0x800:
-                       length = 14 + 14 +
-                       (((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET +
-                                               0x10))) & 0xFFFF0000) >> 16);
-                       /* FIXME size of IP packet */
-                       debug ("IP Packet\n");
-                       break;
-               default:
-                       debug("Other Packet\n");
-                       length = PKTSIZE;
-                       break;
+
+       /* Read all bytes for ARP packet with 32bit alignment - 48bytes  */
+       first_read = ALIGN(ETHER_HDR_SIZE + ARP_HDR_SIZE + ETH_FCS_LEN, 4);
+       xemaclite_alignedread(addr, etherrxbuff, first_read);
+
+       /* Detect real packet size */
+       eth = (struct ethernet_hdr *)etherrxbuff;
+       switch (ntohs(eth->et_protlen)) {
+       case PROT_ARP:
+               length = first_read;
+               debug("ARP Packet %x\n", length);
+               break;
+       case PROT_IP:
+               ip = (struct ip_udp_hdr *)(etherrxbuff + ETHER_HDR_SIZE);
+               length = ntohs(ip->ip_len);
+               length += ETHER_HDR_SIZE + ETH_FCS_LEN;
+               debug("IP Packet %x\n", length);
+               break;
+       default:
+               debug("Other Packet\n");
+               length = PKTSIZE;
+               break;
        }
 
-       xemaclite_alignedread((u32 *) (baseaddress + XEL_RXBUFF_OFFSET),
-                       etherrxbuff, length);
+       /* Read the rest of the packet which is longer then first read */
+       if (length != first_read)
+               xemaclite_alignedread(addr + first_read,
+                                     etherrxbuff + first_read,
+                                     length - first_read);
 
        /* Acknowledge the frame */
-       reg = in_be32 (baseaddress + XEL_RSR_OFFSET);
+       reg = in_be32(ack);
        reg &= ~XEL_RSR_RECV_DONE_MASK;
-       out_be32 (baseaddress + XEL_RSR_OFFSET, reg);
+       out_be32(ack, reg);
 
-       debug("Packet receive from 0x%x, length %dB\n", baseaddress, length);
-       net_process_received_packet((uchar *)etherrxbuff, length);
+       debug("Packet receive from 0x%p, length %dB\n", addr, length);
+       *packetp = etherrxbuff;
        return length;
-
 }
 
-int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr,
-                                                       int txpp, int rxpp)
+static int emaclite_miiphy_read(struct mii_dev *bus, int addr,
+                               int devad, int reg)
 {
-       struct eth_device *dev;
-       struct xemaclite *emaclite;
+       u32 ret;
+       u16 val = 0;
 
-       dev = calloc(1, sizeof(*dev));
-       if (dev == NULL)
-               return -1;
+       ret = phyread(bus->priv, addr, reg, &val);
+       debug("emaclite: Read MII 0x%x, 0x%x, 0x%x, %d\n", addr, reg, val, ret);
+       return val;
+}
 
-       emaclite = calloc(1, sizeof(struct xemaclite));
-       if (emaclite == NULL) {
-               free(dev);
-               return -1;
-       }
+static int emaclite_miiphy_write(struct mii_dev *bus, int addr, int devad,
+                                int reg, u16 value)
+{
+       debug("emaclite: Write MII 0x%x, 0x%x, 0x%x\n", addr, reg, value);
+       return phywrite(bus->priv, addr, reg, value);
+}
+
+static int emaclite_probe(struct udevice *dev)
+{
+       struct xemaclite *emaclite = dev_get_priv(dev);
+       int ret;
 
-       dev->priv = emaclite;
+       emaclite->bus = mdio_alloc();
+       emaclite->bus->read = emaclite_miiphy_read;
+       emaclite->bus->write = emaclite_miiphy_write;
+       emaclite->bus->priv = emaclite;
+       strcpy(emaclite->bus->name, "emaclite");
 
-       emaclite->txpp = txpp;
-       emaclite->rxpp = rxpp;
+       ret = mdio_register(emaclite->bus);
+       if (ret)
+               return ret;
 
-       sprintf(dev->name, "Xelite.%lx", base_addr);
+       return 0;
+}
 
-       dev->iobase = base_addr;
-       dev->init = emaclite_init;
-       dev->halt = emaclite_halt;
-       dev->send = emaclite_send;
-       dev->recv = emaclite_recv;
+static int emaclite_remove(struct udevice *dev)
+{
+       struct xemaclite *emaclite = dev_get_priv(dev);
 
-       eth_register(dev);
+       free(emaclite->phydev);
+       mdio_unregister(emaclite->bus);
+       mdio_free(emaclite->bus);
 
-       return 1;
+       return 0;
 }
 
-#if CONFIG_IS_ENABLED(OF_CONTROL)
-int xilinx_emaclite_of_init(const void *blob)
+static const struct eth_ops emaclite_ops = {
+       .start = emaclite_start,
+       .send = emaclite_send,
+       .recv = emaclite_recv,
+       .stop = emaclite_stop,
+};
+
+static int emaclite_ofdata_to_platdata(struct udevice *dev)
 {
+       struct eth_pdata *pdata = dev_get_platdata(dev);
+       struct xemaclite *emaclite = dev_get_priv(dev);
        int offset = 0;
-       u32 ret = 0;
-       u32 reg;
 
-       do {
-               offset = fdt_node_offset_by_compatible(blob, offset,
-                                       "xlnx,xps-ethernetlite-1.00.a");
-               if (offset != -1) {
-                       reg = fdtdec_get_addr(blob, offset, "reg");
-                       if (reg != FDT_ADDR_T_NONE) {
-                               u32 rxpp = fdtdec_get_int(blob, offset,
-                                                       "xlnx,rx-ping-pong", 0);
-                               u32 txpp = fdtdec_get_int(blob, offset,
-                                                       "xlnx,tx-ping-pong", 0);
-                               ret |= xilinx_emaclite_initialize(NULL, reg,
-                                                               txpp, rxpp);
-                       } else {
-                               debug("EMACLITE: Can't get base address\n");
-                               return -1;
-                       }
-               }
-       } while (offset != -1);
+       pdata->iobase = (phys_addr_t)dev_get_addr(dev);
+       emaclite->regs = (struct emaclite_regs *)pdata->iobase;
+
+       emaclite->phyaddr = -1;
+
+       offset = fdtdec_lookup_phandle(gd->fdt_blob, dev->of_offset,
+                                     "phy-handle");
+       if (offset > 0)
+               emaclite->phyaddr = fdtdec_get_int(gd->fdt_blob, offset,
+                                                  "reg", -1);
+
+       emaclite->txpp = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
+                                       "xlnx,tx-ping-pong", 0);
+       emaclite->rxpp = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
+                                       "xlnx,rx-ping-pong", 0);
 
-       return ret;
+       printf("EMACLITE: %lx, phyaddr %d, %d/%d\n", (ulong)emaclite->regs,
+              emaclite->phyaddr, emaclite->txpp, emaclite->rxpp);
+
+       return 0;
 }
-#endif
+
+static const struct udevice_id emaclite_ids[] = {
+       { .compatible = "xlnx,xps-ethernetlite-1.00.a" },
+       { }
+};
+
+U_BOOT_DRIVER(emaclite) = {
+       .name   = "emaclite",
+       .id     = UCLASS_ETH,
+       .of_match = emaclite_ids,
+       .ofdata_to_platdata = emaclite_ofdata_to_platdata,
+       .probe  = emaclite_probe,
+       .remove = emaclite_remove,
+       .ops    = &emaclite_ops,
+       .priv_auto_alloc_size = sizeof(struct xemaclite),
+       .platdata_auto_alloc_size = sizeof(struct eth_pdata),
+};
index 7cc86571e4952e001f2d5da234795abd520d223a..ca09546ab59f7f7d4b540eb6903bdacaa9a55815 100644 (file)
@@ -303,7 +303,8 @@ int xilinx_ll_temac_initialize(bd_t *bis, struct ll_temac_info *devinf)
        if (devinf->devname) {
                strncpy(dev->name, devinf->devname, sizeof(dev->name));
        } else {
-               snprintf(dev->name, sizeof(dev->name), "lltemac.%lx", devinf->base_addr);
+               snprintf(dev->name, sizeof(dev->name), "ll_tem.%lx",
+                        devinf->base_addr);
                devinf->devname = dev->name;
        }
 
index 97e30f3be044e0a76db6428245648d5b3251a874..b3821c31a91dc36f0cf6e7169c9ecc7bbad10c02 100644 (file)
@@ -57,7 +57,11 @@ DECLARE_GLOBAL_DATA_PTR;
 #define ZYNQ_GEM_NWCFG_SPEED1000       0x000000400 /* 1Gbps operation */
 #define ZYNQ_GEM_NWCFG_FDEN            0x000000002 /* Full Duplex mode */
 #define ZYNQ_GEM_NWCFG_FSREM           0x000020000 /* FCS removal */
+#ifdef CONFIG_ARM64
+#define ZYNQ_GEM_NWCFG_MDCCLKDIV       0x000100000 /* Div pclk by 64, max 160MHz */
+#else
 #define ZYNQ_GEM_NWCFG_MDCCLKDIV       0x0000c0000 /* Div pclk by 48, max 120MHz */
+#endif
 
 #ifdef CONFIG_ARM64
 # define ZYNQ_GEM_DBUS_WIDTH   (1 << 21) /* 64 bit bus */
index 83068cfd50f4c53aac9f1a906602be22624d4b5f..1ab612826914e71872c37b895a30bae27b042633 100644 (file)
@@ -112,6 +112,13 @@ config DEBUG_UART_S5P
          will need to provide parameters to make this work. The driver will
          be available until the real driver-model serial is running.
 
+config DEBUG_UART_UARTLITE
+       bool "Xilinx Uartlite"
+       help
+         Select this to enable a debug UART using the serial_uartlite driver.
+         You will need to provide parameters to make this work. The driver will
+         be available until the real driver-model serial is running.
+
 config DEBUG_UART_ZYNQ
        bool "Xilinx Zynq"
        help
@@ -271,4 +278,11 @@ config UNIPHIER_SERIAL
          If you have a UniPhier based board and want to use the on-chip
          serial ports, say Y to this option. If unsure, say N.
 
+config XILINX_UARTLITE
+       bool "Xilinx Uarlite support"
+       depends on DM_SERIAL && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP || 4xx)
+       help
+         If you have a Xilinx based board and want to use the uartlite
+         serial ports, say Y to this option. If unsure, say N.
+
 endmenu
index 988438e75471a37f2643328c910ff13b0fe753e5..a2e93039257133aa97ef101d5f2208ebb100f187 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2008-2011 Michal Simek <monstr@monstr.eu>
+ * (C) Copyright 2008 - 2015 Michal Simek <monstr@monstr.eu>
  * Clean driver and add xilinx constant from header file
  *
  * (C) Copyright 2004 Atmark Techno, Inc.
 
 #include <config.h>
 #include <common.h>
+#include <dm.h>
 #include <asm/io.h>
 #include <linux/compiler.h>
 #include <serial.h>
 
-#define SR_TX_FIFO_FULL                0x08 /* transmit FIFO full */
-#define SR_RX_FIFO_VALID_DATA  0x01 /* data in receive FIFO */
-#define SR_RX_FIFO_FULL                0x02 /* receive FIFO full */
+DECLARE_GLOBAL_DATA_PTR;
+
+#define SR_TX_FIFO_FULL                BIT(3) /* transmit FIFO full */
+#define SR_TX_FIFO_EMPTY       BIT(2) /* transmit FIFO empty */
+#define SR_RX_FIFO_VALID_DATA  BIT(0) /* data in receive FIFO */
+#define SR_RX_FIFO_FULL                BIT(1) /* receive FIFO full */
 
 #define ULITE_CONTROL_RST_TX   0x01
 #define ULITE_CONTROL_RST_RX   0x02
@@ -28,135 +32,111 @@ struct uartlite {
        unsigned int control;
 };
 
-static struct uartlite *userial_ports[4] = {
-#ifdef XILINX_UARTLITE_BASEADDR
-       [0] = (struct uartlite *)XILINX_UARTLITE_BASEADDR,
-#endif
-#ifdef XILINX_UARTLITE_BASEADDR1
-       [1] = (struct uartlite *)XILINX_UARTLITE_BASEADDR1,
-#endif
-#ifdef XILINX_UARTLITE_BASEADDR2
-       [2] = (struct uartlite *)XILINX_UARTLITE_BASEADDR2,
-#endif
-#ifdef XILINX_UARTLITE_BASEADDR3
-       [3] = (struct uartlite *)XILINX_UARTLITE_BASEADDR3
-#endif
+struct uartlite_platdata {
+       struct uartlite *regs;
 };
 
-static void uartlite_serial_putc(const char c, const int port)
+static int uartlite_serial_putc(struct udevice *dev, const char ch)
 {
-       struct uartlite *regs = userial_ports[port];
+       struct uartlite_platdata *plat = dev_get_platdata(dev);
+       struct uartlite *regs = plat->regs;
 
-       if (c == '\n')
-               uartlite_serial_putc('\r', port);
+       if (in_be32(&regs->status) & SR_TX_FIFO_FULL)
+               return -EAGAIN;
 
-       while (in_be32(&regs->status) & SR_TX_FIFO_FULL)
-               ;
-       out_be32(&regs->tx_fifo, c & 0xff);
-}
+       out_be32(&regs->tx_fifo, ch & 0xff);
 
-static void uartlite_serial_puts(const char *s, const int port)
-{
-       while (*s)
-               uartlite_serial_putc(*s++, port);
+       return 0;
 }
 
-static int uartlite_serial_getc(const int port)
+static int uartlite_serial_getc(struct udevice *dev)
 {
-       struct uartlite *regs = userial_ports[port];
+       struct uartlite_platdata *plat = dev_get_platdata(dev);
+       struct uartlite *regs = plat->regs;
+
+       if (!(in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA))
+               return -EAGAIN;
 
-       while (!(in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA))
-               ;
        return in_be32(&regs->rx_fifo) & 0xff;
 }
 
-static int uartlite_serial_tstc(const int port)
+static int uartlite_serial_pending(struct udevice *dev, bool input)
 {
-       struct uartlite *regs = userial_ports[port];
+       struct uartlite_platdata *plat = dev_get_platdata(dev);
+       struct uartlite *regs = plat->regs;
+
+       if (input)
+               return in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA;
 
-       return in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA;
+       return !(in_be32(&regs->status) & SR_TX_FIFO_EMPTY);
 }
 
-static int uartlite_serial_init(const int port)
+static int uartlite_serial_probe(struct udevice *dev)
 {
-       struct uartlite *regs = userial_ports[port];
+       struct uartlite_platdata *plat = dev_get_platdata(dev);
+       struct uartlite *regs = plat->regs;
 
-       if (regs) {
-               out_be32(&regs->control, 0);
-               out_be32(&regs->control,
-                        ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX);
-               in_be32(&regs->control);
-               return 0;
-       }
+       out_be32(&regs->control, 0);
+       out_be32(&regs->control, ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX);
+       in_be32(&regs->control);
 
-       return -1;
+       return 0;
 }
 
-/* Multi serial device functions */
-#define DECLARE_ESERIAL_FUNCTIONS(port) \
-       static int userial##port##_init(void) \
-                               { return uartlite_serial_init(port); } \
-       static void userial##port##_setbrg(void) {} \
-       static int userial##port##_getc(void) \
-                               { return uartlite_serial_getc(port); } \
-       static int userial##port##_tstc(void) \
-                               { return uartlite_serial_tstc(port); } \
-       static void userial##port##_putc(const char c) \
-                               { uartlite_serial_putc(c, port); } \
-       static void userial##port##_puts(const char *s) \
-                               { uartlite_serial_puts(s, port); }
-
-/* Serial device descriptor */
-#define INIT_ESERIAL_STRUCTURE(port, __name) { \
-       .name   = __name,                       \
-       .start  = userial##port##_init,         \
-       .stop   = NULL,                         \
-       .setbrg = userial##port##_setbrg,       \
-       .getc   = userial##port##_getc,         \
-       .tstc   = userial##port##_tstc,         \
-       .putc   = userial##port##_putc,         \
-       .puts   = userial##port##_puts,         \
+static int uartlite_serial_ofdata_to_platdata(struct udevice *dev)
+{
+       struct uartlite_platdata *plat = dev_get_platdata(dev);
+
+       plat->regs = (struct uartlite *)dev_get_addr(dev);
+
+       return 0;
 }
 
-DECLARE_ESERIAL_FUNCTIONS(0);
-struct serial_device uartlite_serial0_device =
-       INIT_ESERIAL_STRUCTURE(0, "ttyUL0");
-DECLARE_ESERIAL_FUNCTIONS(1);
-struct serial_device uartlite_serial1_device =
-       INIT_ESERIAL_STRUCTURE(1, "ttyUL1");
-DECLARE_ESERIAL_FUNCTIONS(2);
-struct serial_device uartlite_serial2_device =
-       INIT_ESERIAL_STRUCTURE(2, "ttyUL2");
-DECLARE_ESERIAL_FUNCTIONS(3);
-struct serial_device uartlite_serial3_device =
-       INIT_ESERIAL_STRUCTURE(3, "ttyUL3");
-
-__weak struct serial_device *default_serial_console(void)
+static const struct dm_serial_ops uartlite_serial_ops = {
+       .putc = uartlite_serial_putc,
+       .pending = uartlite_serial_pending,
+       .getc = uartlite_serial_getc,
+};
+
+static const struct udevice_id uartlite_serial_ids[] = {
+       { .compatible = "xlnx,opb-uartlite-1.00.b", },
+       { .compatible = "xlnx,xps-uartlite-1.00.a" },
+       { }
+};
+
+U_BOOT_DRIVER(serial_uartlite) = {
+       .name   = "serial_uartlite",
+       .id     = UCLASS_SERIAL,
+       .of_match = uartlite_serial_ids,
+       .ofdata_to_platdata = uartlite_serial_ofdata_to_platdata,
+       .platdata_auto_alloc_size = sizeof(struct uartlite_platdata),
+       .probe = uartlite_serial_probe,
+       .ops    = &uartlite_serial_ops,
+       .flags = DM_FLAG_PRE_RELOC,
+};
+
+#ifdef CONFIG_DEBUG_UART_UARTLITE
+
+#include <debug_uart.h>
+
+static inline void _debug_uart_init(void)
 {
-       if (userial_ports[0])
-               return &uartlite_serial0_device;
-       if (userial_ports[1])
-               return &uartlite_serial1_device;
-       if (userial_ports[2])
-               return &uartlite_serial2_device;
-       if (userial_ports[3])
-               return &uartlite_serial3_device;
-
-       return NULL;
+       struct uartlite *regs = (struct uartlite *)CONFIG_DEBUG_UART_BASE;
+
+       out_be32(&regs->control, 0);
+       out_be32(&regs->control, ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX);
+       in_be32(&regs->control);
 }
 
-void uartlite_serial_initialize(void)
+static inline void _debug_uart_putc(int ch)
 {
-#ifdef XILINX_UARTLITE_BASEADDR
-       serial_register(&uartlite_serial0_device);
-#endif /* XILINX_UARTLITE_BASEADDR */
-#ifdef XILINX_UARTLITE_BASEADDR1
-       serial_register(&uartlite_serial1_device);
-#endif /* XILINX_UARTLITE_BASEADDR1 */
-#ifdef XILINX_UARTLITE_BASEADDR2
-       serial_register(&uartlite_serial2_device);
-#endif /* XILINX_UARTLITE_BASEADDR2 */
-#ifdef XILINX_UARTLITE_BASEADDR3
-       serial_register(&uartlite_serial3_device);
-#endif /* XILINX_UARTLITE_BASEADDR3 */
+       struct uartlite *regs = (struct uartlite *)CONFIG_DEBUG_UART_BASE;
+
+       while (in_be32(&regs->status) & SR_TX_FIFO_FULL)
+               ;
+
+       out_be32(&regs->tx_fifo, ch & 0xff);
 }
+
+DEBUG_UART_FUNCS
+#endif
index 3430482f8d8b9e9a63c9dda792a07035d58a6401..e79d997cbab722580f2c8c2876a7f518577a1f41 100644 (file)
@@ -156,13 +156,8 @@ static int zynq_serial_pending(struct udevice *dev, bool input)
 static int zynq_serial_ofdata_to_platdata(struct udevice *dev)
 {
        struct zynq_uart_priv *priv = dev_get_priv(dev);
-       fdt_addr_t addr;
 
-       addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg");
-       if (addr == FDT_ADDR_T_NONE)
-               return -EINVAL;
-
-       priv->regs = (struct uart_zynq *)addr;
+       priv->regs = (struct uart_zynq *)dev_get_addr(dev);
 
        return 0;
 }
@@ -177,6 +172,7 @@ static const struct dm_serial_ops zynq_serial_ops = {
 static const struct udevice_id zynq_serial_ids[] = {
        { .compatible = "xlnx,xuartps" },
        { .compatible = "cdns,uart-r1p8" },
+       { .compatible = "cdns,uart-r1p12" },
        { }
 };
 
diff --git a/include/configs/fx12mm.h b/include/configs/fx12mm.h
deleted file mode 100644 (file)
index fa32a2e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * (C) Copyright 2008
- *
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- * This work has been supported by: QTechnology  http://qtec.com
- *
- * Georg Schardt <schardt@team-ctech.de>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-/*
- * Configuration file for the Virtex4FX12 Minimodul by Avnet/Memec,
- * see http://www.em.avnet.com
- */
-
-#ifndef __CONFIG_FX12_H
-#define __CONFIG_FX12_H
-
-#include "../board/avnet/fx12mm/xparameters.h"
-
-/* cmd config */
-#define CONFIG_CMD_JFFS2
-#define CONFIG_CMD_MTDPARTS
-#define CONFIG_MTD_DEVICE              /* needed for mtdparts commands */
-#define CONFIG_FLASH_CFI_MTD
-
-/* sdram */
-#define CONFIG_SYS_SDRAM_SIZE_MB       64
-
-/* environment */
-#define CONFIG_ENV_IS_IN_FLASH  1
-#define CONFIG_ENV_SIZE         0x10000
-#define CONFIG_ENV_SECT_SIZE    0x10000
-#define CONFIG_SYS_ENV_OFFSET   0xA0000
-#define CONFIG_ENV_ADDR         (CONFIG_SYS_FLASH_BASE+CONFIG_SYS_ENV_OFFSET)
-#define CONFIG_ENV_OVERWRITE   1
-
-/*Misc*/
-#define CONFIG_PREBOOT         "echo U-Boot is up and running;"
-
-/*Flash*/
-#define CONFIG_SYS_FLASH_SIZE          (4*1024*1024)
-#define CONFIG_SYS_MAX_FLASH_SECT      71
-#define MTDIDS_DEFAULT         "nor0=fx12mm-flash"
-#define MTDPARTS_DEFAULT       "mtdparts=fx12mm-flash:-(user)"
-
-#include "configs/xilinx-ppc405.h"
-
-#endif /* __CONFIG_H */
index f93861d770ee3effe181ae050cea09ec0775c686..97a0d86b912bdd9e663cbd1c5330070f92363669 100644 (file)
 #endif
 
 /* uart */
-#ifdef XILINX_UARTLITE_BASEADDR
-# define CONFIG_XILINX_UARTLITE
-# define CONFIG_SERIAL_BASE    XILINX_UARTLITE_BASEADDR
-# define CONFIG_BAUDRATE       XILINX_UARTLITE_BAUDRATE
-# define CONFIG_SYS_BAUDRATE_TABLE     { CONFIG_BAUDRATE }
-# define CONSOLE_ARG   "console=console=ttyUL0,115200\0"
-#elif XILINX_UART16550_BASEADDR
-# define CONFIG_SYS_NS16550_SERIAL
-# if defined(__MICROBLAZEEL__)
-#  define CONFIG_SYS_NS16550_REG_SIZE  -4
-# else
-#  define CONFIG_SYS_NS16550_REG_SIZE  4
-# endif
-# define CONFIG_CONS_INDEX             1
-# define CONFIG_SYS_NS16550_COM1 \
-               ((XILINX_UART16550_BASEADDR & ~0xF) + 0x1000)
-# define CONFIG_SYS_NS16550_CLK        XILINX_UART16550_CLOCK_HZ
 # define CONFIG_BAUDRATE       115200
-
 /* The following table includes the supported baudrates */
 # define CONFIG_SYS_BAUDRATE_TABLE \
        {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400}
-# define CONSOLE_ARG   "console=console=ttyS0,115200\0"
-#else
-# error Undefined uart
-#endif
 
 /* setting reset address */
 /*#define      CONFIG_SYS_RESET_ADDRESS        CONFIG_SYS_TEXT_BASE*/
 
-/* ethernet */
-#undef CONFIG_SYS_ENET
-#if defined(XILINX_EMACLITE_BASEADDR) || defined(CONFIG_OF_CONTROL)
-# define CONFIG_XILINX_EMACLITE        1
-# define CONFIG_SYS_ENET
-#endif
-#if defined(XILINX_AXIEMAC_BASEADDR)
-# define CONFIG_XILINX_AXIEMAC 1
-# define CONFIG_SYS_ENET
-#endif
-
-#undef ET_DEBUG
-
 /* gpio */
 #ifdef XILINX_GPIO_BASEADDR
 # define CONFIG_XILINX_GPIO
 # define CONFIG_SYS_GPIO_0_ADDR                XILINX_GPIO_BASEADDR
 #endif
+#define CONFIG_BOARD_LATE_INIT
 
 /* interrupt controller */
 #ifdef XILINX_INTC_BASEADDR
 # endif
 #endif
 
-#if !defined(CONFIG_OF_CONTROL) || \
-       (defined(CONFIG_SPL_BUILD) && !defined(CONFIG_SPL_OF_CONTROL))
-/* ddr sdram - main memory */
-# define CONFIG_SYS_SDRAM_BASE XILINX_RAM_START
-# define CONFIG_SYS_SDRAM_SIZE XILINX_RAM_SIZE
-#endif
-
 #define CONFIG_SYS_MALLOC_LEN  0xC0000
 
 /* Stack location before relocation */
 #endif /* !SPIFLASH */
 #endif /* !FLASH */
 
-/* system ace */
-#ifdef XILINX_SYSACE_BASEADDR
-# define CONFIG_SYSTEMACE
-/* #define DEBUG_SYSTEMACE */
-# define SYSTEMACE_CONFIG_FPGA
-# define CONFIG_SYS_SYSTEMACE_BASE     XILINX_SYSACE_BASEADDR
-# define CONFIG_SYS_SYSTEMACE_WIDTH    XILINX_SYSACE_MEM_WIDTH
-# define CONFIG_DOS_PARTITION
-#endif
-
 #if defined(XILINX_USE_ICACHE)
 # define CONFIG_ICACHE
 #else
 # undef CONFIG_CMD_CACHE
 #endif
 
-#ifdef CONFIG_SYS_ENET
-# define CONFIG_CMD_PING
-# define CONFIG_CMD_DHCP
-# define CONFIG_CMD_TFTPPUT
-#endif
-
-#if defined(CONFIG_SYSTEMACE)
-# define CONFIG_CMD_EXT2
-# define CONFIG_CMD_FAT
-#endif
-
 #if defined(FLASH)
 # define CONFIG_CMD_JFFS2
 # define CONFIG_CMD_UBI
 #define        CONFIG_SYS_MAXARGS      15
 #define        CONFIG_SYS_LONGHELP
 /* default load address */
-#define        CONFIG_SYS_LOAD_ADDR    XILINX_RAM_START
+#define        CONFIG_SYS_LOAD_ADDR    0
 
 #define        CONFIG_BOOTDELAY        -1      /* -1 disables auto-boot */
 #define        CONFIG_BOOTARGS         "root=romfs"
 
 #define CONFIG_CMDLINE_EDITING
 
-#define CONFIG_NETCONSOLE
 #define CONFIG_SYS_CONSOLE_IS_IN_ENV
 
-/* Use the HUSH parser */
-#define CONFIG_SYS_HUSH_PARSER
-
 /* Enable flat device tree support */
 #define CONFIG_LMB             1
-#define CONFIG_FIT             1
 #define CONFIG_OF_LIBFDT       1
 
 #if defined(CONFIG_XILINX_AXIEMAC)
 # define CONFIG_CMD_MII                1
 # define CONFIG_PHY_GIGE       1
 # define CONFIG_SYS_FAULT_ECHO_LINK_DOWN       1
-# define CONFIG_PHYLIB         1
 # define CONFIG_PHY_ATHEROS    1
 # define CONFIG_PHY_BROADCOM   1
 # define CONFIG_PHY_DAVICOM    1
 # define CONFIG_PHY_LXT                1
 # define CONFIG_PHY_MARVELL    1
 # define CONFIG_PHY_MICREL     1
+# define CONFIG_PHY_MICREL_KSZ9021
 # define CONFIG_PHY_NATSEMI    1
 # define CONFIG_PHY_REALTEK    1
 # define CONFIG_PHY_VITESSE    1
 #else
 # undef CONFIG_MII
 # undef CONFIG_CMD_MII
-# undef CONFIG_PHYLIB
 #endif
 
 /* SPL part */
diff --git a/include/configs/ml507.h b/include/configs/ml507.h
deleted file mode 100644 (file)
index 89a7290..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * (C) Copyright 2008
- *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- *  This work has been supported by: QTechnology  http://qtec.com/
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*CPU*/
-#define CONFIG_440             1
-#define CONFIG_XILINX_ML507    1
-#include "../board/xilinx/ml507/xparameters.h"
-
-/*Mem Map*/
-#define CONFIG_SYS_SDRAM_SIZE_MB       256
-
-/*Env*/
-#define        CONFIG_ENV_IS_IN_FLASH  1
-#define        CONFIG_ENV_SIZE         0x20000
-#define        CONFIG_ENV_SECT_SIZE    0x20000
-#define CONFIG_ENV_OFFSET      0x340000
-#define CONFIG_ENV_ADDR                (XPAR_FLASH_MEM0_BASEADDR+CONFIG_ENV_OFFSET)
-
-/*Misc*/
-#define CONFIG_PREBOOT         "echo U-Boot is up and runnining;"
-
-/*Flash*/
-#define        CONFIG_SYS_FLASH_SIZE   (32*1024*1024)
-#define        CONFIG_SYS_MAX_FLASH_SECT       259
-#define MTDIDS_DEFAULT         "nor0=ml507-flash"
-#define MTDPARTS_DEFAULT       "mtdparts=ml507-flash:-(user)"
-
-/*Generic Configs*/
-#include <configs/xilinx-ppc440.h>
-
-#endif                                         /* __CONFIG_H */
diff --git a/include/configs/v5fx30teval.h b/include/configs/v5fx30teval.h
deleted file mode 100644 (file)
index 298fa3e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * (C) Copyright 2008
- *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- *  This work has been supported by: QTechnology  http://qtec.com/
- * SPDX-License-Identifier:    GPL-2.0+
-*/
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*CPU*/
-#define CONFIG_440             1
-#define CONFIG_XILINX_ML507    1
-#include "../board/avnet/v5fx30teval/xparameters.h"
-
-/*Mem Map*/
-#define CONFIG_SYS_SDRAM_SIZE_MB       64
-
-/*Env*/
-#define        CONFIG_ENV_IS_IN_FLASH  1
-#define        CONFIG_ENV_SIZE         0x20000
-#define        CONFIG_ENV_SECT_SIZE    0x20000
-#define CONFIG_ENV_OFFSET              0x1A0000
-#define CONFIG_ENV_ADDR                (XPAR_FLASH_MEM0_BASEADDR+CONFIG_ENV_OFFSET)
-
-/*Misc*/
-#define CONFIG_PREBOOT         "echo U-Boot is up and runnining;"
-
-/*Flash*/
-#define        CONFIG_SYS_FLASH_SIZE           (16*1024*1024)
-#define        CONFIG_SYS_MAX_FLASH_SECT       131
-#define MTDIDS_DEFAULT         "nor0=v5fx30t-flash"
-#define MTDPARTS_DEFAULT       "mtdparts=v5fx30t-flash:-(user)"
-
-/*Generic Configs*/
-#include <configs/xilinx-ppc440.h>
-
-#endif                                         /* __CONFIG_H */
index eb400d09607402d56edfd57a1fc455b1a1cccd19..d01d88b33f4d34afb65838f60d5a1e532084ec88 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  *  This work has been supported by: QTechnology  http://qtec.com/
  *
  *  (C) Copyright 2008
 #define CONFIG_SYS_NO_FLASH
 #endif
 
-/* serial communication */
-#ifdef XPAR_UARTLITE_0_BASEADDR
-#define CONFIG_XILINX_UARTLITE
-#define XILINX_UARTLITE_BASEADDR       XPAR_UARTLITE_0_BASEADDR
-#define CONFIG_BAUDRATE                        XPAR_UARTLITE_0_BAUDRATE
-#define CONFIG_SYS_BAUDRATE_TABLE      { CONFIG_BAUDRATE }
-#else
-#ifdef XPAR_UARTNS550_0_BASEADDR
-#define CONFIG_SYS_NS16550_SERIAL
-#define CONFIG_SYS_NS16550_REG_SIZE    4
-#define CONFIG_CONS_INDEX              1
-#define CONFIG_SYS_NS16550_COM1                XPAR_UARTNS550_0_BASEADDR
-#define CONFIG_SYS_NS16550_CLK         XPAR_UARTNS550_0_CLOCK_FREQ_HZ
+#define CONFIG_OF_LIBFDT       1
 #define CONFIG_BAUDRATE                        115200
-#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 115200 }
-#endif
-#endif
+/* The following table includes the supported baudrates */
+# define CONFIG_SYS_BAUDRATE_TABLE \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400}
 
 #endif                                         /* __CONFIG_H */
index 40fa0878a43f73ddbd2ca631b523c709d0a7ecf5..6182b0e7cf05ae462d7a745f7cb43409369c8feb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *
  * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  * This work has been supported by: QTechnology http://qtec.com/
  *
  * (C) Copyright 2008
@@ -14,6 +14,9 @@
 
 #include "../board/xilinx/ppc405-generic/xparameters.h"
 
+#define CONFIG_405             1
+#define CONFIG_XILINX_405      1
+
 /* sdram */
 #define CONFIG_SYS_SDRAM_SIZE_MB       256
 
 #define CONFIG_ENV_OVERWRITE           1
 
 /*Misc*/
-#define CONFIG_PREBOOT         "echo U-Boot is up and runnining;"
+#define CONFIG_PREBOOT         "echo U-Boot is up and running;"
 
 /*Flash*/
-#define CONFIG_SYS_FLASH_BASE                  XPAR_FLASH_MEM0_BASEADDR
-#define CONFIG_SYS_FLASH_SIZE          (32*1024*1024)
-#define CONFIG_SYS_MAX_FLASH_SECT      71
+#define CONFIG_SYS_FLASH_BASE          XPAR_FLASH_MEM0_BASEADDR
+#define CONFIG_SYS_FLASH_SIZE          (128*1024*1024)
+#define CONFIG_SYS_MAX_FLASH_SECT      1024
 #define CONFIG_SYS_FLASH_CFI           1
 #define CONFIG_FLASH_CFI_DRIVER                1
-#define MTDIDS_DEFAULT                 "nor0=ppc405-flash"
-#define MTDPARTS_DEFAULT               "mtdpartsa=ppc405-flash:-(user)"
+#define MTDIDS_DEFAULT                 "nor0=flash"
+#define MTDPARTS_DEFAULT               "mtdparts=flash:-(user)"
 
-#include <configs/xilinx-ppc405.h>
+#include <configs/xilinx-ppc.h>
 #endif                 /* __CONFIG_H */
diff --git a/include/configs/xilinx-ppc405.h b/include/configs/xilinx-ppc405.h
deleted file mode 100644 (file)
index a0151fe..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- *
- * (C) Copyright 2008
- * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- * This work has been supported by: QTechnology http://qtec.com/
- *
- * (C) Copyright 2008
- * Georg Schardt <schardt@team-ctech.de>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/* cpu parameter */
-#define CONFIG_405             1
-#define CONFIG_XILINX_405      1
-
-#include <configs/xilinx-ppc.h>
-
-#endif
index 95b883407839e1de85c5cb3a67c78f21fcce814d..f2505a6cd2b288801959c78a4d072c5f048a6a5b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2008
- *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
+ *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@gmail.com
  *  This work has been supported by: QTechnology  http://qtec.com/
  * SPDX-License-Identifier:    GPL-2.0+
 */
@@ -8,31 +8,42 @@
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
-/*CPU*/
+/* CPU */
 #define CONFIG_440                     1
+#define CONFIG_XILINX_440              1
 #define CONFIG_XILINX_PPC440_GENERIC   1
 #include "../board/xilinx/ppc440-generic/xparameters.h"
 
-/*Mem Map*/
+/* Mem Map */
 #define CONFIG_SYS_SDRAM_SIZE_MB       256
 
-/*Env*/
+/* Env */
 #define        CONFIG_ENV_IS_IN_FLASH  1
 #define        CONFIG_ENV_SIZE         0x20000
 #define        CONFIG_ENV_SECT_SIZE    0x20000
-#define CONFIG_ENV_OFFSET              0x340000
+#define CONFIG_ENV_OFFSET      0x340000
 #define CONFIG_ENV_ADDR                (XPAR_FLASH_MEM0_BASEADDR+CONFIG_ENV_OFFSET)
 
-/*Misc*/
-#define CONFIG_PREBOOT         "echo U-Boot is up and runnining;"
-
-/*Flash*/
-#define        CONFIG_SYS_FLASH_SIZE           (32*1024*1024)
-#define        CONFIG_SYS_MAX_FLASH_SECT       259
-#define MTDIDS_DEFAULT         "nor0=ml507-flash"
-#define MTDPARTS_DEFAULT       "mtdparts=ml507-flash:-(user)"
-
-/*Generic Configs*/
-#include <configs/xilinx-ppc440.h>
+/* Misc */
+#define CONFIG_PREBOOT         "echo U-Boot is up and running;"
+
+/* Flash */
+#define        CONFIG_SYS_FLASH_SIZE           (128*1024*1024)
+#define        CONFIG_SYS_MAX_FLASH_SECT       1024
+#define MTDIDS_DEFAULT                 "nor0=flash"
+#define MTDPARTS_DEFAULT               "mtdparts=flash:-(user)"
+
+/* Net */
+#ifdef XPAR_LLTEMAC_0_BASEADDR
+#define CONFIG_XILINX_LL_TEMAC
+#define CONFIG_MII
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_MARVELL
+#define CONFIG_NET_RANDOM_ETHADDR
+#define CONFIG_LIB_RAND
+#endif
+
+/* Generic Configs */
+#include <configs/xilinx-ppc.h>
 
 #endif                                         /* __CONFIG_H */
diff --git a/include/configs/xilinx-ppc440.h b/include/configs/xilinx-ppc440.h
deleted file mode 100644 (file)
index f457008..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * (C) Copyright 2008
- *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
- *  This work has been supported by: QTechnology  http://qtec.com/
- * SPDX-License-Identifier:    GPL-2.0+
-*/
-
-#ifndef __CONFIG_GEN_H
-#define __CONFIG_GEN_H
-
-/*CPU*/
-#define CONFIG_440             1
-#define CONFIG_XILINX_440      1
-
-#include <configs/xilinx-ppc.h>
-
-#endif                                         /* __CONFIG_H */
index 03f74508efeaf6539a7eb7e7dbe72a6c9d022a70..27ef74daf50f41187860b5f4db10ba743747bc1d 100644 (file)
 #define GICD_BASE      0xF9010000
 #define GICC_BASE      0xF9020000
 
-/* Physical Memory Map */
-#define CONFIG_NR_DRAM_BANKS           1
-#define CONFIG_SYS_SDRAM_BASE          0
-#define CONFIG_SYS_SDRAM_SIZE          0x40000000
+#define CONFIG_SYS_ALT_MEMTEST
+#define CONFIG_SYS_MEMTEST_SCRATCH     0xfffc0000
 
 #define CONFIG_SYS_MEMTEST_START       CONFIG_SYS_SDRAM_BASE
 #define CONFIG_SYS_MEMTEST_END         CONFIG_SYS_SDRAM_SIZE
@@ -37,7 +35,9 @@
 /* Cache Definitions */
 #define CONFIG_SYS_CACHELINE_SIZE      64
 
-#define CONFIG_IDENT_STRING            " Xilinx ZynqMP"
+#if !defined(CONFIG_IDENT_STRING)
+# define CONFIG_IDENT_STRING           " Xilinx ZynqMP"
+#endif
 
 #define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_SDRAM_BASE + 0x7fff0)
 
@@ -45,7 +45,9 @@
 #define CONFIG_OF_LIBFDT
 
 /* Generic Timer Definitions - setup in EL3. Setup by ATF for other cases */
-#define COUNTER_FREQUENCY              4000000
+#if !defined(COUNTER_FREQUENCY)
+# define COUNTER_FREQUENCY             100000000
+#endif
 
 /* Size of malloc() pool */
 #define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + 0x2000000)
 #define CONFIG_THOR_RESET_OFF
 #define DFU_ALT_INFO_RAM \
        "dfu_ram_info=" \
-       "set dfu_alt_info " \
-       "Image ram 0x200000 0x1800000\\\\;" \
-       "system.dtb ram 0x7000000 0x40000\0" \
+       "setenv dfu_alt_info " \
+       "Image ram $kernel_addr $kernel_size\\\\;" \
+       "system.dtb ram $fdt_addr $fdt_size\0" \
        "dfu_ram=run dfu_ram_info && dfu 0 ram 0\0" \
        "thor_ram=run dfu_ram_info && thordown 0 ram 0\0"
 
        "kernel_addr=0x80000\0" \
        "fdt_addr=0x7000000\0" \
        "fdt_high=0x10000000\0" \
-       "sdboot=mmcinfo && load mmc 0:0 $fdt_addr system.dtb && " \
-               "load mmc 0:0 $kernel_addr Image && booti $kernel_addr - $fdt_addr\0" \
+       "kernel_size=0x2000000\0" \
+       "fdt_size=0x80000\0" \
+       "sdbootdev=0\0"\
+       "sdboot=mmc dev $sdbootdev && mmcinfo && load mmc $sdbootdev:$partid $fdt_addr system.dtb && " \
+               "load mmc $sdbootdev:$partid $kernel_addr Image && " \
+               "booti $kernel_addr - $fdt_addr\0" \
        DFU_ALT_INFO
 
-#define CONFIG_BOOTARGS                "setenv bootargs console=ttyPS0,${baudrate} " \
-                               "earlycon=cdns,mmio,0xff000000,${baudrate}n8"
 #define CONFIG_PREBOOT         "run bootargs"
 #define CONFIG_BOOTCOMMAND     "run $modeboot"
 #define CONFIG_BOOTDELAY       5
 # define CONFIG_MII
 # define CONFIG_SYS_FAULT_ECHO_LINK_DOWN
 # define CONFIG_PHY_MARVELL
+# define CONFIG_PHY_NATSEMI
 # define CONFIG_PHY_TI
+# define CONFIG_PHY_GIGE
+# define PHY_ANEG_TIMEOUT       20000
 #endif
 
 /* I2C */
index ec39211af3db5a9c605e2ec6fe26b253a4f593da..9906c426f50f05d135f64a70f1dd1e17c2e4c9e0 100644 (file)
@@ -1,7 +1,5 @@
 /*
- * Configuration for Xilinx ZynqMP emulation
- * platforms. See zynqmp-common.h for ZynqMP
- * common configs
+ * Configuration for Xilinx ZynqMP emulation platforms
  *
  * (C) Copyright 2014 - 2015 Xilinx, Inc.
  * Michal Simek <michal.simek@xilinx.com>
@@ -17,6 +15,7 @@
 
 #define CONFIG_ZYNQ_SDHCI0
 #define CONFIG_ZYNQ_SDHCI_MAX_FREQ     52000000
+#define CONFIG_ZYNQ_SDHCI_MIN_FREQ     (CONFIG_ZYNQ_SDHCI_MAX_FREQ << 9)
 #define CONFIG_ZYNQ_I2C0
 #define CONFIG_SYS_I2C_ZYNQ
 #define CONFIG_ZYNQ_EEPROM
 #define CONFIG_ZYNQMP_XHCI_LIST {ZYNQMP_USB0_XHCI_BASEADDR, \
                                 ZYNQMP_USB1_XHCI_BASEADDR}
 
+/* Physical Memory Map */
+#define CONFIG_NR_DRAM_BANKS           1
+#define CONFIG_SYS_SDRAM_BASE          0
+#define CONFIG_SYS_SDRAM_SIZE          0x40000000
+
+#define COUNTER_FREQUENCY      4000000
+
 #include <configs/xilinx_zynqmp.h>
 
 #endif /* __CONFIG_ZYNQMP_EP_H */
index 0ab60839b6cff73b392534b9baff64d9574c2e99..e8c3ef0c387222ad0c507a90451bd09ae68d058c 100644 (file)
@@ -66,7 +66,6 @@
 #ifdef CONFIG_ZYNQ_QSPI
 # define CONFIG_SF_DEFAULT_SPEED       30000000
 # define CONFIG_SPI_FLASH_ISSI
-# define CONFIG_SPI_FLASH_BAR
 # define CONFIG_CMD_SF
 #endif
 
index e0d12981b283ea93f9e4ef9fcf66076e4cc5bbda..d768fb14171af5744b799e9e81f65e03ca95e6ab 100644 (file)
@@ -46,6 +46,7 @@ typedef struct {                /* typedef fpga_desc */
 typedef enum {
        BIT_FULL = 0,
        BIT_PARTIAL,
+       BIT_NONE = 0xFF,
 } bitstream_type;
 
 /* root function definitions */
index de74b9a534b10a91c53a57bb2aacf98b699c1d9e..244f23f93c366b5eb867a2d2364706c34cf871dd 100644 (file)
@@ -80,11 +80,6 @@ int tsi108_eth_initialize(bd_t *bis);
 int uec_standard_init(bd_t *bis);
 int uli526x_initialize(bd_t *bis);
 int armada100_fec_register(unsigned long base_addr);
-int xilinx_axiemac_initialize(bd_t *bis, unsigned long base_addr,
-                                                       unsigned long dma_addr);
-int xilinx_emaclite_of_init(const void *blob);
-int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr,
-                                                       int txpp, int rxpp);
 int xilinx_ll_temac_eth_init(bd_t *bis, unsigned long base_addr, int flags,
                                                unsigned long ctrl_addr);
 /*