xref: /openbmc/u-boot/arch/arm/mach-exynos/system.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
277b55e8cSThomas Abraham /*
377b55e8cSThomas Abraham  * Copyright (C) 2012 Samsung Electronics
477b55e8cSThomas Abraham  * Donghwa Lee <dh09.lee@samsung.com>
577b55e8cSThomas Abraham  */
677b55e8cSThomas Abraham 
777b55e8cSThomas Abraham #include <common.h>
877b55e8cSThomas Abraham #include <asm/io.h>
977b55e8cSThomas Abraham #include <asm/arch/system.h>
1077b55e8cSThomas Abraham 
exynos5_set_usbhost_mode(unsigned int mode)1177b55e8cSThomas Abraham static void exynos5_set_usbhost_mode(unsigned int mode)
1277b55e8cSThomas Abraham {
1377b55e8cSThomas Abraham 	struct exynos5_sysreg *sysreg =
1477b55e8cSThomas Abraham 		(struct exynos5_sysreg *)samsung_get_base_sysreg();
1577b55e8cSThomas Abraham 
1677b55e8cSThomas Abraham 	/* Setting USB20PHY_CONFIG register to USB 2.0 HOST link */
1777b55e8cSThomas Abraham 	if (mode == USB20_PHY_CFG_HOST_LINK_EN) {
1877b55e8cSThomas Abraham 		setbits_le32(&sysreg->usb20phy_cfg,
1977b55e8cSThomas Abraham 				USB20_PHY_CFG_HOST_LINK_EN);
2077b55e8cSThomas Abraham 	} else {
2177b55e8cSThomas Abraham 		clrbits_le32(&sysreg->usb20phy_cfg,
2277b55e8cSThomas Abraham 				USB20_PHY_CFG_HOST_LINK_EN);
2377b55e8cSThomas Abraham 	}
2477b55e8cSThomas Abraham }
2577b55e8cSThomas Abraham 
set_usbhost_mode(unsigned int mode)2677b55e8cSThomas Abraham void set_usbhost_mode(unsigned int mode)
2777b55e8cSThomas Abraham {
2877b55e8cSThomas Abraham 	if (cpu_is_exynos5())
2977b55e8cSThomas Abraham 		exynos5_set_usbhost_mode(mode);
3077b55e8cSThomas Abraham }
3177b55e8cSThomas Abraham 
exynos4_set_system_display(void)3277b55e8cSThomas Abraham static void exynos4_set_system_display(void)
3377b55e8cSThomas Abraham {
3477b55e8cSThomas Abraham 	struct exynos4_sysreg *sysreg =
3577b55e8cSThomas Abraham 	    (struct exynos4_sysreg *)samsung_get_base_sysreg();
3677b55e8cSThomas Abraham 	unsigned int cfg = 0;
3777b55e8cSThomas Abraham 
3877b55e8cSThomas Abraham 	/*
3977b55e8cSThomas Abraham 	 * system register path set
4077b55e8cSThomas Abraham 	 * 0: MIE/MDNIE
4177b55e8cSThomas Abraham 	 * 1: FIMD Bypass
4277b55e8cSThomas Abraham 	 */
4377b55e8cSThomas Abraham 	cfg = readl(&sysreg->display_ctrl);
4477b55e8cSThomas Abraham 	cfg |= (1 << 1);
4577b55e8cSThomas Abraham 	writel(cfg, &sysreg->display_ctrl);
4677b55e8cSThomas Abraham }
4777b55e8cSThomas Abraham 
exynos5_set_system_display(void)4877b55e8cSThomas Abraham static void exynos5_set_system_display(void)
4977b55e8cSThomas Abraham {
5077b55e8cSThomas Abraham 	struct exynos5_sysreg *sysreg =
5177b55e8cSThomas Abraham 	    (struct exynos5_sysreg *)samsung_get_base_sysreg();
5277b55e8cSThomas Abraham 	unsigned int cfg = 0;
5377b55e8cSThomas Abraham 
5477b55e8cSThomas Abraham 	/*
5577b55e8cSThomas Abraham 	 * system register path set
5677b55e8cSThomas Abraham 	 * 0: MIE/MDNIE
5777b55e8cSThomas Abraham 	 * 1: FIMD Bypass
5877b55e8cSThomas Abraham 	 */
5977b55e8cSThomas Abraham 	cfg = readl(&sysreg->disp1blk_cfg);
6077b55e8cSThomas Abraham 	cfg |= (1 << 15);
6177b55e8cSThomas Abraham 	writel(cfg, &sysreg->disp1blk_cfg);
6277b55e8cSThomas Abraham }
6377b55e8cSThomas Abraham 
set_system_display_ctrl(void)6477b55e8cSThomas Abraham void set_system_display_ctrl(void)
6577b55e8cSThomas Abraham {
6677b55e8cSThomas Abraham 	if (cpu_is_exynos4())
6777b55e8cSThomas Abraham 		exynos4_set_system_display();
6877b55e8cSThomas Abraham 	else
6977b55e8cSThomas Abraham 		exynos5_set_system_display();
7077b55e8cSThomas Abraham }
71