@@ -1437,13 +1437,16 @@ static int udc_dwc2_set_address(const struct device *dev, const uint8_t addr)
1437
1437
{
1438
1438
struct usb_dwc2_reg * const base = dwc2_get_base (dev );
1439
1439
mem_addr_t dcfg_reg = (mem_addr_t )& base -> dcfg ;
1440
+ uint32_t dcfg ;
1440
1441
1441
1442
if (addr > (USB_DWC2_DCFG_DEVADDR_MASK >> USB_DWC2_DCFG_DEVADDR_POS )) {
1442
1443
return - EINVAL ;
1443
1444
}
1444
1445
1445
- sys_clear_bits (dcfg_reg , USB_DWC2_DCFG_DEVADDR_MASK );
1446
- sys_set_bits (dcfg_reg , usb_dwc2_set_dcfg_devaddr (addr ));
1446
+ dcfg = sys_read32 (dcfg_reg );
1447
+ dcfg &= ~USB_DWC2_DCFG_DEVADDR_MASK ;
1448
+ dcfg |= usb_dwc2_set_dcfg_devaddr (addr );
1449
+ sys_write32 (dcfg , dcfg_reg );
1447
1450
LOG_DBG ("Set new address %u for %p" , addr , dev );
1448
1451
1449
1452
return 0 ;
@@ -1454,14 +1457,14 @@ static int udc_dwc2_test_mode(const struct device *dev,
1454
1457
{
1455
1458
struct usb_dwc2_reg * const base = dwc2_get_base (dev );
1456
1459
mem_addr_t dctl_reg = (mem_addr_t )& base -> dctl ;
1457
- uint32_t tstctl ;
1460
+ uint32_t dctl ;
1458
1461
1459
1462
if (mode == 0U || mode > USB_DWC2_DCTL_TSTCTL_TESTFE ) {
1460
1463
return - EINVAL ;
1461
1464
}
1462
1465
1463
- tstctl = usb_dwc2_get_dctl_tstctl ( sys_read32 (dctl_reg ) );
1464
- if (tstctl != USB_DWC2_DCTL_TSTCTL_DISABLED ) {
1466
+ dctl = sys_read32 (dctl_reg );
1467
+ if (usb_dwc2_get_dctl_tstctl ( dctl ) != USB_DWC2_DCTL_TSTCTL_DISABLED ) {
1465
1468
return - EALREADY ;
1466
1469
}
1467
1470
@@ -1470,7 +1473,8 @@ static int udc_dwc2_test_mode(const struct device *dev,
1470
1473
return 0 ;
1471
1474
}
1472
1475
1473
- sys_set_bits (dctl_reg , usb_dwc2_set_dctl_tstctl (mode ));
1476
+ dctl |= usb_dwc2_set_dctl_tstctl (mode );
1477
+ sys_write32 (dctl , dctl_reg );
1474
1478
LOG_DBG ("Enable Test Mode %u" , mode );
1475
1479
1476
1480
return 0 ;
@@ -1548,6 +1552,7 @@ static int udc_dwc2_init_controller(const struct device *dev)
1548
1552
struct usb_dwc2_reg * const base = config -> base ;
1549
1553
mem_addr_t gusbcfg_reg = (mem_addr_t )& base -> gusbcfg ;
1550
1554
mem_addr_t dcfg_reg = (mem_addr_t )& base -> dcfg ;
1555
+ uint32_t dcfg ;
1551
1556
uint32_t gusbcfg ;
1552
1557
uint32_t ghwcfg2 ;
1553
1558
uint32_t ghwcfg3 ;
@@ -1616,19 +1621,24 @@ static int udc_dwc2_init_controller(const struct device *dev)
1616
1621
LOG_DBG ("LPM mode is %s" ,
1617
1622
(ghwcfg3 & USB_DWC2_GHWCFG3_LPMMODE ) ? "enabled" : "disabled" );
1618
1623
1624
+ dcfg = sys_read32 (dcfg_reg );
1625
+
1619
1626
/* Configure PHY and device speed */
1627
+ dcfg &= ~USB_DWC2_DCFG_DEVSPD_MASK ;
1620
1628
switch (usb_dwc2_get_ghwcfg2_hsphytype (ghwcfg2 )) {
1621
1629
case USB_DWC2_GHWCFG2_HSPHYTYPE_UTMIPLUSULPI :
1622
1630
__fallthrough ;
1623
1631
case USB_DWC2_GHWCFG2_HSPHYTYPE_ULPI :
1624
1632
gusbcfg |= USB_DWC2_GUSBCFG_PHYSEL_USB20 |
1625
1633
USB_DWC2_GUSBCFG_ULPI_UTMI_SEL_ULPI ;
1626
- sys_set_bits (dcfg_reg , USB_DWC2_DCFG_DEVSPD_USBHS20 );
1634
+ dcfg |= USB_DWC2_DCFG_DEVSPD_USBHS20
1635
+ << USB_DWC2_DCFG_DEVSPD_POS ;
1627
1636
break ;
1628
1637
case USB_DWC2_GHWCFG2_HSPHYTYPE_UTMIPLUS :
1629
1638
gusbcfg |= USB_DWC2_GUSBCFG_PHYSEL_USB20 |
1630
1639
USB_DWC2_GUSBCFG_ULPI_UTMI_SEL_UTMI ;
1631
- sys_set_bits (dcfg_reg , USB_DWC2_DCFG_DEVSPD_USBHS20 );
1640
+ dcfg |= USB_DWC2_DCFG_DEVSPD_USBHS20
1641
+ << USB_DWC2_DCFG_DEVSPD_POS ;
1632
1642
break ;
1633
1643
case USB_DWC2_GHWCFG2_HSPHYTYPE_NO_HS :
1634
1644
__fallthrough ;
@@ -1638,15 +1648,17 @@ static int udc_dwc2_init_controller(const struct device *dev)
1638
1648
gusbcfg |= USB_DWC2_GUSBCFG_PHYSEL_USB11 ;
1639
1649
}
1640
1650
1641
- sys_set_bits (dcfg_reg , USB_DWC2_DCFG_DEVSPD_USBFS1148 );
1651
+ dcfg |= USB_DWC2_DCFG_DEVSPD_USBFS1148
1652
+ << USB_DWC2_DCFG_DEVSPD_POS ;
1642
1653
}
1643
1654
1644
1655
if (usb_dwc2_get_ghwcfg4_phydatawidth (ghwcfg4 )) {
1645
1656
gusbcfg |= USB_DWC2_GUSBCFG_PHYIF_16_BIT ;
1646
1657
}
1647
1658
1648
1659
/* Update PHY configuration */
1649
- sys_set_bits (gusbcfg_reg , gusbcfg );
1660
+ sys_write32 (gusbcfg , gusbcfg_reg );
1661
+ sys_write32 (dcfg , dcfg_reg );
1650
1662
1651
1663
priv -> outeps = 0U ;
1652
1664
for (uint8_t i = 0U ; i < priv -> numdeveps ; i ++ ) {
0 commit comments