On Sun, Mar 14, 2021 at 01:15:08PM +0800, Bin Meng wrote:
> QEMU ppce500 target can dynamically instantiate an eTSEC device on
> a platform bus if "-device eTSEC" is given to QEMU. It is presented
> as a "simple-bus" in the device tree, with an additional compatible
> string "qemu,platform".
> 
> Let's create a virtual memory mapping for it in misc_init_r(), in
> preparation to adding eTSEC support.
> 
> Signed-off-by: Bin Meng <bmeng...@gmail.com>
> 
> ---
> +static int platform_bus_map_region(ulong map_addr, phys_addr_t paddr,
> +                                phys_size_t size)

Function could have been void (minor detail).

> +{
> +     /* Align map_addr */
> +     map_addr += size - 1;
> +     map_addr &= ~(size - 1);
> +
> +     /* Map virtual memory for range */
> +     assert(!tlb_map_range(map_addr, paddr, size, TLB_MAP_IO));
> +
> +     return 0;
> +}
> +
>  int misc_init_r(void)
>  {
>       struct udevice *dev;
> @@ -148,6 +163,22 @@ int misc_init_r(void)
>        */
>       disable_tlb(find_tlb_idx((void *)CONFIG_SYS_TMPVIRT, 1));
>  
> +     /*
> +      * Detect the presence of the platform bus node, and
> +      * create a virtual memory mapping for it.
> +      */
> +     for (ret = uclass_find_first_device(UCLASS_SIMPLE_BUS, &dev);
> +          dev;
> +          ret = uclass_find_next_device(&dev)) {
> +             if (device_is_compatible(dev, "qemu,platform")) {
> +                     struct simple_bus_plat *plat = dev_get_uclass_plat(dev);
> +
> +                     platform_bus_map_region(CONFIG_PLATFORM_BUS_MAP_ADDR,
> +                                             plat->target, plat->size);
> +                     break;
> +             }
> +     }
> +
>       return 0;
>  }

Reviewed-by: Vladimir Oltean <vladimir.olt...@nxp.com>

Reply via email to