> 
> +
> +     if (machine_is(p1021_mds)) {
> +#define MPC85xx_PMUXCR_OFFSET           0x60
> +#define MPC85xx_PMUXCR_QE0              0x00008000
> +#define MPC85xx_PMUXCR_QE3              0x00001000
> +#define MPC85xx_PMUXCR_QE9              0x00000040
> +#define MPC85xx_PMUXCR_QE12             0x00000008
> +             static __be32 __iomem *pmuxcr;
> +
> +             np = of_find_node_by_name(NULL, "global-utilities");
> +
> +             if (np) {
> +                     pmuxcr = of_iomap(np, 0) + MPC85xx_PMUXCR_OFFSET;
> +                     if (!pmuxcr)
> +                             printk(KERN_EMERG "Error: Alternate function"
> +                                     " signal multiplex control register not"
> +                                     " mapped!\n");

if we error shouldn't we not do the setbit32?

> +
> +                     /* P1021 has pins muxed for QE and other functions. To
> +                      * enable QE UEC mode, we need to set bit QE0 for UCC1
> +                      * in Eth mode, QE0 and QE3 for UCC5 in Eth mode, QE9
> +                      * and QE12 for QE MII management singals in PMUXCR
> +                      * register.
> +                      */
> +                     setbits32(pmuxcr,
> +                             MPC85xx_PMUXCR_QE0 | MPC85xx_PMUXCR_QE3 |
> +                             MPC85xx_PMUXCR_QE9 | MPC85xx_PMUXCR_QE12);
> +             }
> +
> +             of_node_put(np);
> +     }
> #endif        /* CONFIG_QUICC_ENGINE */
> 
> #ifdef CONFIG_SWIOTLB
> @@ -330,6 +375,16 @@ static struct of_device_id mpc85xx_ids[] = {
>       {},
> };
> 
> +static struct of_device_id p1021_ids[] = {
> +     { .type = "soc", },
> +     { .compatible = "soc", },
> +     { .compatible = "simple-bus", },
> +     { .type = "qe", },
> +     { .compatible = "fsl,qe", },
> +     { .compatible = "gianfar", },
> +     {},
> +};
> +
> static int __init mpc85xx_publish_devices(void)
> {
>       if (machine_is(mpc8568_mds))
> @@ -342,11 +397,22 @@ static int __init mpc85xx_publish_devices(void)
> 
>       return 0;
> }
> +
> +static int __init p1021_publish_devices(void)
> +{
> +     /* Publish the QE devices */
> +     of_platform_bus_probe(NULL, p1021_ids, NULL);
> +
> +     return 0;
> +}
> +
> machine_device_initcall(mpc8568_mds, mpc85xx_publish_devices);
> machine_device_initcall(mpc8569_mds, mpc85xx_publish_devices);
> +machine_device_initcall(p1021_mds, p1021_publish_devices);
> 
> machine_arch_initcall(mpc8568_mds, swiotlb_setup_bus_notifier);
> machine_arch_initcall(mpc8569_mds, swiotlb_setup_bus_notifier);
> +machine_arch_initcall(p1021_mds, swiotlb_setup_bus_notifier);
> 
> static void __init mpc85xx_mds_pic_init(void)
> {
> @@ -366,7 +432,7 @@ static void __init mpc85xx_mds_pic_init(void)
> 
>       mpic = mpic_alloc(np, r.start,
>                       MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN |
> -                     MPIC_BROKEN_FRR_NIRQS,
> +                     MPIC_BROKEN_FRR_NIRQS | MPIC_SINGLE_DEST_CPU,
>                       0, 256, " OpenPIC  ");
>       BUG_ON(mpic == NULL);
>       of_node_put(np);
> @@ -380,7 +446,11 @@ static void __init mpc85xx_mds_pic_init(void)
>               if (!np)
>                       return;
>       }
> -     qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL);
> +     if (machine_is(p1021_mds))
> +             qe_ic_init(np, 0, qe_ic_cascade_low_mpic,
> +                             qe_ic_cascade_high_mpic);
> +     else
> +             qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL);
>       of_node_put(np);
> #endif                                /* CONFIG_QUICC_ENGINE */
> }
> @@ -426,3 +496,26 @@ define_machine(mpc8569_mds) {
>       .pcibios_fixup_bus      = fsl_pcibios_fixup_bus,
> #endif
> };
> +
> +static int __init p1021_mds_probe(void)
> +{
> +     unsigned long root = of_get_flat_dt_root();
> +
> +     return of_flat_dt_is_compatible(root, "fsl,P1021MDS");
> +
> +}
> +
> +define_machine(p1021_mds) {
> +     .name           = "P1021 MDS",
> +     .probe          = p1021_mds_probe,
> +     .setup_arch     = mpc85xx_mds_setup_arch,
> +     .init_IRQ       = mpc85xx_mds_pic_init,
> +     .get_irq        = mpic_get_irq,
> +     .restart        = fsl_rstcr_restart,
> +     .calibrate_decr = generic_calibrate_decr,
> +     .progress       = udbg_progress,
> +#ifdef CONFIG_PCI
> +     .pcibios_fixup_bus      = fsl_pcibios_fixup_bus,
> +#endif
> +};
> +
> -- 
> 1.6.0.2
> 
> 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to