ADD: added hw17 platform and cleaned up naming of nm boards
BugzId: 70910
This commit is contained in:
parent
1ffa09d30f
commit
8efea863e6
|
|
@ -84,8 +84,8 @@ dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \
|
|||
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += \
|
||||
armada-385-hw14.dtb \
|
||||
armada-385-nbhw18-v2.dtb \
|
||||
armada-385-nbhw17-v1.dtb \
|
||||
armada-385-hw18.dtb \
|
||||
armada-385-hw17.dtb \
|
||||
armada-3720-db.dtb \
|
||||
armada-3720-espressobin.dtb \
|
||||
armada-375-db.dtb \
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Device Tree file for the NetModule NBHW18-V2 (NB1800) base variant
|
||||
* Device Tree file for the NetModule HW14 (NB1800) base variant
|
||||
*
|
||||
* Copyright (C) 2016 NetModule
|
||||
*
|
||||
|
|
|
|||
|
|
@ -44,6 +44,13 @@
|
|||
rst_fpga = <&gpio1 12 GPIO_ACTIVE_LOW 1>;
|
||||
rst_eth_phy = <&gpio0 21 GPIO_ACTIVE_LOW 1>;
|
||||
reset_button = <&gpio1 24 GPIO_ACTIVE_LOW 1>;
|
||||
gps_ant_pwr_en = <&gpiofpga 65 GPIO_ACTIVE_HIGH 0>;
|
||||
mdio_phy_con = <&gpiofpga 66 GPIO_ACTIVE_LOW 0>;
|
||||
mdio_ext_con = <&gpiofpga 67 GPIO_ACTIVE_LOW 0>;
|
||||
sata_pwr_en = <&gpiofpga 68 GPIO_ACTIVE_HIGH 0>;
|
||||
serdes_sel_pci = <&gpiofpga 69 GPIO_ACTIVE_HIGH 0>;
|
||||
serdes_en = <&gpiofpga 70 GPIO_ACTIVE_LOW 1>;
|
||||
rst_ext = <&gpiofpga 71 GPIO_ACTIVE_LOW 1>;
|
||||
};
|
||||
|
||||
gpiofpga: gpio@fd0000000 {
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "armada-385-nbhw17-common.dtsi"
|
||||
#include "armada-385-hw17-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "NetModule Router NBHW17 with Armada A385 (NB2800)";
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "armada-385-nbhw17-common.dtsi"
|
||||
#include "armada-385-hw17-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "NetModule Router NBHW17 with Armada A385 (NB2800)";
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "armada-385-nbhw18-common.dtsi"
|
||||
#include "armada-385-hw18-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "NetModule Router NBHW18 with Armada A385 (NB1800)";
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Device Tree file for the NetModule NBHW18-V2 (NB1800) base variant
|
||||
* Device Tree file for the NetModule HW18 (NB1800) base variant
|
||||
*
|
||||
* Copyright (C) 2016 NetModule
|
||||
*
|
||||
|
|
@ -11,15 +11,15 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "armada-385-nbhw18-common.dtsi"
|
||||
#include "armada-385-hw18-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "NetModule Router NBHW18 with Armada A385 (NB1800)";
|
||||
|
||||
soc {
|
||||
gpiofpga: gpio@fd0000000 {
|
||||
fpga-cinit = <&gpio0 13 0>; /* FPGA cinit HW V2 */
|
||||
fpga-cdone = <&gpio0 21 0>; /* FPGA cdone HW V2 */
|
||||
fpga-cinit = <&gpio0 13 0>; /* FPGA cinit */
|
||||
fpga-cdone = <&gpio0 21 0>; /* FPGA cdone */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -92,12 +92,12 @@ config TARGET_NM_HW14
|
|||
bool "Support HW14"
|
||||
select 88F6820
|
||||
|
||||
config TARGET_NM_NBHW18_V2
|
||||
bool "Support NBHW18 V2"
|
||||
config TARGET_NM_HW18
|
||||
bool "Support HW18"
|
||||
select 88F6820
|
||||
|
||||
config TARGET_NM_NBHW17_V1
|
||||
bool "Support NBHW17 V1"
|
||||
config TARGET_NM_HW17
|
||||
bool "Support HW17"
|
||||
select 88F6820
|
||||
|
||||
config TARGET_TURRIS_OMNIA
|
||||
|
|
@ -155,9 +155,8 @@ config SYS_BOARD
|
|||
default "maxbcm" if TARGET_MAXBCM
|
||||
default "theadorable" if TARGET_THEADORABLE
|
||||
default "hw14" if TARGET_NM_HW14
|
||||
default "nbhw18_v1" if TARGET_NM_NBHW18_V1
|
||||
default "nbhw18_v2" if TARGET_NM_NBHW18_V2
|
||||
default "nbhw17_v1" if TARGET_NM_NBHW17_V1
|
||||
default "hw18" if TARGET_NM_HW18
|
||||
default "hw17" if TARGET_NM_HW17
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "clearfog" if TARGET_CLEARFOG
|
||||
|
|
@ -172,8 +171,8 @@ config SYS_CONFIG_NAME
|
|||
default "theadorable" if TARGET_THEADORABLE
|
||||
default "turris_omnia" if TARGET_TURRIS_OMNIA
|
||||
default "armada-385-hw14" if TARGET_NM_HW14
|
||||
default "armada-385-nbhw18-v2" if TARGET_NM_NBHW18_V2
|
||||
default "armada-385-nbhw17-v1" if TARGET_NM_NBHW17_V1
|
||||
default "armada-385-hw18" if TARGET_NM_HW18
|
||||
default "armada-385-hw17" if TARGET_NM_HW17
|
||||
|
||||
config SYS_VENDOR
|
||||
default "Marvell" if TARGET_DB_MV784MP_GP
|
||||
|
|
@ -186,9 +185,8 @@ config SYS_VENDOR
|
|||
default "Synology" if TARGET_DS414
|
||||
default "CZ.NIC" if TARGET_TURRIS_OMNIA
|
||||
default "nm" if TARGET_NM_HW14
|
||||
default "nm" if TARGET_NM_NBHW18_V1
|
||||
default "nm" if TARGET_NM_NBHW18_V2
|
||||
default "nm" if TARGET_NM_NBHW17_V1
|
||||
default "nm" if TARGET_NM_HW18
|
||||
default "nm" if TARGET_NM_HW17
|
||||
|
||||
config SYS_SOC
|
||||
default "mvebu"
|
||||
|
|
|
|||
|
|
@ -11,12 +11,13 @@ commonobj = ../common/bdparser.o \
|
|||
../common/nbhw_fileaccess.o \
|
||||
../common/nbhw_fpga_gpio.o \
|
||||
../common/nbhw_partitions.o \
|
||||
../common/nbhw_pcie_fixup.o
|
||||
../common/nbhw_pcie_fixup.o
|
||||
|
||||
ccflags-y := -I../common
|
||||
|
||||
ifndef CONFIG_SPL_BUILD
|
||||
obj-y := board.o nbhw_gpio.o nbhw_fpga_config.o \
|
||||
../common/nbhw_sim.o nbhw_sim.o \
|
||||
$(commonobj)
|
||||
else
|
||||
obj-y := board.o \
|
||||
|
|
@ -26,4 +27,3 @@ obj-y := board.o \
|
|||
../common/nbhw_bd.o
|
||||
endif
|
||||
|
||||
|
||||
|
|
@ -27,6 +27,7 @@
|
|||
#include "../common/nbhw_init.h"
|
||||
#include "../common/nbhw_env.h"
|
||||
#include "../common/nbhw_bd.h"
|
||||
#include "../common/nbhw_fpga_prog.h"
|
||||
|
||||
#include "../drivers/ddr/marvell/a38x/ddr3_init.h"
|
||||
#include <../serdes/a38x/high_speed_env_spec.h>
|
||||
|
|
@ -40,11 +41,11 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
* "u-boot-2013.01-2014_T3.0"
|
||||
*/
|
||||
/* 21: RST_ETH_PHYS~, 26: FPGA_CFG_RESET, 27: WD_ENABLE~ */
|
||||
#define GPP_OUT_ENA_LOW (~(BIT(21) | BIT(26) /*| BIT(27) */)) /* 1=Input, default input */
|
||||
#define GPP_OUT_ENA_LOW (~(BIT(21) | BIT(26) | BIT(27))) /* 1=Input, default input */
|
||||
/* 41/9: RST_USB_HUB~, 44/12: RST_FPGA~, 47/15: WD_TRIG */
|
||||
#define GPP_OUT_ENA_MID (~(BIT(9) | BIT(12) | BIT(15)))
|
||||
|
||||
#define GPP_OUT_VAL_LOW (BIT(21)) /* 1=pin on */
|
||||
#define GPP_OUT_VAL_LOW (BIT(21) | BIT(27)) /* 1=pin on */
|
||||
#define GPP_OUT_VAL_MID (0x0)
|
||||
#define GPP_POL_LOW (0x0) /* 0=no inversion */
|
||||
#define GPP_POL_MID (0x0)
|
||||
|
|
@ -57,31 +58,18 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
|
||||
#define DEV_CS0_BASE 0xfd000000
|
||||
|
||||
/* Chip select base addresses */
|
||||
#define NBHW_BASE_ADDRESS_FPGA DEV_CS0_BASE
|
||||
|
||||
/* Compute FPGA register addresses */
|
||||
#define FPGA_REG(x) *((volatile unsigned short*)( NBHW_BASE_ADDRESS_FPGA + ((unsigned int)x)))
|
||||
|
||||
#define PCIE_4_PCM_GPIO_EN (0x0430)
|
||||
#define PCIE_4_PCM_GPIO_DIR (0x0432)
|
||||
#define PCIE_4_PCM_GPIO_DAT (0x0434)
|
||||
|
||||
/* TODO: These platform specific SERDES default definitions are
|
||||
currently defined twice here and in by hws_board_topology_load().
|
||||
Actually these platform specific defaults should only be set
|
||||
in hws_board_topology_load().
|
||||
The defaults should there be set also for the case where we have
|
||||
a valid BD but that BD does not contain SERDES configuration
|
||||
info to support old HW14 boards.
|
||||
*/
|
||||
/* Default serdes configuration */
|
||||
static struct serdes_map board_serdes_map[] = {
|
||||
{ PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0 },
|
||||
{ SGMII1, SERDES_SPEED_1_25_GBPS, SERDES_DEFAULT_MODE, 0, 0 },
|
||||
{ SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0 },
|
||||
{ SGMII2, SERDES_SPEED_1_25_GBPS, SERDES_DEFAULT_MODE, 0, 0 },
|
||||
{ PEX2, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0 },
|
||||
{ USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0 }
|
||||
{ PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0 },
|
||||
{ SGMII1, SERDES_SPEED_1_25_GBPS, SERDES_DEFAULT_MODE, 0, 0 },
|
||||
{ SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0 },
|
||||
{ SGMII2, SERDES_SPEED_1_25_GBPS, SERDES_DEFAULT_MODE, 0, 0 },
|
||||
{ PEX2, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0 },
|
||||
{ USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0 }
|
||||
};
|
||||
|
||||
enum serdes_type get_serdes_type(int index)
|
||||
|
|
@ -117,7 +105,7 @@ const EthPhyRegs NB2810_ETH_PHY_REGS[] = {
|
|||
|
||||
const EthPhyRegs* sSelectedPhyRegs = 0;
|
||||
|
||||
static BD_Context bdctx[3]; /* The descriptor context */
|
||||
static BD_Context bdctx[3]; /* The descriptor context */
|
||||
|
||||
static int _bd_init(void)
|
||||
{
|
||||
|
|
@ -240,31 +228,9 @@ int hws_board_topology_load(struct serdes_map **serdes_map_array, u8 *count)
|
|||
int i;
|
||||
|
||||
if (read_eeprom() < 0){
|
||||
/* If we do not have a board descriptor use the default
|
||||
serdes configuration defined in board_serdes_map */
|
||||
puts("Could not read board descriptor using default serdes config.\n");
|
||||
|
||||
board_serdes_map[0].serdes_speed = SERDES_SPEED_5_GBPS;
|
||||
board_serdes_map[0].serdes_mode = PEX_ROOT_COMPLEX_X1;
|
||||
board_serdes_map[0].serdes_type = PEX0;
|
||||
|
||||
board_serdes_map[1].serdes_speed = SERDES_SPEED_1_25_GBPS;
|
||||
board_serdes_map[1].serdes_mode = SERDES_DEFAULT_MODE;
|
||||
board_serdes_map[1].serdes_type = SGMII1;
|
||||
|
||||
board_serdes_map[2].serdes_speed = SERDES_SPEED_3_GBPS;
|
||||
board_serdes_map[2].serdes_mode = SERDES_DEFAULT_MODE;
|
||||
board_serdes_map[2].serdes_type = SATA1;
|
||||
|
||||
board_serdes_map[3].serdes_speed = SERDES_SPEED_1_25_GBPS;
|
||||
board_serdes_map[3].serdes_mode = SERDES_DEFAULT_MODE;
|
||||
board_serdes_map[3].serdes_type = SGMII2;
|
||||
|
||||
board_serdes_map[4].serdes_speed = SERDES_SPEED_5_GBPS;
|
||||
board_serdes_map[4].serdes_mode = PEX_ROOT_COMPLEX_X1;
|
||||
board_serdes_map[4].serdes_type = PEX2;
|
||||
|
||||
board_serdes_map[5].serdes_speed = SERDES_SPEED_5_GBPS;
|
||||
board_serdes_map[5].serdes_mode = SERDES_DEFAULT_MODE;
|
||||
board_serdes_map[5].serdes_type = USB3_HOST1;
|
||||
} else {
|
||||
for (i = 0; i < ARRAY_SIZE(board_serdes_map); i++) {
|
||||
enum serdes_type type;
|
||||
|
|
@ -530,12 +496,17 @@ static int check_reset_button(void)
|
|||
set_led(LED3_GREEN, 1);
|
||||
set_led(LED4_GREEN, 1);
|
||||
set_led(LED5_GREEN, 1);
|
||||
set_led(LED6_GREEN, 1);
|
||||
set_led(LED7_GREEN, 1);
|
||||
udelay(400000); /* 400ms */
|
||||
set_led(LED1_GREEN, 0);
|
||||
set_led(LED2_GREEN, 0);
|
||||
set_led(LED3_GREEN, 0);
|
||||
set_led(LED4_GREEN, 0);
|
||||
set_led(LED5_GREEN, 0);
|
||||
set_led(LED6_GREEN, 0);
|
||||
set_led(LED7_GREEN, 0);
|
||||
|
||||
} else if (counter == 12000) {
|
||||
/* Indicate recovery boot threshold */
|
||||
|
||||
|
|
@ -547,6 +518,8 @@ static int check_reset_button(void)
|
|||
set_led(LED3_RED, 1);
|
||||
set_led(LED4_RED, 1);
|
||||
set_led(LED5_RED, 1);
|
||||
set_led(LED6_RED, 1);
|
||||
set_led(LED7_RED, 1);
|
||||
udelay(400000); /* 400ms */
|
||||
set_led(LED0_RED, 0);
|
||||
set_led(LED1_RED, 0);
|
||||
|
|
@ -554,6 +527,8 @@ static int check_reset_button(void)
|
|||
set_led(LED3_RED, 0);
|
||||
set_led(LED4_RED, 0);
|
||||
set_led(LED5_RED, 0);
|
||||
set_led(LED6_RED, 0);
|
||||
set_led(LED7_RED, 0);
|
||||
set_led(LED0_GREEN, 1);
|
||||
}
|
||||
} while (counter < 12000);
|
||||
|
|
@ -633,7 +608,7 @@ int misc_init_r(void)
|
|||
|
||||
/* Disable watchdog */
|
||||
debug("Disable watchdog\n");
|
||||
// set_gpio(GPIO_WD_ENABLE, 0);
|
||||
set_gpio(GPIO_WD_ENABLE, 0);
|
||||
|
||||
/* Enable USB hub */
|
||||
debug("Enable USB Hub\n");
|
||||
|
|
@ -702,7 +677,8 @@ int board_late_init(void)
|
|||
|
||||
check_reset_button();
|
||||
|
||||
set_mac_addresses(2);
|
||||
set_mac_address(1,0);
|
||||
set_mac_address(2,1);
|
||||
#endif
|
||||
|
||||
/* Take phy out of reset after FPGA was loaded */
|
||||
|
|
@ -747,11 +723,11 @@ int board_fit_config_name_match(const char *name)
|
|||
#ifdef CONFIG_SPL_BUILD
|
||||
/* SPL has enabled serial1 per default and will output everything
|
||||
* independend of /boot/consoledev */
|
||||
#define DEFAULT_DTB_NAME "armada-385-nbhw17-v1-spl"
|
||||
#define DEFAULT_DTB_NAME "armada-385-hw17-spl"
|
||||
#else
|
||||
/* U-Boot will read /boot/consoledev and based on that it
|
||||
* enables its own serial console */
|
||||
#define DEFAULT_DTB_NAME "armada-385-nbhw17-v1"
|
||||
#define DEFAULT_DTB_NAME "armada-385-hw17"
|
||||
#endif
|
||||
|
||||
/* Check if name fits our dts */
|
||||
|
|
@ -7,9 +7,18 @@
|
|||
#include <asm/io.h>
|
||||
#include <errno.h>
|
||||
#include "../common/nbhw_bd.h"
|
||||
#include "../common/nbhw_sim.h"
|
||||
#include "../common/nbhw_fpga_prog.h"
|
||||
#include "nbhw_gpio.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define PCIE_SIM_CLOCK (0x0034)
|
||||
#define INTMASK1 (0x0010)
|
||||
#define INTMASK2 (0x0012)
|
||||
#define INTACK1 (0x0018)
|
||||
#define INTACK2 (0x001A)
|
||||
|
||||
struct gpio_desc leds[16];
|
||||
struct udevice *driver_dev;
|
||||
|
||||
|
|
@ -31,54 +40,6 @@ typedef enum {
|
|||
TYPE_PCIE,
|
||||
} slot_type_t;
|
||||
|
||||
//static slot_type_t get_pcie_slot_type(const int slot)
|
||||
//{
|
||||
// int module;
|
||||
// char pdValue[200];
|
||||
// char slotDescr[20];
|
||||
//
|
||||
// sprintf(slotDescr, "slot=%d", slot);
|
||||
//
|
||||
// for (module=0; module<4; module++) {
|
||||
// strcpy(pdValue, "" ); /*init with an empty string*/
|
||||
// if (bd_get_pd_module(module, pdValue, sizeof(pdValue))==0) {
|
||||
//
|
||||
// if ((strstr(pdValue, slotDescr)) && (strstr(pdValue, "wlan-"))) {
|
||||
// /* Wifi module needs PCIe */
|
||||
// return TYPE_PCIE;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return TYPE_USB;
|
||||
//}
|
||||
//
|
||||
//static int serdes_en_hack(struct gpio_desc *gpio)
|
||||
//{
|
||||
// slot_type_t slot_type = get_pcie_slot_type(0);
|
||||
//
|
||||
// /* Lucky for us pcie slot1 has some muxes, to workaround buggy Sierra Wireless Modules */
|
||||
// if (slot_type == TYPE_USB) {
|
||||
// /* Buggy Sierra Wireless Modules don't like to have USB3 enabled
|
||||
// * because the TX of the USB3 Lane is attached to it's system
|
||||
// * reset which is the default (see dts) */
|
||||
// printf("Slot1: wwan\n");
|
||||
// }
|
||||
// else if (slot_type == TYPE_PCIE) {
|
||||
// dm_gpio_set_value(gpio, 1);
|
||||
// printf("Slot1: wlan\n");
|
||||
// }
|
||||
// else {
|
||||
// /* If once we would use other buggy Sierra Wireless modules, where they have
|
||||
// * decided to use USB3 too, then we have to enable the SERDES, the reset signal
|
||||
// * was moved away from this pins again (bravo!!!) */
|
||||
// printf("Slot1: wwan (usb3)\n");
|
||||
// }
|
||||
//
|
||||
// return 0;
|
||||
//
|
||||
//}
|
||||
|
||||
struct pcie_slot_gpios {
|
||||
struct gpio_desc reset;
|
||||
struct gpio_desc power;
|
||||
|
|
@ -139,10 +100,71 @@ static int add_pcie_slot(ofnode fdt)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static slot_type_t get_pcie_slot_type(const int slot)
|
||||
{
|
||||
int module;
|
||||
char pdValue[200];
|
||||
char slotDescr[20];
|
||||
|
||||
sprintf(slotDescr, "slot=%d", slot);
|
||||
|
||||
for (module=0; module<4; module++) {
|
||||
strcpy(pdValue, "" ); /*init with an empty string*/
|
||||
if (bd_get_pd_module(module, pdValue, sizeof(pdValue))==0) {
|
||||
|
||||
if ((strstr(pdValue, slotDescr)) && (strstr(pdValue, "wlan-"))) {
|
||||
/* Wifi module needs PCIe */
|
||||
return TYPE_PCIE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TYPE_USB;
|
||||
}
|
||||
|
||||
static void configure_pcie_muxes(void)
|
||||
{
|
||||
slot_type_t slot_type = get_pcie_slot_type(0);
|
||||
|
||||
/* Lucky for us pcie slot1 has some muxes, to workaround buggy Sierra Wireless Modules */
|
||||
if (slot_type == TYPE_USB) {
|
||||
/* Buggy Sierra Wireless Modules don't like to have USB3 enabled
|
||||
* because the TX of the USB3 Lane is attached to it's system
|
||||
* reset which is the default (see dts) -> This obviously means
|
||||
* that slot1 will never do USB3 even if it was capable. */
|
||||
set_gpio(GPIO_SERDES_SEL_PCI, 0);
|
||||
set_gpio(GPIO_SERDES_EN, 0);
|
||||
printf("Slot1: wwan\n");
|
||||
}
|
||||
else if (slot_type == TYPE_PCIE) {
|
||||
set_gpio(GPIO_SERDES_SEL_PCI, 1);
|
||||
set_gpio(GPIO_SERDES_EN, 1);
|
||||
printf("Slot1: wlan\n");
|
||||
}
|
||||
else {
|
||||
/* If once we would use other buggy Sierra Wireless modules, where they have
|
||||
* decided to use USB3 too, then we have to enable the SERDES, the reset signal
|
||||
* was moved away from this pins again (bravo!!!)
|
||||
* Note: We currently never get here. */
|
||||
printf("Slot1: wwan (usb3)\n");
|
||||
set_gpio(GPIO_SERDES_SEL_PCI, 0);
|
||||
set_gpio(GPIO_SERDES_EN, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static int configure_pcie_slots(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
configure_pcie_muxes();
|
||||
configure_sim_slots(4);
|
||||
|
||||
/* Disable power for all PCIe slots */
|
||||
for (i = 0; i < pcie_slot_count; i++) {
|
||||
dm_gpio_set_value(&pcie_slots[i].power, 0);
|
||||
}
|
||||
|
||||
udelay(1200000); /* 1.2 s */
|
||||
|
||||
/* Apply power to all PCIe slots */
|
||||
|
|
@ -151,11 +173,6 @@ static int configure_pcie_slots(void)
|
|||
udelay(200000); /* 200 ms */
|
||||
}
|
||||
|
||||
/* Assert reset after power is enabled */
|
||||
for (i = 0; i < pcie_slot_count; i++) {
|
||||
dm_gpio_set_value(&pcie_slots[i].reset, 1);
|
||||
}
|
||||
|
||||
/* Deactivate WDIS */
|
||||
for (i = 0; i < pcie_slot_count; i++) {
|
||||
dm_gpio_set_value(&pcie_slots[i].wdis_out, 1);
|
||||
|
|
@ -163,6 +180,11 @@ static int configure_pcie_slots(void)
|
|||
udelay(2000); /* 2 ms needed by Reyax module as regulator is enabled by WDIS~*/
|
||||
}
|
||||
|
||||
/* Assert reset after power is enabled */
|
||||
for (i = 0; i < pcie_slot_count; i++) {
|
||||
dm_gpio_set_value(&pcie_slots[i].reset, 1);
|
||||
}
|
||||
|
||||
udelay(12000); /* 12 ms */
|
||||
|
||||
/* Deassert reset */
|
||||
|
|
@ -192,33 +214,7 @@ static int configure_leds(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
// TODO: Check, if needed
|
||||
//struct hack_list_entry {
|
||||
// const char* name;
|
||||
// int (*fn)(struct gpio_desc *gpio);
|
||||
//};
|
||||
//
|
||||
//struct hack_list_entry hack_list[] = {
|
||||
// {"serdes-en", serdes_en_hack}
|
||||
//};
|
||||
//
|
||||
//static int exec_hack_list_fn(const char *name, struct gpio_desc *gpio)
|
||||
//{
|
||||
// int i;
|
||||
// for (i = 0; i < ARRAY_SIZE(hack_list); i++) {
|
||||
// if (strcmp(hack_list[i]. name, name) == 0) {
|
||||
// if (hack_list[i].fn(gpio)) {
|
||||
// printf("Hack for %s failed\n", name);
|
||||
// return -1;
|
||||
// }
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// /* Not part of hacklist */
|
||||
// return 0;
|
||||
//}
|
||||
//
|
||||
|
||||
void set_led(int index, int value)
|
||||
{
|
||||
if ((index<0) || (index>=priv.led_count)) return;
|
||||
|
|
@ -232,6 +228,17 @@ int nbhw_fpga_configure(void)
|
|||
ofnode node = driver_dev->node;
|
||||
debug("%s\n", __func__);
|
||||
|
||||
/* Disable all interrupts from FPGA and clear flags */
|
||||
FPGA_REG(INTMASK1) = 0xFFFF;
|
||||
FPGA_REG(INTMASK2) = 0xFFFF;
|
||||
/* Make sure all interrupts are received */
|
||||
udelay(10000);
|
||||
FPGA_REG(INTACK1) = 0xFFFF;
|
||||
FPGA_REG(INTACK2) = 0xFFFF;
|
||||
|
||||
/* Enable SIM clocks */
|
||||
FPGA_REG(PCIE_SIM_CLOCK) = 0;
|
||||
|
||||
ofnode_for_each_subnode(subnode, node) {
|
||||
const char *name;
|
||||
|
||||
|
|
@ -244,6 +251,21 @@ int nbhw_fpga_configure(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* Disengage extension connector reset */
|
||||
set_gpio(GPIO_RST_EXT, 0);
|
||||
|
||||
/* Enable mdio connection to on board phy */
|
||||
set_gpio(GPIO_MDIO_PHY_CON, 1);
|
||||
|
||||
/* Enable mdio connection to external phy */
|
||||
set_gpio(GPIO_MDIO_EXT_CON, 1);
|
||||
|
||||
/* Enable SATA power */
|
||||
set_gpio(GPIO_SATA_PWR_EN, 1);
|
||||
|
||||
/* Enable GPS antenna power */
|
||||
set_gpio(GPIO_GPS_ANT_PWR_EN,1);
|
||||
|
||||
if (configure_leds())
|
||||
return -1;
|
||||
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
#ifndef HW17_GPIO_H
|
||||
#define HW17_GPIO_H
|
||||
|
||||
/* GPIO definitions */
|
||||
#define GPIO_WD_ENABLE "wd_enable"
|
||||
#define GPIO_RST_USB_HUB "rst_usb_hub"
|
||||
#define GPIO_RST_FPGA "rst_fpga"
|
||||
#define GPIO_RST_ETH_PHY "rst_eth_phy"
|
||||
#define GPIO_RESET_BUTTON "reset_button"
|
||||
#define GPIO_GPS_ANT_PWR_EN "gps_ant_pwr_en"
|
||||
#define GPIO_MDIO_PHY_CON "mdio_phy_con"
|
||||
#define GPIO_MDIO_EXT_CON "mdio_ext_con"
|
||||
#define GPIO_SATA_PWR_EN "sata_pwr_en"
|
||||
#define GPIO_SERDES_SEL_PCI "serdes_sel_pci"
|
||||
#define GPIO_SERDES_EN "serdes_en"
|
||||
#define GPIO_RST_EXT "rst_ext"
|
||||
|
||||
int get_gpio(const char* gpio_name);
|
||||
int set_gpio(const char* gpio_name, int value);
|
||||
|
||||
/* LED definitions */
|
||||
#define LED0_GREEN 0
|
||||
#define LED0_RED 1
|
||||
#define LED1_GREEN 2
|
||||
#define LED1_RED 3
|
||||
#define LED2_GREEN 4
|
||||
#define LED2_RED 5
|
||||
#define LED3_GREEN 6
|
||||
#define LED3_RED 7
|
||||
#define LED4_GREEN 8
|
||||
#define LED4_RED 9
|
||||
#define LED5_GREEN 10
|
||||
#define LED5_RED 11
|
||||
#define LED6_GREEN 12
|
||||
#define LED6_RED 13
|
||||
#define LED7_GREEN 14
|
||||
#define LED7_RED 15
|
||||
|
||||
void set_led(int index, int value);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
#include <common.h>
|
||||
#include <nbhw.h>
|
||||
#include "../common/nbhw_fpga_prog.h"
|
||||
|
||||
#include "nbhw18_fpga_regs.h"
|
||||
#define SIM_CTRL (0x0040)
|
||||
|
||||
void connect_sim_to_slot(int sim, int slot) {
|
||||
uint16_t sim_ctrl;
|
||||
|
|
@ -32,4 +32,3 @@ void connect_sim_to_slot(int sim, int slot) {
|
|||
|
||||
FPGA_REG(SIM_CTRL) = sim_ctrl;
|
||||
}
|
||||
|
||||
|
|
@ -713,7 +713,7 @@ int board_fit_config_name_match(const char *name)
|
|||
#else
|
||||
/* U-Boot will read /boot/consoledev and based on that it
|
||||
* enables its own serial console */
|
||||
#define DEFAULT_DTB_NAME "armada-385-nbhw18-v2"
|
||||
#define DEFAULT_DTB_NAME "armada-385-hw18"
|
||||
#endif
|
||||
|
||||
/* Check if name fits our dts */
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
#define MVSWITCH_GLOBAL2_REG_DATA (0x19)
|
||||
|
||||
/* Temporary FPGA defines -> To be replaced by proper definitions
|
||||
as soon as we have the register definition for NBHW18 V2
|
||||
as soon as we have the register definition for HW18
|
||||
*/
|
||||
|
||||
//#define OUTPUT1 (0x0008)
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
#ifndef HW17_GPIO_H
|
||||
#define HW17_GPIO_H
|
||||
|
||||
/* GPIO definitions */
|
||||
#define GPIO_WD_ENABLE "wd_enable"
|
||||
#define GPIO_RST_USB_HUB "rst_usb_hub"
|
||||
#define GPIO_RST_FPGA "rst_fpga"
|
||||
#define GPIO_RST_ETH_PHY "rst_eth_phy"
|
||||
#define GPIO_RESET_BUTTON "reset_button"
|
||||
|
||||
int get_gpio(const char* gpio_name);
|
||||
int set_gpio(const char* gpio_name, int value);
|
||||
|
||||
/* LED definitions */
|
||||
#define LED0_GREEN 0
|
||||
#define LED0_RED 1
|
||||
#define LED1_GREEN 2
|
||||
#define LED1_RED 3
|
||||
#define LED2_GREEN 4
|
||||
#define LED2_RED 5
|
||||
#define LED3_GREEN 6
|
||||
#define LED3_RED 7
|
||||
#define LED4_GREEN 8
|
||||
#define LED4_RED 9
|
||||
#define LED5_GREEN 10
|
||||
#define LED5_RED 11
|
||||
|
||||
void set_led(int index, int value);
|
||||
|
||||
#endif
|
||||
|
|
@ -3,11 +3,11 @@ CONFIG_ARCH_MVEBU=y
|
|||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
||||
CONFIG_TARGET_NM_NBHW17_V1=y
|
||||
CONFIG_TARGET_NM_HW17=y
|
||||
CONFIG_SPL_MMC_SUPPORT=y
|
||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="armada-385-nbhw17-v1-spl"
|
||||
CONFIG_DEFAULT_DEVICE_TREE="armada-385-hw17-spl"
|
||||
CONFIG_SMBIOS_PRODUCT_NAME="hw17"
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
|
||||
|
|
@ -18,7 +18,7 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
|||
CONFIG_PRE_CON_BUF_SZ=4096
|
||||
CONFIG_PRE_CON_BUF_ADDR=0x04000000
|
||||
# CONFIG_CONSOLE_MUX is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="armada-385-nbhw17-v1-spl"
|
||||
CONFIG_DEFAULT_FDT_FILE="armada-385-hw17-spl"
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x190
|
||||
|
|
@ -50,7 +50,7 @@ CONFIG_EFI_PARTITION=y
|
|||
# CONFIG_SPL_PARTITION_UUIDS is not set
|
||||
CONFIG_OF_BOARD_FIXUP=y
|
||||
CONFIG_SPL_OF_TRANSLATE=y
|
||||
CONFIG_OF_LIST="armada-385-nbhw17-v1-spl armada-385-nbhw17-v1"
|
||||
CONFIG_OF_LIST="armada-385-hw17-spl armada-385-hw17"
|
||||
CONFIG_MULTI_DTB_FIT=y
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
|
|
@ -3,12 +3,12 @@ CONFIG_ARCH_MVEBU=y
|
|||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
||||
CONFIG_TARGET_NM_NBHW18_V2=y
|
||||
CONFIG_TARGET_NM_HW18=y
|
||||
CONFIG_SPL_MMC_SUPPORT=y
|
||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="armada-385-nbhw18-spl"
|
||||
CONFIG_SMBIOS_PRODUCT_NAME="nbhw18_v2"
|
||||
CONFIG_DEFAULT_DEVICE_TREE="armada-385-hw18-spl"
|
||||
CONFIG_SMBIOS_PRODUCT_NAME="hw18"
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
|
||||
CONFIG_BOOTDELAY=3
|
||||
|
|
@ -18,7 +18,7 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
|||
CONFIG_PRE_CON_BUF_SZ=4096
|
||||
CONFIG_PRE_CON_BUF_ADDR=0x04000000
|
||||
# CONFIG_CONSOLE_MUX is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="armada-385-nbhw18-spl"
|
||||
CONFIG_DEFAULT_FDT_FILE="armada-385-hw18-spl"
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x190
|
||||
|
|
@ -50,7 +50,7 @@ CONFIG_EFI_PARTITION=y
|
|||
# CONFIG_SPL_PARTITION_UUIDS is not set
|
||||
CONFIG_OF_BOARD_FIXUP=y
|
||||
CONFIG_SPL_OF_TRANSLATE=y
|
||||
CONFIG_OF_LIST="armada-385-nbhw18-spl armada-385-nbhw18-v2"
|
||||
CONFIG_OF_LIST="armada-385-hw18-spl armada-385-hw18"
|
||||
CONFIG_MULTI_DTB_FIT=y
|
||||
CONFIG_FPGA_LATTICE_SSPI=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
Loading…
Reference in New Issue