mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-03-16 23:07:00 +00:00
armv8: fsl-layerscape: rework the dwc3 snooping enable code
Instead of looking at all USB (host) devices, just search all DWC3 device tree nodes. This will (1) fix a panic if of_match is zero and (2) also apply the fixup if the controller is in peripheral mode. Both happen when the DWC3 USB controller driver is used. Signed-off-by: Michael Walle <michael@walle.cc> Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
This commit is contained in:
parent
bce039acf2
commit
f53e102e12
1 changed files with 13 additions and 15 deletions
|
@ -929,25 +929,23 @@ __weak int fsl_board_late_init(void)
|
|||
#define DWC3_GSBUSCFG0_CACHETYPE(n) (((n) & 0xffff) \
|
||||
<< DWC3_GSBUSCFG0_CACHETYPE_SHIFT)
|
||||
|
||||
void enable_dwc3_snooping(void)
|
||||
static void enable_dwc3_snooping(void)
|
||||
{
|
||||
int ret;
|
||||
u32 val;
|
||||
struct udevice *bus;
|
||||
struct uclass *uc;
|
||||
static const char * const compatibles[] = {
|
||||
"fsl,layerscape-dwc3",
|
||||
"fsl,ls1028a-dwc3",
|
||||
};
|
||||
fdt_addr_t dwc3_base;
|
||||
ofnode node;
|
||||
u32 val;
|
||||
int i;
|
||||
|
||||
ret = uclass_get(UCLASS_USB, &uc);
|
||||
if (ret)
|
||||
return;
|
||||
|
||||
uclass_foreach_dev(bus, uc) {
|
||||
if (!strcmp(bus->driver->of_match->compatible, "fsl,layerscape-dwc3")) {
|
||||
dwc3_base = devfdt_get_addr(bus);
|
||||
if (dwc3_base == FDT_ADDR_T_NONE) {
|
||||
dev_err(bus, "dwc3 regs missing\n");
|
||||
for (i = 0; i < ARRAY_SIZE(compatibles); i++) {
|
||||
ofnode_for_each_compatible_node(node, compatibles[i]) {
|
||||
dwc3_base = ofnode_get_addr(node);
|
||||
if (dwc3_base == FDT_ADDR_T_NONE)
|
||||
continue;
|
||||
}
|
||||
|
||||
val = in_le32(dwc3_base + DWC3_GSBUSCFG0);
|
||||
val &= ~DWC3_GSBUSCFG0_CACHETYPE(~0);
|
||||
val |= DWC3_GSBUSCFG0_CACHETYPE(0x2222);
|
||||
|
|
Loading…
Add table
Reference in a new issue