|
@@ -12,6 +12,8 @@
|
|
|
*/
|
|
|
|
|
|
#include <common.h>
|
|
|
+#include <dm.h>
|
|
|
+#include <ns16550.h>
|
|
|
#include <asm/io.h>
|
|
|
#include <asm/omap_musb.h>
|
|
|
#include <asm/arch/am35x_def.h>
|
|
@@ -34,6 +36,22 @@ DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
#define AM3517_IP_SW_RESET 0x48002598
|
|
|
#define CPGMACSS_SW_RST (1 << 1)
|
|
|
+#define PHY_GPIO 30
|
|
|
+
|
|
|
+/* This is only needed until SPL gets OF support */
|
|
|
+#ifdef CONFIG_SPL_BUILD
|
|
|
+static const struct ns16550_platdata am3517_serial = {
|
|
|
+ .base = OMAP34XX_UART3,
|
|
|
+ .reg_shift = 2,
|
|
|
+ .clock = V_NS16550_CLK,
|
|
|
+ .fcr = UART_FCR_DEFVAL,
|
|
|
+};
|
|
|
+
|
|
|
+U_BOOT_DEVICE(am3517_uart) = {
|
|
|
+ "ns16550_serial",
|
|
|
+ &am3517_serial
|
|
|
+};
|
|
|
+#endif
|
|
|
|
|
|
/*
|
|
|
* Routine: board_init
|
|
@@ -113,30 +131,35 @@ int misc_init_r(void)
|
|
|
|
|
|
am3517_evm_musb_init();
|
|
|
|
|
|
- /* activate PHY reset */
|
|
|
- gpio_direction_output(30, 0);
|
|
|
- gpio_set_value(30, 0);
|
|
|
-
|
|
|
- ctr = 0;
|
|
|
- do {
|
|
|
- udelay(1000);
|
|
|
- ctr++;
|
|
|
- } while (ctr < 300);
|
|
|
-
|
|
|
- /* deactivate PHY reset */
|
|
|
- gpio_set_value(30, 1);
|
|
|
-
|
|
|
- /* allow the PHY to stabilize and settle down */
|
|
|
- ctr = 0;
|
|
|
- do {
|
|
|
- udelay(1000);
|
|
|
- ctr++;
|
|
|
- } while (ctr < 300);
|
|
|
-
|
|
|
- /* ensure that the module is out of reset */
|
|
|
- reset = readl(AM3517_IP_SW_RESET);
|
|
|
- reset &= (~CPGMACSS_SW_RST);
|
|
|
- writel(reset,AM3517_IP_SW_RESET);
|
|
|
+ if (gpio_request(PHY_GPIO, "gpio_30") == 0) {
|
|
|
+ /* activate PHY reset */
|
|
|
+ gpio_direction_output(PHY_GPIO, 0);
|
|
|
+ gpio_set_value(PHY_GPIO, 0);
|
|
|
+
|
|
|
+ ctr = 0;
|
|
|
+ do {
|
|
|
+ udelay(1000);
|
|
|
+ ctr++;
|
|
|
+ } while (ctr < 300);
|
|
|
+
|
|
|
+ /* deactivate PHY reset */
|
|
|
+ gpio_set_value(PHY_GPIO, 1);
|
|
|
+
|
|
|
+ /* allow the PHY to stabilize and settle down */
|
|
|
+ ctr = 0;
|
|
|
+ do {
|
|
|
+ udelay(1000);
|
|
|
+ ctr++;
|
|
|
+ } while (ctr < 300);
|
|
|
+
|
|
|
+ /* ensure that the module is out of reset */
|
|
|
+ reset = readl(AM3517_IP_SW_RESET);
|
|
|
+ reset &= (~CPGMACSS_SW_RST);
|
|
|
+ writel(reset, AM3517_IP_SW_RESET);
|
|
|
+
|
|
|
+ /* Free requested GPIO */
|
|
|
+ gpio_free(PHY_GPIO);
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|