Skip to content

Commit 7382d2f

Browse files
aborzeszBartosz Golaszewski
authored andcommitted
gpio: graniterapids: Fix incorrect BAR assignment
Base Address of vGPIO MMIO register is provided directly by the BIOS instead of using offsets. Update address assignment to reflect this change in driver. Cc: stable@vger.kernel.org Signed-off-by: Alan Borzeszkowski <alan.borzeszkowski@linux.intel.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Andy Shevchenko <andy@kernel.org> Link: https://lore.kernel.org/r/20241204070415.1034449-3-mika.westerberg@linux.intel.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
1 parent eb9640f commit 7382d2f

1 file changed

Lines changed: 9 additions & 4 deletions

File tree

drivers/gpio/gpio-graniterapids.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#define GNR_PINS_PER_REG 32
3333
#define GNR_NUM_REGS DIV_ROUND_UP(GNR_NUM_PINS, GNR_PINS_PER_REG)
3434

35-
#define GNR_CFG_BAR 0x00
35+
#define GNR_CFG_PADBAR 0x00
3636
#define GNR_CFG_LOCK_OFFSET 0x04
3737
#define GNR_GPI_STATUS_OFFSET 0x20
3838
#define GNR_GPI_ENABLE_OFFSET 0x24
@@ -50,13 +50,15 @@
5050
* struct gnr_gpio - Intel Granite Rapids-D vGPIO driver state
5151
* @gc: GPIO controller interface
5252
* @reg_base: base address of the GPIO registers
53+
* @pad_base: base address of the vGPIO pad configuration registers
5354
* @ro_bitmap: bitmap of read-only pins
5455
* @lock: guard the registers
5556
* @pad_backup: backup of the register state for suspend
5657
*/
5758
struct gnr_gpio {
5859
struct gpio_chip gc;
5960
void __iomem *reg_base;
61+
void __iomem *pad_base;
6062
DECLARE_BITMAP(ro_bitmap, GNR_NUM_PINS);
6163
raw_spinlock_t lock;
6264
u32 pad_backup[];
@@ -65,7 +67,7 @@ struct gnr_gpio {
6567
static void __iomem *gnr_gpio_get_padcfg_addr(const struct gnr_gpio *priv,
6668
unsigned int gpio)
6769
{
68-
return priv->reg_base + gpio * sizeof(u32);
70+
return priv->pad_base + gpio * sizeof(u32);
6971
}
7072

7173
static int gnr_gpio_configure_line(struct gpio_chip *gc, unsigned int gpio,
@@ -292,6 +294,7 @@ static int gnr_gpio_probe(struct platform_device *pdev)
292294
struct gnr_gpio *priv;
293295
void __iomem *regs;
294296
int irq, ret;
297+
u32 offset;
295298

296299
priv = devm_kzalloc(dev, struct_size(priv, pad_backup, num_backup_pins), GFP_KERNEL);
297300
if (!priv)
@@ -303,6 +306,10 @@ static int gnr_gpio_probe(struct platform_device *pdev)
303306
if (IS_ERR(regs))
304307
return PTR_ERR(regs);
305308

309+
priv->reg_base = regs;
310+
offset = readl(priv->reg_base + GNR_CFG_PADBAR);
311+
priv->pad_base = priv->reg_base + offset;
312+
306313
irq = platform_get_irq(pdev, 0);
307314
if (irq < 0)
308315
return irq;
@@ -312,8 +319,6 @@ static int gnr_gpio_probe(struct platform_device *pdev)
312319
if (ret)
313320
return dev_err_probe(dev, ret, "failed to request interrupt\n");
314321

315-
priv->reg_base = regs + readl(regs + GNR_CFG_BAR);
316-
317322
gnr_gpio_init_pin_ro_bits(dev, priv->reg_base + GNR_CFG_LOCK_OFFSET,
318323
priv->ro_bitmap);
319324

0 commit comments

Comments
 (0)