mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2026-03-05 08:51:31 +01:00
board: qca: devsoc: add reset sequence for AQ & QCA808X
Change-Id: I57133628314a7291de9e8b4bdb2ba08c31424571 Signed-off-by: Ram Kumar D <quic_ramd@quicinc.com>
This commit is contained in:
parent
84932a6b6f
commit
e4eb0bb018
4 changed files with 175 additions and 4 deletions
|
|
@ -227,7 +227,7 @@ int board_init(void)
|
|||
printf("WARN: ipq_board_usb_init failed\n");
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IPQ9574_EDMA
|
||||
#if defined(CONFIG_IPQ9574_EDMA) || defined(CONFIG_DEVSOC_EDMA)
|
||||
aquantia_phy_reset_init();
|
||||
#endif
|
||||
disable_audio_clks();
|
||||
|
|
|
|||
|
|
@ -890,7 +890,7 @@ static int do_bootipq(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
|||
|
||||
ret = qca_scm_call(SCM_SVC_FUSE, QFPROM_IS_AUTHENTICATE_CMD, &buf, sizeof(char));
|
||||
|
||||
#ifdef CONFIG_IPQ9574_EDMA
|
||||
#if defined(CONFIG_IPQ9574_EDMA) || defined(CONFIG_DEVSOC_EDMA)
|
||||
aquantia_phy_reset_init_done();
|
||||
#endif
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#define FLASH_SEL_BIT 7
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
static int aq_phy_initialised = 0;
|
||||
extern int devsoc_edma_init(void *cfg);
|
||||
extern int ipq_spi_init(u16);
|
||||
|
||||
|
|
@ -766,9 +767,160 @@ void set_flash_secondary_type(qca_smem_flash_info_t *smem)
|
|||
};
|
||||
|
||||
#ifdef CONFIG_DEVSOC_EDMA
|
||||
int get_mdc_mdio_gpio(int mdc_mdio_gpio[2])
|
||||
{
|
||||
int mdc_mdio_gpio_cnt = 2, node;
|
||||
int res = -1;
|
||||
node = fdt_path_offset(gd->fdt_blob, "/ess-switch");
|
||||
if (node >= 0) {
|
||||
res = fdtdec_get_int_array(gd->fdt_blob, node, "mdc_mdio_gpio",
|
||||
(u32 *)mdc_mdio_gpio, mdc_mdio_gpio_cnt);
|
||||
if (res >= 0)
|
||||
return mdc_mdio_gpio_cnt;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void set_function_select_as_mdc_mdio(void)
|
||||
{
|
||||
int mdc_mdio_gpio[2] = {-1, -1}, mdc_mdio_gpio_cnt, i;
|
||||
unsigned int *mdc_mdio_gpio_base;
|
||||
uint32_t cfg;
|
||||
|
||||
mdc_mdio_gpio_cnt = get_mdc_mdio_gpio(mdc_mdio_gpio);
|
||||
if (mdc_mdio_gpio_cnt >= 1) {
|
||||
for (i = 0; i < mdc_mdio_gpio_cnt; i++) {
|
||||
if (mdc_mdio_gpio[i] >=0) {
|
||||
mdc_mdio_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(mdc_mdio_gpio[i]);
|
||||
if (i == 0) {
|
||||
cfg = GPIO_DRV_8_MA | MDC_MDIO_FUNC_SEL | GPIO_NO_PULL;
|
||||
writel(cfg, mdc_mdio_gpio_base);
|
||||
} else {
|
||||
cfg = GPIO_DRV_8_MA | MDC_MDIO_FUNC_SEL | GPIO_PULL_UP;
|
||||
writel(cfg, mdc_mdio_gpio_base);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int get_aquantia_gpio(int aquantia_gpio[2])
|
||||
{
|
||||
int aquantia_gpio_cnt = -1, node;
|
||||
int res = -1;
|
||||
|
||||
node = fdt_path_offset(gd->fdt_blob, "/ess-switch");
|
||||
if (node >= 0) {
|
||||
aquantia_gpio_cnt = fdtdec_get_uint(gd->fdt_blob, node, "aquantia_gpio_cnt", -1);
|
||||
if (aquantia_gpio_cnt >= 1) {
|
||||
res = fdtdec_get_int_array(gd->fdt_blob, node, "aquantia_gpio",
|
||||
(u32 *)aquantia_gpio, aquantia_gpio_cnt);
|
||||
if (res >= 0)
|
||||
return aquantia_gpio_cnt;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
int get_qca808x_gpio(int qca808x_gpio[2])
|
||||
{
|
||||
int qca808x_gpio_cnt = -1, node;
|
||||
int res = -1;
|
||||
|
||||
node = fdt_path_offset(gd->fdt_blob, "/ess-switch");
|
||||
if (node >= 0) {
|
||||
qca808x_gpio_cnt = fdtdec_get_uint(gd->fdt_blob, node, "qca808x_gpio_cnt", -1);
|
||||
if (qca808x_gpio_cnt >= 1) {
|
||||
res = fdtdec_get_int_array(gd->fdt_blob, node, "qca808x_gpio",
|
||||
(u32 *)qca808x_gpio, qca808x_gpio_cnt);
|
||||
if (res >= 0)
|
||||
return qca808x_gpio_cnt;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void aquantia_phy_reset_init(void)
|
||||
{
|
||||
int aquantia_gpio[2] = {-1, -1}, aquantia_gpio_cnt, i;
|
||||
unsigned int *aquantia_gpio_base;
|
||||
uint32_t cfg;
|
||||
|
||||
if (!aq_phy_initialised) {
|
||||
aquantia_gpio_cnt = get_aquantia_gpio(aquantia_gpio);
|
||||
if (aquantia_gpio_cnt >= 1) {
|
||||
for (i = 0; i < aquantia_gpio_cnt; i++) {
|
||||
if (aquantia_gpio[i] >= 0) {
|
||||
aquantia_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(aquantia_gpio[i]);
|
||||
cfg = GPIO_OE | GPIO_DRV_8_MA | GPIO_PULL_UP;
|
||||
writel(cfg, aquantia_gpio_base);
|
||||
}
|
||||
}
|
||||
}
|
||||
aq_phy_initialised = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void qca808x_phy_reset_init(void)
|
||||
{
|
||||
int qca808x_gpio[2] = {-1, -1}, qca808x_gpio_cnt, i;
|
||||
unsigned int *qca808x_gpio_base;
|
||||
uint32_t cfg;
|
||||
|
||||
qca808x_gpio_cnt = get_qca808x_gpio(qca808x_gpio);
|
||||
if (qca808x_gpio_cnt >= 1) {
|
||||
for (i = 0; i < qca808x_gpio_cnt; i++) {
|
||||
if (qca808x_gpio[i] >= 0) {
|
||||
qca808x_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(qca808x_gpio[i]);
|
||||
cfg = GPIO_OE | GPIO_DRV_8_MA | GPIO_PULL_UP;
|
||||
writel(cfg, qca808x_gpio_base);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void aquantia_phy_reset_init_done(void)
|
||||
{
|
||||
int aquantia_gpio[2] = {-1, -1}, aquantia_gpio_cnt, i;
|
||||
|
||||
aquantia_gpio_cnt = get_aquantia_gpio(aquantia_gpio);
|
||||
if (aquantia_gpio_cnt >= 1) {
|
||||
for (i = 0; i < aquantia_gpio_cnt; i++)
|
||||
gpio_set_value(aquantia_gpio[i], 0x1);
|
||||
}
|
||||
}
|
||||
|
||||
void qca808x_phy_reset_init_done(void)
|
||||
{
|
||||
int qca808x_gpio[2] = {-1, -1}, qca808x_gpio_cnt, i;
|
||||
|
||||
qca808x_gpio_cnt = get_qca808x_gpio(qca808x_gpio);
|
||||
if (qca808x_gpio_cnt >= 1) {
|
||||
for (i = 0; i < qca808x_gpio_cnt; i++)
|
||||
gpio_set_value(qca808x_gpio[i], 0x1);
|
||||
}
|
||||
}
|
||||
|
||||
void bring_phy_out_of_reset(void)
|
||||
{
|
||||
aquantia_phy_reset_init();
|
||||
qca808x_phy_reset_init();
|
||||
mdelay(500);
|
||||
aquantia_phy_reset_init_done();
|
||||
qca808x_phy_reset_init_done();
|
||||
mdelay(500);
|
||||
}
|
||||
|
||||
void devsoc_eth_initialize(void)
|
||||
{
|
||||
eth_clock_init();
|
||||
|
||||
set_function_select_as_mdc_mdio();
|
||||
|
||||
bring_phy_out_of_reset();
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
|
|
|
|||
|
|
@ -104,8 +104,6 @@ extern const add_node_t add_fdt_node[];
|
|||
/*
|
||||
* weak function
|
||||
*/
|
||||
__weak void aquantia_phy_reset_init_done(void) {}
|
||||
__weak void aquantia_phy_reset_init(void) {}
|
||||
__weak void qgic_init(void) {}
|
||||
__weak void handle_noc_err(void) {}
|
||||
__weak void board_pcie_clock_init(int id) {}
|
||||
|
|
@ -145,6 +143,27 @@ enum pcie_port_lane_mode_t{
|
|||
#define PCIE_1_CLOCK_DISABLE_BIT 12
|
||||
#define PCIE_2_CLOCK_DISABLE_BIT 10
|
||||
|
||||
/*
|
||||
* GPIO functional configs
|
||||
*/
|
||||
#define GPIO_DRV_2_MA 0x0 << 6
|
||||
#define GPIO_DRV_4_MA 0x1 << 6
|
||||
#define GPIO_DRV_6_MA 0x2 << 6
|
||||
#define GPIO_DRV_8_MA 0x3 << 6
|
||||
#define GPIO_DRV_10_MA 0x4 << 6
|
||||
#define GPIO_DRV_12_MA 0x5 << 6
|
||||
#define GPIO_DRV_14_MA 0x6 << 6
|
||||
#define GPIO_DRV_16_MA 0x7 << 6
|
||||
|
||||
#define GPIO_OE 0x1 << 9
|
||||
|
||||
#define GPIO_NO_PULL 0x0
|
||||
#define GPIO_PULL_DOWN 0x1
|
||||
#define GPIO_KEEPER 0x2
|
||||
#define GPIO_PULL_UP 0x3
|
||||
|
||||
#define MDC_MDIO_FUNC_SEL 0x1 << 2
|
||||
|
||||
/*
|
||||
* SMEM
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue