From: Pankaj Bansal <pankaj.ban...@nxp.com> There was a bug in I2C DXE implementation, which caused the Ds1307 RTC device to issue two operation for register write, while this is a single operation task. refer page 12 (Slave Receiver Mode (Write Mode)) on
https://datasheets.maximintegrated.com/en/ds/DS1307.pdf Modify ds1307 RtcWrite code accordingly. Signed-off-by: Pankaj Bansal <pankaj.ban...@nxp.com> --- Silicon/Maxim/Library/Ds1307RtcLib/Ds1307RtcLib.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Silicon/Maxim/Library/Ds1307RtcLib/Ds1307RtcLib.c b/Silicon/Maxim/Library/Ds1307RtcLib/Ds1307RtcLib.c index 88dc198ffec8..fd7a8696e405 100644 --- a/Silicon/Maxim/Library/Ds1307RtcLib/Ds1307RtcLib.c +++ b/Silicon/Maxim/Library/Ds1307RtcLib/Ds1307RtcLib.c @@ -5,7 +5,7 @@ EmbeddedPkg/Library/TemplateRealTimeClockLib/RealTimeClockLib.c Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> - Copyright 2017 NXP + Copyright 2017, 2020 NXP SPDX-License-Identifier: BSD-2-Clause-Patent @@ -84,16 +84,15 @@ RtcWrite ( { RTC_I2C_REQUEST Req; EFI_STATUS Status; + UINT8 Buffer[2]; - Req.OperationCount = 2; + Req.OperationCount = 1; + Buffer[0] = RtcRegAddr; + Buffer[1] = Val; Req.SetAddressOp.Flags = 0; - Req.SetAddressOp.LengthInBytes = sizeof (RtcRegAddr); - Req.SetAddressOp.Buffer = &RtcRegAddr; - - Req.GetSetDateTimeOp.Flags = 0; - Req.GetSetDateTimeOp.LengthInBytes = sizeof (Val); - Req.GetSetDateTimeOp.Buffer = &Val; + Req.SetAddressOp.LengthInBytes = sizeof (Buffer); + Req.SetAddressOp.Buffer = Buffer; Status = mI2cMaster->StartRequest (mI2cMaster, FixedPcdGet8 (PcdI2cSlaveAddress), (VOID *)&Req, -- 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#56010): https://edk2.groups.io/g/devel/message/56010 Mute This Topic: https://groups.io/mt/72077438/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-