diff mbox

Proposed: Patch to fix boot on PA6T

Message ID 4863e2f8235.599ebfcf@auth.smtp.1and1.co.uk (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Darren Stevens June 26, 2016, 5:42 p.m. UTC
Hello All,

    commit d6a9996e84ac4beb7713e9485f4563e100a9b03e
    powerpc/mm: vmalloc abstraction in preparation for radix

    This commit introduced variables for some linux kernel addresses that had
before
    been constants, unfortunately this stopped PaSemi PA6T systems(*) from
booting as
    they call ioremap to map SoC registers before the mmu is initialised. The
attached
    patch adds a hard-coded init of pci_io_base to the pas_init_early()
function which
    which allows the kernel to boot normally.

    The value will be harmlessly set again once pci starts up.

    (*) At the moment this has only been tested on an AmigaOneX1000, but I
expect PaSemi
    reference systems to have been affected in the same way.

Kind regards
Darren

Comments

Christian Zigotzky June 26, 2016, 8:08 p.m. UTC | #1
Hi Darren,

Fantastic news! I'll test your patch with the RC5 tomorrow. Excellent work! Well done!

- Christian

Sent from my iPhone

> On 26 Jun 2016, at 18:42, Darren Stevens <darren@stevens-zone.net> wrote:
> 
> Hello All,
> 
>    commit d6a9996e84ac4beb7713e9485f4563e100a9b03e
>    powerpc/mm: vmalloc abstraction in preparation for radix
> 
>    This commit introduced variables for some linux kernel addresses that had
> before
>    been constants, unfortunately this stopped PaSemi PA6T systems(*) from
> booting as
>    they call ioremap to map SoC registers before the mmu is initialised. The
> attached
>    patch adds a hard-coded init of pci_io_base to the pas_init_early()
> function which
>    which allows the kernel to boot normally.
> 
>    The value will be harmlessly set again once pci starts up.
> 
>    (*) At the moment this has only been tested on an AmigaOneX1000, but I
> expect PaSemi
>    reference systems to have been affected in the same way.
> 
> Kind regards
> Darren
> <pa6t-bootfix.patch>
Benjamin Herrenschmidt June 26, 2016, 10:50 p.m. UTC | #2
On Sun, 2016-06-26 at 18:42 +0100, Darren Stevens wrote:
> 
>     commit d6a9996e84ac4beb7713e9485f4563e100a9b03e
>     powerpc/mm: vmalloc abstraction in preparation for radix
> 
>     This commit introduced variables for some linux kernel addresses that had
> before been constants, unfortunately this stopped PaSemi PA6T systems(*) from
> booting as they call ioremap to map SoC registers before the mmu is initialised. The
> attached patch adds a hard-coded init of pci_io_base to the pas_init_early()
> function which which allows the kernel to boot normally.

Tell me more, when is that mapping done ? I'm changing things so that
platform probe is called much later so that might have an impact.

What consumes pci_io_base before it's been initialized ?

>     The value will be harmlessly set again once pci starts up.
> 
>     (*) At the moment this has only been tested on an AmigaOneX1000, but I
> expect PaSemi
>     reference systems to have been affected in the same way.
Michael Ellerman June 28, 2016, 10:51 a.m. UTC | #3
Hi Darren,

On Sun, 2016-26-06 at 17:42:11 UTC, Darren Stevens wrote:
> Hello All,
> 
>     commit d6a9996e84ac4beb7713e9485f4563e100a9b03e
>     powerpc/mm: vmalloc abstraction in preparation for radix
> 
>     This commit introduced variables for some linux kernel addresses that had before
>     been constants, unfortunately this stopped PaSemi PA6T systems(*) from  booting as
>     they call ioremap to map SoC registers before the mmu is initialised. The attached
>     patch adds a hard-coded init of pci_io_base to the pas_init_early() function which
>     which allows the kernel to boot normally.
> 
>     The value will be harmlessly set again once pci starts up.
> 
>     (*) At the moment this has only been tested on an AmigaOneX1000, but I expect PaSemi
>     reference systems to have been affected in the same way.
> 
> Kind regards
> Darren

I can't merge this because you didn't sign it off.

See section 11 of:

  https://www.kernel.org/doc/Documentation/SubmittingPatches

cheers
Aneesh Kumar K.V June 28, 2016, 2:18 p.m. UTC | #4
Darren Stevens <darren@stevens-zone.net> writes:

> Hello All,
>
>     commit d6a9996e84ac4beb7713e9485f4563e100a9b03e
>     powerpc/mm: vmalloc abstraction in preparation for radix
>
>     This commit introduced variables for some linux kernel addresses that had
> before
>     been constants, unfortunately this stopped PaSemi PA6T systems(*) from
> booting as
>     they call ioremap to map SoC registers before the mmu is initialised. The
> attached
>     patch adds a hard-coded init of pci_io_base to the pas_init_early()
> function which
>     which allows the kernel to boot normally.
>
>     The value will be harmlessly set again once pci starts up.
>
>     (*) At the moment this has only been tested on an AmigaOneX1000, but I
> expect PaSemi
>     reference systems to have been affected in the same way.
>
> Kind regards
> Darren
> diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c
> index d71b2c7..6b8d2ab 100644
> --- a/arch/powerpc/platforms/pasemi/setup.c
> +++ b/arch/powerpc/platforms/pasemi/setup.c
> @@ -61,6 +61,7 @@ static struct mce_regs mce_regs[MAX_MCE_REGS];
>  static int num_mce_regs;
>  static int nmi_virq = NO_IRQ;
>  
> +extern unsigned long pci_io_base;
>  
>  static void pas_restart(char *cmd)
>  {
> @@ -341,6 +342,10 @@ out:
>  
>  static void __init pas_init_early(void)
>  {
> +	/* Initialise the IO pointer so we don't crash on boot */
> +
> +	pci_io_base = (H_KERN_VIRT_START + (H_KERN_VIRT_SIZE >> 1));
> +
>  	iommu_init_early_pasemi();
>  }
>  

Another option is to init it along with rest of the variables as done in
hash__early_init_mmu(void)/radix__early_init_mmu(void)


-aneesh
Darren Stevens June 29, 2016, 7:52 p.m. UTC | #5
Hello Benjamin

On 27/06/2016, Benjamin Herrenschmidt wrote:
> Tell me more, when is that mapping done ? I'm changing things so that
> platform probe is called much later so that might have an impact.
>
> What consumes pci_io_base before it's been initialized ?

pas_pci_init() is the culprit. Following on from Aneesh's suggestion an
improved patch will follow shoertly.

Regards
Darren
Darren Stevens June 29, 2016, 7:54 p.m. UTC | #6
Hello Michael

> I can't merge this because you didn't sign it off.

TBH I wasn't really expecting you too.

> See section 11 of:
>
>   https://www.kernel.org/doc/Documentation/SubmittingPatches

Read and understood (I hope)..

Regards
Darren
Darren Stevens June 29, 2016, 7:56 p.m. UTC | #7
Hello Aneesh

On 28/06/2016, Aneesh Kumar K.V wrote:
> Another option is to init it along with rest of the variables as done in
> hash__early_init_mmu(void)/radix__early_init_mmu(void)

*FACEPALM* Why didn't I think of that! I've made this change and seems to work
- obviously I can't test on a Radix system though, as I don't have access to
one.

Patch comming shortly

Regards
Darren
diff mbox

Patch

diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c
index d71b2c7..6b8d2ab 100644
--- a/arch/powerpc/platforms/pasemi/setup.c
+++ b/arch/powerpc/platforms/pasemi/setup.c
@@ -61,6 +61,7 @@  static struct mce_regs mce_regs[MAX_MCE_REGS];
 static int num_mce_regs;
 static int nmi_virq = NO_IRQ;
 
+extern unsigned long pci_io_base;
 
 static void pas_restart(char *cmd)
 {
@@ -341,6 +342,10 @@  out:
 
 static void __init pas_init_early(void)
 {
+	/* Initialise the IO pointer so we don't crash on boot */
+
+	pci_io_base = (H_KERN_VIRT_START + (H_KERN_VIRT_SIZE >> 1));
+
 	iommu_init_early_pasemi();
 }