On Mon, 2021-11-08 at 22:39 +0100, Daniel Schwierzeck wrote:
> Am Donnerstag, dem 04.11.2021 um 17:48 +0800 schrieb Weijie Gao:
> > This patch adds support for MediaTek MT7621 SoC.
> > All files are dedicated for u-boot.
> > 
> > Currently only ramboot is supported.
> > The default build target is u-boot-lzma.img.
> > This file can be booted using bootm command, or be used as a
> > payload
> > of the
> > SDK preloader of MT7621.
> > 
> > The specification of this chip:
> > https://www.mediatek.com/products/homenetworking/mt7621
> > 
> > Signed-off-by: Weijie Gao <weijie....@mediatek.com>
> > ---
> >  arch/mips/dts/mt7621.dtsi             | 372
> > ++++++++++++++++++++++++++
> >  arch/mips/mach-mtmips/Kconfig         |  29 +-
> >  arch/mips/mach-mtmips/Makefile        |   5 +
> >  arch/mips/mach-mtmips/cpu.c           |   4 +
> >  arch/mips/mach-mtmips/mt7621/Kconfig  |  23 ++
> >  arch/mips/mach-mtmips/mt7621/Makefile |   5 +
> >  arch/mips/mach-mtmips/mt7621/compat.c |  21 ++
> >  arch/mips/mach-mtmips/mt7621/init.c   | 156 +++++++++++
> >  arch/mips/mach-mtmips/mt7621/mt7621.h | 204 ++++++++++++++
> >  arch/mips/mach-mtmips/mt7621/serial.c |  23 ++
> >  include/configs/mt7621.h              |  41 +++
> >  11 files changed, 879 insertions(+), 4 deletions(-)
> >  create mode 100644 arch/mips/dts/mt7621.dtsi
> >  create mode 100644 arch/mips/mach-mtmips/mt7621/Kconfig
> >  create mode 100644 arch/mips/mach-mtmips/mt7621/Makefile
> >  create mode 100644 arch/mips/mach-mtmips/mt7621/compat.c
> >  create mode 100644 arch/mips/mach-mtmips/mt7621/init.c
> >  create mode 100644 arch/mips/mach-mtmips/mt7621/mt7621.h
> >  create mode 100644 arch/mips/mach-mtmips/mt7621/serial.c
> >  create mode 100644 include/configs/mt7621.h
> > 
> > diff --git a/arch/mips/dts/mt7621.dtsi b/arch/mips/dts/mt7621.dtsi
> > new file mode 100644
> > index 0000000000..c09350b370
> > --- /dev/null
> > +++ b/arch/mips/dts/mt7621.dtsi
> > @@ -0,0 +1,372 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright (C) 2021 MediaTek Inc. All rights reserved.
> > + *
> > + * Author: Weijie Gao <weijie....@mediatek.com>
> > + */
> > +
> > +#include <dt-bindings/clock/mt7621-clk.h>
> > +#include <dt-bindings/reset/mt7621-reset.h>
> > +#include <dt-bindings/phy/phy.h>
> > +
> > +/ {
> > +   #address-cells = <1>;
> > +   #size-cells = <1>;
> > +   compatible = "mediatek,mt7621-soc";
> > +
> > +   cpus {
> > +           #address-cells = <1>;
> > +           #size-cells = <0>;
> > +
> > +           cpu@0 {
> > +                   device_type = "cpu";
> > +                   compatible = "mips,mips1004Kc";
> > +                   reg = <0>;
> > +           };
> > +
> > +           cpu@1 {
> > +                   device_type = "cpu";
> > +                   compatible = "mips,mips1004Kc";
> > +                   reg = <0>;
> > +           };
> > +   };
> > +
> > +   clk48m: clk48m@0 {
> > +           compatible = "fixed-clock";
> > +
> > +           clock-frequency = <48000000>;
> > +
> > +           #clock-cells = <0>;
> > +   };
> > +
> > +   clk50m: clk50m@0 {
> > +           compatible = "fixed-clock";
> > +
> > +           clock-frequency = <50000000>;
> > +
> > +           #clock-cells = <0>;
> > +   };
> > +
> > +   sysc: sysc@1e000000 {
> > +           compatible = "mediatek,mt7621-sysc", "syscon";
> > +           reg = <0x1e000000 0x100>;
> > +   };
> > +
> > +   clkctrl: clkctrl@1e000030 {
> > +           compatible = "mediatek,mt7621-clk";
> > +           mediatek,sysc = <&sysc>;
> > +           mediatek,memc = <&memc>;
> > +
> > +           #clock-cells = <1>;
> > +           u-boot,dm-pre-reloc;
> > +   };
> > +
> > +   rstctrl: rstctrl@1e000034 {
> > +           compatible = "mediatek,mtmips-reset";
> > +           reg = <0x1e000034 0x4>;
> > +           #reset-cells = <1>;
> > +   };
> > +
> > +   reboot: resetctl-reboot {
> > +           compatible = "resetctl-reboot";
> > +
> > +           resets = <&rstctrl RST_SYS>;
> > +           reset-names = "sysreset";
> > +   };
> > +
> > +   memc: memc@1e005000 {
> > +           compatible = "mediatek,mt7621-memc", "syscon";
> > +           reg = <0x1e005000 0x1000>;
> > +   };
> > +
> > +   pinctrl: pinctrl@1e000060 {
> > +           compatible = "mediatek,mt7621-pinctrl";
> > +           reg = <0x1e000048 0x30>;
> > +
> > +           pinctrl-names = "default";
> > +           pinctrl-0 = <&state_default>;
> > +
> > +           state_default: pin_state {
> > +                   uart1 {
> > +                           groups = "uart1";
> > +                           function = "uart";
> > +                   };
> > +
> > +                   gpios {
> > +                           groups = "i2c", "uart3", "pcie
> > reset";
> > +                           function = "gpio";
> > +                   };
> > +
> > +                   jtag {
> > +                           groups = "jtag";
> > +                           function = "jtag";
> > +                   };
> > +
> > +                   wdt {
> > +                           groups = "wdt";
> > +                           function = "wdt rst";
> > +                   };
> > +           };
> > +
> > +           uart1_pins: uart1_pins {
> > +                   groups = "uart1";
> > +                   function = "uart";
> > +           };
> > +
> > +           uart2_pins: uart2_pins {
> > +                   groups = "uart2";
> > +                   function = "uart";
> > +           };
> > +
> > +           uart3_pins: uart3_pins {
> > +                   groups = "uart3";
> > +                   function = "uart";
> > +           };
> > +
> > +           sdxc_pins: sdxc_pins {
> > +                   groups = "sdxc";
> > +                   function = "sdxc";
> > +           };
> > +
> > +           spi_pins: spi_pins {
> > +                   groups = "spi";
> > +                   function = "spi";
> > +           };
> > +
> > +           eth_pins: eth_pins {
> > +                   mdio_pins {
> > +                           groups = "mdio";
> > +                           function = "mdio";
> > +                   };
> > +
> > +                   rgmii1_pins {
> > +                           groups = "rgmii1";
> > +                           function = "rgmii";
> > +                   };
> > +
> > +                   esw_pins {
> > +                           groups = "esw int";
> > +                           function = "esw int";
> > +                   };
> > +
> > +                   mdio_pconf {
> > +                           groups = "mdio";
> > +                           drive-strength = <2>;
> > +                   };
> > +           };
> > +   };
> > +
> > +   watchdog: watchdog@1e000100 {
> > +           compatible = "mediatek,mt7621-wdt";
> > +           reg = <0x1e000100 0x40>;
> > +
> > +           resets = <&rstctrl RST_TIMER>;
> > +           reset-names = "wdt";
> > +
> > +           status = "disabled";
> > +   };
> > +
> > +   gpio: gpio@1e000600 {
> > +           #address-cells = <1>;
> > +           #size-cells = <0>;
> > +
> > +           compatible = "mtk,mt7621-gpio";
> > +           reg = <0x1e000600 0x100>;
> > +
> > +           resets = <&rstctrl RST_PIO>;
> > +           reset-names = "pio";
> > +
> > +           gpio0: bank@0 {
> > +                   reg = <0>;
> > +                   compatible = "mtk,mt7621-gpio-bank";
> > +                   gpio-controller;
> > +                   #gpio-cells = <2>;
> > +           };
> > +
> > +           gpio1: bank@1 {
> > +                   reg = <1>;
> > +                   compatible = "mtk,mt7621-gpio-bank";
> > +                   gpio-controller;
> > +                   #gpio-cells = <2>;
> > +           };
> > +
> > +           gpio2: bank@2 {
> > +                   reg = <2>;
> > +                   compatible = "mtk,mt7621-gpio-bank";
> > +                   gpio-controller;
> > +                   #gpio-cells = <2>;
> > +           };
> > +   };
> > +
> > +   spi: spi@1e000b00 {
> > +           compatible = "ralink,mt7621-spi";
> > +           reg = <0x1e000b00 0x40>;
> > +
> > +           status = "disabled";
> > +
> > +           pinctrl-names = "default";
> > +           pinctrl-0 = <&spi_pins>;
> > +
> > +           resets = <&rstctrl RST_SPI>;
> > +           reset-names = "spi";
> > +
> > +           clocks = <&clkctrl CLK_SPI>;
> > +
> > +           #address-cells = <1>;
> > +           #size-cells = <0>;
> > +   };
> > +
> > +   uart0: uart1@1e000c00 {
> > +           compatible = "mediatek,hsuart", "ns16550a";
> > +           reg = <0x1e000c00 0x100>;
> > +
> > +           pinctrl-names = "default";
> > +           pinctrl-0 = <&uart1_pins>;
> > +
> > +           clocks = <&clkctrl CLK_UART1>;
> > +
> > +           resets = <&rstctrl RST_UART1>;
> > +
> > +           reg-shift = <2>;
> > +   };
> > +
> > +   uart1: uart2@1e000d00 {
> > +           compatible = "mediatek,hsuart", "ns16550a";
> > +           reg = <0x1e000d00 0x100>;
> > +
> > +           pinctrl-names = "default";
> > +           pinctrl-0 = <&uart2_pins>;
> > +
> > +           clocks = <&clkctrl CLK_UART2>;
> > +
> > +           resets = <&rstctrl RST_UART2>;
> > +
> > +           reg-shift = <2>;
> > +
> > +           status = "disabled";
> > +   };
> > +
> > +   uart2: uart3@1e000e00 {
> > +           compatible = "mediatek,hsuart", "ns16550a";
> > +           reg = <0x1e000e00 0x100>;
> > +
> > +           pinctrl-names = "default";
> > +           pinctrl-0 = <&uart3_pins>;
> > +
> > +           clocks = <&clkctrl CLK_UART3>;
> > +
> > +           resets = <&rstctrl RST_UART3>;
> > +
> > +           reg-shift = <2>;
> > +
> > +           status = "disabled";
> > +   };
> > +
> > +   eth: eth@1e100000 {
> > +           compatible = "mediatek,mt7621-eth";
> > +           reg = <0x1e100000 0x20000>;
> > +           mediatek,ethsys = <&sysc>;
> > +
> > +           pinctrl-names = "default";
> > +           pinctrl-0 = <&eth_pins>;
> > +
> > +           resets = <&rstctrl RST_FE>, <&rstctrl RST_GMAC>,
> > <&rstctrl RST_MCM>;
> > +           reset-names = "fe", "gmac", "mcm";
> > +
> > +           clocks = <&clkctrl CLK_GMAC>,
> > +                    <&clkctrl CLK_FE>;
> > +           clock-names = "gmac", "fe";
> > +
> > +           #address-cells = <1>;
> > +           #size-cells = <0>;
> > +
> > +           mediatek,gmac-id = <0>;
> > +           phy-mode = "rgmii";
> > +           mediatek,switch = "mt7530";
> > +           mediatek,mcm;
> > +
> > +           fixed-link {
> > +                   speed = <1000>;
> > +                   full-duplex;
> > +           };
> > +   };
> > +
> > +   mmc: mmc@1e130000 {
> > +           compatible = "mediatek,mt7621-mmc";
> > +           reg = <0x1e130000 0x4000>;
> > +
> > +           status = "disabled";
> > +
> > +           bus-width = <4>;
> > +           builtin-cd = <1>;
> > +           r_smpl = <1>;
> > +
> > +           pinctrl-names = "default";
> > +           pinctrl-0 = <&sdxc_pins>;
> > +
> > +           clocks = <&clk50m>, <&clkctrl CLK_SDXC>;
> > +           clock-names = "source", "hclk";
> > +
> > +           resets = <&rstctrl RST_SDXC>;
> > +   };
> > +
> > +   ssusb: usb@1e1c0000 {
> > +           compatible = "mediatek,mt7621-xhci",
> > "mediatek,mtk-
> > xhci";
> > +           reg = <0x1e1c0000 0x1000>, <0x1e1d0700 0x100>;
> > +           reg-names = "mac", "ippc";
> > +
> > +           /* power-domains = <&scpsys
> > MT7629_POWER_DOMAIN_HIF1>;
> > */
> > +
> > +           clocks = <&clk48m>, <&clk48m>;
> > +           clock-names = "sys_ck", "ref_ck";
> > +
> > +           phys = <&u2port0 PHY_TYPE_USB2>,
> > +                  <&u3port0 PHY_TYPE_USB3>,
> > +                  <&u2port1 PHY_TYPE_USB2>;
> > +
> > +           status = "disabled";
> > +   };
> > +
> > +   u3phy: usb-phy@1e1d0000 {
> > +           compatible = "mediatek,mt7621-u3phy",
> > +                        "mediatek,generic-tphy-v1";
> > +           reg = <0x1e1d0000 0x700>;
> > +           #address-cells = <1>;
> > +           #size-cells = <1>;
> > +           ranges;
> > +           status = "disabled";
> > +
> > +           u2port0: usb-phy@1e1d0800 {
> > +                   reg = <0x1e1d0800 0x0100>;
> > +                   #phy-cells = <1>;
> > +                   clocks = <&clk48m>;
> > +                   clock-names = "ref";
> > +           };
> > +
> > +           u3port0: usb-phy@1e1d0900 {
> > +                   reg = <0x1e1d0900 0x0100>;
> > +                   #phy-cells = <1>;
> > +           };
> > +
> > +           u2port1: usb-phy@1e1d1000 {
> > +                   reg = <0x1e1d1000 0x0100>;
> > +                   #phy-cells = <1>;
> > +                   clocks = <&clk48m>;
> > +                   clock-names = "ref";
> > +           };
> > +   };
> > +
> > +   i2c: i2c@1e000900 {
> > +           compatible = "i2c-gpio";
> > +
> > +           status = "disabled";
> > +
> > +           i2c-gpio,delay-us = <3>;
> > +
> > +           gpios = <&gpio0 3 1>, /* PIN3 as SDA */
> > +                   <&gpio0 4 1>; /* PIN4 as CLK */
> > +
> > +           #address-cells = <1>;
> > +           #size-cells = <0>;
> > +   };
> > +};
> > diff --git a/arch/mips/mach-mtmips/Kconfig b/arch/mips/mach-
> > mtmips/Kconfig
> > index 151b004603..9b30535411 100644
> > --- a/arch/mips/mach-mtmips/Kconfig
> > +++ b/arch/mips/mach-mtmips/Kconfig
> > @@ -9,6 +9,7 @@ config SYS_MALLOC_F_LEN
> >  
> >  config SYS_SOC
> >     default "mt7620" if SOC_MT7620
> > +   default "mt7621" if SOC_MT7621
> >     default "mt7628" if SOC_MT7628
> >  
> >  config SYS_DCACHE_SIZE
> > @@ -18,22 +19,28 @@ config SYS_DCACHE_LINE_SIZE
> >     default 32
> >  
> >  config SYS_ICACHE_SIZE
> > -   default 65536
> > +   default 65536 if SOC_MT7620 || SOC_MT7628
> > +   default 32768 if SOC_MT7621
> >  
> >  config SYS_ICACHE_LINE_SIZE
> >     default 32
> >  
> >  config SYS_TEXT_BASE
> > -   default 0x9c000000 if !SPL
> > -   default 0x80200000 if SPL
> > +   default 0x9c000000 if !SPL && !SOC_MT7621
> > +   default 0x80200000 if SPL || SOC_MT7621
> >  
> >  config SPL_TEXT_BASE
> > -   default 0x9c000000
> > +   default 0x9c000000 if !SOC_MT7621
> > +   default 0x80100000 if SOC_MT7621
> > +
> > +config TPL_TEXT_BASE
> > +   default 0xbfc00000 if SOC_MT7621
> >  
> >  config SPL_PAYLOAD
> >     default "u-boot-lzma.img" if SPL_LZMA
> >  
> >  config BUILD_TARGET
> > +   default "u-boot-lzma.img" if SOC_MT7621 # Only ramboot is
> > supported now
> >     default "u-boot-with-spl.bin" if SPL
> >     default "u-boot.bin"
> >  
> > @@ -55,6 +62,19 @@ config SOC_MT7620
> >     help
> >       This supports MediaTek MT7620.
> >  
> > +config SOC_MT7621
> > +   bool "MT7621"
> > +   select MIPS_CM
> > +   select MIPS_L2_CACHE
> > +   select SYS_CACHE_SHIFT_5
> > +   select SYS_MIPS_CACHE_INIT_RAM_LOAD
> > +   select PINCTRL_MT7621
> > +   select MTK_SERIAL
> > +   select REGMAP
> > +   select SYSCON
> > +   help
> > +     This supports MediaTek MT7621.
> > +
> >  config SOC_MT7628
> >     bool "MT7628"
> >     select SYS_CACHE_SHIFT_5
> > @@ -80,6 +100,7 @@ config SOC_MT7628
> >  endchoice
> >  
> >  source "arch/mips/mach-mtmips/mt7620/Kconfig"
> > +source "arch/mips/mach-mtmips/mt7621/Kconfig"
> >  source "arch/mips/mach-mtmips/mt7628/Kconfig"
> >  
> >  endmenu
> > diff --git a/arch/mips/mach-mtmips/Makefile b/arch/mips/mach-
> > mtmips/Makefile
> > index 4909b47ef2..9ab882dee0 100644
> > --- a/arch/mips/mach-mtmips/Makefile
> > +++ b/arch/mips/mach-mtmips/Makefile
> > @@ -1,9 +1,14 @@
> >  # SPDX-License-Identifier: GPL-2.0+
> >  
> >  obj-y += cpu.o
> > +
> > +ifneq ($(CONFIG_SOC_MT7621),y)
> >  obj-y += ddr_init.o
> >  obj-y += ddr_cal.o
> > +endif
> > +
> >  obj-$(CONFIG_SPL_BUILD) += spl.o
> >  
> >  obj-$(CONFIG_SOC_MT7620) += mt7620/
> > +obj-$(CONFIG_SOC_MT7621) += mt7621/
> >  obj-$(CONFIG_SOC_MT7628) += mt7628/
> > diff --git a/arch/mips/mach-mtmips/cpu.c b/arch/mips/mach-
> > mtmips/cpu.c
> > index a4b5cff61d..6ca5655d46 100644
> > --- a/arch/mips/mach-mtmips/cpu.c
> > +++ b/arch/mips/mach-mtmips/cpu.c
> > @@ -16,7 +16,11 @@ DECLARE_GLOBAL_DATA_PTR;
> >  
> >  int dram_init(void)
> >  {
> > +#ifdef CONFIG_SOC_MT7621
> > +   gd->ram_size = get_ram_size((void *)KSEG1, SZ_512M);
> > +#else
> >     gd->ram_size = get_ram_size((void *)KSEG1, SZ_256M);
> > +#endif
> 
> to avoid cluttering the code with new ifdefs the RAM size should be a
> Kconfig option which default value depends on  CONFIG_SOC_MTxxxx
> 

OK. I'll create a config to do this.

> >  
> >     return 0;
> >  }
> > diff --git a/arch/mips/mach-mtmips/mt7621/Kconfig b/arch/mips/mach-
> > mtmips/mt7621/Kconfig
> > new file mode 100644
> > index 0000000000..6948bee31b
> > --- /dev/null
> > +++ b/arch/mips/mach-mtmips/mt7621/Kconfig
> > @@ -0,0 +1,23 @@
> > +
> > +if SOC_MT7621
> > +
> > +config DEBUG_UART_BOARD_INIT
> > +   default y
> > +
> > +choice
> > +   prompt "Board select"
> > +
> > +endchoice
> > +
> > +config SYS_CONFIG_NAME
> > +   string "Board configuration name"
> > +   default "mt7621" if  BOARD_MT7621_RFB ||
> > BOARD_MT7621_NAND_RFB
> > +
> > +config SYS_BOARD
> > +   string "Board name"
> > +   default "mt7621" if  BOARD_MT7621_RFB ||
> > BOARD_MT7621_NAND_RFB
> > +
> > +config SYS_VENDOR
> > +   default "mediatek" if BOARD_MT7621_RFB ||
> > BOARD_MT7621_NAND_RFB
> > +
> > +endif
> > diff --git a/arch/mips/mach-mtmips/mt7621/Makefile
> > b/arch/mips/mach-
> > mtmips/mt7621/Makefile
> > new file mode 100644
> > index 0000000000..adb48ffe37
> > --- /dev/null
> > +++ b/arch/mips/mach-mtmips/mt7621/Makefile
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +obj-y += init.o
> > +obj-y += serial.o
> > +obj-y += compat.o
> > diff --git a/arch/mips/mach-mtmips/mt7621/compat.c
> > b/arch/mips/mach-
> > mtmips/mt7621/compat.c
> > new file mode 100644
> > index 0000000000..ae2dd263f7
> > --- /dev/null
> > +++ b/arch/mips/mach-mtmips/mt7621/compat.c
> > @@ -0,0 +1,21 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright (C) 2021 MediaTek Inc. All rights reserved.
> > + *
> > + * Author:  Weijie Gao <weijie....@mediatek.com>
> > + */
> > +
> > +#include <malloc.h>
> > +#include <asm/io.h>
> > +#include <asm/addrspace.h>
> > +
> > +/* This is used for the mtk-eth driver */
> > +phys_addr_t noncached_alloc(size_t size, size_t align)
> > +{
> > +   void *ptr = memalign(align, ALIGN(size, align));
> > +
> > +   if (!ptr)
> > +           return 0;
> > +
> > +   return KSEG1ADDR((ulong)ptr);
> > +}
> > diff --git a/arch/mips/mach-mtmips/mt7621/init.c b/arch/mips/mach-
> > mtmips/mt7621/init.c
> > new file mode 100644
> > index 0000000000..ca72d37980
> > --- /dev/null
> > +++ b/arch/mips/mach-mtmips/mt7621/init.c
> > @@ -0,0 +1,156 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved.
> > + *
> > + * Author:  Weijie Gao <weijie....@mediatek.com>
> > + */
> > +
> > +#include <clk.h>
> > +#include <dm.h>
> > +#include <dm/uclass.h>
> > +#include <dt-bindings/clock/mt7621-clk.h>
> > +#include <asm/global_data.h>
> > +#include <linux/io.h>
> > +#include "mt7621.h"
> > +
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> > +static const char *const boot_mode[(CHIP_MODE_M >> CHIP_MODE_S) +
> > 1]
> > = {
> > +   [1] = "NAND 2K+64",
> > +   [2] = "SPI-NOR 3-Byte Addr",
> > +   [3] = "SPI-NOR 4-Byte Addr",
> > +   [10] = "NAND 2K+128",
> > +   [11] = "NAND 4K+128",
> > +   [12] = "NAND 4K+256",
> > +};
> > +
> > +int print_cpuinfo(void)
> > +{
> > +   void __iomem *sysc = ioremap_nocache(SYSCTL_BASE,
> > SYSCTL_SIZE);
> > +   u32 cpu_clk, ddr_clk, bus_clk, xtal_clk, timer_freq;
> > +   u32 val, ver, eco, pkg, core, dram, chipmode;
> > +   struct udevice *clkdev;
> > +   const char *bootdev;
> > +   struct clk clk;
> > +   int ret;
> > +
> > +   val = readl(sysc + SYSCTL_CHIP_REV_ID_REG);
> > +   ver = (val & VER_ID_M) >> VER_ID_S;
> > +   eco = (val & ECO_ID_M) >> ECO_ID_S;
> > +   pkg = !!(val & PKG_ID);
> > +   core = !!(val & CPU_ID);
> > +
> > +   val = readl(sysc + SYSCTL_SYSCFG0_REG);
> > +   dram = val & DRAM_TYPE;
> > +   chipmode = (val & CHIP_MODE_M) >> CHIP_MODE_S;
> > +
> > +   bootdev = boot_mode[chipmode];
> > +   if (!bootdev)
> > +           bootdev = "Unsupported boot mode";
> > +
> > +   printf("CPU:   MediaTek MT7621%c ver %u, eco %u\n",
> > +          core ? (pkg ? 'A' : 'N') : 'S', ver, eco);
> > +
> > +   printf("Boot:  DDR%u, %s\n", dram ? 2 : 3, bootdev);
> > +
> > +   ret = uclass_get_device_by_driver(UCLASS_CLK,
> > DM_DRIVER_GET(mt7621_clk),
> > +                                     &clkdev);
> > +   if (ret)
> > +           return ret;
> > +
> > +   clk.dev = clkdev;
> > +
> > +   clk.id = CLK_CPU;
> > +   cpu_clk = clk_get_rate(&clk);
> > +
> > +   clk.id = CLK_SYS;
> > +   bus_clk = clk_get_rate(&clk);
> > +
> > +   clk.id = CLK_DDR;
> > +   ddr_clk = clk_get_rate(&clk);
> > +
> > +   clk.id = CLK_XTAL;
> > +   xtal_clk = clk_get_rate(&clk);
> > +
> > +   clk.id = CLK_MIPS_CNT;
> > +   timer_freq = clk_get_rate(&clk);
> > +
> > +   /* Set final timer frequency */
> > +   if (timer_freq)
> > +           gd->arch.timer_freq = timer_freq;
> > +
> > +   printf("Clock: CPU: %uMHz, DDR: %uMT/s, Bus: %uMHz, XTAL:
> > %uMHz\n",
> > +          cpu_clk / 1000000, ddr_clk / 500000, bus_clk /
> > 1000000,
> > +          xtal_clk / 1000000);
> > +
> > +   return 0;
> > +}
> > +
> > +void lowlevel_init(void)
> > +{
> > +   void __iomem *usbh = ioremap_nocache(SSUSB_BASE,
> > SSUSB_SIZE);
> > +
> > +   /* Setup USB xHCI */
> > +
> > +   writel((0x20 << SSUSB_MAC3_SYS_CK_GATE_MASK_TIME_S) |
> > +          (0x20 << SSUSB_MAC2_SYS_CK_GATE_MASK_TIME_S) |
> > +          (2 << SSUSB_MAC3_SYS_CK_GATE_MODE_S) |
> > +          (2 << SSUSB_MAC2_SYS_CK_GATE_MODE_S) | 0x10,
> > +          usbh + SSUSB_MAC_CK_CTRL_REG);
> > +
> > +   writel((2 << SSUSB_PLL_PREDIV_PE1D_S) | (1 <<
> > SSUSB_PLL_PREDIV_U3_S) |
> > +          (4 << SSUSB_PLL_FBKDI_S), usbh +
> > DA_SSUSB_U3PHYA_10_REG);
> > +
> > +   writel((0x18 << SSUSB_PLL_FBKDIV_PE2H_S) |
> > +          (0x18 << SSUSB_PLL_FBKDIV_PE1D_S) |
> > +          (0x18 << SSUSB_PLL_FBKDIV_PE1H_S) |
> > +          (0x1e << SSUSB_PLL_FBKDIV_U3_S),
> > +          usbh + DA_SSUSB_PLL_FBKDIV_REG);
> > +
> > +   writel((0x1e400000 << SSUSB_PLL_PCW_NCPO_U3_S),
> > +          usbh + DA_SSUSB_PLL_PCW_NCPO_REG);
> > +
> > +   writel((0x25 << SSUSB_PLL_SSC_DELTA1_PE1H_S) |
> > +          (0x73 << SSUSB_PLL_SSC_DELTA1_U3_S),
> > +          usbh + DA_SSUSB_PLL_SSC_DELTA1_REG);
> > +
> > +   writel((0x71 << SSUSB_PLL_SSC_DELTA_U3_S) |
> > +          (0x4a << SSUSB_PLL_SSC_DELTA1_PE2D_S),
> > +          usbh + DA_SSUSB_U3PHYA_21_REG);
> > +
> > +   writel((0x140 << SSUSB_PLL_SSC_PRD_S), usbh +
> > SSUSB_U3PHYA_9_REG);
> > +
> > +   writel((0x11c00000 << SSUSB_SYSPLL_PCW_NCPO_S),
> > +          usbh + SSUSB_U3PHYA_3_REG);
> > +
> > +   writel((4 << SSUSB_PCIE_CLKDRV_AMP_S) | (1 <<
> > SSUSB_SYSPLL_FBSEL_S) |
> > +          (1 << SSUSB_SYSPLL_PREDIV_S), usbh +
> > SSUSB_U3PHYA_1_REG);
> > +
> > +   writel((0x12 << SSUSB_SYSPLL_FBDIV_S) |
> > SSUSB_SYSPLL_VCO_DIV_SEL |
> > +          SSUSB_SYSPLL_FPEN | SSUSB_SYSPLL_MONCK_EN |
> > SSUSB_SYSPLL_VOD_EN,
> > +          usbh + SSUSB_U3PHYA_2_REG);
> > +
> > +   writel(SSUSB_EQ_CURSEL | (8 << SSUSB_RX_DAC_MUX_S) |
> > +          (1 << SSUSB_PCIE_SIGDET_VTH_S) | (1 <<
> > SSUSB_PCIE_SIGDET_LPF_S),
> > +          usbh + SSUSB_U3PHYA_11_REG);
> > +
> > +   writel((0x1ff << SSUSB_RING_OSC_CNTEND_S) |
> > +          (0x7f << SSUSB_XTAL_OSC_CNTEND_S) |
> > SSUSB_RING_BYPASS_DET,
> > +          usbh + SSUSB_B2_ROSC_0_REG);
> > +
> > +   writel((3 << SSUSB_RING_OSC_FRC_RECAL_S) |
> > SSUSB_RING_OSC_FRC_SEL,
> > +          usbh + SSUSB_B2_ROSC_1_REG);
> > +}
> > +
> > +ulong notrace get_tbclk(void)
> > +{
> > +   return gd->arch.timer_freq;
> > +}
> > +
> > +void _machine_restart(void)
> > +{
> > +   void __iomem *sysc = ioremap_nocache(SYSCTL_BASE,
> > SYSCTL_SIZE);
> > +
> > +   while (1)
> > +           writel(SYS_RST, sysc + SYSCTL_RSTCTL_REG);
> > +}
> > diff --git a/arch/mips/mach-mtmips/mt7621/mt7621.h
> > b/arch/mips/mach-
> > mtmips/mt7621/mt7621.h
> > new file mode 100644
> > index 0000000000..012f5a3557
> > --- /dev/null
> > +++ b/arch/mips/mach-mtmips/mt7621/mt7621.h
> > @@ -0,0 +1,204 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/*
> > + * Copyright (C) 2021 MediaTek Inc. All Rights Reserved.
> > + *
> > + * Author: Weijie Gao <weijie....@mediatek.com>
> > + */
> > +
> > +#ifndef _MT7621_H_
> > +#define _MT7621_H_
> > +
> > +#define SYSCTL_BASE                                0x1e000000
> > +#define SYSCTL_SIZE                                0x100
> > +#define TIMER_BASE                         0x1e000100
> > +#define TIMER_SIZE                         0x100
> > +#define RBUS_BASE                          0x1e000400
> > +#define RBUS_SIZE                          0x100
> > +#define GPIO_BASE                          0x1e000600
> > +#define GPIO_SIZE                          0x100
> > +#define DMA_CFG_ARB_BASE                   0x1e000800
> > +#define DMA_CFG_ARB_SIZE                   0x100
> > +#define SPI_BASE                           0x1e000b00
> > +#define SPI_SIZE                           0x100
> > +#define UART1_BASE                         0x1e000c00
> > +#define UART1_SIZE                         0x100
> > +#define NFI_BASE                           0x1e003000
> > +#define NFI_SIZE                           0x800
> > +#define NFI_ECC_BASE                               0x1e003800
> > +#define NFI_ECC_SIZE                               0x800
> > +#define DRAMC_BASE                         0x1e005000
> > +#define DRAMC_SIZE                         0x1000
> > +#define FE_BASE                                    0x1e100000
> > +#define FE_SIZE                                    0xe000
> > +#define GMAC_BASE                          0x1e110000
> > +#define GMAC_SIZE                          0x8000
> > +#define SSUSB_BASE                         0x1e1c0000
> > +#define SSUSB_SIZE                         0x40000
> > +
> > + /* GIC Base Address */
> > +#define MIPS_GIC_BASE                              0x1fbc0000
> > +
> > + /* CPC Base Address */
> > +#define MIPS_CPC_BASE                              0x1fbf0000
> > +
> > + /* Flash Memory-mapped Base Address */
> > +#define FLASH_MMAP_BASE                            0x1fc00000
> > +
> > +/* SRAM */
> > +#define FE_SRAM_BASE1                              0x8000
> > +#define FE_SRAM_BASE2                              0xa000
> > +
> > +/* SYSCTL_BASE */
> > +#define SYSCTL_CHIP_REV_ID_REG                     0x0c
> > +#define CPU_ID                                     0x20000
> > +#define PKG_ID                                     0x10000
> > +#define VER_ID_S                           8
> > +#define VER_ID_M                           0xf00
> > +#define ECO_ID_S                           0
> > +#define ECO_ID_M                           0x0f
> > +
> > +#define SYSCTL_SYSCFG0_REG                 0x10
> > +#define XTAL_MODE_SEL_S                            6
> > +#define XTAL_MODE_SEL_M                            0x1c0
> > +#define DRAM_TYPE                          0x10
> > +#define CHIP_MODE_S                                0
> > +#define CHIP_MODE_M                                0x0f
> > +
> > +#define BOOT_SRAM_BASE_REG                 0x20
> > +
> > +#define SYSCTL_CLKCFG0_REG                 0x2c
> > +#define CPU_CLK_SEL_S                              30
> > +#define CPU_CLK_SEL_M                              0xc0000000
> > +#define MPLL_CFG_SEL_S                             23
> > +#define MPLL_CFG_SEL_M                             0x800000
> > +
> > +#define SYSCTL_RSTCTL_REG                  0x34
> > +#define SYS_RST                                    0x01
> > +
> > +#define SYSCTL_CUR_CLK_STS_REG                     0x44
> > +#define CUR_CPU_FDIV_S                             8
> > +#define CUR_CPU_FDIV_M                             0x1f00
> > +#define CUR_CPU_FFRAC_S                            0
> > +#define CUR_CPU_FFRAC_M                            0x1f
> > +
> > +#define SYSCTL_GPIOMODE_REG                        0x60
> > +#define UART2_MODE_S                               5
> > +#define UART2_MODE_M                               0x60
> > +#define UART3_MODE_S                               3
> > +#define UART3_MODE_M                               0x18
> > +#define UART1_MODE                         0x02
> > +
> > +/* RBUS_BASE */
> > +#define RBUS_DYN_CFG0_REG                  0x0010
> > +#define CPU_FDIV_S                         8
> > +#define CPU_FDIV_M                         0x1f00
> > +#define CPU_FFRAC_S                                0
> > +#define CPU_FFRAC_M                                0x1f
> > +
> > +/* DMA_CFG_ARB_BASE */
> > +#define DMA_ROUTE_REG                              0x000c
> > +
> > +/* SPI_BASE */
> > +#define SPI_SPACE_REG                              0x003c
> > +#define FS_SLAVE_SEL_S                             12
> > +#define FS_SLAVE_SEL_M                             0x70000
> > +#define FS_CLK_SEL_S                               0
> > +#define FS_CLK_SEL_M                               0xfff
> > +
> > +/* FE_BASE */
> > +#define FE_RST_GLO_REG                             0x0004
> > +#define FE_PSE_RAM                         0x04
> > +#define FE_PSE_MEM_EN                              0x02
> > +#define FE_PSE_RESET                               0x01
> > +
> > +/* SSUSB_BASE */
> > +#define SSUSB_MAC_CK_CTRL_REG                      0x10784
> > +#define SSUSB_MAC3_SYS_CK_GATE_MASK_TIME_S 16
> > +#define SSUSB_MAC3_SYS_CK_GATE_MASK_TIME_M 0xff0000
> > +#define SSUSB_MAC2_SYS_CK_GATE_MASK_TIME_S 8
> > +#define SSUSB_MAC2_SYS_CK_GATE_MASK_TIME_M 0xff00
> > +#define SSUSB_MAC3_SYS_CK_GATE_MODE_S              2
> > +#define SSUSB_MAC3_SYS_CK_GATE_MODE_M              0x0c
> > +#define SSUSB_MAC2_SYS_CK_GATE_MODE_S              0
> > +#define SSUSB_MAC2_SYS_CK_GATE_MODE_M              0x03
> > +
> > +#define SSUSB_B2_ROSC_0_REG                        0x10a40
> > +#define SSUSB_RING_OSC_CNTEND_S                    23
> > +#define SSUSB_RING_OSC_CNTEND_M                    0xff800000
> > +#define SSUSB_XTAL_OSC_CNTEND_S                    16
> > +#define SSUSB_XTAL_OSC_CNTEND_M                    0x7f0000
> > +#define SSUSB_RING_BYPASS_DET                      0x01
> > +
> > +#define SSUSB_B2_ROSC_1_REG                        0x10a44
> > +#define SSUSB_RING_OSC_FRC_RECAL_S         17
> > +#define SSUSB_RING_OSC_FRC_RECAL_M         0x60000
> > +#define SSUSB_RING_OSC_FRC_SEL                     0x01
> > +
> > +#define SSUSB_U3PHYA_1_REG                 0x10b04
> > +#define SSUSB_PCIE_CLKDRV_AMP_S                    27
> > +#define SSUSB_PCIE_CLKDRV_AMP_M                    0x38000000
> > +#define SSUSB_SYSPLL_FBSEL_S                       2
> > +#define SSUSB_SYSPLL_FBSEL_M                       0x0c
> > +#define SSUSB_SYSPLL_PREDIV_S                      0
> > +#define SSUSB_SYSPLL_PREDIV_M                      0x03
> > +
> > +#define SSUSB_U3PHYA_2_REG                 0x10b08
> > +#define SSUSB_SYSPLL_FBDIV_S                       24
> > +#define SSUSB_SYSPLL_FBDIV_M                       0x7f000000
> > +#define SSUSB_SYSPLL_VCO_DIV_SEL           0x200000
> > +#define SSUSB_SYSPLL_FPEN                  0x2000
> > +#define SSUSB_SYSPLL_MONCK_EN                      0x1000
> > +#define SSUSB_SYSPLL_VOD_EN                        0x200
> > +
> > +#define SSUSB_U3PHYA_3_REG                 0x10b10
> > +#define SSUSB_SYSPLL_PCW_NCPO_S                    1
> > +#define SSUSB_SYSPLL_PCW_NCPO_M                    0xfffffffe
> > +
> > +#define SSUSB_U3PHYA_9_REG                 0x10b24
> > +#define SSUSB_PLL_SSC_PRD_S                        0
> > +#define SSUSB_PLL_SSC_PRD_M                        0xffff
> > +
> > +#define SSUSB_U3PHYA_11_REG                        0x10b2c
> > +#define SSUSB_EQ_CURSEL                            0x1000000
> > +#define SSUSB_RX_DAC_MUX_S                 19
> > +#define SSUSB_RX_DAC_MUX_M                 0xf80000
> > +#define SSUSB_PCIE_SIGDET_VTH_S                    5
> > +#define SSUSB_PCIE_SIGDET_VTH_M                    0x60
> > +#define SSUSB_PCIE_SIGDET_LPF_S                    3
> > +#define SSUSB_PCIE_SIGDET_LPF_M                    0x18
> > +
> > +#define DA_SSUSB_PLL_FBKDIV_REG                    0x10c1c
> > +#define SSUSB_PLL_FBKDIV_PE2H_S                    24
> > +#define SSUSB_PLL_FBKDIV_PE2H_M                    0x7f000000
> > +#define SSUSB_PLL_FBKDIV_PE1D_S                    16
> > +#define SSUSB_PLL_FBKDIV_PE1D_M                    0x7f0000
> > +#define SSUSB_PLL_FBKDIV_PE1H_S                    8
> > +#define SSUSB_PLL_FBKDIV_PE1H_M                    0x7f00
> > +#define SSUSB_PLL_FBKDIV_U3_S                      0
> > +#define SSUSB_PLL_FBKDIV_U3_M                      0x7f
> > +
> > +#define DA_SSUSB_U3PHYA_10_REG                     0x10c20
> > +#define SSUSB_PLL_PREDIV_PE1D_S                    18
> > +#define SSUSB_PLL_PREDIV_PE1D_M                    0xc0000
> > +#define SSUSB_PLL_PREDIV_U3_S                      8
> > +#define SSUSB_PLL_PREDIV_U3_M                      0x300
> > +#define SSUSB_PLL_FBKDI_S                  0
> > +#define SSUSB_PLL_FBKDI_M                  0x07
> > +
> > +#define DA_SSUSB_PLL_PCW_NCPO_REG          0x10c24
> > +#define SSUSB_PLL_PCW_NCPO_U3_S                    0
> > +#define SSUSB_PLL_PCW_NCPO_U3_M                    0x7fffffff
> > +
> > +#define DA_SSUSB_PLL_SSC_DELTA1_REG                0x10c38
> > +#define SSUSB_PLL_SSC_DELTA1_PE1H_S                16
> > +#define SSUSB_PLL_SSC_DELTA1_PE1H_M                0xffff0000
> > +#define SSUSB_PLL_SSC_DELTA1_U3_S          0
> > +#define SSUSB_PLL_SSC_DELTA1_U3_M          0xffff
> > +
> > +#define DA_SSUSB_U3PHYA_21_REG                     0x10c40
> > +#define SSUSB_PLL_SSC_DELTA_U3_S           16
> > +#define SSUSB_PLL_SSC_DELTA_U3_M           0xffff0000
> > +#define SSUSB_PLL_SSC_DELTA1_PE2D_S                0
> > +#define SSUSB_PLL_SSC_DELTA1_PE2D_M                0xffff
> > +
> > +#endif /* _MT7621_H_ */
> > diff --git a/arch/mips/mach-mtmips/mt7621/serial.c
> > b/arch/mips/mach-
> > mtmips/mt7621/serial.c
> > new file mode 100644
> > index 0000000000..393188abce
> > --- /dev/null
> > +++ b/arch/mips/mach-mtmips/mt7621/serial.c
> > @@ -0,0 +1,23 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright (C) 2020 MediaTek Inc.
> > + *
> > + * Author:  Weijie Gao <weijie....@mediatek.com>
> > + */
> > +
> > +#include <asm/io.h>
> > +#include <asm/addrspace.h>
> > +#include "mt7621.h"
> > +
> > +void board_debug_uart_init(void)
> > +{
> > +   void __iomem *base = ioremap_nocache(SYSCTL_BASE,
> > SYSCTL_SIZE);
> > +
> > +#if CONFIG_DEBUG_UART_BASE == 0xbe000c00 /* KSEG1ADDR(UART1_BASE)
> > */
> > +   clrbits_32(base + SYSCTL_GPIOMODE_REG, UART1_MODE);
> > +#elif CONFIG_DEBUG_UART_BASE == 0xbe000d00 /*
> > KSEG1ADDR(UART2_BASE)
> > */
> > +   clrbits_32(base + SYSCTL_GPIOMODE_REG, UART2_MODE_M);
> > +#elif CONFIG_DEBUG_UART_BASE == 0xbe000e00 /*
> > KSEG1ADDR(UART3_BASE)
> > */
> > +   clrbits_32(base + SYSCTL_GPIOMODE_REG, UART3_MODE_M);
> > +#endif
> > +}
> > diff --git a/include/configs/mt7621.h b/include/configs/mt7621.h
> > new file mode 100644
> > index 0000000000..47f7e51a1a
> > --- /dev/null
> > +++ b/include/configs/mt7621.h
> > @@ -0,0 +1,41 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/*
> > + * Copyright (C) 2021 MediaTek Inc. All Rights Reserved.
> > + *
> > + * Author: Weijie Gao <weijie....@mediatek.com>
> > + */
> > +
> > +#ifndef __CONFIG_MT7621_H
> > +#define __CONFIG_MT7621_H
> > +
> > +#define CONFIG_SYS_HZ                      1000
> > +#define CONFIG_SYS_MIPS_TIMER_FREQ 440000000
> > +
> > +#define CONFIG_SYS_MONITOR_BASE            CONFIG_SYS_TEXT_BAS
> > E
> > +
> > +#define CONFIG_SYS_BOOTPARAMS_LEN  0x20000
> > +
> > +#define CONFIG_SYS_SDRAM_BASE              0x80000000
> > +
> > +#define CONFIG_VERY_BIG_RAM
> > +#define CONFIG_MAX_MEM_MAPPED              0x1c000000
> > +
> > +#define CONFIG_SYS_INIT_SP_OFFSET  0x10000
> > +
> > +#define CONFIG_SYS_BOOTM_LEN               0x2000000
> > +
> > +#define CONFIG_SYS_MAXARGS         16
> > +#define CONFIG_SYS_CBSIZE          1024
> > +
> > +/* MMC */
> > +#define MMC_SUPPORTS_TUNING
> > +
> > +/* NAND */
> > +#define CONFIG_SYS_MAX_NAND_DEVICE 1
> > +
> > +/* Network */
> > +#define CONFIG_IPADDR                      192.168.1.1
> > +#define CONFIG_SERVERIP                    192.168.1.2
> > +#define CONFIG_NETMASK                     255.255.255.0
> 
> the default config shouldn't have any network config
> 

I'll create another config file to hold these configs.

> > +
> > +#endif /* __CONFIG_MT7621_H */

Reply via email to