MIPS: OCTEON: Supply OCTEON+ USB nodes in internal device trees.
This will be needed by the next patch to use said nodes for probing via the device tree. Signed-off-by: David Daney <david.daney@cavium.com> Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: John Crispin <blogic@openwrt.org> Patchwork: http://patchwork.linux-mips.org/patch/6185/
This commit is contained in:
Родитель
23a91de41c
Коммит
d617f9e9b8
|
@ -722,3 +722,30 @@ int __cvmx_helper_board_hardware_enable(int interface)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the clock type used for the USB block based on board type.
|
||||
* Used by the USB code for auto configuration of clock type.
|
||||
*
|
||||
* Return USB clock type enumeration
|
||||
*/
|
||||
enum cvmx_helper_board_usb_clock_types __cvmx_helper_board_usb_get_clock_type(void)
|
||||
{
|
||||
switch (cvmx_sysinfo_get()->board_type) {
|
||||
case CVMX_BOARD_TYPE_BBGW_REF:
|
||||
case CVMX_BOARD_TYPE_LANAI2_A:
|
||||
case CVMX_BOARD_TYPE_LANAI2_U:
|
||||
case CVMX_BOARD_TYPE_LANAI2_G:
|
||||
case CVMX_BOARD_TYPE_NIC10E_66:
|
||||
case CVMX_BOARD_TYPE_UBNT_E100:
|
||||
return USB_CLOCK_TYPE_CRYSTAL_12;
|
||||
case CVMX_BOARD_TYPE_NIC10E:
|
||||
return USB_CLOCK_TYPE_REF_12;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/* Most boards except NIC10e use a 12MHz crystal */
|
||||
if (OCTEON_IS_MODEL(OCTEON_FAM_2))
|
||||
return USB_CLOCK_TYPE_CRYSTAL_12;
|
||||
return USB_CLOCK_TYPE_REF_48;
|
||||
}
|
||||
|
|
|
@ -171,6 +171,7 @@ device_initcall(octeon_ohci_device_init);
|
|||
static struct of_device_id __initdata octeon_ids[] = {
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .compatible = "cavium,octeon-6335-uctl", },
|
||||
{ .compatible = "cavium,octeon-5750-usbn", },
|
||||
{ .compatible = "cavium,octeon-3860-bootbus", },
|
||||
{ .compatible = "cavium,mdio-mux", },
|
||||
{ .compatible = "gpio-leds", },
|
||||
|
@ -682,6 +683,37 @@ end_led:
|
|||
}
|
||||
}
|
||||
|
||||
/* DWC2 USB */
|
||||
alias_prop = fdt_getprop(initial_boot_params, aliases,
|
||||
"usbn", NULL);
|
||||
if (alias_prop) {
|
||||
int usbn = fdt_path_offset(initial_boot_params, alias_prop);
|
||||
|
||||
if (usbn >= 0 && (current_cpu_type() == CPU_CAVIUM_OCTEON2 ||
|
||||
!octeon_has_feature(OCTEON_FEATURE_USB))) {
|
||||
pr_debug("Deleting usbn\n");
|
||||
fdt_nop_node(initial_boot_params, usbn);
|
||||
fdt_nop_property(initial_boot_params, aliases, "usbn");
|
||||
} else {
|
||||
__be32 new_f[1];
|
||||
enum cvmx_helper_board_usb_clock_types c;
|
||||
c = __cvmx_helper_board_usb_get_clock_type();
|
||||
switch (c) {
|
||||
case USB_CLOCK_TYPE_REF_48:
|
||||
new_f[0] = cpu_to_be32(48000000);
|
||||
fdt_setprop_inplace(initial_boot_params, usbn,
|
||||
"refclk-frequency", new_f, sizeof(new_f));
|
||||
/* Fall through ...*/
|
||||
case USB_CLOCK_TYPE_REF_12:
|
||||
/* Missing "refclk-type" defaults to external. */
|
||||
fdt_nop_property(initial_boot_params, usbn, "refclk-type");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -550,6 +550,24 @@
|
|||
big-endian-regs;
|
||||
};
|
||||
};
|
||||
|
||||
usbn: usbn@1180068000000 {
|
||||
compatible = "cavium,octeon-5750-usbn";
|
||||
reg = <0x11800 0x68000000 0x0 0x1000>;
|
||||
ranges; /* Direct mapping */
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
/* 12MHz, 24MHz and 48MHz allowed */
|
||||
refclk-frequency = <12000000>;
|
||||
/* Either "crystal" or "external" */
|
||||
refclk-type = "crystal";
|
||||
|
||||
usbc@16f0010000000 {
|
||||
compatible = "cavium,octeon-5750-usbc";
|
||||
reg = <0x16f00 0x10000000 0x0 0x80000>;
|
||||
interrupts = <0 56>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
aliases {
|
||||
|
@ -566,6 +584,7 @@
|
|||
flash0 = &flash0;
|
||||
cf0 = &cf0;
|
||||
uctl = &uctl;
|
||||
usbn = &usbn;
|
||||
led0 = &led0;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -36,6 +36,13 @@
|
|||
|
||||
#include <asm/octeon/cvmx-helper.h>
|
||||
|
||||
enum cvmx_helper_board_usb_clock_types {
|
||||
USB_CLOCK_TYPE_REF_12,
|
||||
USB_CLOCK_TYPE_REF_24,
|
||||
USB_CLOCK_TYPE_REF_48,
|
||||
USB_CLOCK_TYPE_CRYSTAL_12,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
set_phy_link_flags_autoneg = 0x1,
|
||||
set_phy_link_flags_flow_control_dont_touch = 0x0 << 1,
|
||||
|
@ -154,4 +161,6 @@ extern int __cvmx_helper_board_interface_probe(int interface,
|
|||
*/
|
||||
extern int __cvmx_helper_board_hardware_enable(int interface);
|
||||
|
||||
enum cvmx_helper_board_usb_clock_types __cvmx_helper_board_usb_get_clock_type(void);
|
||||
|
||||
#endif /* __CVMX_HELPER_BOARD_H__ */
|
||||
|
|
Загрузка…
Ссылка в новой задаче