Note that with GenerateMips:
If the base resource was not created with D3D11_BIND_RENDER_TARGET and D3D11_RESOURCE_MISC_GENERATE_MIPS, the call to GenerateMips has no effect.
(From the MSDN doc link).
If you want to create mipmaps without FilterTexture, you should create an array of D3D11_SUBRESOURCE_DATA, one array element for each miplevel, set pSysMem to the data for each miplevel, set SysMemPitch to the pitch for each miplevel, and (assuming Texture2D) SysMemSlicePitch to 0. Then pass that array as the second param to your CreateTexture2D call. There's nothing special you need to do to indicate the end of the array; CreateTexture2D is clever enough to realize when it hits the 1x1 sized level (or the MipLevels member of your D3D11_TEXTURE2D_DESC) that there are no more.
Since you have the raw image data, that becomes the pSysMem for your miplevel 0. For other miplevels you filter it down to the correct size for the level, then use the filtered down data as the pSysMem for those levels.
That means having to allocate and subsequently free a chunk of data for each level, so having a memory manager that lets you release it all in one fell swoop is a useful, but by no means essential, thing to have.
This method has the bonus that it will work just fine even with immutable textures (it is in fact the only method that will work with immutable textures).