usb: dwc2: Make dwc2_readl/writel functions endianness-agnostic.
Declared dwc2_check_core_endianness() function for dynamicly check core endianness. Added needs_byte_swap flag to hsotg structure, and depending on flag swap value inside dwc2_readl/writel functions. Signed-off-by: Gevorg Sahakyan <sahakyan@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:

committed by
Felipe Balbi

parent
b138e23d3d
commit
fe369e1826
@@ -352,6 +352,23 @@ static void dwc2_driver_shutdown(struct platform_device *dev)
|
||||
disable_irq(hsotg->irq);
|
||||
}
|
||||
|
||||
/**
|
||||
* dwc2_check_core_endianness() - Returns true if core and AHB have
|
||||
* opposite endianness.
|
||||
* @hsotg: Programming view of the DWC_otg controller.
|
||||
*/
|
||||
static bool dwc2_check_core_endianness(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
u32 snpsid;
|
||||
|
||||
snpsid = ioread32(hsotg->regs + GSNPSID);
|
||||
if ((snpsid & GSNPSID_ID_MASK) == DWC2_OTG_ID ||
|
||||
(snpsid & GSNPSID_ID_MASK) == DWC2_FS_IOT_ID ||
|
||||
(snpsid & GSNPSID_ID_MASK) == DWC2_HS_IOT_ID)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* dwc2_driver_probe() - Called when the DWC_otg core is bound to the DWC_otg
|
||||
* driver
|
||||
@@ -395,6 +412,8 @@ static int dwc2_driver_probe(struct platform_device *dev)
|
||||
dev_dbg(&dev->dev, "mapped PA %08lx to VA %p\n",
|
||||
(unsigned long)res->start, hsotg->regs);
|
||||
|
||||
hsotg->needs_byte_swap = dwc2_check_core_endianness(hsotg);
|
||||
|
||||
retval = dwc2_lowlevel_hw_init(hsotg);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
Reference in New Issue
Block a user