All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] x86: ce4100: various fixes
@ 2012-10-19 11:51 Florian Fainelli
  2012-10-19 11:51 ` [PATCH 1/3] x86: ce4100: implement pm_poweroff Florian Fainelli
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Florian Fainelli @ 2012-10-19 11:51 UTC (permalink / raw)
  To: bigeasy; +Cc: linux-kernel, x86, mbizon, Florian Fainelli

Hi all,

This patch serie contains shutdown/reboot fixes for the CE4100 platform as
well as a PCI controller fix for devices without an interrupt line.

Florian Fainelli (3):
  x86: ce4100: implement pm_poweroff
  x86: ce4100: force reboot method to be KBD
  x86: ce4100: fixup PCI configuration register access for devices
    without interrupts

 arch/x86/pci/ce4100.c             |   13 +++++++++++++
 arch/x86/platform/ce4100/ce4100.c |   10 ++++++++++
 2 files changed, 23 insertions(+)

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] x86: ce4100: implement pm_poweroff
  2012-10-19 11:51 [PATCH 0/3] x86: ce4100: various fixes Florian Fainelli
@ 2012-10-19 11:51 ` Florian Fainelli
  2012-10-19 11:51 ` [PATCH 2/3] x86: ce4100: force reboot method to be KBD Florian Fainelli
  2012-10-19 11:51 ` [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts Florian Fainelli
  2 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2012-10-19 11:51 UTC (permalink / raw)
  To: bigeasy
  Cc: linux-kernel, x86, mbizon, Florian Fainelli, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Zhang Rui, Alan Cox

The CE4100 platform is currently missing a proper pm_poweroff implementation
leading to poweroff making the CPU spin forever and the CE4100 platform does
not enter a low-power mode where the external Power Management Unit can
properly power off the system. Power off on this platform is implemented pretty
much like reboot, by writing to the SoC built-in 8051 microcontroller mapped at
I/O port 0xcf9, the value 0x4.

Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
---
 arch/x86/platform/ce4100/ce4100.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/x86/platform/ce4100/ce4100.c b/arch/x86/platform/ce4100/ce4100.c
index 4c61b52..74f8774 100644
--- a/arch/x86/platform/ce4100/ce4100.c
+++ b/arch/x86/platform/ce4100/ce4100.c
@@ -27,6 +27,11 @@ static int ce4100_i8042_detect(void)
 	return 0;
 }
 
+static void ce4100_power_off(void)
+{
+	outb(0x4, 0xcf9);
+}
+
 #ifdef CONFIG_SERIAL_8250
 
 static unsigned int mem_serial_in(struct uart_port *p, int offset)
@@ -143,4 +148,6 @@ void __init x86_ce4100_early_setup(void)
 	x86_init.pci.init_irq = sdv_pci_init;
 	x86_init.mpparse.setup_ioapic_ids = setup_ioapic_ids_from_mpc_nocheck;
 #endif
+
+	pm_power_off = ce4100_power_off;
 }
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] x86: ce4100: force reboot method to be KBD
  2012-10-19 11:51 [PATCH 0/3] x86: ce4100: various fixes Florian Fainelli
  2012-10-19 11:51 ` [PATCH 1/3] x86: ce4100: implement pm_poweroff Florian Fainelli
@ 2012-10-19 11:51 ` Florian Fainelli
  2012-10-19 11:51 ` [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts Florian Fainelli
  2 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2012-10-19 11:51 UTC (permalink / raw)
  To: bigeasy
  Cc: linux-kernel, x86, mbizon, Florian Fainelli, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Zhang Rui, Alan Cox

From: Maxime Bizon <mbizon@freebox.fr>

The default reboot is via ACPI for this platform, and the CEFDK bootloader
actually supports this, but will issue a system power off instead of a real
reboot. Setting the reboot method to be KBD instead of ACPI ensures proper
system reboot.

Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
---
 arch/x86/platform/ce4100/ce4100.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/x86/platform/ce4100/ce4100.c b/arch/x86/platform/ce4100/ce4100.c
index 74f8774..8c9ed9a 100644
--- a/arch/x86/platform/ce4100/ce4100.c
+++ b/arch/x86/platform/ce4100/ce4100.c
@@ -21,6 +21,7 @@
 #include <asm/i8259.h>
 #include <asm/io.h>
 #include <asm/io_apic.h>
+#include <asm/emergency-restart.h>
 
 static int ce4100_i8042_detect(void)
 {
@@ -144,6 +145,8 @@ void __init x86_ce4100_early_setup(void)
 	x86_init.mpparse.find_smp_config = x86_init_noop;
 	x86_init.pci.init = ce4100_pci_init;
 
+	reboot_type = BOOT_KBD;
+
 #ifdef CONFIG_X86_IO_APIC
 	x86_init.pci.init_irq = sdv_pci_init;
 	x86_init.mpparse.setup_ioapic_ids = setup_ioapic_ids_from_mpc_nocheck;
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts
  2012-10-19 11:51 [PATCH 0/3] x86: ce4100: various fixes Florian Fainelli
  2012-10-19 11:51 ` [PATCH 1/3] x86: ce4100: implement pm_poweroff Florian Fainelli
  2012-10-19 11:51 ` [PATCH 2/3] x86: ce4100: force reboot method to be KBD Florian Fainelli
@ 2012-10-19 11:51 ` Florian Fainelli
  2012-10-26 15:49   ` Sebastian Andrzej Siewior
  2 siblings, 1 reply; 7+ messages in thread
From: Florian Fainelli @ 2012-10-19 11:51 UTC (permalink / raw)
  To: bigeasy
  Cc: linux-kernel, x86, mbizon, Florian Fainelli, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86

From: Maxime Bizon <mbizon@freebox.fr>

Some CE4100 devices such as the:
- DFX module (01:0b.7)
- entertainment encryption device (01:10.0)
- multimedia controller (01:12.0)

do not have a device interrupt at all. This patch fixes the PCI controller
code to declare the missing PCI configuration register space, as well as a
fixup method for forcing the interrupt pin to be 0 for these devices. This is
required to ensure that pci drivers matching on these devices will be able to
call honor the various PCI subsystem calls touching the configuration space.

Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
---
 arch/x86/pci/ce4100.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/arch/x86/pci/ce4100.c b/arch/x86/pci/ce4100.c
index 41bd2a2..b914e20 100644
--- a/arch/x86/pci/ce4100.c
+++ b/arch/x86/pci/ce4100.c
@@ -115,6 +115,16 @@ static void sata_revid_read(struct sim_dev_reg *reg, u32 *value)
 	reg_read(reg, value);
 }
 
+static void reg_noirq_read(struct sim_dev_reg *reg, u32 *value)
+{
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&pci_config_lock, flags);
+	/* force interrupt pin value to 0 */
+	*value = reg->sim_reg.value & 0xfff00ff;
+	raw_spin_unlock_irqrestore(&pci_config_lock, flags);
+}
+
 static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(2, 0, 0x10, (16*MB), reg_init, reg_read, reg_write)
 	DEFINE_REG(2, 0, 0x14, (256), reg_init, reg_read, reg_write)
@@ -144,6 +154,7 @@ static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(11, 5, 0x10, (64*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(11, 6, 0x10, (256), reg_init, reg_read, reg_write)
 	DEFINE_REG(11, 7, 0x10, (64*KB), reg_init, reg_read, reg_write)
+	DEFINE_REG(11, 7, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 	DEFINE_REG(12, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(12, 0, 0x14, (256), reg_init, reg_read, reg_write)
 	DEFINE_REG(12, 1, 0x10, (1024), reg_init, reg_read, reg_write)
@@ -161,8 +172,10 @@ static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(16, 0, 0x10, (64*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(16, 0, 0x14, (64*MB), reg_init, reg_read, reg_write)
 	DEFINE_REG(16, 0, 0x18, (64*MB), reg_init, reg_read, reg_write)
+	DEFINE_REG(16, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 	DEFINE_REG(17, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(18, 0, 0x10, (1*KB), reg_init, reg_read, reg_write)
+	DEFINE_REG(18, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 };
 
 static void __init init_sim_regs(void)
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts
  2012-10-26  9:05 [PATCH 0/3] x86: ce4100 fixes and improvements Florian Fainelli
@ 2012-10-26  9:05 ` Florian Fainelli
  2012-10-26 11:30 ` [PATCH 0/3 v2] x86: ce4100 fixes and improvements Florian Fainelli
  1 sibling, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2012-10-26  9:05 UTC (permalink / raw)
  To: tglx; +Cc: mingo, x86, rui.zhang, alan, linux-kernel, Florian Fainelli

From: Maxime Bizon <mbizon@freebox.fr>

Some CE4100 devices such as the:
- DFX module (01:0b.7)
- entertainment encryption device (01:10.0)
- multimedia controller (01:12.0)

do not have a device interrupt at all. This patch fixes the PCI controller
code to declare the missing PCI configuration register space, as well as a
fixup method for forcing the interrupt pin to be 0 for these devices. This is
required to ensure that pci drivers matching on these devices will be able to
honor the various PCI subsystem calls touching the configuration space.

Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
---
 arch/x86/pci/ce4100.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/arch/x86/pci/ce4100.c b/arch/x86/pci/ce4100.c
index 41bd2a2..b914e20 100644
--- a/arch/x86/pci/ce4100.c
+++ b/arch/x86/pci/ce4100.c
@@ -115,6 +115,16 @@ static void sata_revid_read(struct sim_dev_reg *reg, u32 *value)
 	reg_read(reg, value);
 }
 
+static void reg_noirq_read(struct sim_dev_reg *reg, u32 *value)
+{
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&pci_config_lock, flags);
+	/* force interrupt pin value to 0 */
+	*value = reg->sim_reg.value & 0xfff00ff;
+	raw_spin_unlock_irqrestore(&pci_config_lock, flags);
+}
+
 static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(2, 0, 0x10, (16*MB), reg_init, reg_read, reg_write)
 	DEFINE_REG(2, 0, 0x14, (256), reg_init, reg_read, reg_write)
@@ -144,6 +154,7 @@ static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(11, 5, 0x10, (64*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(11, 6, 0x10, (256), reg_init, reg_read, reg_write)
 	DEFINE_REG(11, 7, 0x10, (64*KB), reg_init, reg_read, reg_write)
+	DEFINE_REG(11, 7, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 	DEFINE_REG(12, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(12, 0, 0x14, (256), reg_init, reg_read, reg_write)
 	DEFINE_REG(12, 1, 0x10, (1024), reg_init, reg_read, reg_write)
@@ -161,8 +172,10 @@ static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(16, 0, 0x10, (64*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(16, 0, 0x14, (64*MB), reg_init, reg_read, reg_write)
 	DEFINE_REG(16, 0, 0x18, (64*MB), reg_init, reg_read, reg_write)
+	DEFINE_REG(16, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 	DEFINE_REG(17, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(18, 0, 0x10, (1*KB), reg_init, reg_read, reg_write)
+	DEFINE_REG(18, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 };
 
 static void __init init_sim_regs(void)
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts
  2012-10-26 11:30 ` [PATCH 0/3 v2] x86: ce4100 fixes and improvements Florian Fainelli
@ 2012-10-26 11:30   ` Florian Fainelli
  0 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2012-10-26 11:30 UTC (permalink / raw)
  To: tglx; +Cc: mingo, x86, rui.zhang, alan, linux-kernel, Florian Fainelli

From: Maxime Bizon <mbizon@freebox.fr>

Some CE4100 devices such as the:
- DFX module (01:0b.7)
- entertainment encryption device (01:10.0)
- multimedia controller (01:12.0)

do not have a device interrupt at all. This patch fixes the PCI controller
code to declare the missing PCI configuration register space, as well as a
fixup method for forcing the interrupt pin to be 0 for these devices. This is
required to ensure that pci drivers matching on these devices will be able to
honor the various PCI subsystem calls touching the configuration space.

Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
---
 arch/x86/pci/ce4100.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/arch/x86/pci/ce4100.c b/arch/x86/pci/ce4100.c
index 41bd2a2..b914e20 100644
--- a/arch/x86/pci/ce4100.c
+++ b/arch/x86/pci/ce4100.c
@@ -115,6 +115,16 @@ static void sata_revid_read(struct sim_dev_reg *reg, u32 *value)
 	reg_read(reg, value);
 }
 
+static void reg_noirq_read(struct sim_dev_reg *reg, u32 *value)
+{
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&pci_config_lock, flags);
+	/* force interrupt pin value to 0 */
+	*value = reg->sim_reg.value & 0xfff00ff;
+	raw_spin_unlock_irqrestore(&pci_config_lock, flags);
+}
+
 static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(2, 0, 0x10, (16*MB), reg_init, reg_read, reg_write)
 	DEFINE_REG(2, 0, 0x14, (256), reg_init, reg_read, reg_write)
@@ -144,6 +154,7 @@ static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(11, 5, 0x10, (64*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(11, 6, 0x10, (256), reg_init, reg_read, reg_write)
 	DEFINE_REG(11, 7, 0x10, (64*KB), reg_init, reg_read, reg_write)
+	DEFINE_REG(11, 7, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 	DEFINE_REG(12, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(12, 0, 0x14, (256), reg_init, reg_read, reg_write)
 	DEFINE_REG(12, 1, 0x10, (1024), reg_init, reg_read, reg_write)
@@ -161,8 +172,10 @@ static struct sim_dev_reg bus1_fixups[] = {
 	DEFINE_REG(16, 0, 0x10, (64*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(16, 0, 0x14, (64*MB), reg_init, reg_read, reg_write)
 	DEFINE_REG(16, 0, 0x18, (64*MB), reg_init, reg_read, reg_write)
+	DEFINE_REG(16, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 	DEFINE_REG(17, 0, 0x10, (128*KB), reg_init, reg_read, reg_write)
 	DEFINE_REG(18, 0, 0x10, (1*KB), reg_init, reg_read, reg_write)
+	DEFINE_REG(18, 0, 0x3c, 256, reg_init, reg_noirq_read, reg_write)
 };
 
 static void __init init_sim_regs(void)
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts
  2012-10-19 11:51 ` [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts Florian Fainelli
@ 2012-10-26 15:49   ` Sebastian Andrzej Siewior
  0 siblings, 0 replies; 7+ messages in thread
From: Sebastian Andrzej Siewior @ 2012-10-26 15:49 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: linux-kernel, x86, mbizon, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, x86

* Florian Fainelli | 2012-10-19 13:51:56 [+0200]:

>From: Maxime Bizon <mbizon@freebox.fr>
>
>Some CE4100 devices such as the:
>- DFX module (01:0b.7)
>- entertainment encryption device (01:10.0)
>- multimedia controller (01:12.0)
>
>do not have a device interrupt at all. This patch fixes the PCI controller
>code to declare the missing PCI configuration register space, as well as a
>fixup method for forcing the interrupt pin to be 0 for these devices. This is
>required to ensure that pci drivers matching on these devices will be able to
>call honor the various PCI subsystem calls touching the configuration space.

So they realy don't have an Interrupt. I assumed that I was not good
enough reading the table and matching the entries to the HW.

>Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

for patches 1-3

Sebastian

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-10-26 15:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-19 11:51 [PATCH 0/3] x86: ce4100: various fixes Florian Fainelli
2012-10-19 11:51 ` [PATCH 1/3] x86: ce4100: implement pm_poweroff Florian Fainelli
2012-10-19 11:51 ` [PATCH 2/3] x86: ce4100: force reboot method to be KBD Florian Fainelli
2012-10-19 11:51 ` [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts Florian Fainelli
2012-10-26 15:49   ` Sebastian Andrzej Siewior
  -- strict thread matches above, loose matches on Subject: below --
2012-10-26  9:05 [PATCH 0/3] x86: ce4100 fixes and improvements Florian Fainelli
2012-10-26  9:05 ` [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts Florian Fainelli
2012-10-26 11:30 ` [PATCH 0/3 v2] x86: ce4100 fixes and improvements Florian Fainelli
2012-10-26 11:30   ` [PATCH 3/3] x86: ce4100: fixup PCI configuration register access for devices without interrupts Florian Fainelli

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.