On 2017-10-02 11:49 PM, Dave Airlie wrote:
> From: Dave Airlie <airl...@redhat.com>
> 
> This handrolls a bit map implementation (linux/bitmap.h),
> but it also actually doesn't need it, the max value greppable
> in the code is 31 for a gpio count. So just use a uint32_t for now.
> 
> This should probably migrate to using the linux/bitops.h operations,
> but for now just rip out the bitmap implementation and fail if we
>> 32 bits.
> 
> Signed-off-by: Dave Airlie <airl...@redhat.com>

Nice cleanup. This was such overengineered code.

This series is
Reviewed-by: Harry Wentland <harry.wentl...@amd.com>

Looks like you sent the ilog2 patch twice. I'll ignore the separate one
as it seems to be the same as the one from this series.

Harry

> ---
>  drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c | 85 
> +++-------------------
>  drivers/gpu/drm/amd/display/dc/gpio/gpio_service.h |  8 +-
>  2 files changed, 11 insertions(+), 82 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c 
> b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
> index d4e5ef6..95df7d4 100644
> --- a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
> +++ b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
> @@ -56,8 +56,7 @@ struct gpio_service *dal_gpio_service_create(
>       struct dc_context *ctx)
>  {
>       struct gpio_service *service;
> -
> -     uint32_t index_of_id;
> +     int i;
>  
>       service = kzalloc(sizeof(struct gpio_service), GFP_KERNEL);
>  
> @@ -78,62 +77,16 @@ struct gpio_service *dal_gpio_service_create(
>               goto failure_1;
>       }
>  
> -     /* allocate and initialize business storage */
> -     {
> -             const uint32_t bits_per_uint = sizeof(uint32_t) << 3;
> -
> -             index_of_id = 0;
> -             service->ctx = ctx;
> -
> -             do {
> -                     uint32_t number_of_bits =
> -                             service->factory.number_of_pins[index_of_id];
> -
> -                     uint32_t number_of_uints =
> -                             (number_of_bits + bits_per_uint - 1) /
> -                             bits_per_uint;
> -
> -                     uint32_t *slot;
> -
> -                     if (number_of_bits) {
> -                             uint32_t index_of_uint = 0;
> +     service->ctx = ctx;
>  
> -                             slot = kzalloc(number_of_uints * 
> sizeof(uint32_t),
> -                                            GFP_KERNEL);
> -
> -                             if (!slot) {
> -                                     BREAK_TO_DEBUGGER();
> -                                     goto failure_2;
> -                             }
> -
> -                             do {
> -                                     slot[index_of_uint] = 0;
> -
> -                                     ++index_of_uint;
> -                             } while (index_of_uint < number_of_uints);
> -                     } else
> -                             slot = NULL;
> -
> -                     service->busyness[index_of_id] = slot;
> -
> -                     ++index_of_id;
> -             } while (index_of_id < GPIO_ID_COUNT);
> +     for (i = 0; i < GPIO_ID_COUNT; i++) {
> +             if (service->factory.number_of_pins[i] > 32) {
> +                     BREAK_TO_DEBUGGER();
> +                     goto failure_1;
> +             }
>       }
> -
>       return service;
>  
> -failure_2:
> -     while (index_of_id) {
> -             uint32_t *slot;
> -
> -             --index_of_id;
> -
> -             slot = service->busyness[index_of_id];
> -
> -             if (slot)
> -                     kfree(slot);
> -     };
> -
>  failure_1:
>       kfree(service);
>  
> @@ -164,20 +117,6 @@ void dal_gpio_service_destroy(
>               return;
>       }
>  
> -     /* free business storage */
> -     {
> -             uint32_t index_of_id = 0;
> -
> -             do {
> -                     uint32_t *slot = (*ptr)->busyness[index_of_id];
> -
> -                     if (slot)
> -                             kfree(slot);
> -
> -                     ++index_of_id;
> -             } while (index_of_id < GPIO_ID_COUNT);
> -     }
> -
>       kfree(*ptr);
>  
>       *ptr = NULL;
> @@ -195,9 +134,7 @@ static bool is_pin_busy(
>  {
>       const uint32_t bits_per_uint = sizeof(uint32_t) << 3;
>  
> -     const uint32_t *slot = service->busyness[id] + (en / bits_per_uint);
> -
> -     return 0 != (*slot & (1 << (en % bits_per_uint)));
> +     return 0 != (service->busyness[id] & (1 << (en % bits_per_uint)));
>  }
>  
>  static void set_pin_busy(
> @@ -207,8 +144,7 @@ static void set_pin_busy(
>  {
>       const uint32_t bits_per_uint = sizeof(uint32_t) << 3;
>  
> -     service->busyness[id][en / bits_per_uint] |=
> -             (1 << (en % bits_per_uint));
> +     service->busyness[id] |= (1 << (en % bits_per_uint));
>  }
>  
>  static void set_pin_free(
> @@ -218,8 +154,7 @@ static void set_pin_free(
>  {
>       const uint32_t bits_per_uint = sizeof(uint32_t) << 3;
>  
> -     service->busyness[id][en / bits_per_uint] &=
> -             ~(1 << (en % bits_per_uint));
> +     service->busyness[id] &= ~(1 << (en % bits_per_uint));
>  }
>  
>  enum gpio_result dal_gpio_service_open(
> diff --git a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.h 
> b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.h
> index c7f3081..96c52be 100644
> --- a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.h
> +++ b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.h
> @@ -33,13 +33,7 @@ struct gpio_service {
>       struct dc_context *ctx;
>       struct hw_translate translate;
>       struct hw_factory factory;
> -     /*
> -      * @brief
> -      * Business storage.
> -      * For each member of 'enum gpio_id',
> -      * store array of bits (packed into uint32_t slots),
> -      * index individual bit by 'en' value */
> -     uint32_t *busyness[GPIO_ID_COUNT];
> +     uint32_t busyness[GPIO_ID_COUNT];
>  };
>  
>  enum gpio_result dal_gpio_service_open(
> 
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to