xref: /rk3399_rockchip-uboot/arch/arm/mach-uniphier/init.h (revision c72f4d4c2ebb3be9797ef6cd7dcbc2124c825f7a)
1107b3fb4SMasahiro Yamada /*
2a74c28a0SMasahiro Yamada  * Copyright (C) 2015-2016 Socionext Inc.
3a74c28a0SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4107b3fb4SMasahiro Yamada  *
5107b3fb4SMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
6107b3fb4SMasahiro Yamada  */
7107b3fb4SMasahiro Yamada 
8107b3fb4SMasahiro Yamada #ifndef __MACH_INIT_H
9107b3fb4SMasahiro Yamada #define __MACH_INIT_H
10107b3fb4SMasahiro Yamada 
114021b438SMasahiro Yamada #include <linux/types.h>
124021b438SMasahiro Yamada 
1346abfcc9SMasahiro Yamada #define UNIPHIER_MAX_NR_DRAM_CH		3
1446abfcc9SMasahiro Yamada 
1546abfcc9SMasahiro Yamada struct uniphier_dram_ch {
1646abfcc9SMasahiro Yamada 	unsigned long base;
1746abfcc9SMasahiro Yamada 	unsigned long size;
1846abfcc9SMasahiro Yamada 	unsigned int width;
1946abfcc9SMasahiro Yamada };
2046abfcc9SMasahiro Yamada 
21107b3fb4SMasahiro Yamada struct uniphier_board_data {
22107b3fb4SMasahiro Yamada 	unsigned int dram_freq;
2346abfcc9SMasahiro Yamada 	unsigned int dram_nr_ch;
2446abfcc9SMasahiro Yamada 	struct uniphier_dram_ch dram_ch[UNIPHIER_MAX_NR_DRAM_CH];
25a74c28a0SMasahiro Yamada 	unsigned int flags;
26f6bbec3dSMasahiro Yamada 
27682e09ffSMasahiro Yamada #define UNIPHIER_BD_DPLL_SSC_GET_RATE(f)	(((f) >> 8) & 0x3)
28682e09ffSMasahiro Yamada #define UNIPHIER_BD_DPLL_SSC_RATE(r)		(((r) & 0x3) << 8)
29682e09ffSMasahiro Yamada 
30a74c28a0SMasahiro Yamada #define UNIPHIER_BD_DDR3PLUS			BIT(2)
31f6bbec3dSMasahiro Yamada 
32f6bbec3dSMasahiro Yamada #define UNIPHIER_BD_BOARD_GET_TYPE(f)		((f) & 0x3)
33f6bbec3dSMasahiro Yamada #define UNIPHIER_BD_BOARD_LD20_REF		0	/* LD20 reference */
34f6bbec3dSMasahiro Yamada #define UNIPHIER_BD_BOARD_LD20_GLOBAL		1	/* LD20 TV Set */
35f6bbec3dSMasahiro Yamada #define UNIPHIER_BD_BOARD_LD21_REF		2	/* LD21 reference */
36f6bbec3dSMasahiro Yamada #define UNIPHIER_BD_BOARD_LD21_GLOBAL		3	/* LD21 TV Set */
37107b3fb4SMasahiro Yamada };
38107b3fb4SMasahiro Yamada 
39107b3fb4SMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void);
40107b3fb4SMasahiro Yamada 
415b660066SMasahiro Yamada int uniphier_sld3_init(const struct uniphier_board_data *bd);
425b660066SMasahiro Yamada int uniphier_ld4_init(const struct uniphier_board_data *bd);
435b660066SMasahiro Yamada int uniphier_pro4_init(const struct uniphier_board_data *bd);
445b660066SMasahiro Yamada int uniphier_sld8_init(const struct uniphier_board_data *bd);
455b660066SMasahiro Yamada int uniphier_pro5_init(const struct uniphier_board_data *bd);
465b660066SMasahiro Yamada int uniphier_pxs2_init(const struct uniphier_board_data *bd);
47667dbcd0SMasahiro Yamada int uniphier_ld11_init(const struct uniphier_board_data *bd);
489d0c2cebSMasahiro Yamada int uniphier_ld20_init(const struct uniphier_board_data *bd);
49107b3fb4SMasahiro Yamada 
50107b3fb4SMasahiro Yamada #if defined(CONFIG_MICRO_SUPPORT_CARD)
515b660066SMasahiro Yamada int uniphier_sbc_init_admulti(const struct uniphier_board_data *bd);
525b660066SMasahiro Yamada int uniphier_sbc_init_savepin(const struct uniphier_board_data *bd);
535d0607c5SMasahiro Yamada int uniphier_ld4_sbc_init(const struct uniphier_board_data *bd);
545d0607c5SMasahiro Yamada int uniphier_pxs2_sbc_init(const struct uniphier_board_data *bd);
55107b3fb4SMasahiro Yamada #else
565b660066SMasahiro Yamada static inline int uniphier_sbc_init_admulti(
575b660066SMasahiro Yamada 					const struct uniphier_board_data *bd)
58107b3fb4SMasahiro Yamada {
59107b3fb4SMasahiro Yamada 	return 0;
60107b3fb4SMasahiro Yamada }
61107b3fb4SMasahiro Yamada 
625b660066SMasahiro Yamada static inline int uniphier_sbc_init_savepin(
635b660066SMasahiro Yamada 					const struct uniphier_board_data *bd)
64107b3fb4SMasahiro Yamada {
65107b3fb4SMasahiro Yamada 	return 0;
66107b3fb4SMasahiro Yamada }
67107b3fb4SMasahiro Yamada 
685d0607c5SMasahiro Yamada static inline int uniphier_ld4_sbc_init(const struct uniphier_board_data *bd)
695d0607c5SMasahiro Yamada {
705d0607c5SMasahiro Yamada 	return 0;
715d0607c5SMasahiro Yamada }
725d0607c5SMasahiro Yamada 
735d0607c5SMasahiro Yamada static inline int uniphier_pxs2_sbc_init(const struct uniphier_board_data *bd)
74107b3fb4SMasahiro Yamada {
75107b3fb4SMasahiro Yamada 	return 0;
76107b3fb4SMasahiro Yamada }
77107b3fb4SMasahiro Yamada #endif
78107b3fb4SMasahiro Yamada 
795b660066SMasahiro Yamada int uniphier_sld3_bcu_init(const struct uniphier_board_data *bd);
805b660066SMasahiro Yamada int uniphier_ld4_bcu_init(const struct uniphier_board_data *bd);
81107b3fb4SMasahiro Yamada 
82107b3fb4SMasahiro Yamada int memconf_init(const struct uniphier_board_data *bd);
835b660066SMasahiro Yamada int uniphier_sld3_memconf_init(const struct uniphier_board_data *bd);
845b660066SMasahiro Yamada int uniphier_pxs2_memconf_init(const struct uniphier_board_data *bd);
85107b3fb4SMasahiro Yamada 
866a3e4274SMasahiro Yamada int uniphier_sld3_dpll_init(const struct uniphier_board_data *bd);
876a3e4274SMasahiro Yamada int uniphier_ld4_dpll_init(const struct uniphier_board_data *bd);
886a3e4274SMasahiro Yamada int uniphier_pro4_dpll_init(const struct uniphier_board_data *bd);
896a3e4274SMasahiro Yamada int uniphier_sld8_dpll_init(const struct uniphier_board_data *bd);
90*c72f4d4cSMasahiro Yamada int uniphier_ld11_dpll_init(const struct uniphier_board_data *bd);
91682e09ffSMasahiro Yamada int uniphier_ld20_dpll_init(const struct uniphier_board_data *bd);
92107b3fb4SMasahiro Yamada 
935b660066SMasahiro Yamada int uniphier_ld4_early_clk_init(const struct uniphier_board_data *bd);
945b660066SMasahiro Yamada int uniphier_pro5_early_clk_init(const struct uniphier_board_data *bd);
955b660066SMasahiro Yamada int uniphier_pxs2_early_clk_init(const struct uniphier_board_data *bd);
96667dbcd0SMasahiro Yamada int uniphier_ld11_early_clk_init(const struct uniphier_board_data *bd);
979d0c2cebSMasahiro Yamada int uniphier_ld20_early_clk_init(const struct uniphier_board_data *bd);
98107b3fb4SMasahiro Yamada 
995b660066SMasahiro Yamada int uniphier_ld4_umc_init(const struct uniphier_board_data *bd);
1005b660066SMasahiro Yamada int uniphier_pro4_umc_init(const struct uniphier_board_data *bd);
1015b660066SMasahiro Yamada int uniphier_sld8_umc_init(const struct uniphier_board_data *bd);
1025b660066SMasahiro Yamada int uniphier_pxs2_umc_init(const struct uniphier_board_data *bd);
1039d0c2cebSMasahiro Yamada int uniphier_ld20_umc_init(const struct uniphier_board_data *bd);
104667dbcd0SMasahiro Yamada int uniphier_ld11_umc_init(const struct uniphier_board_data *bd);
105107b3fb4SMasahiro Yamada 
1066a3e4274SMasahiro Yamada void uniphier_sld3_pll_init(void);
1076a3e4274SMasahiro Yamada void uniphier_ld4_pll_init(void);
1086a3e4274SMasahiro Yamada void uniphier_pro4_pll_init(void);
109*c72f4d4cSMasahiro Yamada void uniphier_ld11_pll_init(void);
110682e09ffSMasahiro Yamada int uniphier_ld20_pll_init(const struct uniphier_board_data *bd);
1116a3e4274SMasahiro Yamada 
1125b660066SMasahiro Yamada void uniphier_ld4_clk_init(void);
1135b660066SMasahiro Yamada void uniphier_pro4_clk_init(void);
1145b660066SMasahiro Yamada void uniphier_pro5_clk_init(void);
1155b660066SMasahiro Yamada void uniphier_pxs2_clk_init(void);
116667dbcd0SMasahiro Yamada void uniphier_ld11_clk_init(void);
1179d0c2cebSMasahiro Yamada void uniphier_ld20_clk_init(void);
1189d0c2cebSMasahiro Yamada 
1195ac9dfbeSMasahiro Yamada int uniphier_pin_init(const char *pinconfig_name);
120b2916712SMasahiro Yamada void uniphier_smp_kick_all_cpus(void);
1219d0c2cebSMasahiro Yamada void cci500_init(int nr_slaves);
122107b3fb4SMasahiro Yamada 
123107b3fb4SMasahiro Yamada #define pr_err(fmt, args...)	printf(fmt, ##args)
124107b3fb4SMasahiro Yamada 
125107b3fb4SMasahiro Yamada #endif /* __MACH_INIT_H */
126