#include "sdma_v5_2.h"
 
 MODULE_FIRMWARE("amdgpu/sienna_cichlid_sdma.bin");
+MODULE_FIRMWARE("amdgpu/navy_flounder_sdma.bin");
 
 #define SDMA1_REG_OFFSET 0x600
 #define SDMA3_REG_OFFSET 0x400
 {
        switch (adev->asic_type) {
        case CHIP_SIENNA_CICHLID:
+       case CHIP_NAVY_FLOUNDER:
                break;
        default:
                break;
        case CHIP_SIENNA_CICHLID:
                chip_name = "sienna_cichlid";
                break;
+       case CHIP_NAVY_FLOUNDER:
+               chip_name = "navy_flounder";
+               break;
        default:
                BUG();
        }
                goto out;
 
        for (i = 1; i < adev->sdma.num_instances; i++) {
-               if (adev->asic_type == CHIP_SIENNA_CICHLID) {
+               if (adev->asic_type == CHIP_SIENNA_CICHLID ||
+                   adev->asic_type == CHIP_NAVY_FLOUNDER) {
                        memcpy((void*)&adev->sdma.instance[i],
                               (void*)&adev->sdma.instance[0],
                               sizeof(struct amdgpu_sdma_instance));
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       adev->sdma.num_instances = 4;
+       switch (adev->asic_type) {
+       case CHIP_SIENNA_CICHLID:
+               adev->sdma.num_instances = 4;
+               break;
+       case CHIP_NAVY_FLOUNDER:
+               adev->sdma.num_instances = 2;
+               break;
+       default:
+               break;
+       }
 
        sdma_v5_2_set_ring_funcs(adev);
        sdma_v5_2_set_buffer_funcs(adev);
 
        switch (adev->asic_type) {
        case CHIP_SIENNA_CICHLID:
+       case CHIP_NAVY_FLOUNDER:
                sdma_v5_2_update_medium_grain_clock_gating(adev,
                                state == AMD_CG_STATE_GATE ? true : false);
                sdma_v5_2_update_medium_grain_light_sleep(adev,