[PATCH 1/2] arm: mediatek: add mt8195 SOC support

Macpaul Lin macpaul.lin at mediatek.com
Wed Nov 9 08:32:02 CET 2022


On 11/9/22 10:07, Chunfeng Yun (云春峰) wrote:
> On Tue, 2022-11-08 at 11:21 +0800, Macpaul Lin wrote:
>> From: Fabien Parent <fparent at baylibre.com>
>>
>> The MediaTek MT8195 is a ARM64-based SoC with a quad-core Cortex-A73
>> and
>> a quad-core Cortex-A53. It is including UART, SPI, USB3.0 device and
>> hosts,
>> SD and MMC cards, UFS, PWM, I2C, I2S, S/PDIF, and several LPDDR3
>> and LPDDR4 options.
>>
>> Signed-off-by: Fabien Parent <fparent at baylibre.com>
>> Signed-off-by: Macpaul Lin <macpaul.lin at mediatek.com>
>> ---
>>   MAINTAINERS                            |   2 +
>>   arch/arm/dts/mt8195.dtsi               | 317
>> +++++++++++++++++++++++++
>>   arch/arm/mach-mediatek/Kconfig         |  13 +-
>>   arch/arm/mach-mediatek/Makefile        |   1 +
>>   arch/arm/mach-mediatek/mt8195/Makefile |   3 +
>>   arch/arm/mach-mediatek/mt8195/init.c   |  81 +++++++
>>   6 files changed, 416 insertions(+), 1 deletion(-)
>>   create mode 100644 arch/arm/dts/mt8195.dtsi
>>   create mode 100644 arch/arm/mach-mediatek/mt8195/Makefile
>>   create mode 100644 arch/arm/mach-mediatek/mt8195/init.c

[deleted]

>> +		u3phy0: usb-phy at 11f40000 {
> change node name as t-phy as u3phy3?
> 

Got it, will fix it in next version.

>> +			compatible = "mediatek,generic-tphy-v2";
> prefer to add "mediatek,mt8195-tphy" before generic's
> 

Will fix it in next version.

>> +			#address-cells = <1>;
>> +			#size-cells = <1>;
>> +			ranges = <0 0 0x11e40000 0xe00>;
>> +			status = "okay";
>> +
>> +			u2port0: usb-phy at 0 {
>> +				reg = <0 0x700>;
>> +				clocks = <&clk26m>,
>> +					 <&clk26m>;
>> +				clock-names = "ref", "da_ref";
> these two clocks are optional, if sw can't control it, no need add it
> here.

MediaTek's clock driver developer will upstream clock driver when 
refactoring
work has been completed. Before clock driver is applied to trunk, we can use
clk26m only.
Will fix it in next version.

>> +				#phy-cells = <1>;
>> +				status = "okay";
>> +			};
>> +
>> +			u3port0: usb-phy at 700 {
>> +				reg = <0x700 0x700>;
>> +				clocks = <&clk26m>,
>> +					 <&clk26m>;
>> +				clock-names = "ref", "da_ref";
> ditto
> 

Will fix it in next version.

>> +				#phy-cells = <1>;
>> +				status = "okay";
>> +			};
>> +		};
>> +
>> +		usb: usb at 11200000 {
>> +			compatible ="mediatek,mt8195-mtu3",
>> "mediatek,mtu3";
>> +			reg = <0 0x11200000 0 0x3e00>,
>> +			      <0 0x11203e00 0 0x0100>;
>> +			reg-names = "mac", "ippc";
> "mac" can be removed, the driver get it from the first child node
> 

Will fix it in next version.

>> +			phys = <&u2port0 PHY_TYPE_USB2>;
>> +			clocks = <&clk26m>,
>> +				 <&clk26m>,
>> +				 <&clk26m>;
>> +			clock-names = "sys_ck", "ref_ck", "mcu_ck";
>> +			#address-cells = <2>;
>> +			#size-cells = <2>;
>> +			ranges;
>> +			status = "disabled";
>> +
>> +			ssusb: ssusb at 11200000 {
>> +				compatible = "mediatek,ssusb";
>> +				reg = <0 0x11200000 0 0x3e00>;
>> +				reg-names = "mac";
>> +				interrupts = <GIC_SPI 128
>> IRQ_TYPE_LEVEL_LOW>;
>> +				status = "disabled";
>> +			};
>> +
>> +			xhci0: xhci at 11200000 {
>> +				compatible = "mediatek,mtk-xhci";
>> +				reg = <0 0x11200000 0 0x1000>;
>> +				reg-names = "mac";
>> +				interrupts = <GIC_SPI 129
>> IRQ_TYPE_LEVEL_LOW>;
>> +				clocks = <&clk26m>,
>> +					 <&clk26m>,
>> +					 <&clk26m>,
>> +					 <&clk26m>;
>> +				clock-names = "sys_ck", "xhci_ck",
>> "ref_ck", "mcu_ck";
>> +				status = "disabled";
>> +			};
>> +		};
>> +
>> +		u3phy3: t-phy at 11c50000 {
>> +			compatible = "mediatek,generic-tphy-v2";
> add specific one
> 

Will fix it in next version.

>> +			#address-cells = <1>;
>> +			#size-cells = <1>;
>> +			ranges = <0 0 0x11c50000 0x700>;
>> +			status = "okay";
>> +
>> +			u2port3: usb-phy at 0 {
>> +				reg = <0x0 0x700>;
>> +				clocks = <&clk26m>;
>> +				clock-names = "ref";
>> +				#phy-cells = <1>;
>> +			};
>> +		};
>> +
>> +		xhci3: xhci3 at 112b0000 {
> change node name as xhci? prefer to use the same name
> 

Since there are other board manufacturers will use the
other HOST ports, like xhci1 or xhci2 with USB mass storage
function by their needs.
I'll add these 2 node in dtsi in next version.

>> +			compatible = "mediatek,mt8195-xhci",
>> +				     "mediatek,mtk-xhci";
>> +			reg = <0 0x112b0000 0 0x1000>,
>> +			      <0 0x112b3e00 0 0x0100>;
>> +			reg-names = "mac", "ippc";
> remove "mac"

Will fix it in next version.

>> +			interrupts = <GIC_SPI 536 IRQ_TYPE_LEVEL_HIGH>;
>> +			phys = <&u2port3 PHY_TYPE_USB2>;
>> +			clocks = <&clk26m>,
>> +				 <&clk26m>,
>> +				 <&clk26m>;
>> +			clock-names = "sys_ck", "xhci_ck", "ref_ck";
>> +			usb2-lpm-disable;
>> +			status = "disabled";
>> +		};
>> +	};
>> +};
>> diff --git a/arch/arm/mach-mediatek/Kconfig b/arch/arm/mach-
>> mediatek/Kconfig
>> index 04aa2fd97f..3a2af1cdee 100644
>> --- a/arch/arm/mach-mediatek/Kconfig
>> +++ b/arch/arm/mach-mediatek/Kconfig
>> @@ -67,6 +67,15 @@ config TARGET_MT8183
>>   	  SD and MMC cards, UFS, PWM, I2C, I2S, S/PDIF, and several
>> LPDDR3
>>   	  and LPDDR4 options.
>>   
>> +config TARGET_MT8195
>> +	bool "MediaTek MT8195 SoC"
>> +	select ARM64
>> +	help
>> +	  The MediaTek MT8195 is a ARM64-based SoC with a quad-core
>> Cortex-A73 and
>> +	  a quad-core Cortex-A53. It is including UART, SPI, USB3.0
>> device and hosts,
>> +	  SD and MMC cards, UFS, PWM, I2C, I2S, S/PDIF, and several
>> LPDDR3
>> +	  and LPDDR4 options.
>> +
>>   config TARGET_MT8512
>>           bool "MediaTek MT8512 M1 Board"
>>           select ARM64
>> @@ -105,6 +114,7 @@ config SYS_BOARD
>>   	default "mt7981" if TARGET_MT7981
>>   	default "mt7986" if TARGET_MT7986
>>   	default "mt8183" if TARGET_MT8183
>> +	default "mt8195" if TARGET_MT8195
>>   	default "mt8512" if TARGET_MT8512
>>   	default "mt8516" if TARGET_MT8516
>>   	default "mt8518" if TARGET_MT8518
>> @@ -122,6 +132,7 @@ config SYS_CONFIG_NAME
>>   	default "mt7981" if TARGET_MT7981
>>   	default "mt7986" if TARGET_MT7986
>>   	default "mt8183" if TARGET_MT8183
>> +	default "mt8195" if TARGET_MT8195
>>   	default "mt8512" if TARGET_MT8512
>>   	default "mt8516" if TARGET_MT8516
>>   	default "mt8518" if TARGET_MT8518
>> @@ -134,7 +145,7 @@ config SYS_CONFIG_NAME
>>   config MTK_BROM_HEADER_INFO
>>   	string
>>   	default "media=nor" if TARGET_MT8518 || TARGET_MT8512 ||
>> TARGET_MT7629 || TARGET_MT7622
>> -	default "media=emmc" if TARGET_MT8516 || TARGET_MT8365 ||
>> TARGET_MT8183
>> +	default "media=emmc" if TARGET_MT8516 || TARGET_MT8365 ||
>> TARGET_MT8183 || TARGET_MT8195
>>   	default "media=snand;nandinfo=2k+64" if TARGET_MT7981 ||
>> TARGET_MT7986
>>   	default "lk=1" if TARGET_MT7623
>>   
>> diff --git a/arch/arm/mach-mediatek/Makefile b/arch/arm/mach-
>> mediatek/Makefile
>> index fc85293f71..fbbb5431d1 100644
>> --- a/arch/arm/mach-mediatek/Makefile
>> +++ b/arch/arm/mach-mediatek/Makefile
>> @@ -10,5 +10,6 @@ obj-$(CONFIG_TARGET_MT7629) += mt7629/
>>   obj-$(CONFIG_TARGET_MT7981) += mt7981/
>>   obj-$(CONFIG_TARGET_MT7986) += mt7986/
>>   obj-$(CONFIG_TARGET_MT8183) += mt8183/
>> +obj-$(CONFIG_TARGET_MT8195) += mt8195/
>>   obj-$(CONFIG_TARGET_MT8516) += mt8516/
>>   obj-$(CONFIG_TARGET_MT8518) += mt8518/
>> diff --git a/arch/arm/mach-mediatek/mt8195/Makefile b/arch/arm/mach-
>> mediatek/mt8195/Makefile
>> new file mode 100644
>> index 0000000000..886ab7e4eb
>> --- /dev/null
>> +++ b/arch/arm/mach-mediatek/mt8195/Makefile
>> @@ -0,0 +1,3 @@
>> +# SPDX-License-Identifier:	GPL-2.0
>> +
>> +obj-y += init.o
>> diff --git a/arch/arm/mach-mediatek/mt8195/init.c b/arch/arm/mach-
>> mediatek/mt8195/init.c
>> new file mode 100644
>> index 0000000000..1eb4ade6c5
>> --- /dev/null
>> +++ b/arch/arm/mach-mediatek/mt8195/init.c
>> @@ -0,0 +1,81 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +/*
>> + * Copyright (C) 2022 MediaTek Inc.
>> + * Copyright (C) 2022 BayLibre, SAS
>> + * Author: Macpaul Lin <macpaul.lin at mediatek.com>
>> + * Author: Fabien Parent <fparent at baylibre.com>
>> + */
>> +
>> +#include <clk.h>
>> +#include <common.h>
>> +#include <dm.h>
>> +#include <fdtdec.h>
>> +#include <ram.h>
>> +#include <asm/arch/misc.h>
>> +#include <asm/armv8/mmu.h>
>> +#include <asm/sections.h>
>> +#include <asm/system.h>
>> +#include <dm/uclass.h>
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +int dram_init(void)
>> +{
>> +	int ret;
>> +
>> +	ret = fdtdec_setup_memory_banksize();
>> +	if (ret)
>> +		return ret;
>> +
>> +	return fdtdec_setup_mem_size_base();
>> +}
>> +
>> +int dram_init_banksize(void)
>> +{
>> +	gd->bd->bi_dram[0].start = gd->ram_base;
>> +	gd->bd->bi_dram[0].size = gd->ram_size;
>> +
>> +	return 0;
>> +}
>> +
>> +int mtk_pll_early_init(void)
>> +{
>> +	return 0;
>> +}
>> +
>> +int mtk_soc_early_init(void)
>> +{
>> +	return 0;
>> +}
>> +
>> +void reset_cpu(ulong addr)
>> +{
>> +	psci_system_reset();
>> +}
>> +
>> +int print_cpuinfo(void)
>> +{
>> +	printf("CPU:   MediaTek MT8195\n");
>> +	return 0;
>> +}
>> +
>> +static struct mm_region mt8195_mem_map[] = {
>> +	{
>> +		/* DDR */
>> +		.virt = 0x40000000UL,
>> +		.phys = 0x40000000UL,
>> +		.size = 0x80000000UL,
>> +		.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
>> PTE_BLOCK_OUTER_SHARE,
>> +	}, {
>> +		.virt = 0x00000000UL,
>> +		.phys = 0x00000000UL,
>> +		.size = 0x20000000UL,
>> +		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
>> +			 PTE_BLOCK_NON_SHARE |
>> +			 PTE_BLOCK_PXN | PTE_BLOCK_UXN
>> +	}, {
>> +		0,
>> +	}
>> +};
>> +
>> +struct mm_region *mem_map = mt8195_mem_map;

Thanks a lot!
Macpaul Lin


More information about the U-Boot mailing list