#define PHUB_STATUS 0x00 /* Status Register offset */ #define PHUB_CONTROL 0x04 /* Control Register offset */ #define PHUB_TIMEOUT 0x05 /* Time out value for Status Register */ #define PCH_PHUB_ROM_WRITE_ENABLE 0x01 /* Enabling for writing ROM */ #define PCH_PHUB_ROM_WRITE_DISABLE 0x00 /* Disabling for writing ROM */ #define PCH_PHUB_MAC_START_ADDR_EG20T 0x14 /* MAC data area start address
offset */ #define PCH_PHUB_MAC_START_ADDR_ML7223 0x20C /* MAC data area start address
offset */ #define PCH_PHUB_ROM_START_ADDR_EG20T 0x80 /* ROM data area start address offset
(Intel EG20T PCH)*/ #define PCH_PHUB_ROM_START_ADDR_ML7213 0x400 /* ROM data area start address offset(LAPIS Semicon ML7213)
*/ #define PCH_PHUB_ROM_START_ADDR_ML7223 0x400 /* ROM data area start address offset(LAPIS Semicon ML7223)
*/
/* MAX number of INT_REDUCE_CONTROL registers */ #define MAX_NUM_INT_REDUCE_CONTROL_REG 128 #define PCI_DEVICE_ID_PCH1_PHUB 0x8801 #define PCH_MINOR_NOS 1 #define CLKCFG_CAN_50MHZ 0x12000000 #define CLKCFG_CANCLK_MASK 0xFF000000 #define CLKCFG_UART_MASK 0xFFFFFF
iowrite32(chip->phub_id_reg, p + PCH_PHUB_ID_REG);
iowrite32(chip->q_pri_val_reg, p + PCH_PHUB_QUEUE_PRI_VAL_REG);
iowrite32(chip->rc_q_maxsize_reg, p + PCH_PHUB_RC_QUEUE_MAXSIZE_REG);
iowrite32(chip->bri_q_maxsize_reg, p + PCH_PHUB_BRI_QUEUE_MAXSIZE_REG);
iowrite32(chip->comp_resp_timeout_reg,
p + PCH_PHUB_COMP_RESP_TIMEOUT_REG);
iowrite32(chip->bus_slave_control_reg,
p + PCH_PHUB_BUS_SLAVE_CONTROL_REG);
iowrite32(chip->deadlock_avoid_type_reg,
p + PCH_PHUB_DEADLOCK_AVOID_TYPE_REG);
iowrite32(chip->intpin_reg_wpermit_reg0,
p + PCH_PHUB_INTPIN_REG_WPERMIT_REG0);
iowrite32(chip->intpin_reg_wpermit_reg1,
p + PCH_PHUB_INTPIN_REG_WPERMIT_REG1);
iowrite32(chip->intpin_reg_wpermit_reg2,
p + PCH_PHUB_INTPIN_REG_WPERMIT_REG2);
iowrite32(chip->intpin_reg_wpermit_reg3,
p + PCH_PHUB_INTPIN_REG_WPERMIT_REG3);
dev_dbg(&pdev->dev, "%s : " "chip->phub_id_reg=%x, " "chip->q_pri_val_reg=%x, " "chip->rc_q_maxsize_reg=%x, " "chip->bri_q_maxsize_reg=%x, " "chip->comp_resp_timeout_reg=%x, " "chip->bus_slave_control_reg=%x, " "chip->deadlock_avoid_type_reg=%x, " "chip->intpin_reg_wpermit_reg0=%x, " "chip->intpin_reg_wpermit_reg1=%x, " "chip->intpin_reg_wpermit_reg2=%x, " "chip->intpin_reg_wpermit_reg3=%x\n", __func__,
chip->phub_id_reg,
chip->q_pri_val_reg,
chip->rc_q_maxsize_reg,
chip->bri_q_maxsize_reg,
chip->comp_resp_timeout_reg,
chip->bus_slave_control_reg,
chip->deadlock_avoid_type_reg,
chip->intpin_reg_wpermit_reg0,
chip->intpin_reg_wpermit_reg1,
chip->intpin_reg_wpermit_reg2,
chip->intpin_reg_wpermit_reg3); for (i = 0; i < MAX_NUM_INT_REDUCE_CONTROL_REG; i++) {
iowrite32(chip->int_reduce_control_reg[i],
p + PCH_PHUB_INT_REDUCE_CONTROL_REG_BASE + 4 * i);
dev_dbg(&pdev->dev, "%s : " "chip->int_reduce_control_reg[%d]=%x\n",
__func__, i, chip->int_reduce_control_reg[i]);
}
iowrite32(chip->clkcfg_reg, p + CLKCFG_REG_OFFSET); if ((chip->ioh_type == 2) || (chip->ioh_type == 4))
iowrite32(chip->funcsel_reg, p + FUNCSEL_REG_OFFSET);
}
/** * pch_phub_read_serial_rom() - Reading Serial ROM * @chip: Pointer to the PHUB register structure * @offset_address: Serial ROM offset address to read. * @data: Read buffer for specified Serial ROM value.
*/ staticvoid pch_phub_read_serial_rom(struct pch_phub_reg *chip, unsignedint offset_address, u8 *data)
{ void __iomem *mem_addr = chip->pch_phub_extrom_base_address +
offset_address;
*data = ioread8(mem_addr);
}
/** * pch_phub_write_serial_rom() - Writing Serial ROM * @chip: Pointer to the PHUB register structure * @offset_address: Serial ROM offset address. * @data: Serial ROM value to write.
*/ staticint pch_phub_write_serial_rom(struct pch_phub_reg *chip, unsignedint offset_address, u8 data)
{ void __iomem *mem_addr = chip->pch_phub_extrom_base_address +
(offset_address & PCH_WORD_ADDR_MASK); int i; unsignedint word_data; unsignedint pos; unsignedint mask;
pos = (offset_address % 4) * 8;
mask = ~(0xFF << pos);
/** * pch_phub_read_serial_rom_val() - Read Serial ROM value * @chip: Pointer to the PHUB register structure * @offset_address: Serial ROM address offset value. * @data: Serial ROM value to read.
*/ staticvoid pch_phub_read_serial_rom_val(struct pch_phub_reg *chip, unsignedint offset_address, u8 *data)
{ unsignedint mem_addr;
/** * pch_phub_write_serial_rom_val() - writing Serial ROM value * @chip: Pointer to the PHUB register structure * @offset_address: Serial ROM address offset value. * @data: Serial ROM value.
*/ staticint pch_phub_write_serial_rom_val(struct pch_phub_reg *chip, unsignedint offset_address, u8 data)
{ int retval; unsignedint mem_addr;
/* pch_phub_gbe_serial_rom_conf - makes Serial ROM header format configuration * for Gigabit Ethernet MAC address
*/ staticint pch_phub_gbe_serial_rom_conf(struct pch_phub_reg *chip)
{ int retval;
/* pch_phub_gbe_serial_rom_conf_mp - makes SerialROM header format configuration * for Gigabit Ethernet MAC address
*/ staticint pch_phub_gbe_serial_rom_conf_mp(struct pch_phub_reg *chip)
{ int retval;
u32 offset_addr;
/** * pch_phub_read_gbe_mac_addr() - Read Gigabit Ethernet MAC address * @chip: Pointer to the PHUB register structure * @data: Buffer of the Gigabit Ethernet MAC address value.
*/ staticvoid pch_phub_read_gbe_mac_addr(struct pch_phub_reg *chip, u8 *data)
{ int i; for (i = 0; i < ETH_ALEN; i++)
pch_phub_read_serial_rom_val(chip, i, &data[i]);
}
/** * pch_phub_write_gbe_mac_addr() - Write MAC address * @chip: Pointer to the PHUB register structure * @data: Gigabit Ethernet MAC address value.
*/ staticint pch_phub_write_gbe_mac_addr(struct pch_phub_reg *chip, u8 *data)
{ int retval; int i;
if ((chip->ioh_type == 1) || (chip->ioh_type == 5)) /* EG20T or ML7831*/
retval = pch_phub_gbe_serial_rom_conf(chip); else/* ML7223 */
retval = pch_phub_gbe_serial_rom_conf_mp(chip); if (retval) return retval;
for (i = 0; i < ETH_ALEN; i++) {
retval = pch_phub_write_serial_rom_val(chip, i, data[i]); if (retval) return retval;
}
/* set the prefech value */
iowrite32(prefetch, chip->pch_phub_base_address + 0x14); /* set the interrupt delay value */
iowrite32(0x25, chip->pch_phub_base_address + 0x44);
chip->pch_opt_rom_start_address = PCH_PHUB_ROM_START_ADDR_EG20T;
chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_EG20T;
/* quirk for MIPS Boston platform */ if (pdev->dev.of_node) { if (of_machine_is_compatible("img,boston")) {
pch_phub_read_modify_write_reg(chip,
(unsignedint)CLKCFG_REG_OFFSET,
CLKCFG_UART_25MHZ,
CLKCFG_UART_MASK);
}
}
} elseif (id->driver_data == 2) { /* ML7213 IOH */
ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto err_sysfs_create; /* set the prefech value * Device2(USB OHCI #1/ USB EHCI #1/ USB Device):a * Device4(SDIO #0,1,2):f * Device6(SATA 2):f * Device8(USB OHCI #0/ USB EHCI #0):a
*/
iowrite32(0x000affa0, chip->pch_phub_base_address + 0x14);
chip->pch_opt_rom_start_address =\
PCH_PHUB_ROM_START_ADDR_ML7213;
} elseif (id->driver_data == 3) { /* ML7223 IOH Bus-m*/ /* set the prefech value * Device8(GbE)
*/
iowrite32(0x000a0000, chip->pch_phub_base_address + 0x14); /* set the interrupt delay value */
iowrite32(0x25, chip->pch_phub_base_address + 0x140);
chip->pch_opt_rom_start_address =\
PCH_PHUB_ROM_START_ADDR_ML7223;
chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_ML7223;
} elseif (id->driver_data == 4) { /* ML7223 IOH Bus-n*/
ret = sysfs_create_file(&pdev->dev.kobj,
&dev_attr_pch_mac.attr); if (ret) goto err_sysfs_create;
ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto exit_bin_attr; /* set the prefech value * Device2(USB OHCI #0,1,2,3/ USB EHCI #0):a * Device4(SDIO #0,1):f * Device6(SATA 2):f
*/
iowrite32(0x0000ffa0, chip->pch_phub_base_address + 0x14);
chip->pch_opt_rom_start_address =\
PCH_PHUB_ROM_START_ADDR_ML7223;
chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_ML7223;
} elseif (id->driver_data == 5) { /* ML7831 */
ret = sysfs_create_file(&pdev->dev.kobj,
&dev_attr_pch_mac.attr); if (ret) goto err_sysfs_create;
ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto exit_bin_attr;
/* set the prefech value */
iowrite32(0x000affaa, chip->pch_phub_base_address + 0x14); /* set the interrupt delay value */
iowrite32(0x25, chip->pch_phub_base_address + 0x44);
chip->pch_opt_rom_start_address = PCH_PHUB_ROM_START_ADDR_EG20T;
chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_EG20T;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.