From patchwork Wed Dec 27 15:49:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 122805 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp2337465qgn; Wed, 27 Dec 2017 07:50:19 -0800 (PST) X-Google-Smtp-Source: ACJfBosKiS4yGXOgsHqtw5xpFJko1yN5q2KFDrz4hKugm4bhULt+AYJzZo6ewgY0cvgf9pHQwxG4 X-Received: by 10.99.144.193 with SMTP id a184mr24991378pge.318.1514389819542; Wed, 27 Dec 2017 07:50:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514389819; cv=none; d=google.com; s=arc-20160816; b=pv7jZkaxDwfV5YxOX51JUFz+7//c3vNAL0djshxrXo3CG1kmF1D5IOcp31XY4HrUwK 0nuMZK4BjahAUUGl5a/hI8DZKz+OR+6Zr3Yz3rvzT5Ue/OdAuqN9w2JJUPY/abJUB7di 4sxa0vNjz06zJQOziqIFHDklE5cAyaMlshPz+YSwxcijREgHU1owf9UzYOEV8eo+gjzc BxUFadwxMeCtGccNAwSKCTBsz1Qteh7PL3GMrHQo+fhJ0ty3HBvOTtdRkU52dYyunLxr 9p57FOV9FtUHoiSWAQPNFDX/Obzq2kgHuZtz0UnIlfk6Os5becSKNiSOSad0Jq7iilSy jEog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=jALQrmjuI+kbvXHCgw2I+DBv+iyMyphbykznkQ6vWPE=; b=R6BKwodPW/C2UvOsN9pqLjcbkWSfE5VYnh7lgsq0FEJtzuIhKHOXfgY9ZbqSE++LWV uR8xNmAvGVQoI/fPQqFdvhpB5tCJUM1HctjF9LIiICC9rcz817yzasRT+bzCpAiNuVZa v+FSIX9SYs7C4Fpex/BZPMsJzTX968z4tcxHBP1MeXs2nsLyhXfnCeQR7BrC/H7EJp2x asCaGU55QC0xwmnEqFjBuedRXypoM1Kw8ReEYU5+03bjmpnV6SBY+Fl273VHSpplho8f NPMtDgbb8U5FN6W2GqZ7Fa7n1emEze+cFehThGt0fE/K/CTaKX1qMb9F7gDrvXgd0C9A Z/ow== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=J7gnxf4z; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from ml01.01.org (ml01.01.org. [198.145.21.10]) by mx.google.com with ESMTPS id a1si7796122pff.387.2017.12.27.07.50.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Dec 2017 07:50:19 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) client-ip=198.145.21.10; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=J7gnxf4z; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id D521522280C3F; Wed, 27 Dec 2017 07:45:21 -0800 (PST) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:400c:c0c::241; helo=mail-wr0-x241.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wr0-x241.google.com (mail-wr0-x241.google.com [IPv6:2a00:1450:400c:c0c::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B618E22280C27 for ; Wed, 27 Dec 2017 07:45:19 -0800 (PST) Received: by mail-wr0-x241.google.com with SMTP id o2so37037782wro.5 for ; Wed, 27 Dec 2017 07:50:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mYfkUwmOQm2oWGvmPBoBYxum1hPxS1NW1MLnfykGhRY=; b=J7gnxf4zMudJWe33wojE8hWAvD3Cuaq7uUgiVM5Ay8JL3ICGch7NqR9I7ByS56vdsK dEXWDeqK7SpJO/qEBjMURtPQdc8qAF750ckV1ZmKBqWTJ2pqloPsa2AUMw3Gw9UPZEjM nGGIDlBTzYhEehDpTZQJFYSFP0fGDIgKszFMw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mYfkUwmOQm2oWGvmPBoBYxum1hPxS1NW1MLnfykGhRY=; b=ZKDvymnDHN+JUnAwdDGlnWtfD9JvEq70BHkTjJHV+7H3KttThCXaoGcFBFpDsem4xF 0FqN4xzHzbNeRr0TnT+r9SlHk8rz0JwrSVtUVmBI+RIYLpNyApRAerMWMwtAnjTmb+GJ BtsCGMdM3EKmhFn11Xi3d2Fo+uAxnu5JxfWxPPEysIYbXDwCHTUwH6E9jX0My4KPiYCI A/JOIikjQkB6JwZG7xr9r9WJGvIsXxEp2n6RLOYNgCeoQ156Q8kNq1f6Q63dh6sgu3FK gy3iD3aLSqiZiLqDDqP6b+IFeuyuTXmS2qYmbj8wDc7RP3DmU5L0HvhxoUHehAxz/Lxm 8h2Q== X-Gm-Message-State: AKGB3mKq5ydfnzx/b2aTd9xBvnQ8iPFfuhegqsUpcVoySvQgy9OzP5Hq r0kc6x2TCknhpVQerFinSVJD6EzXLfQ= X-Received: by 10.223.188.66 with SMTP id a2mr30212691wrh.249.1514389813896; Wed, 27 Dec 2017 07:50:13 -0800 (PST) Received: from localhost.localdomain ([105.137.110.132]) by smtp.gmail.com with ESMTPSA id i17sm20840876wrf.71.2017.12.27.07.50.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Dec 2017 07:50:13 -0800 (PST) From: Ard Biesheuvel To: edk2-devel@lists.01.org Date: Wed, 27 Dec 2017 15:49:57 +0000 Message-Id: <20171227155001.25886-3-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171227155001.25886-1-ard.biesheuvel@linaro.org> References: <20171227155001.25886-1-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH edk2-platforms 2/6] Silicon/NXP/Pcf8563RealTimeClockLib: avoid driver binding protocol X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: leif.lindholm@linaro.org, Ard Biesheuvel MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" Instead of registering a notification callback on the driver binding protocol, and attempting to connect our I2C master handle each time a new driver is registered, switch to the more obvious approach of registering a notification callback on the I2C master protocol directly. The original code was written under the assumption that it would make the RTC available at an earlier time, but given that all handles that are created during the execution of a driver entry point are connected by DXE core right away (i.e., before StartImage() returns), this is not really necessary, and in fact, may result in the driver already having been connected by the time we attempt to connect it. Note that it is now up to the platform to ensure that ConnectController() is called for the handle if DXE core does not call it by itself, or does call it but at a time when no I2C master protocol driver is available yet. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel --- Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.c | 31 ++++++++------------ Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.inf | 1 - 2 files changed, 13 insertions(+), 19 deletions(-) -- 2.11.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel diff --git a/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.c b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.c index 6bc4aef28849..fb58e1feb424 100644 --- a/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.c +++ b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.c @@ -41,7 +41,7 @@ #define EPOCH_BASE 2000 STATIC EFI_HANDLE mI2cMasterHandle; -STATIC VOID *mDriverEventRegistration; +STATIC VOID *mI2cMasterEventRegistration; STATIC EFI_I2C_MASTER_PROTOCOL *mI2cMaster; STATIC EFI_EVENT mRtcVirtualAddrChangeEvent; @@ -263,12 +263,12 @@ LibSetWakeupTime ( STATIC VOID -DriverRegistrationEvent ( +I2cMasterRegistrationEvent ( IN EFI_EVENT Event, IN VOID *Context ) { - EFI_HANDLE Handle[2]; + EFI_HANDLE Handle; UINTN BufferSize; EFI_STATUS Status; EFI_I2C_MASTER_PROTOCOL *I2cMaster; @@ -280,10 +280,10 @@ DriverRegistrationEvent ( do { BufferSize = sizeof (EFI_HANDLE); Status = gBS->LocateHandle (ByRegisterNotify, - &gEfiDriverBindingProtocolGuid, - mDriverEventRegistration, + &gEfiI2cMasterProtocolGuid, + mI2cMasterEventRegistration, &BufferSize, - Handle); + &Handle); if (EFI_ERROR (Status)) { if (Status != EFI_NOT_FOUND) { DEBUG ((DEBUG_WARN, "%a: gBS->LocateHandle () returned %r\n", @@ -292,12 +292,7 @@ DriverRegistrationEvent ( break; } - // - // Check if we can connect our handle to this driver. - // - Handle[1] = NULL; - Status = gBS->ConnectController (mI2cMasterHandle, Handle, NULL, FALSE); - if (EFI_ERROR (Status)) { + if (Handle != mI2cMasterHandle) { continue; } @@ -378,16 +373,16 @@ LibRtcInitialize ( ASSERT_EFI_ERROR (Status); // - // Register a protocol registration notification callback on the driver - // binding protocol so we can attempt to connect our I2C master to it - // as soon as it appears. + // Register a protocol registration notification callback on the I2C master + // protocol. This will notify us even if the protocol instance we are looking + // for has already been installed. // EfiCreateProtocolNotifyEvent ( - &gEfiDriverBindingProtocolGuid, + &gEfiI2cMasterProtocolGuid, TPL_CALLBACK, - DriverRegistrationEvent, + I2cMasterRegistrationEvent, NULL, - &mDriverEventRegistration); + &mI2cMasterEventRegistration); // // Register for the virtual address change event diff --git a/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.inf b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.inf index 1a9a6f6c9cf3..e232902c6b5d 100644 --- a/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.inf +++ b/Silicon/NXP/Library/Pcf8563RealTimeClockLib/Pcf8563RealTimeClockLib.inf @@ -40,7 +40,6 @@ [Guids] gEfiEventVirtualAddressChangeGuid [Protocols] - gEfiDriverBindingProtocolGuid ## CONSUMES gEfiI2cMasterProtocolGuid ## CONSUMES gPcf8563RealTimeClockLibI2cMasterProtocolGuid ## CONSUMES