[RFC/RFT/PATCH V3] gpio: omap: refresh patch be more aggressive with pm_runtime against v3.12-rc5
From: Felipe Balbi ba...@ti.com try to keep gpio block suspended as much as possible. Tested with pandaboard and a sysfs exported gpio. Signed-off-by: Felipe Balbi balbi at ti.com [caesarxuc...@gmail.com : Refreshed against v3.12-rc5, and added revision check to enable aggressive pm_runtime on OMAP4-only. Because am33xx_gpio_sysc.idlemodes seems to be wrongly marked as SIDLE_SMART_WKUP, which might cause missed interrupts with this patch. Tested on Pandaboard rev A2.] Signed-off-by: Chao Xu caesarxuc...@gmail.com --- changes since v2: *add wrapper function to avoid 'is_aggressive_pm' check everywhere, as suggested by Santosh Shilimkar *fix format issue in commit log drivers/gpio/gpio-omap.c| 90 +-- include/linux/platform_data/gpio-omap.h |1 + 2 files changed, 74 insertions(+), 17 deletions(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 89675f8..fc5318b 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -76,6 +76,7 @@ struct gpio_bank { int context_loss_count; int power_mode; bool workaround_enabled; + bool is_aggressive_pm; void (*set_dataout)(struct gpio_bank *bank, int gpio, int enable); int (*get_context_loss_count)(struct device *dev); @@ -90,6 +91,18 @@ struct gpio_bank { #define BANK_USED(bank) (bank-mod_usage || bank-irq_usage) #define LINE_USED(line, offset) (line (1 offset)) +static void _aggressive_pm_runtime_get_sync(struct gpio_bank *bank) +{ + if (bank-is_aggressive_pm) + pm_runtime_get_sync(bank-dev); +} + +static void _aggressive_pm_runtime_put(struct gpio_bank *bank) +{ + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); +} + static int irq_to_gpio(struct gpio_bank *bank, unsigned int gpio_irq) { return bank-chip.base + gpio_irq; @@ -473,8 +486,13 @@ static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset) static int gpio_is_input(struct gpio_bank *bank, int mask) { void __iomem *reg = bank-base + bank-regs-direction; + u32 val; - return __raw_readl(reg) mask; + _aggressive_pm_runtime_get_sync(bank); + val = __raw_readl(reg) mask; + _aggressive_pm_runtime_put(bank); + + return val; } static int gpio_irq_type(struct irq_data *d, unsigned type) @@ -485,7 +503,7 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) unsigned long flags; unsigned offset; - if (!BANK_USED(bank)) + if (!BANK_USED(bank) !bank-is_aggressive_pm) pm_runtime_get_sync(bank-dev); #ifdef CONFIG_ARCH_OMAP1 @@ -503,6 +521,7 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) (type (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH))) return -EINVAL; + _aggressive_pm_runtime_get_sync(bank); spin_lock_irqsave(bank-lock, flags); offset = GPIO_INDEX(bank, gpio); retval = _set_gpio_triggering(bank, offset, type); @@ -511,11 +530,13 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) _set_gpio_direction(bank, offset, 1); } else if (!gpio_is_input(bank, 1 offset)) { spin_unlock_irqrestore(bank-lock, flags); + _aggressive_pm_runtime_put(bank); return -EINVAL; } bank-irq_usage |= 1 GPIO_INDEX(bank, gpio); spin_unlock_irqrestore(bank-lock, flags); + _aggressive_pm_runtime_put(bank); if (type (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) __irq_set_handler_locked(d-irq, handle_level_irq); @@ -668,10 +689,11 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) unsigned long flags; /* -* If this is the first gpio_request for the bank, -* enable the bank module. +* if aggressive runtime pm is supported, enable the bank module +* for each gpio_request. Otherwise enable the bank module if this +* is the first gpio_request for the bank. */ - if (!BANK_USED(bank)) + if (bank-is_aggressive_pm || !BANK_USED(bank)) pm_runtime_get_sync(bank-dev); spin_lock_irqsave(bank-lock, flags); @@ -685,7 +707,7 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) } bank-mod_usage |= 1 offset; spin_unlock_irqrestore(bank-lock, flags); - + _aggressive_pm_runtime_put(bank); return 0; } @@ -694,6 +716,8 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset) struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip); unsigned long flags; + _aggressive_pm_runtime_get_sync(bank); + spin_lock_irqsave(bank-lock, flags); bank-mod_usage = ~(1 offset); _disable_gpio_module(bank, offset); @@ -701,10 +725,11 @@ static void omap_gpio_free(struct gpio_chip *chip
Re: [PATCH V2] gpio: omap: refresh patch be more aggressive with pm_runtime against v3.12-rc5
Sorry for the late reply. On Fri, Nov 29, 2013 at 11:04 AM, Santosh Shilimkar santosh.shilim...@ti.com wrote: Adding Kevin's Linaro id, + Nishant, On Tuesday 26 November 2013 05:46 PM, Chao Xu wrote: From: Felipe Balbi ba...@ti.com try to keep gpio block suspended as much as possible. Tested with pandaboard and a sysfs exported gpio. Signed-off-by: Felipe Balbi balbi at ti.com [caesarxuc...@gmail.com : Refreshed against v3.12-rc5, and added revision check to enable aggressive pm_runtime on OMAP4-only. Because am33xx_gpio_sysc.idlemodes seems to be wrongly marked as SIDLE_SMART_WKUP, which might cause missed interrupts with this patch. Tested on Pandaboard rev A2.] Please format the text and limit it to 80 char rule. Sorry. It's my first time submitting a patch. I will fix it and resubmit. Signed-off-by: Chao Xu caesarxuc...@gmail.com --- According to Mr. Felipe Balbi, the original patch was not accepted because interrupts would be missed when GPIO was used as IRQ source. But in my tests with pandaboard, interrupts were not missed. This is because _idle_sysc() sets the idlemode of gpio module to smart-idle-wakeup, and according to OMAP4430 TRM, under this idlemode, the gpio can generate an asynchronous wakeup request to the PRCM. And after GPIO is awake, the wake-up request is reflected into the interrupt status registers. A change made on the original patch is only applying the aggressive runtime pm scheme on OMAP4, because I don’t have HW to test OMAP3 or am33xx devices. According to the respective TRMs, their GPIO modules also can generate wake-up request if the idlemode is set to smart-idle or smart-idle-wakeup. So the patch should work for them, too. But I suspect a potential SW bug may cause missed interrupts: the am33xx_gpio_sysc.idlemodes is marked as capable of SIDLE_SMART_WKUP in omap_hwmod_33xx.c. But according to AM335x TRM, _only_ gpio0 is capable of this mode. This may make GPIO stuck in force-idle mode and unable to generate wakeup request. And thus interrupt will be missed. Again, I don’t have the HW to verify whether this is a bug or not :( In general I am not against this idea but patch has many assumptions which are not entirely correct. - SMART_WAKEUP will take care of waking IP etc not always true to power domain getting into idle. I agree that if the power domain goes to idle, SMART_WAKEUP won't be effective. But, correct me if i'm wrong, even if we don't call runtime_put(), the power domain can still go to idle. Because the modulemode of GPIO is set to HW_AUTO in this case, which won't prevent the power domain goes to retention. So this patch doesn't make the situation worse. - If we want to go on this path then I would like to see we address omap2_gpio_[prepare/resumne]_for_idle() I did a quick google search but didn't find the problem with the two functions. Could you give me a pointer here? - GPIO though sound simple is one of the most notorious IP block on PM front so this needs lot of testing. This patch not seems be tested at all so I would have much liked it to be in RFC/RFT state. I tested using a gpio pin as interrupt source after applying the patch. What are the other tests that I should do? Is there a formal way of reporting test results here? drivers/gpio/gpio-omap.c| 103 ++- include/linux/platform_data/gpio-omap.h |1 + 2 files changed, 87 insertions(+), 17 deletions(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 89675f8..90661f2 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -76,6 +76,7 @@ struct gpio_bank { int context_loss_count; int power_mode; bool workaround_enabled; + bool is_aggressive_pm; void (*set_dataout)(struct gpio_bank *bank, int gpio, int enable); int (*get_context_loss_count)(struct device *dev); @@ -473,8 +474,15 @@ static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset) static int gpio_is_input(struct gpio_bank *bank, int mask) { void __iomem *reg = bank-base + bank-regs-direction; + u32 val; - return __raw_readl(reg) mask; + if (bank-is_aggressive_pm) + pm_runtime_get_sync(bank-dev); + val = __raw_readl(reg) mask; + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); + Move above in some wrapper instead of sprinkling the 'is_aggressive_pm' check everywhere. Will do. @@ -1585,18 +1651,21 @@ static const struct omap_gpio_platform_data omap2_pdata = { .regs = omap2_gpio_regs, .bank_width = 32, .dbck_flag = false, + .is_aggressive_pm = false, }; static const struct omap_gpio_platform_data omap3_pdata = { .regs = omap2_gpio_regs, .bank_width = 32, .dbck_flag = true, + .is_aggressive_pm = false, }; static const struct omap_gpio_platform_data omap4_pdata = { .regs
Re: [BUG] PandaBoard hangs before starting init while booting v3.12
Thanks, Tony. I checked my .config and this option is enabled. FYI, I raised this issue in u-boot mailing-list, too. It seems to be a bug in u-boot and only happens to certain version of pandaboard. The name of the thread is No single character output after update to latest u-boot on pandaboard On Tue, Nov 26, 2013 at 12:20 PM, Tony Lindgren t...@atomide.com wrote: * Chao Xu caesarxuc...@gmail.com [131122 19:28]: I wonder if we also have some dependency to some earlier versions of u-boot as u-boot now only muxes the essential pins? This is exactly the problem in my case. I added #define CONFIG_SYS_ENABLE_PADS_ALL in u-boot/include/configs/omap4_common.h and now there is output. I guess the reason that the u-boot worked out-of-box for Ben but not for me is that I missed some configurations in v3.12 kernel. I image there is a config options that tells the kernel to take care of the non-essential pins that used to be the responsibility of u-boot. Could you confirm my hypothesis? And if so, could you kindly suggest what's the name of the config option? That would be CONFIG_PINCTRL_SINGLE=y for device tree based omaps. But if we have the configuration missing for some driver in the board specific .dts file, that won't help naturally. We do have PINCTRL_SINGLE enabled in omap2plus_defconfig. Regards, Tony -- Regards, Chao Xu -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2] gpio: omap: refresh patch be more aggressive with pm_runtime against v3.12-rc5
From: Felipe Balbi ba...@ti.com try to keep gpio block suspended as much as possible. Tested with pandaboard and a sysfs exported gpio. Signed-off-by: Felipe Balbi balbi at ti.com [caesarxuc...@gmail.com : Refreshed against v3.12-rc5, and added revision check to enable aggressive pm_runtime on OMAP4-only. Because am33xx_gpio_sysc.idlemodes seems to be wrongly marked as SIDLE_SMART_WKUP, which might cause missed interrupts with this patch. Tested on Pandaboard rev A2.] Signed-off-by: Chao Xu caesarxuc...@gmail.com --- According to Mr. Felipe Balbi, the original patch was not accepted because interrupts would be missed when GPIO was used as IRQ source. But in my tests with pandaboard, interrupts were not missed. This is because _idle_sysc() sets the idlemode of gpio module to smart-idle-wakeup, and according to OMAP4430 TRM, under this idlemode, the gpio can generate an asynchronous wakeup request to the PRCM. And after GPIO is awake, the wake-up request is reflected into the interrupt status registers. A change made on the original patch is only applying the aggressive runtime pm scheme on OMAP4, because I don’t have HW to test OMAP3 or am33xx devices. According to the respective TRMs, their GPIO modules also can generate wake-up request if the idlemode is set to smart-idle or smart-idle-wakeup. So the patch should work for them, too. But I suspect a potential SW bug may cause missed interrupts: the am33xx_gpio_sysc.idlemodes is marked as capable of SIDLE_SMART_WKUP in omap_hwmod_33xx.c. But according to AM335x TRM, _only_ gpio0 is capable of this mode. This may make GPIO stuck in force-idle mode and unable to generate wakeup request. And thus interrupt will be missed. Again, I don’t have the HW to verify whether this is a bug or not :( drivers/gpio/gpio-omap.c| 103 ++- include/linux/platform_data/gpio-omap.h |1 + 2 files changed, 87 insertions(+), 17 deletions(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 89675f8..90661f2 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -76,6 +76,7 @@ struct gpio_bank { int context_loss_count; int power_mode; bool workaround_enabled; + bool is_aggressive_pm; void (*set_dataout)(struct gpio_bank *bank, int gpio, int enable); int (*get_context_loss_count)(struct device *dev); @@ -473,8 +474,15 @@ static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset) static int gpio_is_input(struct gpio_bank *bank, int mask) { void __iomem *reg = bank-base + bank-regs-direction; + u32 val; - return __raw_readl(reg) mask; + if (bank-is_aggressive_pm) + pm_runtime_get_sync(bank-dev); + val = __raw_readl(reg) mask; + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); + + return val; } static int gpio_irq_type(struct irq_data *d, unsigned type) @@ -485,7 +493,7 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) unsigned long flags; unsigned offset; - if (!BANK_USED(bank)) + if (!BANK_USED(bank) !bank-is_aggressive_pm) pm_runtime_get_sync(bank-dev); #ifdef CONFIG_ARCH_OMAP1 @@ -503,6 +511,8 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) (type (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH))) return -EINVAL; + if (bank-is_aggressive_pm) + pm_runtime_get_sync(bank-dev); spin_lock_irqsave(bank-lock, flags); offset = GPIO_INDEX(bank, gpio); retval = _set_gpio_triggering(bank, offset, type); @@ -511,11 +521,16 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) _set_gpio_direction(bank, offset, 1); } else if (!gpio_is_input(bank, 1 offset)) { spin_unlock_irqrestore(bank-lock, flags); + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); + return -EINVAL; } bank-irq_usage |= 1 GPIO_INDEX(bank, gpio); spin_unlock_irqrestore(bank-lock, flags); + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); if (type (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) __irq_set_handler_locked(d-irq, handle_level_irq); @@ -668,10 +683,11 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) unsigned long flags; /* -* If this is the first gpio_request for the bank, -* enable the bank module. +* if aggressive runtime pm is supported, enable the bank module +* for each gpio_request. Otherwise enable the bank module if this +* is the first gpio_request for the bank. */ - if (!BANK_USED(bank)) + if (bank-is_aggressive_pm || !BANK_USED(bank)) pm_runtime_get_sync(bank-dev); spin_lock_irqsave(bank
[PATCH RFC] gpio: omap: refresh the patch “gpio: omap: be more aggressive with pm_runtime” against v3.12-rc5
Refresh the patch “gpio: omap: be more aggressive with pm_runtime” by Felipe Balbi against v3.12-rc5. Add version checking so that the aggressive pm_runtime only applies to omap4 devices. Tested with pandaboard rev a2 through sysfs. Signed-off-by: Chao Xu chao...@rice.edu --- According to Mr. Felipe Balbi, the original patch was not accepted because interrupts would be missed when GPIO was used as IRQ source. But in my tests with pandaboard, interrupts were not missed. This is because _idle_sysc() sets the idlemode of gpio module to smart-idle-wakeup, and according to OMAP4430 TRM, under this idlemode, the gpio can generate an asynchronous wakeup request to the PRCM. And after GPIO is awake, the wake-up request is reflected into the interrupt status registers. A change I made against the original patch is only using the aggressive runtime pm scheme on OMAP4 by adding a flag in pdata, because I don’t have HW to test OMAP3 or am33xx devices. According to the respective TRMs, their GPIO modules also can generate wake-up request if the idlemode is set to smart-idle or smart-idle-wakeup. So the patch should work for them, too. But I suspect a potential SW bug may cause missed interrupts: the am33xx_gpio_sysc.idlemodes is marked as capable of SIDLE_SMART_WKUP in omap_hwmod_33xx.c. But according to AM335x TRM, _only_ gpio0 is capable of this mode. This may make GPIO stuck in force-idle mode and unable to generate wakeup request. And thus interrupt will be missed. Again, I don’t have the HW to verify whether this is a bug or not :( drivers/gpio/gpio-omap.c| 103 ++- include/linux/platform_data/gpio-omap.h |1 + 2 files changed, 87 insertions(+), 17 deletions(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 89675f8..90661f2 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -76,6 +76,7 @@ struct gpio_bank { int context_loss_count; int power_mode; bool workaround_enabled; + bool is_aggressive_pm; void (*set_dataout)(struct gpio_bank *bank, int gpio, int enable); int (*get_context_loss_count)(struct device *dev); @@ -473,8 +474,15 @@ static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset) static int gpio_is_input(struct gpio_bank *bank, int mask) { void __iomem *reg = bank-base + bank-regs-direction; + u32 val; - return __raw_readl(reg) mask; + if (bank-is_aggressive_pm) + pm_runtime_get_sync(bank-dev); + val = __raw_readl(reg) mask; + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); + + return val; } static int gpio_irq_type(struct irq_data *d, unsigned type) @@ -485,7 +493,7 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) unsigned long flags; unsigned offset; - if (!BANK_USED(bank)) + if (!BANK_USED(bank) !bank-is_aggressive_pm) pm_runtime_get_sync(bank-dev); #ifdef CONFIG_ARCH_OMAP1 @@ -503,6 +511,8 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) (type (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH))) return -EINVAL; + if (bank-is_aggressive_pm) + pm_runtime_get_sync(bank-dev); spin_lock_irqsave(bank-lock, flags); offset = GPIO_INDEX(bank, gpio); retval = _set_gpio_triggering(bank, offset, type); @@ -511,11 +521,16 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) _set_gpio_direction(bank, offset, 1); } else if (!gpio_is_input(bank, 1 offset)) { spin_unlock_irqrestore(bank-lock, flags); + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); + return -EINVAL; } bank-irq_usage |= 1 GPIO_INDEX(bank, gpio); spin_unlock_irqrestore(bank-lock, flags); + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); if (type (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) __irq_set_handler_locked(d-irq, handle_level_irq); @@ -668,10 +683,11 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) unsigned long flags; /* - * If this is the first gpio_request for the bank, - * enable the bank module. + * if aggressive runtime pm is supported, enable the bank module + * for each gpio_request. Otherwise enable the bank module if this + * is the first gpio_request for the bank. */ - if (!BANK_USED(bank)) + if (bank-is_aggressive_pm || !BANK_USED(bank)) pm_runtime_get_sync(bank-dev); spin_lock_irqsave(bank-lock, flags); @@ -685,7 +701,8 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) } bank-mod_usage |= 1 offset; spin_unlock_irqrestore(bank-lock, flags); - + if (bank-is_aggressive_pm) + pm_runtime_put(bank-dev); return 0; } @@ -694,6 +711,9 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset) struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip); unsigned long flags; + if (bank-is_aggressive_pm) + pm_runtime_get_sync(bank-dev); + spin_lock_irqsave(bank-lock, flags); bank-mod_usage = ~(1 offset); _disable_gpio_module(bank, offset); @@ -701,10 +721,11 @@ static void omap_gpio_free(struct gpio_chip *chip
Re: [BUG] PandaBoard hangs before starting init while booting v3.12
I wonder if we also have some dependency to some earlier versions of u-boot as u-boot now only muxes the essential pins? This is exactly the problem in my case. I added #define CONFIG_SYS_ENABLE_PADS_ALL in u-boot/include/configs/omap4_common.h and now there is output. I guess the reason that the u-boot worked out-of-box for Ben but not for me is that I missed some configurations in v3.12 kernel. I image there is a config options that tells the kernel to take care of the non-essential pins that used to be the responsibility of u-boot. Could you confirm my hypothesis? And if so, could you kindly suggest what's the name of the config option? Thank you! On Wed, Nov 20, 2013 at 12:35 PM, Tony Lindgren t...@atomide.com wrote: * Ben Gamari bgamari.f...@gmail.com [131119 19:07]: Chao Xu caesarxuc...@gmail.com writes: Hi, I also try to boot v3.12 on my pandaboard rev A2, but it hangs at starting kernel. My SD card is originally loaded with a linaro 12.04 ubuntu-developer image. I have tried with v3.7 and v3.8 uImage and both of them work normally, but v3.12 hangs. Is there any trick I missed? Do I need to use the new u-boot as used by Ben? I've written up some of my experiences bringing up 3.12 on the PandaBoard here[1]. You may find it helpful. Regardless, I would definitely try upgrading u-boot. Nice investigative blogging :) Care to also update it with the other issues remaining on pandaboard? Sounds like we're pretty close to having things working nicely with mainline kernel on it, so let's just fix those issues ASAP. I'm aware of at least two issues: 1. The WLAN not working after a soft reset, or if the interface is reset with ifconfig down. This could be a typo somewhere in the .dts file for the WLAN regulator or something like that. 2. Suspend and resume does not wake-up from serial console and spews a bunch of warnings. The wake-up issue can be fixed with the new the new interrupts-extended property to use the wake IRQs, I'll try to update my patches for that today. And here is a separate problem with building u-boot. I cloned the upstream u-boot repository. The latest commit is c2e5e802ecb7ab668ce9911b210ed68c804b349f. Then I did: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- omap4_panda_config make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8 cp MLO u-boot.img /media/boot/ But when turn on my pandaboard, there is NO output from the serial console. I didn't change the other file in the boot partition. They are from linaro 12.04 ubuntu-developer image. I would check that you have earlyprintk enabled (both in the kernel configuration as well as on the kernel command line). Moreover, ensure that the correct serial devices is selected for low-level debug output (in the kernel configuration). I wonder if we also have some dependency to some earlier versions of u-boot as u-boot now only muxes the essential pins? Regards, Tony [1] http://bgamari.github.io/posts/2013-11-17-running-modern-kernel-on-pandaboard.html -- Regards, Chao Xu -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [BUG] PandaBoard hangs before starting init while booting v3.12
4a31e040.pinmux: could not add functions for pinmux_wl12xx_pins 56x [3.257324] omap-dma-engine 4a056000.dma-controller: allocating channel for 60 [3.264953] omap-dma-engine 4a056000.dma-controller: allocating channel for 59 [3.272705] 480d5000.mmc supply vmmc_aux not found, using dummy regulator -- Regards, Chao Xu -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
what does the number in the pm_debug/count mean for clockdomains?
Hi all, I don't know how to interpret the bottom half of the /sys/kernel/debug/pm_debug, e.g.l3_dma_clkdm-core_pwrdm (0) What does the number in the brackets mean? Does it mean how many times the l3_dma_clkdm has been gated? Also, Thank you! -- Regards, Chao Xu -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html