x86: Probe pinctrl driver in cpu_init_r()
At present pinctrl driver gets probed in ich6_gpio driver's probe routine, which has two issues: - Pin's PADs only gets configured when GPIO driver is probed, which is not done by default. This leaves the board in a partially functional state as we must initialize PADs correctly to get perepherals fully working. - The probe routine of pinctrl driver is called multiple times, as normally there are multiple GPIO controllers. It should really be called just once. Move the call to syscon_get_by_driver_data() from ich6_gpio driver to cpu_init_r(). Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Stefan Roese <sr@denx.de> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: George McCollister <george.mccollister@gmail.com> Tested-by: George McCollister <george.mccollister@gmail.com>
This commit is contained in:
parent
2f29c83eec
commit
d8906c1f3f
|
@ -24,6 +24,7 @@
|
|||
#include <dm.h>
|
||||
#include <errno.h>
|
||||
#include <malloc.h>
|
||||
#include <syscon.h>
|
||||
#include <asm/control_regs.h>
|
||||
#include <asm/coreboot_tables.h>
|
||||
#include <asm/cpu.h>
|
||||
|
@ -751,6 +752,10 @@ int cpu_init_r(void)
|
|||
uclass_first_device(UCLASS_PCH, &dev);
|
||||
uclass_first_device(UCLASS_LPC, &dev);
|
||||
|
||||
/* Set up pin control if available */
|
||||
ret = syscon_get_by_driver_data(X86_SYSCON_PINCONF, &dev);
|
||||
debug("%s, pinctrl=%p, ret=%d\n", __func__, dev, ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
#include <fdtdec.h>
|
||||
#include <pch.h>
|
||||
#include <pci.h>
|
||||
#include <syscon.h>
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/io.h>
|
||||
|
@ -113,12 +112,6 @@ static int ich6_gpio_probe(struct udevice *dev)
|
|||
struct ich6_bank_platdata *plat = dev_get_platdata(dev);
|
||||
struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
|
||||
struct ich6_bank_priv *bank = dev_get_priv(dev);
|
||||
struct udevice *pinctrl;
|
||||
int ret;
|
||||
|
||||
/* Set up pin control if available */
|
||||
ret = syscon_get_by_driver_data(X86_SYSCON_PINCONF, &pinctrl);
|
||||
debug("%s, pinctrl=%p, ret=%d\n", __func__, pinctrl, ret);
|
||||
|
||||
uc_priv->gpio_count = GPIO_PER_BANK;
|
||||
uc_priv->bank_name = plat->bank_name;
|
||||
|
|
Loading…
Reference in New Issue