forked from scorp2kk/u-boot
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
276 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
if TARGET_RK3399_ROC_PC | ||
|
||
config SYS_BOARD | ||
default "rk3399-roc-pc" | ||
|
||
config SYS_VENDOR | ||
default "rockchip" | ||
|
||
config SYS_CONFIG_NAME | ||
default "rk3399-roc-pc" | ||
|
||
config BOARD_SPECIFIC_OPTIONS # dummy | ||
def_bool y | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# | ||
# (C) Copyright 2016 Rockchip Electronics Co., Ltd | ||
# | ||
# SPDX-License-Identifier: GPL-2.0+ | ||
# | ||
|
||
obj-y += rk3399-roc-pc.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,210 @@ | ||
/* | ||
* (C) Copyright 2016 Rockchip Electronics Co., Ltd | ||
* | ||
* SPDX-License-Identifier: GPL-2.0+ | ||
*/ | ||
|
||
#include <common.h> | ||
#include <dm.h> | ||
#include <misc.h> | ||
#include <ram.h> | ||
#include <dm/pinctrl.h> | ||
#include <dm/uclass-internal.h> | ||
#include <asm/setup.h> | ||
#include <asm/arch/periph.h> | ||
#include <power/regulator.h> | ||
#include <u-boot/sha256.h> | ||
#include <usb.h> | ||
#include <dwc3-uboot.h> | ||
#include <spl.h> | ||
|
||
DECLARE_GLOBAL_DATA_PTR; | ||
|
||
#define RK3399_CPUID_OFF 0x7 | ||
#define RK3399_CPUID_LEN 0x10 | ||
|
||
int rk_board_init(void) | ||
{ | ||
struct udevice *pinctrl, *regulator; | ||
int ret; | ||
|
||
/* | ||
* The PWM does not have decicated interrupt number in dts and can | ||
* not get periph_id by pinctrl framework, so let's init them here. | ||
* The PWM2 and PWM3 are for pwm regulators. | ||
*/ | ||
ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl); | ||
if (ret) { | ||
debug("%s: Cannot find pinctrl device\n", __func__); | ||
goto out; | ||
} | ||
|
||
/* Enable pwm0 for panel backlight */ | ||
ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM0); | ||
if (ret) { | ||
debug("%s PWM0 pinctrl init fail! (ret=%d)\n", __func__, ret); | ||
goto out; | ||
} | ||
|
||
ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM2); | ||
if (ret) { | ||
debug("%s PWM2 pinctrl init fail!\n", __func__); | ||
goto out; | ||
} | ||
|
||
ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM3); | ||
if (ret) { | ||
debug("%s PWM3 pinctrl init fail!\n", __func__); | ||
goto out; | ||
} | ||
|
||
ret = regulator_get_by_platname("vcc5v0_host", ®ulator); | ||
if (ret) { | ||
debug("%s vcc5v0_host init fail! ret %d\n", __func__, ret); | ||
goto out; | ||
} | ||
|
||
ret = regulator_set_enable(regulator, true); | ||
if (ret) { | ||
debug("%s vcc5v0-host-en set fail!\n", __func__); | ||
goto out; | ||
} | ||
|
||
out: | ||
return 0; | ||
} | ||
|
||
static void setup_macaddr(void) | ||
{ | ||
#if CONFIG_IS_ENABLED(CMD_NET) | ||
int ret; | ||
const char *cpuid = env_get("cpuid#"); | ||
u8 hash[SHA256_SUM_LEN]; | ||
int size = sizeof(hash); | ||
u8 mac_addr[6]; | ||
|
||
/* Only generate a MAC address, if none is set in the environment */ | ||
if (env_get("ethaddr")) | ||
return; | ||
|
||
if (!cpuid) { | ||
debug("%s: could not retrieve 'cpuid#'\n", __func__); | ||
return; | ||
} | ||
|
||
ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, &size); | ||
if (ret) { | ||
debug("%s: failed to calculate SHA256\n", __func__); | ||
return; | ||
} | ||
|
||
/* Copy 6 bytes of the hash to base the MAC address on */ | ||
memcpy(mac_addr, hash, 6); | ||
|
||
/* Make this a valid MAC address and set it */ | ||
mac_addr[0] &= 0xfe; /* clear multicast bit */ | ||
mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ | ||
eth_env_set_enetaddr("ethaddr", mac_addr); | ||
#endif | ||
|
||
return; | ||
} | ||
|
||
static void setup_serial(void) | ||
{ | ||
#if CONFIG_IS_ENABLED(ROCKCHIP_EFUSE) | ||
struct udevice *dev; | ||
int ret, i; | ||
u8 cpuid[RK3399_CPUID_LEN]; | ||
u8 low[RK3399_CPUID_LEN/2], high[RK3399_CPUID_LEN/2]; | ||
char cpuid_str[RK3399_CPUID_LEN * 2 + 1]; | ||
u64 serialno; | ||
char serialno_str[16]; | ||
|
||
/* retrieve the device */ | ||
ret = uclass_get_device_by_driver(UCLASS_MISC, | ||
DM_GET_DRIVER(rockchip_efuse), &dev); | ||
if (ret) { | ||
debug("%s: could not find efuse device\n", __func__); | ||
return; | ||
} | ||
|
||
/* read the cpu_id range from the efuses */ | ||
ret = misc_read(dev, RK3399_CPUID_OFF, &cpuid, sizeof(cpuid)); | ||
if (ret) { | ||
debug("%s: reading cpuid from the efuses failed\n", | ||
__func__); | ||
return; | ||
} | ||
|
||
memset(cpuid_str, 0, sizeof(cpuid_str)); | ||
for (i = 0; i < 16; i++) | ||
sprintf(&cpuid_str[i * 2], "%02x", cpuid[i]); | ||
|
||
debug("cpuid: %s\n", cpuid_str); | ||
|
||
/* | ||
* Mix the cpuid bytes using the same rules as in | ||
* ${linux}/drivers/soc/rockchip/rockchip-cpuinfo.c | ||
*/ | ||
for (i = 0; i < 8; i++) { | ||
low[i] = cpuid[1 + (i << 1)]; | ||
high[i] = cpuid[i << 1]; | ||
} | ||
|
||
serialno = crc32_no_comp(0, low, 8); | ||
serialno |= (u64)crc32_no_comp(serialno, high, 8) << 32; | ||
snprintf(serialno_str, sizeof(serialno_str), "%llx", serialno); | ||
|
||
env_set("cpuid#", cpuid_str); | ||
env_set("serial#", serialno_str); | ||
#endif | ||
|
||
return; | ||
} | ||
|
||
int misc_init_r(void) | ||
{ | ||
setup_serial(); | ||
setup_macaddr(); | ||
|
||
return 0; | ||
} | ||
|
||
#ifdef CONFIG_SERIAL_TAG | ||
void get_board_serial(struct tag_serialnr *serialnr) | ||
{ | ||
char *serial_string; | ||
u64 serial = 0; | ||
|
||
serial_string = env_get("serial#"); | ||
|
||
if (serial_string) | ||
serial = simple_strtoull(serial_string, NULL, 16); | ||
|
||
serialnr->high = (u32)(serial >> 32); | ||
serialnr->low = (u32)(serial & 0xffffffff); | ||
} | ||
#endif | ||
|
||
#ifdef CONFIG_USB_DWC3 | ||
static struct dwc3_device dwc3_device_data = { | ||
.maximum_speed = USB_SPEED_HIGH, | ||
.base = 0xfe800000, | ||
.dr_mode = USB_DR_MODE_PERIPHERAL, | ||
.index = 0, | ||
.dis_u2_susphy_quirk = 1, | ||
.usb2_phyif_utmi_width = 16, | ||
}; | ||
|
||
int usb_gadget_handle_interrupts(void) | ||
{ | ||
dwc3_uboot_handle_interrupt(0); | ||
return 0; | ||
} | ||
|
||
int board_usb_init(int index, enum usb_init_type init) | ||
{ | ||
return dwc3_uboot_init(&dwc3_device_data); | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/* | ||
* (C) Copyright 2016 Rockchip Electronics Co., Ltd | ||
* | ||
* SPDX-License-Identifier: GPL-2.0+ | ||
*/ | ||
|
||
#ifndef __RK3399_ROC_PC_H | ||
#define __RK3399_ROC_PC_H | ||
|
||
#include <configs/rk3399_common.h> | ||
|
||
/* | ||
# ifndef CONFIG_SPL_BUILD | ||
# undef CONFIG_BOOTCOMMAND | ||
# define CONFIG_BOOTCOMMAND RKIMG_BOOTCOMMAND | ||
# endif | ||
*/ | ||
|
||
#define CONFIG_MMC_SDHCI_SDMA | ||
#define CONFIG_SYS_MMC_ENV_DEV 0 | ||
|
||
#define SDRAM_BANK_SIZE (4UL << 30) | ||
#define CONFIG_MISC_INIT_R | ||
#define CONFIG_SERIAL_TAG | ||
#define CONFIG_ENV_OVERWRITE | ||
|
||
#define CONFIG_BMP_16BPP | ||
#define CONFIG_BMP_24BPP | ||
#define CONFIG_BMP_32BPP | ||
|
||
#define ROCKCHIP_DEVICE_SETTINGS \ | ||
"stdin=serial,usbkbd\0" \ | ||
"stdout=serial,vidconsole\0" \ | ||
"stderr=serial,vidconsole\0" | ||
|
||
#endif |