Loading drivers/bus/mhi/controllers/mhi_qcom.c +24 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,19 @@ #include <linux/mhi.h> #include "mhi_qcom.h" struct firmware_info { unsigned int dev_id; const char *fw_image; const char *edl_image; }; static const struct firmware_info firmware_table[] = { {.dev_id = 0x305, .fw_image = "sdx50m/sbl1.mbn"}, {.dev_id = 0x304, .fw_image = "sbl.mbn", .edl_image = "edl.mbn"}, /* default, set to debug.mbn */ {.fw_image = "debug.mbn"}, }; void mhi_deinit_pci_dev(struct mhi_controller *mhi_cntrl) { struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl); Loading Loading @@ -332,9 +345,10 @@ static struct mhi_controller *mhi_register_controller(struct pci_dev *pci_dev) struct mhi_controller *mhi_cntrl; struct mhi_dev *mhi_dev; struct device_node *of_node = pci_dev->dev.of_node; const struct firmware_info *firmware_info; bool use_bb; u64 addr_win[2]; int ret; int ret, i; if (!of_node) return ERR_PTR(-ENODEV); Loading Loading @@ -404,6 +418,15 @@ static struct mhi_controller *mhi_register_controller(struct pci_dev *pci_dev) if (ret) goto error_register; for (i = 0; i < ARRAY_SIZE(firmware_table); i++) { firmware_info = firmware_table + i; if (mhi_cntrl->dev_id == firmware_info->dev_id) break; } mhi_cntrl->fw_image = firmware_info->fw_image; mhi_cntrl->edl_image = firmware_info->edl_image; return mhi_cntrl; error_register: Loading drivers/bus/mhi/core/mhi_boot.c +9 −7 Original line number Diff line number Diff line Loading @@ -275,7 +275,7 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, int i, ret; void __iomem *base = mhi_cntrl->bhi; rwlock_t *pm_lock = &mhi_cntrl->pm_lock; dma_addr_t phys = dma_map_single(mhi_cntrl->dev, buf, size, dma_addr_t dma_addr = dma_map_single(mhi_cntrl->dev, buf, size, DMA_TO_DEVICE); struct { char *name; Loading @@ -288,7 +288,7 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, { NULL }, }; if (dma_mapping_error(mhi_cntrl->dev, phys)) if (dma_mapping_error(mhi_cntrl->dev, dma_addr)) return -ENOMEM; MHI_LOG("Starting BHI programming\n"); Loading @@ -301,8 +301,10 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, } mhi_write_reg(mhi_cntrl, base, BHI_STATUS, 0); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_HIGH, upper_32_bits(phys)); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_LOW, lower_32_bits(phys)); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_HIGH, upper_32_bits(dma_addr)); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_LOW, lower_32_bits(dma_addr)); mhi_write_reg(mhi_cntrl, base, BHI_IMGSIZE, size); mhi_cntrl->session_id = prandom_u32() & BHI_TXDB_SEQNUM_BMSK; mhi_write_reg(mhi_cntrl, base, BHI_IMGTXDB, mhi_cntrl->session_id); Loading Loading @@ -337,12 +339,12 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, goto invalid_pm_state; } dma_unmap_single(mhi_cntrl->dev, phys, size, DMA_TO_DEVICE); dma_unmap_single(mhi_cntrl->dev, dma_addr, size, DMA_TO_DEVICE); return (tx_status == BHI_STATUS_SUCCESS) ? 0 : -ETIMEDOUT; invalid_pm_state: dma_unmap_single(mhi_cntrl->dev, phys, size, DMA_TO_DEVICE); dma_unmap_single(mhi_cntrl->dev, dma_addr, size, DMA_TO_DEVICE); return -EIO; } Loading Loading
drivers/bus/mhi/controllers/mhi_qcom.c +24 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,19 @@ #include <linux/mhi.h> #include "mhi_qcom.h" struct firmware_info { unsigned int dev_id; const char *fw_image; const char *edl_image; }; static const struct firmware_info firmware_table[] = { {.dev_id = 0x305, .fw_image = "sdx50m/sbl1.mbn"}, {.dev_id = 0x304, .fw_image = "sbl.mbn", .edl_image = "edl.mbn"}, /* default, set to debug.mbn */ {.fw_image = "debug.mbn"}, }; void mhi_deinit_pci_dev(struct mhi_controller *mhi_cntrl) { struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl); Loading Loading @@ -332,9 +345,10 @@ static struct mhi_controller *mhi_register_controller(struct pci_dev *pci_dev) struct mhi_controller *mhi_cntrl; struct mhi_dev *mhi_dev; struct device_node *of_node = pci_dev->dev.of_node; const struct firmware_info *firmware_info; bool use_bb; u64 addr_win[2]; int ret; int ret, i; if (!of_node) return ERR_PTR(-ENODEV); Loading Loading @@ -404,6 +418,15 @@ static struct mhi_controller *mhi_register_controller(struct pci_dev *pci_dev) if (ret) goto error_register; for (i = 0; i < ARRAY_SIZE(firmware_table); i++) { firmware_info = firmware_table + i; if (mhi_cntrl->dev_id == firmware_info->dev_id) break; } mhi_cntrl->fw_image = firmware_info->fw_image; mhi_cntrl->edl_image = firmware_info->edl_image; return mhi_cntrl; error_register: Loading
drivers/bus/mhi/core/mhi_boot.c +9 −7 Original line number Diff line number Diff line Loading @@ -275,7 +275,7 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, int i, ret; void __iomem *base = mhi_cntrl->bhi; rwlock_t *pm_lock = &mhi_cntrl->pm_lock; dma_addr_t phys = dma_map_single(mhi_cntrl->dev, buf, size, dma_addr_t dma_addr = dma_map_single(mhi_cntrl->dev, buf, size, DMA_TO_DEVICE); struct { char *name; Loading @@ -288,7 +288,7 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, { NULL }, }; if (dma_mapping_error(mhi_cntrl->dev, phys)) if (dma_mapping_error(mhi_cntrl->dev, dma_addr)) return -ENOMEM; MHI_LOG("Starting BHI programming\n"); Loading @@ -301,8 +301,10 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, } mhi_write_reg(mhi_cntrl, base, BHI_STATUS, 0); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_HIGH, upper_32_bits(phys)); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_LOW, lower_32_bits(phys)); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_HIGH, upper_32_bits(dma_addr)); mhi_write_reg(mhi_cntrl, base, BHI_IMGADDR_LOW, lower_32_bits(dma_addr)); mhi_write_reg(mhi_cntrl, base, BHI_IMGSIZE, size); mhi_cntrl->session_id = prandom_u32() & BHI_TXDB_SEQNUM_BMSK; mhi_write_reg(mhi_cntrl, base, BHI_IMGTXDB, mhi_cntrl->session_id); Loading Loading @@ -337,12 +339,12 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, goto invalid_pm_state; } dma_unmap_single(mhi_cntrl->dev, phys, size, DMA_TO_DEVICE); dma_unmap_single(mhi_cntrl->dev, dma_addr, size, DMA_TO_DEVICE); return (tx_status == BHI_STATUS_SUCCESS) ? 0 : -ETIMEDOUT; invalid_pm_state: dma_unmap_single(mhi_cntrl->dev, phys, size, DMA_TO_DEVICE); dma_unmap_single(mhi_cntrl->dev, dma_addr, size, DMA_TO_DEVICE); return -EIO; } Loading