162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * linux/arch/arm/mach-omap2/io.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * OMAP2 I/O mapping code
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (C) 2005 Nokia Corporation
862306a36Sopenharmony_ci * Copyright (C) 2007-2009 Texas Instruments
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * Author:
1162306a36Sopenharmony_ci *	Juha Yrjola <juha.yrjola@nokia.com>
1262306a36Sopenharmony_ci *	Syed Khasim <x0khasim@ti.com>
1362306a36Sopenharmony_ci *
1462306a36Sopenharmony_ci * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
1562306a36Sopenharmony_ci */
1662306a36Sopenharmony_ci#include <linux/module.h>
1762306a36Sopenharmony_ci#include <linux/kernel.h>
1862306a36Sopenharmony_ci#include <linux/init.h>
1962306a36Sopenharmony_ci#include <linux/io.h>
2062306a36Sopenharmony_ci#include <linux/clk.h>
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#include <asm/tlb.h>
2362306a36Sopenharmony_ci#include <asm/mach/map.h>
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci#include <linux/omap-dma.h>
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#include "omap_hwmod.h"
2862306a36Sopenharmony_ci#include "soc.h"
2962306a36Sopenharmony_ci#include "iomap.h"
3062306a36Sopenharmony_ci#include "voltage.h"
3162306a36Sopenharmony_ci#include "powerdomain.h"
3262306a36Sopenharmony_ci#include "clockdomain.h"
3362306a36Sopenharmony_ci#include "common.h"
3462306a36Sopenharmony_ci#include "clock.h"
3562306a36Sopenharmony_ci#include "sdrc.h"
3662306a36Sopenharmony_ci#include "control.h"
3762306a36Sopenharmony_ci#include "sram.h"
3862306a36Sopenharmony_ci#include "cm2xxx.h"
3962306a36Sopenharmony_ci#include "cm3xxx.h"
4062306a36Sopenharmony_ci#include "cm33xx.h"
4162306a36Sopenharmony_ci#include "cm44xx.h"
4262306a36Sopenharmony_ci#include "prm.h"
4362306a36Sopenharmony_ci#include "cm.h"
4462306a36Sopenharmony_ci#include "prcm_mpu44xx.h"
4562306a36Sopenharmony_ci#include "prminst44xx.h"
4662306a36Sopenharmony_ci#include "prm2xxx.h"
4762306a36Sopenharmony_ci#include "prm3xxx.h"
4862306a36Sopenharmony_ci#include "prm33xx.h"
4962306a36Sopenharmony_ci#include "prm44xx.h"
5062306a36Sopenharmony_ci#include "opp2xxx.h"
5162306a36Sopenharmony_ci#include "omap-secure.h"
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci/*
5462306a36Sopenharmony_ci * omap_clk_soc_init: points to a function that does the SoC-specific
5562306a36Sopenharmony_ci * clock initializations
5662306a36Sopenharmony_ci */
5762306a36Sopenharmony_cistatic int (*omap_clk_soc_init)(void);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci/*
6062306a36Sopenharmony_ci * The machine specific code may provide the extra mapping besides the
6162306a36Sopenharmony_ci * default mapping provided here.
6262306a36Sopenharmony_ci */
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430)
6562306a36Sopenharmony_cistatic struct map_desc omap24xx_io_desc[] __initdata = {
6662306a36Sopenharmony_ci	{
6762306a36Sopenharmony_ci		.virtual	= L3_24XX_VIRT,
6862306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L3_24XX_PHYS),
6962306a36Sopenharmony_ci		.length		= L3_24XX_SIZE,
7062306a36Sopenharmony_ci		.type		= MT_DEVICE
7162306a36Sopenharmony_ci	},
7262306a36Sopenharmony_ci	{
7362306a36Sopenharmony_ci		.virtual	= L4_24XX_VIRT,
7462306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_24XX_PHYS),
7562306a36Sopenharmony_ci		.length		= L4_24XX_SIZE,
7662306a36Sopenharmony_ci		.type		= MT_DEVICE
7762306a36Sopenharmony_ci	},
7862306a36Sopenharmony_ci};
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP2420
8162306a36Sopenharmony_cistatic struct map_desc omap242x_io_desc[] __initdata = {
8262306a36Sopenharmony_ci	{
8362306a36Sopenharmony_ci		.virtual	= DSP_MEM_2420_VIRT,
8462306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(DSP_MEM_2420_PHYS),
8562306a36Sopenharmony_ci		.length		= DSP_MEM_2420_SIZE,
8662306a36Sopenharmony_ci		.type		= MT_DEVICE
8762306a36Sopenharmony_ci	},
8862306a36Sopenharmony_ci	{
8962306a36Sopenharmony_ci		.virtual	= DSP_IPI_2420_VIRT,
9062306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(DSP_IPI_2420_PHYS),
9162306a36Sopenharmony_ci		.length		= DSP_IPI_2420_SIZE,
9262306a36Sopenharmony_ci		.type		= MT_DEVICE
9362306a36Sopenharmony_ci	},
9462306a36Sopenharmony_ci	{
9562306a36Sopenharmony_ci		.virtual	= DSP_MMU_2420_VIRT,
9662306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(DSP_MMU_2420_PHYS),
9762306a36Sopenharmony_ci		.length		= DSP_MMU_2420_SIZE,
9862306a36Sopenharmony_ci		.type		= MT_DEVICE
9962306a36Sopenharmony_ci	},
10062306a36Sopenharmony_ci};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci#endif
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP2430
10562306a36Sopenharmony_cistatic struct map_desc omap243x_io_desc[] __initdata = {
10662306a36Sopenharmony_ci	{
10762306a36Sopenharmony_ci		.virtual	= L4_WK_243X_VIRT,
10862306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_WK_243X_PHYS),
10962306a36Sopenharmony_ci		.length		= L4_WK_243X_SIZE,
11062306a36Sopenharmony_ci		.type		= MT_DEVICE
11162306a36Sopenharmony_ci	},
11262306a36Sopenharmony_ci	{
11362306a36Sopenharmony_ci		.virtual	= OMAP243X_GPMC_VIRT,
11462306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(OMAP243X_GPMC_PHYS),
11562306a36Sopenharmony_ci		.length		= OMAP243X_GPMC_SIZE,
11662306a36Sopenharmony_ci		.type		= MT_DEVICE
11762306a36Sopenharmony_ci	},
11862306a36Sopenharmony_ci	{
11962306a36Sopenharmony_ci		.virtual	= OMAP243X_SDRC_VIRT,
12062306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(OMAP243X_SDRC_PHYS),
12162306a36Sopenharmony_ci		.length		= OMAP243X_SDRC_SIZE,
12262306a36Sopenharmony_ci		.type		= MT_DEVICE
12362306a36Sopenharmony_ci	},
12462306a36Sopenharmony_ci	{
12562306a36Sopenharmony_ci		.virtual	= OMAP243X_SMS_VIRT,
12662306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(OMAP243X_SMS_PHYS),
12762306a36Sopenharmony_ci		.length		= OMAP243X_SMS_SIZE,
12862306a36Sopenharmony_ci		.type		= MT_DEVICE
12962306a36Sopenharmony_ci	},
13062306a36Sopenharmony_ci};
13162306a36Sopenharmony_ci#endif
13262306a36Sopenharmony_ci#endif
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci#ifdef	CONFIG_ARCH_OMAP3
13562306a36Sopenharmony_cistatic struct map_desc omap34xx_io_desc[] __initdata = {
13662306a36Sopenharmony_ci	{
13762306a36Sopenharmony_ci		.virtual	= L3_34XX_VIRT,
13862306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L3_34XX_PHYS),
13962306a36Sopenharmony_ci		.length		= L3_34XX_SIZE,
14062306a36Sopenharmony_ci		.type		= MT_DEVICE
14162306a36Sopenharmony_ci	},
14262306a36Sopenharmony_ci	{
14362306a36Sopenharmony_ci		.virtual	= L4_34XX_VIRT,
14462306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_34XX_PHYS),
14562306a36Sopenharmony_ci		.length		= L4_34XX_SIZE,
14662306a36Sopenharmony_ci		.type		= MT_DEVICE
14762306a36Sopenharmony_ci	},
14862306a36Sopenharmony_ci	{
14962306a36Sopenharmony_ci		.virtual	= OMAP34XX_GPMC_VIRT,
15062306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(OMAP34XX_GPMC_PHYS),
15162306a36Sopenharmony_ci		.length		= OMAP34XX_GPMC_SIZE,
15262306a36Sopenharmony_ci		.type		= MT_DEVICE
15362306a36Sopenharmony_ci	},
15462306a36Sopenharmony_ci	{
15562306a36Sopenharmony_ci		.virtual	= OMAP343X_SMS_VIRT,
15662306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(OMAP343X_SMS_PHYS),
15762306a36Sopenharmony_ci		.length		= OMAP343X_SMS_SIZE,
15862306a36Sopenharmony_ci		.type		= MT_DEVICE
15962306a36Sopenharmony_ci	},
16062306a36Sopenharmony_ci	{
16162306a36Sopenharmony_ci		.virtual	= OMAP343X_SDRC_VIRT,
16262306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(OMAP343X_SDRC_PHYS),
16362306a36Sopenharmony_ci		.length		= OMAP343X_SDRC_SIZE,
16462306a36Sopenharmony_ci		.type		= MT_DEVICE
16562306a36Sopenharmony_ci	},
16662306a36Sopenharmony_ci	{
16762306a36Sopenharmony_ci		.virtual	= L4_PER_34XX_VIRT,
16862306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_PER_34XX_PHYS),
16962306a36Sopenharmony_ci		.length		= L4_PER_34XX_SIZE,
17062306a36Sopenharmony_ci		.type		= MT_DEVICE
17162306a36Sopenharmony_ci	},
17262306a36Sopenharmony_ci	{
17362306a36Sopenharmony_ci		.virtual	= L4_EMU_34XX_VIRT,
17462306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_EMU_34XX_PHYS),
17562306a36Sopenharmony_ci		.length		= L4_EMU_34XX_SIZE,
17662306a36Sopenharmony_ci		.type		= MT_DEVICE
17762306a36Sopenharmony_ci	},
17862306a36Sopenharmony_ci};
17962306a36Sopenharmony_ci#endif
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci#ifdef CONFIG_SOC_TI81XX
18262306a36Sopenharmony_cistatic struct map_desc omapti81xx_io_desc[] __initdata = {
18362306a36Sopenharmony_ci	{
18462306a36Sopenharmony_ci		.virtual	= L4_34XX_VIRT,
18562306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_34XX_PHYS),
18662306a36Sopenharmony_ci		.length		= L4_34XX_SIZE,
18762306a36Sopenharmony_ci		.type		= MT_DEVICE
18862306a36Sopenharmony_ci	}
18962306a36Sopenharmony_ci};
19062306a36Sopenharmony_ci#endif
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
19362306a36Sopenharmony_cistatic struct map_desc omapam33xx_io_desc[] __initdata = {
19462306a36Sopenharmony_ci	{
19562306a36Sopenharmony_ci		.virtual	= L4_34XX_VIRT,
19662306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_34XX_PHYS),
19762306a36Sopenharmony_ci		.length		= L4_34XX_SIZE,
19862306a36Sopenharmony_ci		.type		= MT_DEVICE
19962306a36Sopenharmony_ci	},
20062306a36Sopenharmony_ci	{
20162306a36Sopenharmony_ci		.virtual	= L4_WK_AM33XX_VIRT,
20262306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_WK_AM33XX_PHYS),
20362306a36Sopenharmony_ci		.length		= L4_WK_AM33XX_SIZE,
20462306a36Sopenharmony_ci		.type		= MT_DEVICE
20562306a36Sopenharmony_ci	}
20662306a36Sopenharmony_ci};
20762306a36Sopenharmony_ci#endif
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci#ifdef	CONFIG_ARCH_OMAP4
21062306a36Sopenharmony_cistatic struct map_desc omap44xx_io_desc[] __initdata = {
21162306a36Sopenharmony_ci	{
21262306a36Sopenharmony_ci		.virtual	= L3_44XX_VIRT,
21362306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L3_44XX_PHYS),
21462306a36Sopenharmony_ci		.length		= L3_44XX_SIZE,
21562306a36Sopenharmony_ci		.type		= MT_DEVICE,
21662306a36Sopenharmony_ci	},
21762306a36Sopenharmony_ci	{
21862306a36Sopenharmony_ci		.virtual	= L4_44XX_VIRT,
21962306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_44XX_PHYS),
22062306a36Sopenharmony_ci		.length		= L4_44XX_SIZE,
22162306a36Sopenharmony_ci		.type		= MT_DEVICE,
22262306a36Sopenharmony_ci	},
22362306a36Sopenharmony_ci	{
22462306a36Sopenharmony_ci		.virtual	= L4_PER_44XX_VIRT,
22562306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_PER_44XX_PHYS),
22662306a36Sopenharmony_ci		.length		= L4_PER_44XX_SIZE,
22762306a36Sopenharmony_ci		.type		= MT_DEVICE,
22862306a36Sopenharmony_ci	},
22962306a36Sopenharmony_ci};
23062306a36Sopenharmony_ci#endif
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP5
23362306a36Sopenharmony_cistatic struct map_desc omap54xx_io_desc[] __initdata = {
23462306a36Sopenharmony_ci	{
23562306a36Sopenharmony_ci		.virtual	= L3_54XX_VIRT,
23662306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L3_54XX_PHYS),
23762306a36Sopenharmony_ci		.length		= L3_54XX_SIZE,
23862306a36Sopenharmony_ci		.type		= MT_DEVICE,
23962306a36Sopenharmony_ci	},
24062306a36Sopenharmony_ci	{
24162306a36Sopenharmony_ci		.virtual	= L4_54XX_VIRT,
24262306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_54XX_PHYS),
24362306a36Sopenharmony_ci		.length		= L4_54XX_SIZE,
24462306a36Sopenharmony_ci		.type		= MT_DEVICE,
24562306a36Sopenharmony_ci	},
24662306a36Sopenharmony_ci	{
24762306a36Sopenharmony_ci		.virtual	= L4_WK_54XX_VIRT,
24862306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_WK_54XX_PHYS),
24962306a36Sopenharmony_ci		.length		= L4_WK_54XX_SIZE,
25062306a36Sopenharmony_ci		.type		= MT_DEVICE,
25162306a36Sopenharmony_ci	},
25262306a36Sopenharmony_ci	{
25362306a36Sopenharmony_ci		.virtual	= L4_PER_54XX_VIRT,
25462306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_PER_54XX_PHYS),
25562306a36Sopenharmony_ci		.length		= L4_PER_54XX_SIZE,
25662306a36Sopenharmony_ci		.type		= MT_DEVICE,
25762306a36Sopenharmony_ci	},
25862306a36Sopenharmony_ci};
25962306a36Sopenharmony_ci#endif
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci#ifdef CONFIG_SOC_DRA7XX
26262306a36Sopenharmony_cistatic struct map_desc dra7xx_io_desc[] __initdata = {
26362306a36Sopenharmony_ci	{
26462306a36Sopenharmony_ci		.virtual	= L4_CFG_MPU_DRA7XX_VIRT,
26562306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_CFG_MPU_DRA7XX_PHYS),
26662306a36Sopenharmony_ci		.length		= L4_CFG_MPU_DRA7XX_SIZE,
26762306a36Sopenharmony_ci		.type		= MT_DEVICE,
26862306a36Sopenharmony_ci	},
26962306a36Sopenharmony_ci	{
27062306a36Sopenharmony_ci		.virtual	= L3_MAIN_SN_DRA7XX_VIRT,
27162306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L3_MAIN_SN_DRA7XX_PHYS),
27262306a36Sopenharmony_ci		.length		= L3_MAIN_SN_DRA7XX_SIZE,
27362306a36Sopenharmony_ci		.type		= MT_DEVICE,
27462306a36Sopenharmony_ci	},
27562306a36Sopenharmony_ci	{
27662306a36Sopenharmony_ci		.virtual	= L4_PER1_DRA7XX_VIRT,
27762306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_PER1_DRA7XX_PHYS),
27862306a36Sopenharmony_ci		.length		= L4_PER1_DRA7XX_SIZE,
27962306a36Sopenharmony_ci		.type		= MT_DEVICE,
28062306a36Sopenharmony_ci	},
28162306a36Sopenharmony_ci	{
28262306a36Sopenharmony_ci		.virtual	= L4_PER2_DRA7XX_VIRT,
28362306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_PER2_DRA7XX_PHYS),
28462306a36Sopenharmony_ci		.length		= L4_PER2_DRA7XX_SIZE,
28562306a36Sopenharmony_ci		.type		= MT_DEVICE,
28662306a36Sopenharmony_ci	},
28762306a36Sopenharmony_ci	{
28862306a36Sopenharmony_ci		.virtual	= L4_PER3_DRA7XX_VIRT,
28962306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_PER3_DRA7XX_PHYS),
29062306a36Sopenharmony_ci		.length		= L4_PER3_DRA7XX_SIZE,
29162306a36Sopenharmony_ci		.type		= MT_DEVICE,
29262306a36Sopenharmony_ci	},
29362306a36Sopenharmony_ci	{
29462306a36Sopenharmony_ci		.virtual	= L4_CFG_DRA7XX_VIRT,
29562306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_CFG_DRA7XX_PHYS),
29662306a36Sopenharmony_ci		.length		= L4_CFG_DRA7XX_SIZE,
29762306a36Sopenharmony_ci		.type		= MT_DEVICE,
29862306a36Sopenharmony_ci	},
29962306a36Sopenharmony_ci	{
30062306a36Sopenharmony_ci		.virtual	= L4_WKUP_DRA7XX_VIRT,
30162306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(L4_WKUP_DRA7XX_PHYS),
30262306a36Sopenharmony_ci		.length		= L4_WKUP_DRA7XX_SIZE,
30362306a36Sopenharmony_ci		.type		= MT_DEVICE,
30462306a36Sopenharmony_ci	},
30562306a36Sopenharmony_ci};
30662306a36Sopenharmony_ci#endif
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP2420
30962306a36Sopenharmony_civoid __init omap242x_map_io(void)
31062306a36Sopenharmony_ci{
31162306a36Sopenharmony_ci	iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
31262306a36Sopenharmony_ci	iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc));
31362306a36Sopenharmony_ci}
31462306a36Sopenharmony_ci#endif
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP2430
31762306a36Sopenharmony_civoid __init omap243x_map_io(void)
31862306a36Sopenharmony_ci{
31962306a36Sopenharmony_ci	iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
32062306a36Sopenharmony_ci	iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc));
32162306a36Sopenharmony_ci}
32262306a36Sopenharmony_ci#endif
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ci#ifdef CONFIG_ARCH_OMAP3
32562306a36Sopenharmony_civoid __init omap3_map_io(void)
32662306a36Sopenharmony_ci{
32762306a36Sopenharmony_ci	iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc));
32862306a36Sopenharmony_ci}
32962306a36Sopenharmony_ci#endif
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci#ifdef CONFIG_SOC_TI81XX
33262306a36Sopenharmony_civoid __init ti81xx_map_io(void)
33362306a36Sopenharmony_ci{
33462306a36Sopenharmony_ci	iotable_init(omapti81xx_io_desc, ARRAY_SIZE(omapti81xx_io_desc));
33562306a36Sopenharmony_ci}
33662306a36Sopenharmony_ci#endif
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ci#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
33962306a36Sopenharmony_civoid __init am33xx_map_io(void)
34062306a36Sopenharmony_ci{
34162306a36Sopenharmony_ci	iotable_init(omapam33xx_io_desc, ARRAY_SIZE(omapam33xx_io_desc));
34262306a36Sopenharmony_ci}
34362306a36Sopenharmony_ci#endif
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ci#ifdef CONFIG_ARCH_OMAP4
34662306a36Sopenharmony_civoid __init omap4_map_io(void)
34762306a36Sopenharmony_ci{
34862306a36Sopenharmony_ci	iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
34962306a36Sopenharmony_ci	omap_barriers_init();
35062306a36Sopenharmony_ci}
35162306a36Sopenharmony_ci#endif
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP5
35462306a36Sopenharmony_civoid __init omap5_map_io(void)
35562306a36Sopenharmony_ci{
35662306a36Sopenharmony_ci	iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc));
35762306a36Sopenharmony_ci	omap_barriers_init();
35862306a36Sopenharmony_ci}
35962306a36Sopenharmony_ci#endif
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci#ifdef CONFIG_SOC_DRA7XX
36262306a36Sopenharmony_civoid __init dra7xx_map_io(void)
36362306a36Sopenharmony_ci{
36462306a36Sopenharmony_ci	iotable_init(dra7xx_io_desc, ARRAY_SIZE(dra7xx_io_desc));
36562306a36Sopenharmony_ci	omap_barriers_init();
36662306a36Sopenharmony_ci}
36762306a36Sopenharmony_ci#endif
36862306a36Sopenharmony_ci/*
36962306a36Sopenharmony_ci * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters
37062306a36Sopenharmony_ci *
37162306a36Sopenharmony_ci * Sets the CORE DPLL3 M2 divider to the same value that it's at
37262306a36Sopenharmony_ci * currently.  This has the effect of setting the SDRC SDRAM AC timing
37362306a36Sopenharmony_ci * registers to the values currently defined by the kernel.  Currently
37462306a36Sopenharmony_ci * only defined for OMAP3; will return 0 if called on OMAP2.  Returns
37562306a36Sopenharmony_ci * -EINVAL if the dpll3_m2_ck cannot be found, 0 if called on OMAP2,
37662306a36Sopenharmony_ci * or passes along the return value of clk_set_rate().
37762306a36Sopenharmony_ci */
37862306a36Sopenharmony_cistatic int __init _omap2_init_reprogram_sdrc(void)
37962306a36Sopenharmony_ci{
38062306a36Sopenharmony_ci	struct clk *dpll3_m2_ck;
38162306a36Sopenharmony_ci	int v = -EINVAL;
38262306a36Sopenharmony_ci	long rate;
38362306a36Sopenharmony_ci
38462306a36Sopenharmony_ci	if (!cpu_is_omap34xx())
38562306a36Sopenharmony_ci		return 0;
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci	dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
38862306a36Sopenharmony_ci	if (IS_ERR(dpll3_m2_ck))
38962306a36Sopenharmony_ci		return -EINVAL;
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci	rate = clk_get_rate(dpll3_m2_ck);
39262306a36Sopenharmony_ci	pr_info("Reprogramming SDRC clock to %ld Hz\n", rate);
39362306a36Sopenharmony_ci	v = clk_set_rate(dpll3_m2_ck, rate);
39462306a36Sopenharmony_ci	if (v)
39562306a36Sopenharmony_ci		pr_err("dpll3_m2_clk rate change failed: %d\n", v);
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci	clk_put(dpll3_m2_ck);
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ci	return v;
40062306a36Sopenharmony_ci}
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ci#ifdef CONFIG_OMAP_HWMOD
40362306a36Sopenharmony_cistatic int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
40462306a36Sopenharmony_ci{
40562306a36Sopenharmony_ci	return omap_hwmod_set_postsetup_state(oh, *(u8 *)data);
40662306a36Sopenharmony_ci}
40762306a36Sopenharmony_ci
40862306a36Sopenharmony_cistatic void __init __maybe_unused omap_hwmod_init_postsetup(void)
40962306a36Sopenharmony_ci{
41062306a36Sopenharmony_ci	u8 postsetup_state = _HWMOD_STATE_DEFAULT;
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_ci	/* Set the default postsetup state for all hwmods */
41362306a36Sopenharmony_ci	omap_hwmod_for_each(_set_hwmod_postsetup_state, &postsetup_state);
41462306a36Sopenharmony_ci}
41562306a36Sopenharmony_ci#else
41662306a36Sopenharmony_cistatic inline void omap_hwmod_init_postsetup(void)
41762306a36Sopenharmony_ci{
41862306a36Sopenharmony_ci}
41962306a36Sopenharmony_ci#endif
42062306a36Sopenharmony_ci
42162306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP2420
42262306a36Sopenharmony_civoid __init omap2420_init_early(void)
42362306a36Sopenharmony_ci{
42462306a36Sopenharmony_ci	omap2_set_globals_tap(OMAP242X_CLASS, OMAP2_L4_IO_ADDRESS(0x48014000));
42562306a36Sopenharmony_ci	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE),
42662306a36Sopenharmony_ci			       OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE));
42762306a36Sopenharmony_ci	omap2_control_base_init();
42862306a36Sopenharmony_ci	omap2xxx_check_revision();
42962306a36Sopenharmony_ci	omap2_prcm_base_init();
43062306a36Sopenharmony_ci	omap2xxx_voltagedomains_init();
43162306a36Sopenharmony_ci	omap242x_powerdomains_init();
43262306a36Sopenharmony_ci	omap242x_clockdomains_init();
43362306a36Sopenharmony_ci	omap2420_hwmod_init();
43462306a36Sopenharmony_ci	omap_hwmod_init_postsetup();
43562306a36Sopenharmony_ci	omap_clk_soc_init = omap2420_dt_clk_init;
43662306a36Sopenharmony_ci	rate_table = omap2420_rate_table;
43762306a36Sopenharmony_ci}
43862306a36Sopenharmony_ci#endif
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP2430
44162306a36Sopenharmony_civoid __init omap2430_init_early(void)
44262306a36Sopenharmony_ci{
44362306a36Sopenharmony_ci	omap2_set_globals_tap(OMAP243X_CLASS, OMAP2_L4_IO_ADDRESS(0x4900a000));
44462306a36Sopenharmony_ci	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE),
44562306a36Sopenharmony_ci			       OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE));
44662306a36Sopenharmony_ci	omap2_control_base_init();
44762306a36Sopenharmony_ci	omap2xxx_check_revision();
44862306a36Sopenharmony_ci	omap2_prcm_base_init();
44962306a36Sopenharmony_ci	omap2xxx_voltagedomains_init();
45062306a36Sopenharmony_ci	omap243x_powerdomains_init();
45162306a36Sopenharmony_ci	omap243x_clockdomains_init();
45262306a36Sopenharmony_ci	omap2430_hwmod_init();
45362306a36Sopenharmony_ci	omap_hwmod_init_postsetup();
45462306a36Sopenharmony_ci	omap_clk_soc_init = omap2430_dt_clk_init;
45562306a36Sopenharmony_ci	rate_table = omap2430_rate_table;
45662306a36Sopenharmony_ci}
45762306a36Sopenharmony_ci#endif
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_ci/*
46062306a36Sopenharmony_ci * Currently only board-omap3beagle.c should call this because of the
46162306a36Sopenharmony_ci * same machine_id for 34xx and 36xx beagle.. Will get fixed with DT.
46262306a36Sopenharmony_ci */
46362306a36Sopenharmony_ci#ifdef CONFIG_ARCH_OMAP3
46462306a36Sopenharmony_cistatic void __init omap3_init_early(void)
46562306a36Sopenharmony_ci{
46662306a36Sopenharmony_ci	omap2_set_globals_tap(OMAP343X_CLASS, OMAP2_L4_IO_ADDRESS(0x4830A000));
46762306a36Sopenharmony_ci	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE),
46862306a36Sopenharmony_ci			       OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE));
46962306a36Sopenharmony_ci	omap2_control_base_init();
47062306a36Sopenharmony_ci	omap3xxx_check_revision();
47162306a36Sopenharmony_ci	omap3xxx_check_features();
47262306a36Sopenharmony_ci	omap2_prcm_base_init();
47362306a36Sopenharmony_ci	omap3xxx_voltagedomains_init();
47462306a36Sopenharmony_ci	omap3xxx_powerdomains_init();
47562306a36Sopenharmony_ci	omap3xxx_clockdomains_init();
47662306a36Sopenharmony_ci	omap3xxx_hwmod_init();
47762306a36Sopenharmony_ci	omap_hwmod_init_postsetup();
47862306a36Sopenharmony_ci	omap_secure_init();
47962306a36Sopenharmony_ci}
48062306a36Sopenharmony_ci
48162306a36Sopenharmony_civoid __init omap3430_init_early(void)
48262306a36Sopenharmony_ci{
48362306a36Sopenharmony_ci	omap3_init_early();
48462306a36Sopenharmony_ci	omap_clk_soc_init = omap3430_dt_clk_init;
48562306a36Sopenharmony_ci}
48662306a36Sopenharmony_ci
48762306a36Sopenharmony_civoid __init omap3630_init_early(void)
48862306a36Sopenharmony_ci{
48962306a36Sopenharmony_ci	omap3_init_early();
49062306a36Sopenharmony_ci	omap_clk_soc_init = omap3630_dt_clk_init;
49162306a36Sopenharmony_ci}
49262306a36Sopenharmony_ci
49362306a36Sopenharmony_civoid __init am35xx_init_early(void)
49462306a36Sopenharmony_ci{
49562306a36Sopenharmony_ci	omap3_init_early();
49662306a36Sopenharmony_ci	omap_clk_soc_init = am35xx_dt_clk_init;
49762306a36Sopenharmony_ci}
49862306a36Sopenharmony_ci
49962306a36Sopenharmony_civoid __init omap3_init_late(void)
50062306a36Sopenharmony_ci{
50162306a36Sopenharmony_ci	omap_pm_soc_init = omap3_pm_init;
50262306a36Sopenharmony_ci}
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_civoid __init ti81xx_init_late(void)
50562306a36Sopenharmony_ci{
50662306a36Sopenharmony_ci	omap_pm_soc_init = omap_pm_nop_init;
50762306a36Sopenharmony_ci}
50862306a36Sopenharmony_ci#endif
50962306a36Sopenharmony_ci
51062306a36Sopenharmony_ci#ifdef CONFIG_SOC_TI81XX
51162306a36Sopenharmony_civoid __init ti814x_init_early(void)
51262306a36Sopenharmony_ci{
51362306a36Sopenharmony_ci	omap2_set_globals_tap(TI814X_CLASS,
51462306a36Sopenharmony_ci			      OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE));
51562306a36Sopenharmony_ci	omap2_control_base_init();
51662306a36Sopenharmony_ci	omap3xxx_check_revision();
51762306a36Sopenharmony_ci	ti81xx_check_features();
51862306a36Sopenharmony_ci	omap2_prcm_base_init();
51962306a36Sopenharmony_ci	omap3xxx_voltagedomains_init();
52062306a36Sopenharmony_ci	omap3xxx_powerdomains_init();
52162306a36Sopenharmony_ci	ti814x_clockdomains_init();
52262306a36Sopenharmony_ci	dm814x_hwmod_init();
52362306a36Sopenharmony_ci	omap_hwmod_init_postsetup();
52462306a36Sopenharmony_ci	omap_clk_soc_init = dm814x_dt_clk_init;
52562306a36Sopenharmony_ci	omap_secure_init();
52662306a36Sopenharmony_ci}
52762306a36Sopenharmony_ci
52862306a36Sopenharmony_civoid __init ti816x_init_early(void)
52962306a36Sopenharmony_ci{
53062306a36Sopenharmony_ci	omap2_set_globals_tap(TI816X_CLASS,
53162306a36Sopenharmony_ci			      OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE));
53262306a36Sopenharmony_ci	omap2_control_base_init();
53362306a36Sopenharmony_ci	omap3xxx_check_revision();
53462306a36Sopenharmony_ci	ti81xx_check_features();
53562306a36Sopenharmony_ci	omap2_prcm_base_init();
53662306a36Sopenharmony_ci	omap3xxx_voltagedomains_init();
53762306a36Sopenharmony_ci	omap3xxx_powerdomains_init();
53862306a36Sopenharmony_ci	ti816x_clockdomains_init();
53962306a36Sopenharmony_ci	dm816x_hwmod_init();
54062306a36Sopenharmony_ci	omap_hwmod_init_postsetup();
54162306a36Sopenharmony_ci	omap_clk_soc_init = dm816x_dt_clk_init;
54262306a36Sopenharmony_ci	omap_secure_init();
54362306a36Sopenharmony_ci}
54462306a36Sopenharmony_ci#endif
54562306a36Sopenharmony_ci
54662306a36Sopenharmony_ci#ifdef CONFIG_SOC_AM33XX
54762306a36Sopenharmony_civoid __init am33xx_init_early(void)
54862306a36Sopenharmony_ci{
54962306a36Sopenharmony_ci	omap2_set_globals_tap(AM335X_CLASS,
55062306a36Sopenharmony_ci			      AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE));
55162306a36Sopenharmony_ci	omap2_control_base_init();
55262306a36Sopenharmony_ci	omap3xxx_check_revision();
55362306a36Sopenharmony_ci	am33xx_check_features();
55462306a36Sopenharmony_ci	omap2_prcm_base_init();
55562306a36Sopenharmony_ci	am33xx_powerdomains_init();
55662306a36Sopenharmony_ci	am33xx_clockdomains_init();
55762306a36Sopenharmony_ci	omap_clk_soc_init = am33xx_dt_clk_init;
55862306a36Sopenharmony_ci	omap_secure_init();
55962306a36Sopenharmony_ci}
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_civoid __init am33xx_init_late(void)
56262306a36Sopenharmony_ci{
56362306a36Sopenharmony_ci	omap_pm_soc_init = amx3_common_pm_init;
56462306a36Sopenharmony_ci}
56562306a36Sopenharmony_ci#endif
56662306a36Sopenharmony_ci
56762306a36Sopenharmony_ci#ifdef CONFIG_SOC_AM43XX
56862306a36Sopenharmony_civoid __init am43xx_init_early(void)
56962306a36Sopenharmony_ci{
57062306a36Sopenharmony_ci	omap2_set_globals_tap(AM335X_CLASS,
57162306a36Sopenharmony_ci			      AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE));
57262306a36Sopenharmony_ci	omap2_control_base_init();
57362306a36Sopenharmony_ci	omap3xxx_check_revision();
57462306a36Sopenharmony_ci	am33xx_check_features();
57562306a36Sopenharmony_ci	omap2_prcm_base_init();
57662306a36Sopenharmony_ci	am43xx_powerdomains_init();
57762306a36Sopenharmony_ci	am43xx_clockdomains_init();
57862306a36Sopenharmony_ci	omap_l2_cache_init();
57962306a36Sopenharmony_ci	omap_clk_soc_init = am43xx_dt_clk_init;
58062306a36Sopenharmony_ci	omap_secure_init();
58162306a36Sopenharmony_ci}
58262306a36Sopenharmony_ci
58362306a36Sopenharmony_civoid __init am43xx_init_late(void)
58462306a36Sopenharmony_ci{
58562306a36Sopenharmony_ci	omap_pm_soc_init = amx3_common_pm_init;
58662306a36Sopenharmony_ci}
58762306a36Sopenharmony_ci#endif
58862306a36Sopenharmony_ci
58962306a36Sopenharmony_ci#ifdef CONFIG_ARCH_OMAP4
59062306a36Sopenharmony_civoid __init omap4430_init_early(void)
59162306a36Sopenharmony_ci{
59262306a36Sopenharmony_ci	omap2_set_globals_tap(OMAP443X_CLASS,
59362306a36Sopenharmony_ci			      OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE));
59462306a36Sopenharmony_ci	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE));
59562306a36Sopenharmony_ci	omap2_control_base_init();
59662306a36Sopenharmony_ci	omap4xxx_check_revision();
59762306a36Sopenharmony_ci	omap4xxx_check_features();
59862306a36Sopenharmony_ci	omap2_prcm_base_init();
59962306a36Sopenharmony_ci	omap4_sar_ram_init();
60062306a36Sopenharmony_ci	omap4_mpuss_early_init();
60162306a36Sopenharmony_ci	omap4_pm_init_early();
60262306a36Sopenharmony_ci	omap44xx_voltagedomains_init();
60362306a36Sopenharmony_ci	omap44xx_powerdomains_init();
60462306a36Sopenharmony_ci	omap44xx_clockdomains_init();
60562306a36Sopenharmony_ci	omap_l2_cache_init();
60662306a36Sopenharmony_ci	omap_clk_soc_init = omap4xxx_dt_clk_init;
60762306a36Sopenharmony_ci	omap_secure_init();
60862306a36Sopenharmony_ci}
60962306a36Sopenharmony_ci
61062306a36Sopenharmony_civoid __init omap4430_init_late(void)
61162306a36Sopenharmony_ci{
61262306a36Sopenharmony_ci	omap_pm_soc_init = omap4_pm_init;
61362306a36Sopenharmony_ci}
61462306a36Sopenharmony_ci#endif
61562306a36Sopenharmony_ci
61662306a36Sopenharmony_ci#ifdef CONFIG_SOC_OMAP5
61762306a36Sopenharmony_civoid __init omap5_init_early(void)
61862306a36Sopenharmony_ci{
61962306a36Sopenharmony_ci	omap2_set_globals_tap(OMAP54XX_CLASS,
62062306a36Sopenharmony_ci			      OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE));
62162306a36Sopenharmony_ci	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
62262306a36Sopenharmony_ci	omap2_control_base_init();
62362306a36Sopenharmony_ci	omap2_prcm_base_init();
62462306a36Sopenharmony_ci	omap5xxx_check_revision();
62562306a36Sopenharmony_ci	omap4_sar_ram_init();
62662306a36Sopenharmony_ci	omap4_mpuss_early_init();
62762306a36Sopenharmony_ci	omap4_pm_init_early();
62862306a36Sopenharmony_ci	omap54xx_voltagedomains_init();
62962306a36Sopenharmony_ci	omap54xx_powerdomains_init();
63062306a36Sopenharmony_ci	omap54xx_clockdomains_init();
63162306a36Sopenharmony_ci	omap_clk_soc_init = omap5xxx_dt_clk_init;
63262306a36Sopenharmony_ci	omap_secure_init();
63362306a36Sopenharmony_ci}
63462306a36Sopenharmony_ci
63562306a36Sopenharmony_civoid __init omap5_init_late(void)
63662306a36Sopenharmony_ci{
63762306a36Sopenharmony_ci	omap_pm_soc_init = omap4_pm_init;
63862306a36Sopenharmony_ci}
63962306a36Sopenharmony_ci#endif
64062306a36Sopenharmony_ci
64162306a36Sopenharmony_ci#ifdef CONFIG_SOC_DRA7XX
64262306a36Sopenharmony_civoid __init dra7xx_init_early(void)
64362306a36Sopenharmony_ci{
64462306a36Sopenharmony_ci	omap2_set_globals_tap(DRA7XX_CLASS,
64562306a36Sopenharmony_ci			      OMAP2_L4_IO_ADDRESS(DRA7XX_TAP_BASE));
64662306a36Sopenharmony_ci	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
64762306a36Sopenharmony_ci	omap2_control_base_init();
64862306a36Sopenharmony_ci	omap4_pm_init_early();
64962306a36Sopenharmony_ci	omap2_prcm_base_init();
65062306a36Sopenharmony_ci	dra7xxx_check_revision();
65162306a36Sopenharmony_ci	dra7xx_powerdomains_init();
65262306a36Sopenharmony_ci	dra7xx_clockdomains_init();
65362306a36Sopenharmony_ci	omap_clk_soc_init = dra7xx_dt_clk_init;
65462306a36Sopenharmony_ci	omap_secure_init();
65562306a36Sopenharmony_ci}
65662306a36Sopenharmony_ci
65762306a36Sopenharmony_civoid __init dra7xx_init_late(void)
65862306a36Sopenharmony_ci{
65962306a36Sopenharmony_ci	omap_pm_soc_init = omap4_pm_init;
66062306a36Sopenharmony_ci}
66162306a36Sopenharmony_ci#endif
66262306a36Sopenharmony_ci
66362306a36Sopenharmony_ci
66462306a36Sopenharmony_civoid __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
66562306a36Sopenharmony_ci				      struct omap_sdrc_params *sdrc_cs1)
66662306a36Sopenharmony_ci{
66762306a36Sopenharmony_ci	omap_sram_init();
66862306a36Sopenharmony_ci
66962306a36Sopenharmony_ci	if (cpu_is_omap24xx() || omap3_has_sdrc()) {
67062306a36Sopenharmony_ci		omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
67162306a36Sopenharmony_ci		_omap2_init_reprogram_sdrc();
67262306a36Sopenharmony_ci	}
67362306a36Sopenharmony_ci}
67462306a36Sopenharmony_ci
67562306a36Sopenharmony_ciint __init omap_clk_init(void)
67662306a36Sopenharmony_ci{
67762306a36Sopenharmony_ci	int ret = 0;
67862306a36Sopenharmony_ci
67962306a36Sopenharmony_ci	if (!omap_clk_soc_init)
68062306a36Sopenharmony_ci		return 0;
68162306a36Sopenharmony_ci
68262306a36Sopenharmony_ci	ti_clk_init_features();
68362306a36Sopenharmony_ci
68462306a36Sopenharmony_ci	omap2_clk_setup_ll_ops();
68562306a36Sopenharmony_ci
68662306a36Sopenharmony_ci	ret = omap_control_init();
68762306a36Sopenharmony_ci	if (ret)
68862306a36Sopenharmony_ci		return ret;
68962306a36Sopenharmony_ci
69062306a36Sopenharmony_ci	ret = omap_prcm_init();
69162306a36Sopenharmony_ci	if (ret)
69262306a36Sopenharmony_ci		return ret;
69362306a36Sopenharmony_ci
69462306a36Sopenharmony_ci	of_clk_init(NULL);
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ci	ti_dt_clk_init_retry_clks();
69762306a36Sopenharmony_ci
69862306a36Sopenharmony_ci	ti_dt_clockdomains_setup();
69962306a36Sopenharmony_ci
70062306a36Sopenharmony_ci	ret = omap_clk_soc_init();
70162306a36Sopenharmony_ci
70262306a36Sopenharmony_ci	return ret;
70362306a36Sopenharmony_ci}
704