187e29878SAndy Fleming /*
287e29878SAndy Fleming * Based on corenet_ds.c
387e29878SAndy Fleming *
487e29878SAndy Fleming * SPDX-License-Identifier: GPL-2.0+
587e29878SAndy Fleming */
687e29878SAndy Fleming
787e29878SAndy Fleming #include <common.h>
887e29878SAndy Fleming #include <command.h>
987e29878SAndy Fleming #include <netdev.h>
1087e29878SAndy Fleming #include <linux/compiler.h>
1187e29878SAndy Fleming #include <asm/mmu.h>
1287e29878SAndy Fleming #include <asm/processor.h>
1387e29878SAndy Fleming #include <asm/cache.h>
1487e29878SAndy Fleming #include <asm/immap_85xx.h>
1587e29878SAndy Fleming #include <asm/fsl_law.h>
1687e29878SAndy Fleming #include <asm/fsl_serdes.h>
1787e29878SAndy Fleming #include <asm/fsl_portals.h>
1887e29878SAndy Fleming #include <asm/fsl_liodn.h>
1987e29878SAndy Fleming #include <fm_eth.h>
2087e29878SAndy Fleming #include <pci.h>
2187e29878SAndy Fleming
2287e29878SAndy Fleming #include "cyrus.h"
2387e29878SAndy Fleming #include "../common/eeprom.h"
2487e29878SAndy Fleming
2587e29878SAndy Fleming DECLARE_GLOBAL_DATA_PTR;
2687e29878SAndy Fleming
2787e29878SAndy Fleming #define GPIO_OPENDRAIN 0x30000000
2887e29878SAndy Fleming #define GPIO_DIR 0x3c000004
2987e29878SAndy Fleming #define GPIO_INITIAL 0x30000000
3087e29878SAndy Fleming #define GPIO_VGA_SWITCH 0x00001000
3187e29878SAndy Fleming
checkboard(void)3287e29878SAndy Fleming int checkboard(void)
3387e29878SAndy Fleming {
3487e29878SAndy Fleming printf("Board: CYRUS\n");
3587e29878SAndy Fleming
3687e29878SAndy Fleming return 0;
3787e29878SAndy Fleming }
3887e29878SAndy Fleming
board_early_init_f(void)3987e29878SAndy Fleming int board_early_init_f(void)
4087e29878SAndy Fleming {
4187e29878SAndy Fleming ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
4287e29878SAndy Fleming ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
4387e29878SAndy Fleming
4487e29878SAndy Fleming /*
4587e29878SAndy Fleming * Only use DDR1_MCK0/3 and DDR2_MCK0/3
4687e29878SAndy Fleming * disable DDR1_MCK1/2/4/5 and DDR2_MCK1/2/4/5 to reduce
4787e29878SAndy Fleming * the noise introduced by these unterminated and unused clock pairs.
4887e29878SAndy Fleming */
4987e29878SAndy Fleming setbits_be32(&gur->ddrclkdr, 0x001B001B);
5087e29878SAndy Fleming
5187e29878SAndy Fleming /* Set GPIO reset lines to open-drain, tristate */
5287e29878SAndy Fleming setbits_be32(&pgpio->gpdat, GPIO_INITIAL);
5387e29878SAndy Fleming setbits_be32(&pgpio->gpodr, GPIO_OPENDRAIN);
5487e29878SAndy Fleming
5587e29878SAndy Fleming /* Set GPIO Direction */
5687e29878SAndy Fleming setbits_be32(&pgpio->gpdir, GPIO_DIR);
5787e29878SAndy Fleming
5887e29878SAndy Fleming return 0;
5987e29878SAndy Fleming }
6087e29878SAndy Fleming
board_early_init_r(void)6187e29878SAndy Fleming int board_early_init_r(void)
6287e29878SAndy Fleming {
6387e29878SAndy Fleming fsl_lbc_t *lbc = LBC_BASE_ADDR;
6487e29878SAndy Fleming
6587e29878SAndy Fleming out_be32(&lbc->lbcr, 0);
6687e29878SAndy Fleming /* 1 clock LALE cycle */
6787e29878SAndy Fleming out_be32(&lbc->lcrr, 0x80000000 | CONFIG_SYS_LBC_LCRR);
6887e29878SAndy Fleming
6987e29878SAndy Fleming set_liodns();
7087e29878SAndy Fleming
7187e29878SAndy Fleming #ifdef CONFIG_SYS_DPAA_QBMAN
7287e29878SAndy Fleming setup_portals();
7387e29878SAndy Fleming #endif
7487e29878SAndy Fleming print_lbc_regs();
7587e29878SAndy Fleming return 0;
7687e29878SAndy Fleming }
7787e29878SAndy Fleming
misc_init_r(void)7887e29878SAndy Fleming int misc_init_r(void)
7987e29878SAndy Fleming {
8087e29878SAndy Fleming return 0;
8187e29878SAndy Fleming }
8287e29878SAndy Fleming
ft_board_setup(void * blob,bd_t * bd)8387e29878SAndy Fleming int ft_board_setup(void *blob, bd_t *bd)
8487e29878SAndy Fleming {
8587e29878SAndy Fleming phys_addr_t base;
8687e29878SAndy Fleming phys_size_t size;
8787e29878SAndy Fleming
8887e29878SAndy Fleming ft_cpu_setup(blob, bd);
8987e29878SAndy Fleming
90*723806ccSSimon Glass base = env_get_bootm_low();
91*723806ccSSimon Glass size = env_get_bootm_size();
9287e29878SAndy Fleming
9387e29878SAndy Fleming fdt_fixup_memory(blob, (u64)base, (u64)size);
9487e29878SAndy Fleming
9587e29878SAndy Fleming #ifdef CONFIG_PCI
9687e29878SAndy Fleming pci_of_setup(blob, bd);
9787e29878SAndy Fleming #endif
9887e29878SAndy Fleming
9987e29878SAndy Fleming fdt_fixup_liodn(blob);
100a5c289b9SSriram Dash fsl_fdt_fixup_dr_usb(blob, bd);
10187e29878SAndy Fleming
10287e29878SAndy Fleming #ifdef CONFIG_SYS_DPAA_FMAN
10387e29878SAndy Fleming fdt_fixup_fman_ethernet(blob);
10487e29878SAndy Fleming #endif
10587e29878SAndy Fleming
10687e29878SAndy Fleming return 0;
10787e29878SAndy Fleming }
10887e29878SAndy Fleming
mac_read_from_eeprom(void)10987e29878SAndy Fleming int mac_read_from_eeprom(void)
11087e29878SAndy Fleming {
11187e29878SAndy Fleming init_eeprom(CONFIG_SYS_EEPROM_BUS_NUM,
11287e29878SAndy Fleming CONFIG_SYS_I2C_EEPROM_ADDR,
11387e29878SAndy Fleming CONFIG_SYS_I2C_EEPROM_ADDR_LEN);
11487e29878SAndy Fleming
11587e29878SAndy Fleming return mac_read_from_eeprom_common();
11687e29878SAndy Fleming }
117