Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm/mv/mv_common.c
Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
#ifdef DEBUG | #ifdef DEBUG | ||||
#define MV_DUMP_WIN 1 | #define MV_DUMP_WIN 1 | ||||
#else | #else | ||||
#define MV_DUMP_WIN 0 | #define MV_DUMP_WIN 0 | ||||
#endif | #endif | ||||
static int win_eth_can_remap(int i); | static int win_eth_can_remap(int i); | ||||
static int decode_win_cesa_valid(void); | |||||
static int decode_win_cpu_valid(void); | static int decode_win_cpu_valid(void); | ||||
static int decode_win_usb_valid(void); | static int decode_win_usb_valid(void); | ||||
static int decode_win_usb3_valid(void); | static int decode_win_usb3_valid(void); | ||||
static int decode_win_eth_valid(void); | static int decode_win_eth_valid(void); | ||||
static int decode_win_pcie_valid(void); | static int decode_win_pcie_valid(void); | ||||
static int decode_win_sata_valid(void); | static int decode_win_sata_valid(void); | ||||
static int decode_win_sdhci_valid(void); | static int decode_win_sdhci_valid(void); | ||||
static int decode_win_idma_valid(void); | static int decode_win_idma_valid(void); | ||||
static int decode_win_xor_valid(void); | static int decode_win_xor_valid(void); | ||||
static void decode_win_cpu_setup(void); | static void decode_win_cpu_setup(void); | ||||
#ifdef SOC_MV_ARMADAXP | #ifdef SOC_MV_ARMADAXP | ||||
static int decode_win_sdram_fixup(void); | static int decode_win_sdram_fixup(void); | ||||
#endif | #endif | ||||
static void decode_win_cesa_setup(u_long); | |||||
static void decode_win_usb_setup(u_long); | static void decode_win_usb_setup(u_long); | ||||
static void decode_win_usb3_setup(u_long); | static void decode_win_usb3_setup(u_long); | ||||
static void decode_win_eth_setup(u_long); | static void decode_win_eth_setup(u_long); | ||||
static void decode_win_sata_setup(u_long); | static void decode_win_sata_setup(u_long); | ||||
static void decode_win_ahci_setup(u_long); | static void decode_win_ahci_setup(u_long); | ||||
static void decode_win_sdhci_setup(u_long); | static void decode_win_sdhci_setup(u_long); | ||||
static void decode_win_idma_setup(u_long); | static void decode_win_idma_setup(u_long); | ||||
static void decode_win_xor_setup(u_long); | static void decode_win_xor_setup(u_long); | ||||
static void decode_win_cesa_dump(u_long); | |||||
static void decode_win_usb_dump(u_long); | static void decode_win_usb_dump(u_long); | ||||
static void decode_win_usb3_dump(u_long); | static void decode_win_usb3_dump(u_long); | ||||
static void decode_win_eth_dump(u_long base); | static void decode_win_eth_dump(u_long base); | ||||
static void decode_win_idma_dump(u_long base); | static void decode_win_idma_dump(u_long base); | ||||
static void decode_win_xor_dump(u_long base); | static void decode_win_xor_dump(u_long base); | ||||
static void decode_win_ahci_dump(u_long base); | static void decode_win_ahci_dump(u_long base); | ||||
static void decode_win_sdhci_dump(u_long); | static void decode_win_sdhci_dump(u_long); | ||||
Show All 29 Lines | static struct soc_node_spec soc_nodes[] = { | ||||
{ "mrvl,usb-ehci", &decode_win_usb_setup, &decode_win_usb_dump }, | { "mrvl,usb-ehci", &decode_win_usb_setup, &decode_win_usb_dump }, | ||||
{ "marvell,orion-ehci", &decode_win_usb_setup, &decode_win_usb_dump }, | { "marvell,orion-ehci", &decode_win_usb_setup, &decode_win_usb_dump }, | ||||
{ "marvell,armada-380-xhci", &decode_win_usb3_setup, &decode_win_usb3_dump }, | { "marvell,armada-380-xhci", &decode_win_usb3_setup, &decode_win_usb3_dump }, | ||||
{ "marvell,armada-380-ahci", &decode_win_ahci_setup, &decode_win_ahci_dump }, | { "marvell,armada-380-ahci", &decode_win_ahci_setup, &decode_win_ahci_dump }, | ||||
{ "marvell,armada-380-sdhci", &decode_win_sdhci_setup, &decode_win_sdhci_dump }, | { "marvell,armada-380-sdhci", &decode_win_sdhci_setup, &decode_win_sdhci_dump }, | ||||
{ "mrvl,sata", &decode_win_sata_setup, NULL }, | { "mrvl,sata", &decode_win_sata_setup, NULL }, | ||||
{ "mrvl,xor", &decode_win_xor_setup, &decode_win_xor_dump }, | { "mrvl,xor", &decode_win_xor_setup, &decode_win_xor_dump }, | ||||
{ "mrvl,idma", &decode_win_idma_setup, &decode_win_idma_dump }, | { "mrvl,idma", &decode_win_idma_setup, &decode_win_idma_dump }, | ||||
{ "mrvl,cesa", &decode_win_cesa_setup, &decode_win_cesa_dump }, | |||||
{ "mrvl,pcie", &decode_win_pcie_setup, NULL }, | { "mrvl,pcie", &decode_win_pcie_setup, NULL }, | ||||
{ NULL, NULL, NULL }, | { NULL, NULL, NULL }, | ||||
}; | }; | ||||
struct fdt_pm_mask_entry { | struct fdt_pm_mask_entry { | ||||
char *compat; | char *compat; | ||||
uint32_t mask; | uint32_t mask; | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 412 Lines • ▼ Show 20 Lines | #ifdef SOC_MV_ARMADAXP | ||||
if ((err = decode_win_sdram_fixup()) != 0) | if ((err = decode_win_sdram_fixup()) != 0) | ||||
return(err); | return(err); | ||||
#endif | #endif | ||||
if (!decode_win_cpu_valid() || !decode_win_usb_valid() || | if (!decode_win_cpu_valid() || !decode_win_usb_valid() || | ||||
!decode_win_eth_valid() || !decode_win_idma_valid() || | !decode_win_eth_valid() || !decode_win_idma_valid() || | ||||
!decode_win_pcie_valid() || !decode_win_sata_valid() || | !decode_win_pcie_valid() || !decode_win_sata_valid() || | ||||
!decode_win_xor_valid() || !decode_win_usb3_valid() || | !decode_win_xor_valid() || !decode_win_usb3_valid() || | ||||
!decode_win_sdhci_valid()) | !decode_win_sdhci_valid() || !decode_win_cesa_valid()) | ||||
return (EINVAL); | return (EINVAL); | ||||
decode_win_cpu_setup(); | decode_win_cpu_setup(); | ||||
if (MV_DUMP_WIN) | if (MV_DUMP_WIN) | ||||
soc_dump_decode_win(); | soc_dump_decode_win(); | ||||
eth_port = 0; | eth_port = 0; | ||||
usb_port = 0; | usb_port = 0; | ||||
Show All 10 Lines | |||||
WIN_REG_IDX_RD(win_cpu, br, MV_WIN_CPU_BASE, MV_MBUS_BRIDGE_BASE) | WIN_REG_IDX_RD(win_cpu, br, MV_WIN_CPU_BASE, MV_MBUS_BRIDGE_BASE) | ||||
WIN_REG_IDX_RD(win_cpu, remap_l, MV_WIN_CPU_REMAP_LO, MV_MBUS_BRIDGE_BASE) | WIN_REG_IDX_RD(win_cpu, remap_l, MV_WIN_CPU_REMAP_LO, MV_MBUS_BRIDGE_BASE) | ||||
WIN_REG_IDX_RD(win_cpu, remap_h, MV_WIN_CPU_REMAP_HI, MV_MBUS_BRIDGE_BASE) | WIN_REG_IDX_RD(win_cpu, remap_h, MV_WIN_CPU_REMAP_HI, MV_MBUS_BRIDGE_BASE) | ||||
WIN_REG_IDX_WR(win_cpu, cr, MV_WIN_CPU_CTRL, MV_MBUS_BRIDGE_BASE) | WIN_REG_IDX_WR(win_cpu, cr, MV_WIN_CPU_CTRL, MV_MBUS_BRIDGE_BASE) | ||||
WIN_REG_IDX_WR(win_cpu, br, MV_WIN_CPU_BASE, MV_MBUS_BRIDGE_BASE) | WIN_REG_IDX_WR(win_cpu, br, MV_WIN_CPU_BASE, MV_MBUS_BRIDGE_BASE) | ||||
WIN_REG_IDX_WR(win_cpu, remap_l, MV_WIN_CPU_REMAP_LO, MV_MBUS_BRIDGE_BASE) | WIN_REG_IDX_WR(win_cpu, remap_l, MV_WIN_CPU_REMAP_LO, MV_MBUS_BRIDGE_BASE) | ||||
WIN_REG_IDX_WR(win_cpu, remap_h, MV_WIN_CPU_REMAP_HI, MV_MBUS_BRIDGE_BASE) | WIN_REG_IDX_WR(win_cpu, remap_h, MV_WIN_CPU_REMAP_HI, MV_MBUS_BRIDGE_BASE) | ||||
WIN_REG_BASE_IDX_RD(win_cesa, cr, MV_WIN_CESA_CTRL) | |||||
WIN_REG_BASE_IDX_RD(win_cesa, br, MV_WIN_CESA_BASE) | |||||
WIN_REG_BASE_IDX_WR(win_cesa, cr, MV_WIN_CESA_CTRL) | |||||
WIN_REG_BASE_IDX_WR(win_cesa, br, MV_WIN_CESA_BASE) | |||||
WIN_REG_BASE_IDX_RD(win_usb, cr, MV_WIN_USB_CTRL) | WIN_REG_BASE_IDX_RD(win_usb, cr, MV_WIN_USB_CTRL) | ||||
WIN_REG_BASE_IDX_RD(win_usb, br, MV_WIN_USB_BASE) | WIN_REG_BASE_IDX_RD(win_usb, br, MV_WIN_USB_BASE) | ||||
WIN_REG_BASE_IDX_WR(win_usb, cr, MV_WIN_USB_CTRL) | WIN_REG_BASE_IDX_WR(win_usb, cr, MV_WIN_USB_CTRL) | ||||
WIN_REG_BASE_IDX_WR(win_usb, br, MV_WIN_USB_BASE) | WIN_REG_BASE_IDX_WR(win_usb, br, MV_WIN_USB_BASE) | ||||
#ifdef SOC_MV_ARMADA38X | #ifdef SOC_MV_ARMADA38X | ||||
WIN_REG_BASE_IDX_RD(win_usb3, cr, MV_WIN_USB3_CTRL) | WIN_REG_BASE_IDX_RD(win_usb3, cr, MV_WIN_USB3_CTRL) | ||||
WIN_REG_BASE_IDX_RD(win_usb3, br, MV_WIN_USB3_BASE) | WIN_REG_BASE_IDX_RD(win_usb3, br, MV_WIN_USB3_BASE) | ||||
▲ Show 20 Lines • Show All 451 Lines • ▼ Show 20 Lines | return (i == 0xe ? 0xc : | ||||
(i == 0x7 ? 0xf : 0xc)))); | (i == 0x7 ? 0xf : 0xc)))); | ||||
} | } | ||||
/* | /* | ||||
* On SOCs other than 88RC8180 Mbus unit ID for | * On SOCs other than 88RC8180 Mbus unit ID for | ||||
* DDR SDRAM controller is always 0x0. | * DDR SDRAM controller is always 0x0. | ||||
*/ | */ | ||||
return (0); | return (0); | ||||
} | |||||
/************************************************************************** | |||||
* CESA windows routines | |||||
**************************************************************************/ | |||||
static int | |||||
decode_win_cesa_valid(void) | |||||
{ | |||||
return (decode_win_can_cover_ddr(MV_WIN_CESA_MAX)); | |||||
} | |||||
static void | |||||
decode_win_cesa_dump(u_long base) | |||||
{ | |||||
int i; | |||||
for (i = 0; i < MV_WIN_CESA_MAX; i++) | |||||
printf("CESA window#%d: c 0x%08x, b 0x%08x\n", i, | |||||
win_cesa_cr_read(base, i), win_cesa_br_read(base, i)); | |||||
} | |||||
/* | |||||
* Set CESA decode windows. | |||||
*/ | |||||
static void | |||||
decode_win_cesa_setup(u_long base) | |||||
{ | |||||
uint32_t br, cr; | |||||
int i, j; | |||||
for (i = 0; i < MV_WIN_CESA_MAX; i++) { | |||||
win_cesa_cr_write(base, i, 0); | |||||
win_cesa_br_write(base, i, 0); | |||||
} | |||||
/* Only access to active DRAM banks is required */ | |||||
for (i = 0; i < MV_WIN_DDR_MAX; i++) { | |||||
if (ddr_is_active(i)) { | |||||
br = ddr_base(i); | |||||
cr = (((ddr_size(i) - 1) & 0xffff0000) | | |||||
(ddr_attr(i) << IO_WIN_ATTR_SHIFT) | | |||||
(ddr_target(i) << IO_WIN_TGT_SHIFT) | | |||||
IO_WIN_ENA_MASK); | |||||
/* Set the first free CESA window */ | |||||
for (j = 0; j < MV_WIN_CESA_MAX; j++) { | |||||
if (win_cesa_cr_read(base, j) & 0x1) | |||||
continue; | |||||
win_cesa_br_write(base, j, br); | |||||
win_cesa_cr_write(base, j, cr); | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
/************************************************************************** | /************************************************************************** | ||||
* USB windows routines | * USB windows routines | ||||
**************************************************************************/ | **************************************************************************/ | ||||
static int | static int | ||||
decode_win_usb_valid(void) | decode_win_usb_valid(void) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 1,421 Lines • Show Last 20 Lines |