From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4864:20::142; helo=mail-it1-x142.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-it1-x142.google.com (mail-it1-x142.google.com [IPv6:2607:f8b0:4864:20::142]) (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 5C2E121962301 for ; Mon, 28 Jan 2019 05:02:54 -0800 (PST) Received: by mail-it1-x142.google.com with SMTP id m8so10946966itk.0 for ; Mon, 28 Jan 2019 05:02:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=vPJ6q8xGeQhYANo0+sMPUERVjLZYPkzFM8zBUoXPzPo=; b=U3VonUF1y/v+eCmc/1IB1/EEhlnmXOVG5xlxJim3lGw4lUxkdtiAlWRt4L2LDqFtMK wMLNISb+60ZlgU1IHfRmmhhxYE0i4+NC6pzVnn1zje6HyfdUhpQLKzaiDEEj2hK4fgD6 WsyoovylXNaKe6wHH4jQKNat97PXOiG7keIf4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=vPJ6q8xGeQhYANo0+sMPUERVjLZYPkzFM8zBUoXPzPo=; b=WW+iAV978JQtNPgmOB5Dj++ZkkpiojZ0uOcKipmW1Z1m57SxNYhwg6T9+7t5G2hIcD DK4/MOTZTmef/BpCo3TsLcrFeOMDkxcNhR/DLiIMtMcf7i4/1Kuz40xXVHYil99OYczN ozUTwMC/1RYBdHqMxHHKI++WHtlCkFCY7TiJhDaqffR2MmdPcwB2whj9cszR0X2J0ttj ZYq2yol1RfQDoV9FYVAHWSxUJvfddOq+A+tv4oftnGMl5LZwnRmKDRi9zCh9/0G2HFi4 rD9OlVIddHDJHQXi/EbtCvHY9zFkG76WQeAoZ4dqoadjnH40eXrhIKxdHFJKVyQMJWRp iEwg== X-Gm-Message-State: AJcUukeZi7HepcxHdmILuJXP5ZHE3modip+gkHc8JEegKZtC8GJUot4b ayq13UAaBjCuNA2bEGCInwcBJ+POdvjhnTbibC1YB8nAKDvL2Q== X-Google-Smtp-Source: ALg8bN5gG+oKMpWmnTxKniwFg5Bkj1dAXsjP2MWuVDPIA9T987m9+DGB4AyLuX7TaZ9bewrVe75RztJYYk5/O6QA7C4= X-Received: by 2002:a24:710:: with SMTP id f16mr8757368itf.121.1548680573605; Mon, 28 Jan 2019 05:02:53 -0800 (PST) MIME-Version: 1.0 References: <20190128124445.9868-1-pete@akeo.ie> <20190128124445.9868-3-pete@akeo.ie> In-Reply-To: <20190128124445.9868-3-pete@akeo.ie> From: Ard Biesheuvel Date: Mon, 28 Jan 2019 14:02:42 +0100 Message-ID: To: Pete Batard Cc: "edk2-devel@lists.01.org" , Leif Lindholm Subject: Re: [PATCH v3 edk2-platforms 02/23] Silicon/Broadcom/Bcm283x: Add GpioLib X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Jan 2019 13:02:54 -0000 X-List-Received-Date: Mon, 28 Jan 2019 13:02:54 -0000 Content-Type: text/plain; charset="UTF-8" On Mon, 28 Jan 2019 at 13:45, Pete Batard wrote: > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Pete Batard > --- > Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c | 88 ++++++++++++++++++++ > Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.inf | 39 +++++++++ > Silicon/Broadcom/Include/IndustryStandard/Bcm2836Gpio.h | 60 +++++++++++++ > 3 files changed, 187 insertions(+) > > diff --git a/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c b/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c > new file mode 100644 > index 000000000000..eb6accafb01e > --- /dev/null > +++ b/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c > @@ -0,0 +1,88 @@ > +/** @file > + * > + * GPIO manipulation. > + * > + * Copyright (c) 2018, Andrei Warkentin > + * > + * This program and the accompanying materials > + * are licensed and made available under the terms and conditions of the BSD License > + * which accompanies this distribution. The full text of the license may be found at > + * http://opensource.org/licenses/bsd-license.php > + * > + * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > + * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > + * > + **/ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +STATIC > +VOID > +GpioFSELModify ( > + IN UINTN RegIndex, > + IN UINT32 ModifyMask, > + IN UINT32 FunctionMask > + ) > +{ > + UINT32 Val; > + EFI_PHYSICAL_ADDRESS Reg; > + > + Reg = RegIndex * sizeof (UINT32) + GPIO_GPFSEL0; > + > + ASSERT (Reg <= GPIO_GPFSEL5); > + ASSERT ((~ModifyMask & FunctionMask) == 0); > + > + Val = MmioRead32 (Reg); > + Val &= ~ModifyMask; > + Val |= FunctionMask; > + MmioWrite32 (Reg, Val); > +} > + > +VOID > +GpioPinFuncSet ( > + IN UINTN Pin, > + IN UINTN Function > + ) > +{ > + UINTN RegIndex; > + UINTN SelIndex; > + UINT32 ModifyMask; > + UINT32 FunctionMask; > + > + ASSERT (Pin < GPIO_PINS); > + ASSERT (Function <= GPIO_FSEL_MASK); > + > + RegIndex = Pin / 10; > + SelIndex = Pin % 10; > + > + ModifyMask = GPIO_FSEL_MASK << (SelIndex * GPIO_FSEL_BITS_PER_PIN); > + FunctionMask = Function << (SelIndex * GPIO_FSEL_BITS_PER_PIN); > + GpioFSELModify (RegIndex, ModifyMask, FunctionMask); > +} > + > +UINTN > +GpioPinFuncGet ( > + IN UINTN Pin > + ) > +{ > + UINT32 Val; > + UINTN RegIndex; > + UINTN SelIndex; > + EFI_PHYSICAL_ADDRESS Reg; > + > + ASSERT (Pin < GPIO_PINS); > + > + RegIndex = Pin / 10; > + SelIndex = Pin % 10; > + Reg = RegIndex * sizeof (UINT32) + GPIO_GPFSEL0; > + > + Val = MmioRead32 (Reg); > + Val >>= SelIndex * GPIO_FSEL_BITS_PER_PIN; > + Val &= GPIO_FSEL_MASK; > + return Val; > +} > diff --git a/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.inf b/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.inf > new file mode 100644 > index 000000000000..68ebe44e3d1c > --- /dev/null > +++ b/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.inf > @@ -0,0 +1,39 @@ > +#/** @file > +# > +# Manipulate GPIOs. > +# > +# Copyright (c) 2018, Andrei Warkentin > +# > +# This program and the accompanying materials > +# are licensed and made available under the terms and conditions of the BSD License > +# which accompanies this distribution. The full text of the license may be found at > +# http://opensource.org/licenses/bsd-license.php > +# > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +# > +#**/ > + > +[Defines] > + INF_VERSION = 0x0001001A > + BASE_NAME = GpioLib > + FILE_GUID = B9F59B6B-B105-41C7-8F5A-2C60DD7FD7AB > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = GpioLib > + > +[Sources] > + GpioLib.c > + > +[Packages] > + ArmPkg/ArmPkg.dec > + MdePkg/MdePkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + Silicon/Broadcom/Bcm283x/Bcm283x.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + IoLib > + > +[Guids] > diff --git a/Silicon/Broadcom/Include/IndustryStandard/Bcm2836Gpio.h b/Silicon/Broadcom/Include/IndustryStandard/Bcm2836Gpio.h Please move this header to Silicon/Broadcom/Bcm283x/... > new file mode 100644 > index 000000000000..45774b639ca8 > --- /dev/null > +++ b/Silicon/Broadcom/Include/IndustryStandard/Bcm2836Gpio.h > @@ -0,0 +1,60 @@ > +/** @file > + * > + * Copyright (c) 2018, Andrei Warkentin > + * Copyright (c) Microsoft Corporation. All rights reserved. > + * > + * This program and the accompanying materials > + * are licensed and made available under the terms and conditions of the BSD License > + * which accompanies this distribution. The full text of the license may be found at > + * http://opensource.org/licenses/bsd-license.php > + * > + * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > + * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > + * > + **/ > + > +#ifndef __BCM2836_GPIO_H__ > +#define __BCM2836_GPIO_H__ > + > +#define GPIO_BASE_ADDRESS (BCM2836_SOC_REGISTERS + 0x00200000) > + > +#define GPIO_GPFSEL0 (GPIO_BASE_ADDRESS + 0x00) > +#define GPIO_GPFSEL1 (GPIO_BASE_ADDRESS + 0x04) > +#define GPIO_GPFSEL2 (GPIO_BASE_ADDRESS + 0x08) > +#define GPIO_GPFSEL3 (GPIO_BASE_ADDRESS + 0x0C) > +#define GPIO_GPFSEL4 (GPIO_BASE_ADDRESS + 0x10) > +#define GPIO_GPFSEL5 (GPIO_BASE_ADDRESS + 0x14) > + > +#define GPIO_GPCLR0 (GPIO_BASE_ADDRESS + 0x28) > +#define GPIO_GPCLR1 (GPIO_BASE_ADDRESS + 0x2C) > + > +#define GPIO_GPSET0 (GPIO_BASE_ADDRESS + 0x1C) > +#define GPIO_GPSET1 (GPIO_BASE_ADDRESS + 0x20) > + > +#define GPIO_FSEL_INPUT 0x0 > +#define GPIO_FSEL_OUTPUT 0x1 > +#define GPIO_FSEL_ALT0 0x4 > +#define GPIO_FSEL_ALT1 0x5 > +#define GPIO_FSEL_ALT2 0x6 > +#define GPIO_FSEL_ALT3 0x7 > +#define GPIO_FSEL_ALT4 0x3 > +#define GPIO_FSEL_ALT5 0x2 > + > +#define GPIO_FSEL_PINS_PER_REGISTER 10 > +#define GPIO_FSEL_BITS_PER_PIN 3 > +#define GPIO_FSEL_MASK ((1 << GPIO_FSEL_BITS_PER_PIN) - 1) > + > +#define GPIO_PINS 54 > + > +VOID > +GpioPinFuncSet ( > + IN UINTN Pin, > + IN UINTN Function > + ); > + > +UINTN > +GpioPinFuncGet ( > + IN UINTN Pin > + ); > + Please move these elsewhere: they don't belong in the IP block header. > +#endif /* __BCM2836_GPIO_H__ */ > -- > 2.17.0.windows.1 >