[PATCH] ppc32 :Added PCI support for MPC83xx

Kumar Gala kumar.gala at freescale.com
Tue Aug 30 08:00:59 EST 2005


On Aug 29, 2005, at 1:07 PM, Dan Malek wrote:

>
> On Aug 29, 2005, at 1:42 PM, Kumar Gala wrote:
>
>
>> diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.c
>> b/arch/ppc/platforms/83xx/mpc834x_sys.c
>> --- a/arch/ppc/platforms/83xx/mpc834x_sys.c
>> +++ b/arch/ppc/platforms/83xx/mpc834x_sys.c
>> @@ -62,9 +62,29 @@ extern unsigned long total_memory;    /* in
>>  unsigned char __res[sizeof (bd_t)];
>>
>>  #ifdef CONFIG_PCI
>> -#error "PCI is not supported"
>> -/* NEED mpc83xx_map_irq & mpc83xx_exclude_device
>> -   see platforms/85xx/mpc85xx_ads_common.c */
>> +int
>> +mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned
>> char pin)
>> +{
>> +    static char pci_irq_table[][4] =
>> +        /*
>> +         *      PCI IDSEL/INTPIN->INTLINE
>> +         *       A      B      C      D
>> +         */
>> +    {
>> +        {PIRQA, PIRQB,  PIRQC,  PIRQD}, /* idsel 0x11 */
>> +        {PIRQC, PIRQD,  PIRQA,  PIRQB}, /* idsel 0x12 */
>> +        {PIRQD, PIRQA,  PIRQB,  PIRQC}  /* idsel 0x13 */
>> +    };
>> +
>> +    const long min_idsel = 0x11, max_idsel = 0x13, irqs_per_slot =
>>
> 4;
>
>> +    return PCI_IRQ_TABLE_LOOKUP;
>> +}
>> +
>> +int
>> +mpc83xx_exclude_device(u_char bus, u_char devfn)
>> +{
>> +    return PCIBIOS_SUCCESSFUL;
>> +}
>>  #endif /* CONFIG_PCI */
>>
>
> Shouldn't this be in the PQ2FADS board specific file?  Not everyone
> is going to map IDSELs and IRQs this way.

mpc834x_sys is a board specific file.. This is stupid freescale  
naming.  The board was called MPC8349 SYS... Not sure what its called  
now.

>> diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.h
>> b/arch/ppc/platforms/83xx/mpc834x_sys.h
>> --- a/arch/ppc/platforms/83xx/mpc834x_sys.h
>> +++ b/arch/ppc/platforms/83xx/mpc834x_sys.h
>> @@ -26,7 +26,7 @@
>>  #define VIRT_IMMRBAR        ((uint)0xfe000000)
>>
>>  #define BCSR_PHYS_ADDR        ((uint)0xf8000000)
>> -#define BCSR_SIZE        ((uint)(32 * 1024))
>> +#define BCSR_SIZE        ((uint)(128 * 1024))
>>
>>  #define BCSR_MISC_REG2_OFF    0x07
>>  #define BCSR_MISC_REG2_PORESET    0x01
>> @@ -34,23 +34,25 @@
>>  #define BCSR_MISC_REG3_OFF    0x08
>>  #define BCSR_MISC_REG3_CNFLOCK    0x80
>>
>> -#ifdef CONFIG_PCI
>> -/* PCI interrupt controller */
>> -#define PIRQA        MPC83xx_IRQ_IRQ4
>> -#define PIRQB        MPC83xx_IRQ_IRQ5
>> -#define PIRQC        MPC83xx_IRQ_IRQ6
>> -#define PIRQD        MPC83xx_IRQ_IRQ7
>> -
>> -#define MPC834x_SYS_PCI1_LOWER_IO        0x00000000
>> -#define MPC834x_SYS_PCI1_UPPER_IO        0x00ffffff
>> -
>> -#define MPC834x_SYS_PCI1_LOWER_MEM       0x80000000
>> -#define MPC834x_SYS_PCI1_UPPER_MEM       0x9fffffff
>> -
>> -#define MPC834x_SYS_PCI1_IO_BASE         0xe2000000
>> -#define MPC834x_SYS_PCI1_MEM_OFFSET      0x00000000
>> -
>> -#define MPC834x_SYS_PCI1_IO_SIZE         0x01000000
>> -#endif /* CONFIG_PCI */
>> +#define PIRQA    MPC83xx_IRQ_EXT4
>> +#define PIRQB    MPC83xx_IRQ_EXT5
>> +#define PIRQC    MPC83xx_IRQ_EXT6
>> +#define PIRQD    MPC83xx_IRQ_EXT7
>>
>
> The same thing with these BCSRs and IRQ mappings ....  FADS specific.

Same comment as above.

>
>
>> +
>> +#define MPC83xx_PCI1_LOWER_IO    0x00000000
>> +#define MPC83xx_PCI1_UPPER_IO    0x00ffffff
>> +#define MPC83xx_PCI1_LOWER_MEM    0x80000000
>> +#define MPC83xx_PCI1_UPPER_MEM    0x9fffffff
>> +#define MPC83xx_PCI1_IO_BASE    0xe2000000
>> +#define MPC83xx_PCI1_MEM_OFFSET    0x00000000
>> +#define MPC83xx_PCI1_IO_SIZE    0x01000000
>> +
>> +#define MPC83xx_PCI2_LOWER_IO    0x00000000
>> +#define MPC83xx_PCI2_UPPER_IO    0x00ffffff
>> +#define MPC83xx_PCI2_LOWER_MEM    0xa0000000
>> +#define MPC83xx_PCI2_UPPER_MEM    0xbfffffff
>> +#define MPC83xx_PCI2_IO_BASE    0xe3000000
>> +#define MPC83xx_PCI2_MEM_OFFSET    0x00000000
>> +#define MPC83xx_PCI2_IO_SIZE    0x01000000
>>
>
> These should be generic to everyone, and could be
> in the ppc83xx_pci.h file.  Maybe surround them with
> #ifndef so a board specific file could move the addresses
> if they wanted?  I don't think an #ifndef is needed for each
> define, maybe just #fndef MPC83xx_PCI1_LOWER_MEM
> and let the board define everything if they want anything different.


This is just like how we did 85xx.  The board specific file has to  
fill out these defines for its memory map.  I'm guess this is all  
confusion based on the name, if its not just that let me know.

- kumar



More information about the Linuxppc-embedded mailing list